This patch fixes a testsuite problem after my recent patch to be
more picky about -mlong* options.

Tested on mips64-linux-gnu and applied.

Richard



gcc/testsuite/
        PR target/50579
        * gcc.target/mips/mips.exp (mips_long32_abi_p, mips_long64_abi_p):
        New procedures.
        (mips-dg-options): Force an ABI option if the current ABI is
        incompatible with the required -mlong setting.  Likewise force
        a long setting if the current one is incompatible with the
        chosen ABI.  Keep abi_test_option_p, abi and eabi_p updated
        throughout procedure.
        * gcc.target/mips/abi-o64-long64.c: Require -mno-abicalls
        instead of addressing=absolute.

Index: gcc/testsuite/gcc.target/mips/mips.exp
===================================================================
--- gcc/testsuite/gcc.target/mips/mips.exp      2011-10-02 18:59:22.000000000 
+0100
+++ gcc/testsuite/gcc.target/mips/mips.exp      2011-10-02 19:21:37.000000000 
+0100
@@ -588,6 +588,30 @@ proc mips_64bit_abi_p { option } {
     return 0
 }
 
+# Return true if the given abi-group option implicitly requires -mlong32.
+# o64 requires this for -mabicalls, but not otherwise; pick the conservative
+# case for simplicity.
+proc mips_long32_abi_p { option } {
+    switch -glob -- $option {
+       -mabi=o64 -
+       -mabi=n32 -
+       -mabi=32 {
+           return 1
+       }
+    }
+    return 0
+}
+
+# Return true if the given abi-group option implicitly requires -mlong64.
+proc mips_long64_abi_p { option } {
+    switch -glob -- $option {
+       -mabi=64 {
+           return 1
+       }
+    }
+    return 0
+}
+
 # Check whether the current target supports all the options that the
 # current test requires.  Return "" if so, otherwise return one of
 # the incompatible options.  UPSTATUS describes the option status.
@@ -1029,24 +1053,41 @@ proc mips-dg-options { args } {
            # -mips16 -mhard-float requires o32 or o64.
            # -mips16 PIC requires o32 or o64.
            set force_abi 1
+       } elseif { [mips_have_test_option_p options "-mlong32"]
+                  && [mips_long64_abi_p $abi] } {
+           set force_abi 1
+       } elseif { [mips_have_test_option_p options "-mlong64"]
+                  && [mips_long32_abi_p $abi] } {
+           set force_abi 1
        } else {
            set force_abi 0
        }
        if { $gp_size == 32 } {
            if { $force_abi || [mips_64bit_abi_p $abi] } {
-               mips_make_test_option options "-mabi=32"
+               if { [mips_have_test_option_p options "-mlong64"] } {
+                   mips_make_test_option options "-mabi=eabi"
+                   mips_make_test_option options "-mgp32"
+               } else {
+                   mips_make_test_option options "-mabi=32"
+               }
            }
        } else {
            if { $force_abi || [mips_32bit_abi_p $abi] } {
-               # All configurations should have an assembler that
-               # supports o64, since it requires the same BFD target
-               # vector as o32.  In contrast, many assembler
-               # configurations do not have n32 or n64 support.
-               mips_make_test_option options "-mabi=o64"
+               if { [mips_have_test_option_p options "-mlong64"] } {
+                   mips_make_test_option options "-mabi=eabi"
+                   mips_make_test_option options "-mgp64"
+               } else {
+                   # All configurations should have an assembler that
+                   # supports o64, since it requires the same BFD target
+                   # vector as o32.  In contrast, many assembler
+                   # configurations do not have n32 or n64 support.
+                   mips_make_test_option options "-mabi=o64"
+               }
            }
        }
-       unset abi
-       unset eabi_p
+       set abi_test_option_p [mips_test_option_p options abi]
+       set abi [mips_option options abi]
+       set eabi_p [mips_same_option_p $abi "-mabi=eabi"]
     }
 
     # Handle dependencies between the abi options and the post-abi options.
@@ -1070,8 +1111,11 @@ proc mips-dg-options { args } {
                mips_make_test_option options "-mno-mips16"
            }
        }
-       unset abi
-       unset eabi_p
+       if { [mips_long32_abi_p $abi] } {
+           mips_make_test_option options "-mlong32"
+       } elseif { [mips_long64_abi_p $abi] } {
+           mips_make_test_option options "-mlong64"
+       }
     }
 
     # Handle dependencies between the arch option and the post-arch options.
Index: gcc/testsuite/gcc.target/mips/abi-o64-long64.c
===================================================================
--- gcc/testsuite/gcc.target/mips/abi-o64-long64.c      2011-10-02 
19:25:08.000000000 +0100
+++ gcc/testsuite/gcc.target/mips/abi-o64-long64.c      2011-10-02 
19:25:13.000000000 +0100
@@ -1,2 +1,2 @@
-/* { dg-options "-mabi=o64 -mlong64 addressing=absolute -O2" } */
+/* { dg-options "-mabi=o64 -mlong64 -mno-abicalls -O2" } */
 #include "abi-main.h"

Reply via email to