This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] PR fortran/46152 -- fix namespace pollution in type-spec matching


On 10/31/2010 07:37 AM, Steve Kargl wrote:
On Sun, Oct 31, 2010 at 11:54:47AM +0100, Janus Weil wrote:

What do you think about adding the following hunk in match.c to improve the error message for this case:


@@ -2874,7 +2861,15 @@ gfc_match_allocate (void) if (m == MATCH_ERROR) goto cleanup; else if (m == MATCH_NO) - ts.type = BT_UNKNOWN; + { + char name[GFC_MAX_SYMBOL_LEN + 1]; + if (gfc_match ("%n :: ", name) == MATCH_YES) + { + gfc_error ("Error in type-spec at %L",&old_locus); + goto cleanup; + } + ts.type = BT_UNKNOWN; + } else { if (gfc_match (" :: ") == MATCH_YES)


so that the test case becomes:



Index: gcc/testsuite/gfortran.dg/allocate_derived_1.f90 =================================================================== --- gcc/testsuite/gfortran.dg/allocate_derived_1.f90 (revision 166088) +++ gcc/testsuite/gfortran.dg/allocate_derived_1.f90 (working copy) @@ -32,7 +32,7 @@ allocate(t1 :: x(2)) allocate(t2 :: x(3)) allocate(t3 :: x(4)) - allocate(tx :: x(5)) ! { dg-error "is not an accessible derived type" } + allocate(tx :: x(5)) ! { dg-error "Error in type-spec" } allocate(u0 :: x(6)) ! { dg-error "may not be ABSTRACT" } allocate(v1 :: x(7)) ! { dg-error "is type incompatible with typespec" }


I think this would be much better than complaining about something being wrong with the allocate-object, since the colons indicate that the (optional) type-spec is present, so we might as well make use of this information.

With this change the patch is ok from my side.


Thanks. Your suggestion is exactly what was needed! I could not come up with what I considered a clean solution for

module a
    type rael
      integer i
    end type rael
    type b
      real x
    end type b
end module a

program c
    use a, only : b
    real, allocatable :: x(:)
    allocate(rael :: x(1))    ! inaccessible type or a typographical error?
end program c


You are approved to commit now if regression testing passes. No need to wait.


Jerry


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]