1// RUN: %clang_cc1 -verify -fsyntax-only -Wno-objc-root-class %s 2 3@class I0; // expected-note 2{{forward declaration of class here}} 4 5int g0 = sizeof(I0); // expected-error{{invalid application of 'sizeof' to an incomplete type 'I0'}} 6 7void *g3(I0 *P) { 8 P = P+5; // expected-error {{arithmetic on a pointer to an incomplete type 'I0'}} 9 10 return &P[4]; // expected-error{{expected method to read array element not found on object of type 'I0 *'}} 11} 12 13 14 15@interface I0 { 16@public 17 char x[4]; 18} 19 20@property int p0; 21@end 22 23// size == 4 24int g1[ sizeof(I0) // expected-error {{application of 'sizeof' to interface 'I0' is not supported on this architecture and platform}} 25 == 4 ? 1 : -1]; 26 27@implementation I0 28@synthesize p0 = _p0; 29@end 30 31// size == 4 (we do not include extended properties in the 32// sizeof). 33int g2[ sizeof(I0) // expected-error {{application of 'sizeof' to interface 'I0' is not supported on this architecture and platform}} 34 == 4 ? 1 : -1]; 35 36@interface I1 37@property int p0; 38@end 39 40@implementation I1 41@synthesize p0 = _p0; 42@end 43 44typedef struct { @defs(I1); } I1_defs; // expected-error {{use of @defs is not supported on this architecture and platform}} 45 46// FIXME: This is currently broken due to the way the record layout we 47// create is tied to whether we have seen synthesized properties. Ugh. 48// int g3[ sizeof(I1) == 0 ? 1 : -1]; 49 50int bar(I0 *P) { 51 P = P+5; // expected-error {{arithmetic on pointer to interface 'I0', which is not a constant size for this architecture and platform}} 52 P = 5+P; // expected-error {{arithmetic on pointer to interface 'I0', which is not a constant size for this architecture and platform}} 53 P = P-5; // expected-error {{arithmetic on pointer to interface 'I0', which is not a constant size for this architecture and platform}} 54 55 return P[4].x[2]; // expected-error {{expected method to read array element not found on object of type 'I0 *'}} 56} 57 58 59@interface I @end 60 61@interface XCAttributeRunDirectNode 62{ 63 @public 64 unsigned long attributeRuns[1024 + sizeof(I)]; // expected-error {{application of 'sizeof' to interface 'I' is not supported on this architecture and platform}} 65 int i; 66} 67@end 68 69@implementation XCAttributeRunDirectNode 70 71- (unsigned long)gatherStats:(id )stats 72{ 73 return attributeRuns[i]; 74} 75@end 76 77 78@interface Foo @end 79 80int foo(void) 81{ 82 Foo *f; 83 84 // Both of these crash clang nicely 85 ++f; // expected-error {{arithmetic on pointer to interface 'Foo', which is not a constant size for this architecture and platform}} 86 --f; // expected-error {{arithmetic on pointer to interface 'Foo', which is not a constant size for this architecture and platform}} 87} 88