summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/implicit-copy-constructor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGenCXX/implicit-copy-constructor.cpp')
-rw-r--r--test/CodeGenCXX/implicit-copy-constructor.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/test/CodeGenCXX/implicit-copy-constructor.cpp b/test/CodeGenCXX/implicit-copy-constructor.cpp
index 8bc84a5..8a3a422 100644
--- a/test/CodeGenCXX/implicit-copy-constructor.cpp
+++ b/test/CodeGenCXX/implicit-copy-constructor.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -std=c++11 | FileCheck %s
struct A {
A();
@@ -80,3 +80,29 @@ namespace test3 {
y = x;
}
}
+
+namespace test4 {
+ // When determining whether to implement an array copy as a memcpy, look at
+ // whether the *selected* constructor is trivial.
+ struct S {
+ int arr[5][5];
+ S(S &);
+ S(const S &) = default;
+ };
+ // CHECK: @_ZN5test42f1
+ void f1(S a) {
+ // CHECK-NOT: memcpy
+ // CHECK: call void @_ZN5test41SC1ERS0_
+ // CHECK-NOT: memcpy
+ S b(a);
+ // CHECK: }
+ }
+ // CHECK: @_ZN5test42f2
+ void f2(const S a) {
+ // CHECK-NOT: call void @_ZN5test41SC1ERS0_
+ // CHECK: memcpy
+ // CHECK-NOT: call void @_ZN5test41SC1ERS0_
+ S b(a);
+ // CHECK: }
+ }
+}
OpenPOWER on IntegriCloud