From 93f532f84765ed20fec6425be37e4945e803ee8b Mon Sep 17 00:00:00 2001 From: Javier Alvarez Garcia Date: Fri, 29 Jul 2022 10:36:26 +0200 Subject: [PATCH] fix crash in nodiscard check --- .../clang-tidy/daedalean/UseNodiscardCheck.cpp | 12 +++++++++--- .../clang-tidy/checkers/daedalean-use-nodiscard.cpp | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp b/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp index e2af880da1ad4c..a7b1c0417e8242 100644 --- a/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp +++ b/clang-tools-extra/clang-tidy/daedalean/UseNodiscardCheck.cpp @@ -45,6 +45,10 @@ AST_MATCHER(FunctionDecl, isDefinitionOrInline) { return !(Node.isThisDeclarationADefinition() && Node.isOutOfLine()); } +AST_MATCHER(FunctionDecl, isBuiltinFunction) { + return Node.getBuiltinID() != 0; +} + AST_MATCHER(CXXMethodDecl, isOverloadedPredecrementOperator) { // Don't put ``[[nodiscard]]`` in front of predecrement operators that return // a reference. @@ -80,13 +84,15 @@ void UseNodiscardCheck::registerMatchers(MatchFinder *Finder) { isNoReturn(), cxxDeductionGuideDecl(), isOverloadedAssignmentOperator(), isOverloadedPreincrementOperator(), + isBuiltinFunction(), isOverloadedPredecrementOperator())))) .bind("no_discard"), this); Finder->addMatcher( - functionDecl(allOf(isNotMethod(), isDefinitionOrInline(), - unless(anyOf(returns(voidType()), isNoReturn(), - cxxDeductionGuideDecl())))) + functionDecl( + allOf(isNotMethod(), isDefinitionOrInline(), + unless(anyOf(returns(voidType()), isNoReturn(), + isBuiltinFunction(), cxxDeductionGuideDecl())))) .bind("no_discard_func"), this); } diff --git a/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp b/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp index fe589095c518d8..8d5d4a89ba4a2a 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/daedalean-use-nodiscard.cpp @@ -352,3 +352,7 @@ template [[nodiscard]] typename T::value f3(T &) noexcept; [[nodiscard]] bool f4(); + +[[nodiscard]] bool callBuiltin() { + return __builtin_isinf(0.0) != 0; +}