summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp8
-rw-r--r--clang/test/PCH/Inputs/chain-macro-override1.h1
-rw-r--r--clang/test/PCH/Inputs/chain-macro-override2.h1
-rw-r--r--clang/test/PCH/chain-macro-override.c3
4 files changed, 11 insertions, 2 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);
diff --git a/clang/test/PCH/Inputs/chain-macro-override1.h b/clang/test/PCH/Inputs/chain-macro-override1.h
index 4f9321de93b..d956396f916 100644
--- a/clang/test/PCH/Inputs/chain-macro-override1.h
+++ b/clang/test/PCH/Inputs/chain-macro-override1.h
@@ -2,3 +2,4 @@ void f() __attribute__((unavailable));
void g();
#define g() f()
#define h() f()
+#define x x
diff --git a/clang/test/PCH/Inputs/chain-macro-override2.h b/clang/test/PCH/Inputs/chain-macro-override2.h
index f279e2ad48c..e4bff77294f 100644
--- a/clang/test/PCH/Inputs/chain-macro-override2.h
+++ b/clang/test/PCH/Inputs/chain-macro-override2.h
@@ -2,3 +2,4 @@
#undef g
#undef h
#define h() g()
+int x;
diff --git a/clang/test/PCH/chain-macro-override.c b/clang/test/PCH/chain-macro-override.c
index 14478af35f1..449ed8c7a0c 100644
--- a/clang/test/PCH/chain-macro-override.c
+++ b/clang/test/PCH/chain-macro-override.c
@@ -6,8 +6,9 @@
// RUN: %clang_cc1 -emit-pch -o %t2 %S/Inputs/chain-macro-override2.h -include-pch %t1 -chained-pch
// RUN: %clang_cc1 -include-pch %t2 -fsyntax-only -verify %s
-void foo() {
+int foo() {
f();
g();
h();
+ return x;
}
OpenPOWER on IntegriCloud