https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64340

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Created attachment 34687
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=34687&action=edit
gcc5-pr64340.patch

Untested fix (well, tested with make check-gnat).

The problem seems to be that gnat modifies global_options after toplevel.c
(process_options) ends, in this case options like flag_*exceptions*, in other
cases flag_strict_aliasing, or other flags.  That means those option changes
aren't visible in optimization_{default,current}_node that is created at the
end of process_options, and if some function doesn't use its own optimization
node, it will get the default one.  So, if there are any functions with
non-default optimization node, or when lto streams that node for functions that
didn't have any, those option changes may get lost.

Seems those option changes depend on parsing, so process_options is too early,
so IMHO we need to recreate the optimization_{default,current}_node trees with
the updated options (updating the options in there directly doesn't work, as
the options are hashed).

Eric/Honza, does this look reasonable to you?

flag_ipa_ra change seems to be misplaced too, will fix that in a separate
patch.

Reply via email to