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

--- Comment #16 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Martin Liska <mar...@gcc.gnu.org>:

https://gcc.gnu.org/g:a187edd2b437fc9571d57f771a624963fcce08f8

commit r12-6131-ga187edd2b437fc9571d57f771a624963fcce08f8
Author: Martin Liska <mli...@suse.cz>
Date:   Fri Dec 10 09:58:52 2021 +0100

    driver: Improve option diagnostics [PR103465]

    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);
    ...

            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.
  • [Bug driver/103465] Invalid not... cvs-commit at gcc dot gnu.org via Gcc-bugs

Reply via email to