brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · a8f898c Raw
104 lines · plain
1// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s2// CHECK: -[A .cxx_construct]3// CHECK: -[A .cxx_destruct]4// CHECK: -[B .cxx_construct]5// CHECK-NOT: -[B .cxx_destruct]6// CHECK-NOT: -[C .cxx_construct]7// CHECK: -[C .cxx_destruct]8 9@interface NSObject 10- alloc;11- init;12- (void) release;13@end14 15extern "C" int printf(const char *, ...);16 17int count = 17;18struct X {19  X() : value(count++) { printf( "X::X()\n"); }20  ~X() { printf( "X::~X()\n"); }21  int value;22};23 24struct Y {25  Y() : value(count++) { printf( "Y::Y()\n"); }26  ~Y() { printf( "Y::~Y()\n"); }27  int value;28};29 30@interface Super : NSObject {31  Y yvar;32  Y yvar1;33  Y ya[3];34}35- (void)finalize;36@end37 38@interface A : Super {39  X xvar;40  X xvar1;41  X xvar2;42  X xa[2][2];43}44 45- (void)print;46- (void)finalize;47@end48 49@implementation Super50- (void)print {51  printf( "yvar.value = %d\n", yvar.value);52  printf( "yvar1.value = %d\n", yvar1.value);53  printf( "ya[0..2] = %d %d %d\n", ya[0].value, ya[1].value, ya[2].value);54}55- (void)finalize {}56@end57 58@implementation A59- (void)print {60  printf( "xvar.value = %d\n", xvar.value);61  printf( "xvar1.value = %d\n", xvar1.value);62  printf( "xvar2.value = %d\n", xvar2.value);63  printf( "xa[0..1][0..1] = %d %d %d %d\n",64                   xa[0][0].value, xa[0][1].value, xa[1][0].value, xa[1][1].value);65  [super print];66}67- (void)finalize { [super finalize]; }68@end69 70int main() {71  A *a = [[A alloc] init];72  [a print];73  [a release];74}75 76class S {77public:78	S& operator = (const S&);79};80 81@interface I {82  S position;83}84@property(assign, nonatomic) S position;85@end86 87@implementation I88	@synthesize position;89@end90 91// This class should have a .cxx_construct but no .cxx_destruct.92namespace test3 { struct S { S(); }; }93@implementation B {94  test3::S s;95}96@end97 98// This class should have a .cxx_destruct but no .cxx_construct.99namespace test4 { struct S { ~S(); }; }100@implementation C {101  test4::S s;102}103@end104