This is location_t curr_location = single_succ_edge (bb)->goto_locus; /* ??? The FILE/LINE API is inconsistent for these cases. */ output_location (LOCATION_FILE (curr_location), LOCATION_LINE (curr_location), &offset, bb);
which dates back to the pre-location-map days. Moreover, the double call to expand_location hidden behind the LOCATION_FILE and LOCATION_LINE macros can be eliminated like a few lines above. Tested on x86_64-suse-linux, applied on the mainline as obvious. 2011-04-06 Eric Botcazou <ebotca...@adacore.com> * profile.c (branch_prob): Move declaration of local variable. Remove obsolete ??? comment. Expand the location explicitly instead of using the LOCATION_FILE and LOCATION_LINE macros. -- Eric Botcazou
Index: profile.c =================================================================== --- profile.c (revision 172018) +++ profile.c (working copy) @@ -1123,16 +1123,13 @@ branch_prob (void) /* Line numbers. */ if (coverage_begin_output ()) { - gcov_position_t offset; - /* Initialize the output. */ output_location (NULL, 0, NULL, NULL); FOR_EACH_BB (bb) { gimple_stmt_iterator gsi; - - offset = 0; + gcov_position_t offset = 0; if (bb == ENTRY_BLOCK_PTR->next_bb) { @@ -1150,15 +1147,14 @@ branch_prob (void) &offset, bb); } - /* Notice GOTO expressions we eliminated while constructing the - CFG. */ + /* Notice GOTO expressions eliminated while constructing the CFG. */ if (single_succ_p (bb) && single_succ_edge (bb)->goto_locus != UNKNOWN_LOCATION) { - location_t curr_location = single_succ_edge (bb)->goto_locus; - /* ??? The FILE/LINE API is inconsistent for these cases. */ - output_location (LOCATION_FILE (curr_location), - LOCATION_LINE (curr_location), &offset, bb); + expanded_location curr_location + = expand_location (single_succ_edge (bb)->goto_locus); + output_location (curr_location.file, curr_location.line, + &offset, bb); } if (offset)