Inform the consumer on invalid template instantiations.
authorVassil Vassilev <v.g.vassilev@gmail.com>
Tue, 5 Jan 2021 08:11:33 +0000 (08:11 +0000)
committerVassil Vassilev <v.g.vassilev@gmail.com>
Tue, 5 Jan 2021 09:43:38 +0000 (09:43 +0000)
Some clients which want to track state need the information whether a template
was instantiated and made invalid.

Differential revision: https://reviews.llvm.org/D92248

clang/lib/Sema/SemaTemplateInstantiate.cpp

index 39ea9e0..7e0cc2d 100644 (file)
@@ -2846,8 +2846,6 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
   SavedContext.pop();
 
   if (!Instantiation->isInvalidDecl()) {
-    Consumer.HandleTagDeclDefinition(Instantiation);
-
     // Always emit the vtable for an explicit instantiation definition
     // of a polymorphic class template specialization. Otherwise, eagerly
     // instantiate only constexpr virtual functions in preparation for their use
@@ -2859,6 +2857,8 @@ Sema::InstantiateClass(SourceLocation PointOfInstantiation,
                                    /*ConstexprOnly*/ true);
   }
 
+  Consumer.HandleTagDeclDefinition(Instantiation);
+
   return Instantiation->isInvalidDecl();
 }