On Thu, Jul 21, 2011 at 5:36 PM, H.J. Lu <hjl.to...@gmail.com> wrote: > On Thu, Jul 21, 2011 at 4:51 PM, Richard Henderson <r...@redhat.com> wrote: >> On 07/21/2011 04:28 PM, H.J. Lu wrote: >>> On Thu, Jul 21, 2011 at 3:05 PM, Richard Henderson <r...@redhat.com> wrote: >>>> On 07/21/2011 03:02 PM, H.J. Lu wrote: >>>>> * config/i386/i386.c (function_value_64): Always return pointers >>>>> in Pmode. >>>>> (ix86_promote_function_mode): New. >>>>> (TARGET_PROMOTE_FUNCTION_MODE): Likewise. >>>> >>>> Much better, thanks. >>>> >>>> >>>> r~ >>>> >>> >>> Also need this patch. Otherwise, I got >>> >>> FAIL: gcc.target/x86_64/abi/callabi/func-indirect-2a.c (internal compiler >>> error) >>> FAIL: gcc.target/x86_64/abi/callabi/func-indirect-2a.c (test for excess >>> errors) >>> FAIL: gcc.target/x86_64/abi/callabi/func-indirect-2b.c (internal compiler >>> error) >>> FAIL: gcc.target/x86_64/abi/callabi/func-indirect-2b.c (test for excess >>> errors) >>> >>> OK for trunk? >> >> Hmm. Should we even be running ms_64 callabi tests across pointer sizes >> though? >> > > Good question. I can disable the test. But compiler will still ICE on this > input. > >
How about this patch? OK for trunk? Thanks. -- H.J. --- gcc/ 2011-07-21 H.J. Lu <hongjiu...@intel.com> * config/i386/i386.c (ix86_option_override_internal): Disallow MS ABI in x32 mode. (ix86_init_builtins): Call ix86_init_builtins_va_builtins_abi only for TARGET_LP64. (ix86_handle_abi_attribute): Check TARGET_LP64 instead of TARGET_64BIT. gcc/testsuite/ 2011-07-21 H.J. Lu <hongjiu...@intel.com> * gcc.target/x86_64/abi/callabi/callabi.exp: Check ilp32 instead of ia32. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 9e3532e..6e030d9 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -3133,6 +3133,9 @@ ix86_option_override_internal (bool main_args_p) if (!global_options_set.x_ix86_abi) ix86_abi = DEFAULT_ABI; + if (ix86_abi == MS_ABI && TARGET_X32) + error ("MS ABI not supported in x32 mode"); + if (global_options_set.x_ix86_cmodel) { switch (ix86_cmodel) @@ -25520,7 +25523,7 @@ ix86_init_builtins (void) ix86_init_mmx_sse_builtins (); - if (TARGET_64BIT) + if (TARGET_LP64) ix86_init_builtins_va_builtins_abi (); #ifdef SUBTARGET_INIT_BUILTINS @@ -29340,7 +29343,7 @@ ix86_handle_abi_attribute (tree *node, tree name, *no_add_attrs = true; return NULL_TREE; } - if (!TARGET_64BIT) + if (!TARGET_LP64) { warning (OPT_Wattributes, "%qE attribute only available for 64-bit", name); diff --git a/gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp b/gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp index b0cba17..e76d0c1 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp +++ b/gcc/testsuite/gcc.target/x86_64/abi/callabi/callabi.exp @@ -20,7 +20,7 @@ load_lib gcc-dg.exp if { (![istarget x86_64-*-*] && ![istarget i?86-*-*]) - || [is-effective-target ia32] } then { + || [is-effective-target ilp32] } then { return }