summaryrefslogtreecommitdiffstats
path: root/clang/test/ASTMerge/Inputs/struct1.c
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-02-11 19:21:55 +0000
committerDouglas Gregor <dgregor@apple.com>2010-02-11 19:21:55 +0000
commit7eeb59752a6085268eab20d8fb62b2a8dfbe7467 (patch)
treeda119e49cd70c80b91097c0fcd9ae48c8bf204c6 /clang/test/ASTMerge/Inputs/struct1.c
parent8a30324e51241c40dc5d6dcc4278d0fec528fd41 (diff)
downloadbcm5719-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.c20
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;
OpenPOWER on IntegriCloud