brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 7d6c5d7 Raw
90 lines · cpp
1/// RUN: %clang_cc1 -triple x86_64-apple-darwin12 -emit-llvm -o - -std=c++11 %s -DPOD | FileCheck %s -check-prefix=CHECK-POD2// RUN: %clang_cc1 -triple x86_64-apple-darwin12 -emit-llvm -o - -std=c++11 %s | FileCheck %s -check-prefix=CHECK-NONPOD3 4// Declare the reserved placement operators.5typedef __typeof__(sizeof(0)) size_t;6void *operator new(size_t, void*) throw();7void operator delete(void*, void*) throw();8void *operator new[](size_t, void*) throw();9void operator delete[](void*, void*) throw();10template<typename T> T &&move(T&);11 12struct foo {13#ifndef POD14  foo() {} // non-POD15#endif16  void *a, *b;17  bool c;18};19 20// It is not legal to copy the tail padding in all cases, but if it is it can21// yield better codegen.22 23foo *test1(void *f, const foo &x) {24  return new (f) foo(x);25// CHECK-POD: test126// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2427 28// CHECK-NONPOD: test129// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2430}31 32foo *test2(const foo &x) {33  return new foo(x);34// CHECK-POD: test235// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 16 {{.*}} align 8 {{.*}}i64 2436 37// CHECK-NONPOD: test238// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 16 {{.*}} align 8 {{.*}}i64 2439}40 41foo test3(const foo &x) {42  foo f = x;43  return f;44// CHECK-POD: test345// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2446 47// CHECK-NONPOD: test348// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2449}50 51foo *test4(foo &&x) {52  return new foo(x);53// CHECK-POD: test454// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 16 {{.*}} align 8 {{.*}}i64 2455 56// CHECK-NONPOD: test457// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 16 {{.*}} align 8 {{.*}}i64 2458}59 60void test5(foo &f, const foo &x) {61  f = x;62// CHECK-POD: test563// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2464 65// CHECK-NONPOD: test566// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 1767}68 69extern foo globtest;70 71void test6(foo &&x) {72  globtest = move(x);73// CHECK-POD: test674// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2475 76// CHECK-NONPOD: test677// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 1778}79 80void byval(foo f);81 82void test7(const foo &x) {83  byval(x);84// CHECK-POD: test785// CHECK-POD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2486 87// CHECK-NONPOD: test788// CHECK-NONPOD: call void @llvm.memcpy.p0.p0.i64({{.*}} align 8 {{.*}} align 8 {{.*}}i64 2489}90