re PR rtl-optimization/89234 (ICE in get_eh_region_and_lp_from_rtx at gcc/except...
authorJakub Jelinek <jakub@redhat.com>
Fri, 8 Feb 2019 10:26:33 +0000 (11:26 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 8 Feb 2019 10:26:33 +0000 (11:26 +0100)
PR rtl-optimization/89234
* except.c (copy_reg_eh_region_note_forward): Return if note_or_insn
is a NOTE, CODE_LABEL etc. - rtx_insn * other than INSN_P.
(copy_reg_eh_region_note_backward): Likewise.

* g++.dg/ubsan/pr89234.C: New test.

From-SVN: r268669

gcc/ChangeLog
gcc/except.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ubsan/pr89234.C [new file with mode: 0644]

index 4e78ab6500215c76a828e3fd94443d090a264303..14c618340b4de8c1b622b4b3be044c6428d10165 100644 (file)
@@ -1,3 +1,10 @@
+2019-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/89234
+       * except.c (copy_reg_eh_region_note_forward): Return if note_or_insn
+       is a NOTE, CODE_LABEL etc. - rtx_insn * other than INSN_P.
+       (copy_reg_eh_region_note_backward): Likewise.
+
 2019-02-08  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/89223
index 10fef2f35445c9c179ed6c62bda9c27386740b55..29437f385240b499c12ad21b8b76044bac26527b 100644 (file)
@@ -1756,6 +1756,8 @@ copy_reg_eh_region_note_forward (rtx note_or_insn, rtx_insn *first, rtx last)
       if (note == NULL)
        return;
     }
+  else if (is_a <rtx_insn *> (note_or_insn))
+    return;
   note = XEXP (note, 0);
 
   for (insn = first; insn != last ; insn = NEXT_INSN (insn))
@@ -1778,6 +1780,8 @@ copy_reg_eh_region_note_backward (rtx note_or_insn, rtx_insn *last, rtx first)
       if (note == NULL)
        return;
     }
+  else if (is_a <rtx_insn *> (note_or_insn))
+    return;
   note = XEXP (note, 0);
 
   for (insn = last; insn != first; insn = PREV_INSN (insn))
index 9f4296b043857ca48254130a2a71c0e67222158a..fd3fbf1df4540c103d424ea602cd998028805893 100644 (file)
@@ -1,3 +1,8 @@
+2019-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR rtl-optimization/89234
+       * g++.dg/ubsan/pr89234.C: New test.
+
 2019-02-08  Richard Biener  <rguenther@suse.de>
 
        PR middle-end/89223
diff --git a/gcc/testsuite/g++.dg/ubsan/pr89234.C b/gcc/testsuite/g++.dg/ubsan/pr89234.C
new file mode 100644 (file)
index 0000000..af1526c
--- /dev/null
@@ -0,0 +1,11 @@
+// PR rtl-optimization/89234
+// { dg-do compile { target dfp } }
+// { dg-options "-O2 -fnon-call-exceptions -fsanitize=null" }
+
+typedef float __attribute__((mode (SD))) _Decimal32;
+
+void
+foo (_Decimal32 *b, _Decimal32 c)
+{
+  *b = c + 1.5;
+}