[clang-tools-extra] [clang-tidy] ignoring macro with hash preprocessing token in cppcoreguidelines-macro-usage (PR #95265)

2024-06-12 Thread Congcong Cai via cfe-commits

https://github.com/HerrCai0907 closed 
https://github.com/llvm/llvm-project/pull/95265
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] ignoring macro with hash preprocessing token in cppcoreguidelines-macro-usage (PR #95265)

2024-06-12 Thread Piotr Zegar via cfe-commits

https://github.com/PiotrZSL approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/95265
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] ignoring macro with hash preprocessing token in cppcoreguidelines-macro-usage (PR #95265)

2024-06-12 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tidy

Author: Congcong Cai (HerrCai0907)


Changes

`#` and `##` preprocessing tokens cannot be replaced by constexpr function. It 
should be ignored in check.

---
Full diff: https://github.com/llvm/llvm-project/pull/95265.diff


4 Files Affected:

- (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
(+5-2) 
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4) 
- (modified) 
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst (+1) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp 
(+4) 


``diff
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
index 0cd4bf6fdfd87..11eb056e916d3 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
@@ -7,12 +7,12 @@
 
//===--===//
 
 #include "MacroUsageCheck.h"
+#include "clang/Basic/TokenKinds.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/Regex.h"
-#include 
 #include 
 #include 
 
@@ -37,7 +37,10 @@ class MacroUsageCallbacks : public PPCallbacks {
 const MacroDirective *MD) override {
 if (SM.isWrittenInBuiltinFile(MD->getLocation()) ||
 MD->getMacroInfo()->isUsedForHeaderGuard() ||
-MD->getMacroInfo()->getNumTokens() == 0)
+MD->getMacroInfo()->tokens_empty() ||
+llvm::any_of(MD->getMacroInfo()->tokens(), [](const Token ) {
+  return T.isOneOf(tok::TokenKind::hash, tok::TokenKind::hashhash);
+}))
   return;
 
 if (IgnoreCommandLineMacros &&
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 6bf70c5cf4f8a..5d5aecd67b2d7 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -266,6 +266,10 @@ Changes in existing checks
   ` check to also handle
   calls to ``std::forward``.
 
+- Improved :doc:`cppcoreguidelines-macro-usage
+  ` check by ignoring macro 
with
+  hash preprocessing token.
+
 - Improved :doc:`cppcoreguidelines-missing-std-forward
   ` check by no longer
   giving false positives for deleted functions, by fixing false negatives when 
only
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst 
b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
index 8b763c28479e6..49417effbb6ff 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
@@ -17,6 +17,7 @@ Examples:
   #define C 0
   #define F1(x, y) ((a) > (b) ? (a) : (b))
   #define F2(...) (__VA_ARGS__)
+  #define F3(x, y) x##y
   #define COMMA ,
   #define NORETURN [[noreturn]]
   #define DEPRECATED attribute((deprecated))
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
index 404aafb6b1c45..865ef9df1182e 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
@@ -31,6 +31,10 @@
 // CHECK-MESSAGES: [[@LINE-1]]:9: warning: variadic macro 
'PROBLEMATIC_VARIADIC2' used; consider using a 'constexpr' variadic template 
function
 
 // These are all examples of common macros that shouldn't have constexpr 
suggestions.
+#define CONCAT_NAME(a, b) a##b
+
+#define CONCAT_STR(a, b) #a #b
+
 #define COMMA ,
 
 #define NORETURN [[noreturn]]

``




https://github.com/llvm/llvm-project/pull/95265
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] ignoring macro with hash preprocessing token in cppcoreguidelines-macro-usage (PR #95265)

2024-06-12 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang-tools-extra

Author: Congcong Cai (HerrCai0907)


Changes

`#` and `##` preprocessing tokens cannot be replaced by constexpr function. It 
should be ignored in check.

---
Full diff: https://github.com/llvm/llvm-project/pull/95265.diff


4 Files Affected:

- (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
(+5-2) 
- (modified) clang-tools-extra/docs/ReleaseNotes.rst (+4) 
- (modified) 
clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst (+1) 
- (modified) 
clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp 
(+4) 


``diff
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
index 0cd4bf6fdfd87..11eb056e916d3 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
@@ -7,12 +7,12 @@
 
//===--===//
 
 #include "MacroUsageCheck.h"
+#include "clang/Basic/TokenKinds.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/Regex.h"
-#include 
 #include 
 #include 
 
@@ -37,7 +37,10 @@ class MacroUsageCallbacks : public PPCallbacks {
 const MacroDirective *MD) override {
 if (SM.isWrittenInBuiltinFile(MD->getLocation()) ||
 MD->getMacroInfo()->isUsedForHeaderGuard() ||
-MD->getMacroInfo()->getNumTokens() == 0)
+MD->getMacroInfo()->tokens_empty() ||
+llvm::any_of(MD->getMacroInfo()->tokens(), [](const Token ) {
+  return T.isOneOf(tok::TokenKind::hash, tok::TokenKind::hashhash);
+}))
   return;
 
 if (IgnoreCommandLineMacros &&
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 6bf70c5cf4f8a..5d5aecd67b2d7 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -266,6 +266,10 @@ Changes in existing checks
   ` check to also handle
   calls to ``std::forward``.
 
+- Improved :doc:`cppcoreguidelines-macro-usage
+  ` check by ignoring macro 
with
+  hash preprocessing token.
+
 - Improved :doc:`cppcoreguidelines-missing-std-forward
   ` check by no longer
   giving false positives for deleted functions, by fixing false negatives when 
only
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst 
b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
index 8b763c28479e6..49417effbb6ff 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
@@ -17,6 +17,7 @@ Examples:
   #define C 0
   #define F1(x, y) ((a) > (b) ? (a) : (b))
   #define F2(...) (__VA_ARGS__)
+  #define F3(x, y) x##y
   #define COMMA ,
   #define NORETURN [[noreturn]]
   #define DEPRECATED attribute((deprecated))
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
index 404aafb6b1c45..865ef9df1182e 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
@@ -31,6 +31,10 @@
 // CHECK-MESSAGES: [[@LINE-1]]:9: warning: variadic macro 
'PROBLEMATIC_VARIADIC2' used; consider using a 'constexpr' variadic template 
function
 
 // These are all examples of common macros that shouldn't have constexpr 
suggestions.
+#define CONCAT_NAME(a, b) a##b
+
+#define CONCAT_STR(a, b) #a #b
+
 #define COMMA ,
 
 #define NORETURN [[noreturn]]

``




https://github.com/llvm/llvm-project/pull/95265
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] [clang-tidy] ignoring macro with hash preprocessing token in cppcoreguidelines-macro-usage (PR #95265)

2024-06-12 Thread Congcong Cai via cfe-commits

https://github.com/HerrCai0907 created 
https://github.com/llvm/llvm-project/pull/95265

`#` and `##` preprocessing tokens cannot be replaced by constexpr function. It 
should be ignored in check.

>From eaeb5b6493e0c3980a60f9acbc5572de0d619419 Mon Sep 17 00:00:00 2001
From: Congcong Cai 
Date: Thu, 13 Jun 2024 00:04:38 +0800
Subject: [PATCH] [clang-tidy] ignoring macro with hash preprocessing token in
 cppcoreguidelines-macro-usage

---
 .../clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp   | 7 +--
 clang-tools-extra/docs/ReleaseNotes.rst| 4 
 .../clang-tidy/checks/cppcoreguidelines/macro-usage.rst| 1 +
 .../clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp  | 4 
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
index 0cd4bf6fdfd87..11eb056e916d3 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/MacroUsageCheck.cpp
@@ -7,12 +7,12 @@
 
//===--===//
 
 #include "MacroUsageCheck.h"
+#include "clang/Basic/TokenKinds.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Lex/PPCallbacks.h"
 #include "clang/Lex/Preprocessor.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/Regex.h"
-#include 
 #include 
 #include 
 
@@ -37,7 +37,10 @@ class MacroUsageCallbacks : public PPCallbacks {
 const MacroDirective *MD) override {
 if (SM.isWrittenInBuiltinFile(MD->getLocation()) ||
 MD->getMacroInfo()->isUsedForHeaderGuard() ||
-MD->getMacroInfo()->getNumTokens() == 0)
+MD->getMacroInfo()->tokens_empty() ||
+llvm::any_of(MD->getMacroInfo()->tokens(), [](const Token ) {
+  return T.isOneOf(tok::TokenKind::hash, tok::TokenKind::hashhash);
+}))
   return;
 
 if (IgnoreCommandLineMacros &&
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst 
b/clang-tools-extra/docs/ReleaseNotes.rst
index 6bf70c5cf4f8a..5d5aecd67b2d7 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -266,6 +266,10 @@ Changes in existing checks
   ` check to also handle
   calls to ``std::forward``.
 
+- Improved :doc:`cppcoreguidelines-macro-usage
+  ` check by ignoring macro 
with
+  hash preprocessing token.
+
 - Improved :doc:`cppcoreguidelines-missing-std-forward
   ` check by no longer
   giving false positives for deleted functions, by fixing false negatives when 
only
diff --git 
a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst 
b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
index 8b763c28479e6..49417effbb6ff 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/macro-usage.rst
@@ -17,6 +17,7 @@ Examples:
   #define C 0
   #define F1(x, y) ((a) > (b) ? (a) : (b))
   #define F2(...) (__VA_ARGS__)
+  #define F3(x, y) x##y
   #define COMMA ,
   #define NORETURN [[noreturn]]
   #define DEPRECATED attribute((deprecated))
diff --git 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
index 404aafb6b1c45..865ef9df1182e 100644
--- 
a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
+++ 
b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/macro-usage.cpp
@@ -31,6 +31,10 @@
 // CHECK-MESSAGES: [[@LINE-1]]:9: warning: variadic macro 
'PROBLEMATIC_VARIADIC2' used; consider using a 'constexpr' variadic template 
function
 
 // These are all examples of common macros that shouldn't have constexpr 
suggestions.
+#define CONCAT_NAME(a, b) a##b
+
+#define CONCAT_STR(a, b) #a #b
+
 #define COMMA ,
 
 #define NORETURN [[noreturn]]

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits