re PR target/31568 (ICE with invalid %y operand (inline-asm))
authorAndrew Pinski <andrew_pinski@playstation.sony.com>
Tue, 15 Jul 2008 12:52:56 +0000 (12:52 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Tue, 15 Jul 2008 12:52:56 +0000 (05:52 -0700)
2008-07-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR target/31568
        * config/rs6000/rs6000.c (print_operand <case 'y'>): Don't use
        gcc_assert, instead call output_operand_lossage.

2008-07-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR target/31568
        * gcc.target/powerpc/asm-y.c: New testcase.

From-SVN: r137837

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/asm-y.c [new file with mode: 0644]

index 78c6f4388c74f8a75a05d37a9cfbe6da5787356d..e0ce324800ff473d51b2dfbd7e89b1b62a8db7bd 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR target/31568
+       * config/rs6000/rs6000.c (print_operand <case 'y'>): Don't use
+       gcc_assert, instead call output_operand_lossage.
+
 2008-07-15  Kai Tietz  <kai.tietz@onevision.com>
 
        * builtins.c (std_canonical_va_list): Treat structure based
index 214b6922b5cbc4a693266a0f6ddae42734f387a4..57e8d5a874d2b914682b70a4bda05d5cc500da52 100644 (file)
@@ -12288,9 +12288,13 @@ print_operand (FILE *file, rtx x, int code)
          fprintf (file, "0,%s", reg_names[REGNO (tmp)]);
        else
          {
-           gcc_assert (GET_CODE (tmp) == PLUS
-                       && REG_P (XEXP (tmp, 0))
-                       && REG_P (XEXP (tmp, 1)));
+           if (!GET_CODE (tmp) == PLUS
+               || !REG_P (XEXP (tmp, 0))
+               || !REG_P (XEXP (tmp, 1)))
+             {
+               output_operand_lossage ("invalid %%y value, try using the 'Z' constraint");
+               break;
+             }
 
            if (REGNO (XEXP (tmp, 0)) == 0)
              fprintf (file, "%s,%s", reg_names[ REGNO (XEXP (tmp, 1)) ],
index 3e7162570e176d6e41742d10e14867c99f7bfcfb..4526d9fcb83c58fe4e57c581cc3904b260ddcda0 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-15  Andrew Pinski  <andrew_pinski@playstation.sony.com>
+
+       PR target/31568
+       * gcc.target/powerpc/asm-y.c: New testcase.
+
 2008-07-14  Eric Botcazou  <ebotcazou@adacore.com>
 
        * case_optimization1.ad[sb]: New test.
diff --git a/gcc/testsuite/gcc.target/powerpc/asm-y.c b/gcc/testsuite/gcc.target/powerpc/asm-y.c
new file mode 100644 (file)
index 0000000..7d5a6a6
--- /dev/null
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+/* Test that %yN does not cause an internal error if used incorrectly.  */
+
+int f(int *a)
+{
+  asm ("#%y0" : "=m"(a[2])); /* { dg-error "try using the 'Z' constraint" } */
+  asm ("#%y0" : "=m"(a[1])); /* { dg-error "try using the 'Z' constraint" } */
+  asm ("#%y0" : "=m"(a[0]));
+}