[LLVMbugs] [Bug 7163] New: Assertion from AST during checking of address of member access

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue May 18 05:40:34 PDT 2010


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

           Summary: Assertion from AST during checking of address of
                    member access
           Product: clang
           Version: unspecified
          Platform: PC
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: unassignedclangbugs at nondot.org
        ReportedBy: chandlerc at gmail.com
                CC: llvmbugs at cs.uiuc.edu, dgregor at apple.com


% cat t.cc
template <typename R, typename P> void h(R (*func)(P)) {}

class C {
 public:
  template <typename T> void f(T*);
 private:
  template <typename T> static void g(T*);
};

template <typename T> void C::f(T* t) {
  h(g<T>);
}
template <typename T> void C::g(T* t) {}

void test(C* c, int i) { c->f(&i); }

% ./bin/clang++ -fsyntax-only t.cc
clang:
/home/chandlerc/src/llvm/trunk/tools/clang/include/clang/AST/ASTContext.h:574:
clang::QualType clang::ASTContext::getTypeDeclType(const clang::TypeDecl*,
const clang::TypeDecl*): Assertion `Decl && "Passed null for Decl param"'
failed.
Stack dump:
0.      Program arguments: /home/chandlerc/src/llvm/trunk/build/bin/clang -cc1
-triple x86_64-unknown-linux-gnu -fsyntax-only -disable-free -main-file-name
t.cc -mrelocation-model static -mdisable-fp-elim -mconstructor-aliases
-munwind-tables -target-cpu x86-64 -resource-dir
/home/chandlerc/src/llvm/trunk/build/lib/clang/2.0 -ferror-limit 19
-fmessage-length 179 -fexceptions -fgnu-runtime -fdiagnostics-show-option
-fcolor-diagnostics -x c++ t.cc 
1.      <eof> parser at end of file
2.      t.cc:10:31: instantiating function definition 'C::f'
clang: error: compiler command failed due to signal 6 (use -v to see
invocation)

>From GDB:

#3  0x0000000000e73cb8 in clang::ASTContext::getTypeDeclType (this=0x2ea1c50,
Decl=0x0, PrevDecl=0x0)
    at
/home/chandlerc/src/llvm/trunk/tools/clang/include/clang/AST/ASTContext.h:574
#4  0x00000000012c751c in clang::Sema::CheckAddressOfMemberAccess
(this=0x7fffffffc290, OvlExpr=0x2ed4190, Found=...)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaAccess.cpp:1263
#5  0x0000000001210d80 in clang::Sema::ResolveAddressOfOverloadedFunction
(this=0x7fffffffc290, From=0x2ed4190, ToType=..., Complain=true,
FoundResult=...)
    at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaOverload.cpp:5744
#6  0x00000000011c233e in clang::Sema::PerformImplicitConversion
(this=0x7fffffffc290, From=@0x7fffffff4968, ToType=..., SCS=...,
Action=clang::Sema::AA_Converting, 
    IgnoreBaseAccess=false) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExprCXX.cpp:1705
#7  0x00000000011c19b8 in clang::Sema::PerformImplicitConversion
(this=0x7fffffffc290, From=@0x7fffffff4968, ToType=..., ICS=...,
Action=clang::Sema::AA_Converting, 
    IgnoreBaseAccess=false) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExprCXX.cpp:1582
#8  0x00000000011e17c7 in clang::InitializationSequence::Perform
(this=0x7fffffff5140, S=..., Entity=..., Kind=..., Args=..., ResultType=0x0)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaInit.cpp:3736
#9  0x00000000011e495f in clang::Sema::PerformCopyInitialization
(this=0x7fffffffc290, Entity=..., EqualLoc=..., Init=...)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaInit.cpp:4359
#10 0x0000000001193e7c in clang::Sema::GatherArgumentsForCall
(this=0x7fffffffc290, CallLoc=..., FDecl=0x2ed5690, Proto=0x2ed5650,
FirstProtoArg=0, Args=0x7fffffffae08, 
    NumArgs=1, AllArgs=..., CallType=clang::Sema::VariadicDoesNotApply) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExpr.cpp:3467
#11 0x0000000001193b2e in clang::Sema::ConvertArgumentsForCall
(this=0x7fffffffc290, Call=0x2ed4d40, Fn=0x2ed4d00, FDecl=0x2ed5690,
Proto=0x2ed5650, Args=0x7fffffffae08, 
    NumArgs=1, RParenLoc=...) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExpr.cpp:3418
#12 0x0000000001195719 in clang::Sema::BuildResolvedCallExpr
(this=0x7fffffffc290, Fn=0x2ed4d00, NDecl=0x2ed5690, LParenLoc=...,
Args=0x7fffffffae08, NumArgs=1, RParenLoc=...)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExpr.cpp:3677
#13 0x0000000001212728 in clang::Sema::BuildOverloadedCallExpr
(this=0x7fffffffc290, S=0x0, Fn=0x2ed58e0, ULE=0x2ed39e0, LParenLoc=...,
Args=0x7fffffffae08, NumArgs=1, 
    CommaLocs=0x7fffffffae78, RParenLoc=...) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaOverload.cpp:6084
#14 0x0000000001195002 in clang::Sema::ActOnCallExpr (this=0x7fffffffc290,
S=0x0, fn=..., LParenLoc=..., args=..., CommaLocs=0x7fffffffae78,
RParenLoc=...)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaExpr.cpp:3617
#15 0x00000000012945e5 in RebuildCallExpr (this=0x7fffffffbb50, Callee=...,
LParenLoc=..., Args=..., CommaLocs=0x7fffffffae78, RParenLoc=...)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/TreeTransform.h:1120
#16 0x000000000128380c in TransformCallExpr (this=0x7fffffffbb50, E=0x2ed2c30)
at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/TreeTransform.h:4359
#17 0x000000000126daf3 in TransformExpr (this=0x7fffffffbb50, E=0x2ed2c30) at
/home/chandlerc/src/llvm/trunk/build/tools/clang/include/clang/AST/StmtNodes.inc:209
#18 0x000000000126caff in TransformStmt (this=0x7fffffffbb50, S=0x2ed2c30) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/TreeTransform.h:1965
#19 0x00000000012909de in TransformCompoundStmt (this=0x7fffffffbb50,
S=0x2ed2c90, IsStmtExpr=false) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/TreeTransform.h:3361
#20 0x00000000012765cb in TransformCompoundStmt (this=0x7fffffffbb50,
S=0x2ed2c90) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/TreeTransform.h:3350
#21 0x000000000126bf09 in TransformStmt (this=0x7fffffffbb50, S=0x2ed2c90) at
/home/chandlerc/src/llvm/trunk/build/tools/clang/include/clang/AST/StmtNodes.inc:39
#22 0x000000000126a1e0 in clang::Sema::SubstStmt (this=0x7fffffffc290,
S=0x2ed2c90, TemplateArgs=...)
    at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1571
#23 0x00000000012a802f in clang::Sema::InstantiateFunctionDefinition
(this=0x7fffffffc290, PointOfInstantiation=..., Function=0x2ed40c0,
Recursive=true, DefinitionRequired=false)
    at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:2083
#24 0x00000000012a9fa1 in clang::Sema::PerformPendingImplicitInstantiations
(this=0x7fffffffc290, LocalOnly=false)
    at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:2693
#25 0x00000000010e5136 in clang::Sema::ActOnEndOfTranslationUnit
(this=0x7fffffffc290) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/Sema.cpp:214
#26 0x0000000001500bfd in clang::Parser::ParseTopLevelDecl
(this=0x7fffffffcf50, Result=...) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Parse/Parser.cpp:344
#27 0x00000000010e1837 in clang::ParseAST (PP=..., Consumer=0x2eacf50, Ctx=...,
PrintStats=false, CompleteTranslationUnit=true, CompletionConsumer=0x0)
    at /home/chandlerc/src/llvm/trunk/tools/clang/lib/Sema/ParseAST.cpp:87
---Type <return> to continue, or q <return> to quit--- 
#28 0x0000000000e4f0a2 in clang::ASTFrontendAction::ExecuteAction
(this=0x2e98c70) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Frontend/FrontendAction.cpp:224
#29 0x0000000000e4ed05 in clang::FrontendAction::Execute (this=0x2e98c70) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Frontend/FrontendAction.cpp:150
#30 0x0000000000e3431c in clang::CompilerInstance::ExecuteAction
(this=0x2e92ea0, Act=...) at
/home/chandlerc/src/llvm/trunk/tools/clang/lib/Frontend/CompilerInstance.cpp:511
#31 0x0000000000e1879d in cc1_main (ArgBegin=0x7fffffffdff8,
ArgEnd=0x7fffffffe008, Argv0=0x7fffffffe2c3
"/home/chandlerc/src/llvm/trunk/build/bin/clang", MainAddr=0xe11af4)
    at /home/chandlerc/src/llvm/trunk/tools/clang/tools/driver/cc1_main.cpp:285
#32 0x0000000000e12ae5 in main (argc=4, argv=0x7fffffffdfe8) at
/home/chandlerc/src/llvm/trunk/tools/clang/tools/driver/driver.cpp:181


The root cause seems to be on line 1260 of SemaAccess.cpp we request
Ovl->NamingClass(), and this overloaded expression does not have a naming
class:
(gdb) p NamingClass
$1 = (class clang::CXXRecordDecl *) 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