summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseObjc.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-02-18 17:45:20 +0000
committerDouglas Gregor <dgregor@apple.com>2009-02-18 17:45:20 +0000
commit220cac5e898d1c89f1813a9198e2c4b4a0f25012 (patch)
treec49b52296042d55afad66e6075396e795bbfe8b8 /clang/lib/Parse/ParseObjc.cpp
parentab89bc8ca1d93f7052daff3b7ca3b361fc83a47b (diff)
downloadbcm5719-llvm-220cac5e898d1c89f1813a9198e2c4b4a0f25012.tar.gz
bcm5719-llvm-220cac5e898d1c89f1813a9198e2c4b4a0f25012.zip
Update Parser::ParseTypeName to return a TypeResult, which also tells
us whether there was an error in trying to parse a type-name (type-id in C++). This allows propagation of errors further in the compiler, suppressing more bogus error messages. llvm-svn: 64922
Diffstat (limited to 'clang/lib/Parse/ParseObjc.cpp')
-rw-r--r--clang/lib/Parse/ParseObjc.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index a147ee47e82..4ddddb3749b 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -629,8 +629,11 @@ Parser::TypeTy *Parser::ParseObjCTypeName(ObjCDeclSpec &DS) {
ParseObjCTypeQualifierList(DS);
TypeTy *Ty = 0;
- if (isTypeSpecifierQualifier())
- Ty = ParseTypeName();
+ if (isTypeSpecifierQualifier()) {
+ TypeResult TypeSpec = ParseTypeName();
+ if (!TypeSpec.isInvalid())
+ Ty = TypeSpec.get();
+ }
if (Tok.is(tok::r_paren))
ConsumeParen();
@@ -1627,12 +1630,15 @@ Parser::ParseObjCEncodeExpression(SourceLocation AtLoc) {
SourceLocation LParenLoc = ConsumeParen();
- TypeTy *Ty = ParseTypeName();
+ TypeResult Ty = ParseTypeName();
SourceLocation RParenLoc = MatchRHSPunctuation(tok::r_paren, LParenLoc);
- return Owned(Actions.ParseObjCEncodeExpression(AtLoc, EncLoc, LParenLoc, Ty,
- RParenLoc));
+ if (Ty.isInvalid())
+ return ExprError();
+
+ return Owned(Actions.ParseObjCEncodeExpression(AtLoc, EncLoc, LParenLoc,
+ Ty.get(), RParenLoc));
}
/// objc-protocol-expression
OpenPOWER on IntegriCloud