> 
> Gabriel Dos Reis wrote:
> > C++ defines a notion of "class name for linkage purpose" -- that is a
> > notion used to define the One Definition Rule. 
> > In general the TYPE_NAME of TYPE_MAIN_VARIANT is the class name for
> > linkage purpose.  
> > The behaviour you reported on implements the rule 7.1.3/5:
> > 
> >    If the typedef declaration defines an unnamed class (or enum), the
> >    first typedef-name declared by the declaration
> >    to be that class type (or enum type) is used to denote the class type
> >    (or enum type) for linkage purposes only (3.5).
> > 
> 
> As a result of C types not having a "class name for linkage purposes", I
> am finding it difficult to define a "normalised" string for
> FUNCTION_TYPE nodes that represents the type in the same way across
> C/C++ for compatible function types.
> 
> Basically I need to save to a file a string that represents a
> FUNCTION_TYPE node that can be compared against other strings that also
> represent FUNCTION_TYPE nodes and if the two functions are compatible as
> would be returned by: function_types_compatible_p() then the strings
> should be equal.

Again C has different rules from C++.
In C, the following two TUs combined together are still valid code while in C++,
they are invalid.

tu1.c:

struct a
{
  int t;
};
void f(struct a);

---------------- cut ---------------------
tu2.c:

typedef struct
{
  int t;
}b;
void f(b a);
---------------- cut ---------------------

Thanks,
Andrew Pinski

Reply via email to