[PATCH] PR fortran/46152 -- fix namespace pollution in type-spec matching
Jerry DeLisle
jvdelisle@frontier.com
Sun Oct 31 18:01:00 GMT 2010
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
More information about the Fortran
mailing list