On Fri, Apr 05, 2024 at 02:37:08PM -0400, Marek Polacek wrote: > > This function is passed explicit opts and opts_set arguments, so it > > shouldn't be using flag_something macros nor OPTION_SET_P, as the former > > use global_options.x_flag_something rather than opts->x_flag_something > > and the latter uses global_options_set.x_flag_something. > > Ah right, so the other uses of OPTION_SET_P in ix86_option_override_internal > are also wrong?
Most likely yes. > > So, I think you want to use if (!opts_set->x_flag_cf_protection) > > instead. > > Fixed below, thanks. > > New tests passed on x86_64-pc-linux-gnu, ok for trunk? Ok, thanks. > > -- >8 -- > -Whardened warns when -fhardened couldn't enable a hardening option > because that option was disabled on the command line, e.g.: > > $ ./cc1plus -quiet g.C -fhardened -O2 -fstack-protector > cc1plus: warning: '-fstack-protector-strong' is not enabled by '-fhardened' > because it was specified on the command line [-Whardened] > > but it doesn't work as expected with -fcf-protection=none: > > $ ./cc1plus -quiet g.C -fhardened -O2 -fcf-protection=none > > because we're checking == CF_NONE which doesn't distinguish between nothing > and -fcf-protection=none. I should have used opts_set, like below. > > PR target/114606 > > gcc/ChangeLog: > > * config/i386/i386-options.cc (ix86_option_override_internal): Use > opts_set rather than checking == CF_NONE. > > gcc/testsuite/ChangeLog: > > * gcc.target/i386/fhardened-1.c: New test. > * gcc.target/i386/fhardened-2.c: New test. Jakub