PR42205: DebugInfio: Do not attempt to emit debug info metadata for static member...
authorDavid Blaikie <dblaikie@gmail.com>
Mon, 17 Jun 2019 19:40:52 +0000 (19:40 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Mon, 17 Jun 2019 19:40:52 +0000 (19:40 +0000)
Would cause a crash in an attempt to create the type for the still
unresolved 'auto' in the partial specialization (& even without the use
of 'auto', the expression would be value dependent &
crash/assertion-fail there).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@363606 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp
test/CodeGenCXX/debug-info-var-template-partial-spec.cpp [new file with mode: 0644]

index af9bac9b388fe277d00a034468f9d08ea06f3a18..a53ca8f5243cb8ac97d5acf95aee788d507bd2a7 100644 (file)
@@ -1410,6 +1410,9 @@ void CGDebugInfo::CollectRecordFields(
             isa<VarTemplateSpecializationDecl>(V))
           continue;
 
+        if (isa<VarTemplatePartialSpecializationDecl>(V))
+          continue;
+
         // Reuse the existing static member declaration if one exists
         auto MI = StaticDataMemberCache.find(V->getCanonicalDecl());
         if (MI != StaticDataMemberCache.end()) {
diff --git a/test/CodeGenCXX/debug-info-var-template-partial-spec.cpp b/test/CodeGenCXX/debug-info-var-template-partial-spec.cpp
new file mode 100644 (file)
index 0000000..675e328
--- /dev/null
@@ -0,0 +1,13 @@
+// RUN: %clang_cc1 %s -std=c++14 -debug-info-kind=limited -emit-llvm -o - | FileCheck %s
+
+// CHECK: ![[empty:[0-9]+]] = !{}
+
+// CHECK: distinct !DICompositeType(tag: DW_TAG_structure_type, name: "B",
+// CHECK-SAME: elements: ![[empty]]
+
+struct B {
+  template <typename... e>
+  static const int d = 0;
+  template <typename e>
+  static const auto d<e> = d<e, e>;
+} c;