================ @@ -0,0 +1,73 @@ +//===--- ExplicitMoveConstructorCheck.cpp - clang-tidy --------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "ExplicitMoveConstructorCheck.h" +#include "clang/ASTMatchers/ASTMatchFinder.h" +#include "clang/Lex/Lexer.h" + +using namespace clang::ast_matchers; + +namespace clang::tidy::performance { + +static SourceRange findExplicitToken(const CXXConstructorDecl *Ctor, + const SourceManager &Source, + const LangOptions &LangOpts) { + SourceLocation CurrentLoc = Ctor->getBeginLoc(); + SourceLocation EndLoc = Ctor->getEndLoc(); + Token Tok; + + do { + const bool failed = Lexer::getRawToken(CurrentLoc, Tok, Source, LangOpts); + + if (failed) + return {}; + + if (Tok.is(tok::raw_identifier) && Tok.getRawIdentifier() == "explicit") + return {Tok.getLocation(), Tok.getEndLoc()}; + + CurrentLoc = Tok.getEndLoc(); + } while (Tok.isNot(tok::eof) && CurrentLoc < EndLoc); + + return {}; +} + +void ExplicitMoveConstructorCheck::registerMatchers(MatchFinder *Finder) { + Finder->addMatcher( + cxxRecordDecl( + has(cxxConstructorDecl(isMoveConstructor(), isExplicit(), ---------------- PiotrZSL wrote:
Maybe exclude implicit code, in such case it would be faster. Also consider excluding system code. https://github.com/llvm/llvm-project/pull/122599 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits