From: Eric Botcazou Date: Tue, 7 Oct 2014 07:56:43 +0000 (+0000) Subject: lto-opts.c (lto_write_options): Handle -fmath-errno, -fsigned-zeros and -ftrapping... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a35c1ac710c0bbd03f00380179a375c45c81f08a;p=gcc.git lto-opts.c (lto_write_options): Handle -fmath-errno, -fsigned-zeros and -ftrapping-math. * lto-opts.c (lto_write_options): Handle -fmath-errno, -fsigned-zeros and -ftrapping-math. * lto-wrapper.c (merge_and_complain): Likewise. (run_gcc): Likewise. From-SVN: r215966 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73d5d5a6b92..9349546e524 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-10-07 Eric Botcazou + + * lto-opts.c (lto_write_options): Handle -fmath-errno, -fsigned-zeros + and -ftrapping-math. + * lto-wrapper.c (merge_and_complain): Likewise. + (run_gcc): Likewise. + 2014-10-06 Eric Botcazou * calls.c (expand_call): Do not use the target as the return slot if diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c index 986fb971071..ceccb6f44cb 100644 --- a/gcc/lto-opts.c +++ b/gcc/lto-opts.c @@ -115,6 +115,24 @@ lto_write_options (void) default: gcc_unreachable (); } + /* The default -fmath-errno, -fsigned-zeros and -ftrapping-math change + depending on the language (they can be disabled by the Ada and Java + front-ends). Pass thru conservative standard settings. */ + if (!global_options_set.x_flag_errno_math) + append_to_collect_gcc_options (&temporary_obstack, &first_p, + global_options.x_flag_errno_math + ? "-fmath-errno" + : "-fno-math-errno"); + if (!global_options_set.x_flag_signed_zeros) + append_to_collect_gcc_options (&temporary_obstack, &first_p, + global_options.x_flag_signed_zeros + ? "-fsigned-zeros" + : "-fno-signed-zeros"); + if (!global_options_set.x_flag_trapping_math) + append_to_collect_gcc_options (&temporary_obstack, &first_p, + global_options.x_flag_trapping_math + ? "-ftrapping-math" + : "-fno-trapping-math"); /* We need to merge -f[no-]strict-overflow, -f[no-]wrapv and -f[no-]trapv conservatively, so stream out their defaults. */ if (!global_options_set.x_flag_wrapv diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 08fd090588f..8033b155baa 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -261,6 +261,9 @@ merge_and_complain (struct cl_decoded_option **decoded_options, (*decoded_options)[j] = *foption; break; + case OPT_fmath_errno: + case OPT_fsigned_zeros: + case OPT_ftrapping_math: case OPT_fwrapv: /* For selected options we can merge conservatively. */ for (j = 0; j < *decoded_options_count; ++j) @@ -268,7 +271,10 @@ merge_and_complain (struct cl_decoded_option **decoded_options, break; if (j == *decoded_options_count) append_option (decoded_options, decoded_options_count, foption); - /* -fwrapv > -fno-wrapv. */ + /* -fmath-errno > -fno-math-errno, + -fsigned-zeros > -fno-signed-zeros, + -ftrapping-math -> -fno-trapping-math, + -fwrapv > -fno-wrapv. */ else if (foption->value > (*decoded_options)[j].value) (*decoded_options)[j] = *foption; break; @@ -502,6 +508,9 @@ run_gcc (unsigned argc, char *argv[]) case OPT_fpcc_struct_return: case OPT_fshort_double: case OPT_ffp_contract_: + case OPT_fmath_errno: + case OPT_fsigned_zeros: + case OPT_ftrapping_math: case OPT_fwrapv: case OPT_ftrapv: case OPT_fstrict_overflow: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2b54708db15..21ca143c0b4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-10-07 Eric Botcazou + + * gnat.dg/lto16.adb: New test. + * gnat.dg/lto16_pkg.adb: New helper. + 2014-10-06 Eric Botcazou * gnat.dg/return4.adb: New test. diff --git a/gcc/testsuite/gnat.dg/lto16.adb b/gcc/testsuite/gnat.dg/lto16.adb new file mode 100644 index 00000000000..82d02b4116f --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto16.adb @@ -0,0 +1,17 @@ +-- { dg-do link } +-- { dg-options "-O -flto" } +-- { dg-require-effective-target lto } + +with Lto16_Pkg; use Lto16_Pkg; +with Text_IO; use Text_IO; + +procedure Lto16 is +begin + if F = 0.0 then + Put_Line ("zero"); + else + Put_Line ("non-zero"); + end if; +exception + when others => Put_Line ("exception"); +end; diff --git a/gcc/testsuite/gnat.dg/lto16_pkg.adb b/gcc/testsuite/gnat.dg/lto16_pkg.adb new file mode 100644 index 00000000000..edfa399369a --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto16_pkg.adb @@ -0,0 +1,18 @@ +with Ada.Calendar; use Ada.Calendar; + +package body Lto16_Pkg is + + function F return Float is + F1 : Float := Float (Seconds (Clock)); + F2 : Float := Float (Seconds (Clock)); + F : Float; + begin + if F1 > F2 then + F := (F2 - F1) / 2.0; + else + F := (F1 - F2) / 2.0; + end if; + return F; + end; + +end Lto16_Pkg; diff --git a/gcc/testsuite/gnat.dg/lto16_pkg.ads b/gcc/testsuite/gnat.dg/lto16_pkg.ads new file mode 100644 index 00000000000..e9b74d39337 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto16_pkg.ads @@ -0,0 +1,5 @@ +package Lto16_Pkg is + + function F return Float; + +end Lto16_Pkg;