diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-06-15 23:51:06 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-06-15 23:51:06 +0000 |
commit | 13ffdd86b93ff8bf5d26bca55119982c899bb5ce (patch) | |
tree | ec73c7696eaf77d61a646cc1777c13190fb07416 /clang/test/CodeGenCXX/pointers-to-data-members.cpp | |
parent | 38a6fbf933e707e02ac9fc5a6326fc3b4d27266a (diff) | |
download | bcm5719-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.cpp | 14 |
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_ +} |