Conditionally compile support for --enable-mapped_location.

* gengtype-lex.l:  Temporary kludge to avoid duplicate typedef.
	* gengtype.c:  Update for now typdefs in input.h.  More kludges.
	* modulo-sched.c (sms_schedule):  Use NOTE_EXPANDED_LOCATION macro.
	* ra-debug.c (ra_print_rtl):  Likewise.
	* sched-rgn.c:  Likewise.
	* sched-vis.c:  Likewise.
	* rtl.h (gen_rtx_ASM_OPERANDS):  Redefine if USE_MAPPED_LOCATION.
	* stmt.c (expand_asm_operands):  Adjust calls to gen_rtx_ASM_OPERANDS.
	* tree-cfg.c:  Use new macros and typedefs.
	* tree-flow-inline.h:  Likewise.

From-SVN: r83922
This commit is contained in:
Per Bothner 2004-06-30 11:21:54 -07:00 committed by Per Bothner
parent 6773e15fa5
commit 9506ac2be5
9 changed files with 106 additions and 20 deletions

View File

@ -79,6 +79,16 @@
* rtl-error.c: Likewise.
* stmt.c (check_seenlabel): Likewise.
* tree-pretty-print.c: Likewise.
* gengtype-lex.l: Temporary kludge to avoid duplicate typedef.
* gengtype.c: Update for now typdefs in input.h. More kludges.
* modulo-sched.c (sms_schedule): Use NOTE_EXPANDED_LOCATION macro.
* ra-debug.c (ra_print_rtl): Likewise.
* sched-rgn.c: Likewise.
* sched-vis.c: Likewise.
* rtl.h (gen_rtx_ASM_OPERANDS): Redefine if USE_MAPPED_LOCATION.
* stmt.c (expand_asm_operands): Adjust calls to gen_rtx_ASM_OPERANDS.
* tree-cfg.c: Use new macros and typedefs.
* tree-flow-inline.h: Likewise.
2004-06-30 Richard Sandiford <rsandifo@redhat.com>
Eric Christopher <echristo@redhat.com>

View File

@ -88,7 +88,12 @@ ITYPE {IWORD}({WS}{IWORD})*
t = find_structure (xmemdup (tagstart, taglen, taglen+1), union_p);
if (is_pointer)
t = create_pointer (t);
do_typedef (xmemdup (namestart, namelen, namelen+1), t, &lexer_line);
namestart = xmemdup (namestart, namelen, namelen+1);
#ifdef USE_MAPPED_LOCATION
/* temporary kludge - gentype doesn't handle cpp conditionals */
if (strcmp (namestart, "location_t") != 0)
#endif
do_typedef (namestart, t, &lexer_line);
update_lineno (yytext, yyleng);
}

View File

@ -1104,7 +1104,7 @@ open_base_files (void)
/* The order of files here matters very much. */
static const char *const ifiles [] = {
"config.h", "system.h", "coretypes.h", "tm.h", "varray.h",
"hashtab.h", "splay-tree.h", "bitmap.h", "tree.h", "rtl.h",
"hashtab.h", "splay-tree.h", "bitmap.h", "input.h", "tree.h", "rtl.h",
"function.h", "insn-config.h", "expr.h", "hard-reg-set.h",
"basic-block.h", "cselib.h", "insn-addr.h", "optabs.h",
"libfuncs.h", "debug.h", "ggc.h", "cgraph.h",
@ -2988,6 +2988,10 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
do_scalar_typedef ("uint8", &pos);
do_scalar_typedef ("jword", &pos);
do_scalar_typedef ("JCF_u2", &pos);
#ifdef USE_MAPPED_LOCATION
do_scalar_typedef ("location_t", &pos);
do_scalar_typedef ("source_locus", &pos);
#endif
do_scalar_typedef ("void", &pos);
do_typedef ("PTR", create_pointer (resolve_typedef ("void", &pos)), &pos);
@ -3010,6 +3014,12 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
}
if (!dupflag)
parse_file (all_files[i]);
#ifndef USE_MAPPED_LOCATION
/* temporary kludge - gengtype doesn't handle conditionals.
Manually add source_locus *after* we've processed input.h. */
if (i == 0)
do_typedef ("source_locus", create_pointer (resolve_typedef ("location_t", &pos)), &pos);
#endif
}
if (hit_error != 0)

View File

@ -900,8 +900,12 @@ sms_schedule (FILE *dump_file)
rtx line_note = find_line_note (tail);
if (line_note)
fprintf (stats_file, "SMS bb %s %d (file, line)\n",
NOTE_SOURCE_FILE (line_note), NOTE_LINE_NUMBER (line_note));
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (stats_file, "SMS bb %s %d (file, line)\n",
xloc.file, xloc.line);
}
fprintf (stats_file, "SMS single-bb-loop\n");
if (profile_info && flag_branch_probabilities)
{
@ -996,8 +1000,12 @@ sms_schedule (FILE *dump_file)
rtx line_note = find_line_note (tail);
if (line_note)
fprintf (stats_file, "SMS bb %s %d (file, line)\n",
NOTE_SOURCE_FILE (line_note), NOTE_LINE_NUMBER (line_note));
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (stats_file, "SMS bb %s %d (file, line)\n",
xloc.file, xloc.line);
}
fprintf (stats_file, "SMS single-bb-loop\n");
if (profile_info && flag_branch_probabilities)
{

View File

@ -389,9 +389,11 @@ ra_print_rtx (FILE *file, rtx x, int with_pn)
fprintf (file, " %s", GET_NOTE_INSN_NAME (ln));
else
{
fprintf (file, " line %d", ln);
if (NOTE_SOURCE_FILE (x))
fprintf (file, ":%s", NOTE_SOURCE_FILE (x));
expanded_location s;
NOTE_EXPANDED_LOCATION (s, x);
fprintf (file, " line %d", s.line);
if (s.file != NULL)
fprintf (file, ":%s", s.file);
}
}
else

View File

@ -2321,8 +2321,12 @@ debug_dependencies (void)
if (n < 0)
fprintf (sched_dump, "%s\n", GET_NOTE_INSN_NAME (n));
else
fprintf (sched_dump, "line %d, file %s\n", n,
NOTE_SOURCE_FILE (insn));
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, insn);
fprintf (sched_dump, "line %d, file %s\n",
xloc.line, xloc.file);
}
}
else
fprintf (sched_dump, " {%s}\n", GET_RTX_NAME (GET_CODE (insn)));

View File

@ -787,8 +787,12 @@ print_insn (char *buf, rtx x, int verbose)
break;
case NOTE:
if (NOTE_LINE_NUMBER (x) > 0)
sprintf (buf, "%4d note \"%s\" %d", INSN_UID (x),
NOTE_SOURCE_FILE (x), NOTE_LINE_NUMBER (x));
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, x);
sprintf (buf, "%4d note \"%s\" %d", INSN_UID (x),
xloc.file, xloc.line);
}
else
sprintf (buf, "%4d %s", INSN_UID (x),
GET_NOTE_INSN_NAME (NOTE_LINE_NUMBER (x)));

View File

@ -666,7 +666,11 @@ make_goto_expr_edges (basic_block bb)
if (simple_goto_p (goto_t))
{
edge e = make_edge (bb, label_to_block (dest), EDGE_FALLTHRU);
#ifdef USE_MAPPED_LOCATION
e->goto_locus = EXPR_LOCATION (goto_t);
#else
e->goto_locus = EXPR_LOCUS (goto_t);
#endif
bsi_remove (&last);
return;
}
@ -1115,9 +1119,10 @@ static void remove_useless_stmts_1 (tree *, struct rus_data *);
static bool
remove_useless_stmts_warn_notreached (tree stmt)
{
if (EXPR_LOCUS (stmt))
if (EXPR_HAS_LOCATION (stmt))
{
warning ("%Hwill never be executed", EXPR_LOCUS (stmt));
location_t loc = EXPR_LOCATION (stmt);
warning ("%Hwill never be executed", &loc);
return true;
}
@ -1776,7 +1781,7 @@ static void
remove_bb (basic_block bb)
{
block_stmt_iterator i;
location_t *loc = NULL;
source_locus loc = 0;
if (dump_file)
{
@ -1799,8 +1804,12 @@ remove_bb (basic_block bb)
jump threading, thus resulting in bogus warnings. Not great,
since this way we lose warnings for gotos in the original
program that are indeed unreachable. */
if (TREE_CODE (stmt) != GOTO_EXPR && EXPR_LOCUS (stmt) && !loc)
if (TREE_CODE (stmt) != GOTO_EXPR && EXPR_HAS_LOCATION (stmt) && !loc)
#ifdef USE_MAPPED_LOCATION
loc = EXPR_LOCATION (stmt);
#else
loc = EXPR_LOCUS (stmt);
#endif
}
/* If requested, give a warning that the first statement in the
@ -1808,7 +1817,11 @@ remove_bb (basic_block bb)
loop above, so the last statement we process is the first statement
in the block. */
if (warn_notreached && loc)
#ifdef USE_MAPPED_LOCATION
warning ("%Hwill never be executed", &loc);
#else
warning ("%Hwill never be executed", loc);
#endif
remove_phi_nodes_and_edges_for_unreachable_block (bb);
}
@ -2641,7 +2654,11 @@ disband_implicit_edges (void)
label = tree_block_label (e->dest);
stmt = build1 (GOTO_EXPR, void_type_node, label);
#ifdef USE_MAPPED_LOCATION
SET_EXPR_LOCATION (stmt, e->goto_locus);
#else
SET_EXPR_LOCUS (stmt, e->goto_locus);
#endif
bsi_insert_after (&last, stmt, BSI_NEW_STMT);
e->flags &= ~EDGE_FALLTHRU;
}
@ -4759,7 +4776,11 @@ struct tree_opt_pass pass_split_crit_edges =
static void
execute_warn_function_return (void)
{
#ifdef USE_MAPPED_LOCATION
source_location location;
#else
location_t *locus;
#endif
tree last;
edge e;
@ -4774,17 +4795,31 @@ execute_warn_function_return (void)
if (TREE_THIS_VOLATILE (cfun->decl)
&& EXIT_BLOCK_PTR->pred != NULL)
{
#ifdef USE_MAPPED_LOCATION
location = UNKNOWN_LOCATION;
#else
locus = NULL;
#endif
for (e = EXIT_BLOCK_PTR->pred; e ; e = e->pred_next)
{
last = last_stmt (e->src);
if (TREE_CODE (last) == RETURN_EXPR
#ifdef USE_MAPPED_LOCATION
&& (location = EXPR_LOCATION (last)) != UNKNOWN_LOCATION)
#else
&& (locus = EXPR_LOCUS (last)) != NULL)
#endif
break;
}
#ifdef USE_MAPPED_LOCATION
if (location == UNKNOWN_LOCATION)
location = cfun->function_end_locus;
warning ("%H`noreturn' function does return", &location);
#else
if (!locus)
locus = &cfun->function_end_locus;
warning ("%H`noreturn' function does return", locus);
#endif
}
/* If we see "return;" in some basic block, then we do reach the end
@ -4799,10 +4834,17 @@ execute_warn_function_return (void)
if (TREE_CODE (last) == RETURN_EXPR
&& TREE_OPERAND (last, 0) == NULL)
{
#ifdef USE_MAPPED_LOCATION
location = EXPR_LOCATION (last);
if (location == UNKNOWN_LOCATION)
location = cfun->function_end_locus;
warning ("%Hcontrol reaches end of non-void function", &location);
#else
locus = EXPR_LOCUS (last);
if (!locus)
locus = &cfun->function_end_locus;
warning ("%Hcontrol reaches end of non-void function", locus);
#endif
break;
}
}

View File

@ -126,7 +126,7 @@ get_lineno (tree expr)
if (TREE_CODE (expr) == COMPOUND_EXPR)
expr = TREE_OPERAND (expr, 0);
if (! EXPR_LOCUS (expr))
if (! EXPR_HAS_LOCATION (expr))
return -1;
return EXPR_LINENO (expr);
@ -137,14 +137,15 @@ get_lineno (tree expr)
static inline const char *
get_filename (tree expr)
{
const char *filename;
if (expr == NULL_TREE)
return "???";
if (TREE_CODE (expr) == COMPOUND_EXPR)
expr = TREE_OPERAND (expr, 0);
if (EXPR_LOCUS (expr) && EXPR_FILENAME (expr))
return EXPR_FILENAME (expr);
if (EXPR_HAS_LOCATION (expr) && (filename = EXPR_FILENAME (expr)))
return filename;
else
return "???";
}