From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/SemaObjC/forward-class-1.m | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 clang/test/SemaObjC/forward-class-1.m (limited to 'clang/test/SemaObjC/forward-class-1.m') diff --git a/clang/test/SemaObjC/forward-class-1.m b/clang/test/SemaObjC/forward-class-1.m new file mode 100644 index 0000000..85c6c87 --- /dev/null +++ b/clang/test/SemaObjC/forward-class-1.m @@ -0,0 +1,58 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -Wno-objc-root-class %s + +@class FOO, BAR; // expected-note {{forward declaration of class here}} +@class FOO, BAR; + +@interface INTF : FOO // expected-error {{attempting to use the forward class 'FOO' as superclass of 'INTF'}} +@end + +@interface FOO +- (BAR*) Meth1; +- (FOO*) Meth2; +@end + +@interface INTF1 : FOO +@end + +@interface INTF2 : INTF1 // expected-note {{previous definition is here}} +@end + + +@class INTF1, INTF2; + +@interface INTF2 : INTF1 // expected-error {{duplicate interface definition for class 'INTF2'}} +@end + +// 2nd test of a forward class declaration matching a typedef name +// referring to class object. +// FIXME. This may become a negative test should we decide to make this an error. +// +@interface NSObject @end + +@protocol XCElementP @end + +typedef NSObject XCElement; // expected-note {{previous definition is here}} + +@interface XCElementMainImp { + XCElement * _editingElement; +} +@end + +@class XCElement; // expected-warning {{redefinition of forward class 'XCElement' of a typedef name of an object type is ignored}} + +@implementation XCElementMainImp +- (XCElement *)editingElement { return _editingElement; } +@end + + +// rdar://9653341 +@class B; // expected-note {{forward declaration of class here}} +@interface A : B {} // expected-error {{attempting to use the forward class 'B' as superclass of 'A'}} +@end + +@interface B : A {} +@end + +@implementation A @end +@implementation B @end + -- cgit v1.2.3