
comparing their types under the assumption that they are equivalent, rather than importing the types and then checking for compatibility. A few minor tweaks here: - Teach structural matching to handle compatibility between function types with prototypes and those without prototypes. - Teach structural matching that an incomplete record decl is the same as any other record decl with the same name. - Keep track of pairs of declarations that we have already checked (but failed to find as structurally matching), so we don't emit diagnostics repeatedly. - When importing a typedef of an anonymous tag, be sure to link the imported tag type to its typedef. With these changes, we survive a repeated import of <stdlib.h> and <stdio.h>. Alas, the ASTNodeImporter is getting a little grotty. llvm-svn: 96298
43 lines
524 B
C
43 lines
524 B
C
// Matching
|
|
enum E1 {
|
|
E1Enumerator1,
|
|
E1Enumerator2 = 3,
|
|
E1Enumerator3
|
|
} x1;
|
|
|
|
// Value mismatch
|
|
enum E2 {
|
|
E2Enumerator1,
|
|
E2Enumerator2 = 3,
|
|
E2Enumerator3
|
|
} x2;
|
|
|
|
// Name mismatch
|
|
enum E3 {
|
|
E3Enumerator1,
|
|
E3Enumerator2 = 3,
|
|
E3Enumerator3
|
|
} x3;
|
|
|
|
// Missing enumerator
|
|
enum E4 {
|
|
E4Enumerator1,
|
|
E4Enumerator2,
|
|
E4Enumerator3
|
|
} x4;
|
|
|
|
// Extra enumerator
|
|
enum E5 {
|
|
E5Enumerator1,
|
|
E5Enumerator2,
|
|
E5Enumerator3
|
|
} x5;
|
|
|
|
// Matching, with typedef
|
|
typedef enum {
|
|
E6Enumerator1,
|
|
E6Enumerator2
|
|
} E6;
|
|
|
|
E6 x6;
|