diff options
author | Reid Kleckner <rnk@google.com> | 2019-07-30 17:58:22 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2019-07-30 17:58:22 +0000 |
commit | c0e275df3d5df8b8f400322d12d011f11eba39b9 (patch) | |
tree | 96ef1cb0bfb0eef180fa8bd18f561a7826c40b0e /clang/unittests/Lex/LexerTest.cpp | |
parent | 7cb03c0dc4f5672c43bc47d8c017268384321479 (diff) | |
download | bcm5719-llvm-c0e275df3d5df8b8f400322d12d011f11eba39b9.tar.gz bcm5719-llvm-c0e275df3d5df8b8f400322d12d011f11eba39b9.zip |
Remove cache for macro arg stringization
Summary:
The cache recorded the wrong expansion location for all but the first
stringization. It seems uncommon to stringize the same macro argument
multiple times, so this cache doesn't seem that important.
Fixes PR39942
Reviewers: vsk, rsmith
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D65428
llvm-svn: 367337
Diffstat (limited to 'clang/unittests/Lex/LexerTest.cpp')
-rw-r--r-- | clang/unittests/Lex/LexerTest.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp index 7b14f56201e..29eea42ad95 100644 --- a/clang/unittests/Lex/LexerTest.cpp +++ b/clang/unittests/Lex/LexerTest.cpp @@ -401,18 +401,21 @@ TEST_F(LexerTest, DontOverallocateStringifyArgs) { auto MacroArgsDeleter = [&PP](MacroArgs *M) { M->destroy(*PP); }; std::unique_ptr<MacroArgs, decltype(MacroArgsDeleter)> MA( MacroArgs::create(MI, ArgTokens, false, *PP), MacroArgsDeleter); - Token Result = MA->getStringifiedArgument(0, *PP, {}, {}); + auto StringifyArg = [&](int ArgNo) { + return MA->StringifyArgument(MA->getUnexpArgument(ArgNo), *PP, + /*Charify=*/false, {}, {}); + }; + Token Result = StringifyArg(0); EXPECT_EQ(tok::string_literal, Result.getKind()); EXPECT_STREQ("\"\\\"StrArg\\\"\"", Result.getLiteralData()); - Result = MA->getStringifiedArgument(1, *PP, {}, {}); + Result = StringifyArg(1); EXPECT_EQ(tok::string_literal, Result.getKind()); EXPECT_STREQ("\"5\"", Result.getLiteralData()); - Result = MA->getStringifiedArgument(2, *PP, {}, {}); + Result = StringifyArg(2); EXPECT_EQ(tok::string_literal, Result.getKind()); EXPECT_STREQ("\"'C'\"", Result.getLiteralData()); #if !defined(NDEBUG) && GTEST_HAS_DEATH_TEST - EXPECT_DEATH(MA->getStringifiedArgument(3, *PP, {}, {}), - "Invalid argument number!"); + EXPECT_DEATH(StringifyArg(3), "Invalid arg #"); #endif } |