There are some inconsistencies in the middle-end about how to dump a location. The following patch makes all places (that I found) use dump_location, and makes that function print also the column number.
While searching for possible callers, I noticed two cases where we use expanded_location for no good reason. Bootstrapped and regression tested on x86_64-linux-gnu. OK? gcc/ChangeLog: 2014-10-03 Manuel López-Ibáñez <m...@gcc.gnu.org> * tree-pretty-print.c (dump_location): Make it extern. Dump also the column. * tree-pretty-print.h (dump_location): Declare. * gimple-pretty-print.c (dump_gimple_phi): Use dump_location. (pp_gimple_stmt_1): Likewise. (dump_implicit_edges): Likewise. * gimplify.c (gimplify_call_expr): Use LOCATION_FILE and LOCATION_LINE. gcc/testsuite/ChangeLog: 2014-10-03 Manuel López-Ibáñez <m...@gcc.gnu.org> * gcc.dg/tm/debug-1.c: Update regex. * c-c++-common/raw-string-18.c: Update regex. * c-c++-common/raw-string-19.c: Update regex.
Index: gcc/tree-pretty-print.c =================================================================== --- gcc/tree-pretty-print.c (revision 215841) +++ gcc/tree-pretty-print.c (working copy) @@ -675,22 +675,24 @@ dump_omp_clauses (pretty_printer *buffer } /* Dump location LOC to BUFFER. */ -static void +void dump_location (pretty_printer *buffer, location_t loc) { expanded_location xloc = expand_location (loc); pp_left_bracket (buffer); if (xloc.file) { pp_string (buffer, xloc.file); - pp_string (buffer, " : "); + pp_string (buffer, ":"); } pp_decimal_int (buffer, xloc.line); + pp_colon (buffer); + pp_decimal_int (buffer, xloc.column); pp_string (buffer, "] "); } /* Dump lexical block BLOCK. BUFFER, SPC and FLAGS are as in Index: gcc/tree-pretty-print.h =================================================================== --- gcc/tree-pretty-print.h (revision 215841) +++ gcc/tree-pretty-print.h (working copy) @@ -48,7 +48,8 @@ extern const char *op_symbol_code (enum extern void print_call_name (pretty_printer *, tree, int); extern void percent_K_format (text_info *); extern void pp_tree_identifier (pretty_printer *, tree); extern void dump_function_header (FILE *, tree, int); extern void pp_double_int (pretty_printer *pp, double_int d, bool uns); +extern void dump_location (pretty_printer *buffer, location_t loc); #endif /* ! GCC_TREE_PRETTY_PRINT_H */ Index: gcc/testsuite/gcc.dg/tm/debug-1.c =================================================================== --- gcc/testsuite/gcc.dg/tm/debug-1.c (revision 215841) +++ gcc/testsuite/gcc.dg/tm/debug-1.c (working copy) @@ -17,10 +17,10 @@ int main() { testing(); } return 0; } -/* { dg-final { scan-tree-dump-times ": 13:.*b = 9898" 1 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times ": 14:.*_ITM_beginTransaction" 1 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times ": 15:.*ITM_WU. \\(&z" 1 "tmmark" } } */ -/* { dg-final { scan-tree-dump-times ": 16:.*ITM_WU. \\(&a" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times ":13:.*b = 9898" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times ":14:.*_ITM_beginTransaction" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times ":15:.*ITM_WU. \\(&z" 1 "tmmark" } } */ +/* { dg-final { scan-tree-dump-times ":16:.*ITM_WU. \\(&a" 1 "tmmark" } } */ /* { dg-final { cleanup-tree-dump "tmmark" } } */ Index: gcc/testsuite/c-c++-common/raw-string-18.c =================================================================== --- gcc/testsuite/c-c++-common/raw-string-18.c (revision 215841) +++ gcc/testsuite/c-c++-common/raw-string-18.c (working copy) @@ -15,7 +15,7 @@ main () extern void foo (); foo (); return 0; } /* Verify call to foo is on line 15. */ -/* { dg-final { scan-tree-dump ": 15\[]:]\[^\n\r]*foo" "optimized" } } */ +/* { dg-final { scan-tree-dump "c:15:\[^\n\r\]*foo" "optimized" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ Index: gcc/testsuite/c-c++-common/raw-string-19.c =================================================================== --- gcc/testsuite/c-c++-common/raw-string-19.c (revision 215841) +++ gcc/testsuite/c-c++-common/raw-string-19.c (working copy) @@ -15,8 +15,8 @@ main () extern void foo (); foo (); return 0; } /* Verify call to foo is on line 15. */ -/* { dg-final { scan-tree-dump ": 15\[]:]\[^\n\r]*foo" "optimized" } } */ +/* { dg-final { scan-tree-dump "c:15:\[^\n\r\]*foo" "optimized" } } */ /* { dg-final { cleanup-tree-dump "optimized" } } */ /* { dg-final { cleanup-saved-temps } } */ Index: gcc/gimple-pretty-print.c =================================================================== --- gcc/gimple-pretty-print.c (revision 215841) +++ gcc/gimple-pretty-print.c (working copy) @@ -1832,25 +1832,11 @@ dump_gimple_phi (pretty_printer *buffer, pp_string (buffer, " = PHI <"); } for (i = 0; i < gimple_phi_num_args (phi); i++) { if ((flags & TDF_LINENO) && gimple_phi_arg_has_location (phi, i)) - { - expanded_location xloc; - - xloc = expand_location (gimple_phi_arg_location (phi, i)); - pp_left_bracket (buffer); - if (xloc.file) - { - pp_string (buffer, xloc.file); - pp_string (buffer, " : "); - } - pp_decimal_int (buffer, xloc.line); - pp_colon (buffer); - pp_decimal_int (buffer, xloc.column); - pp_string (buffer, "] "); - } + dump_location (buffer, gimple_phi_arg_location (phi, i)); dump_generic_node (buffer, gimple_phi_arg_def (phi, i), spc, flags, false); pp_left_paren (buffer); pp_decimal_int (buffer, gimple_phi_arg_edge (phi, i)->src->index); pp_right_paren (buffer); @@ -2074,23 +2060,11 @@ pp_gimple_stmt_1 (pretty_printer *buffer if (flags & TDF_STMTADDR) pp_printf (buffer, "<&%p> ", (void *) gs); if ((flags & TDF_LINENO) && gimple_has_location (gs)) - { - expanded_location xloc = expand_location (gimple_location (gs)); - pp_left_bracket (buffer); - if (xloc.file) - { - pp_string (buffer, xloc.file); - pp_string (buffer, " : "); - } - pp_decimal_int (buffer, xloc.line); - pp_colon (buffer); - pp_decimal_int (buffer, xloc.column); - pp_string (buffer, "] "); - } + dump_location (buffer, gimple_location (gs)); if (flags & TDF_EH) { int lp_nr = lookup_stmt_eh_lp (gs); if (lp_nr > 0) @@ -2402,26 +2376,12 @@ dump_implicit_edges (pretty_printer *buf if (e && e->dest != bb->next_bb) { INDENT (indent); if ((flags & TDF_LINENO) - && e->goto_locus != UNKNOWN_LOCATION - ) - { - expanded_location goto_xloc; - goto_xloc = expand_location (e->goto_locus); - pp_left_bracket (buffer); - if (goto_xloc.file) - { - pp_string (buffer, goto_xloc.file); - pp_string (buffer, " : "); - } - pp_decimal_int (buffer, goto_xloc.line); - pp_string (buffer, " : "); - pp_decimal_int (buffer, goto_xloc.column); - pp_string (buffer, "] "); - } + && e->goto_locus != UNKNOWN_LOCATION) + dump_location (buffer, e->goto_locus); pp_cfg_jump (buffer, e->dest); pp_newline (buffer); } } Index: gcc/gimplify.c =================================================================== --- gcc/gimplify.c (revision 215841) +++ gcc/gimplify.c (working copy) @@ -2315,18 +2315,18 @@ gimplify_call_expr (tree *expr_p, gimple } break; } case BUILT_IN_LINE: { - expanded_location loc = expand_location (EXPR_LOCATION (*expr_p)); - *expr_p = build_int_cst (TREE_TYPE (*expr_p), loc.line); + *expr_p = build_int_cst (TREE_TYPE (*expr_p), + LOCATION_LINE (EXPR_LOCATION (*expr_p))); return GS_OK; } case BUILT_IN_FILE: { - expanded_location loc = expand_location (EXPR_LOCATION (*expr_p)); - *expr_p = build_string_literal (strlen (loc.file) + 1, loc.file); + const char *locfile = LOCATION_FILE (EXPR_LOCATION (*expr_p)); + *expr_p = build_string_literal (strlen (locfile) + 1, locfile); return GS_OK; } case BUILT_IN_FUNCTION: { const char *function;