https://gcc.gnu.org/g:2df6b3b9e870618295ffbe7111520b7901c45df9

commit r16-7175-g2df6b3b9e870618295ffbe7111520b7901c45df9
Author: Jørgen Kvalsvik <[email protected]>
Date:   Wed Nov 5 20:15:50 2025 +0100

    gcov: Only consider pure locations in line mapping
    
    Fixes a regression introduced I bisected to this commit:
    
    commit 385d9937f0e23cbf9c62f0b2553a33ff70e56ecf
    Author: Jan Hubicka <[email protected]>
    Date:   Fri Jul 11 13:01:13 2025 +0200
        Rewrite assign_discriminators
    
    That patch adds discriminators to edge->goto_locus which will map to
    the right source location, but breaks the equality comparison used in
    the hash set.
    
    Fixes these tests:
    
    gcc/testsuite/gcc.misc-tests/gcov-pr83813.c
    gcc/testsuite/gcc.misc-tests/gcov-pr84758.c
    gcc/testsuite/gcc.misc-tests/gcov-pr85332.c
    gcc/testsuite/gcc.misc-tests/gcov-pr85372.c
    
            PR gcov-profile/121084
            PR gcov-profile/121123
            PR gcov-profile/121409
    
    gcc/ChangeLog:
    
            * profile.cc (branch_prob): Record seen_locations without
            discriminators.

Diff:
---
 gcc/profile.cc | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gcc/profile.cc b/gcc/profile.cc
index 21e33b985dc4..17841fc723a0 100644
--- a/gcc/profile.cc
+++ b/gcc/profile.cc
@@ -1554,7 +1554,7 @@ branch_prob (bool thunk)
              location_t loc = DECL_SOURCE_LOCATION (current_function_decl);
              if (!RESERVED_LOCATION_P (loc))
                {
-                 seen_locations.add (loc);
+                 seen_locations.add (get_pure_location (loc));
                  expanded_location curr_location = expand_location (loc);
                  output_location (&streamed_locations, curr_location.file,
                                   MAX (1, curr_location.line), &offset, bb);
@@ -1567,7 +1567,7 @@ branch_prob (bool thunk)
              location_t loc = gimple_location (stmt);
              if (!RESERVED_LOCATION_P (loc))
                {
-                 seen_locations.add (loc);
+                 seen_locations.add (get_pure_location (loc));
                  output_location (&streamed_locations, gimple_filename (stmt),
                                   MAX (1, gimple_lineno (stmt)), &offset, bb);
                }
@@ -1580,7 +1580,7 @@ branch_prob (bool thunk)
          if (single_succ_p (bb)
              && (loc = single_succ_edge (bb)->goto_locus)
              && !RESERVED_LOCATION_P (loc)
-             && !seen_locations.contains (loc))
+             && !seen_locations.contains (get_pure_location (loc)))
            {
              expanded_location curr_location = expand_location (loc);
              output_location (&streamed_locations, curr_location.file,

Reply via email to