================
@@ -90,18 +103,45 @@ void UseStdBitCheck::check(const MatchFinder::MatchResult
&Result) {
const ASTContext &Context = *Result.Context;
const SourceManager &Source = Context.getSourceManager();
- const auto *MatchedVarDecl = Result.Nodes.getNodeAs<VarDecl>("v");
- const auto *MatchedExpr = Result.Nodes.getNodeAs<BinaryOperator>("expr");
-
- auto Diag =
- diag(MatchedExpr->getBeginLoc(), "use 'std::has_one_bit' instead");
- if (auto R = MatchedExpr->getSourceRange();
- !R.getBegin().isMacroID() && !R.getEnd().isMacroID()) {
- Diag << FixItHint::CreateReplacement(
- MatchedExpr->getSourceRange(),
- ("std::has_one_bit(" + MatchedVarDecl->getName() + ")").str())
- << IncludeInserter.createIncludeInsertion(
- Source.getFileID(MatchedExpr->getBeginLoc()), "<bit>");
+ if (const auto *MatchedExpr =
+ Result.Nodes.getNodeAs<BinaryOperator>("has_one_bit_expr")) {
+ const auto *MatchedVarDecl = Result.Nodes.getNodeAs<VarDecl>("v");
+
+ auto Diag =
+ diag(MatchedExpr->getBeginLoc(), "use 'std::has_one_bit' instead");
+ if (auto R = MatchedExpr->getSourceRange();
+ !R.getBegin().isMacroID() && !R.getEnd().isMacroID()) {
+ Diag << FixItHint::CreateReplacement(
+ MatchedExpr->getSourceRange(),
+ ("std::has_one_bit(" + MatchedVarDecl->getName() +
")").str())
+ << IncludeInserter.createIncludeInsertion(
+ Source.getFileID(MatchedExpr->getBeginLoc()), "<bit>");
+ }
+ } else if (const auto *MatchedExpr =
+ Result.Nodes.getNodeAs<CXXMemberCallExpr>("popcount_expr")) {
+ const auto *BitsetInstantiatedDecl =
+ cast<ClassTemplateSpecializationDecl>(MatchedExpr->getRecordDecl());
+ const llvm::APSInt BitsetSize =
+ BitsetInstantiatedDecl->getTemplateArgs()[0].getAsIntegral();
+ const auto *MatchedArg = Result.Nodes.getNodeAs<Expr>("v");
+ const uint64_t MatchedVarSize = Context.getTypeSize(MatchedArg->getType());
+ if (BitsetSize >= MatchedVarSize) {
+ MatchedArg->dump();
----------------
zeyi2 wrote:
Seems like debug print? Could we remove it?
https://github.com/llvm/llvm-project/pull/185740
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits