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.