[clang-tools-extra] [clang-tidy] Detect std::rot[lr] pattern within modernize.use-std-bit (PR #186324)
Victor Chernyakin via cfe-commits
cfe-commits at lists.llvm.org
Fri Mar 13 02:30:45 PDT 2026
================
@@ -195,3 +195,59 @@ unsigned invalid_popcount_bitset(unsigned x, signed y) {
};
}
+
+/*
+ * rotate patterns
+ */
+unsigned char rotate_left_pattern(unsigned char x) {
+ // CHECK-MESSAGES: :[[@LINE+2]]:10: warning: use 'std::rotl' instead [modernize-use-std-bit]
+ // CHECK-FIXES: return (int)std::rotl(x, 3);
+ return x << 3 | x >> 5;
----------------
localspook wrote:
You may need to add logic to sometimes insert a space before the fix-it, to handle cases like:
```cpp
return(x << 3) | (x >> 5);
// should become
return std::rotl(x, 3);
// not
returnstd::rotl(x, 3);
```
(see [here](https://github.com/llvm/llvm-project/blob/887d2d4bf7380113b27f199f323eeee883f17191/clang-tools-extra/clang-tidy/modernize/UseNullptrCheck.cpp#L94-L104) for an example).
There was some talk recently in #185108 about this and how it would be good to have a reusable facility for this, but for now you can just copy paste.
https://github.com/llvm/llvm-project/pull/186324
More information about the cfe-commits
mailing list