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:
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.
[(<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