[cfe-dev] class template methods

Peter Stirling peter at pjstirling.plus.com
Sat May 9 13:36:33 PDT 2015


On 04/05/15 19:00, Reid Kleckner wrote:
> On Sat, May 2, 2015 at 2:06 PM, Peter Stirling 
> <peter at pjstirling.plus.com <mailto:peter at pjstirling.plus.com>> wrote:
>
>     On 28/04/15 23:31, Reid Kleckner wrote:
>>     On Wed, Apr 15, 2015 at 10:25 PM, Peter Stirling
>>     <peter at pjstirling.plus.com <mailto:peter at pjstirling.plus.com>>
>>     wrote:
>>
>>         Visitor::RequestCompleteType() calls
>>         Sema::RequireCompleteType() (which IMO has the wrong name, it
>>         returns false on what I would consider, from the name, success).
>>
>>
>>     Much has been made about the sense of boolean return values in
>>     Clang. It isn't consistent or sane, but such is life. =/
>>
>>         So, I don't construct the specializations for methods
>>         directly in my code, I assume that some of the instantiation
>>         is performed by RequireCompleteType(), but surely if I
>>         checked for SFINAE at that level then I would lose EVERY
>>         methods for std::pair<int const, int const> and not just the
>>         ones that involve mutation?
>>
>>
>>     I think RequireCompleteType won't instantiate all the member
>>     functions, like operator=, but you can look it up, and ask for an
>>     instantiation of it.
>
>     Perhaps I misunderstand what you mean by 'instantiate' but this
>     doesn't seem to be the case. When I walk the CXXRecordDecl for
>     'std::pair<int const, int const>' there ARE declarations for the
>     methods that require mutation. My tool scans the AST for functions
>     and methods and outputs a file containing functions that invoke
>     the ones it finds, which is then compiled into a shared library,
>     so what I want is protection against functions that can't be called.
>
>     How do I go about asking for an instantiation of a method on its own?
>
>
> Right, instantiating the class will create decls of all the member 
> functions, but the bodies will be empty because C++ essentially 
> requires that they be parsed lazily. I'd have to lookup the detailed 
> mechanics, but you should be able to look at the method decl, figure 
> out that it needs instantiation, instantiate it, and put the error 
> trap around that.

I added the following test:

   if(inInstantiation) {
     clang::Sema::SFINAETrap trap(sema);
sema.InstantiateFunctionDefinition(d->getParent()->getLocation(), d, 
true, true);
     if(trap.hasErrorOccurred()) {
       return false;
     }
   }

Now I'm hitting a seg-fault (null pointer) deep inside clang:

Program received signal SIGSEGV, Segmentation fault.
clang::Scope::getEntity (this=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Scope.h:310
310      DeclContext *getEntity() const { return Entity; }
(gdb) bt
#0  clang::Scope::getEntity (this=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Scope.h:310
#1  0x00007ffff535cdaf in clang::Sema::PushOnScopeChains (this=0x6b6e00, 
D=0x38392c8, S=0x0, AddToContext=true) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:1190
#2  0x00007ffff535ef9a in clang::Sema::LazilyCreateBuiltin 
(this=0x6b6e00, II=0x69f638, ID=370, S=0x0, ForRedeclaration=false, 
Loc=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:1778
#3  0x00007ffff572247e in LookupBuiltin (S=..., R=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:544
#4  0x00007ffff5722240 in clang::Sema::LookupName (this=0x6b6e00, R=..., 
S=0x0, AllowBuiltinCreation=true) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:1426
#5  0x00007ffff572362c in clang::Sema::LookupParsedName (this=0x6b6e00, 
R=..., S=0x0, SS=0x7ffffffea958, AllowBuiltinCreation=true, 
EnteringContext=false) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaLookup.cpp:1868
#6  0x00007ffff5524491 in clang::Sema::ActOnIdExpression (this=0x6b6e00, 
S=0x0, SS=..., TemplateKWLoc=..., Id=..., HasTrailingLParen=true, 
IsAddressOfOperand=false,
     CCC=std::unique_ptr<clang::CorrectionCandidateCallback> containing 
0x0, IsInlineAsmIdentifier=false, KeywordReplacement=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2114
#7  0x00007ffff5523d96 in clang::Sema::DefaultVariadicArgumentPromotion 
(this=0x6b6e00, E=0x38383f0, CT=clang::Sema::VariadicConstructor, 
FDecl=0x878b20) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:936
#8  0x00007ffff55367c6 in clang::Sema::GatherArgumentsForCall 
(this=0x6b6e00, CallLoc=..., FDecl=0x878b20, Proto=0x878ad0, 
FirstParam=0, Args=..., AllArgs=..., 
CallType=clang::Sema::VariadicConstructor, AllowExplicit=false,
     IsListInitialization=false) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4477
#9  0x00007ffff5426487 in clang::Sema::CompleteConstructorCall 
(this=0x6b6e00, Constructor=0x878b20, ArgsPtr=..., Loc=..., 
ConvertedArgs=..., AllowExplicit=false, IsListInitialization=false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:11427
#10 0x00007ffff56f4184 in clang::InitializationSequence::Perform 
(this=0x7ffffffebff0, S=..., Entity=..., Kind=..., Args=..., 
ResultType=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaInit.cpp:6189
#11 0x00007ffff56fe47b in clang::Sema::PerformCopyInitialization 
(this=0x6b6e00, Entity=..., EqualLoc=..., Init=..., 
TopLevelOfInitList=false, AllowExplicit=false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaInit.cpp:7495
#12 0x00007ffff55364e9 in clang::Sema::GatherArgumentsForCall 
(this=0x6b6e00, CallLoc=..., FDecl=0x3839080, Proto=0x3839010, 
FirstParam=0, Args=..., AllArgs=..., 
CallType=clang::Sema::VariadicDoesNotApply, AllowExplicit=false,
     IsListInitialization=false) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4433
#13 0x00007ffff5535c19 in clang::Sema::ConvertArgumentsForCall 
(this=0x6b6e00, Call=0x3839240, Fn=0x3839228, FDecl=0x3839080, 
Proto=0x3839010, Args=..., RParenLoc=..., IsExecConfig=false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4378
#14 0x00007ffff5538209 in clang::Sema::BuildResolvedCallExpr 
(this=0x6b6e00, Fn=0x3839228, NDecl=0x3839080, LParenLoc=..., Args=..., 
RParenLoc=..., Config=0x0, IsExecConfig=false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4964
#15 0x00007ffff57b4ad2 in FinishOverloadedCallExpr (SemaRef=..., S=0x0, 
Fn=0x3839190, ULE=0x3837ab8, LParenLoc=..., Args=..., RParenLoc=..., 
ExecConfig=0x0, CandidateSet=0x7ffffffee548, Best=0x7ffffffee510,
     OverloadResult=clang::OR_Success, AllowTypoCorrection=true) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaOverload.cpp:10798
#16 0x00007ffff57b47cd in clang::Sema::BuildOverloadedCallExpr 
(this=0x6b6e00, S=0x0, Fn=0x3837ab8, ULE=0x3837ab8, LParenLoc=..., 
Args=..., RParenLoc=..., ExecConfig=0x0, AllowTypoCorrection=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaOverload.cpp:10871
#17 0x00007ffff5525999 in clang::Sema::ActOnCallExpr (this=0x6b6e00, 
S=0x0, Fn=0x3837ab8, LParenLoc=..., ArgExprs=..., RParenLoc=..., 
ExecConfig=0x0, IsExecConfig=false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:4768
#18 0x00007ffff5975fee in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::RebuildCallExpr (this=0x7fffffff2738, 
Callee=0x3837ab8, LParenLoc=..., Args=..., RParenLoc=..., ExecConfig=0x0)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:1833
#19 0x00007ffff5975f26 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformCallExpr 
(this=0x7fffffff2738, E=0x8d8a08) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:7617
#20 0x00007ffff5967982 in (anonymous 
namespace)::TemplateInstantiator::TransformCallExpr 
(this=0x7fffffff2738, CE=0x8d8a08) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:823
#21 0x00007ffff595e10a in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformExpr (this=0x7fffffff2738, 
E=0x8d8a08) at tools/clang/include/clang/AST/StmtNodes.inc:299
#22 0x00007ffff597fbb2 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDecltypeType 
(this=0x7fffffff2738, TLB=..., TL=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:4922
#23 0x00007ffff5954aa6 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff2738, 
TLB=..., T=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:88
#24 0x00007ffff59539bf in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff2738, 
DI=0x8d8aa8) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706
#25 0x00007ffff597404d in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateArgument 
(this=0x7fffffff2738, Input=..., Output=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3441
#26 0x00007ffff597332a in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLocContainerIterator<clang::TemplateSpecializationTypeLoc> 
 > (this=0x7fffffff2738,
     First=..., Last=..., Outputs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3661
#27 0x00007ffff5971f79 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType 
(this=0x7fffffff2738, TLB=..., TL=..., Template=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5213
#28 0x00007ffff5971c34 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTSIInObjectScope 
(this=0x7fffffff2738, TL=..., ObjectType=..., UnqualLookup=0x0, SS=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3854
#29 0x00007ffff5990278 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTypeInObjectScope 
(this=0x7fffffff2738, TL=..., ObjectType=..., UnqualLookup=0x0, SS=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3813
#30 0x00007ffff59604c8 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformNestedNameSpecifierLoc 
(this=0x7fffffff2738, NNS=..., ObjectType=..., FirstQualifierInScope=0x0)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3189
#31 0x00007ffff59817be in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDependentNameType 
(this=0x7fffffff2738, TLB=..., TL=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5434
#32 0x00007ffff5954f1a in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff2738, 
TLB=..., T=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:101
#33 0x00007ffff59539bf in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff2738, 
DI=0x8d8cc0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706
#34 0x00007ffff59537ff in clang::Sema::SubstType (this=0x6b6e00, 
T=0x8d8cc0, Args=..., Loc=..., Entity=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1472
#35 0x00007ffff59581e7 in clang::Sema::SubstBaseSpecifiers 
(this=0x6b6e00, Instantiation=0x3837850, Pattern=0x8d8440, 
TemplateArgs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1810
#36 0x00007ffff5958675 in clang::Sema::InstantiateClass (this=0x6b6e00, 
PointOfInstantiation=..., Instantiation=0x3837850, Pattern=0x8d8440, 
TemplateArgs=..., TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971
#37 0x00007ffff595a361 in 
clang::Sema::InstantiateClassTemplateSpecialization (this=0x6b6e00, 
PointOfInstantiation=..., ClassTemplateSpec=0x3837850, 
TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427
#38 0x00007ffff5a157c1 in clang::Sema::RequireCompleteTypeImpl 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290
#39 0x00007ffff5a150f6 in clang::Sema::RequireCompleteType 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117
#40 0x00007ffff52aa25a in 
clang::Sema::RequireCompleteType<clang::SourceRange> (this=0x6b6e00, 
Loc=..., T=..., DiagID=2256, Args=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303
#41 0x00007ffff53ff108 in clang::Sema::CheckBaseSpecifier 
(this=0x6b6e00, Class=0x38362d8, SpecifierRange=..., Virtual=false, 
Access=clang::AS_public, TInfo=0x38379e0, EllipsisLoc=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:1454
#42 0x00007ffff595828a in clang::Sema::SubstBaseSpecifiers 
(this=0x6b6e00, Instantiation=0x38362d8, Pattern=0x8d94d8, 
TemplateArgs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1822
#43 0x00007ffff5958675 in clang::Sema::InstantiateClass (this=0x6b6e00, 
PointOfInstantiation=..., Instantiation=0x38362d8, Pattern=0x8d94d8, 
TemplateArgs=..., TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971
#44 0x00007ffff595a361 in 
clang::Sema::InstantiateClassTemplateSpecialization (this=0x6b6e00, 
PointOfInstantiation=..., ClassTemplateSpec=0x38362d8, 
TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427
#45 0x00007ffff5a157c1 in clang::Sema::RequireCompleteTypeImpl 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290
#46 0x00007ffff5a150f6 in clang::Sema::RequireCompleteType 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117
#47 0x00007ffff52aa25a in 
clang::Sema::RequireCompleteType<clang::SourceRange> (this=0x6b6e00, 
Loc=..., T=..., DiagID=2259, Args=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303
#48 0x00007ffff52a5c38 in clang::Sema::RequireCompleteDeclContext 
(this=0x6b6e00, SS=..., DC=0x3836310) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaCXXScopeSpec.cpp:212
#49 0x00007ffff552c8ec in clang::Sema::BuildQualifiedDeclarationNameExpr 
(this=0x6b6e00, SS=..., NameInfo=..., IsAddressOfOperand=false, 
RecoveryTSI=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2294
#50 0x00007ffff5976d14 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::RebuildDependentScopeDeclRefExpr 
(this=0x7fffffff75b8, QualifierLoc=..., TemplateKWLoc=..., NameInfo=..., 
TemplateArgs=0x0,
     IsAddressOfOperand=false, RecoveryTSI=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:2402
#51 0x00007ffff5976ac0 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr 
(this=0x7fffffff75b8, E=0x7d1a50, IsAddressOfOperand=false, RecoveryTSI=0x0)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8997
#52 0x00007ffff5969433 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr 
(this=0x7fffffff75b8, E=0x7d1a50)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8963
#53 0x00007ffff595e47c in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformExpr (this=0x7fffffff75b8, 
E=0x7d1a50) at tools/clang/include/clang/AST/StmtNodes.inc:433
#54 0x00007ffff59743e4 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateArgument 
(this=0x7fffffff75b8, Input=..., Output=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3480
#55 0x00007ffff597332a in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateArguments<clang::TemplateArgumentLocContainerIterator<clang::TemplateSpecializationTypeLoc> 
 > (this=0x7fffffff75b8,
     First=..., Last=..., Outputs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3661
#56 0x00007ffff5971f79 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType 
(this=0x7fffffff75b8, TLB=..., TL=..., Template=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5213
#57 0x00007ffff598143b in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformTemplateSpecializationType 
(this=0x7fffffff75b8, TLB=..., TL=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:5112
#58 0x00007ffff5954dfd in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff75b8, 
TLB=..., T=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/AST/TypeNodes.def:98
#59 0x00007ffff59539bf in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformType (this=0x7fffffff75b8, 
DI=0x7d1c48) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:3706
#60 0x00007ffff59537ff in clang::Sema::SubstType (this=0x6b6e00, 
T=0x7d1c48, Args=..., Loc=..., Entity=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1472
#61 0x00007ffff59581e7 in clang::Sema::SubstBaseSpecifiers 
(this=0x6b6e00, Instantiation=0x3836030, Pattern=0x7d1578, 
TemplateArgs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1810
#62 0x00007ffff5958675 in clang::Sema::InstantiateClass (this=0x6b6e00, 
PointOfInstantiation=..., Instantiation=0x3836030, Pattern=0x7d1578, 
TemplateArgs=..., TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971
#63 0x00007ffff595a361 in 
clang::Sema::InstantiateClassTemplateSpecialization (this=0x6b6e00, 
PointOfInstantiation=..., ClassTemplateSpec=0x3836030, 
TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427
#64 0x00007ffff5a157c1 in clang::Sema::RequireCompleteTypeImpl 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290
#65 0x00007ffff5a150f6 in clang::Sema::RequireCompleteType 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117
#66 0x00007ffff52aa25a in 
clang::Sema::RequireCompleteType<clang::SourceRange> (this=0x6b6e00, 
Loc=..., T=..., DiagID=2256, Args=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303
#67 0x00007ffff53ff108 in clang::Sema::CheckBaseSpecifier 
(this=0x6b6e00, Class=0x3835810, SpecifierRange=..., Virtual=false, 
Access=clang::AS_public, TInfo=0x38361b0, EllipsisLoc=...)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp:1454
#68 0x00007ffff595828a in clang::Sema::SubstBaseSpecifiers 
(this=0x6b6e00, Instantiation=0x3835810, Pattern=0x7d1e20, 
TemplateArgs=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1822
#69 0x00007ffff5958675 in clang::Sema::InstantiateClass (this=0x6b6e00, 
PointOfInstantiation=..., Instantiation=0x3835810, Pattern=0x7d1e20, 
TemplateArgs=..., TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1971
#70 0x00007ffff595a361 in 
clang::Sema::InstantiateClassTemplateSpecialization (this=0x6b6e00, 
PointOfInstantiation=..., ClassTemplateSpec=0x3835810, 
TSK=clang::TSK_ImplicitInstantiation, Complain=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2427
#71 0x00007ffff5a157c1 in clang::Sema::RequireCompleteTypeImpl 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5290
#72 0x00007ffff5a150f6 in clang::Sema::RequireCompleteType 
(this=0x6b6e00, Loc=..., T=..., Diagnoser=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaType.cpp:5117
#73 0x00007ffff52aa25a in 
clang::Sema::RequireCompleteType<clang::SourceRange> (this=0x6b6e00, 
Loc=..., T=..., DiagID=2259, Args=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/include/clang/Sema/Sema.h:1303
#74 0x00007ffff52a5c38 in clang::Sema::RequireCompleteDeclContext 
(this=0x6b6e00, SS=..., DC=0x3835848) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaCXXScopeSpec.cpp:212
#75 0x00007ffff552c8ec in clang::Sema::BuildQualifiedDeclarationNameExpr 
(this=0x6b6e00, SS=..., NameInfo=..., IsAddressOfOperand=false, 
RecoveryTSI=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExpr.cpp:2294
#76 0x00007ffff5976d14 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::RebuildDependentScopeDeclRefExpr 
(this=0x7fffffffbac8, QualifierLoc=..., TemplateKWLoc=..., NameInfo=..., 
TemplateArgs=0x0,
     IsAddressOfOperand=false, RecoveryTSI=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:2402
#77 0x00007ffff5976ac0 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr 
(this=0x7fffffffbac8, E=0x9a8628, IsAddressOfOperand=false, RecoveryTSI=0x0)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8997
#78 0x00007ffff5969433 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformDependentScopeDeclRefExpr 
(this=0x7fffffffbac8, E=0x9a8628)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:8963
#79 0x00007ffff595e47c in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformExpr (this=0x7fffffffbac8, 
E=0x9a8628) at tools/clang/include/clang/AST/StmtNodes.inc:433
#80 0x00007ffff596339c in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformBinaryOperator 
(this=0x7fffffffbac8, E=0x9a8818) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:7704
#81 0x00007ffff595dca3 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformExpr (this=0x7fffffffbac8, 
E=0x9a8818) at tools/clang/include/clang/AST/StmtNodes.inc:157
#82 0x00007ffff5955af2 in clang::TreeTransform<(anonymous 
namespace)::TemplateInstantiator>::TransformExceptionSpec 
(this=0x7fffffffbac8, Loc=..., ESI=..., Exceptions=..., 
Changed=@0x7fffffffba7f: false)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/TreeTransform.h:4697
#83 0x00007ffff59559ea in clang::Sema::SubstExceptionSpec 
(this=0x6b6e00, New=0x7ffff0b023a8, Proto=0x9a8840, Args=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1611
#84 0x00007ffff59aca2b in clang::Sema::InstantiateExceptionSpec 
(this=0x6b6e00, PointOfInstantiation=..., Decl=0x7ffff0b023a8) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3193
#85 0x00007ffff5518b88 in clang::Sema::ResolveExceptionSpec 
(this=0x6b6e00, Loc=..., FPT=0x7ffff0b02470) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaExceptionSpec.cpp:162
#86 0x00007ffff53839f5 in clang::Sema::ActOnStartOfFunctionDef 
(this=0x6b6e00, FnBodyScope=0x0, D=0x7ffff0b023a8) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaDecl.cpp:10475
#87 0x00007ffff59ad779 in clang::Sema::InstantiateFunctionDefinition 
(this=0x6b6e00, PointOfInstantiation=..., Function=0x7ffff0b023a8, 
Recursive=true, DefinitionRequired=true)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:3449
#88 0x0000000000428f79 in QuaffVisitor::CanBeSafeToHandle 
(this=0x694b30, d=0x7ffff0b023a8, inInstantiation=true) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/quaff-visitor.cc:179
#89 0x000000000042a46f in QuaffVisitor::VisitCXXMethod (this=0x694b30, 
d=0x7ffff0b023a8, instantiation=true) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/quaff-visitor.cc:388
#90 0x000000000040dd50 in Walker::Traverse (this=0x694c40, 
d=0x7ffff0b023a8) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:64
#91 0x000000000040e28d in Walker::TraverseCXXRecord (this=0x694c40, 
d=0x7ffff0bf1218) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:96
#92 0x000000000040df33 in Walker::TraverseClassTemplate (this=0x694c40, 
d=0x96d750) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:109
#93 0x000000000040dbce in Walker::Traverse (this=0x694c40, d=0x96d750) 
at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:45
#94 0x000000000040e0b2 in Walker::TraverseNamespace (this=0x694c40, 
d=0x95ea20) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:119
#95 0x000000000040dc25 in Walker::Traverse (this=0x694c40, d=0x95ea20) 
at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:51
#96 0x000000000040e0b2 in Walker::TraverseNamespace (this=0x694c40, 
d=0x95e9b8) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:119
#97 0x000000000040dc25 in Walker::Traverse (this=0x694c40, d=0x95e9b8) 
at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:51
#98 0x000000000040d8d2 in Walker::TraverseTranslationUnit 
(this=0x694c40, d=0x693bd0) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/walker.cc:17
#99 0x000000000040d054 in Consumer<Options, 
QuaffVisitor>::HandleTranslationUnit (this=0x694b20, context=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/consumer.hh:21
#100 0x00007ffff1f9dab6 in clang::ParseAST (S=..., PrintStats=false, 
SkipFunctionBodies=false) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Parse/ParseAST.cpp:151
#101 0x00007ffff610824f in clang::ASTFrontendAction::ExecuteAction 
(this=0x660f50) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:536
#102 0x00007ffff6107d50 in clang::FrontendAction::Execute 
(this=0x660f50) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/FrontendAction.cpp:439
#103 0x00007ffff60b4f5f in clang::CompilerInstance::ExecuteAction 
(this=0x7fffffffd368, Act=...) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp:814
#104 0x00007ffff77bca6e in 
clang::tooling::FrontendActionFactory::runInvocation 
(this=0x7fffffffde88, Invocation=0x6612a0, Files=0x65f4f0, 
DiagConsumer=0x0) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:272
#105 0x00007ffff77bc979 in clang::tooling::ToolInvocation::runInvocation 
(this=0x7fffffffdb80, BinaryName=0x65fec8 
"/home/peter/Programming/llvm/clang/bin/quaff", Compilation=0x65aae0, 
Invocation=0x6612a0)
     at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:249
#106 0x00007ffff77bc211 in clang::tooling::ToolInvocation::run 
(this=0x7fffffffdb80) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:235
#107 0x00007ffff77bd3aa in clang::tooling::ClangTool::run 
(this=0x7fffffffdea8, Action=0x7fffffffde88) at 
/home/peter/Programming/llvm/llvm/tools/clang/lib/Tooling/Tooling.cpp:364
#108 0x000000000040873d in main (argc=5, argv=0x7fffffffe178) at 
/home/peter/Programming/llvm/llvm/tools/clang/tools/extra/quaff/main.cc:149


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20150509/71bcec91/attachment.html>


More information about the cfe-dev mailing list