[patch, RFC] Add EXEC_COMPCALL to front end expression walker

Janus Weil janus@gcc.gnu.org
Sat Feb 12 13:04:00 GMT 2011


Hi Thomas,

> the attached patch adds handling for EXEC_COMPCALL to the front end
> expression walker.

here is the deal about EXEC_COMPCALL: Basically it's used, analogous
to EXEC_CALL, for calls to type-bound procedures, like

CALL obj%tbp(...)

However, just like EXEC_CALL_PPC, which is its pendant for procedure
pointer component calls, it's only used as a "temporary" statement
descriptor, in the sense that it is being transformed into an
EXEC_CALL at resolution stage. That is also why you will find no
handling of it in trans_*.



> I tried finding a use of EXEC_COMPCALL in the testsuite by placing a
> gcc_assert((*c)->op != EXEC_COMPCALL) in the front end walker.  I then
> ran the testsuite in the hope of ICEing on a dg-do run test, but I only
> found EXEC_COMPCALL in dg-do compile tests with syntax errors this way.

... which is probably because in case of an error the EXEC_COMPCALL
will survive the resolution stage, which it normally does not do.


> Comments?  Ideas?  Should I just commit this?

In view of my above comments, I don't think it is needed. All
EXEC_COMPCALL statements are usually transformed into other stuff
(like EXEC_CALL) at resolution stage, and should not end up in the
front-end passes at all.

So, instead of the patch you proposed, one could maybe just add a
comment in frontend-passes.c, stating this fact.

Cheers,
Janus



More information about the Fortran mailing list