[cfe-commits] r54953 - in /cfe/trunk: include/clang/Basic/DiagnosticKinds.def lib/Sema/SemaType.cpp test/SemaObjC/interface-1.m

Chris Lattner sabre at nondot.org
Mon Aug 18 15:49:54 PDT 2008


Author: lattner
Date: Mon Aug 18 17:49:54 2008
New Revision: 54953

URL: http://llvm.org/viewvc/llvm-project?rev=54953&view=rev
Log:
warn when someone tries to make an array of ObjC interfaces instead of array
of pointers to them.  rdar://4304469

Modified:
    cfe/trunk/include/clang/Basic/DiagnosticKinds.def
    cfe/trunk/lib/Sema/SemaType.cpp
    cfe/trunk/test/SemaObjC/interface-1.m

Modified: cfe/trunk/include/clang/Basic/DiagnosticKinds.def
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticKinds.def?rev=54953&r1=54952&r2=54953&view=diff

==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticKinds.def (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticKinds.def Mon Aug 18 17:49:54 2008
@@ -406,6 +406,8 @@
      "missing @end")
 DIAG(warn_objc_protocol_qualifier_missing_id, WARNING,
      "protocol qualifiers without 'id' is archaic")
+DIAG(warn_objc_array_of_interfaces, WARNING,
+     "array of interface '%0' should probably be array of pointers")
 
 DIAG(err_objc_illegal_visibility_spec, ERROR,
      "illegal visibility specification")

Modified: cfe/trunk/lib/Sema/SemaType.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=54953&r1=54952&r2=54953&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaType.cpp (original)
+++ cfe/trunk/lib/Sema/SemaType.cpp Mon Aug 18 17:49:54 2008
@@ -338,7 +338,11 @@
           T = Context.IntTy;
           D.setInvalidType(true);
         }
+      } else if (T->isObjCInterfaceType()) {
+        Diag(DeclType.Loc, diag::warn_objc_array_of_interfaces,
+             T.getAsString());
       }
+      
       // C99 6.7.5.2p1: The size expression shall have integer type.
       if (ArraySize && !ArraySize->getType()->isIntegerType()) {
         Diag(ArraySize->getLocStart(), diag::err_array_size_non_int, 

Modified: cfe/trunk/test/SemaObjC/interface-1.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/interface-1.m?rev=54953&r1=54952&r2=54953&view=diff

==============================================================================
--- cfe/trunk/test/SemaObjC/interface-1.m (original)
+++ cfe/trunk/test/SemaObjC/interface-1.m Mon Aug 18 17:49:54 2008
@@ -15,3 +15,13 @@
 @end
 
 
+// rdar://4304469
+ at interface INT1
+ at end
+
+void test2() {
+    INT1 b[3];          // expected-warning {{array of interface 'INT1' should probably be array of pointers}}
+    INT1 *c = &b[0];
+    ++c;
+}
+





More information about the cfe-commits mailing list