From: Tobias Burnus Date: Sun, 16 Dec 2007 22:12:55 +0000 (+0100) Subject: re PR fortran/34495 (accepts invalid initialization expressions withTRANSFER) X-Git-Tag: releases/gcc-4.3.0~939 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b7970354e8de6cb3920c97efc95a0f7f9101e3ca;p=thirdparty%2Fgcc.git re PR fortran/34495 (accepts invalid initialization expressions withTRANSFER) 2007-12-16 Tobias Burnus PR fortran/34495 * intrinsic.c (add_functions): Mark float and sngl as STD_GNU. (gfc_intrinsic_func_interface): Reject REAL, DBLE and CMPLX in initialization expressions for -std=f95. 2007-12-16 Tobias Burnus PR fortran/34495 * gfortran.dg/initialization_16.f90: New. From-SVN: r130994 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index cf54102adae4..5f6e1dc9b5bb 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2007-12-16 Tobias Burnus + + PR fortran/34495 + * intrinsic.c (add_functions): Mark float and sngl as STD_GNU. + (gfc_intrinsic_func_interface): Reject REAL, DBLE and CMPLX + in initialization expressions for -std=f95. + 2007-12-16 Thomas Koenig PR fortran/34305 diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 467f7718a995..aaaa620319d1 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -2047,11 +2047,11 @@ add_functions (void) gfc_check_fn_c, gfc_simplify_realpart, gfc_resolve_realpart, a, BT_UNKNOWN, dr, REQUIRED); - add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + add_sym_1 ("float", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, gfc_check_i, gfc_simplify_float, NULL, a, BT_INTEGER, di, REQUIRED); - add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_F77, + add_sym_1 ("sngl", GFC_ISYM_REAL, CLASS_ELEMENTAL, ACTUAL_NO, BT_REAL, dr, GFC_STD_GNU, NULL, gfc_simplify_sngl, NULL, a, BT_REAL, dd, REQUIRED); @@ -3388,6 +3388,14 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag) if (check_intrinsic_standard (name, isym->standard, &expr->where) == FAILURE) return MATCH_ERROR; + if ((isym->id == GFC_ISYM_REAL || isym->id == GFC_ISYM_DBLE + || isym->id == GFC_ISYM_CMPLX) + && gfc_init_expr + && gfc_notify_std (GFC_STD_F2003, "Fortran 2003: Function '%s' " + "as initialization expression at %L", name, + &expr->where) == FAILURE) + return MATCH_ERROR; + gfc_current_intrinsic_where = &expr->where; /* Bypass the generic list for min and max. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82411bd99170..0c14c4eb4d00 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-12-16 Tobias Burnus + + PR fortran/34495 + * gfortran.dg/initialization_16.f90: New. + 2007-12-16 Thomas Koenig PR fortran/34305 diff --git a/gcc/testsuite/gfortran.dg/initialization_16.f90 b/gcc/testsuite/gfortran.dg/initialization_16.f90 new file mode 100644 index 000000000000..185099a92e88 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/initialization_16.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-std=f95 -Wall" } +! +! PR fortran/34495 +! +! Check for invalid Fortran 95 initialization expressions +! +program main + implicit none + real, parameter :: r1 = real(33) ! { dg-error "Fortran 2003: Function 'real' as initialization expression" } + real, parameter :: r2 = dble(33) ! { dg-error "Fortran 2003: Function 'dble' as initialization expression" } + real, parameter :: r4 = cmplx(33,33)! { dg-error "Fortran 2003: Function 'cmplx' as initialization expression" } + print *, sngl(1.0d0) ! { dg-error "not included in the selected standard" } + print *, float(1.0) ! { dg-error "not included in the selected standard" } +end program main