http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46484
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2010-11-15
17:41:19 UTC ---
(In reply to comment #3)
> I think you may have trimmed too much of the condition.
> || (e->expr_type == EXPR_FUNCTION
> && e->symtree->n.sym->result == e->symtree->n.sym))
> Doesn't the second part apply to RESULT variables, ie.,
> funtion foo(x) result(this_should_be_a_variable(not_a function))
> I haven't checked if this where it would apply.
No, it doesn't. That still counts as EXPR_VARIABLE:
function f()
integer, allocatable :: f
print *, allocated(f)
Or at least: It still works with this patch. I find it more interesting that
external proc
print *, loc(proc)
still works.
Actually, the patch is incomplete as the following program still compiles:
integer, allocatable :: x
print *, allocated(f) ! <<< invalid, "f" is not a variable
contains
function f()
integer, allocatable :: f
print *, loc(f)
print *, allocated(f)
end function
end
I will update the patch - to reject the code above but such that it still
allows "loc(proc_name)".