r224394 - PR21909: Don't try (and crash) to generate debug info for explicit instantiations of explicit specializations.

David Blaikie dblaikie at gmail.com
Tue Dec 16 15:49:18 PST 2014


Author: dblaikie
Date: Tue Dec 16 17:49:18 2014
New Revision: 224394

URL: http://llvm.org/viewvc/llvm-project?rev=224394&view=rev
Log:
PR21909: Don't try (and crash) to generate debug info for explicit instantiations of explicit specializations.

Modified:
    cfe/trunk/lib/CodeGen/CodeGenModule.cpp
    cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp

Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=224394&r1=224393&r2=224394&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue Dec 16 17:49:18 2014
@@ -3283,7 +3283,8 @@ void CodeGenModule::EmitTopLevelDecl(Dec
   case Decl::ClassTemplateSpecialization: {
     const auto *Spec = cast<ClassTemplateSpecializationDecl>(D);
     if (DebugInfo &&
-        Spec->getSpecializationKind() == TSK_ExplicitInstantiationDefinition)
+        Spec->getSpecializationKind() == TSK_ExplicitInstantiationDefinition &&
+        Spec->hasDefinition())
       DebugInfo->completeTemplateDefinition(*Spec);
     break;
   }

Modified: cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp?rev=224394&r1=224393&r2=224394&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/debug-info-template-explicit-specialization.cpp Tue Dec 16 17:49:18 2014
@@ -91,3 +91,11 @@ struct j {
 extern template class j<int>;
 j<int> jj;
 // CHECK: ; [ DW_TAG_structure_type ] [j<int, int>]
+
+template <typename T>
+struct k {
+};
+template <>
+struct k<int>;
+template struct k<int>;
+// CHECK-NOT: ; [ DW_TAG_structure_type ] [k<int>]





More information about the cfe-commits mailing list