On Fri, Mar 11, 2011 at 06:04:45AM -0800, Nathan Froyd wrote: > On Fri, Mar 11, 2011 at 08:40:24AM -0500, Jason Merrill wrote: > > On 03/10/2011 11:23 PM, Nathan Froyd wrote: > > The C++ FE expects that we can check the TREE_TYPE of anything that > > appears as an expression, and uses IDENTIFIER_NODE to indicate a > > dependent name within templates. If you want to break TREE_TYPE on > > IDENTIFIER_NODE, you need to change the representation of dependent > > names so that we can continue to use TREE_TYPE on all expressions. > > I'm confused. Isn't this what the switching on IDENTIFIER_NODE in a > number of places is doing? (And any future places that g++/libstdc++ > didn't catch will be an ICE.) Or are you saying that you don't want the > switching and IDENTIFIER_NODEs should retain TREE_TYPE unless and until > somebody comes forth with a better design?
Or, alternatively, are you saying that blindly replacing TREE_TYPE with REAL_IDENTIFIER_TYPE_VALUE is wrong, semantically speaking, as TREE_TYPE and REAL_IDENTIFIER_TYPE_VALUE mean different things and should be kept separate, even if they happen to share the same storage? And if so, would moving that storage into lang_identifier be OK so long as the requisite occurrences of TREE_TYPE are audited and the appropriate name (REAL_IDENTIFIER_TYPE_VALUE vs. ...I don't know, EXPR_LIKE_TYPE) is used? -Nathan