[cfe-commits] r66124 - in /cfe/trunk/lib/Parse: ParseDecl.cpp ParseDeclCXX.cpp

Chris Lattner sabre at nondot.org
Wed Mar 4 18:25:03 PST 2009


Author: lattner
Date: Wed Mar  4 20:25:03 2009
New Revision: 66124

URL: http://llvm.org/viewvc/llvm-project?rev=66124&view=rev
Log:
Include struct context info for parser/sema crashes.  This
gives us:

Stack dump:
0.	using-directive.cpp:26:16: in compound statement ('{}')
1.	using-directive.cpp:26:16: parsing function body 'A::K1::foo'
2.	using-directive.cpp:25:3: parsing struct/union/class body 'A::K1'
3.	using-directive.cpp:5:1: parsing namespace 'A'
4.	clang using-directive.cpp 
Abort

for code like:

namespace A {
..
  class K1 {
    void foo() { <<crash>>


Modified:
    cfe/trunk/lib/Parse/ParseDecl.cpp
    cfe/trunk/lib/Parse/ParseDeclCXX.cpp

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=66124&r1=66123&r2=66124&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Wed Mar  4 20:25:03 2009
@@ -1096,6 +1096,10 @@
 ///
 void Parser::ParseStructUnionBody(SourceLocation RecordLoc,
                                   unsigned TagType, DeclTy *TagDecl) {
+  PrettyStackTraceDecl CrashInfo(TagDecl, RecordLoc, Actions,
+                                 PP.getSourceManager(),
+                                 "parsing struct/union body");
+  
   SourceLocation LBraceLoc = ConsumeBrace();
   
   ParseScope StructScope(this, Scope::ClassScope|Scope::DeclScope);

Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=66124&r1=66123&r2=66124&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Wed Mar  4 20:25:03 2009
@@ -793,6 +793,10 @@
          TagType == DeclSpec::TST_union  ||
          TagType == DeclSpec::TST_class) && "Invalid TagType!");
 
+  PrettyStackTraceDecl CrashInfo(TagDecl, RecordLoc, Actions,
+                                 PP.getSourceManager(),
+                                 "parsing struct/union/class body");
+  
   SourceLocation LBraceLoc = ConsumeBrace();
 
   if (!CurScope->isClassScope() && // Not about to define a nested class.





More information about the cfe-commits mailing list