[llvm-branch-commits] [clang] 75ae4cd - Revert "[clang][analyzer] Format macro expansions (#156046)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Dec 16 04:02:13 PST 2025
Author: Balázs Benics
Date: 2025-12-16T12:02:09Z
New Revision: 75ae4cd157eb022249f459cd3fe981377104c40e
URL: https://github.com/llvm/llvm-project/commit/75ae4cd157eb022249f459cd3fe981377104c40e
DIFF: https://github.com/llvm/llvm-project/commit/75ae4cd157eb022249f459cd3fe981377104c40e.diff
LOG: Revert "[clang][analyzer] Format macro expansions (#156046)"
This reverts commit b10504f93f2e1fb81d51b30bbd17cbb973cca799.
Added:
Modified:
clang/include/clang/Analysis/MacroExpansionContext.h
clang/lib/Analysis/CMakeLists.txt
clang/lib/Analysis/MacroExpansionContext.cpp
clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
clang/test/Analysis/plist-macros-with-expansion-ctu.c
clang/test/Analysis/plist-macros-with-expansion.c
clang/test/Analysis/plist-macros-with-expansion.cpp
clang/unittests/Analysis/MacroExpansionContextTest.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Analysis/MacroExpansionContext.h b/clang/include/clang/Analysis/MacroExpansionContext.h
index b2ef4fffe5e44..2a27aba76656d 100644
--- a/clang/include/clang/Analysis/MacroExpansionContext.h
+++ b/clang/include/clang/Analysis/MacroExpansionContext.h
@@ -96,13 +96,6 @@ class MacroExpansionContext {
std::optional<StringRef>
getOriginalText(SourceLocation MacroExpansionLoc) const;
- /// \param MacroExpansionLoc Must be the expansion location of a macro.
- /// \return A formatted representation of the textual representation of the
- /// token sequence which was substituted in place of the macro.
- /// If no macro was expanded at that location, returns std::nullopt.
- std::optional<StringRef>
- getFormattedExpandedText(SourceLocation MacroExpansionLoc) const;
-
LLVM_DUMP_METHOD void dumpExpansionRangesToStream(raw_ostream &OS) const;
LLVM_DUMP_METHOD void dumpExpandedTextsToStream(raw_ostream &OS) const;
LLVM_DUMP_METHOD void dumpExpansionRanges() const;
@@ -113,7 +106,6 @@ class MacroExpansionContext {
using MacroExpansionText = SmallString<40>;
using ExpansionMap = llvm::DenseMap<SourceLocation, MacroExpansionText>;
using ExpansionRangeMap = llvm::DenseMap<SourceLocation, SourceLocation>;
- using FormattedExpansionMap = llvm::DenseMap<SourceLocation, std::string>;
/// Associates the textual representation of the expanded tokens at the given
/// macro expansion location.
@@ -123,9 +115,6 @@ class MacroExpansionContext {
/// substitution starting from a given macro expansion location.
ExpansionRangeMap ExpansionRanges;
- /// Caches formatted macro expansions keyed by expansion location.
- mutable FormattedExpansionMap FormattedExpandedTokens;
-
Preprocessor *PP = nullptr;
SourceManager *SM = nullptr;
const LangOptions &LangOpts;
diff --git a/clang/lib/Analysis/CMakeLists.txt b/clang/lib/Analysis/CMakeLists.txt
index 3e169de306b74..99a2ec684e149 100644
--- a/clang/lib/Analysis/CMakeLists.txt
+++ b/clang/lib/Analysis/CMakeLists.txt
@@ -40,7 +40,6 @@ add_clang_library(clangAnalysis
clangAST
clangASTMatchers
clangBasic
- clangFormat
clangLex
DEPENDS
diff --git a/clang/lib/Analysis/MacroExpansionContext.cpp b/clang/lib/Analysis/MacroExpansionContext.cpp
index 10b69b0c46685..b212b7f245792 100644
--- a/clang/lib/Analysis/MacroExpansionContext.cpp
+++ b/clang/lib/Analysis/MacroExpansionContext.cpp
@@ -7,7 +7,6 @@
//===----------------------------------------------------------------------===//
#include "clang/Analysis/MacroExpansionContext.h"
-#include "clang/Format/Format.h"
#include "llvm/Support/Debug.h"
#include <optional>
@@ -133,35 +132,6 @@ MacroExpansionContext::getOriginalText(SourceLocation MacroExpansionLoc) const {
LangOpts);
}
-std::optional<StringRef> MacroExpansionContext::getFormattedExpandedText(
- SourceLocation MacroExpansionLoc) const {
- std::optional<StringRef> ExpandedText = getExpandedText(MacroExpansionLoc);
- if (!ExpandedText)
- return std::nullopt;
-
- auto [It, Inserted] =
- FormattedExpandedTokens.try_emplace(MacroExpansionLoc, "");
- if (!Inserted)
- return StringRef(It->getSecond());
-
- clang::format::FormatStyle Style = clang::format::getLLVMStyle();
-
- std::string MacroCodeBlock = ExpandedText->str();
-
- std::vector<clang::tooling::Range> Ranges;
- Ranges.emplace_back(0, MacroCodeBlock.length());
-
- clang::tooling::Replacements Replacements = clang::format::reformat(
- Style, MacroCodeBlock, Ranges, "<macro-expansion>");
-
- llvm::Expected<std::string> Result =
- clang::tooling::applyAllReplacements(MacroCodeBlock, Replacements);
-
- It->getSecond() = Result ? std::move(*Result) : std::move(MacroCodeBlock);
-
- return StringRef(It->getSecond());
-}
-
void MacroExpansionContext::dumpExpansionRanges() const {
dumpExpansionRangesToStream(llvm::dbgs());
}
diff --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
index 4ea6208d549c3..3e3fff900cde8 100644
--- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
+++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
@@ -835,7 +835,7 @@ getExpandedMacro(SourceLocation MacroExpansionLoc,
const SourceManager &SM) {
if (auto CTUMacroExpCtx =
CTU.getMacroExpansionContextForSourceLocation(MacroExpansionLoc)) {
- return CTUMacroExpCtx->getFormattedExpandedText(MacroExpansionLoc);
+ return CTUMacroExpCtx->getExpandedText(MacroExpansionLoc);
}
- return MacroExpansions.getFormattedExpandedText(MacroExpansionLoc);
+ return MacroExpansions.getExpandedText(MacroExpansionLoc);
}
diff --git a/clang/test/Analysis/plist-macros-with-expansion-ctu.c b/clang/test/Analysis/plist-macros-with-expansion-ctu.c
index 9dd1b146e9d3c..956088cc0f675 100644
--- a/clang/test/Analysis/plist-macros-with-expansion-ctu.c
+++ b/clang/test/Analysis/plist-macros-with-expansion-ctu.c
@@ -66,7 +66,7 @@ void test3(void) {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>M</string>
-// CHECK-NEXT: <key>expansion</key><string>F1
+// CHECK-NEXT: <key>expansion</key><string>F1 (&X )</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
@@ -89,7 +89,7 @@ void test4(void) {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>M</string>
-// CHECK-NEXT: <key>expansion</key><string>F2
+// CHECK-NEXT: <key>expansion</key><string>F2 (&X )</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
diff --git a/clang/test/Analysis/plist-macros-with-expansion.c b/clang/test/Analysis/plist-macros-with-expansion.c
index 79227c5d60f4e..10c78938960aa 100644
--- a/clang/test/Analysis/plist-macros-with-expansion.c
+++ b/clang/test/Analysis/plist-macros-with-expansion.c
@@ -22,7 +22,7 @@ void test_strange_macro_expansion(void) {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>STRANGE_FN(path)</string>
-// CHECK-NEXT: <key>expansion</key><string>STRANGE_FN
+// CHECK-NEXT: <key>expansion</key><string>STRANGE_FN (path ,0)</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
diff --git a/clang/test/Analysis/plist-macros-with-expansion.cpp b/clang/test/Analysis/plist-macros-with-expansion.cpp
index d140026f820d8..d57bb0f2dd265 100644
--- a/clang/test/Analysis/plist-macros-with-expansion.cpp
+++ b/clang/test/Analysis/plist-macros-with-expansion.cpp
@@ -29,7 +29,7 @@ void nonFunctionLikeMacroTest() {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>SET_PTR_VAR_TO_NULL</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =0</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
@@ -53,7 +53,7 @@ void nonFunctionLikeNestedMacroTest() {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>SET_PTR_VAR_TO_NULL_WITH_NESTED_MACRO</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =0</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
@@ -84,7 +84,7 @@ void functionLikeMacroTest() {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL(&ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull
+// CHECK-NEXT: <key>expansion</key><string>setToNull (&ptr )</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: </array>
@@ -115,7 +115,7 @@ void functionLikeNestedMacroTest() {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL(&a)</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull
+// CHECK-NEXT: <key>expansion</key><string>setToNull (&a )</string>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
@@ -125,7 +125,9 @@ void functionLikeNestedMacroTest() {
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>DEREF(a)</string>
-// CHECK-NEXT: <key>expansion</key><string>{
+// CHECK-NEXT: <key>expansion</key><string>{int b ;b =5;}print (a );*a </string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
//===----------------------------------------------------------------------===//
// Tests for undefining and/or redifining macros.
@@ -147,12 +149,14 @@ void undefinedMacroByTheEndOfParsingTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>139</integer>
+// CHECK-NEXT: <key>line</key><integer>141</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>WILL_UNDEF_SET_NULL_TO_PTR(ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL(ptr) \
/* Nothing */
@@ -176,12 +180,14 @@ void macroRedefinedMultipleTimesTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>165</integer>
+// CHECK-NEXT: <key>line</key><integer>169</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>WILL_REDIFINE_MULTIPLE_TIMES_SET_TO_NULL(ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define WILL_UNDEF_SET_NULL_TO_PTR_2(ptr) \
ptr = nullptr;
@@ -200,12 +206,14 @@ void undefinedMacroInsideAnotherMacroTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>194</integer>
+// CHECK-NEXT: <key>line</key><integer>200</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>PASS_PTR_TO_MACRO_THAT_WILL_BE_UNDEFD(ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#undef WILL_UNDEF_SET_NULL_TO_PTR_2
@@ -235,12 +243,14 @@ void macroArgContainsCommaInStringTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>229</integer>
+// CHECK-NEXT: <key>line</key><integer>237</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this , cause a crash?")</string>
-// CHECK-NEXT: <key>expansion</key><string>a
+// CHECK-NEXT: <key>expansion</key><string>a =0;print ("Will this , cause a crash?")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void macroArgContainsLParenInStringTest() {
int *a;
@@ -253,12 +263,14 @@ void macroArgContainsLParenInStringTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>247</integer>
+// CHECK-NEXT: <key>line</key><integer>257</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ( cause a crash?")</string>
-// CHECK-NEXT: <key>expansion</key><string>a
+// CHECK-NEXT: <key>expansion</key><string>a =0;print ("Will this ( cause a crash?")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void macroArgContainsRParenInStringTest() {
int *a;
@@ -271,12 +283,14 @@ void macroArgContainsRParenInStringTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>265</integer>
+// CHECK-NEXT: <key>line</key><integer>277</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ) cause a crash?")</string>
-// CHECK-NEXT: <key>expansion</key><string>a
+// CHECK-NEXT: <key>expansion</key><string>a =0;print ("Will this ) cause a crash?")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define CALL_FUNCTION(funcCall) \
funcCall
@@ -294,12 +308,14 @@ void macroArgContainsLParenRParenTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>288</integer>
+// CHECK-NEXT: <key>line</key><integer>302</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_FUNCTION(setToNull(&a))</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull
+// CHECK-NEXT: <key>expansion</key><string>setToNull (&a )</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void setToNullAndPrint(int **vptr, const char *str) {
setToNull(vptr);
@@ -317,12 +333,14 @@ void macroArgContainsCommaLParenRParenTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>311</integer>
+// CHECK-NEXT: <key>line</key><integer>327</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_FUNCTION(setToNullAndPrint(&a, "Hello!"))</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint
+// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint (&a ,"Hello!")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define CALL_FUNCTION_WITH_TWO_PARAMS(funcCall, param1, param2) \
funcCall(param1, param2)
@@ -338,12 +356,14 @@ void macroArgContainsCommaLParenRParenTest2() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>332</integer>
+// CHECK-NEXT: <key>line</key><integer>350</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_FUNCTION_WITH_TWO_PARAMS(setToNullAndPrint, &a, "Hello!")</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint
+// CHECK-NEXT: <key>expansion</key><string>setToNullAndPrint (&a ,"Hello!")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define CALL_LAMBDA(l) \
l()
@@ -362,22 +382,24 @@ void commaInBracketsTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>356</integer>
+// CHECK-NEXT: <key>line</key><integer>376</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_LAMBDA(([&ptr, str] () mutable { TO_NULL(&ptr); }))</string>
-// CHECK-NEXT: <key>expansion</key><string>(
-// CHECK: </dict>
+// CHECK-NEXT: <key>expansion</key><string>([&ptr ,str ]()mutable {setToNull (&ptr );})()</string>
+// CHECK-NEXT: </dict>
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>356</integer>
+// CHECK-NEXT: <key>line</key><integer>376</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_LAMBDA(([&ptr, str] () mutable { TO_NULL(&ptr); }))</string>
-// CHECK-NEXT: <key>expansion</key><string>(
+// CHECK-NEXT: <key>expansion</key><string>([&ptr ,str ]()mutable {setToNull (&ptr );})()</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define PASTE_CODE(code) \
code
@@ -399,7 +421,7 @@ void commaInBracesTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>386</integer>
+// CHECK-NEXT: <key>line</key><integer>408</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
@@ -412,7 +434,9 @@ void commaInBracesTest() {
// CHECK-NEXT: int *ptr = nullptr;
// CHECK-NEXT: *ptr = 5;
// CHECK-NEXT: })</string>
-// CHECK-NEXT: <key>expansion</key><string>{
+// CHECK-NEXT: <key>expansion</key><string>{int *ptr =nullptr ;*ptr =5;}</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
// Example taken from
// https://gcc.gnu.org/onlinedocs/cpp/Macro-Arguments.html#Macro-Arguments.
@@ -433,12 +457,14 @@ void emptyParamTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>427</integer>
+// CHECK-NEXT: <key>line</key><integer>451</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>POTENTIALLY_EMPTY_PARAM(,ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>;
+// CHECK-NEXT: <key>expansion</key><string>;ptr =nullptr </string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define NESTED_EMPTY_PARAM(a, b) \
POTENTIALLY_EMPTY_PARAM(a, b);
@@ -456,12 +482,14 @@ void nestedEmptyParamTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>450</integer>
+// CHECK-NEXT: <key>line</key><integer>476</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>NESTED_EMPTY_PARAM(, ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>;
+// CHECK-NEXT: <key>expansion</key><string>;ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO(func, param) \
CALL_FUNCTION(func(param))
@@ -477,12 +505,14 @@ void lParenRParenInNestedMacro() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>471</integer>
+// CHECK-NEXT: <key>line</key><integer>499</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CALL_FUNCTION_WITH_ONE_PARAM_THROUGH_MACRO(setToNull, &ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>setToNull
+// CHECK-NEXT: <key>expansion</key><string>setToNull (&ptr )</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
//===----------------------------------------------------------------------===//
// Tests for variadic macro arguments.
@@ -506,12 +536,14 @@ void variadicMacroArgumentTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>500</integer>
+// CHECK-NEXT: <key>line</key><integer>530</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>VARIADIC_SET_TO_NULL(ptr, 1, 5, "haha!")</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =nullptr ;variadicFunc (1,5,"haha!")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void variadicMacroArgumentWithoutAnyArgumentTest() {
int *ptr;
@@ -526,12 +558,14 @@ void variadicMacroArgumentWithoutAnyArgumentTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>520</integer>
+// CHECK-NEXT: <key>line</key><integer>552</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>VARIADIC_SET_TO_NULL(ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>ptr
+// CHECK-NEXT: <key>expansion</key><string>ptr =nullptr ;variadicFunc ()</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
//===----------------------------------------------------------------------===//
// Tests for # and ##.
@@ -552,12 +586,14 @@ void hashHashOperatorTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>546</integer>
+// CHECK-NEXT: <key>line</key><integer>580</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>DECLARE_FUNC_AND_SET_TO_NULL(whatever, ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>void generated_whatever
+// CHECK-NEXT: <key>expansion</key><string>void generated_whatever ();ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void macroArgContainsHashHashInStringTest() {
int *a;
@@ -570,12 +606,14 @@ void macroArgContainsHashHashInStringTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>564</integer>
+// CHECK-NEXT: <key>line</key><integer>600</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this ## cause a crash?")</string>
-// CHECK-NEXT: <key>expansion</key><string>a
+// CHECK-NEXT: <key>expansion</key><string>a =0;print ("Will this ## cause a crash?")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define PRINT_STR(str, ptr) \
print(#str); \
@@ -592,12 +630,14 @@ void hashOperatorTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>586</integer>
+// CHECK-NEXT: <key>line</key><integer>624</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>PRINT_STR(Hello, ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>print
+// CHECK-NEXT: <key>expansion</key><string>print ("Hello");ptr =nullptr </string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void macroArgContainsHashInStringTest() {
int *a;
@@ -610,12 +650,14 @@ void macroArgContainsHashInStringTest() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>604</integer>
+// CHECK-NEXT: <key>line</key><integer>644</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>TO_NULL_AND_PRINT(a, "Will this # cause a crash?")</string>
-// CHECK-NEXT: <key>expansion</key><string>a
+// CHECK-NEXT: <key>expansion</key><string>a =0;print ("Will this # cause a crash?")</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
//===----------------------------------------------------------------------===//
// Tests for more complex macro expansions.
@@ -666,12 +708,14 @@ void testVeryComplexAlgorithm() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>656</integer>
+// CHECK-NEXT: <key>line</key><integer>698</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>EUCLIDEAN_ALGORITHM(A, B)</string>
-// CHECK-NEXT: <key>expansion</key><string>if
+// CHECK-NEXT: <key>expansion</key><string>if (A <0){A =-A ;}if (B <0){B =-B ;}return B /(B -B );</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define YET_ANOTHER_SET_TO_NULL(x, y, z) \
print((void *) x); \
@@ -692,12 +736,14 @@ void test() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>686</integer>
+// CHECK-NEXT: <key>line</key><integer>730</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>YET_ANOTHER_SET_TO_NULL(5, DO_NOTHING2("Remember the Vasa"), ptr)</string>
-// CHECK-NEXT: <key>expansion</key><string>print
+// CHECK-NEXT: <key>expansion</key><string>print ((void *)5);print ((void *)"Remember the Vasa");ptr =nullptr ;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
int garbage_value;
@@ -715,12 +761,14 @@ void recursiveMacroUser() {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>708</integer>
+// CHECK-NEXT: <key>line</key><integer>754</integer>
// CHECK-NEXT: <key>col</key><integer>7</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>value</string>
-// CHECK-NEXT: <key>expansion</key><string>garbage_value
+// CHECK-NEXT: <key>expansion</key><string>garbage_value </string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define FOO(x) int foo() { return x; }
#define APPLY_ZERO1(function) function(0)
@@ -733,12 +781,14 @@ void useZeroApplier1() { (void)(1 / foo()); } // expected-warning{{Division by z
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>728</integer>
+// CHECK-NEXT: <key>line</key><integer>776</integer>
// CHECK-NEXT: <key>col</key><integer>1</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>APPLY_ZERO1(FOO)</string>
-// CHECK-NEXT: <key>expansion</key><string>int foo
+// CHECK-NEXT: <key>expansion</key><string>int foo (){return 0;}</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define BAR(x) int bar() { return x; }
#define APPLY_ZERO2 BAR(0)
@@ -751,12 +801,14 @@ void useZeroApplier2() { (void)(1 / bar()); } // expected-warning{{Division by z
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>746</integer>
+// CHECK-NEXT: <key>line</key><integer>796</integer>
// CHECK-NEXT: <key>col</key><integer>1</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>APPLY_ZERO2</string>
-// CHECK-NEXT: <key>expansion</key><string>int
+// CHECK-NEXT: <key>expansion</key><string>int bar (){return 0;}</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void foo(int &x, const char *str);
@@ -775,12 +827,14 @@ void mulitpleParamsResolveToVA_ARGS(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>769</integer>
+// CHECK-NEXT: <key>line</key><integer>821</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>DISPATCH(x, "LF1M healer")</string>
-// CHECK-NEXT: <key>expansion</key><string>foo
+// CHECK-NEXT: <key>expansion</key><string>foo (x ,"LF1M healer");x =0;;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void variadicCFunction(int &x, const char *str, ...);
@@ -798,12 +852,14 @@ void concatVA_ARGS(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>792</integer>
+// CHECK-NEXT: <key>line</key><integer>846</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CONCAT_VA_ARGS(x, "You need to construct additional pylons.", 'c', 9)</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction
+// CHECK-NEXT: <key>expansion</key><string>variadicCFunction (x ,"You need to construct additional pylons.",'c',9);x =0;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void concatVA_ARGSEmpty(void) {
int x = 1;
@@ -816,12 +872,14 @@ void concatVA_ARGSEmpty(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>810</integer>
+// CHECK-NEXT: <key>line</key><integer>866</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>CONCAT_VA_ARGS(x, "You need to construct")</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction
+// CHECK-NEXT: <key>expansion</key><string>variadicCFunction (x ,"You need to construct");x =0;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
#define STRINGIFIED_VA_ARGS(i, fmt, ...) variadicCFunction(i, fmt, #__VA_ARGS__); \
i = 0;
@@ -837,12 +895,14 @@ void stringifyVA_ARGS(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>831</integer>
+// CHECK-NEXT: <key>line</key><integer>889</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>STRINGIFIED_VA_ARGS(x, "Additional supply depots required.", 'a', 10)</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction
+// CHECK-NEXT: <key>expansion</key><string>variadicCFunction (x ,"Additional supply depots required.","'a', 10");x =0;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
void stringifyVA_ARGSEmpty(void) {
int x = 1;
@@ -855,12 +915,14 @@ void stringifyVA_ARGSEmpty(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>849</integer>
+// CHECK-NEXT: <key>line</key><integer>909</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>STRINGIFIED_VA_ARGS(x, "Additional supply depots required.")</string>
-// CHECK-NEXT: <key>expansion</key><string>variadicCFunction
+// CHECK-NEXT: <key>expansion</key><string>variadicCFunction (x ,"Additional supply depots required.","");x =0;</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
// bz44493: Support GNU-style named variadic arguments in plister
#define BZ44493_GNUVA(i, args...) --(i);
@@ -878,9 +940,11 @@ int bz44493(void) {
// CHECK-NEXT: <dict>
// CHECK-NEXT: <key>location</key>
// CHECK-NEXT: <dict>
-// CHECK-NEXT: <key>line</key><integer>871</integer>
+// CHECK-NEXT: <key>line</key><integer>933</integer>
// CHECK-NEXT: <key>col</key><integer>3</integer>
// CHECK-NEXT: <key>file</key><integer>0</integer>
// CHECK-NEXT: </dict>
// CHECK-NEXT: <key>name</key><string>BZ44493_GNUVA(a, "arg2")</string>
-// CHECK-NEXT: <key>expansion</key><string>--(a
+// CHECK-NEXT: <key>expansion</key><string>--(a );</string>
+// CHECK-NEXT: </dict>
+// CHECK-NEXT: </array>
diff --git a/clang/unittests/Analysis/MacroExpansionContextTest.cpp b/clang/unittests/Analysis/MacroExpansionContextTest.cpp
index a9873a326240f..25a76edbfdc49 100644
--- a/clang/unittests/Analysis/MacroExpansionContextTest.cpp
+++ b/clang/unittests/Analysis/MacroExpansionContextTest.cpp
@@ -405,43 +405,6 @@ TEST_F(MacroExpansionContextTest, UnbalacedParenthesis) {
EXPECT_EQ("f(f(1))", *Ctx->getOriginalText(at(13, 12)));
}
-TEST_F(MacroExpansionContextTest, FormattedExpandedTextNoneWhenNoExpansion) {
- const auto Ctx = getMacroExpansionContextFor(R"code(
- #define UNUSED 1
- int value = 0;
- )code");
- EXPECT_FALSE(Ctx->getFormattedExpandedText(at(3, 3)).has_value());
-}
-
-TEST_F(MacroExpansionContextTest,
- FormattedExpandedTextKeepsOriginalWhenStable) {
- const auto Ctx = getMacroExpansionContextFor(R"code(
- #define ANSWER 42
- int life = ANSWER;
- )code");
-
- const auto Expanded = Ctx->getExpandedText(at(3, 14));
- ASSERT_TRUE(Expanded.has_value());
-
- EXPECT_EQ(*Expanded, *Ctx->getFormattedExpandedText(at(3, 14)));
-}
-
-TEST_F(MacroExpansionContextTest, FormattedExpandedTextChangesWhenFormatting) {
- const auto Ctx = getMacroExpansionContextFor(R"code(
- #define ADD(x, y) (x+y* x)
- int result = ADD(1,2);
- )code");
-
- const auto Expanded = Ctx->getExpandedText(at(3, 16));
- ASSERT_TRUE(Expanded.has_value());
-
- const auto Formatted = Ctx->getFormattedExpandedText(at(3, 16));
- ASSERT_TRUE(Formatted.has_value());
-
- EXPECT_EQ(*Formatted, *Ctx->getFormattedExpandedText(at(3, 16)));
- EXPECT_NE(*Expanded, *Formatted);
-}
-
} // namespace
} // namespace analysis
} // namespace clang
More information about the llvm-branch-commits
mailing list