aboutsummaryrefslogtreecommitdiff
path: root/gcc/passes.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2004-09-04 11:05:53 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2004-09-04 09:05:53 +0000
commit0a9aeefd620bb680d58187a52532c8c027ee991d (patch)
tree26ace95fc23681b5f767a4b940fe57f0826387c6 /gcc/passes.c
parent273a2526bdccb1cde0f332d254616982cc142a64 (diff)
downloadgcc-0a9aeefd620bb680d58187a52532c8c027ee991d.zip
gcc-0a9aeefd620bb680d58187a52532c8c027ee991d.tar.gz
gcc-0a9aeefd620bb680d58187a52532c8c027ee991d.tar.bz2
* passes.c (rest_of_clean_state): Decompose the instruction stream.
From-SVN: r87080
Diffstat (limited to 'gcc/passes.c')
-rw-r--r--gcc/passes.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/passes.c b/gcc/passes.c
index 7c6f002..a125c71 100644
--- a/gcc/passes.c
+++ b/gcc/passes.c
@@ -1634,6 +1634,18 @@ static void
rest_of_clean_state (void)
{
coverage_end_function ();
+ rtx insn, next;
+
+ /* It is very important to decompose the RTL instruction chain here:
+ debug information keeps pointing into CODE_LABEL insns inside the function
+ body. If these remain pointing to the other insns, we end up preserving
+ whole RTL chain and attached detailed debug info in memory. */
+ for (insn = get_insns (); insn; insn = next)
+ {
+ next = NEXT_INSN (insn);
+ NEXT_INSN (insn) = NULL;
+ PREV_INSN (insn) = NULL;
+ }
/* In case the function was not output,
don't leave any temporary anonymous types