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
This commit is contained in:
parent
598dc594fa
commit
4ea0af1da0
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -483,6 +483,21 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
|
||||
mpz_clear (offset);
|
||||
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)
|
||||
{
|
||||
/* An initializer has to be constant. */
|
||||
@ -503,22 +518,6 @@ gfc_assign_data_value (gfc_expr *lvalue, gfc_expr *rvalue, mpz_t index,
|
||||
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);
|
||||
if (!gfc_compare_types (&lvalue->ts, &expr->ts))
|
||||
gfc_convert_type (expr, &lvalue->ts, 0);
|
||||
|
@ -1,3 +1,11 @@
|
||||
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
|
||||
|
@ -1,4 +1,5 @@
|
||||
! { dg-do compile }
|
||||
! { dg-options "-std=gnu" }
|
||||
! Checks the fix for PR32315, in which the bounds checks below were not being done.
|
||||
!
|
||||
! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
|
||||
|
@ -1,4 +1,5 @@
|
||||
! { dg-do run }
|
||||
! { dg-options "-std=gnu" }
|
||||
! Test character variables in data statements
|
||||
! Also substrings of character variables.
|
||||
! PR14976 PR16228
|
||||
|
14
gcc/testsuite/gfortran.dg/pr78278.f90
Normal file
14
gcc/testsuite/gfortran.dg/pr78278.f90
Normal file
@ -0,0 +1,14 @@
|
||||
! { 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
|
@ -1,4 +1,5 @@
|
||||
! { dg-do compile }
|
||||
! { dg-options "-std=gnu" }
|
||||
! PR fortran/78571
|
||||
program p
|
||||
type t
|
||||
|
Loading…
x
Reference in New Issue
Block a user