This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] PR fortran/46152 -- fix namespace pollution in type-spec matching
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
--
Steve