On 12/10/2021 3:04 AM, Martin Liška wrote:
It happens that options are parsed and various diagnostics happen
in finish_options. That's a proper place as the function is also called
for optimize/target attributes (pragmas). However, it is possible that
target overwrites an option from command line and so the diagnostics
does not happen. That's fixed in the patch.

- options are parsed and finish_options is called:

  if (opts->x_flag_unwind_tables
      && !targetm_common.unwind_tables_default
      && opts->x_flag_reorder_blocks_and_partition
      && (ui_except == UI_SJLJ || ui_except >= UI_TARGET))
    {
      if (opts_set->x_flag_reorder_blocks_and_partition)
        inform (loc,
        "%<-freorder-blocks-and-partition%> does not support "
        "unwind info on this architecture");
      opts->x_flag_reorder_blocks_and_partition = 0;
      opts->x_flag_reorder_blocks = 1;
    }

It's not triggered because of opts->x_flag_unwind_tables is false by default, but
the option is overwritten in target:

...
  if (TARGET_64BIT_P (opts->x_ix86_isa_flags))
    {
      if (opts->x_optimize >= 1)
    SET_OPTION_IF_UNSET (opts, opts_set, flag_omit_frame_pointer,
                 !USE_IX86_FRAME_POINTER);
      if (opts->x_flag_asynchronous_unwind_tables
      && TARGET_64BIT_MS_ABI)
    SET_OPTION_IF_UNSET (opts, opts_set, flag_unwind_tables, 1);
...

Patch can bootstrap on x86_64-linux-gnu and survives regression tests.

Ready to be installed?
Thanks,
Martin

    PR driver/103465

gcc/ChangeLog:

    * opts.c (finish_options): More part of diagnostics to ...
    (diagnose_options): ... here. Call the function from both
    finish_options and process_options.
    * opts.h (diagnose_options): Declare.
    * toplev.c (process_options): Call diagnose_options.
OK.

Jeff

Reply via email to