]> granicus.if.org Git - clang/commitdiff
Add pretty stack traces when instantiating functions and static data members.
authorAnders Carlsson <andersca@mac.com>
Tue, 1 Sep 2009 05:12:24 +0000 (05:12 +0000)
committerAnders Carlsson <andersca@mac.com>
Tue, 1 Sep 2009 05:12:24 +0000 (05:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80661 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaTemplateInstantiateDecl.cpp

index 314a99322b05a9b1c59b9a37b312877bfa3e711f..82228143e4bfb77037cd3383c70611207c703799 100644 (file)
@@ -15,6 +15,7 @@
 #include "clang/AST/DeclTemplate.h"
 #include "clang/AST/DeclVisitor.h"
 #include "clang/AST/Expr.h"
+#include "clang/Basic/PrettyStackTrace.h"
 #include "clang/Lex/Preprocessor.h"
 #include "llvm/Support/Compiler.h"
 
@@ -1418,6 +1419,11 @@ void Sema::PerformPendingImplicitInstantiations() {
     
     // Instantiate function definitions
     if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Inst.first)) {
+      PrettyStackTraceActionsDecl CrashInfo(DeclPtrTy::make(Function), 
+                                            Function->getLocation(), *this,
+                                            Context.getSourceManager(),
+                                           "instantiating function definition");
+      
       if (!Function->getBody())
         InstantiateFunctionDefinition(/*FIXME:*/Inst.second, Function, true);
       continue;
@@ -1426,6 +1432,13 @@ void Sema::PerformPendingImplicitInstantiations() {
     // Instantiate static data member definitions.
     VarDecl *Var = cast<VarDecl>(Inst.first);
     assert(Var->isStaticDataMember() && "Not a static data member?");
+
+    PrettyStackTraceActionsDecl CrashInfo(DeclPtrTy::make(Var), 
+                                          Var->getLocation(), *this,
+                                          Context.getSourceManager(),
+                                          "instantiating static data member "
+                                          "definition");
+    
     InstantiateStaticDataMemberDefinition(/*FIXME:*/Inst.second, Var, true);
   }
 }