On Tue, Aug 22, 2017 at 4:00 AM, Daniel Santos <daniel.san...@pobox.com> wrote: > 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 <daniel.san...@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.san...@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.
OK. Thanks, Uros. > Thanks, > Daniel > > Signed-off-by: Daniel Santos <daniel.san...@pobox.com> > --- > 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 >