From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 48971 invoked by alias); 22 Aug 2017 01:54:57 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 48800 invoked by uid 89); 22 Aug 2017 01:54:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_MANYTO,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:4995 X-HELO: sasl.smtp.pobox.com Received: from pb-smtp2.pobox.com (HELO sasl.smtp.pobox.com) (64.147.108.71) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 22 Aug 2017 01:54:52 +0000 Received: from sasl.smtp.pobox.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id C0B34966DF; Mon, 21 Aug 2017 21:54:48 -0400 (EDT) Received: from pb-smtp2.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp2.pobox.com (Postfix) with ESMTP id B8CA8966DE; Mon, 21 Aug 2017 21:54:48 -0400 (EDT) Received: from loudmouth.attlocal.net (unknown [76.215.41.237]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by pb-smtp2.pobox.com (Postfix) with ESMTPSA id AF4C2966DC; Mon, 21 Aug 2017 21:54:47 -0400 (EDT) From: Daniel Santos To: gcc-patches , Uros Bizjak , "H . J . Lu" , Jan Hubicka , Rainer Orth , Mike Stump Subject: [PATCH] [i386, testsuite] [PR 71958] Error on -mx32 with -mabi=ms Date: Tue, 22 Aug 2017 06:16:00 -0000 Message-Id: <20170822020034.6356-1-daniel.santos@pobox.com> X-Pobox-Relay-ID: E0DAFC1E-86DC-11E7-ABDC-9D2B0D78B957-06139138!pb-smtp2.pobox.com X-IsSubscribed: yes X-SW-Source: 2017-08/txt/msg01234.txt.bz2 We currently error when -mx32 and -mabi=sysv and we encounter a function with attribute ms_abi, but we are not erroring on -mx32 and -mabi=ms (either explicitly or when it is the default on Windows). In fact, it generates code that runs, but is of an undfined ABI. I'm also changing pr64409.c because if you explicitly supply -m64, then the test became ineffective. This is because the -mx32 parameter passed in dg-options is later overridden by the explicit -m64 parameter. I've bootstrapped and tested on * an x86_64-pc-linux-gnux32 system building gcc with --with-abi=mx32, * a "normal" x86_64-pc-linux-gnu testing with --target_board=unix/\{,-m32\}, and * on Windows. OK for trunk? gcc/ChangeLog: 2017-08-11 Daniel Santos * 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 * 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. Thanks, Daniel Signed-off-by: Daniel Santos --- gcc/config/i386/i386.c | 12 ++++++++++-- gcc/testsuite/gcc.target/i386/pr46470.c | 2 +- gcc/testsuite/gcc.target/i386/pr64409.c | 2 +- gcc/testsuite/gcc.target/i386/pr66275.c | 2 +- gcc/testsuite/gcc.target/i386/pr68018.c | 2 +- gcc/testsuite/gcc.target/i386/pr71958.c | 7 +++++++ 6 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr71958.c diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1d88e4f247a..3b537f2608f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -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; } diff --git a/gcc/testsuite/gcc.target/i386/pr46470.c b/gcc/testsuite/gcc.target/i386/pr46470.c index 9e8e731188e..c66a378a1ad 100644 --- a/gcc/testsuite/gcc.target/i386/pr46470.c +++ b/gcc/testsuite/gcc.target/i386/pr46470.c @@ -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 diff --git a/gcc/testsuite/gcc.target/i386/pr64409.c b/gcc/testsuite/gcc.target/i386/pr64409.c index 917472653f4..7bf9d1e398d 100644 --- a/gcc/testsuite/gcc.target/i386/pr64409.c +++ b/gcc/testsuite/gcc.target/i386/pr64409.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! ia32 } } } */ +/* { dg-do compile { target x32 } } */ /* { dg-require-effective-target maybe_x32 } */ /* { dg-options "-O0 -mx32" } */ diff --git a/gcc/testsuite/gcc.target/i386/pr66275.c b/gcc/testsuite/gcc.target/i386/pr66275.c index b8759aeb5ec..51ae1f6859c 100644 --- a/gcc/testsuite/gcc.target/i386/pr66275.c +++ b/gcc/testsuite/gcc.target/i386/pr66275.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { *-*-linux* && { ! ia32 } } } } */ +/* { dg-do compile { target { *-*-linux* && lp64 } } } */ /* { dg-options "-mabi=ms -fdump-rtl-dfinit" } */ void diff --git a/gcc/testsuite/gcc.target/i386/pr68018.c b/gcc/testsuite/gcc.target/i386/pr68018.c index a0fa21e0b00..04929c6c13c 100644 --- a/gcc/testsuite/gcc.target/i386/pr68018.c +++ b/gcc/testsuite/gcc.target/i386/pr68018.c @@ -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 index 00000000000..c5a109767c1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr71958.c @@ -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 () +{ +} -- 2.13.3