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.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 663fea50963..1cf4a8fe5fd 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -301,21 +301,23 @@ Parser::DeclPtrTy Parser::ParseStaticAssertDeclaration() {
/// identifier
/// simple-template-id
///
-Parser::TypeTy *Parser::ParseClassName(SourceLocation &EndLocation,
- const CXXScopeSpec *SS) {
+Parser::TypeResult Parser::ParseClassName(SourceLocation &EndLocation,
+ const CXXScopeSpec *SS) {
// Check whether we have a template-id that names a type.
if (Tok.is(tok::annot_template_id)) {
TemplateIdAnnotation *TemplateId
= static_cast<TemplateIdAnnotation *>(Tok.getAnnotationValue());
if (TemplateId->Kind == TNK_Type_template) {
- if (AnnotateTemplateIdTokenAsType(SS))
- return 0;
+ AnnotateTemplateIdTokenAsType(SS);
assert(Tok.is(tok::annot_typename) && "template-id -> type failed");
TypeTy *Type = Tok.getAnnotationValue();
EndLocation = Tok.getAnnotationEndLoc();
ConsumeToken();
- return Type;
+
+ if (Type)
+ return Type;
+ return true;
}
// Fall through to produce an error below.
@@ -323,7 +325,7 @@ Parser::TypeTy *Parser::ParseClassName(SourceLocation &EndLocation,
if (Tok.isNot(tok::identifier)) {
Diag(Tok, diag::err_expected_class_name);
- return 0;
+ return true;
}
// We have an identifier; check whether it is actually a type.
@@ -331,7 +333,7 @@ Parser::TypeTy *Parser::ParseClassName(SourceLocation &EndLocation,
Tok.getLocation(), CurScope, SS);
if (!Type) {
Diag(Tok, diag::err_expected_class_name);
- return 0;
+ return true;
}
// Consume the identifier.
@@ -592,7 +594,7 @@ Parser::BaseResult Parser::ParseBaseSpecifier(DeclPtrTy ClassDecl) {
if (IsVirtual) {
// Complain about duplicate 'virtual'
Diag(VirtualLoc, diag::err_dup_virtual)
- << SourceRange(VirtualLoc, VirtualLoc);
+ << CodeModificationHint::CreateRemoval(SourceRange(VirtualLoc));
}
IsVirtual = true;
@@ -607,8 +609,8 @@ Parser::BaseResult Parser::ParseBaseSpecifier(DeclPtrTy ClassDecl) {
// Parse the class-name.
SourceLocation EndLocation;
- TypeTy *BaseType = ParseClassName(EndLocation, &SS);
- if (!BaseType)
+ TypeResult BaseType = ParseClassName(EndLocation, &SS);
+ if (BaseType.isInvalid())
return true;
// Find the complete source range for the base-specifier.
@@ -617,7 +619,7 @@ Parser::BaseResult Parser::ParseBaseSpecifier(DeclPtrTy ClassDecl) {
// Notify semantic analysis that we have parsed a complete
// base-specifier.
return Actions.ActOnBaseSpecifier(ClassDecl, Range, IsVirtual, Access,
- BaseType, BaseLoc);
+ BaseType.get(), BaseLoc);
}
/// getAccessSpecifierIfPresent - Determine whether the next token is
OpenPOWER on IntegriCloud