]> granicus.if.org Git - clang/commitdiff
Fixed all my recent test cases to have the RUN command and
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 4 Oct 2007 00:22:33 +0000 (00:22 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 4 Oct 2007 00:22:33 +0000 (00:22 +0000)
fixed consequence of these changes in clang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42600 91177308-0d34-0410-b5e6-96231b3b80d8

17 files changed:
Sema/SemaDecl.cpp
clang.xcodeproj/project.pbxproj
include/clang/AST/DeclObjC.h
test/Sema/category-1.m
test/Sema/class-def-test-1.m
test/Sema/class-impl-1.m
test/Sema/class-proto-1.m
test/Sema/conflicting-ivar-test-1.m
test/Sema/forward-class-1.m
test/Sema/ivar-sem-check-1.m
test/Sema/method-undef-category-warn-1.m
test/Sema/method-undefined-warn-1.m
test/Sema/objc-legacy-implementation-1.m
test/Sema/protocol-test-1.m
test/Sema/protocol-test-2.m
test/Sema/undef-protocol-methods-1.m
test/Sema/undef-superclass-1.m

index c44ca81bdee17b468c31dba359de964fa43592b9..6bd05952c4613892ccc2bfa440685aace0c82fef 100644 (file)
@@ -1147,7 +1147,7 @@ Sema::DeclTy *Sema::ActOnStartClassImplementation(Scope *S,
   if (!IDecl) {
     // Legacy case of @implementation with no corresponding @interface.
     // Build, chain & install the interface decl into the identifier.
-    IDecl = new ObjcInterfaceDecl(AtClassImplLoc, 0, ClassName);
+    IDecl = new ObjcInterfaceDecl(SourceLocation(), 0, ClassName);
     IDecl->setNext(ClassName->getFETokenInfo<ScopedDecl>());
     ClassName->setFETokenInfo(IDecl);
     
@@ -1172,8 +1172,9 @@ void Sema::CheckImplementationIvars(ObjcImplementationDecl *ImpDecl,
                                     ObjcIvarDecl **ivars, unsigned numIvars) {
   assert(ImpDecl && "missing implementation decl");
   ObjcInterfaceDecl* IDecl = getObjCInterfaceDecl(ImpDecl->getIdentifier());
-  
-  if (!IDecl)
+  /// 2nd check is added to accomodate case of non-existing @interface decl.
+  /// (legacy objective-c @implementation decl without an @interface decl).
+  if (!IDecl || IDecl->ImplicitInterfaceDecl())
     return;
   assert(ivars && "missing @implementation ivars");
   
@@ -1289,8 +1290,8 @@ void Sema::ImplMethodsVsClassMethods(ObjcImplementationDecl* IMPDecl,
     CheckProtocolMethodDefs(PDecl, IncompleteImpl, InsMap, ClsMap);
   }
   if (IncompleteImpl)
-    Diag(IDecl->getLocation(), diag::warn_incomplete_impl_class, 
-         IDecl->getName());
+    Diag(IMPDecl->getLocation(), diag::warn_incomplete_impl_class, 
+         IMPDecl->getName());
 }
 
 /// ImplCategoryMethodsVsIntfMethods - Checks that methods declared in the
@@ -1339,7 +1340,7 @@ void Sema::ImplCategoryMethodsVsIntfMethods(ObjcCategoryImplDecl *CatImplDecl,
     CheckProtocolMethodDefs(PDecl, IncompleteImpl, InsMap, ClsMap);
   }
   if (IncompleteImpl)
-    Diag(CatClassDecl->getLocation(), diag::warn_incomplete_impl_category, 
+    Diag(CatImplDecl->getLocation(), diag::warn_incomplete_impl_category, 
          CatClassDecl->getCatName()->getName());
 }
 
index 8c6eeecfc072175c09d351f3ce0ddf028879d59e..a96d57f592bf8edcf40ad4e756b2ba5355db80bb 100644 (file)
                08FB7793FE84155DC02AAC07 /* Project object */ = {
                        isa = PBXProject;
                        buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
+                       compatibilityVersion = "Xcode 2.4";
                        hasScannedForEncodings = 1;
                        mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
                        projectDirPath = "";
index 5010cae1243f74a2160de8c03d193c028d4df51e..dfbb95c8e0a388e66ffa079f38d4618c3840cf0b 100644 (file)
@@ -132,6 +132,11 @@ public:
   ObjcMethodDecl *lookupInstanceMethod(Selector &Sel);
   ObjcMethodDecl *lookupClassMethod(Selector &Sel);
   
+  /// ImplicitInterfaceDecl - check that this is an implicitely declared
+  /// ObjcInterfaceDecl node. This is for legacy objective-c @implementation
+  /// declaration without an @interface declaration.
+  bool ImplicitInterfaceDecl() const { return getLocation().isInvalid(); }
+  
   static bool classof(const Decl *D) {
     return D->getKind() == ObjcInterface;
   }
@@ -502,6 +507,8 @@ class ObjcCategoryImplDecl : public Decl {
   ObjcMethodDecl **ClassMethods; // Null if category is not implementing any
   int NumClassMethods;  // -1 if category is not implementing any
   
+  SourceLocation Loc;
+  
   public:
     ObjcCategoryImplDecl(SourceLocation L, IdentifierInfo *Id,
                          ObjcInterfaceDecl *classInterface,
@@ -510,7 +517,7 @@ class ObjcCategoryImplDecl : public Decl {
     ClassInterface(classInterface),
     ObjcCatName(catName),
     InstanceMethods(0), NumInstanceMethods(-1),
-    ClassMethods(0), NumClassMethods(-1) {}
+    ClassMethods(0), NumClassMethods(-1), Loc(L) {}
         
     ObjcInterfaceDecl *getClassInterface() const { 
       return ClassInterface; 
@@ -528,6 +535,8 @@ class ObjcCategoryImplDecl : public Decl {
         ObjcMethodDecl **insMethods, unsigned numInsMembers,
         ObjcMethodDecl **clsMethods, unsigned numClsMembers);
   
+  SourceLocation getLocation() const { return Loc; }
+  
   static bool classof(const Decl *D) {
     return D->getKind() == ObjcCategoryImpl;
   }
index fc3cf6fac199343e449ce9039a58a3d467b3dc1c..d0f8d6facdc5a915962cfe1c01cfa7622b6df648 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface MyClass1 @end
 
 @protocol p1,p2,p3;
index d7734dfa562953d9d4f1917cae2d67ba56e1fdbb..a33e9652c6ed0bf8ba2949c817f7d7938bbc8a92 100644 (file)
@@ -1,8 +1,10 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @protocol SUPER;
 
 @interface SUPER <SUPER> @end // expected-error {{cannot find protocol definition for 'SUPER', referenced by 'SUPER'}}
 
-typedef int INTF; //  expected-error {{previou sdefinition is here}}
+typedef int INTF; //  expected-error {{previoudefinition is here}}
 
 @interface INTF @end // expected-error {{redefinition of 'INTF' as different kind of symbol}}
 
index 6bd7da19448e5bb0c6cdb59560f8edfbd447b6ab..dedce58d2c0f8f577171ff544b07e9bb43aca8f4 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 typedef int INTF3; // expected-error {{previous definition is here}}
 
 @interface SUPER @end // expected-error {{previous definition is here}}
index dfcd0a266d0cfaf1a5dd2d5e215336360fe1ed49..599290b1dd5423aafa79902f0aa4cd3506613732 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface INTF1 @end
 
 @protocol p1,p2,p3;
index e08da34bc205de6d3c30e4b05675692c1decc89b..7d9cdb62234267d11c7e4035e48a906dea6e42e6 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface INTF 
 {
 @public
index 4e4e319c8347954b01e6d4481e26e17091ade21d..2b9369ba5f8a572743e245e6bb1fda3d39be390f 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @class FOO, BAR;
 @class FOO, BAR;
 
index fd7a0ff62c48f98cb6b7d1bd4cdd4c87d9fc5c3e..4e810a29a8129ee7c1c5b21ba765b17550f0e0c8 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 struct S;
 typedef int FOO();
 
@@ -6,9 +8,11 @@ typedef int FOO();
        struct F {} JJ;
        int arr[];  // expected-error {{field 'arr' has incomplete type}}
        struct S IC;  // expected-error {{field 'IC' has incomplete type}}
-       struct T { struct T {} X; }YYY; // expected-error {{nested redefinition of 'struct'}}
+       struct T { // expected-error {{previous definition is here}}
+         struct T {} X;  // expected-error {{nested redefinition of 'struct'}}
+       }YYY; 
        FOO    BADFUNC;  // expected-error {{field 'BADFUNC' declared as a function}}
-       int kaka;
+       int kaka;       // expected-error {{previous definition is here}}
        int kaka;       // expected-error {{duplicate member 'kaka'}}
        char ch[];      // expected-error {{field 'ch' has incomplete type}}
 }
index ec68950cb33845c26ae3235eca49bc40d76edcb9..af5a0e2befaad61de8975f059c00e68f8c6fad99 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface MyClass1 
 @end
 
 - (void) meth2;        // expected-warning {{method definition for 'meth2' not found}}
 @end
 
-@implementation MyClass1(CAT)
+@implementation MyClass1(CAT) // expected-warning {{incomplete implementation of category 'CAT'}}
 - (void) Pmeth1{}
-@end  // expected-warning {{incomplete implementation of category 'CAT'}}
+@end
 
 @interface MyClass1(DOG) <P>
 - (void)ppp;  // expected-warning {{method definition for 'ppp' not found}}
 @end
 
-@implementation MyClass1(DOG)
+@implementation MyClass1(DOG) // expected-warning {{incomplete implementation of category 'DOG'}}
 - (void) Pmeth {}
-@end  // expected-warning {{incomplete implementation of category 'DOG'}}
+@end
 
 @implementation MyClass1(CAT1)
 @end
index 29faa7d840c0cafe046206609dc5138aec14ef00..0e4e6a1172860f65297e51ccf3ddb381a4ced149 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface INTF
 - (void) meth;
 - (void) meth : (int) arg1;
@@ -6,12 +8,11 @@
 + (void) cls_meth1 : (int) arg1; // expected-warning {{method definition for 'cls_meth1:' not found}}
 @end
 
-@implementation INTF
+@implementation INTF   // expected-warning {{incomplete implementation of class 'INTF'}}
 - (void) meth {}
 - (void) meth : (int) arg2{}
 - (void) cls_meth1 : (int) arg2{}
-@end   // expected-warning {{incomplete implementation of class 'INTF'}}
-
+@end
 
 @interface INTF1
 - (void) meth;
 + (void) cls_meth1 : (int) arg1; // expected-warning {{method definition for 'cls_meth1:' not found}}
 @end
 
-@implementation INTF1
+@implementation INTF1 // expected-warning {{incomplete implementation of class 'INTF1'}}
 - (void) meth {}
 - (void) meth : (int) arg2{}
 - (void) cls_meth1 : (int) arg2{}
-@end // expected-warning {{incomplete implementation of class 'INTF1'}}
-
+@end
 
 @interface INTF2
 - (void) meth;
index c706ec75437a6a14b2c02cd4d0c2fe9307657ee8..76434471d149eec3456636df68b4c62fde6bcc59 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @implementation INTF // expected-warning {{cannot find interface declaration for 'INTF'}}
 @end
 
index 37070d9cd0484be3c04f1b8a57a49ca94ff0805a..6fb28b533cf7721f7dff8179e05b3cfb5188ee79 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @protocol PROTO1
 @required 
 - (int) FooBar;
index 04ad3c6740424cced0996bf6cf588620969a6d7f..f891995bc6d988f1e064fb4b151e89c3c3effcda 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @interface INTF1 @end
 
 @protocol p1,p2,p3;
index 438feb2df5de5fca86a7eb9e4024fdeee9cb0223..748b151fde41e558c33a8322773d171e1aa6aecf 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @protocol P1
 - (void) P1proto; // expected-warning {{method definition for 'P1proto' not found}}
 + (void) ClsP1Proto; // expected-warning {{method definition for 'ClsP1Proto' not found}}
 @end
 
 @protocol PROTO<P1, P3>
-- (void) meth;                 // expected-warning {{method definition for 'meth' not found
-- (void) meth : (int) arg1;    // expected-warning {{method definition for 'meth:' not found
-+ (void) cls_meth : (int) arg1; // expected-warning {{method definition for 'cls_meth:' not found
+- (void) meth;                 // expected-warning {{method definition for 'meth' not found}}
+- (void) meth : (int) arg1;    // expected-warning {{method definition for 'meth:' not found}}
++ (void) cls_meth : (int) arg1; // expected-warning {{method definition for 'cls_meth:' not found}}
 @end
 
 @interface INTF <PROTO>
 @end
 
-@implementation INTF
+@implementation INTF   // expected-warning {{incomplete implementation of class 'INTF'}}
 - (void) DefP1proto{}
 
 + (void) DefClsP3Proto{}
 
-@end // expected-warning {{ncomplete implementation of class 'INTF'}}
+@end
index 0b5b7c10d0bd2ff3b6b58c7f1d6d15e54d1b3324..822b97185b103be22cb488335f1c819ba68c91d2 100644 (file)
@@ -1,3 +1,5 @@
+// RUN: clang -fsyntax-only -verify %s
+
 @class SUPER, Y;
 
 @interface INTF :SUPER  // expected-error {{cannot find interface declaration for 'SUPER', superclass of 'INTF'}}