This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] rvalue reference implementation for C++0x


On Sat, 2007-03-10 at 23:16 -0800, Andrew Pinski wrote:
> On 3/10/07, Russell Yanofsky <russ@yanofsky.org> wrote:
> > L-value references are already part of middle end code and I don't see
> > why r-value references should be different. Are there actually other
> > languages besides C++ which use REFERENCE_TYPE nodes?
> 
> Yes, the fortran front-end uses REFERENCE_TYPE for all argument types
> as in Fortran every function argument is passed via reference and not
> via value.  The main reason why Fortran uses it is so they get the
> correct debugging information for arguments.
> 
> Ada also uses REFERENCE_TYPE but I don't know what for.  You know if
> you did a quick search for build_reference_type in */*.c you would
> have found these uses :).

Well yeah. And if I would have tried to change the signature of the
existing build_reference_* functions, I certainly would have bumped into
them. I actually think it's pretty neat how the same concept has been
reused across the different language implementations. And I can see now
how it is a little presumptuous for me to add a C++ specific flag into
this shared type node. This doesn't change the fact that for the
implementation of the rvalue reference feature, it is much cleaner to be
able to distinguish between different kinds of REFERENCE_TYPE nodes by
looking at the nodes themselves, instead of keeping information in some
external data structure or encoding it in the ordering of a linked list.

Maybe the thing to do here is to generalize the concept of there being
different kinds of reference types. Doing this would be as simple as
renaming the TYPE_REF_IS_RVALUE macro to TYPE_REF_KIND. That way, any of
the front ends would be able to easily distinguish between different
kinds of references. The C++ front end would use this to distinguish
between r- and l-value references, and if they find new uses for
REFERENCE_TYPE nodes in the Fortran or Ada front ends, being able to
distinguish between different kinds of reference types could prove
useful there as well.

> In fact there are some people who want to get rid of REFERENCE_TYPE
> and make it a flag off of POINTER_TYPE.

You could count me among them, though I think the benefits would be
pretty minimal.

-- 
-  Russell Yanofsky (PGP ID: 0x5FAA0216)
-  http://russ.yanofsky.org/
--

Attachment: signature.asc
Description: This is a digitally signed message part


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]