summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-10-21 14:15:04 +0000
committerSteve Naroff <snaroff@apple.com>2008-10-21 14:15:04 +0000
commit90255b4f546ad47dc5074cbee7749a948e2f1cb2 (patch)
tree1f68433f442755d848f7c09ee7be7e5c1cd7234a
parente020fa1b854414c9622ed857a663091863a0cf11 (diff)
downloadbcm5719-llvm-90255b4f546ad47dc5074cbee7749a948e2f1cb2.tar.gz
bcm5719-llvm-90255b4f546ad47dc5074cbee7749a948e2f1cb2.zip
Fix a crasher during error recovery in Parser::ParseObjCTypeName().
Found this while fixing another unrelated radar. llvm-svn: 57904
-rw-r--r--clang/lib/Parse/ParseObjc.cpp3
-rw-r--r--clang/test/SemaObjC/invalid-typename.m12
2 files changed, 14 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index 10ac42718e4..8487ea2338f 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -635,7 +635,8 @@ Parser::TypeTy *Parser::ParseObjCTypeName(ObjCDeclSpec &DS) {
MatchRHSPunctuation(tok::r_paren, LParenLoc);
}
}
- RParenLoc = ConsumeParen();
+ if (Tok.is(tok::r_paren))
+ RParenLoc = ConsumeParen();
return Ty;
}
diff --git a/clang/test/SemaObjC/invalid-typename.m b/clang/test/SemaObjC/invalid-typename.m
new file mode 100644
index 00000000000..9996789e212
--- /dev/null
+++ b/clang/test/SemaObjC/invalid-typename.m
@@ -0,0 +1,12 @@
+// RUN: clang -fsyntax-only -verify %s
+
+@class NSString, NSArray;
+
+@protocol ISyncSessionCallback
+- (oneway void)clientWithId:(bycopy NSString *)clientId
+ canBeginSyncingPlanWithId:(bycopy NSString *)planId
+ syncModes:(bycopy NSArray /* ISDSyncState */ *)syncModes
+ entities:(bycopy NSArray /* ISDEntity */ *)entities
+ truthPullers:(bycopy NSDictionary /* NSString -> [NSString] */ *)truthPullers; // expected-error{{expected ')'}} expected-error{{to match this '('}}
+@end
+
OpenPOWER on IntegriCloud