mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 22:16:05 +00:00

In some cases we are using TransformExpr instead of TransformInitializer, this results in ExprWithCleanups being dropped and we are not emitting a destructor as a result. This fixes: https://github.com/llvm/llvm-project/issues/62818 Differential Revision: https://reviews.llvm.org/D151235
28 lines
643 B
C++
28 lines
643 B
C++
// RUN: %clang_cc1 -std=c++17 -emit-llvm -triple x86_64-linux-gnu -o - %s | FileCheck %s
|
|
|
|
void doSomething();
|
|
|
|
struct A {
|
|
A() {};
|
|
~A() noexcept {
|
|
doSomething();
|
|
}
|
|
|
|
A & operator=(A a) & noexcept {
|
|
return *this;
|
|
}
|
|
};
|
|
|
|
template<typename T>
|
|
struct B {
|
|
void test() {a = {};}
|
|
// CHECK: define linkonce_odr void @_ZN1BIiE4testEv
|
|
// CHECK: call void @_ZN1AC1Ev(ptr noundef nonnull align 1 dereferenceable(1)
|
|
// CHECK: [[CALL:%.*]] = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNR1AaSES_
|
|
// CHECK: call void @_ZN1AD2Ev(ptr noundef nonnull align 1 dereferenceable(1)
|
|
|
|
A a;
|
|
};
|
|
|
|
void client(B<int> &f) {f.test();}
|