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 <sch...@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, sch...@linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."