[clang-tools-extra] 34c85ed - [clang-reorder-fields] Use expanded location for macros (#142147)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Jun 15 15:07:55 PDT 2025
Author: Vladimir Vuksanovic
Date: 2025-06-15T18:07:51-04:00
New Revision: 34c85ed2bc1adfa375745db6de7f62d350a8f768
URL: https://github.com/llvm/llvm-project/commit/34c85ed2bc1adfa375745db6de7f62d350a8f768
DIFF: https://github.com/llvm/llvm-project/commit/34c85ed2bc1adfa375745db6de7f62d350a8f768.diff
LOG: [clang-reorder-fields] Use expanded location for macros (#142147)
Fixes macros being replaced instead of their expansion.
Closes #52632
Added:
clang-tools-extra/test/clang-reorder-fields/MacroExpansionField.cpp
Modified:
clang-tools-extra/clang-reorder-fields/ReorderFieldsAction.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-reorder-fields/ReorderFieldsAction.cpp b/clang-tools-extra/clang-reorder-fields/ReorderFieldsAction.cpp
index ea0207619fb2b..3b1cd18d80346 100644
--- a/clang-tools-extra/clang-reorder-fields/ReorderFieldsAction.cpp
+++ b/clang-tools-extra/clang-reorder-fields/ReorderFieldsAction.cpp
@@ -86,6 +86,10 @@ getNewFieldsOrder(const RecordDecl *Definition,
static void
addReplacement(SourceRange Old, SourceRange New, const ASTContext &Context,
std::map<std::string, tooling::Replacements> &Replacements) {
+ if (Old.getBegin().isMacroID())
+ Old = Context.getSourceManager().getExpansionRange(Old).getAsRange();
+ if (New.getBegin().isMacroID())
+ New = Context.getSourceManager().getExpansionRange(New).getAsRange();
StringRef NewText =
Lexer::getSourceText(CharSourceRange::getTokenRange(New),
Context.getSourceManager(), Context.getLangOpts());
diff --git a/clang-tools-extra/test/clang-reorder-fields/MacroExpansionField.cpp b/clang-tools-extra/test/clang-reorder-fields/MacroExpansionField.cpp
new file mode 100644
index 0000000000000..a4c3cbc1e12f4
--- /dev/null
+++ b/clang-tools-extra/test/clang-reorder-fields/MacroExpansionField.cpp
@@ -0,0 +1,24 @@
+// RUN: clang-reorder-fields -record-name ::bar::Foo -fields-order z,y,x %s -- | FileCheck %s
+
+namespace bar {
+
+#define INT_DECL(NAME) int NAME // CHECK: {{^#define INT_DECL\(NAME\) int NAME}}
+#define MACRO_DECL int x; // CHECK-NEXT: {{^#define MACRO_DECL int x;}}
+
+struct Foo {
+ MACRO_DECL // CHECK: {{^ INT_DECL\(z\);}}
+ int y; // CHECK-NEXT: {{^ int y;}}
+ INT_DECL(z); // CHECK-NEXT: {{^ MACRO_DECL}}
+};
+
+#define FOO 0 // CHECK: {{^#define FOO 0}}
+#define BAR 1 // CHECK-NEXT: {{^#define BAR 1}}
+#define BAZ 2 // CHECK-NEXT: {{^#define BAZ 2}}
+
+struct Foo foo = {
+ FOO, // CHECK: {{^ BAZ,}}
+ BAR, // CHECK-NEXT: {{^ BAR,}}
+ BAZ, // CHECK-NEXT: {{^ FOO,}}
+};
+
+} // end namespace bar
More information about the cfe-commits
mailing list