[PATCH] D44619: [CodeGen] Add cleanup scope to EmitInlinedInheritingCXXConstructorCall
Shoaib Meenai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Mar 18 21:32:24 PDT 2018
smeenai created this revision.
smeenai added reviewers: rnk, rsmith.
EmitInlinedInheritingCXXConstructorCall may result in a CallBaseDtor
cleanup being pushed. That cleanup would then be popped when the CGF's
CurCodeDecl no longer points to the method which triggered the cleanup,
leading to a failed cast. Create a new cleanup scope to ensure that the
cleanup gets popped while the CurCodeDecl still points to the method.
Fixes PR36748.
Repository:
rC Clang
https://reviews.llvm.org/D44619
Files:
lib/CodeGen/CGClass.cpp
test/CodeGenCXX/inheriting-constructor-cleanup.cpp
Index: test/CodeGenCXX/inheriting-constructor-cleanup.cpp
===================================================================
--- /dev/null
+++ test/CodeGenCXX/inheriting-constructor-cleanup.cpp
@@ -0,0 +1,22 @@
+// RUN: %clang_cc1 -triple x86_64-linux -fexceptions -emit-llvm -o - %s | FileCheck %s
+
+// PR36748
+struct S {
+ ~S() {}
+};
+
+struct T {
+ T(int, ...) {}
+};
+
+struct U : public S, public T {
+ using T::T;
+};
+
+void f() {
+ U(0);
+}
+
+// ~S cleanup should be emitted rather than crashing
+// CHECK-LABEL: define void @_Z1fv
+// CHECK: call void @_ZN1SD2Ev
Index: lib/CodeGen/CGClass.cpp
===================================================================
--- lib/CodeGen/CGClass.cpp
+++ lib/CodeGen/CGClass.cpp
@@ -2180,6 +2180,7 @@
GlobalDecl GD(Ctor, CtorType);
InlinedInheritingConstructorScope Scope(*this, GD);
ApplyInlineDebugLocation DebugScope(*this, GD);
+ RunCleanupsScope CleanupScope(*this);
// Save the arguments to be passed to the inherited constructor.
CXXInheritedCtorInitExprArgs = Args;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44619.138878.patch
Type: text/x-patch
Size: 1049 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180319/7bf7b6f7/attachment.bin>
More information about the cfe-commits
mailing list