[PATCH] D55543: [CodeGen] Fix assertion on throwing object with inlined inherited constructor and non-trivial destructor.

Volodymyr Sapsai via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Dec 14 18:16:16 PST 2018


vsapsai added a comment.

In D55543#1329288 <https://reviews.llvm.org/D55543#1329288>, @vsapsai wrote:

> In D55543#1328025 <https://reviews.llvm.org/D55543#1328025>, @rjmccall wrote:
>
> > Nice catch.  This also fixes problems where there might be cleanups entered by `EmitParmDecl`, e.g. in ObjC++ with a parameter of type `struct A { __strong id x; }`; could you please add a test for that and verify that the parameter is destroyed at an appropriate point in the inlined call?
>
>
> Aha, I see we have at least `EHStack.pushCleanup<ConsumeARCParameter>` in `EmitParmDecl`. Will make sure to add a test that executes this code path.


The way I understand the comment, we cannot make a parameter of type `struct A` to have a cleanup specific to `CodeGenFunction::EmitInlinedInheritingCXXConstructorCall`. It calls `EmitParmDecl` but does it only for implicit parameters. And I am struggling to make `struct A` an implicit parameter.

Nevertheless, my change causes different exception-handling behaviour. Need to check further if it is ARC-related or inherited constructor-related.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55543/new/

https://reviews.llvm.org/D55543





More information about the cfe-commits mailing list