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; +}