On Mon, Oct 4, 2021 at 12:31 PM Martin Liška <mli...@suse.cz> wrote:
>
> Hello.
>
> The patch sets -1 for x_flag_var_tracking and x_flag_var_tracking_assignments 
> similarly
> to toplev.c.
>
> Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
>
> Ready to be installed?
> Thanks,
> Martin
>
>         PR debug/102585
>
> gcc/ChangeLog:
>
>         * opts.c (finish_options): Similarly to toplev.c
>           (process_options), set value -1.
>
> gcc/testsuite/ChangeLog:
>
>         * gcc.dg/pr102585.c: New test.
> ---
>   gcc/opts.c                      | 3 +++
>   gcc/testsuite/gcc.dg/pr102585.c | 6 ++++++
>   2 files changed, 9 insertions(+)
>   create mode 100644 gcc/testsuite/gcc.dg/pr102585.c
>
> diff --git a/gcc/opts.c b/gcc/opts.c
> index 6503980cd33..f2f058b3ece 100644
> --- a/gcc/opts.c
> +++ b/gcc/opts.c
> @@ -1343,6 +1343,9 @@ finish_options (struct gcc_options *opts, struct 
> gcc_options *opts_set,
>       opts->x_flag_complex_method = 1;
>     else if (opts_set->x_flag_cx_fortran_rules)
>       opts->x_flag_complex_method = opts->x_flag_default_complex_method;
> +
> +  if (opts->x_flag_var_tracking_assignments && !opts->x_flag_var_tracking)
> +    opts->x_flag_var_tracking = opts->x_flag_var_tracking_assignments = -1;

I can see how this affects later tests in process_options like

  if (flag_var_tracking_uninit == AUTODETECT_VALUE)
    flag_var_tracking_uninit = flag_var_tracking;

would now become -1 instead of zero?

So iff then probably this whole block would need to move but the option
handling code is a sophisticated mess between FE, target and middle-end ...

diff --git a/gcc/toplev.c b/gcc/toplev.c
index ec9f998a49b..fec72b1365a 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2147,8 +2147,6 @@ standard_type_bitsize (int bitsize)
 static void
 do_compile ()
 {
-  process_options ();
-
   /* Don't do any more if an error has already occurred.  */
   if (!seen_error ())
     {
@@ -2368,6 +2366,8 @@ toplev::main (int argc, char **argv)
   /* Exit early if we can (e.g. -help).  */
   if (!exit_after_options)
     {
+      process_options ();
+
       if (m_use_TV_TOTAL)
        start_timevars ();
       do_compile ();

would at least make the flow a bit more obvious ;)  IIRC process_options
was/is supposed to be the place to emit diagnostics about options but
clearly it's doing even more.  I guess outlining the call to
lang_hooks.post_options
would be another piece to make the flow clearer, likewise setting of
optimization_default_node ...

Richard.

>   }
>
>   #define LEFT_COLUMN   27
> diff --git a/gcc/testsuite/gcc.dg/pr102585.c b/gcc/testsuite/gcc.dg/pr102585.c
> new file mode 100644
> index 00000000000..efd066b4a4e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr102585.c
> @@ -0,0 +1,6 @@
> +/* PR debug/102585 */
> +/* { dg-do compile } */
> +/* { dg-options "-fvar-tracking-assignments -fno-var-tracking" } */
> +
> +#pragma GCC optimize 0
> +void d_demangle_callback_Og() { int c = 0; }
> --
> 2.33.0
>

Reply via email to