From: Alexandre Oliva Date: Thu, 18 Dec 2025 01:41:14 +0000 (-0300) Subject: vartrack: fix skipping of unsuitable locs X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77ab3b07385f23b39a2445011068c04e0872b481;p=thirdparty%2Fgcc.git vartrack: fix skipping of unsuitable locs When the last loc in a chain happens to be an unsuitable_loc(), we record VAR_LOC_FROM as if the empty location had been derived from that unsuitable loc, instead of leaving it empty, which ends up preventing the VAR loc from being recomputed when other related locs are usefully expanded. Adjust the code that skips an unsuitable_loc() to take the same preparation steps we take for exiting the loop as when an expansion attempt yields NULL_RTX. for gcc/ChangeLog * var-tracking.cc (vt_expand_var_loc_chain): Prepare to exit the loop after unsuitable_loc. --- diff --git a/gcc/var-tracking.cc b/gcc/var-tracking.cc index 8732c3ba62a..7c255b1a883 100644 --- a/gcc/var-tracking.cc +++ b/gcc/var-tracking.cc @@ -8397,7 +8397,7 @@ vt_expand_var_loc_chain (variable *var, bitmap regs, void *data, next = loc; cloc = cloc->next; if (unsuitable_loc (loc_from)) - continue; + goto try_next_loc; } else { @@ -8437,6 +8437,7 @@ vt_expand_var_loc_chain (variable *var, bitmap regs, void *data, result = NULL; } + try_next_loc: /* Set it up in case we leave the loop. */ depth.complexity = depth.entryvals = 0; loc_from = NULL;