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/lib/Frontend/ASTMerge.cpp | |
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/lib/Frontend/ASTMerge.cpp')
-rw-r--r-- | clang/lib/Frontend/ASTMerge.cpp | 13 |
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(), |