]> granicus.if.org Git - clang/commitdiff
Fix http://llvm.org/bugs/show_bug.cgi?id=2816.
authorSteve Naroff <snaroff@apple.com>
Mon, 22 Sep 2008 10:28:57 +0000 (10:28 +0000)
committerSteve Naroff <snaroff@apple.com>
Mon, 22 Sep 2008 10:28:57 +0000 (10:28 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56433 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseDecl.cpp
test/SemaObjC/protocol-archane.m

index e81a8b87c39d9d78b63cf5b068d70b84a2504138..80970a2f14d880682db1f1fb23a2eb5159836807 100644 (file)
@@ -445,9 +445,9 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) {
       
       DS.SetRangeEnd(EndProtoLoc);
 
-      // Do not allow any other declspecs after the protocol qualifier list
-      // "<foo,bar>short" is not allowed.
-      goto DoneWithDeclSpec;
+      // Need to support trailing type qualifiers (e.g. "id<p> const").
+      // If a type specifier follows, it will be diagnosed elsewhere.
+      continue;
     }
     // GNU attributes support.
     case tok::kw___attribute:
@@ -585,9 +585,9 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS) {
 
         Diag(Loc, diag::warn_objc_protocol_qualifier_missing_id,
              SourceRange(Loc, EndProtoLoc));
-        // Do not allow any other declspecs after the protocol qualifier list
-        // "<foo,bar>short" is not allowed.
-        goto DoneWithDeclSpec;
+        // Need to support trailing type qualifiers (e.g. "id<p> const").
+        // If a type specifier follows, it will be diagnosed elsewhere.
+        continue;
       }
     }
     // If the specifier combination wasn't legal, issue a diagnostic.
index 3ace0ac3de09ce44e5a190962b466d7b9cf035c7..19736cdf50546f7444c83476c1dda8356fdba13d 100644 (file)
@@ -12,3 +12,13 @@ void foo(id x) {
   [(<SomeProtocol>)x bar];      // expected-warning {{protocol qualifiers without 'id' is archaic}}
 }
 
+@protocol MyProtocol
+- (void)doSomething;
+@end
+
+@interface MyClass
+- (void)m1:(id <MyProtocol> const)arg1;
+
+// FIXME: provide a better diagnostic (no typedef).
+- (void)m2:(id <MyProtocol> short)arg1; // expected-error {{'short typedef' is invalid}}
+@end
\ No newline at end of file