How to express the fact that arguments don't escape?

N.M. Maclaren nmm1@cam.ac.uk
Sat Aug 15 12:43:00 GMT 2009


On Aug 15 2009, Richard Guenther wrote:
>
>> Can the back-end distinguish traditional call by reference (as in Algol 
>> 60 and 68) from call by pointer value (and in C and C++)?  The former 
>> does
>
>No it can't.  Well - the backend has the DECL_BY_REFERENCE, but it's
>semantics are poorly documented.  Note that Fortran overly uses that
>predicate anyway - likely because it is also used for debug information
>annotation IIRC.

Thanks.  That's useful information for another reason - a very off-thread
one!

>> The difference could be useful for the C++ STL and possibly Ada, but I 
>> have forgotten the little of the latter that I once knew and so am not 
>> sure.
>
> I don't think so. You can take the address of even passed by value 
> objects in C++ if you make sure to remove all references in the 
> destructor that runs after the call completes. See some previous bugs we 
> had in this area.

That is precisely why I said the C++ STL and not C++! I agree that, in 
general, you can't. If I understand the standard correctly, there are quite 
a lot of places where that isn't relevant or falls foul of the "undefined 
because not defined" rule. If it IS allowed everywhere, it constrains the 
library far more than I thought was done.

Whether it's worth the hassle is another matter, of course ....


Regards,
Nick Maclaren,
University of Cambridge Computing Service,
New Museums Site, Pembroke Street, Cambridge CB2 3QH, England.
Email:  nmm1@cam.ac.uk
Tel.:  +44 1223 334761    Fax:  +44 1223 334679



More information about the Fortran mailing list