зеркало из https://github.com/microsoft/clang-1.git
105 строки
1.9 KiB
Plaintext
105 строки
1.9 KiB
Plaintext
// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
|
|
// CHECK: -[A .cxx_construct]
|
|
// CHECK: -[A .cxx_destruct]
|
|
// CHECK: -[B .cxx_construct]
|
|
// CHECK-NOT: -[B .cxx_destruct]
|
|
// CHECK-NOT: -[C .cxx_construct]
|
|
// CHECK: -[C .cxx_destruct]
|
|
|
|
@interface NSObject
|
|
- alloc;
|
|
- init;
|
|
- (void) release;
|
|
@end
|
|
|
|
extern "C" int printf(const char *, ...);
|
|
|
|
int count = 17;
|
|
struct X {
|
|
X() : value(count++) { printf( "X::X()\n"); }
|
|
~X() { printf( "X::~X()\n"); }
|
|
int value;
|
|
};
|
|
|
|
struct Y {
|
|
Y() : value(count++) { printf( "Y::Y()\n"); }
|
|
~Y() { printf( "Y::~Y()\n"); }
|
|
int value;
|
|
};
|
|
|
|
@interface Super : NSObject {
|
|
Y yvar;
|
|
Y yvar1;
|
|
Y ya[3];
|
|
}
|
|
- (void)finalize;
|
|
@end
|
|
|
|
@interface A : Super {
|
|
X xvar;
|
|
X xvar1;
|
|
X xvar2;
|
|
X xa[2][2];
|
|
}
|
|
|
|
- (void)print;
|
|
- (void)finalize;
|
|
@end
|
|
|
|
@implementation Super
|
|
- (void)print {
|
|
printf( "yvar.value = %d\n", yvar.value);
|
|
printf( "yvar1.value = %d\n", yvar1.value);
|
|
printf( "ya[0..2] = %d %d %d\n", ya[0].value, ya[1].value, ya[2].value);
|
|
}
|
|
- (void)finalize {}
|
|
@end
|
|
|
|
@implementation A
|
|
- (void)print {
|
|
printf( "xvar.value = %d\n", xvar.value);
|
|
printf( "xvar1.value = %d\n", xvar1.value);
|
|
printf( "xvar2.value = %d\n", xvar2.value);
|
|
printf( "xa[0..1][0..1] = %d %d %d %d\n",
|
|
xa[0][0].value, xa[0][1].value, xa[1][0].value, xa[1][1].value);
|
|
[super print];
|
|
}
|
|
- (void)finalize { [super finalize]; }
|
|
@end
|
|
|
|
int main() {
|
|
A *a = [[A alloc] init];
|
|
[a print];
|
|
[a release];
|
|
}
|
|
|
|
// rdar: // 7468090
|
|
class S {
|
|
public:
|
|
S& operator = (const S&);
|
|
};
|
|
|
|
@interface I {
|
|
S position;
|
|
}
|
|
@property(assign, nonatomic) S position;
|
|
@end
|
|
|
|
@implementation I
|
|
@synthesize position;
|
|
@end
|
|
|
|
// This class should have a .cxx_construct but no .cxx_destruct.
|
|
namespace test3 { struct S { S(); }; }
|
|
@implementation B {
|
|
test3::S s;
|
|
}
|
|
@end
|
|
|
|
// This class should have a .cxx_destruct but no .cxx_construct.
|
|
namespace test4 { struct S { ~S(); }; }
|
|
@implementation C {
|
|
test4::S s;
|
|
}
|
|
@end
|