Commit 67598720 by Teresa Johnson Committed by Teresa Johnson

re PR rtl-optimization/57451 (Incorrect debug ranges emitted for -freorder-blocks-and-partition -g)

2013-08-20  Teresa Johnson  <tejohnson@google.com>

	PR rtl-optimizations/57451
	* final.c (reemit_insn_block_notes): Prevent lexical blocks
	from crossing split section boundaries.

	* testsuite/g++.dg/tree-prof/pr57451.C: New test.

From-SVN: r201883
parent c5918c21
2013-08-20 Teresa Johnson <tejohnson@google.com>
PR rtl-optimizations/57451
* final.c (reemit_insn_block_notes): Prevent lexical blocks
from crossing split section boundaries.
2013-08-20 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org> 2013-08-20 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
* config/arm/linux-elf.h (MULTILIB_DEFAULTS): Remove definition. * config/arm/linux-elf.h (MULTILIB_DEFAULTS): Remove definition.
......
...@@ -1650,12 +1650,26 @@ reemit_insn_block_notes (void) ...@@ -1650,12 +1650,26 @@ reemit_insn_block_notes (void)
rtx insn, note; rtx insn, note;
insn = get_insns (); insn = get_insns ();
if (!active_insn_p (insn)) for (; insn; insn = next_insn (insn))
insn = next_active_insn (insn);
for (; insn; insn = next_active_insn (insn))
{ {
tree this_block; tree this_block;
/* Prevent lexical blocks from straddling section boundaries. */
if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
{
for (tree s = cur_block; s != DECL_INITIAL (cfun->decl);
s = BLOCK_SUPERCONTEXT (s))
{
rtx note = emit_note_before (NOTE_INSN_BLOCK_END, insn);
NOTE_BLOCK (note) = s;
note = emit_note_after (NOTE_INSN_BLOCK_BEG, insn);
NOTE_BLOCK (note) = s;
}
}
if (!active_insn_p (insn))
continue;
/* Avoid putting scope notes between jump table and its label. */ /* Avoid putting scope notes between jump table and its label. */
if (JUMP_TABLE_DATA_P (insn)) if (JUMP_TABLE_DATA_P (insn))
continue; continue;
......
2013-08-20 Teresa Johnson <tejohnson@google.com>
PR rtl-optimizations/57451
* g++.dg/tree-prof/pr57451.C: New test.
2013-08-20 Paolo Carlini <paolo.carlini@oracle.com> 2013-08-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/58190 PR c++/58190
......
// { dg-do run }
// { dg-require-effective-target freorder }
// { dg-options "-O2 -freorder-blocks-and-partition -g" }
extern "C" void abort (void);
struct MyException {};
struct Data {
int nr;
Data() : nr(66) {}
};
Data __attribute__((noinline,noclone)) getData(int i)
{
if (i) throw MyException();
Data data;
data.nr = i;
return data;
}
int main(int, char **)
{
Data data;
try {
data = getData(1);
} catch (MyException& e) {
if (data.nr != 66)
abort ();
}
}
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