summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/pointers-to-data-members.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2012-06-15 23:51:06 +0000
committerEli Friedman <eli.friedman@gmail.com>2012-06-15 23:51:06 +0000
commit13ffdd86b93ff8bf5d26bca55119982c899bb5ce (patch)
treeec73c7696eaf77d61a646cc1777c13190fb07416 /clang/test/CodeGenCXX/pointers-to-data-members.cpp
parent38a6fbf933e707e02ac9fc5a6326fc3b4d27266a (diff)
downloadbcm5719-llvm-13ffdd86b93ff8bf5d26bca55119982c899bb5ce.tar.gz
bcm5719-llvm-13ffdd86b93ff8bf5d26bca55119982c899bb5ce.zip
Make the ".*" operator work correctly when the base is a prvalue and the field has a non-trivial copy constructor. PR13097.
llvm-svn: 158578
Diffstat (limited to 'clang/test/CodeGenCXX/pointers-to-data-members.cpp')
-rw-r--r--clang/test/CodeGenCXX/pointers-to-data-members.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/pointers-to-data-members.cpp b/clang/test/CodeGenCXX/pointers-to-data-members.cpp
index 90024e4dfed..fe69cd5ddf7 100644
--- a/clang/test/CodeGenCXX/pointers-to-data-members.cpp
+++ b/clang/test/CodeGenCXX/pointers-to-data-members.cpp
@@ -240,3 +240,17 @@ namespace PR11487 {
// CHECK-GLOBAL: @_ZN7PR114871xE = global %"union.PR11487::U" { i64 -1, [8 x i8] zeroinitializer }, align 8
}
+
+namespace PR13097 {
+ struct X { int x; X(const X&); };
+ struct A {
+ int qq;
+ X x;
+ };
+ A f();
+ X g() { return f().*&A::x; }
+ // CHECK: define void @_ZN7PR130971gEv
+ // CHECK: call void @_ZN7PR130971fEv
+ // CHECK-NOT: memcpy
+ // CHECK: call void @_ZN7PR130971XC1ERKS0_
+}
OpenPOWER on IntegriCloud