Message ID | ef65b440-7973-990d-0c4d-ec9c87409155@suse.cz |
---|---|
State | New |
Headers | show |
Series | i386: fix -march=amd crash | expand |
> It started with g:3e2ae3ee285a57455d5a23bd352a68c289130186 where > new entry was added to processor_alias_table after generic node: > > + {"amdfam19h", PROCESSOR_GENERIC, CPU_GENERIC, 0, > + M_CPU_TYPE (AMDFAM19H), P_NONE}, > > and then the following is violated: > > /* NB: processor_alias_table stops at the "generic" entry. */ > > Patch can bootstrap on x86_64-linux-gnu and survives regression tests. > > Ready to be installed? OK, thanks! Honza > Thanks, > Martin > > gcc/ChangeLog: > > PR target/99753 > * common/config/i386/i386-common.c (ARRAY_SIZE): Fix off-by-one > error. > * config/i386/i386-options.c (ix86_option_override_internal): > Add run-time assert. > > gcc/testsuite/ChangeLog: > > PR target/99753 > * gcc.target/i386/pr99753.c: New test. > --- > gcc/common/config/i386/i386-common.c | 2 +- > gcc/config/i386/i386-options.c | 3 +++ > gcc/testsuite/gcc.target/i386/pr99753.c | 5 +++++ > 3 files changed, 9 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/i386/pr99753.c > > diff --git a/gcc/common/config/i386/i386-common.c b/gcc/common/config/i386/i386-common.c > index eea8af12f48..b89183b830e 100644 > --- a/gcc/common/config/i386/i386-common.c > +++ b/gcc/common/config/i386/i386-common.c > @@ -2051,7 +2051,7 @@ const pta processor_alias_table[] = > }; > /* NB: processor_alias_table stops at the "generic" entry. */ > -unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 6; > +unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 7; > unsigned int const num_arch_names = ARRAY_SIZE (processor_alias_table); > /* Provide valid option values for -march and -mtune options. */ > diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c > index b653527d266..88d5e717f26 100644 > --- a/gcc/config/i386/i386-options.c > +++ b/gcc/config/i386/i386-options.c > @@ -2042,6 +2042,9 @@ ix86_option_override_internal (bool main_args_p, > sorry ("%i-bit mode not compiled in", > (opts->x_ix86_isa_flags & OPTION_MASK_ISA_64BIT) ? 64 : 32); > + /* Last processor_alias_table must point to "generic" entry. */ > + gcc_checking_assert (strcmp (processor_alias_table[pta_size - 1].name, > + "generic") == 0); > for (i = 0; i < pta_size; i++) > if (! strcmp (opts->x_ix86_arch_string, processor_alias_table[i].name)) > { > diff --git a/gcc/testsuite/gcc.target/i386/pr99753.c b/gcc/testsuite/gcc.target/i386/pr99753.c > new file mode 100644 > index 00000000000..3def1fd7481 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/pr99753.c > @@ -0,0 +1,5 @@ > +/* PR target/99753 */ > + > +/* { dg-do compile } */ > +/* { dg-options "-march=amd -m32" } */ > +/* { dg-error "bad value .'amd'. for '-march=' switch" "" { target *-*-* } 0 } */ > -- > 2.30.2 >
diff --git a/gcc/common/config/i386/i386-common.c b/gcc/common/config/i386/i386-common.c index eea8af12f48..b89183b830e 100644 --- a/gcc/common/config/i386/i386-common.c +++ b/gcc/common/config/i386/i386-common.c @@ -2051,7 +2051,7 @@ const pta processor_alias_table[] = }; /* NB: processor_alias_table stops at the "generic" entry. */ -unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 6; +unsigned int const pta_size = ARRAY_SIZE (processor_alias_table) - 7; unsigned int const num_arch_names = ARRAY_SIZE (processor_alias_table); /* Provide valid option values for -march and -mtune options. */ diff --git a/gcc/config/i386/i386-options.c b/gcc/config/i386/i386-options.c index b653527d266..88d5e717f26 100644 --- a/gcc/config/i386/i386-options.c +++ b/gcc/config/i386/i386-options.c @@ -2042,6 +2042,9 @@ ix86_option_override_internal (bool main_args_p, sorry ("%i-bit mode not compiled in", (opts->x_ix86_isa_flags & OPTION_MASK_ISA_64BIT) ? 64 : 32); + /* Last processor_alias_table must point to "generic" entry. */ + gcc_checking_assert (strcmp (processor_alias_table[pta_size - 1].name, + "generic") == 0); for (i = 0; i < pta_size; i++) if (! strcmp (opts->x_ix86_arch_string, processor_alias_table[i].name)) { diff --git a/gcc/testsuite/gcc.target/i386/pr99753.c b/gcc/testsuite/gcc.target/i386/pr99753.c new file mode 100644 index 00000000000..3def1fd7481 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr99753.c @@ -0,0 +1,5 @@ +/* PR target/99753 */ + +/* { dg-do compile } */ +/* { dg-options "-march=amd -m32" } */ +/* { dg-error "bad value .'amd'. for '-march=' switch" "" { target *-*-* } 0 } */