[LLVMbugs] [Bug 14690] New: clang::SourceManager::getImmediateExpansionRange assertion failure in RecursiveASTVisitor

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Fri Dec 21 11:28:02 PST 2012


http://llvm.org/bugs/show_bug.cgi?id=14690

             Bug #: 14690
           Summary: clang::SourceManager::getImmediateExpansionRange
                    assertion failure in RecursiveASTVisitor
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Frontend
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: peeter.joot at gmail.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified


Created attachment 9751
  --> http://llvm.org/bugs/attachment.cgi?id=9751
source used to trigger the clang::ParseAST assertion.

ImmediateExpansionRange(clang::SourceLocation) const: Assertion
`Loc.isMacroID() && "Not a macro expansion loc!"' failed.

Program received signal SIGABRT, Aborted.
0x00007ffff6f20645 in raise () from /lib64/libc.so.6
(gdb) where
#0  0x00007ffff6f20645 in raise () from /lib64/libc.so.6
#1  0x00007ffff6f21c33 in abort () from /lib64/libc.so.6
#2  0x00007ffff6f19329 in __assert_fail () from /lib64/libc.so.6
#3  0x0000000000bd6eba in
clang::SourceManager::getImmediateExpansionRange(clang::SourceLocation) const
()
#4  0x00000000004fa918 in mapDiagnosticRanges(clang::SourceLocation,
llvm::ArrayRef<clang::CharSourceRange>,
llvm::SmallVectorImpl<clang::CharSourceRange>&, clang::SourceManager const*) ()
#5  0x00000000004fc208 in
clang::DiagnosticRenderer::emitCaret(clang::SourceLocation,
clang::DiagnosticsEngine::Level, llvm::ArrayRef<clang::CharSourceRange>,
llvm::ArrayRef<clang::FixItHint>, clang::SourceManager const&) ()
#6  0x00000000004fd391 in
clang::DiagnosticRenderer::emitDiagnostic(clang::SourceLocation,
clang::DiagnosticsEngine::Level, llvm::StringRef,
llvm::ArrayRef<clang::CharSourceRange>, llvm::ArrayRef<clang::FixItHint>,
clang::SourceManager const*, llvm::PointerUnion<clang::Diagnostic const*,
clang::StoredDiagnostic const*>) ()
#7  0x00000000004b9df2 in
clang::TextDiagnosticPrinter::HandleDiagnostic(clang::DiagnosticsEngine::Level,
clang::Diagnostic const&) ()
#8  0x0000000000bc5294 in
clang::DiagnosticIDs::EmitDiag(clang::DiagnosticsEngine&,
clang::DiagnosticIDs::Level) const ()
#9  0x0000000000bc54fd in
clang::DiagnosticIDs::ProcessDiag(clang::DiagnosticsEngine&) const ()
#10 0x0000000000bbe0d4 in clang::DiagnosticsEngine::EmitCurrentDiagnostic(bool)
()
#11 0x000000000069f67b in clang::Sema::EmitCurrentDiagnostic(unsigned int) ()
#12 0x00000000006a791f in
clang::Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() ()
#13 0x00000000007c7981 in
clang::Sema::DiagRuntimeBehavior(clang::SourceLocation, clang::Stmt const*,
clang::PartialDiagnostic const&) ()
#14 0x00000000008ae08b in clang::Sema::DiagnoseUnusedExprResult(clang::Stmt
const*) ()
#15 0x00000000008af2eb in clang::Sema::ActOnCompoundStmt(clang::SourceLocation,
clang::SourceLocation, llvm::MutableArrayRef<clang::Stmt*>, bool) ()
#16 0x0000000000673c15 in clang::Parser::ParseCompoundStatementBody(bool) ()
#17 0x00000000006743dd in clang::Parser::ParseCompoundStatement(bool, unsigned
int) ()
#18 0x0000000000674432 in clang::Parser::ParseCompoundStatement(bool) ()
#19 0x0000000000675d8a in
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
()
#20 0x000000000067626d in
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) ()
#21 0x0000000000673b77 in clang::Parser::ParseCompoundStatementBody(bool) ()
#22 0x00000000006743dd in clang::Parser::ParseCompoundStatement(bool, unsigned
int) ()
#23 0x0000000000674432 in clang::Parser::ParseCompoundStatement(bool) ()
#24 0x0000000000675d8a in
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*, clang::Parser::ParsedAttributesWithRange&)
()
#25 0x000000000067626d in
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, bool, clang::SourceLocation*) ()
#26 0x0000000000673b77 in clang::Parser::ParseCompoundStatementBody(bool) ()
#27 0x000000000067a52d in
clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&) ()
#28 0x000000000068aa6f in
clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&) ()
#29 0x000000000068a770 in
clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&) ()
#30 0x0000000000640365 in
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation, unsigned int,
clang::Decl*) ()
#31 0x00000000006418f5 in
clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext,
clang::Parser::ParsedAttributesWithRange&) ()
#32 0x000000000062a214 in
clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*) ()
#33 0x0000000000619050 in
clang::Parser::ParseDeclOrFunctionDefInternal(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier) ()
#34 0x00000000006195a9 in clang::Parser::ParseDeclarationOrFunctionDefinition
()
#35 0x000000000061969f in
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier) ()
#36 0x000000000061bb44 in
clang::Parser::ParseExternalDeclaration(clang::Parser::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*) ()
#37 0x000000000061c183 in
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&) ()
#38 0x00000000006176ba in clang::ParseAST(clang::Sema&, bool, bool) ()
#39 0x00000000006179d0 in clang::ParseAST(clang::Preprocessor&,
clang::ASTConsumer*, clang::ASTContext&, bool, clang::TranslationUnitKind,
clang::CodeCompleteConsumer*, bool) ()
#40 0x000000000041a069 in main (argc=2, argv=0x7fffffffd998) at
./classvisitor.h:432

I'll attached the source that the AST parser chokes on.  Note that this assert
is triggered by the failure of my AST parser to properly setup the parser to
process the builtins.  It appears to be the diagnostic report associated with
the builtin not being found that triggers this error:

./classvisitor ASTparserAbort.hpp
ASTparserAbort.hpp:40:7: error: use of undeclared identifier '__builtin_expect'
      sqlt_tmp_entry(1, 1) ;
      ^
ASTparserAbort.hpp:31:29: note: expanded from macro 'sqlt_tmp_entry'
#define sqlt_tmp_entry      sqlt_fnc_entry
                            ^
ASTparserAbort.hpp:26:7: note: expanded from macro 'sqlt_fnc_entry'
      HOOK_INTO_OLD_TRACE_ENTRY(fnc) ;                                     \
      ^
ASTparserAbort.hpp:15:87: note: expanded from macro 'HOOK_INTO_OLD_TRACE_ENTRY'
#define HOOK_INTO_OLD_TRACE_ENTRY(_ecfID) { pdTraceInitLocalFlagNoCodepath(
_ecfID ); TRACE_ENTRY_DEBUG_HOOK( _ecfID );      }
                                                                               
      ^
ASTparserAbort.hpp:17:42: note: expanded from macro 'TRACE_ENTRY_DEBUG_HOOK'
#define TRACE_ENTRY_DEBUG_HOOK( _ecfID ) IF_TRACE_AND_DEBUG_HOOK {
OSS_HINT_MARK_BASIC_BLOCK_INFREQUENT ; }
                                         ^
ASTparserAbort.hpp:13:38: note: expanded from macro 'IF_TRACE_AND_DEBUG_HOOK'
#define IF_TRACE_AND_DEBUG_HOOK if (
OSS_HINT_MARK_BRANCH_UNLIKELY(pdTraceLocalFlag & (1<<0x12)))
                                     ^
ASTparserAbort.hpp:3:42: note: expanded from macro
'OSS_HINT_MARK_BRANCH_UNLIKELY'
#define OSS_HINT_MARK_BRANCH_UNLIKELY(x) __builtin_expect((x),0)
                                         ^
ASTparserAbort.hpp:40:7: error: use of undeclared identifier
'OSS_HINT_MARK_BASIC_BLOCK_INFREQUENT'
ASTparserAbort.hpp:31:29: note: expanded from macro 'sqlt_tmp_entry'
#define sqlt_tmp_entry      sqlt_fnc_entry
                            ^
ASTparserAbort.hpp:26:7: note: expanded from macro 'sqlt_fnc_entry'
      HOOK_INTO_OLD_TRACE_ENTRY(fnc) ;                                     \
      ^
ASTparserAbort.hpp:15:87: note: expanded from macro 'HOOK_INTO_OLD_TRACE_ENTRY'
#define HOOK_INTO_OLD_TRACE_ENTRY(_ecfID) { pdTraceInitLocalFlagNoCodepath(
_ecfID ); TRACE_ENTRY_DEBUG_HOOK( _ecfID );      }
                                                                               
      ^
ASTparserAbort.hpp:17:68: note: expanded from macro 'TRACE_ENTRY_DEBUG_HOOK'
#define TRACE_ENTRY_DEBUG_HOOK( _ecfID ) IF_TRACE_AND_DEBUG_HOOK {
OSS_HINT_MARK_BASIC_BLOCK_INFREQUENT ; }
                                                                   ^
ASTparserAbort.hpp:40:7: warning: expression result unused
classvisitor:
/home/peeterj/clang/sources/llvm/tools/clang/lib/Basic/SourceManager.cpp:950:
std::pair<clang::SourceLocation, clang::SourceLocation>
clang::SourceManager::getImmediateExpansionRange(clang::SourceLocation) const:
Assertion `Loc.isMacroID() && "Not a macro expansion loc!"' failed.
Stack dump:
0.      ASTparserAbort.hpp:40:7 <Spelling=ASTparserAbort.hpp:26:38>: current
parser token ';'
1.      ASTparserAbort.hpp:33:1: parsing struct/union/class body
'sqlo_waitlist'
2.      ASTparserAbort.hpp:39:4: parsing function body 'semaphoreOp'
3.      ASTparserAbort.hpp:39:4: in compound statement ('{}')
4.      ASTparserAbort.hpp:40:7 <Spelling=ASTparserAbort.hpp:24:4>: in compound
statement ('{}')
5.      ASTparserAbort.hpp:40:7 <Spelling=ASTparserAbort.hpp:15:43>: in
compound statement ('{}')
Aborted

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list