i386.c (print_reg): Warn for values of unsupported size in integer register.
authorUros Bizjak <ubizjak@gmail.com>
Wed, 1 Mar 2017 19:24:53 +0000 (20:24 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 1 Mar 2017 19:24:53 +0000 (20:24 +0100)
* config/i386/i386.c (print_reg): Warn for values of
unsupported size in integer register.

testsuite/ChangeLog:

* gcc.target/i386/invsize-2.c: New test.
* gcc.target/i386/invsize-3.c: Ditto.
* gcc.target/i386/invsize-4.c: Ditto.
* gcc.target/i386/pr66274.c: Expect "unsuported size" warning.
* gcc.target/i386/stackalign/asm-1.c: Ditto.

From-SVN: r245815

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/invsize-1.c
gcc/testsuite/gcc.target/i386/invsize-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/invsize-3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/invsize-4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr66274.c
gcc/testsuite/gcc.target/i386/stackalign/asm-1.c

index c4f879818a4cf2dd64d69dffc60e2d6a109bf813..d791c18247b9b353af9aa4b35435742684b30064 100644 (file)
@@ -1,3 +1,8 @@
+2017-03-01  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/i386/i386.c (print_reg): Warn for values of
+       unsupported size in integer register.
+
 2017-03-01  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        PR target/79439
index 2b11aa1c37d08cffd755537c5fafb1020313c617..754c016f13997beaccccd5896ada075fe3a48322 100644 (file)
@@ -17646,13 +17646,16 @@ print_reg (rtx x, int code, FILE *file)
 
   switch (msize)
     {
+    case 16:
+    case 12:
     case 8:
+      if (GENERAL_REGNO_P (regno) && msize > GET_MODE_SIZE (word_mode))
+       warning (0, "unsupported size for integer register");
+      /* FALLTHRU */
     case 4:
       if (LEGACY_INT_REGNO_P (regno))
-       putc (msize == 8 && TARGET_64BIT ? 'r' : 'e', file);
+       putc (msize > 4 && TARGET_64BIT ? 'r' : 'e', file);
       /* FALLTHRU */
-    case 16:
-    case 12:
     case 2:
     normal:
       reg = hi_reg_name[regno];
@@ -17661,7 +17664,7 @@ print_reg (rtx x, int code, FILE *file)
       if (regno >= ARRAY_SIZE (qi_reg_name))
        goto normal;
       if (!ANY_QI_REGNO_P (regno))
-       error ("unsupported size for integer register in 32-bit mode");
+       error ("unsupported size for integer register");
       reg = qi_reg_name[regno];
       break;
     case 0:
index b3ba66bc7c9cc6564b296aa5c606a938d0732487..2b73362781cc947596aac92afae09df2fab4ac23 100644 (file)
@@ -1,3 +1,11 @@
+2017-03-01  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.target/i386/invsize-2.c: New test.
+       * gcc.target/i386/invsize-3.c: Ditto.
+       * gcc.target/i386/invsize-4.c: Ditto.
+       * gcc.target/i386/pr66274.c: Expect "unsuported size" warning.
+       * gcc.target/i386/stackalign/asm-1.c: Ditto.
+
 2017-03-01  Michael Meissner  <meissner@linux.vnet.ibm.com>
 
        PR target/79439
index f7e59211f65a79bb940b520f2736c882d2073e4a..eefa5fada3d25d69739c579801a35f255cddf271 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-do compile { target ia32 } } */
+/* { dg-options "" } */
 
 void foo (char x)
 {
diff --git a/gcc/testsuite/gcc.target/i386/invsize-2.c b/gcc/testsuite/gcc.target/i386/invsize-2.c
new file mode 100644 (file)
index 0000000..7a9825a
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile { target ia32 } } */
+/* { dg-options "" } */
+
+void foo (long long x)
+{
+  __asm__ volatile ("# %0" : : "r" (x));
+} /* { dg-warning "unsupported size" }  */
diff --git a/gcc/testsuite/gcc.target/i386/invsize-3.c b/gcc/testsuite/gcc.target/i386/invsize-3.c
new file mode 100644 (file)
index 0000000..bd23353
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void foo (long double x)
+{
+  __asm__ volatile ("# %0" : : "r" (x));
+} /* { dg-warning "unsupported size" }  */
diff --git a/gcc/testsuite/gcc.target/i386/invsize-4.c b/gcc/testsuite/gcc.target/i386/invsize-4.c
new file mode 100644 (file)
index 0000000..d4a6d46
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile { target int128 } } */
+/* { dg-options "" } */
+
+void foo (__int128 x)
+{
+  __asm__ volatile ("# %0" : : "r" (x));
+} /* { dg-warning "unsupported size" }  */
index 59969eb9037d31b1707c728f52a1e10c30bf4f5c..caf0d34cd9ce4f78b4dd65961f109ee9dcdf8b9c 100644 (file)
@@ -3,7 +3,7 @@
 
 void f()
 {
-  asm ("push %0" : : "r" ((unsigned long long) 456));
-}
+  asm ("push %0" : : "r" ((unsigned long long) 456 >> 32));
+} /* { dg-warning "unsupported size" }  */
 
-/* { dg-final { scan-assembler-not "push %r" } } */
+/* { dg-final { scan-assembler-not "push\[ \t]+%r" } } */
index 126a2b8a01d892b5bd19db902a48d25381477f7b..e5ea06df8194dcaf7811f1ab9b9e85f9c24633b5 100644 (file)
@@ -4,4 +4,4 @@
 
 /* This case is to detect a compile time regression introduced in stack
    branch development. */
-void f(){asm("%0"::"r"(1.5F));}void g(){asm("%0"::"r"(1.5));}
+void f(){asm("%0"::"r"(1.5F));}void g(){asm("%0"::"r"(1.5));} /* { dg-warning "unsupported size" }  */