summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-08-22 18:27:02 +0000
committerDouglas Gregor <dgregor@apple.com>2010-08-22 18:27:02 +0000
commitec3a3f5257ad8f723e512273c0056624c9b9e121 (patch)
treefdc1b978efac054c6b91b3bdeb02252b384346dc /clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
parent932c19dc9f992b07b6d7c07557e27a69c87a87b0 (diff)
downloadbcm5719-llvm-ec3a3f5257ad8f723e512273c0056624c9b9e121.tar.gz
bcm5719-llvm-ec3a3f5257ad8f723e512273c0056624c9b9e121.zip
Do not elide copy construction when we're performing base-class initialization
llvm-svn: 111783
Diffstat (limited to 'clang/test/CodeGenCXX/copy-constructor-elim-2.cpp')
-rw-r--r--clang/test/CodeGenCXX/copy-constructor-elim-2.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp b/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
index 3a06c10ff18..73e9b94bcd1 100644
--- a/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
+++ b/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
@@ -5,3 +5,29 @@ A f() { return A(0); }
// CHECK: define void @_Z1fv
// CHECK: call void @_ZN1AC1Ei
// CHECK-NEXT: ret void
+
+// Verify that we do not elide copies when constructing a base class.
+namespace no_elide_base {
+ struct Base {
+ Base(const Base&);
+ ~Base();
+ };
+
+ struct Other {
+ operator Base() const;
+ };
+
+ struct Derived : public virtual Base {
+ Derived(const Other &O);
+ };
+
+ // CHECK: define void @_ZN13no_elide_base7DerivedC1ERKNS_5OtherE
+ Derived::Derived(const Other &O)
+ // CHECK: call void @_ZNK13no_elide_base5OthercvNS_4BaseEEv
+ // CHECK: call void @_ZN13no_elide_base4BaseC2ERKS0_
+ // CHECK: call void @_ZN13no_elide_base4BaseD1Ev
+ : Base(O)
+ {
+ // CHECK: ret void
+ }
+}
OpenPOWER on IntegriCloud