diff options
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/config/i386/i386.opt | 4 | ||||
-rw-r--r-- | gcc/doc/options.texi | 6 | ||||
-rw-r--r-- | gcc/opts-common.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69471-1.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr69471-2.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr69471-3.c | 11 |
8 files changed, 60 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 77e2e83..78d5e99 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2019-02-23 H.J. Lu <hongjiu.lu@intel.com> + + PR driver/69471 + * opts-common.c (prune_options): Also prune joined switches + with Negative and RejectNegative. + * config/i386/i386.opt (march=): Add Negative(march=). + (mtune=): Add Negative(mtune=). + * doc/options.texi: Document Negative used together with Joined + and RejectNegative. + 2019-02-22 Martin Sebor <msebor@redhat.com> * doc/extend.texi (Other Builtins): Add diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt index 9b93241..b7998ee 100644 --- a/gcc/config/i386/i386.opt +++ b/gcc/config/i386/i386.opt @@ -253,7 +253,7 @@ EnumValue Enum(ix86_align_data) String(cacheline) Value(ix86_align_data_type_cacheline) march= -Target RejectNegative Joined Var(ix86_arch_string) +Target RejectNegative Negative(march=) Joined Var(ix86_arch_string) Generate code for given CPU. masm= @@ -510,7 +510,7 @@ Target Report Mask(TLS_DIRECT_SEG_REFS) Use direct references against %gs when accessing tls data. mtune= -Target RejectNegative Joined Var(ix86_tune_string) +Target RejectNegative Negative(mtune=) Joined Var(ix86_tune_string) Schedule code for given CPU. mtune-ctrl= diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index 0081243..1c83d24 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -220,7 +220,11 @@ property is used. The option will turn off another option @var{othername}, which is the option name with the leading ``-'' removed. This chain action will propagate through the @code{Negative} property of the option to be -turned off. +turned off. The driver will prune options, removing those that are +turned off by some later option. This pruning is not done for options +with @code{Joined} or @code{JoinedOrMissing} properties, unless the +options have either @code{RejectNegative} property or the @code{Negative} +property mentions an option other than itself. As a consequence, if you have a group of mutually-exclusive options, their @code{Negative} properties should form a circular chain. diff --git a/gcc/opts-common.c b/gcc/opts-common.c index ee8898b..edbb3ac 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -1015,7 +1015,9 @@ prune_options (struct cl_decoded_option **decoded_options, goto keep; /* Skip joined switches. */ - if ((option->flags & CL_JOINED)) + if ((option->flags & CL_JOINED) + && (!option->cl_reject_negative + || (unsigned int) option->neg_index != opt_idx)) goto keep; for (j = i + 1; j < old_decoded_options_count; j++) @@ -1027,8 +1029,11 @@ prune_options (struct cl_decoded_option **decoded_options, continue; if (cl_options[next_opt_idx].neg_index < 0) continue; - if ((cl_options[next_opt_idx].flags & CL_JOINED)) - continue; + if ((cl_options[next_opt_idx].flags & CL_JOINED) + && (!cl_options[next_opt_idx].cl_reject_negative + || ((unsigned int) cl_options[next_opt_idx].neg_index + != next_opt_idx))) + continue; if (cancel_option (opt_idx, next_opt_idx, next_opt_idx)) break; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 958564a..d0520fb 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2019-02-23 H.J. Lu <hongjiu.lu@intel.com> + + PR driver/69471 + * gcc.dg/pr69471-1.c: New test. + * gcc.dg/pr69471-2.c: Likewise. + * gcc.target/i386/pr69471-3.c: Likewise. + 2019-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/84387 diff --git a/gcc/testsuite/gcc.dg/pr69471-1.c b/gcc/testsuite/gcc.dg/pr69471-1.c new file mode 100644 index 0000000..3eac3b5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69471-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile } */ +/* { dg-options "-Wno-implicit-function-declaration -Wno-int-conversion -fno-builtin-free -fno-builtin-malloc" } */ + +void * +foo (void * p) +{ + free (p); + return malloc (p); +} diff --git a/gcc/testsuite/gcc.dg/pr69471-2.c b/gcc/testsuite/gcc.dg/pr69471-2.c new file mode 100644 index 0000000..d579960 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69471-2.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-gstabs2 -gdwarf-4 -gstabs3" } */ +/* { dg-error "conflicts with prior selectio" "" { target *-*-* } 0 } */ + +void +foo (void) +{ +} diff --git a/gcc/testsuite/gcc.target/i386/pr69471-3.c b/gcc/testsuite/gcc.target/i386/pr69471-3.c new file mode 100644 index 0000000..3826f96 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr69471-3.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-march=native -march=knl" } */ + +/* NB: We want to verify that -march=native -march=processor is the same + as -march=processor. Since it is very unlikely that GCC will be built + on KNL, -march=native will have -mno-avx512er and -march=knl should + enable AVX512ER. */ + +#ifndef __AVX512ER__ +# error __AVX512ER__ is not defined +#endif |