PR target/71958: Error on -mx32 with -mabi=ms
authorDaniel Santos <daniel.santos@pobox.com>
Tue, 22 Aug 2017 17:59:24 +0000 (17:59 +0000)
committerDaniel Santos <dansan@gcc.gnu.org>
Tue, 22 Aug 2017 17:59:24 +0000 (17:59 +0000)
gcc/ChangeLog:
2017-08-11  Daniel Santos  <daniel.santos@pobox.com>

* config/i386/i386.c (ix86_option_override_internal): Error when
-mx32 is combined with -mabi=ms.
(ix86_function_type_abi): Limit errors for mixing -mx32 with
attribute ms_abi.

gcc/testsuite/ChangeLog:
2017-08-11  Daniel Santos  <daniel.santos@pobox.com>

* gcc.target/i386/pr71958.c: New test to verify error on -mx32
and -mabi=ms
  * gcc.target/i386/pr64409.c: Modify to only run on x32.
* gcc.target/i386/pr46470.c: Modify to skip x32 target.
  * gcc.target/i386/pr66275.c: Likewise.
  * gcc.target/i386/pr68018.c: Likewise.

From-SVN: r251287

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr46470.c
gcc/testsuite/gcc.target/i386/pr64409.c
gcc/testsuite/gcc.target/i386/pr66275.c
gcc/testsuite/gcc.target/i386/pr68018.c
gcc/testsuite/gcc.target/i386/pr71958.c [new file with mode: 0644]

index e7681ce860a792451fe02d5bf384757cace21ae9..8a9da80b7e9d34b85b0c20f79b21d2dab7131d8d 100644 (file)
@@ -1,3 +1,10 @@
+2017-08-22  Daniel Santos  <daniel.santos@pobox.com>
+
+       * config/i386/i386.c (ix86_option_override_internal): Error when -mx32
+       is combined with -mabi=ms.
+       (ix86_function_type_abi): Limit errors for mixing -mx32 with attribute
+       ms_abi.
+
 2017-08-22  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
        PR tree-optimization/81488
index 3c82ae64f4f2086fb7cacbb8ec6bf3f6db2a65c8..650bcbc65ae92801c50610e2b733bda2201c1ba7 100644 (file)
@@ -5684,6 +5684,10 @@ ix86_option_override_internal (bool main_args_p,
   if (!opts_set->x_ix86_abi)
     opts->x_ix86_abi = DEFAULT_ABI;
 
+  if (opts->x_ix86_abi == MS_ABI && TARGET_X32_P (opts->x_ix86_isa_flags))
+    error ("-mabi=ms not supported with X32 ABI");
+  gcc_assert (opts->x_ix86_abi == SYSV_ABI || opts->x_ix86_abi == MS_ABI);
+
   /* For targets using ms ABI enable ms-extensions, if not
      explicit turned off.  For non-ms ABI we turn off this
      option.  */
@@ -8777,8 +8781,12 @@ ix86_function_type_abi (const_tree fntype)
   if (abi == SYSV_ABI
       && lookup_attribute ("ms_abi", TYPE_ATTRIBUTES (fntype)))
     {
-      if (TARGET_X32)
-       error ("X32 does not support ms_abi attribute");
+      static int warned;
+      if (TARGET_X32 && !warned)
+       {
+         error ("X32 does not support ms_abi attribute");
+         warned = 1;
+       }
 
       abi = MS_ABI;
     }
index 45a2ac0abf7be007283c5beeece37305898014a1..fe394556efe58964ae1d5559582b8c9c1e684b85 100644 (file)
@@ -1,3 +1,12 @@
+2017-08-22  Daniel Santos  <daniel.santos@pobox.com>
+
+       * gcc.target/i386/pr71958.c: New test to verify error on -mx32 and
+       -mabi=ms
+       * gcc.target/i386/pr64409.c: Modify to only run on x32.
+       * gcc.target/i386/pr46470.c: Modify to skip x32 target.
+       * gcc.target/i386/pr66275.c: Likewise.
+       * gcc.target/i386/pr68018.c: Likewise.
+
 2017-08-22  Will Schmidt  <will_schmidt@vnet.ibm.com>
 
        * gcc.target/powerpc/fold-vec-sums-int.c: New.
index 9e8e731188e5bc421c8cc9e5894afe027cfc269f..c66a378a1ad91ecf0465f5ca9931154e9dee93d9 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile } */
+/* { dg-do compile { target { ! x32 } } } */
 /* The pic register save adds unavoidable stack pointer references.  */
 /* { dg-skip-if "" { ia32 && { ! nonpic } } } */
 /* These options are selected to ensure 1 word needs to be allocated
index 917472653f47d7207258dba83b53d635107d544b..7bf9d1e398d2aa0f4ee8f0b4b402a2d82f4e8abe 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-do compile { target x32 } } */
 /* { dg-require-effective-target maybe_x32 } */
 /* { dg-options "-O0 -mx32" } */
 
index b8759aeb5ec36de4abbddf574cbec9a3fe2a8a00..51ae1f6859c37de48f61f0722a05d8db41ae10fd 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-do compile { target { *-*-linux* && lp64 } } } */
 /* { dg-options "-mabi=ms -fdump-rtl-dfinit" } */
 
 void
index a0fa21e0b00b145937423461285cb87860a93973..04929c6c13c2a2a111969d02f4ffc60a0c279545 100644 (file)
@@ -1,4 +1,4 @@
-/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */
+/* { dg-do compile { target { *-*-linux* && lp64 } } } */
 /* { dg-options "-O -mabi=ms -mstackrealign" } */
 
 typedef float V __attribute__ ((vector_size (16)));
diff --git a/gcc/testsuite/gcc.target/i386/pr71958.c b/gcc/testsuite/gcc.target/i386/pr71958.c
new file mode 100644 (file)
index 0000000..c5a1097
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile { target { x32 } } } */
+/* { dg-options "-mabi=ms" } */
+/* { dg-error "-mabi=ms not supported with X32 ABI" "" { target *-*-* } 0 } */
+
+void main ()
+{
+}