Commit c82fee88 by Eric Botcazou Committed by Eric Botcazou

cfgexpand.c (expand_gimple_cond): Always set the source location and block…

cfgexpand.c (expand_gimple_cond): Always set the source location and block before expanding the statement.

	* cfgexpand.c (expand_gimple_cond): Always set the source location and
	block before expanding the statement.
	(expand_gimple_stmt_1): Likewise.  Set them here...
	(expand_gimple_stmt): ...and not here.  Tidy.
	* cfglayout.c (curr_insn_locator): Return 0 if the current location is
	unknown.

From-SVN: r171629
parent e45425ec
2011-03-28 Eric Botcazou <ebotcazou@adacore.com>
* cfgexpand.c (expand_gimple_cond): Always set the source location and
block before expanding the statement.
(expand_gimple_stmt_1): Likewise. Set them here...
(expand_gimple_stmt): ...and not here. Tidy.
* cfglayout.c (curr_insn_locator): Return 0 if the current location is
unknown.
2011-03-28 Steven Bosscher <steven@gcc.gnu.org> 2011-03-28 Steven Bosscher <steven@gcc.gnu.org>
* Makefile.in: New rule for cprop.o. * Makefile.in: New rule for cprop.o.
......
...@@ -1745,11 +1745,8 @@ expand_gimple_cond (basic_block bb, gimple stmt) ...@@ -1745,11 +1745,8 @@ expand_gimple_cond (basic_block bb, gimple stmt)
last2 = last = get_last_insn (); last2 = last = get_last_insn ();
extract_true_false_edges_from_block (bb, &true_edge, &false_edge); extract_true_false_edges_from_block (bb, &true_edge, &false_edge);
if (gimple_has_location (stmt)) set_curr_insn_source_location (gimple_location (stmt));
{ set_curr_insn_block (gimple_block (stmt));
set_curr_insn_source_location (gimple_location (stmt));
set_curr_insn_block (gimple_block (stmt));
}
/* These flags have no purpose in RTL land. */ /* These flags have no purpose in RTL land. */
true_edge->flags &= ~EDGE_TRUE_VALUE; true_edge->flags &= ~EDGE_TRUE_VALUE;
...@@ -1896,6 +1893,10 @@ static void ...@@ -1896,6 +1893,10 @@ static void
expand_gimple_stmt_1 (gimple stmt) expand_gimple_stmt_1 (gimple stmt)
{ {
tree op0; tree op0;
set_curr_insn_source_location (gimple_location (stmt));
set_curr_insn_block (gimple_block (stmt));
switch (gimple_code (stmt)) switch (gimple_code (stmt))
{ {
case GIMPLE_GOTO: case GIMPLE_GOTO:
...@@ -2052,32 +2053,21 @@ expand_gimple_stmt_1 (gimple stmt) ...@@ -2052,32 +2053,21 @@ expand_gimple_stmt_1 (gimple stmt)
static rtx static rtx
expand_gimple_stmt (gimple stmt) expand_gimple_stmt (gimple stmt)
{ {
int lp_nr = 0;
rtx last = NULL;
location_t saved_location = input_location; location_t saved_location = input_location;
rtx last = get_last_insn ();
int lp_nr;
last = get_last_insn ();
/* If this is an expression of some kind and it has an associated line
number, then emit the line number before expanding the expression.
We need to save and restore the file and line information so that
errors discovered during expansion are emitted with the right
information. It would be better of the diagnostic routines
used the file/line information embedded in the tree nodes rather
than globals. */
gcc_assert (cfun); gcc_assert (cfun);
/* We need to save and restore the current source location so that errors
discovered during expansion are emitted with the right location. But
it would be better if the diagnostic routines used the source location
embedded in the tree nodes rather than globals. */
if (gimple_has_location (stmt)) if (gimple_has_location (stmt))
{ input_location = gimple_location (stmt);
input_location = gimple_location (stmt);
set_curr_insn_source_location (input_location);
/* Record where the insns produced belong. */
set_curr_insn_block (gimple_block (stmt));
}
expand_gimple_stmt_1 (stmt); expand_gimple_stmt_1 (stmt);
/* Free any temporaries used to evaluate this statement. */ /* Free any temporaries used to evaluate this statement. */
free_temp_slots (); free_temp_slots ();
......
...@@ -323,7 +323,7 @@ get_curr_insn_block (void) ...@@ -323,7 +323,7 @@ get_curr_insn_block (void)
int int
curr_insn_locator (void) curr_insn_locator (void)
{ {
if (curr_rtl_loc == -1) if (curr_rtl_loc == -1 || curr_location == UNKNOWN_LOCATION)
return 0; return 0;
if (last_block != curr_block) if (last_block != curr_block)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment