Hi all,

I have just come across a small difference in the way the C an C++ front ends handle anonymous struct types which is causing me some grief. In particular the following code:

typedef struct
{
   int b1;
   int b2;
} Blah;

void Function(Blah* b) {}

When i get the Blah type in the function above (After removing the pointer) i then use TYPE_MAIN_VARIANT on it and do some special processing on the resulting main varient type. In the C++ front end TYPE_MAIN_VARIANT returns the type "Blah" where as in the C front end this returns an anonymous RECORD_TYPE node.

If i then change the code to look like:

typedef struct
{
   int b1;
   int b2;
} Blah, Another;


And apply the TYPE_MAIN_VARIANT on "Another", C++ returns Blah and C again returns the anonymous RECORD_TYPE. In my situation this is causing some grief as i need a consistent name for the main varient type across translation units. The C++ front end will allow me to do this by the fact that it returns "Blah" as the main varient, however the C front end does not.

Is there some way in the C front end of obtaining "Blah" from the anonymous RECORD_TYPE node?

I was thinking of looking at the first TYPE_NEXT_VARIANT of the anonymous RECORD_TYPE node which may give me "Blah", but I am not certain it will do so all the time... Does anyone know if this will work or if there is a better way?


Thanks,
Brendon.

Reply via email to