Do not elide copy construction when we're performing base-class initialization
llvm-svn: 111783
diff --git a/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp b/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
index 3a06c10..73e9b94 100644
--- a/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
+++ b/clang/test/CodeGenCXX/copy-constructor-elim-2.cpp
@@ -5,3 +5,29 @@
// 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
+ }
+}