]> gcc.gnu.org Git - gcc.git/commitdiff
skip debug stmts when assigning locus discriminators
authorAlexandre Oliva <oliva@adacore.com>
Thu, 9 Nov 2023 03:01:30 +0000 (00:01 -0300)
committerAlexandre Oliva <oliva@gnu.org>
Thu, 9 Nov 2023 03:01:30 +0000 (00:01 -0300)
c-c++-common/goacc/kernels-loop-g.c has been failing (compare-debug)
on i686-linux-gnu since r13-3172, because the implementation enabled
debug stmts to cause discriminators to be assigned differently, and
the discriminators are printed in the .gkd dumps that -fcompare-debug
compares.

This patch prevents debug stmts from affecting the discriminators in
nondebug stmts, but enables debug stmts to get discriminators just as
nondebug stmts would if their line numbers match.

I suppose we could arrange for discriminators to be omitted from the
-fcompare-debug dumps, but keeping discriminators in sync is probably
good to avoid other potential sources of divergence between debug and
nondebug.

for  gcc/ChangeLog

* tree-cfg.cc (assign_discriminators): Handle debug stmts.

gcc/tree-cfg.cc

index 40a6f2a3b529f44b07f0e76ac89e31d95b29517e..a30a2de33a10608e5dda2cf2a36b108a13781d13 100644 (file)
@@ -1214,6 +1214,22 @@ assign_discriminators (void)
        {
          gimple *stmt = gsi_stmt (gsi);
 
+         /* Don't allow debug stmts to affect discriminators, but
+            allow them to take discriminators when they're on the
+            same line as the preceding nondebug stmt.  */
+         if (is_gimple_debug (stmt))
+           {
+             if (curr_locus != UNKNOWN_LOCATION
+                 && same_line_p (curr_locus, &curr_locus_e,
+                                 gimple_location (stmt)))
+               {
+                 location_t loc = gimple_location (stmt);
+                 location_t dloc = location_with_discriminator (loc,
+                                                                curr_discr);
+                 gimple_set_location (stmt, dloc);
+               }
+             continue;
+           }
          if (curr_locus == UNKNOWN_LOCATION)
            {
              curr_locus = gimple_location (stmt);
This page took 0.077748 seconds and 5 git commands to generate.