summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r--clang/lib/Parse/ParseDeclCXX.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index ec91d71b086..d2d8c1eeaed 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -431,7 +431,7 @@ void Parser::ParseClassSpecifier(DeclSpec &DS,
}
// Create the tag portion of the class or class template.
- DeclTy *TagOrTempDecl;
+ Action::DeclResult TagOrTempResult;
if (TemplateId && TK != Action::TK_Reference) {
// Explicit specialization or class template partial
// specialization. Let semantic analysis decide.
@@ -439,7 +439,7 @@ void Parser::ParseClassSpecifier(DeclSpec &DS,
TemplateId->getTemplateArgs(),
TemplateId->getTemplateArgIsType(),
TemplateId->NumArgs);
- TagOrTempDecl
+ TagOrTempResult
= Actions.ActOnClassTemplateSpecialization(CurScope, TagType, TK,
StartLoc, SS,
TemplateId->Template,
@@ -454,25 +454,26 @@ void Parser::ParseClassSpecifier(DeclSpec &DS,
TemplateParams? TemplateParams->size() : 0));
TemplateId->Destroy();
} else if (TemplateParams && TK != Action::TK_Reference)
- TagOrTempDecl = Actions.ActOnClassTemplate(CurScope, TagType, TK, StartLoc,
- SS, Name, NameLoc, Attr,
+ TagOrTempResult = Actions.ActOnClassTemplate(CurScope, TagType, TK,
+ StartLoc, SS, Name, NameLoc,
+ Attr,
Action::MultiTemplateParamsArg(Actions,
&(*TemplateParams)[0],
TemplateParams->size()));
else
- TagOrTempDecl = Actions.ActOnTag(CurScope, TagType, TK, StartLoc, SS, Name,
+ TagOrTempResult = Actions.ActOnTag(CurScope, TagType, TK, StartLoc, SS, Name,
NameLoc, Attr);
// Parse the optional base clause (C++ only).
if (getLang().CPlusPlus && Tok.is(tok::colon))
- ParseBaseClause(TagOrTempDecl);
+ ParseBaseClause(TagOrTempResult.get());
// If there is a body, parse it and inform the actions module.
if (Tok.is(tok::l_brace))
if (getLang().CPlusPlus)
- ParseCXXMemberSpecification(StartLoc, TagType, TagOrTempDecl);
+ ParseCXXMemberSpecification(StartLoc, TagType, TagOrTempResult.get());
else
- ParseStructUnionBody(StartLoc, TagType, TagOrTempDecl);
+ ParseStructUnionBody(StartLoc, TagType, TagOrTempResult.get());
else if (TK == Action::TK_Definition) {
// FIXME: Complain that we have a base-specifier list but no
// definition.
@@ -480,9 +481,10 @@ void Parser::ParseClassSpecifier(DeclSpec &DS,
}
const char *PrevSpec = 0;
- if (!TagOrTempDecl)
+ if (TagOrTempResult.isInvalid())
DS.SetTypeSpecError();
- else if (DS.SetTypeSpecType(TagType, StartLoc, PrevSpec, TagOrTempDecl))
+ else if (DS.SetTypeSpecType(TagType, StartLoc, PrevSpec,
+ TagOrTempResult.get()))
Diag(StartLoc, diag::err_invalid_decl_spec_combination) << PrevSpec;
}
OpenPOWER on IntegriCloud