Shafik Yaghmour 2a23de01e5 [Clang] Switch from TransformExpr to TransformInitializer in places we need to revert initializer to it syntactic form for Sema
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
2023-05-25 09:50:56 -07:00

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();}