aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-02-09 12:41:25 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2012-02-09 12:41:25 +0100
commit65cca5de63ce4a3eca83668ff556fc88ea57c696 (patch)
treee607f0fbeeed426598cccfd417fe54ef0a3532d8 /gcc
parent19d7de5b7217708a57240fbacae6c01ed8047ec4 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/var-tracking.c9
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);