Commit 894460a7 by Tobias Burnus Committed by Tobias Burnus

re PR fortran/57549 (Bogus error with array constructor with derived-type typespec)

2013-06-07  Tobias Burnus  <burnus@net-b.de>

        PR fortran/57549
        * array.c (gfc_match_array_constructor): Call
        gfc_match_type_spec instead of gfc_match_decl_type_spec.
        * match.c (gfc_match_type_spec): Renamed from match_type_spec.
        (gfc_match_type_is, gfc_match_allocate): Update call.
        * match.h (gfc_match_type_spec): Add prototype.

2013-06-07  Tobias Burnus  <burnus@net-b.de>

        PR fortran/57549
        * gfortran.dg/array_constructor_48.f90: New.
        * gfortran.dg/array_constructor_type_14.f03: Correct test case.
        * gfortran.dg/array_constructor_type_15.f03: Ditto.

From-SVN: r199820
parent b5e0425c
2013-06-07 Tobias Burnus <burnus@net-b.de>
PR fortran/57549
* array.c (gfc_match_array_constructor): Call
gfc_match_type_spec instead of gfc_match_decl_type_spec.
* match.c (gfc_match_type_spec): Renamed from match_type_spec.
(gfc_match_type_is, gfc_match_allocate): Update call.
* match.h (gfc_match_type_spec): Add prototype.
2013-06-07 Tobias Burnus <burnus@net-b.de>
PR fortran/57556
* trans.c (gfc_build_final_call): Init block before use.
......
......@@ -1073,7 +1073,7 @@ gfc_match_array_constructor (gfc_expr **result)
/* Try to match an optional "type-spec ::" */
gfc_clear_ts (&ts);
gfc_new_undo_checkpoint (changed_syms);
if (gfc_match_decl_type_spec (&ts, 0) == MATCH_YES)
if (gfc_match_type_spec (&ts) == MATCH_YES)
{
seen_ts = (gfc_match (" ::") == MATCH_YES);
......
......@@ -1937,8 +1937,8 @@ match_derived_type_spec (gfc_typespec *ts)
the implicit_flag is not needed, so it was removed. Derived types are
identified by their name alone. */
static match
match_type_spec (gfc_typespec *ts)
match
gfc_match_type_spec (gfc_typespec *ts)
{
match m;
locus old_locus;
......@@ -3426,7 +3426,7 @@ gfc_match_allocate (void)
/* Match an optional type-spec. */
old_locus = gfc_current_locus;
m = match_type_spec (&ts);
m = gfc_match_type_spec (&ts);
if (m == MATCH_ERROR)
goto cleanup;
else if (m == MATCH_NO)
......@@ -5502,7 +5502,7 @@ gfc_match_type_is (void)
c = gfc_get_case ();
c->where = gfc_current_locus;
if (match_type_spec (&c->ts) == MATCH_ERROR)
if (gfc_match_type_spec (&c->ts) == MATCH_ERROR)
goto cleanup;
if (gfc_match_char (')') != MATCH_YES)
......
......@@ -59,6 +59,8 @@ match gfc_match_char (char);
match gfc_match (const char *, ...);
match gfc_match_iterator (gfc_iterator *, int);
match gfc_match_parens (void);
match gfc_match_type_spec (gfc_typespec *);
/* Statement matchers. */
match gfc_match_program (void);
......
2013-06-07 Tobias Burnus <burnus@net-b.de>
PR fortran/57549
* gfortran.dg/array_constructor_48.f90: New.
* gfortran.dg/array_constructor_type_14.f03: Correct test case.
* gfortran.dg/array_constructor_type_15.f03: Ditto.
2013-06-07 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
PR target/56315
......
! { dg-do compile }
!
! PR fortran/57549
!
! Contributed by Vladimir Fuka
!
type t
end type
type(t),allocatable :: a(:)
a = [t::t()]
print *, [ integer :: ]
end
subroutine invalid()
print *, [ type(integer) :: ] ! { dg-error "Syntax error in array constructor" }
print *, [ type(tt) :: ] ! { dg-error "Syntax error in array constructor" }
end subroutine invalid
......@@ -16,7 +16,7 @@ PROGRAM test
TYPE(foo), DIMENSION(2) :: arr
arr = (/ TYPE(foo) :: x, foo(0, 1.) /)
arr = (/ foo :: x, foo(0, 1.) /)
IF (arr(1)%i /= 42 .OR. arr(1)%x /= 42. .OR. &
arr(2)%i /= 0 .OR. arr(2)%x /= 1.) THEN
CALL abort()
......
......@@ -18,5 +18,5 @@ PROGRAM test
TYPE(foo), PARAMETER :: x = foo(42, 42.)
WRITE (*,*) (/ TYPE(foo) :: x, foo(0, 1.), bar(.TRUE.) /) ! { dg-error "convert TYPE" }
WRITE (*,*) (/ foo :: x, foo(0, 1.), bar(.TRUE.) /) ! { dg-error "convert TYPE" }
END PROGRAM test
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