re PR fortran/65542 (SPREAD intrinsic incorrectly accepted in initialization expressions with -std=f95)

2017-02-12  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/65542
	* intrinsic.c (gfc_intrinsic_func_interface):  Return an error
	for -std=f95 for disallowed transformational functions in
	initialization expressions.

2017-02-12  Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/65542
	* gfortran.dg/spread_init_expr_2.f90:  New test case.

From-SVN: r245376
This commit is contained in:
Thomas Koenig 2017-02-12 16:10:22 +00:00
parent ab874efd6b
commit 4bb91707a8
4 changed files with 38 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2017-02-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/65542
* intrinsic.c (gfc_intrinsic_func_interface): Return an error
for -std=f95 for disallowed transformational functions in
initialization expressions.
2017-02-09 Cesar Philippidis <cesar@codesourcery.com>
Joseph Myers <joseph@codesourcery.com>

View file

@ -4680,6 +4680,27 @@ gfc_intrinsic_func_interface (gfc_expr *expr, int error_flag)
return MATCH_ERROR;
}
/* F95, 7.1.6.1: Only transformational functions REPEAT, RESHAPE,
SELECTED_INT_KIND, SELECTED_REAL_KIND, TRANSFER, and TRIM are allowed in
initialization expressions. */
if (gfc_init_expr_flag && isym->transformational)
{
gfc_isym_id id = isym->id;
if (id != GFC_ISYM_REPEAT && id != GFC_ISYM_RESHAPE
&& id != GFC_ISYM_SI_KIND && id != GFC_ISYM_SR_KIND
&& id != GFC_ISYM_TRANSFER && id != GFC_ISYM_TRIM
&& !gfc_notify_std (GFC_STD_F2003, "Transformational function %qs "
"at %L is invalid in an initialization "
"expression", name, &expr->where))
{
if (!error_flag)
gfc_pop_suppress_errors ();
return MATCH_ERROR;
}
}
gfc_current_intrinsic_where = &expr->where;
/* Bypass the generic list for min, max and ISO_C_Binding's c_loc. */

View file

@ -1,3 +1,8 @@
2017-02-12 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/65542
* gfortran.dg/spread_init_expr_2.f90: New test case.
2017-02-11 Jakub Jelinek <jakub@redhat.com>
PR sanitizer/79341

View file

@ -0,0 +1,5 @@
! { dg-do compile }
! { dg-options "-std=f95" }
module bug
integer :: ibug(42) = spread(42, 1, 42) ! { dg-error "invalid in an initialization expression" }
end module