[PATCH] c++: ICE with delayed noexcept and attribute used [PR97966]
Jason Merrill
jason@redhat.com
Tue Jan 19 20:37:25 GMT 2021
On 1/12/21 9:13 PM, Marek Polacek wrote:
> Another ICE with delayed noexcept parsing, but a bit gnarlier.
>
> A function definition marked with __attribute__((used)) ought to be
> emitted even when it is not referenced in a TU. For a member function
> template marked with __attribute__((used)) this means that it will
> be instantiated: in instantiate_class_template_1 we have
>
> 11971 /* Instantiate members marked with attribute used. */
> 11972 if (r != error_mark_node && DECL_PRESERVE_P (r))
> 11973 mark_used (r);
>
> It is not so surprising that this doesn't work well with delayed
> noexcept parsing: when we're processing the function template we delay
> the parsing, so the member "foo" is found, but then when we're
> instantiating it, "foo" hasn't yet been seen, which creates a
> discrepancy and a crash ensues. "foo" hasn't yet been seen because
> instantiate_class_template_1 just loops over the class members and
> instantiates right away.
That seems like the bug; we shouldn't instantiate any members until
we're done instantiating the class.
Jason
More information about the Gcc-patches
mailing list