[clang-tools-extra] [clang] [llvm] Add clang-tidy check to suggest replacement of conditional statement with std::min/std::max (PR #77816)

Bhuminjay Soni via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 23 05:37:55 PST 2024


11happy wrote:

> @11happy I've compiled your code to test it on llvm's project and clang-tidy seems to sometimes crash. Would you be able to have a look before we merge this PR ?
> 
> ```
> PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
> Stack dump:
> 0.      Program arguments: /home/felix/git/llvm-project/build/bin/clang-tidy -checks=-*,readability-use-std-* -export-fixes /tmp/tmpswi2gkux/tmpbofvt76t.yaml -p=build /home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp
> 1.      <eof> parser at end of file
> 2.      ASTMatcher: Processing 'readability-use-std-min-max' against:
>         IfStmt : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2930:5, line:2931:17>
> --- Bound Nodes Begin ---
>     AssignLhs - { DeclRefExpr : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2931:7> }
>     AssignRhs - { CXXBoolLiteralExpr : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2931:17> }
>     CondLhs - { CXXMemberCallExpr : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2930:9, col:29> }
>     CondRhs - { IntegerLiteral : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2930:33> }
>     if - { IfStmt : </home/felix/git/llvm-project/llvm/lib/Target/NVPTX/NVPTXISelLowering.cpp:2930:5, line:2931:17> }
> --- Bound Nodes End ---
>  #0 0x0000000004208bab llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/felix/git/llvm-project/build/bin/clang-tidy+0x4208bab)
>  #1 0x00000000042062bb SignalHandler(int) Signals.cpp:0:0
>  #2 0x00007f0a8f4e7420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
>  #3 0x000000000112e7e9 clang::tidy::readability::UseStdMinMaxCheck::check(clang::ast_matchers::MatchFinder::MatchResult const&) (/home/felix/git/llvm-project/build/bin/clang-tidy+0x112e7e9)
>  #4 0x0000000002f5ef43 clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::MatchVisitor::visitMatch(clang::ast_matchers::BoundNodes const&) ASTMatchFinder.cpp:0:0
>  #5 0x0000000002f89f21 clang::ast_matchers::internal::BoundNodesTreeBuilder::visitMatches(clang::ast_matchers::internal::BoundNodesTreeBuilder::Visitor*) (/home/felix/git/llvm-project/build/bin/clang-tidy+0x2f89f21)
>  #6 0x0000000002f60b6e clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::matchWithFilter(clang::DynTypedNode const&) ASTMatchFinder.cpp:0:0
>  #7 0x0000000002f84b10 clang::RecursiveASTVisitor<clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor>::TraverseMSPropertySubscriptExpr(clang::MSPropertySubscriptExpr*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) ASTMatchFinder.cpp:0:0
>  #8 0x0000000002f7aaf8 clang::RecursiveASTVisitor<clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor>::TraverseStmt(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) ASTMatchFinder.cpp:0:0
>  #9 0x0000000002f7ad0b clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor::TraverseStmt(clang::Stmt*, llvm::SmallVectorImpl<llvm::PointerIntPair<clang::Stmt*, 1u, bool, llvm::PointerLikeTypeTraits<clang::Stmt*>, llvm::PointerIntPairInfo<clang::Stmt*, 1u, llvm::PointerLikeTypeTraits<clang::Stmt*>>>>*) (.constprop.0) ASTMatchFinder.cpp:0:0
> #10 0x0000000002f7ec42 clang::RecursiveASTVisitor<clang::ast_matchers::internal::(anonymous namespace)::MatchASTVisitor>::TraverseFunctionHelper(clang::FunctionDecl*) ASTMatchFinder.cpp:0:0
> ```
> 
> This is the bit of code that your check doesn't seems to like :
> 
> ```
> bool NeedExt = false;
> if(EltVT.getSizeInBits() < 16)
>     NeedExt = true;
> ```

sure I am looking into it.

https://github.com/llvm/llvm-project/pull/77816


More information about the cfe-commits mailing list