xref: /aosp_15_r20/external/clang/test/CodeGenObjCXX/copy.mm (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li// rdar://problem/9158302
4*67e74705SXin Li// This should not use a memmove_collectable in non-GC mode.
5*67e74705SXin Linamespace test0 {
6*67e74705SXin Li  struct A {
7*67e74705SXin Li    id x;
8*67e74705SXin Li  };
9*67e74705SXin Li
10*67e74705SXin Li  // CHECK:    define [[A:%.*]]* @_ZN5test04testENS_1AE(
11*67e74705SXin Li  // CHECK:      alloca
12*67e74705SXin Li  // CHECK-NEXT: getelementptr
13*67e74705SXin Li  // CHECK-NEXT: store
14*67e74705SXin Li  // CHECK-NEXT: call i8* @_Znwm(
15*67e74705SXin Li  // CHECK-NEXT: bitcast
16*67e74705SXin Li  // CHECK-NEXT: bitcast
17*67e74705SXin Li  // CHECK-NEXT: bitcast
18*67e74705SXin Li  // CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i64(
19*67e74705SXin Li  // CHECK-NEXT: ret
20*67e74705SXin Li  A *test(A a) {
21*67e74705SXin Li    return new A(a);
22*67e74705SXin Li  }
23*67e74705SXin Li}
24*67e74705SXin Li
25*67e74705SXin Li
26*67e74705SXin Li// rdar://9780211
27*67e74705SXin Li@protocol bork
28*67e74705SXin Li@end
29*67e74705SXin Li
30*67e74705SXin Linamespace test1 {
31*67e74705SXin Litemplate<typename T> struct RetainPtr {
32*67e74705SXin Li  RetainPtr() {}
33*67e74705SXin Li};
34*67e74705SXin Li
35*67e74705SXin Li
36*67e74705SXin LiRetainPtr<id<bork> > x;
37*67e74705SXin LiRetainPtr<id> y;
38*67e74705SXin Li
39*67e74705SXin Li}
40