]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR middle-end/48722 (ICE in df_refs_verify() with -mno-push-args)
authorJakub Jelinek <jakub@redhat.com>
Mon, 29 Aug 2011 11:52:22 +0000 (13:52 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 29 Aug 2011 11:52:22 +0000 (13:52 +0200)
PR middle-end/48722
* emit-rtl.c (unshare_all_rtl_again): For CALL_INSNs,
reset_used_flags also in CALL_INSN_FUNCTION_USAGE.
(verify_rtl_sharing): Likewise and verify_rtx_sharing
in there too.
(unshare_all_rtl_in_chain): For CALL_INSNs
copy_rtx_if_shared also CALL_INSN_FUNCTION_USAGE.

* gcc.target/i386/pr48722.c: New test.

From-SVN: r178208

gcc/ChangeLog
gcc/emit-rtl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr48722.c [new file with mode: 0644]

index 7ac65284267979ed480604781ec5d845b6032dd0..7a35deb088f6df8a9b1798e98497a8d3ae589702 100644 (file)
@@ -1,3 +1,13 @@
+2011-08-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/48722
+       * emit-rtl.c (unshare_all_rtl_again): For CALL_INSNs,
+       reset_used_flags also in CALL_INSN_FUNCTION_USAGE.
+       (verify_rtl_sharing): Likewise and verify_rtx_sharing
+       in there too.
+       (unshare_all_rtl_in_chain): For CALL_INSNs
+       copy_rtx_if_shared also CALL_INSN_FUNCTION_USAGE.
+
 2011-08-29  Richard Guenther  <rguenther@suse.de>
 
        * gimple-fold.c (gimple_fold_stmt_to_constant_1): Set a location
index b97d7c47a0bbbb071e582d7bf2fa9ca219937e9d..c94e7438c916c21868334a2f7cf938ea5ac07ccd 100644 (file)
@@ -2444,6 +2444,8 @@ unshare_all_rtl_again (rtx insn)
       {
        reset_used_flags (PATTERN (p));
        reset_used_flags (REG_NOTES (p));
+       if (CALL_P (p))
+         reset_used_flags (CALL_INSN_FUNCTION_USAGE (p));
       }
 
   /* Make sure that virtual stack slots are not shared.  */
@@ -2611,6 +2613,8 @@ verify_rtl_sharing (void)
       {
        reset_used_flags (PATTERN (p));
        reset_used_flags (REG_NOTES (p));
+       if (CALL_P (p))
+         reset_used_flags (CALL_INSN_FUNCTION_USAGE (p));
        if (GET_CODE (PATTERN (p)) == SEQUENCE)
          {
            int i;
@@ -2622,6 +2626,8 @@ verify_rtl_sharing (void)
                gcc_assert (INSN_P (q));
                reset_used_flags (PATTERN (q));
                reset_used_flags (REG_NOTES (q));
+               if (CALL_P (q))
+                 reset_used_flags (CALL_INSN_FUNCTION_USAGE (q));
              }
          }
       }
@@ -2631,6 +2637,8 @@ verify_rtl_sharing (void)
       {
        verify_rtx_sharing (PATTERN (p), p);
        verify_rtx_sharing (REG_NOTES (p), p);
+       if (CALL_P (p))
+         verify_rtx_sharing (CALL_INSN_FUNCTION_USAGE (p), p);
       }
 
   timevar_pop (TV_VERIFY_RTL_SHARING);
@@ -2647,6 +2655,9 @@ unshare_all_rtl_in_chain (rtx insn)
       {
        PATTERN (insn) = copy_rtx_if_shared (PATTERN (insn));
        REG_NOTES (insn) = copy_rtx_if_shared (REG_NOTES (insn));
+       if (CALL_P (insn))
+         CALL_INSN_FUNCTION_USAGE (insn)
+           = copy_rtx_if_shared (CALL_INSN_FUNCTION_USAGE (insn));
       }
 }
 
index 7c6f93f4080601bcb3ab5df546513e03fc0a9d56..238fc80d200bad572d0935a2d1b31d1708129971 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/48722
+       * gcc.target/i386/pr48722.c: New test.
+
 2011-08-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR libfortran/50192
diff --git a/gcc/testsuite/gcc.target/i386/pr48722.c b/gcc/testsuite/gcc.target/i386/pr48722.c
new file mode 100644 (file)
index 0000000..a35fe7e
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR middle-end/48722 */
+/* { dg-do compile } */
+/* { dg-options "-Os -mno-push-args" } */
+
+extern long long a;
+extern int b;
+void bar (int, long long);
+
+void
+foo (void)
+{
+  bar (a > 0x85, b);
+}