Commit 6168fc43 by Steven G. Kargl

re PR fortran/44929 ([OOP] Parsing error of derived type name starting with 'REAL')

2010-07-21  Steven G. Kargl  <kargl@gcc.gnu.org>

    PR fortran/44929
    * Revert my commit r162325 for this PR.

From-SVN: r162386
parent fcc71c6c
2010-07-21 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/44929
* Revert my commit r162325.
2010-07-21 Daniel Kraft <d@domob.eu> 2010-07-21 Daniel Kraft <d@domob.eu>
* trans.h (gfc_get_return_label): Removed. * trans.h (gfc_get_return_label): Removed.
......
...@@ -2706,25 +2706,6 @@ match_type_spec (gfc_typespec *ts) ...@@ -2706,25 +2706,6 @@ match_type_spec (gfc_typespec *ts)
gfc_clear_ts (ts); gfc_clear_ts (ts);
old_locus = gfc_current_locus; old_locus = gfc_current_locus;
m = match_derived_type_spec (ts);
if (m == MATCH_YES)
{
old_locus = gfc_current_locus;
if (gfc_match (" :: ") != MATCH_YES)
return MATCH_ERROR;
gfc_current_locus = old_locus;
/* Enfore F03:C401. */
if (ts->u.derived->attr.abstract)
{
gfc_error ("Derived type '%s' at %L may not be ABSTRACT",
ts->u.derived->name, &old_locus);
return MATCH_ERROR;
}
return MATCH_YES;
}
gfc_current_locus = old_locus;
if (gfc_match ("integer") == MATCH_YES) if (gfc_match ("integer") == MATCH_YES)
{ {
ts->type = BT_INTEGER; ts->type = BT_INTEGER;
...@@ -2766,6 +2747,25 @@ match_type_spec (gfc_typespec *ts) ...@@ -2766,6 +2747,25 @@ match_type_spec (gfc_typespec *ts)
goto kind_selector; goto kind_selector;
} }
m = match_derived_type_spec (ts);
if (m == MATCH_YES)
{
old_locus = gfc_current_locus;
if (gfc_match (" :: ") != MATCH_YES)
return MATCH_ERROR;
gfc_current_locus = old_locus;
/* Enfore F03:C401. */
if (ts->u.derived->attr.abstract)
{
gfc_error ("Derived type '%s' at %L may not be ABSTRACT",
ts->u.derived->name, &old_locus);
return MATCH_ERROR;
}
return MATCH_YES;
}
else if (m == MATCH_ERROR && gfc_match (" :: ") == MATCH_YES)
return MATCH_ERROR;
/* If a type is not matched, simply return MATCH_NO. */ /* If a type is not matched, simply return MATCH_NO. */
gfc_current_locus = old_locus; gfc_current_locus = old_locus;
return MATCH_NO; return MATCH_NO;
......
2010-07-21 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/44929
* Revert my commit r162325 for this PR.
2010-07-21 Jakub Jelinek <jakub@redhat.com> 2010-07-21 Jakub Jelinek <jakub@redhat.com>
PR debug/45015 PR debug/45015
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
allocate(t1 :: x(2)) allocate(t1 :: x(2))
allocate(t2 :: x(3)) allocate(t2 :: x(3))
allocate(t3 :: x(4)) allocate(t3 :: x(4))
allocate(tx :: x(5)) ! { dg-error "not a nonprocedure pointer or an allocatable variable" } allocate(tx :: x(5)) ! { dg-error "is not an accessible derived type" }
allocate(u0 :: x(6)) ! { dg-error "may not be ABSTRACT" } allocate(u0 :: x(6)) ! { dg-error "may not be ABSTRACT" }
allocate(v1 :: x(7)) ! { dg-error "is type incompatible with typespec" } allocate(v1 :: x(7)) ! { dg-error "is type incompatible with typespec" }
......
!
! { dg-do compile }
!
! PR fortran/44929
!
! The module is contributed by Satish.BD <bdsatish@gmail.com>.
! The subroutines are from Tobias Burnus and Steve Kargl.
!
module temp
type, abstract :: abst
!! empty
end type abst
type, extends(abst) :: real_type
!! empty
end type real_type
contains
function create(name) result(obj)
character(len=*), intent(in) :: name
class(abst), pointer :: obj
allocate(real_type :: obj)
end function create
end module temp
subroutine z
real(8), allocatable :: r8
allocate(real(kind=8) :: r8)
end subroutine z
subroutine y
real(8), allocatable :: r8
allocate(real(8) :: r8)
end subroutine y
! { dg-final { cleanup-modules "temp" } }
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