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

            Bug ID: 91399
           Summary: parse_mtune_ctrl_str shouldn't use
                    ix86_tune_ctrl_string
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: ubizjak at gmail dot com
  Target Milestone: ---
            Target: i386

There are

static void 
parse_mtune_ctrl_str (bool dump)
{
  if (!ix86_tune_ctrl_string)
    return;

parse_mtune_ctrl_str is only called from set_ix86_tune_features, which
is only called from ix86_function_specific_restore and
ix86_option_override_internal.  parse_mtune_ctrl_str shouldn't use
ix86_tune_ctrl_string which is defined with global_options.  Instead,
opts should be passed to parse_mtune_ctrl_str:

diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c
index 8e7c9c8363a2..b9d526ecc9d5 100644
--- a/gcc/config/i386/i386-options.c
+++ b/gcc/config/i386/i386-options.c
@@ -655,7 +655,8 @@ ix86_option_override_internal (bool main_args_p,
                               struct gcc_options *opts,
                               struct gcc_options *opts_set);
 static void
-set_ix86_tune_features (enum processor_type ix86_tune, bool dump);
+set_ix86_tune_features (struct gcc_options *opts,
+                       enum processor_type ix86_tune, bool dump);

 /* Restore the current options */

@@ -730,7 +731,7 @@ ix86_function_specific_restore (struct gcc_options *opts,

   /* Recreate the tune optimization tests */
   if (old_tune != ix86_tune)
-    set_ix86_tune_features (ix86_tune, false);
+    set_ix86_tune_features (opts, ix86_tune, false);
 }

 /* Adjust target options after streaming them in.  This is mainly about
@@ -1458,13 +1464,13 @@ ix86_parse_stringop_strategy_string (char
*strategy_str, bool is_memset)
    print the features that are explicitly set.  */

 static void
-parse_mtune_ctrl_str (bool dump)
+parse_mtune_ctrl_str (struct gcc_options *opts, bool dump)
 {
-  if (!ix86_tune_ctrl_string)
+  if (!opts->x_ix86_tune_ctrl_string)
     return;

   char *next_feature_string = NULL;
-  char *curr_feature_string = xstrdup (ix86_tune_ctrl_string);
+  char *curr_feature_string = xstrdup (opts->x_ix86_tune_ctrl_string);
   char *orig = curr_feature_string;
   int i;
   do
@@ -1503,7 +1509,8 @@ parse_mtune_ctrl_str (bool dump)
    processor type.  */

 static void
-set_ix86_tune_features (enum processor_type ix86_tune, bool dump)
+set_ix86_tune_features (struct gcc_options *opts,
+                       enum processor_type ix86_tune, bool dump)
 {
   unsigned HOST_WIDE_INT ix86_tune_mask = HOST_WIDE_INT_1U << ix86_tune;
   int i;
@@ -1525,7 +1532,7 @@ set_ix86_tune_features (enum processor_type ix86_tune,
bool dump)
                  ix86_tune_features[i] ? "on" : "off");
     }

-  parse_mtune_ctrl_str (dump);
+  parse_mtune_ctrl_str (opts, dump);
 }


@@ -2230,7 +2237,7 @@ ix86_option_override_internal (bool main_args_p,
       XDELETEVEC (s);
     }

-  set_ix86_tune_features (ix86_tune, opts->x_ix86_dump_tunes);
+  set_ix86_tune_features (opts, ix86_tune, opts->x_ix86_dump_tunes);

 #ifndef USE_IX86_FRAME_POINTER
 #define USE_IX86_FRAME_POINTER 0

Reply via email to