On Tue, Jul 29, 2025 at 02:04:52PM +0200, Jakub Jelinek wrote:
> On Tue, Jul 29, 2025 at 09:57:19PM +1000, Nathaniel Shead wrote:
> > @@ -7114,8 +7121,10 @@ trees_in::core_vals (tree t)
> >       }
> >  
> >     RT (t->function_decl.personality);
> > -   RT (t->function_decl.function_specific_target);
> > -   RT (t->function_decl.function_specific_optimization);
> > +   /* These properties are not streamed, and should be reconstructed
> > +      from any function attributes.  */
> 
> I'd just like to chime in on this.  I'm afraid that is not possible,
> because target/optimize attributes aren't the only way to add a non-standard
> TARGET_OPTION_NODE/OPTIMIZATION_NODE to a FUNCTION_DECL, #pragma GCC
> {target,optimize} can be used for that as well (and mixed with attributes).
> 

Right; from my testing, though, the behaviour of the pragma is to
actually simulate an attribute being applied to each function declared
from that point on (until a pop_options, as necessary).

See decl_attributes in attribs.cc:639:

  /* If this is a function and the user used #pragma GCC optimize, add the
     options to the attribute((optimize(...))) list.  */
  if (TREE_CODE (*node) == FUNCTION_DECL && current_optimize_pragma)
    {
      tree cur_attr = lookup_attribute ("optimize", attributes);
      tree opts = copy_list (current_optimize_pragma);

      if (! cur_attr)
        attributes
          = tree_cons (get_identifier ("optimize"), opts, attributes);
      else
        TREE_VALUE (cur_attr) = chainon (opts, TREE_VALUE (cur_attr));
    }

(and later for target pragma.)

> I agree it is better to sorry than ICE for 15.2, but eventually it might be
> better to stream the node.  Of course it depends on how portable the modules
> file format is and whether one can compile with one version of compiler and
> use with say a few days later snapshot which could have some new option
> added.

We do currently say that this isn't supported, though in the case of
snapshots it appears we may not always check this if modules.cc wasn't
modified/rebuilt for the new version.

Nathaniel

Reply via email to