Commit fb42421e by Steven G. Kargl

re PR fortran/71730 (ICE when character length specification uses an undefined variable)

2016-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/71730
	* decl.c (char_len_param_value): Check return value of
	gfc_reduce_init_expr().

2016-07-30  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/71730
	* gfortran.dg/pr71730.f90: New test.
	* gfortran.dg/bounds_check_strlen_2.f90: Fix invalid code.
	* gfortran.dg/array_constructor_27.f03: Update dg-error message.
	* gfortran.dg/array_constructor_26.f03: Ditto.

From-SVN: r238904
parent 12f549f4
2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/71730
* decl.c (char_len_param_value): Check return value of
gfc_reduce_init_expr().
2016-07-29 Dominik Vogt <vogt@linux.vnet.ibm.com> 2016-07-29 Dominik Vogt <vogt@linux.vnet.ibm.com>
* trans-array.c (gfc_conv_array_ref): Fix allocation of diagnostic * trans-array.c (gfc_conv_array_ref): Fix allocation of diagnostic
......
...@@ -906,6 +906,7 @@ char_len_param_value (gfc_expr **expr, bool *deferred) ...@@ -906,6 +906,7 @@ char_len_param_value (gfc_expr **expr, bool *deferred)
goto syntax; goto syntax;
else if ((*expr)->expr_type == EXPR_VARIABLE) else if ((*expr)->expr_type == EXPR_VARIABLE)
{ {
bool t;
gfc_expr *e; gfc_expr *e;
e = gfc_copy_expr (*expr); e = gfc_copy_expr (*expr);
...@@ -917,7 +918,15 @@ char_len_param_value (gfc_expr **expr, bool *deferred) ...@@ -917,7 +918,15 @@ char_len_param_value (gfc_expr **expr, bool *deferred)
&& e->ref->u.ar.dimen_type[0] == DIMEN_RANGE) && e->ref->u.ar.dimen_type[0] == DIMEN_RANGE)
goto syntax; goto syntax;
gfc_reduce_init_expr (e); t = gfc_reduce_init_expr (e);
if (!t && (e->ts.type == BT_UNKNOWN
&& e->symtree->n.sym->attr.untyped == 1
&& e->symtree->n.sym->ns->seen_implicit_none == 1))
{
gfc_free_expr (e);
goto syntax;
}
if ((e->ref && e->ref->type == REF_ARRAY if ((e->ref && e->ref->type == REF_ARRAY
&& e->ref->u.ar.type != AR_ELEMENT) && e->ref->u.ar.type != AR_ELEMENT)
......
2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/71730
* gfortran.dg/pr71730.f90: New test.
* gfortran.dg/bounds_check_strlen_2.f90: Fix invalid code.
* gfortran.dg/array_constructor_27.f03: Update dg-error message.
* gfortran.dg/array_constructor_26.f03: Ditto.
2016-07-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com> 2016-07-29 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* g++.dg/pr70098.C: Remove XFAIL for powerpc64_no_dm. * g++.dg/pr70098.C: Remove XFAIL for powerpc64_no_dm.
......
...@@ -10,7 +10,6 @@ MODULE WinData ...@@ -10,7 +10,6 @@ MODULE WinData
INTEGER (1), PARAMETER :: MAXFLD = 25_1, MAXHED = 5_1, MAXCHR = 80_1 INTEGER (1), PARAMETER :: MAXFLD = 25_1, MAXHED = 5_1, MAXCHR = 80_1
integer :: i integer :: i
TYPE TWindowData TYPE TWindowData
CHARACTER (MAX_FLD_HED, 1) :: DWFdHd(MAXFLD) = [(" ", i = 1, MAXFLD)] CHARACTER (MAX_FLD_HED, 1) :: DWFdHd(MAXFLD) = [(" ", i = 1, MAXFLD)] ! { dg-error "Scalar INTEGER expression" }
! { dg-error "specification expression" "" { target *-*-* } 13 }
END TYPE TWindowData END TYPE TWindowData
END MODULE WinData END MODULE WinData
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
implicit none implicit none
type t type t
character (a) :: arr (1) = [ "a" ] character (a) :: arr (1) = [ "a" ] ! { dg-error "Scalar INTEGER expression" }
! { dg-error "specification expression" "" { target *-*-* } 11 }
end type t end type t
end end
...@@ -11,8 +11,8 @@ CONTAINS ...@@ -11,8 +11,8 @@ CONTAINS
SUBROUTINE test (str, n) SUBROUTINE test (str, n)
IMPLICIT NONE IMPLICIT NONE
CHARACTER(len=n) :: str
INTEGER :: n INTEGER :: n
CHARACTER(len=n) :: str
END SUBROUTINE test END SUBROUTINE test
SUBROUTINE test2 (str) SUBROUTINE test2 (str)
......
! { dg-do compile }
subroutine foo
implicit none
character(len=bar) :: a ! { dg-error "Scalar INTEGER expression" }
end subroutine foo
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