summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/ASTWriter.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-10-01 01:03:07 +0000
committerDouglas Gregor <dgregor@apple.com>2010-10-01 01:03:07 +0000
commiteb114da5068e363e2c54fcffc550b137c56f1e7d (patch)
treedc6b94747a22ef3e18d74eb7e7f1f5b1e0dff596 /clang/lib/Serialization/ASTWriter.cpp
parent220d971aced233ef55e1bf881426296f089710cc (diff)
downloadbcm5719-llvm-eb114da5068e363e2c54fcffc550b137c56f1e7d.tar.gz
bcm5719-llvm-eb114da5068e363e2c54fcffc550b137c56f1e7d.zip
When an identifier that has a macro definition in the original PCH
file is somehow changed in a chained PCH file, make sure that we write out the macro definition. Fixes part of <rdar://problem/8499034>. llvm-svn: 115259
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index 3f537d21ab5..f5f96ecd24e 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -1276,7 +1276,13 @@ void ASTWriter::WritePreprocessor(const Preprocessor &PP) {
// Don't emit builtin macros like __LINE__ to the AST file unless they have
// been redefined by the header (in which case they are not isBuiltinMacro).
// Also skip macros from a AST file if we're chaining.
- if (MI->isBuiltinMacro() || (Chain && MI->isFromAST()))
+
+ // FIXME: There is a (probably minor) optimization we could do here, if
+ // the macro comes from the original PCH but the identifier comes from a
+ // chained PCH, by storing the offset into the original PCH rather than
+ // writing the macro definition a second time.
+ if (MI->isBuiltinMacro() ||
+ (Chain && I->first->isFromAST() && MI->isFromAST()))
continue;
AddIdentifierRef(I->first, Record);
OpenPOWER on IntegriCloud