llvm-project/clang/test/DebugInfo/CXX/gline-tables-only-codeview.cpp
Michael Buch f2aedc21f9
[clang][DebugInfo][test] Move debug-info tests from CodeGenCXX to DebugInfo directory (#154538)
This patch works towards consolidating all Clang debug-info into the
`clang/test/DebugInfo` directory
(https://discourse.llvm.org/t/clang-test-location-of-clang-debug-info-tests/87958).

Here we move only the `clang/test/CodeGenCXX` tests. I created a `CXX`
subdirectory for now because many of the tests I checked actually did
seem C++-specific. There is probably overlap between the `Generic` and
`CXX` subdirectory, but I haven't gone through and audited them all.

The list of files i came up with is:
1. searched for anything with `*debug-info*` in the filename
2. searched for occurrences of `debug-info-kind` in the tests

There's a couple of tests in `clang/test/CodeGenCXX` that still set
`-debug-info-kind`. They probably don't need to do that, but I'm not
changing that as part of this PR.
2025-08-21 09:26:08 +01:00

60 lines
2.3 KiB
C++

// RUN: %clang_cc1 %s -triple x86_64-windows-msvc -gcodeview \
// RUN: -debug-info-kind=line-tables-only -emit-llvm -o - | FileCheck %s
// Checks that clang with "-gline-tables-only" with CodeView emits some debug
// info for variables and types when they appear in function scopes.
namespace NS {
struct C {
void m() {}
// Test externally visible lambda.
void lambda2() { []() {}(); }
// Test naming for function parameters.
void lambda_params(int x = [](){ return 0; }(), int y = [](){ return 1; }()) {}
};
void f() {}
}
// Test non- externally visible lambda.
auto lambda1 = []() { return 1; };
NS::C c;
void test() {
// CHECK: !DISubprogram(name: "f", scope: ![[NS:[0-9]+]],
// CHECK-SAME: type: ![[F:[0-9]+]]
// CHECK: ![[NS]] = !DINamespace(name: "NS", scope: null)
// CHECK: ![[F]] = !DISubroutineType(types: ![[FTYPE:[0-9]+]])
// CHECK: ![[FTYPE]] = !{null}
NS::f();
// CHECK: ![[M:[0-9]+]] = distinct !DISubprogram(name: "m", scope: ![[C:[0-9]+]],
// CHECK-SAME: type: ![[MTYPE:[0-9]+]],
// CHECK: ![[C]] = !DICompositeType(tag: DW_TAG_structure_type, name: "C",
// CHECK-SAME: flags: DIFlagFwdDecl
// CHECK-NOT: identifier
// CHECK: ![[MTYPE]] = !DISubroutineType({{.*}}types: !{{.*}})
c.m();
// CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA0:[0-9]+]],
// CHECK: ![[LAMBDA0]] = !DICompositeType(tag: DW_TAG_class_type,
// CHECK-SAME: name: "<lambda_0>",
// CHECK-SAME: flags: DIFlagFwdDecl
lambda1();
// CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1_1:[0-9]+]],
// CHECK: ![[LAMBDA1_1]] = !DICompositeType(tag: DW_TAG_class_type,
// CHECK-SAME: name: "<lambda_1_1>",
// CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA2_1:[0-9]+]],
// CHECK: ![[LAMBDA2_1]] = !DICompositeType(tag: DW_TAG_class_type,
// CHECK-SAME: name: "<lambda_2_1>",
c.lambda_params();
// CHECK: !DISubprogram(name: "operator()", scope: ![[LAMBDA1:[0-9]+]],
// CHECK: ![[LAMBDA1]] = !DICompositeType(tag: DW_TAG_class_type,
// CHECK-SAME: name: "<lambda_1>",
// CHECK-SAME: flags: DIFlagFwdDecl
c.lambda2();
}