[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