forked from OSchip/llvm-project
In Sema::InstantiateStaticDataMemberDefinition, pass the var decl to the consumer
just using ASTConsumer::HandleCXXStaticMemberVarInstantiation(), don't pass it with ASTConsumer::HandleTopLevelDecl. ASTConsumer::HandleTopLevelDecl is intended for user-written top-level decls; a consumer can treat an instantiated static data member however it wants of course. llvm-svn: 175976
This commit is contained in:
parent
80070bd439
commit
8a27b2b350
|
@ -1977,6 +1977,8 @@ void CodeGenModule::HandleCXXStaticMemberVarInstantiation(VarDecl *VD) {
|
|||
// instantiation is explicit, make sure we emit it at the end.
|
||||
if (VD->getDefinition() && TSK == TSK_ExplicitInstantiationDefinition)
|
||||
GetAddrOfGlobalVar(VD);
|
||||
|
||||
EmitTopLevelDecl(VD);
|
||||
}
|
||||
|
||||
void CodeGenModule::EmitGlobalFunctionDefinition(GlobalDecl GD) {
|
||||
|
|
|
@ -2974,7 +2974,18 @@ void Sema::InstantiateStaticDataMemberDefinition(
|
|||
if (TSK == TSK_ExplicitInstantiationDeclaration)
|
||||
return;
|
||||
|
||||
Consumer.HandleCXXStaticMemberVarInstantiation(Var);
|
||||
// Make sure to pass the instantiated variable to the consumer at the end.
|
||||
struct PassToConsumerRAII {
|
||||
ASTConsumer &Consumer;
|
||||
VarDecl *Var;
|
||||
|
||||
PassToConsumerRAII(ASTConsumer &Consumer, VarDecl *Var)
|
||||
: Consumer(Consumer), Var(Var) { }
|
||||
|
||||
~PassToConsumerRAII() {
|
||||
Consumer.HandleCXXStaticMemberVarInstantiation(Var);
|
||||
}
|
||||
} PassToConsumerRAII(Consumer, Var);
|
||||
|
||||
// If we already have a definition, we're done.
|
||||
if (VarDecl *Def = Var->getDefinition()) {
|
||||
|
@ -3011,12 +3022,11 @@ void Sema::InstantiateStaticDataMemberDefinition(
|
|||
previousContext.pop();
|
||||
|
||||
if (Var) {
|
||||
PassToConsumerRAII.Var = Var;
|
||||
MemberSpecializationInfo *MSInfo = OldVar->getMemberSpecializationInfo();
|
||||
assert(MSInfo && "Missing member specialization information?");
|
||||
Var->setTemplateSpecializationKind(MSInfo->getTemplateSpecializationKind(),
|
||||
MSInfo->getPointOfInstantiation());
|
||||
DeclGroupRef DG(Var);
|
||||
Consumer.HandleTopLevelDecl(DG);
|
||||
}
|
||||
Local.Exit();
|
||||
|
||||
|
|
Loading…
Reference in New Issue