diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-02-18 17:45:20 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-02-18 17:45:20 +0000 |
commit | 220cac5e898d1c89f1813a9198e2c4b4a0f25012 (patch) | |
tree | c49b52296042d55afad66e6075396e795bbfe8b8 /clang/lib/Parse/ParseObjc.cpp | |
parent | ab89bc8ca1d93f7052daff3b7ca3b361fc83a47b (diff) | |
download | bcm5719-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.cpp | 16 |
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 |