summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2009-02-21 19:50:43 +0000
committerSteve Naroff <snaroff@apple.com>2009-02-21 19:50:43 +0000
commitcd8d5722830c7765e98b2e78b44bb7d6932c658d (patch)
tree9f850de60ebc0e0c3992f7766c2162f3b2be6d3c
parent0c9404e0a764fc15a7080ccabf10eeacd2265d68 (diff)
downloadbcm5719-llvm-cd8d5722830c7765e98b2e78b44bb7d6932c658d.tar.gz
bcm5719-llvm-cd8d5722830c7765e98b2e78b44bb7d6932c658d.zip
Warn about bogus protocol qualifiers.
llvm-svn: 65241
-rw-r--r--clang/include/clang/Basic/DiagnosticSemaKinds.def2
-rw-r--r--clang/lib/Sema/SemaType.cpp3
-rw-r--r--clang/test/SemaObjC/protocol-archane.m7
3 files changed, 11 insertions, 1 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.def b/clang/include/clang/Basic/DiagnosticSemaKinds.def
index cce97aa48f9..7ebb5a706cd 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.def
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.def
@@ -1402,4 +1402,6 @@ DIAG(warn_objc_array_of_interfaces, WARNING,
"array of interface %0 should probably be an array of pointers")
DIAG(ext_c99_array_usage, EXTENSION,
"use of C99-specific array features, accepted as an extension")
+DIAG(warn_ignoring_objc_qualifiers, WARNING,
+ "ignoring protocol qualifiers on non-ObjC type")
diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp
index 252cd2d533c..acdeec6ba94 100644
--- a/clang/lib/Sema/SemaType.cpp
+++ b/clang/lib/Sema/SemaType.cpp
@@ -151,6 +151,9 @@ QualType Sema::ConvertDeclSpecToType(const DeclSpec &DS) {
// id<protocol-list>
Result = Context.getObjCQualifiedIdType((ObjCProtocolDecl**)PQ,
DS.getNumProtocolQualifiers());
+ else
+ Diag(DS.getSourceRange().getBegin(),
+ diag::warn_ignoring_objc_qualifiers) << DS.getSourceRange();
}
// TypeQuals handled by caller.
break;
diff --git a/clang/test/SemaObjC/protocol-archane.m b/clang/test/SemaObjC/protocol-archane.m
index bfae348f082..2cba1fad051 100644
--- a/clang/test/SemaObjC/protocol-archane.m
+++ b/clang/test/SemaObjC/protocol-archane.m
@@ -21,4 +21,9 @@ void foo(id x) {
// FIXME: provide a better diagnostic (no typedef).
- (void)m2:(id <MyProtocol> short)arg1; // expected-error {{'short type-name' is invalid}}
-@end \ No newline at end of file
+@end
+
+typedef int NotAnObjCObjectType;
+
+// GCC doesn't diagnose this.
+NotAnObjCObjectType <SomeProtocol> *obj; // expected-warning {{ignoring protocol qualifiers on non-ObjC type}}
OpenPOWER on IntegriCloud