From ef7e861a0f89bce417b38c31b74c29ad88073548 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 24 Aug 2007 21:26:42 +0200 Subject: [PATCH] re PR fortran/33178 (-std=f95: SIGN with integer arguments rejected as initialization expression) 2007-08-24 Tobias Burnus PR fortran/33178 * intrinsic.c (gfc_intrinsic_func_interface): Fix initialization expression check. 2007-08-24 Tobias Burnus PR fortran/33178 * gfortran.dg/initialization_4.f90: Update dg-error. * gfortran.dg/initialization_13.f90: New. From-SVN: r127786 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/intrinsic.c | 10 ++++------ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gfortran.dg/initialization_13.f90 | 12 ++++++++++++ gcc/testsuite/gfortran.dg/initialization_4.f90 | 2 +- 5 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/initialization_13.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 7ab6c1eddd7..95726ff159c 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-08-24 Tobias Burnus + + PR fortran/33178 + * intrinsic.c (gfc_intrinsic_func_interface): Fix initialization + expression check. + 2007-08-24 Thomas Koenig PR fortran/32972 diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 3f999b4210c..4128e441d63 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -3409,12 +3409,10 @@ got_specific: (4) A reference to an elemental standard intrinsic function, where each argument is an initialization expression */ - if (gfc_init_expr - && isym->elemental - && (expr->ts.type != BT_INTEGER || expr->ts.type != BT_CHARACTER) - && gfc_notify_std (GFC_STD_F2003, "Extension: Evaluation of " - "nonstandard initialization expression at %L", - &expr->where) == FAILURE) + if (gfc_init_expr && isym->elemental && flag + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Elemental function " + "as initialization expression with non-integer/non-" + "character arguments at %L", &expr->where) == FAILURE) return MATCH_ERROR; return MATCH_YES; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 54da80e5169..11f33388bca 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-08-24 Tobias Burnus + + PR fortran/33178 + * gfortran.dg/initialization_4.f90: Update dg-error. + * gfortran.dg/initialization_13.f90: New. + 2007-08-24 Richard Guenther PR middle-end/33166 diff --git a/gcc/testsuite/gfortran.dg/initialization_13.f90 b/gcc/testsuite/gfortran.dg/initialization_13.f90 new file mode 100644 index 00000000000..0cd6fa693f9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/initialization_13.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-std=f95" } +! +! PR fortran/33178 +! +! Initialization expressions: +! Fortran 95: Elemental functions w/ integer/character arguments +! Fortran 2003: restriction lifted +! +integer :: a = sign(1,1) ! Ok F95 +real :: b = sign(1.,1.) ! { dg-error "Fortran 2003: Elemental function as initialization expression" } +end diff --git a/gcc/testsuite/gfortran.dg/initialization_4.f90 b/gcc/testsuite/gfortran.dg/initialization_4.f90 index 552a01f8748..24ccf9c6457 100644 --- a/gcc/testsuite/gfortran.dg/initialization_4.f90 +++ b/gcc/testsuite/gfortran.dg/initialization_4.f90 @@ -2,6 +2,6 @@ ! initialization expression, even if -std=f95 was used ! { dg-do compile } ! { dg-options "-std=f95" } -real, parameter :: pi = 4.0*Atan(1.0) ! { dg-error "Evaluation of nonstandard initialization expression" } +real, parameter :: pi = 4.0*Atan(1.0) ! { dg-error "Fortran 2003: Elemental function as initialization expression" } real, parameter :: three = 27.0**(1.0/3.0) ! { dg-error "Noninteger exponent in an initialization expression" } end