From: Fariborz Jahanian Date: Thu, 4 Oct 2007 00:22:33 +0000 (+0000) Subject: Fixed all my recent test cases to have the RUN command and X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4b6df3fa953267c5d755628c8afd818bb571e579;p=clang Fixed all my recent test cases to have the RUN command and fixed consequence of these changes in clang. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42600 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index c44ca81bde..6bd05952c4 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -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()); 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()); } diff --git a/clang.xcodeproj/project.pbxproj b/clang.xcodeproj/project.pbxproj index 8c6eeecfc0..a96d57f592 100644 --- a/clang.xcodeproj/project.pbxproj +++ b/clang.xcodeproj/project.pbxproj @@ -737,6 +737,7 @@ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */; + compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* clang */; projectDirPath = ""; diff --git a/include/clang/AST/DeclObjC.h b/include/clang/AST/DeclObjC.h index 5010cae124..dfbb95c8e0 100644 --- a/include/clang/AST/DeclObjC.h +++ b/include/clang/AST/DeclObjC.h @@ -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; } diff --git a/test/Sema/category-1.m b/test/Sema/category-1.m index fc3cf6fac1..d0f8d6facd 100644 --- a/test/Sema/category-1.m +++ b/test/Sema/category-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @interface MyClass1 @end @protocol p1,p2,p3; diff --git a/test/Sema/class-def-test-1.m b/test/Sema/class-def-test-1.m index d7734dfa56..a33e9652c6 100644 --- a/test/Sema/class-def-test-1.m +++ b/test/Sema/class-def-test-1.m @@ -1,8 +1,10 @@ +// RUN: clang -fsyntax-only -verify %s + @protocol SUPER; @interface 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 {{previous definition is here}} @interface INTF @end // expected-error {{redefinition of 'INTF' as different kind of symbol}} diff --git a/test/Sema/class-impl-1.m b/test/Sema/class-impl-1.m index 6bd7da1944..dedce58d2c 100644 --- a/test/Sema/class-impl-1.m +++ b/test/Sema/class-impl-1.m @@ -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}} diff --git a/test/Sema/class-proto-1.m b/test/Sema/class-proto-1.m index dfcd0a266d..599290b1dd 100644 --- a/test/Sema/class-proto-1.m +++ b/test/Sema/class-proto-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @interface INTF1 @end @protocol p1,p2,p3; diff --git a/test/Sema/conflicting-ivar-test-1.m b/test/Sema/conflicting-ivar-test-1.m index e08da34bc2..7d9cdb6223 100644 --- a/test/Sema/conflicting-ivar-test-1.m +++ b/test/Sema/conflicting-ivar-test-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @interface INTF { @public diff --git a/test/Sema/forward-class-1.m b/test/Sema/forward-class-1.m index 4e4e319c83..2b9369ba5f 100644 --- a/test/Sema/forward-class-1.m +++ b/test/Sema/forward-class-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @class FOO, BAR; @class FOO, BAR; diff --git a/test/Sema/ivar-sem-check-1.m b/test/Sema/ivar-sem-check-1.m index fd7a0ff62c..4e810a29a8 100644 --- a/test/Sema/ivar-sem-check-1.m +++ b/test/Sema/ivar-sem-check-1.m @@ -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}} } diff --git a/test/Sema/method-undef-category-warn-1.m b/test/Sema/method-undef-category-warn-1.m index ec68950cb3..af5a0e2bef 100644 --- a/test/Sema/method-undef-category-warn-1.m +++ b/test/Sema/method-undef-category-warn-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @interface MyClass1 @end @@ -10,17 +12,17 @@ - (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)

- (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 diff --git a/test/Sema/method-undefined-warn-1.m b/test/Sema/method-undefined-warn-1.m index 29faa7d840..0e4e6a1172 100644 --- a/test/Sema/method-undefined-warn-1.m +++ b/test/Sema/method-undefined-warn-1.m @@ -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; @@ -21,12 +22,11 @@ + (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; diff --git a/test/Sema/objc-legacy-implementation-1.m b/test/Sema/objc-legacy-implementation-1.m index c706ec7543..76434471d1 100644 --- a/test/Sema/objc-legacy-implementation-1.m +++ b/test/Sema/objc-legacy-implementation-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @implementation INTF // expected-warning {{cannot find interface declaration for 'INTF'}} @end diff --git a/test/Sema/protocol-test-1.m b/test/Sema/protocol-test-1.m index 37070d9cd0..6fb28b533c 100644 --- a/test/Sema/protocol-test-1.m +++ b/test/Sema/protocol-test-1.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @protocol PROTO1 @required - (int) FooBar; diff --git a/test/Sema/protocol-test-2.m b/test/Sema/protocol-test-2.m index 04ad3c6740..f891995bc6 100644 --- a/test/Sema/protocol-test-2.m +++ b/test/Sema/protocol-test-2.m @@ -1,3 +1,5 @@ +// RUN: clang -fsyntax-only -verify %s + @interface INTF1 @end @protocol p1,p2,p3; diff --git a/test/Sema/undef-protocol-methods-1.m b/test/Sema/undef-protocol-methods-1.m index 438feb2df5..748b151fde 100644 --- a/test/Sema/undef-protocol-methods-1.m +++ b/test/Sema/undef-protocol-methods-1.m @@ -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}} @@ -15,17 +17,17 @@ @end @protocol PROTO -- (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 @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 diff --git a/test/Sema/undef-superclass-1.m b/test/Sema/undef-superclass-1.m index 0b5b7c10d0..822b97185b 100644 --- a/test/Sema/undef-superclass-1.m +++ b/test/Sema/undef-superclass-1.m @@ -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'}}