Skip to content

Commit bcfdae1

Browse files
authored
[clang][DebugInfo][test] Add tests for C++20 non-type template parameters (#127056)
This exercises the codepath where we create `DITemplateValueParameter`s whose `TemplateArgument::ArgKind` is `StructuralValue`, which was added in (#78041). Previously, not emitting a `value`/`defaulted` for such template argument nodes didn't fail any tests.
1 parent 415607e commit bcfdae1

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

clang/test/CodeGenCXX/debug-info-template-parameter.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// RUN: %clang_cc1 -emit-llvm %std_cxx11-14 -dwarf-version=5 -triple x86_64 %s -O0 -disable-llvm-passes -debug-info-kind=standalone -o - | FileCheck %s --check-prefixes=CHECK,PRE17
55
// RUN: %clang_cc1 -emit-llvm %std_cxx17- -dwarf-version=5 -triple x86_64 %s -O0 -disable-llvm-passes -debug-info-kind=standalone -o - | FileCheck %s --check-prefixes=CHECK,CXX17
66
// RUN: %clang_cc1 -emit-llvm %std_cxx17- -dwarf-version=4 -triple x86_64 %s -O0 -disable-llvm-passes -debug-info-kind=standalone -o - | FileCheck %s --check-prefixes=CHECK,CXX17
7+
// RUN: %clang_cc1 -emit-llvm %std_cxx20- -dwarf-version=5 -DCXX20=1 -triple x86_64 %s -O0 -disable-llvm-passes -debug-info-kind=standalone -o - | FileCheck %s --check-prefix=CHECK-CXX20
78

89
// CHECK: DILocalVariable(name: "f1", {{.*}}, type: ![[TEMPLATE_TYPE:[0-9]+]]
910
// CHECK: [[TEMPLATE_TYPE]] = {{.*}}!DICompositeType({{.*}}, templateParams: ![[F1_TYPE:[0-9]+]]
@@ -50,6 +51,29 @@ template <template <typename T> class CT = bar>
5051
class baz {
5152
};
5253

54+
#ifdef CXX20
55+
struct non_empty { int mem; int mem2; } ne;
56+
57+
template<float f = -1.5f, double d = 5.2, int * p = &ne.mem2>
58+
class nttp {};
59+
nttp<> n1;
60+
61+
// CHECK-CXX20: DIGlobalVariable(name: "n1", {{.*}}, type: ![[NTTP_TYPE:[0-9]+]]
62+
// CHECK-CXX20: [[NTTP_TYPE]] = {{.*}}!DICompositeType({{.*}}name: "nttp
63+
// CHECK-CXX20-SAME: templateParams: ![[NTTP_TEMPLATES:[0-9]+]]
64+
// CHECK-CXX20: [[NTTP_TEMPLATES]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]]}
65+
// CHECK-CXX20: [[FIRST]] = !DITemplateValueParameter(name: "f"
66+
// CHECK-CXX20-SAME: defaulted: true
67+
// CHECK-CXX20-SAME: value: float -1.500000e+00
68+
// CHECK-CXX20: [[SECOND]] = !DITemplateValueParameter(name: "d"
69+
// CHECK-CXX20-SAME: defaulted: true
70+
// CHECK-CXX20-SAME: value: double 5.200000e+00
71+
// CHECK-CXX20: [[THIRD]] = !DITemplateValueParameter(name: "p"
72+
// CHECK-CXX20-SAME: defaulted: true
73+
// CHECK-CXX20-SAME: value: ptr getelementptr (i8, ptr @ne, i64 4)
74+
75+
#endif // CXX20
76+
5377
int main() {
5478
foo<int, 6, false, 3, double> f1;
5579
foo<> f2;

0 commit comments

Comments
 (0)