aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/implicit-copy-constructor.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2012-11-07 23:56:21 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2012-11-07 23:56:21 +0000
commite9385363069388d8e3536052a138f17332e00620 (patch)
treee1ffa5ad620f74cf297526efe2274cba60def9b8 /test/CodeGenCXX/implicit-copy-constructor.cpp
parentd3aa6c5272794339d0fdeacc553cbfad97ba67e5 (diff)
When deciding whether to convert an array construction loop into a memcpy, look
at whether the *selected* constructor would be trivial rather than considering whether the array's element type has *any* non-trivial constructors of the relevant kind. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167562 91177308-0d34-0410-b5e6-96231b3b80d8
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 8bc84a534b..8a3a422e0b 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: }
+ }
+}