diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-02-09 12:41:25 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-02-09 12:41:25 +0100 |
commit | 65cca5de63ce4a3eca83668ff556fc88ea57c696 (patch) | |
tree | e607f0fbeeed426598cccfd417fe54ef0a3532d8 /gcc | |
parent | 19d7de5b7217708a57240fbacae6c01ed8047ec4 (diff) | |
download | gcc-65cca5de63ce4a3eca83668ff556fc88ea57c696.zip gcc-65cca5de63ce4a3eca83668ff556fc88ea57c696.tar.gz gcc-65cca5de63ce4a3eca83668ff556fc88ea57c696.tar.bz2 |
re PR debug/52165 (ICE in add_var_loc_to_decl, at dwarf2out.c:5430 building libgo on s390/s390x)
PR debug/52165
* var-tracking.c (emit_note_insn_var_location): If
EMIT_NOTE_BEFORE_INSN and insn is NOTE_INSN_CALL_ARG_LOCATION,
emit it before next non-NOTE_INSN_CALL_ARG_LOCATION
non-NOTE_DURING_CALL_P insn.
From-SVN: r184042
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/var-tracking.c | 9 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 05837c6..07ae1a8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2012-02-09 Jakub Jelinek <jakub@redhat.com> + + PR debug/52165 + * var-tracking.c (emit_note_insn_var_location): If + EMIT_NOTE_BEFORE_INSN and insn is NOTE_INSN_CALL_ARG_LOCATION, + emit it before next non-NOTE_INSN_CALL_ARG_LOCATION + non-NOTE_DURING_CALL_P insn. + 2012-02-09 Bin Cheng <bin.cheng@arm.com> PR middle-end/51867 diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 1f4903a..e9b5ca8 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -8225,9 +8225,14 @@ emit_note_insn_var_location (void **varp, void *data) /* Make sure that the call related notes come first. */ while (NEXT_INSN (insn) && NOTE_P (insn) - && NOTE_DURING_CALL_P (insn)) + && ((NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION + && NOTE_DURING_CALL_P (insn)) + || NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION)) insn = NEXT_INSN (insn); - if (NOTE_P (insn) && NOTE_DURING_CALL_P (insn)) + if (NOTE_P (insn) + && ((NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION + && NOTE_DURING_CALL_P (insn)) + || NOTE_KIND (insn) == NOTE_INSN_CALL_ARG_LOCATION)) note = emit_note_after (NOTE_INSN_VAR_LOCATION, insn); else note = emit_note_before (NOTE_INSN_VAR_LOCATION, insn); |