Patchwork Fix flag_trapping_math in java frontend

login
register
mail settings
Submitter Andreas Schwab
Date Jan. 22, 2012, 2:52 p.m.
Message ID <m2sjj7bxhq.fsf@igel.home>
Download mbox | patch
Permalink /patch/137243/
State New
Headers show

Comments

Andreas Schwab - Jan. 22, 2012, 2:52 p.m.
The java frontend wants that floating point operations are assumed to
never trap, thus clears flag_trapping_math in java_init_options_struct.
But this is no longer effective after revision 165823, because
set_fast_math_flags is now always called during option processing,
overriding anything what the frontend did to flag_trapping_math.  This
is an amendment to revision 169930 which introduced
frontend_set_flag_trapping_math, but didn't set it in
java_init_options_struct.

While this was found during examination of PR49847, this doesn't fix it,
but only makes the bug dormant again in 4.6.

Tested on powerpc-linux, ok for trunk and 4.6 branch?

Andreas.

2012-01-22  Andreas Schwab  <schwab@linux-m68k.org>

	* lang.c (java_init_options_struct): Set
	frontend_set_flag_trapping_math.
Richard Guenther - Jan. 23, 2012, 10:59 a.m.
On Sun, Jan 22, 2012 at 3:52 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> The java frontend wants that floating point operations are assumed to
> never trap, thus clears flag_trapping_math in java_init_options_struct.
> But this is no longer effective after revision 165823, because
> set_fast_math_flags is now always called during option processing,
> overriding anything what the frontend did to flag_trapping_math.  This
> is an amendment to revision 169930 which introduced
> frontend_set_flag_trapping_math, but didn't set it in
> java_init_options_struct.
>
> While this was found during examination of PR49847, this doesn't fix it,
> but only makes the bug dormant again in 4.6.
>
> Tested on powerpc-linux, ok for trunk and 4.6 branch?

Ok.

Thanks,
Richard.

> Andreas.
>
> 2012-01-22  Andreas Schwab  <schwab@linux-m68k.org>
>
>        * lang.c (java_init_options_struct): Set
>        frontend_set_flag_trapping_math.
>
> diff --git a/gcc/java/lang.c b/gcc/java/lang.c
> index ccab48c..da7dd05 100644
> --- a/gcc/java/lang.c
> +++ b/gcc/java/lang.c
> @@ -1,6 +1,6 @@
>  /* Java(TM) language-specific utility routines.
>    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
> -   2005, 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
> +   2005, 2006, 2007, 2008, 2010, 2012 Free Software Foundation, Inc.
>
>  This file is part of GCC.
>
> @@ -550,6 +550,7 @@ java_init_options_struct (struct gcc_options *opts)
>
>   /* In Java floating point operations never trap.  */
>   opts->x_flag_trapping_math = 0;
> +  opts->frontend_set_flag_trapping_math = true;
>
>   /* In Java arithmetic overflow always wraps around.  */
>   opts->x_flag_wrapv = 1;
> --
> 1.7.8.4
>
> --
> Andreas Schwab, schwab@linux-m68k.org
> GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
> "And now for something completely different."

Patch

diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index ccab48c..da7dd05 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -1,6 +1,6 @@ 
 /* Java(TM) language-specific utility routines.
    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-   2005, 2006, 2007, 2008, 2010 Free Software Foundation, Inc.
+   2005, 2006, 2007, 2008, 2010, 2012 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -550,6 +550,7 @@  java_init_options_struct (struct gcc_options *opts)
 
   /* In Java floating point operations never trap.  */
   opts->x_flag_trapping_math = 0;
+  opts->frontend_set_flag_trapping_math = true;
 
   /* In Java arithmetic overflow always wraps around.  */
   opts->x_flag_wrapv = 1;