summaryrefslogtreecommitdiffstats
path: root/clang/lib/Frontend/ASTMerge.cpp
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/lib/Frontend/ASTMerge.cpp
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/lib/Frontend/ASTMerge.cpp')
-rw-r--r--clang/lib/Frontend/ASTMerge.cpp13
1 files changed, 4 insertions, 9 deletions
diff --git a/clang/lib/Frontend/ASTMerge.cpp b/clang/lib/Frontend/ASTMerge.cpp
index fd34ddae12b..fbb87669d9a 100644
--- a/clang/lib/Frontend/ASTMerge.cpp
+++ b/clang/lib/Frontend/ASTMerge.cpp
@@ -37,21 +37,16 @@ void ASTMergeAction::ExecuteAction() {
CI.getDiagnostics().SetArgToStringFn(&FormatASTNodeDiagnosticArgument,
&CI.getASTContext());
for (unsigned I = 0, N = ASTFiles.size(); I != N; ++I) {
- Diagnostic ASTDiags(CI.getDiagnostics().getClient());
-
- ASTUnit *Unit = ASTUnit::LoadFromPCHFile(ASTFiles[I], ASTDiags,
+ ASTUnit *Unit = ASTUnit::LoadFromPCHFile(ASTFiles[I], CI.getDiagnostics(),
false, true);
if (!Unit)
continue;
- ASTDiags.SetArgToStringFn(&FormatASTNodeDiagnosticArgument,
- &Unit->getASTContext());
- ASTImporter Importer(CI.getASTContext(),
+ ASTImporter Importer(CI.getDiagnostics(),
+ CI.getASTContext(),
CI.getFileManager(),
- CI.getDiagnostics(),
Unit->getASTContext(),
- Unit->getFileManager(),
- ASTDiags);
+ Unit->getFileManager());
TranslationUnitDecl *TU = Unit->getASTContext().getTranslationUnitDecl();
for (DeclContext::decl_iterator D = TU->decls_begin(),
OpenPOWER on IntegriCloud