aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests/Lex/LexerTest.cpp
diff options
context:
space:
mode:
authorKadir Cetinkaya <kadircet@google.com>2020-04-22 16:37:27 +0200
committerKadir Cetinkaya <kadircet@google.com>2020-04-22 21:01:52 +0200
commit411a254af3ff5dd05e6c522cc7bccdf043967070 (patch)
tree3f28072a7932a2a48c4e9462a9be964967cdd6a6 /clang/unittests/Lex/LexerTest.cpp
parent7d1ee639cb9efea364bec90afe4d1161ec624a7f (diff)
downloadllvm-411a254af3ff5dd05e6c522cc7bccdf043967070.zip
llvm-411a254af3ff5dd05e6c522cc7bccdf043967070.tar.gz
llvm-411a254af3ff5dd05e6c522cc7bccdf043967070.tar.bz2
[clang] Make sure argument expansion locations are correct in presence of predefined buffer
Summary: Macro argument expansion logic relies on skipping file IDs that created as a result of an include. Unfortunately it fails to do that for predefined buffer since it doesn't have a valid insertion location. As a result of that any file ID created for an include inside the predefined buffers breaks the traversal logic in SourceManager::computeMacroArgsCache. To fix this issue we first record number of created FIDs for predefined buffer, and then skip them explicitly in source manager. Another solution would be to just give predefined buffers a valid source location, but it is unclear where that should be.. Reviewers: sammccall Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78649
Diffstat (limited to 'clang/unittests/Lex/LexerTest.cpp')
-rw-r--r--clang/unittests/Lex/LexerTest.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp
index c68eed9..4cdabe0 100644
--- a/clang/unittests/Lex/LexerTest.cpp
+++ b/clang/unittests/Lex/LexerTest.cpp
@@ -556,4 +556,17 @@ TEST_F(LexerTest, FindNextToken) {
EXPECT_THAT(GeneratedByNextToken, ElementsAre("abcd", "=", "0", ";", "int",
"xyz", "=", "abcd", ";"));
}
+
+TEST_F(LexerTest, CreatedFIDCountForPredefinedBuffer) {
+ TrivialModuleLoader ModLoader;
+ auto PP = CreatePP("", ModLoader);
+ while (1) {
+ Token tok;
+ PP->Lex(tok);
+ if (tok.is(tok::eof))
+ break;
+ }
+ EXPECT_EQ(SourceMgr.getNumCreatedFIDsForFileID(PP->getPredefinesFileID()),
+ 1U);
+}
} // anonymous namespace