brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · a9ef7cb Raw
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