[LLVMbugs] [Bug 7978] New: crash emitting diagnostic about initializer order

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Aug 23 23:23:40 PDT 2010


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

           Summary: crash emitting diagnostic about initializer order
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: nlewycky at google.com
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


Created an attachment (id=5407)
 --> (http://llvm.org/bugs/attachment.cgi?id=5407)
testcase

The attached testcase crashes trying to call GetKeyForMember().

$ clang crash_redux.cc -Wall
crash_redux.cc:2:34: error: cannot initialize a member subobject of type
      'void *' with an lvalue of type 'char const *'
  template <class T> Foo(T* a) : a_(a) { }
                                 ^  ~
crash_redux.cc:9:3: note: in instantiation of function template specialization
      'Foo::Foo<char const>' requested here
  Foo("");
  ^

I'll show the gdb output of the stack trace instead of the clang-generated one
since it has more detail:


Program received signal SIGSEGV, Segmentation fault.
0x0000000000f307f2 in llvm::PointerIntPair<void*, 1u, bool,
llvm::PointerUnionUIntTraits<clang::DeclContext*, clang::Decl::MultipleDC*>
>::getInt (this=0x10)
    at
/usr/local/google/home/nlewycky/llvm/include/llvm/ADT/PointerIntPair.h:73
73          return (IntType)((Value >> IntShift) & IntMask);

(gdb) bt
#0  0x0000000000f307f2 in llvm::PointerIntPair<void*, 1u, bool,
llvm::PointerUnionUIntTraits<clang::DeclContext*, clang::Decl::MultipleDC*>
>::getInt (
    this=0x10)
    at
/usr/local/google/home/nlewycky/llvm/include/llvm/ADT/PointerIntPair.h:73
#1  0x0000000000f2fae6 in llvm::PointerUnion<clang::DeclContext*,
clang::Decl::MultipleDC*>::is<clang::DeclContext*> (this=0x10)
    at /usr/local/google/home/nlewycky/llvm/include/llvm/ADT/PointerUnion.h:92
#2  0x0000000000f2f494 in clang::Decl::isInSemaDC (this=0x0)
    at
/usr/local/google/home/nlewycky/llvm/tools/clang/lib/Frontend/../../include/clang/AST/DeclBase.h:191
#3  0x0000000000f2f4f0 in clang::Decl::getDeclContext (this=0x0)
    at
/usr/local/google/home/nlewycky/llvm/tools/clang/lib/Frontend/../../include/clang/AST/DeclBase.h:282
#4  0x0000000001246cc2 in clang::FieldDecl::getParent (this=0x0)
    at
/usr/local/google/home/nlewycky/llvm/tools/clang/lib/Sema/../../include/clang/AST/Decl.h:1669
#5  0x00000000012612f3 in GetKeyForMember (Context=..., Member=0x30dcd50, 
    MemberMaybeAnon=true) at SemaDeclCXX.cpp:1992
#6  0x00000000012615b1 in DiagnoseBaseOrMemInitializerOrder (SemaRef=..., 
    Constructor=0x30daa30, Inits=0x7fffffffbf78, NumInits=1)
    at SemaDeclCXX.cpp:2052
#7  0x0000000001261ec7 in clang::Sema::ActOnMemInitializers (this=0x30b7390, 
    ConstructorDecl=0x30daa30, ColonLoc=..., meminits=0x7fffffffbf78, 
    NumMemInits=1, AnyErrors=true) at SemaDeclCXX.cpp:2207
#8  0x00000000013a36b1 in clang::Sema::InstantiateMemInitializers (
    this=0x30b7390, New=0x30daa30, Tmpl=0x30d9dd0, TemplateArgs=...)
    at SemaTemplateInstantiateDecl.cpp:2315
#9  0x00000000013a2bbf in clang::Sema::InstantiateFunctionDefinition (
    this=0x30b7390, PointOfInstantiation=..., Function=0x30daa30, 
    Recursive=true, DefinitionRequired=false)
    at SemaTemplateInstantiateDecl.cpp:2105
#10 0x00000000013a489c in clang::Sema::PerformPendingImplicitInstantiations (
    this=0x30b7390, LocalOnly=false) at SemaTemplateInstantiateDecl.cpp:2719
#11 0x00000000011ddd9c in clang::Sema::ActOnEndOfTranslationUnit (
    this=0x30b7390) at Sema.cpp:292
#12 0x00000000011a054b in clang::Parser::ParseTopLevelDecl (
    this=0x7fffffffc750, Result=...) at Parser.cpp:360
#13 0x000000000118a6f7 in clang::ParseAST (S=..., PrintStats=false)
    at ParseAST.cpp:82
#14 0x0000000000f19384 in clang::ASTFrontendAction::ExecuteAction (
    this=0x30928a0) at FrontendAction.cpp:264
#15 0x0000000001037ca0 in clang::CodeGenAction::ExecuteAction (this=0x30928a0)
    at CodeGenAction.cpp:332
#16 0x0000000000f18fce in clang::FrontendAction::Execute (this=0x30928a0)
    at FrontendAction.cpp:184

#17 0x0000000000f0368e in clang::CompilerInstance::ExecuteAction (
    this=0x308c3b0, Act=...) at CompilerInstance.cpp:526
#18 0x0000000000eba410 in clang::ExecuteCompilerInvocation (Clang=0x308c3b0)
    at ExecuteCompilerInvocation.cpp:148
#19 0x0000000000ead8ff in cc1_main (ArgBegin=0x7fffffffd228, 
    ArgEnd=0x7fffffffd328, 
    Argv0=0x308b558
"/usr/local/google/home/nlewycky/llvm/Debug+Asserts/bin/clang",
MainAddr=0xeb4f28) at cc1_main.cpp:160
#20 0x0000000000eb6206 in main (argc_=34, argv_=0x7fffffffe138)
    at driver.cpp:268

(gdb) up 5
#5  0x00000000012612f3 in GetKeyForMember (Context=..., Member=0x30dcd50, 
    MemberMaybeAnon=true) at SemaDeclCXX.cpp:1992
1992      RecordDecl *RD = Field->getParent();
(gdb) p Field
$1 = (class clang::FieldDecl *) 0x0
(gdb) up
#6  0x00000000012615b1 in DiagnoseBaseOrMemInitializerOrder (SemaRef=..., 
    Constructor=0x30daa30, Inits=0x7fffffffbf78, NumInits=1)
    at SemaDeclCXX.cpp:2052
2052        void *InitKey = GetKeyForMember(SemaRef.Context, Init, true);
(gdb) p Init
$2 = (class clang::CXXBaseOrMemberInitializer *) 0x30dcd50

(gdb) p Init->Init
$3 = (class clang::Stmt *) 0x30dcd10
(gdb) call Init->Init->dump()
(CXXConstructExpr 0x30dcd10 'struct Foo::<anonymous at
crash_redux.cc:5:3>''void (void) throw()' zeroing)
(gdb) p Init->BaseOrMember
$4 = {Val = {Value = 51224882}}
(gdb) p Init->AnonUnionMember
$5 = (class clang::FieldDecl *) 0x0

-- 
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