[Bug ipa/109770] [10/11/12/13/14 Regression] wrong(?) devirtualization
m.cencora at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue May 9 09:34:13 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109770
--- Comment #8 from m.cencora at gmail dot com ---
(In reply to Richard Biener from comment #7)
>
> Ah, interesting. I was looking for an answer whether
>
> new T
>
> may produce anything other than an object with dynamic type T or if there
> are any constraints on the object constructed. In particular C++20 11.10.4
> refered to by 6.7.3 doesn't mention whether re-using the storage is
> permitted for an object under construction. It says usage is limited
> and doesn't explicitely allow re-use so that might mean re-use is not
> allowed.
>
> Note std::launder is C++17 only, the original reporter was using C++98 /
> C++14
>
> Reading C++20, 6.7.3/9, at least suggests that the placement new (this) A
> in the CTOR invokes undefined behavior because the lifetime of B hasn't
> ended (but 6.7.3/1.5 makes this ambiguous - we're re-using the storage here,
> and also we're not talking about an object with automatic storage duration).
6.7.3/9 doesn't apply to your example - this is not an automatic storage
duration.
If 11.10.4 is suppose to be an exhaustive allow-list, then yeah ending the
complete object lifetime during its construction is UB, but I guess it would be
best to get a response from real C++ expert or file a C++ core issue.
More information about the Gcc-bugs
mailing list