From: Erik Pilkington Date: Wed, 26 Jun 2019 23:39:23 +0000 (+0000) Subject: [ObjC] Improve error message for a malformed objc-type-name X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c760628a81bf9f7b4dc75d4f8c1d178f7c68fe2f;p=clang [ObjC] Improve error message for a malformed objc-type-name If the type didn't exist, we used to emit a really bad error: t.m:3:12: error: expected ')' -(nullable NoSuchType)foo3; ^ rdar://50925632 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364489 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseObjc.cpp b/lib/Parse/ParseObjc.cpp index c2e73d5e82..a8d6f7fd60 100644 --- a/lib/Parse/ParseObjc.cpp +++ b/lib/Parse/ParseObjc.cpp @@ -1247,11 +1247,11 @@ ParsedType Parser::ParseObjCTypeName(ObjCDeclSpec &DS, BalancedDelimiterTracker T(*this, tok::l_paren); T.consumeOpen(); - SourceLocation TypeStartLoc = Tok.getLocation(); ObjCDeclContextSwitch ObjCDC(*this); // Parse type qualifiers, in, inout, etc. ParseObjCTypeQualifierList(DS, context); + SourceLocation TypeStartLoc = Tok.getLocation(); ParsedType Ty; if (isTypeSpecifierQualifier() || isObjCInstancetype()) { diff --git a/test/Parser/objc-interfaces.m b/test/Parser/objc-interfaces.m index 0ae17f15ee..911fa16a01 100644 --- a/test/Parser/objc-interfaces.m +++ b/test/Parser/objc-interfaces.m @@ -6,3 +6,6 @@ - (int*) foo2 __attribute__((deprecated)) : (int) x1 __attribute__((deprecated)); // expected-error {{expected ';' after method prototype}} expected-error {{method type specifier must start with '-' or '+'}} @end +@interface X +-(nullable NoSuchType)foo3; // expected-error {{expected a type}} +@end diff --git a/test/SemaObjC/invalid-typename.m b/test/SemaObjC/invalid-typename.m index 50dd188738..4e2dba8e14 100644 --- a/test/SemaObjC/invalid-typename.m +++ b/test/SemaObjC/invalid-typename.m @@ -7,6 +7,6 @@ canBeginSyncingPlanWithId:(bycopy NSString *)planId syncModes:(bycopy NSArray /* ISDSyncState */ *)syncModes entities:(bycopy NSArray /* ISDEntity */ *)entities - truthPullers:(bycopy NSDictionary /* NSString -> [NSString] */ *)truthPullers; // expected-error{{expected ')'}} expected-note {{to match this '('}} + truthPullers:(bycopy NSDictionary /* NSString -> [NSString] */ *)truthPullers; // expected-error {{expected a type}} @end