From: Peter Bergner Date: Wed, 12 Dec 2018 17:20:41 +0000 (+0000) Subject: backport: re PR target/87496 (ICE in aggregate_value_p at gcc/function.c:2046) X-Git-Tag: releases/gcc-7.5.0~728 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3054517e78f28e0eb09d52a1ffd47330fbfb2712;p=thirdparty%2Fgcc.git backport: re PR target/87496 (ICE in aggregate_value_p at gcc/function.c:2046) gcc/ Backport from mainline 2018-12-07 Peter Bergner PR target/87496 * config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow -mabi=ieeelongdouble and -mabi=ibmlongdouble without -mlong-double-128. Do not error for -mabi=ibmlongdouble and no ISA 2.06 support. * doc/invoke.texi: Document -mabi=ibmlongdouble and -mabi=ieeelongdouble require -mlong-double-128. gcc/testsuite/ Backport from mainline 2018-12-07 Peter Bergner PR target/87496 * gcc.target/powerpc/pr87496-1.c: New test. * gcc.target/powerpc/pr87496-2.c: New test. * gcc.target/powerpc/pr87496-3.c: New test. From-SVN: r267062 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ed2eb58e847..deffd65cc604 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2018-12-12 Peter Bergner + + Backport from mainline + 2018-12-07 Peter Bergner + + PR target/87496 + * config/rs6000/rs6000.c (rs6000_option_override_internal): Disallow + -mabi=ieeelongdouble and -mabi=ibmlongdouble without -mlong-double-128. + Do not error for -mabi=ibmlongdouble and no ISA 2.06 support. + * doc/invoke.texi: Document -mabi=ibmlongdouble and -mabi=ieeelongdouble + require -mlong-double-128. + 2018-12-06 Richard Biener * BASE-VER: Increment to 7.4.1. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index d377e2429135..68dd95429fe6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -4829,6 +4829,13 @@ rs6000_option_override_internal (bool global_init_p) else rs6000_long_double_type_size = RS6000_DEFAULT_LONG_DOUBLE_SIZE; } + else if (global_options_set.x_rs6000_ieeequad) + { + if (global_options.x_rs6000_ieeequad) + error ("%qs requires %qs", "-mabi=ieeelongdouble", "-mlong-double-128"); + else + error ("%qs requires %qs", "-mabi=ibmlongdouble", "-mlong-double-128"); + } /* Set -mabi=ieeelongdouble on some old targets. Note, AIX and Darwin explicitly redefine TARGET_IEEEQUAD to 0, so those systems will not @@ -4838,6 +4845,11 @@ rs6000_option_override_internal (bool global_init_p) rs6000_ieeequad = 1; #endif + if (global_options_set.x_rs6000_ieeequad + && global_options.x_rs6000_ieeequad + && (!TARGET_POPCNTD || !TARGET_VSX)) + error ("%qs requires full ISA 2.06 support", "-mabi=ieeelongdouble"); + /* Enable the default support for IEEE 128-bit floating point on Linux VSX sytems, but don't enable the __float128 keyword. */ if (TARGET_VSX && TARGET_LONG_DOUBLE_128 diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5f4fbf91c5bf..09a9b077212b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -21937,12 +21937,14 @@ Disable Book-E SPE ABI extensions for the current ABI@. @item -mabi=ibmlongdouble @opindex mabi=ibmlongdouble Change the current ABI to use IBM extended-precision long double. -This is a PowerPC 32-bit SYSV ABI option. +This is a PowerPC 32-bit SYSV ABI option. Requires @option{-mlong-double-128} +to be enabled. @item -mabi=ieeelongdouble @opindex mabi=ieeelongdouble Change the current ABI to use IEEE extended-precision long double. -This is a PowerPC 32-bit Linux ABI option. +This is a PowerPC 32-bit Linux ABI option. Requires @option{-mlong-double-128} +to be enabled. @item -mabi=elfv1 @opindex mabi=elfv1 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a244a4ff8ae3..c63a9cce9f02 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2018-12-12 Peter Bergner + + Backport from mainline + 2018-12-07 Peter Bergner + + PR target/87496 + * gcc.target/powerpc/pr87496-1.c: New test. + * gcc.target/powerpc/pr87496-2.c: New test. + * gcc.target/powerpc/pr87496-3.c: New test. + 2018-12-11 Steven G. Kargl PR fortran/88155 diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-1.c b/gcc/testsuite/gcc.target/powerpc/pr87496-1.c new file mode 100644 index 000000000000..691e440bcf7d --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr87496-1.c @@ -0,0 +1,11 @@ +/* PR target/87496 */ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ +/* { dg-require-effective-target longdouble128 } */ +/* { dg-options "-O2 -mcpu=power7 -mabi=ieeelongdouble -mno-popcntd -Wno-psabi" } */ + +int i; + +/* { dg-error "'-mabi=ieeelongdouble' requires full ISA 2.06 support" "PR87496" { target *-*-* } 0 } */ +/* { dg-warning "using IEEE extended precision long double" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-2.c b/gcc/testsuite/gcc.target/powerpc/pr87496-2.c new file mode 100644 index 000000000000..b3e2f01e3b5b --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr87496-2.c @@ -0,0 +1,10 @@ +/* PR target/87496 */ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } } */ +/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ +/* { dg-options "-O2 -mcpu=power7 -mabi=ieeelongdouble -mlong-double-64 -Wno-psabi" } */ + +int i; + +/* { dg-error "'-mabi=ieeelongdouble' requires '-mlong-double-128'" "PR87496" { target *-*-* } 0 } */ +/* { dg-warning "using IEEE extended precision long double" "" { target *-*-* } 0 } */ diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-3.c b/gcc/testsuite/gcc.target/powerpc/pr87496-3.c new file mode 100644 index 000000000000..207680ee17ab --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr87496-3.c @@ -0,0 +1,9 @@ +/* PR target/87496 */ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } } */ +/* { dg-options "-O2 -mabi=ibmlongdouble -mlong-double-64 -Wno-psabi" } */ + +int i; + +/* { dg-error "'-mabi=ibmlongdouble' requires '-mlong-double-128'" "PR87496" { target *-*-* } 0 } */ +/* { dg-warning "using IBM extended precision long double" "" { target *-*-* } 0 } */