Commit 4ea0af1d by Steven G. Kargl

re PR fortran/78278 (ICE in gfc_wide_memset, at fortran/scanner.c:153)

2018-06-09  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/78278
	* data.c (gfc_assign_data_value): Re-arrange code to allow for
	an error for double initialization of CHARACTER entities.

2018-06-09  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/78278
	* gfortran.dg/data_bounds_1.f90: Add -std=gnu option.
	* gfortran.dg/data_char_1.f90: Ditto.
	* gfortran.dg/pr78571.f90: Ditto.
	* gfortran.dg/pr78278.f90: New test.

From-SVN: r261361
parent 598dc594
2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org> 2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78278
* data.c (gfc_assign_data_value): Re-arrange code to allow for
an error for double initialization of CHARACTER entities.
2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/63514 PR fortran/63514
* symbol.c (gfc_add_volatile): Enforce F2008:C1282 and F2018:C1588. * symbol.c (gfc_add_volatile): Enforce F2008:C1282 and F2018:C1588.
......
...@@ -483,6 +483,21 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index, ...@@ -483,6 +483,21 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
mpz_clear (offset); mpz_clear (offset);
gcc_assert (repeat == NULL); gcc_assert (repeat == NULL);
/* Overwriting an existing initializer is non-standard but usually only
provokes a warning from other compilers. */
if (init != NULL && init->where.lb && rvalue->where.lb)
{
/* Order in which the expressions arrive here depends on whether
they are from data statements or F95 style declarations.
Therefore, check which is the most recent. */
expr = (LOCATION_LINE (init->where.lb->location)
> LOCATION_LINE (rvalue->where.lb->location))
? init : rvalue;
if (gfc_notify_std (GFC_STD_GNU, "re-initialization of %qs at %L",
symbol->name, &expr->where) == false)
return false;
}
if (ref || last_ts->type == BT_CHARACTER) if (ref || last_ts->type == BT_CHARACTER)
{ {
/* An initializer has to be constant. */ /* An initializer has to be constant. */
...@@ -503,22 +518,6 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index, ...@@ -503,22 +518,6 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
return false; return false;
} }
/* Overwriting an existing initializer is non-standard but usually only
provokes a warning from other compilers. */
if (init != NULL)
{
/* Order in which the expressions arrive here depends on whether
they are from data statements or F95 style declarations.
Therefore, check which is the most recent. */
expr = (LOCATION_LINE (init->where.lb->location)
> LOCATION_LINE (rvalue->where.lb->location))
? init : rvalue;
if (gfc_notify_std (GFC_STD_GNU,
"re-initialization of %qs at %L",
symbol->name, &expr->where) == false)
return false;
}
expr = gfc_copy_expr (rvalue); expr = gfc_copy_expr (rvalue);
if (!gfc_compare_types (&lvalue->ts, &expr->ts)) if (!gfc_compare_types (&lvalue->ts, &expr->ts))
gfc_convert_type (expr, &lvalue->ts, 0); gfc_convert_type (expr, &lvalue->ts, 0);
......
2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org> 2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/78278
* gfortran.dg/data_bounds_1.f90: Add -std=gnu option.
* gfortran.dg/data_char_1.f90: Ditto.
* gfortran.dg/pr78571.f90: Ditto.
* gfortran.dg/pr78278.f90: New test.
2018-06-09 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/63514 PR fortran/63514
* gfortran.dg/pr63514.f90: New test. * gfortran.dg/pr63514.f90: New test.
......
! { dg-do compile } ! { dg-do compile }
! { dg-options "-std=gnu" }
! Checks the fix for PR32315, in which the bounds checks below were not being done. ! Checks the fix for PR32315, in which the bounds checks below were not being done.
! !
! Contributed by Tobias Burnus <burnus@gcc.gnu.org> ! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
......
! { dg-do run } ! { dg-do run }
! { dg-options "-std=gnu" }
! Test character variables in data statements ! Test character variables in data statements
! Also substrings of character variables. ! Also substrings of character variables.
! PR14976 PR16228 ! PR14976 PR16228
......
! { dg-do compile }
! { dg-options "-std=f95" }
! PR fortran/78278
program p
character, pointer :: x => null()
data x /null()/ ! { dg-error "GNU Extension: re-initialization" }
print *, associated(x)
end
subroutine foo
real :: x = 42
data x /0/ ! { dg-error "GNU Extension: re-initialization" }
print *, x
end subroutine foo
! { dg-do compile } ! { dg-do compile }
! { dg-options "-std=gnu" }
! PR fortran/78571 ! PR fortran/78571
program p program p
type t type t
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment