diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-02-11 19:21:55 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-02-11 19:21:55 +0000 |
commit | 7eeb59752a6085268eab20d8fb62b2a8dfbe7467 (patch) | |
tree | da119e49cd70c80b91097c0fcd9ae48c8bf204c6 /clang/test/ASTMerge/Inputs/struct1.c | |
parent | 8a30324e51241c40dc5d6dcc4278d0fec528fd41 (diff) | |
download | bcm5719-llvm-7eeb59752a6085268eab20d8fb62b2a8dfbe7467.tar.gz bcm5719-llvm-7eeb59752a6085268eab20d8fb62b2a8dfbe7467.zip |
When AST merging for record declarations fails, warn about the
incompatibility and show where the structural differences are. For
example:
struct1.c:36:8: warning: type 'struct S7' has incompatible definitions
in different translation units
struct S7 { int i : 8; unsigned j : 8; } x7;
^
struct1.c:36:33: note: bit-field 'j' with type 'unsigned int' and length 8 here
struct S7 { int i : 8; unsigned j : 8; } x7;
^
struct2.c:33:33: note: bit-field 'j' with type 'unsigned int' and length 16 here
struct S7 { int i : 8; unsigned j : 16; } x7;
^
There are a few changes to make this work:
- ASTImporter now has only a single Diagnostic object, not multiple
diagnostic objects. Otherwise, having a warning/error printed via
one Diagnostic and its note printed on the other Diagnostic could
cause the note to be suppressed.
- Implemented import functionality for IntegerLiteral (along with
general support for statements and expressions)
llvm-svn: 95900
Diffstat (limited to 'clang/test/ASTMerge/Inputs/struct1.c')
-rw-r--r-- | clang/test/ASTMerge/Inputs/struct1.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/ASTMerge/Inputs/struct1.c b/clang/test/ASTMerge/Inputs/struct1.c index 381f00a0a63..5743fe0f487 100644 --- a/clang/test/ASTMerge/Inputs/struct1.c +++ b/clang/test/ASTMerge/Inputs/struct1.c @@ -1,6 +1,7 @@ typedef int Int; typedef float Float; +// Matches struct S0 { Int field1; Float field2; @@ -8,9 +9,28 @@ struct S0 { struct S0 x0; +// Mismatch in field type struct S1 { Int field1; int field2; }; struct S1 x1; + +// Mismatch in tag kind. +struct S2 { int i; float f; } x2; + +// Missing fields +struct S3 { int i; float f; double d; } x3; + +// Extra fields +struct S4 { int i; } x4; + +// Bit-field matches +struct S5 { int i : 8; unsigned j : 8; } x5; + +// Bit-field mismatch +struct S6 { int i : 8; unsigned j : 8; } x6; + +// Bit-field mismatch +struct S7 { int i : 8; unsigned j : 8; } x7; |