From: Daniel Franke Date: Sun, 23 Dec 2007 17:34:45 +0000 (-0500) Subject: re PR fortran/34536 (Make support of 2.0**-3*5 tighter: Print warning by default) X-Git-Tag: releases/gcc-4.3.0~835 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57c65fb59c62beb1cbe6db6be2e42c0a9a077915;p=thirdparty%2Fgcc.git re PR fortran/34536 (Make support of 2.0**-3*5 tighter: Print warning by default) gcc/fortran: 2007-12-23 Daniel Franke PR fortran/34536 * matchexp.c (match_ext_mult_operand): Print warning for unary operators following arithmetic ones by default. (match_ext_add_operand): Likewise. gcc/testsuite: 2007-12-23 Daniel Franke PR fortran/34536 * gfortran.dg/integer_exponentiation_2.f90: Fixed testcase. * gfortran.dg/real_const_3.f90: Likewise. * gfortran.dg/unary_operator.f90: New test. From-SVN: r131149 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 79c23de10905..6e992433b57e 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-12-23 Daniel Franke + + PR fortran/34536 + * matchexp.c (match_ext_mult_operand): Print warning for unary + operators following arithmetic ones by default. + (match_ext_add_operand): Likewise. + 2007-12-22 Daniel Franke PR fortran/34559 diff --git a/gcc/fortran/matchexp.c b/gcc/fortran/matchexp.c index c24310144ca0..0bc567f3cec1 100644 --- a/gcc/fortran/matchexp.c +++ b/gcc/fortran/matchexp.c @@ -345,10 +345,15 @@ match_ext_mult_operand (gfc_expr **result) if (i == 0) return match_mult_operand (result); - if (gfc_notify_std (GFC_STD_GNU, "Extension: Unary operator following " - "arithmetic operator (use parentheses) at %C") - == FAILURE) - return MATCH_ERROR; + if (gfc_notification_std (GFC_STD_GNU) == ERROR) + { + gfc_error ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + return MATCH_ERROR; + } + else + gfc_warning ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); m = match_ext_mult_operand (&e); if (m != MATCH_YES) @@ -449,10 +454,15 @@ match_ext_add_operand (gfc_expr **result) if (i == 0) return match_add_operand (result); - if (gfc_notify_std (GFC_STD_GNU, "Extension: Unary operator following " - "arithmetic operator (use parentheses) at %C") - == FAILURE) - return MATCH_ERROR; + if (gfc_notification_std (GFC_STD_GNU) == ERROR) + { + gfc_error ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); + return MATCH_ERROR; + } + else + gfc_warning ("Extension: Unary operator following " + "arithmetic operator (use parentheses) at %C"); m = match_ext_add_operand (&e); if (m != MATCH_YES) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 008192e155ec..4b540f05f70c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2007-12-23 Daniel Franke + + PR fortran/34536 + * gfortran.dg/integer_exponentiation_2.f90: Fixed testcase. + * gfortran.dg/real_const_3.f90: Likewise. + * gfortran.dg/unary_operator.f90: New test. + 2007-12-23 Eric Botcazou * gnat.dg/pack2.adb: New test. diff --git a/gcc/testsuite/gfortran.dg/integer_exponentiation_2.f90 b/gcc/testsuite/gfortran.dg/integer_exponentiation_2.f90 index 55d00ba28b87..1261d48d3412 100644 --- a/gcc/testsuite/gfortran.dg/integer_exponentiation_2.f90 +++ b/gcc/testsuite/gfortran.dg/integer_exponentiation_2.f90 @@ -32,29 +32,29 @@ subroutine run_me(a, i, z) call check_equal_r (a**1.0, a) call check_equal_r (a**2.0, a*a) call check_equal_r (a**3.0, a*(a**2)) - call check_equal_r (a**-1.0, 1/a) - call check_equal_r (a**-2.0, (1/a)*(1/a)) + call check_equal_r (a**(-1.0), 1/a) + call check_equal_r (a**(-2.0), (1/a)*(1/a)) call check_equal_r (a**0, 1.0) call check_equal_r (a**1, a) call check_equal_r (a**2, a*a) call check_equal_r (a**3, a*(a**2)) - call check_equal_r (a**-1, 1/a) - call check_equal_r (a**-2, (1/a)*(1/a)) + call check_equal_r (a**(-1), 1/a) + call check_equal_r (a**(-2), (1/a)*(1/a)) call check_equal_r (a**0_8, 1.0) call check_equal_r (a**1_8, a) call check_equal_r (a**2_8, a*a) call check_equal_r (a**3_8, a*(a**2)) - call check_equal_r (a**-1_8, 1/a) - call check_equal_r (a**-2_8, (1/a)*(1/a)) + call check_equal_r (a**(-1_8), 1/a) + call check_equal_r (a**(-2_8), (1/a)*(1/a)) call check_equal_c (z**0.0, (1.0,0.0)) call check_equal_c (z**1.0, z) call check_equal_c (z**2.0, z*z) call check_equal_c (z**3.0, z*(z**2)) - call check_equal_c (z**-1.0, 1/z) - call check_equal_c (z**-2.0, (1/z)*(1/z)) + call check_equal_c (z**(-1.0), 1/z) + call check_equal_c (z**(-2.0), (1/z)*(1/z)) call check_equal_c (z**(0.0,0.0), (1.0,0.0)) call check_equal_c (z**(1.0,0.0), z) @@ -67,15 +67,15 @@ subroutine run_me(a, i, z) call check_equal_c (z**1, z) call check_equal_c (z**2, z*z) call check_equal_c (z**3, z*(z**2)) - call check_equal_c (z**-1, 1/z) - call check_equal_c (z**-2, (1/z)*(1/z)) + call check_equal_c (z**(-1), 1/z) + call check_equal_c (z**(-2), (1/z)*(1/z)) call check_equal_c (z**0_8, (1.0,0.0)) call check_equal_c (z**1_8, z) call check_equal_c (z**2_8, z*z) call check_equal_c (z**3_8, z*(z**2)) - call check_equal_c (z**-1_8, 1/z) - call check_equal_c (z**-2_8, (1/z)*(1/z)) + call check_equal_c (z**(-1_8), 1/z) + call check_equal_c (z**(-2_8), (1/z)*(1/z)) contains @@ -110,44 +110,44 @@ subroutine foo(a) call gee_i(i**1_1) call gee_i(i**2_1) call gee_i(i**3_1) - call gee_i(i**-1_1) - call gee_i(i**-2_1) - call gee_i(i**-3_1) + call gee_i(i**(-1_1)) + call gee_i(i**(-2_1)) + call gee_i(i**(-3_1)) call gee_i(i**huge(0_1)) - call gee_i(i**-huge(0_1)) + call gee_i(i**(-huge(0_1))) call gee_i(i**(-huge(0_1)-1_1)) call gee_i(i**0_2) call gee_i(i**1_2) call gee_i(i**2_2) call gee_i(i**3_2) - call gee_i(i**-1_2) - call gee_i(i**-2_2) - call gee_i(i**-3_2) + call gee_i(i**(-1_2)) + call gee_i(i**(-2_2)) + call gee_i(i**(-3_2)) call gee_i(i**huge(0_2)) - call gee_i(i**-huge(0_2)) + call gee_i(i**(-huge(0_2))) call gee_i(i**(-huge(0_2)-1_2)) call gee_i(i**0_4) call gee_i(i**1_4) call gee_i(i**2_4) call gee_i(i**3_4) - call gee_i(i**-1_4) - call gee_i(i**-2_4) - call gee_i(i**-3_4) + call gee_i(i**(-1_4)) + call gee_i(i**(-2_4)) + call gee_i(i**(-3_4)) call gee_i(i**huge(0_4)) - call gee_i(i**-huge(0_4)) + call gee_i(i**(-huge(0_4))) call gee_i(i**(-huge(0_4)-1_4)) call gee_i(i**0_8) call gee_i(i**1_8) call gee_i(i**2_8) call gee_i(i**3_8) - call gee_i(i**-1_8) - call gee_i(i**-2_8) - call gee_i(i**-3_8) + call gee_i(i**(-1_8)) + call gee_i(i**(-2_8)) + call gee_i(i**(-3_8)) call gee_i(i**huge(0_8)) - call gee_i(i**-huge(0_8)) + call gee_i(i**(-huge(0_8))) call gee_i(i**(-huge(0_8)-1_8)) ! Real @@ -155,44 +155,44 @@ subroutine foo(a) call gee_r(a**1_1) call gee_r(a**2_1) call gee_r(a**3_1) - call gee_r(a**-1_1) - call gee_r(a**-2_1) - call gee_r(a**-3_1) + call gee_r(a**(-1_1)) + call gee_r(a**(-2_1)) + call gee_r(a**(-3_1)) call gee_r(a**huge(0_1)) - call gee_r(a**-huge(0_1)) + call gee_r(a**(-huge(0_1))) call gee_r(a**(-huge(0_1)-1_1)) call gee_r(a**0_2) call gee_r(a**1_2) call gee_r(a**2_2) call gee_r(a**3_2) - call gee_r(a**-1_2) - call gee_r(a**-2_2) - call gee_r(a**-3_2) + call gee_r(a**(-1_2)) + call gee_r(a**(-2_2)) + call gee_r(a**(-3_2)) call gee_r(a**huge(0_2)) - call gee_r(a**-huge(0_2)) + call gee_r(a**(-huge(0_2))) call gee_r(a**(-huge(0_2)-1_2)) call gee_r(a**0_4) call gee_r(a**1_4) call gee_r(a**2_4) call gee_r(a**3_4) - call gee_r(a**-1_4) - call gee_r(a**-2_4) - call gee_r(a**-3_4) + call gee_r(a**(-1_4)) + call gee_r(a**(-2_4)) + call gee_r(a**(-3_4)) call gee_r(a**huge(0_4)) - call gee_r(a**-huge(0_4)) + call gee_r(a**(-huge(0_4))) call gee_r(a**(-huge(0_4)-1_4)) call gee_r(a**0_8) call gee_r(a**1_8) call gee_r(a**2_8) call gee_r(a**3_8) - call gee_r(a**-1_8) - call gee_r(a**-2_8) - call gee_r(a**-3_8) + call gee_r(a**(-1_8)) + call gee_r(a**(-2_8)) + call gee_r(a**(-3_8)) call gee_r(a**huge(0_8)) - call gee_r(a**-huge(0_8)) + call gee_r(a**(-huge(0_8))) call gee_r(a**(-huge(0_8)-1_8)) ! Complex @@ -200,44 +200,44 @@ subroutine foo(a) call gee_z(z**1_1) call gee_z(z**2_1) call gee_z(z**3_1) - call gee_z(z**-1_1) - call gee_z(z**-2_1) - call gee_z(z**-3_1) + call gee_z(z**(-1_1)) + call gee_z(z**(-2_1)) + call gee_z(z**(-3_1)) call gee_z(z**huge(0_1)) - call gee_z(z**-huge(0_1)) + call gee_z(z**(-huge(0_1))) call gee_z(z**(-huge(0_1)-1_1)) call gee_z(z**0_2) call gee_z(z**1_2) call gee_z(z**2_2) call gee_z(z**3_2) - call gee_z(z**-1_2) - call gee_z(z**-2_2) - call gee_z(z**-3_2) + call gee_z(z**(-1_2)) + call gee_z(z**(-2_2)) + call gee_z(z**(-3_2)) call gee_z(z**huge(0_2)) - call gee_z(z**-huge(0_2)) + call gee_z(z**(-huge(0_2))) call gee_z(z**(-huge(0_2)-1_2)) call gee_z(z**0_4) call gee_z(z**1_4) call gee_z(z**2_4) call gee_z(z**3_4) - call gee_z(z**-1_4) - call gee_z(z**-2_4) - call gee_z(z**-3_4) + call gee_z(z**(-1_4)) + call gee_z(z**(-2_4)) + call gee_z(z**(-3_4)) call gee_z(z**huge(0_4)) - call gee_z(z**-huge(0_4)) + call gee_z(z**(-huge(0_4))) call gee_z(z**(-huge(0_4)-1_4)) call gee_z(z**0_8) call gee_z(z**1_8) call gee_z(z**2_8) call gee_z(z**3_8) - call gee_z(z**-1_8) - call gee_z(z**-2_8) - call gee_z(z**-3_8) + call gee_z(z**(-1_8)) + call gee_z(z**(-2_8)) + call gee_z(z**(-3_8)) call gee_z(z**huge(0_8)) - call gee_z(z**-huge(0_8)) + call gee_z(z**(-huge(0_8))) call gee_z(z**(-huge(0_8)-1_8)) end subroutine foo diff --git a/gcc/testsuite/gfortran.dg/real_const_3.f90 b/gcc/testsuite/gfortran.dg/real_const_3.f90 index 1762a046ec7a..a05986fcb8f8 100644 --- a/gcc/testsuite/gfortran.dg/real_const_3.f90 +++ b/gcc/testsuite/gfortran.dg/real_const_3.f90 @@ -28,7 +28,7 @@ program main write(str,*) 0.0/0.0 if (trim(adjustl(str)) .ne. 'NaN') call abort - write(str,*) 1.0/-0. + write(str,*) 1.0/(-0.) if (trim(adjustl(str)) .ne. '-Infinity') call abort write(str,*) -2.0/0. diff --git a/gcc/testsuite/gfortran.dg/unary_operator.f90 b/gcc/testsuite/gfortran.dg/unary_operator.f90 new file mode 100644 index 000000000000..ee16e18a8bb1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/unary_operator.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/34536 -- unary operators following arithmetic ones + + real :: x + x = 2.0 ** -3 * 5 ! { dg-warning "Unary operator following arithmetic operator" } +end \ No newline at end of file