]> granicus.if.org Git - clang/commitdiff
Include namespace contexts in the virtual stack trace, so we get stuff
authorChris Lattner <sabre@nondot.org>
Thu, 5 Mar 2009 02:09:07 +0000 (02:09 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 5 Mar 2009 02:09:07 +0000 (02:09 +0000)
like this:

Stack dump:
0. using-directive.cpp:9:14: in compound statement ('{}')
1. using-directive.cpp:9:14: parsing function body 'A::B::f'
2. using-directive.cpp:7:3: parsing namespace 'A::B'
3. using-directive.cpp:5:1: parsing namespace 'A'
4. clang using-directive.cpp
Abort

for testcase like like:

namespace A {
  short i;
  namespace B {
    long i;
    void f() { <<crash>>

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

lib/Parse/ParseDeclCXX.cpp

index 9f704d2ea8a5ec70be223acbadb618438d2f1946..7f0aa8f32795f2b89048af5918cea17a4da82e95 100644 (file)
@@ -73,6 +73,10 @@ Parser::DeclTy *Parser::ParseNamespace(unsigned Context) {
     DeclTy *NamespcDecl =
       Actions.ActOnStartNamespaceDef(CurScope, IdentLoc, Ident, LBrace);
 
+    PrettyStackTraceDecl CrashInfo(NamespcDecl, NamespaceLoc, Actions,
+                                   PP.getSourceManager(),
+                                   "parsing namespace");
+    
     while (Tok.isNot(tok::r_brace) && Tok.isNot(tok::eof))
       ParseExternalDeclaration();