Author: savchart
Date: 2026-07-13T00:21:49+08:00
New Revision: 715cf355b1324117a4456cd79bd05df39f65643c

URL: 
https://github.com/llvm/llvm-project/commit/715cf355b1324117a4456cd79bd05df39f65643c
DIFF: 
https://github.com/llvm/llvm-project/commit/715cf355b1324117a4456cd79bd05df39f65643c.diff

LOG: [clang-tidy] Fix identifier-naming style lookup in macro arguments 
(#206809)

Problem statement: the var lambda parameter was written inside a macro
argument. The declaration location was treated as a macro location, and
the filename lookup returned an empty filename for that location.

Fix: use a file location for the style lookup. Alternative options
considered were spelling location and expansion location.

Fixes #154957

Assisted-by: GPT

---------

Co-authored-by: Zeyi Xu <[email protected]>
Co-authored-by: Baranov Victor <[email protected]>

Added: 
    
clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
    
clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
    
clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
    
clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp

Modified: 
    clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
    clang-tools-extra/docs/ReleaseNotes.rst

Removed: 
    


################################################################################
diff  --git 
a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp 
b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index a356e1390b62d..42f3101592758 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -1395,7 +1395,8 @@ IdentifierNamingCheck::getDeclFailureInfo(const NamedDecl 
*Decl,
     return std::nullopt;
 
   const SourceLocation Loc = Decl->getLocation();
-  const FileStyle &FileStyle = getStyleForFile(SM.getFilename(Loc));
+  const SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
+  const FileStyle &FileStyle = getStyleForFile(SM.getFilename(SpellingLoc));
   if (!FileStyle.isActive())
     return std::nullopt;
 

diff  --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index f43b90f5a2386..2581a9d3c5657 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -836,6 +836,9 @@ Changes in existing checks
   - Fixed a crash in dependent base lookup when
     `AggressiveDependentMemberLookup` option is enabled.
 
+  - Fixed a false positive from naming style lookup for declarations inside 
macro
+    arguments.
+
 - Improved :doc:`readability-implicit-bool-conversion
   <clang-tidy/checks/readability/implicit-bool-conversion>` check:
 

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
new file mode 100644
index 0000000000000..d6e48690be0bc
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/.clang-tidy
@@ -0,0 +1,10 @@
+Checks: '-*,readability-identifier-naming'
+CheckOptions:
+  - key: readability-identifier-naming.GetConfigPerFile
+    value: true
+  - key: readability-identifier-naming.FunctionCase
+    value: CamelCase
+  - key: readability-identifier-naming.ParameterCase
+    value: CamelCase
+  - key: readability-identifier-naming.VariableCase
+    value: CamelCase

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
new file mode 100644
index 0000000000000..42c125e4b028b
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/include/macro.h
@@ -0,0 +1 @@
+#define WRAP(E) ((void)(E))

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
new file mode 100644
index 0000000000000..f38c8a1b514fc
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy
@@ -0,0 +1,10 @@
+Checks: '-*,readability-identifier-naming'
+CheckOptions:
+  - key: readability-identifier-naming.GetConfigPerFile
+    value: true
+  - key: readability-identifier-naming.FunctionCase
+    value: camelBack
+  - key: readability-identifier-naming.ParameterCase
+    value: camelBack
+  - key: readability-identifier-naming.VariableCase
+    value: camelBack

diff  --git 
a/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
 
b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
new file mode 100644
index 0000000000000..c7ec7f421e7c8
--- /dev/null
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming-macro-argument.cpp
@@ -0,0 +1,30 @@
+// RUN: rm -rf %t
+// RUN: mkdir -p %t/include %t/subdir
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/.clang-tidy 
%t/.clang-tidy
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/include/macro.h 
%t/include/macro.h
+// RUN: cp %S/Inputs/identifier-naming-macro-argument/subdir/.clang-tidy 
%t/subdir/.clang-tidy
+// RUN: cp %s %t/subdir/test.cpp
+// RUN: clang-tidy %t/subdir/test.cpp \
+// RUN:   --checks=-*,readability-identifier-naming \
+// RUN:   -- -I%t/include -std=c++17 2>&1 \
+// RUN:   | FileCheck %s -check-prefix=CHECK-MESSAGES \
+// RUN:       --implicit-check-not="{{warning|error}}:"
+
+#include "macro.h"
+
+int goodFunction(int goodParam) {
+  int goodVariable = goodParam;
+  return goodVariable;
+}
+
+void callWrappedLambda() {
+  WRAP([](int wrappedParam) {
+    return wrappedParam;
+  }(1));
+}
+
+// CHECK-MESSAGES: :[[@LINE+2]]:5: warning: invalid case style for function 
'BadFunction'
+// CHECK-MESSAGES: :[[@LINE+1]]:21: warning: invalid case style for parameter 
'BadParam'
+int BadFunction(int BadParam) {
+  return BadParam;
+}


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to