88 lines · plain
1// RUN: %clang_cc1 -verify -fsyntax-only -Wno-objc-root-class %s2 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@public17 char x[4];18}19 20@property int p0;21@end22 23// size == 424int 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 I028@synthesize p0 = _p0;29@end30 31// size == 4 (we do not include extended properties in the32// 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 I137@property int p0;38@end39 40@implementation I141@synthesize p0 = _p0;42@end43 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 we47// 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 @end60 61@interface XCAttributeRunDirectNode62{63 @public64 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@end68 69@implementation XCAttributeRunDirectNode70 71- (unsigned long)gatherStats:(id )stats72{73 return attributeRuns[i];74}75@end76 77 78@interface Foo @end79 80int foo(void)81{82 Foo *f;83 84 // Both of these crash clang nicely85 ++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