]> granicus.if.org Git - clang/commitdiff
Add assertions to verify that we are not trying to instantiate a
authorSean Hunt <scshunt@csclub.uwaterloo.ca>
Fri, 27 May 2011 20:00:14 +0000 (20:00 +0000)
committerSean Hunt <scshunt@csclub.uwaterloo.ca>
Fri, 27 May 2011 20:00:14 +0000 (20:00 +0000)
nontemplate in Sema::InstantiateTemplateDecl.

This should make the issue in PR10026 more visible, although it's not
going to fix it because something is violating this precondition.

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

lib/Sema/SemaTemplateInstantiateDecl.cpp

index e9c09c39f33d72a328298988654e5b34795acce0..bf1e4996ec6db58d613457c91abef14bdd7a4a11 100644 (file)
@@ -2317,16 +2317,18 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
 
   // Find the function body that we'll be substituting.
   const FunctionDecl *PatternDecl = Function->getTemplateInstantiationPattern();
-  Stmt *Pattern = 0;
-  if (PatternDecl) {
-    Pattern = PatternDecl->getBody(PatternDecl);
-    if (!Pattern)
-      // Try to find a defaulted definition
-      PatternDecl->isDefined(PatternDecl);
+  assert(PatternDecl && "instantiating a non-template");
+
+  Stmt *Pattern = PatternDecl->getBody(PatternDecl);
+  assert(PatternDecl && "template definition is not a template");
+  if (!Pattern) {
+    // Try to find a defaulted definition
+    PatternDecl->isDefined(PatternDecl);
   }
+  assert(PatternDecl && "template definition is not a template");
 
   // Postpone late parsed template instantiations.
-  if (PatternDecl && PatternDecl->isLateTemplateParsed() &&
+  if (PatternDecl->isLateTemplateParsed() &&
       !LateTemplateParser) {
     PendingInstantiations.push_back(
       std::make_pair(Function, PointOfInstantiation));
@@ -2335,13 +2337,13 @@ void Sema::InstantiateFunctionDefinition(SourceLocation PointOfInstantiation,
 
   // Call the LateTemplateParser callback if there a need to late parse
   // a templated function definition. 
-  if (!Pattern && PatternDecl && PatternDecl->isLateTemplateParsed() &&
+  if (!Pattern && PatternDecl->isLateTemplateParsed() &&
       LateTemplateParser) {
     LateTemplateParser(OpaqueParser, PatternDecl);
     Pattern = PatternDecl->getBody(PatternDecl);
   }
 
-  if (!Pattern && PatternDecl && !PatternDecl->isDefaulted()) {
+  if (!Pattern && !PatternDecl->isDefaulted()) {
     if (DefinitionRequired) {
       if (Function->getPrimaryTemplate())
         Diag(PointOfInstantiation,