1 //===--- NoexceptMoveConstructorCheck.cpp - clang-tidy---------------------===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "NoexceptMoveConstructorCheck.h"
10 #include "clang/ASTMatchers/ASTMatchFinder.h"
12 using namespace clang::ast_matchers
;
14 // FixItHint - comment added to fix list.rst generation in add_new_check.py.
15 // Do not remove. Fixes are generated in base class.
17 namespace clang::tidy::performance
{
19 void NoexceptMoveConstructorCheck::registerMatchers(MatchFinder
*Finder
) {
21 cxxMethodDecl(unless(isDeleted()),
22 anyOf(cxxConstructorDecl(isMoveConstructor()),
23 isMoveAssignmentOperator()))
24 .bind(BindFuncDeclName
),
28 DiagnosticBuilder
NoexceptMoveConstructorCheck::reportMissingNoexcept(
29 const FunctionDecl
*FuncDecl
) {
30 return diag(FuncDecl
->getLocation(),
31 "move %select{assignment operator|constructor}0s should "
33 << CXXConstructorDecl::classof(FuncDecl
);
36 void NoexceptMoveConstructorCheck::reportNoexceptEvaluatedToFalse(
37 const FunctionDecl
*FuncDecl
, const Expr
*NoexceptExpr
) {
38 diag(NoexceptExpr
->getExprLoc(),
39 "noexcept specifier on the move %select{assignment "
40 "operator|constructor}0 evaluates to 'false'")
41 << CXXConstructorDecl::classof(FuncDecl
);
44 } // namespace clang::tidy::performance