[clang] bcfdae1 - [clang][DebugInfo][test] Add tests for C++20 non-type template parameters (#127056)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 13 15:08:34 PST 2025


Author: Michael Buch
Date: 2025-02-13T23:08:30Z
New Revision: bcfdae120ea7a03176e41d17e5efe4692d64f807

URL: https://github.com/llvm/llvm-project/commit/bcfdae120ea7a03176e41d17e5efe4692d64f807
DIFF: https://github.com/llvm/llvm-project/commit/bcfdae120ea7a03176e41d17e5efe4692d64f807.diff

LOG: [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 (https://github.com/llvm/llvm-project/pull/78041). Previously, not
emitting a `value`/`defaulted` for such template argument nodes didn't
fail any tests.

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/clang/test/CodeGenCXX/debug-info-template-parameter.cpp b/clang/test/CodeGenCXX/debug-info-template-parameter.cpp
index 360cc1fb30784..b2ca54a02f1c9 100644
--- a/clang/test/CodeGenCXX/debug-info-template-parameter.cpp
+++ b/clang/test/CodeGenCXX/debug-info-template-parameter.cpp
@@ -4,6 +4,7 @@
 // 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
 // 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
 // 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
+// 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
 
 // CHECK: DILocalVariable(name: "f1", {{.*}}, type: ![[TEMPLATE_TYPE:[0-9]+]]
 // CHECK: [[TEMPLATE_TYPE]] = {{.*}}!DICompositeType({{.*}}, templateParams: ![[F1_TYPE:[0-9]+]]
@@ -50,6 +51,29 @@ template <template <typename T> class CT = bar>
 class baz {
 };
 
+#ifdef CXX20
+struct non_empty { int mem; int mem2; } ne;
+
+template<float f = -1.5f, double d = 5.2, int * p = &ne.mem2>
+class nttp {};
+nttp<> n1;
+
+// CHECK-CXX20:      DIGlobalVariable(name: "n1", {{.*}}, type: ![[NTTP_TYPE:[0-9]+]]
+// CHECK-CXX20:      [[NTTP_TYPE]] = {{.*}}!DICompositeType({{.*}}name: "nttp
+// CHECK-CXX20-SAME:                                        templateParams: ![[NTTP_TEMPLATES:[0-9]+]]
+// CHECK-CXX20:      [[NTTP_TEMPLATES]] = !{![[FIRST:[0-9]+]], ![[SECOND:[0-9]+]], ![[THIRD:[0-9]+]]}
+// CHECK-CXX20:      [[FIRST]] = !DITemplateValueParameter(name: "f"
+// CHECK-CXX20-SAME:                                       defaulted: true
+// CHECK-CXX20-SAME:                                       value: float -1.500000e+00
+// CHECK-CXX20:      [[SECOND]] = !DITemplateValueParameter(name: "d"
+// CHECK-CXX20-SAME:                                        defaulted: true
+// CHECK-CXX20-SAME:                                        value: double 5.200000e+00
+// CHECK-CXX20:      [[THIRD]] = !DITemplateValueParameter(name: "p"
+// CHECK-CXX20-SAME:                                       defaulted: true
+// CHECK-CXX20-SAME:                                       value: ptr getelementptr (i8, ptr @ne, i64 4)
+
+#endif // CXX20
+
 int main() {
   foo<int, 6, false, 3, double> f1;
   foo<> f2;


        


More information about the cfe-commits mailing list