aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Rozenfeld <erozen@microsoft.com>2022-10-10 14:10:31 -0700
committerEugene Rozenfeld <erozen@microsoft.com>2022-10-10 23:34:51 -0700
commit80f414e6d73f9f1683f93d83ce63a6a482e54bee (patch)
treecad454f885dfabd5a26ac729ccce7cd643a0cbc1
parentb88adba751da635c6f0c353c5bc51bbe2ecf4c89 (diff)
downloadgcc-80f414e6d73f9f1683f93d83ce63a6a482e54bee.zip
gcc-80f414e6d73f9f1683f93d83ce63a6a482e54bee.tar.gz
gcc-80f414e6d73f9f1683f93d83ce63a6a482e54bee.tar.bz2
Fix PR107193.
The bug was introduced in f30e9fd33e56a5a721346ea6140722e1b193db42. A variable (cur_locus_e) was incorrectly declared inside a loop. I also moved two other declarations (last and locus) down to make the code more clear. Tested on x86_64-pc-linux-gnu. gcc/ChangeLog: PR debug/107193 * tree-cfg.cc (assign_discriminators): Move declaration of cur_locus_e out of the loop.
-rw-r--r--gcc/tree-cfg.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index 41f2925..ae78187 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -1204,9 +1204,8 @@ assign_discriminators (void)
edge e;
edge_iterator ei;
gimple_stmt_iterator gsi;
- gimple *last = last_stmt (bb);
- location_t locus = last ? gimple_location (last) : UNKNOWN_LOCATION;
location_t curr_locus = UNKNOWN_LOCATION;
+ expanded_location curr_locus_e = {};
int curr_discr = 0;
/* Traverse the basic block, if two function calls within a basic block
@@ -1215,7 +1214,7 @@ assign_discriminators (void)
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
{
gimple *stmt = gsi_stmt (gsi);
- expanded_location curr_locus_e;
+
if (curr_locus == UNKNOWN_LOCATION)
{
curr_locus = gimple_location (stmt);
@@ -1238,6 +1237,8 @@ assign_discriminators (void)
curr_discr = next_discriminator_for_locus (curr_locus);
}
+ gimple *last = last_stmt (bb);
+ location_t locus = last ? gimple_location (last) : UNKNOWN_LOCATION;
if (locus == UNKNOWN_LOCATION)
continue;