diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-08-22 18:27:02 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-08-22 18:27:02 +0000 |
commit | ec3a3f5257ad8f723e512273c0056624c9b9e121 (patch) | |
tree | fdc1b978efac054c6b91b3bdeb02252b384346dc /clang/test/CodeGenCXX/copy-constructor-elim-2.cpp | |
parent | 932c19dc9f992b07b6d7c07557e27a69c87a87b0 (diff) | |
download | bcm5719-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.cpp | 26 |
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 + } +} |