aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseExprCXX.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-02-26 08:45:28 +0000
committerJohn McCall <rjmccall@apple.com>2010-02-26 08:45:28 +0000
commit9ba6166f4a78722e7df8ffbd64eb788bfdf2764a (patch)
tree9190313545ecd2cecefbc77fb7fe5d7d27ad8721 /lib/Parse/ParseExprCXX.cpp
parentdc0a11cf52cf34ffae941255df60a086e44d1a71 (diff)
Fix an assertion-on-error during tentative constructor parsing by
propagating error conditions out of the various annotate-me-a-snowflake routines. Generally (but not universally) removes redundant diagnostics as well as, you know, not crashing on bad code. On the other hand, I have just signed myself up to fix fiddly parser errors for the next week. Again. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97221 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseExprCXX.cpp')
-rw-r--r--lib/Parse/ParseExprCXX.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/Parse/ParseExprCXX.cpp b/lib/Parse/ParseExprCXX.cpp
index 7998b26f9b..f1e989f4a7 100644
--- a/lib/Parse/ParseExprCXX.cpp
+++ b/lib/Parse/ParseExprCXX.cpp
@@ -55,7 +55,7 @@ using namespace clang;
/// member access expression, e.g., the \p T:: in \p p->T::m.
///
-/// \returns true if a scope specifier was parsed.
+/// \returns true if there was an error parsing a scope specifier
bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
Action::TypeTy *ObjectType,
bool EnteringContext,
@@ -67,7 +67,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
SS.setScopeRep(Tok.getAnnotationValue());
SS.setRange(Tok.getAnnotationRange());
ConsumeToken();
- return true;
+ return false;
}
bool HasScopeSpecifier = false;
@@ -168,10 +168,10 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
= Actions.ActOnDependentTemplateName(TemplateKWLoc, SS, TemplateName,
ObjectType, EnteringContext);
if (!Template)
- break;
+ return true;
if (AnnotateTemplateIdToken(Template, TNK_Dependent_template_name,
&SS, TemplateName, TemplateKWLoc, false))
- break;
+ return true;
continue;
}
@@ -188,7 +188,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
= static_cast<TemplateIdAnnotation *>(Tok.getAnnotationValue());
if (CheckForDestructor && GetLookAheadToken(2).is(tok::tilde)) {
*MayBePseudoDestructor = true;
- return HasScopeSpecifier;
+ return false;
}
if (TemplateId->Kind == TNK_Type_template ||
@@ -258,7 +258,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
!Actions.isNonTypeNestedNameSpecifier(CurScope, SS, Tok.getLocation(),
II, ObjectType)) {
*MayBePseudoDestructor = true;
- return HasScopeSpecifier;
+ return false;
}
// We have an identifier followed by a '::'. Lookup this name
@@ -303,7 +303,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
ConsumeToken();
if (AnnotateTemplateIdToken(Template, TNK, &SS, TemplateName,
SourceLocation(), false))
- break;
+ return true;
continue;
}
}
@@ -319,7 +319,7 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
if (CheckForDestructor && Tok.is(tok::tilde))
*MayBePseudoDestructor = true;
- return HasScopeSpecifier;
+ return false;
}
/// ParseCXXIdExpression - Handle id-expression.