On Wed, Dec 21, 2022 at 2:35 PM Jakub Jelinek <ja...@redhat.com> wrote:
>
> On Wed, Dec 21, 2022 at 12:20:23PM -0800, H.J. Lu wrote:
> > On Mon, Dec 19, 2022 at 8:52 PM Hongtao Liu <crazy...@gmail.com> wrote:
> > >
> > > On Thu, Dec 15, 2022 at 3:45 PM Hongtao Liu <crazy...@gmail.com> wrote:
> > > >
> > > > On Thu, Dec 15, 2022 at 3:39 PM Jakub Jelinek <ja...@redhat.com> wrote:
> > > > >
> > > > > On Thu, Dec 15, 2022 at 02:21:37PM +0800, liuhongt via Gcc-patches 
> > > > > wrote:
> > > > > > --- a/gcc/config/i386/i386.opt
> > > > > > +++ b/gcc/config/i386/i386.opt
> > > > > > @@ -420,6 +420,10 @@ mpc80
> > > > > >  Target RejectNegative
> > > > > >  Set 80387 floating-point precision to 80-bit.
> > > > > >
> > > > > > +mdaz-ftz
> > > > > > +Target
> > > > >
> > > > > s/Target/Driver/
> > > > Change to Driver and Got error like:cc1: error: command-line option
> > > > ‘-mdaz-ftz’ is valid for the driver but not for C.
> > > Hi Jakub:
> > >   I didn't find a good solution to handle this error after changing
> > > *Target* to *Driver*, Could you give some hints how to solve this
> > > problem?
> > > Or is it ok for you to mark this as *Target*(there won't be any save
> > > and restore in cfun since there's no variable defined here.)
> >
> > Since all -m* options are passed to cc1, -mdaz-ftz can't be marked
> > as Driver.  We need to give it a different name to mark it as Driver.
>
> It is ok like that.
>
>         Jakub
>

The GCC driver handles -mno-XXX automatically for -mXXX.  Use
a different name needs to handle the negation.   Or we can do something
like this to check for CL_DRIVER before passing it to cc1.
-- 
H.J.
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 2568d541196..87cbea11ae1 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -3851,7 +3851,7 @@ alloc_switch (void)
 
 static void
 save_switch (const char *opt, size_t n_args, const char *const *args,
-	     bool validated, bool known)
+	     bool validated, bool known, bool driver = false)
 {
   alloc_switch ();
   switches[n_switches].part1 = opt + 1;
@@ -3868,6 +3868,7 @@ save_switch (const char *opt, size_t n_args, const char *const *args,
   switches[n_switches].validated = validated;
   switches[n_switches].known = known;
   switches[n_switches].ordering = 0;
+  switches[n_switches].driver = driver;
   n_switches++;
 }
 
@@ -4575,7 +4576,8 @@ driver_handle_option (struct gcc_options *opts,
   if (do_save)
     save_switch (decoded->canonical_option[0],
 		 decoded->canonical_option_num_elements - 1,
-		 &decoded->canonical_option[1], validated, true);
+		 &decoded->canonical_option[1], validated, true,
+		 cl_options[opt_index].flags == CL_DRIVER);
   return true;
 }
 
@@ -7465,7 +7467,8 @@ check_live_switch (int switchnum, int prefix_length)
 static void
 give_switch (int switchnum, int omit_first_word)
 {
-  if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0)
+  if ((switches[switchnum].live_cond & SWITCH_IGNORE) != 0
+      || switches[switchnum].driver)
     return;
 
   if (!omit_first_word)
diff --git a/gcc/opts.h b/gcc/opts.h
index ce4fd5c39b9..2900f0d9168 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -561,6 +561,7 @@ struct switchstr
   bool known;
   bool validated;
   bool ordering;
+  bool driver;
 };
 
 #endif

Reply via email to