https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99705
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The *.original dump diff before/after is
@@ -32,11 +32,11 @@
}
<D.2413>:;
{
- struct C * D.2390;
+ struct C * D.2390 = D.2378 + ((SAVE_EXPR <(sizetype) ((struct X *)
this)->n> - (sizetype) D.2380) + 18446744073709551615);
(if (D.2378 != 0B)
{
- (void) (D.2390 = D.2378 + ((SAVE_EXPR <(sizetype) ((struct X *)
this)->n> - (sizetype) D.2380) + 18446744073709551615));, while (1)
+ struct C * D.2390 = D.2378 + ((SAVE_EXPR <(sizetype) ((struct
X *) this)->n> - (sizetype) D.2380) + 18446744073709551615);, while (1)
{
if (D.2390 == D.2378) break;, (void) (D.2390 = D.2390 +
18446744073709551615);;, C<int>::~C (D.2390);;
};
and I think the problem is that this in the latter comes from the wrong ctor -
_ZN1XC4Ev rather than expected _ZN1XC2Ev.