diff options
author | Diana Picus <diana.picus@linaro.org> | 2017-01-27 07:19:22 +0000 |
---|---|---|
committer | Diana Picus <diana.picus@linaro.org> | 2017-01-27 07:19:22 +0000 |
commit | 914150172149e33b40cdc127af75f459c56233f3 (patch) | |
tree | bc973b5ba1ef22af07275ed569db371047915457 /clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp | |
parent | 572fca7111934e1889585c62bca78cbb2380b6d1 (diff) | |
download | bcm5719-llvm-914150172149e33b40cdc127af75f459c56233f3.tar.gz bcm5719-llvm-914150172149e33b40cdc127af75f459c56233f3.zip |
Revert "Implement a new clang-tidy check that suggests users replace dynamic exception specifications with noexcept exception specifications."
This reverts commit r293217, its follow-up 293218 and part of 293234 because it
broke all bots that build clang-tools-extra.
llvm-svn: 293267
Diffstat (limited to 'clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp')
-rw-r--r-- | clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp deleted file mode 100644 index a38274ebbd2..00000000000 --- a/clang-tools-extra/clang-tidy/modernize/UseNoexceptCheck.cpp +++ /dev/null @@ -1,114 +0,0 @@ -//===--- UseNoexceptCheck.cpp - clang-tidy---------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "UseNoexceptCheck.h" -#include "clang/AST/ASTContext.h" -#include "clang/Lex/Lexer.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { -namespace modernize { - -UseNoexceptCheck::UseNoexceptCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - NoexceptMacro(Options.get("ReplacementString", "")), - UseNoexceptFalse(Options.get("UseNoexceptFalse", true)) {} - -void UseNoexceptCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "ReplacementString", NoexceptMacro); - Options.store(Opts, "UseNoexceptFalse", UseNoexceptFalse); -} - -void UseNoexceptCheck::registerMatchers(MatchFinder *Finder) { - if (!getLangOpts().CPlusPlus11) - return; - - Finder->addMatcher( - functionDecl( - cxxMethodDecl( - hasTypeLoc(loc(functionProtoType(hasDynamicExceptionSpec()))), - anyOf(hasOverloadedOperatorName("delete[]"), - hasOverloadedOperatorName("delete"), cxxDestructorDecl())) - .bind("del-dtor")) - .bind("funcDecl"), - this); - - Finder->addMatcher( - functionDecl( - hasTypeLoc(loc(functionProtoType(hasDynamicExceptionSpec()))), - unless(anyOf(hasOverloadedOperatorName("delete[]"), - hasOverloadedOperatorName("delete"), - cxxDestructorDecl()))) - .bind("funcDecl"), - this); - - Finder->addMatcher( - parmVarDecl(anyOf(hasType(pointerType(pointee(parenType(innerType( - functionProtoType(hasDynamicExceptionSpec())))))), - hasType(memberPointerType(pointee(parenType(innerType( - functionProtoType(hasDynamicExceptionSpec())))))))) - .bind("parmVarDecl"), - this); -} - -void UseNoexceptCheck::check(const MatchFinder::MatchResult &Result) { - const FunctionProtoType *FnTy = nullptr; - bool DtorOrOperatorDel = false; - SourceRange Range; - - if (const auto *FuncDecl = Result.Nodes.getNodeAs<FunctionDecl>("funcDecl")) { - DtorOrOperatorDel = Result.Nodes.getNodeAs<FunctionDecl>("del-dtor"); - FnTy = FuncDecl->getType()->getAs<FunctionProtoType>(); - if (const auto *TSI = FuncDecl->getTypeSourceInfo()) - Range = - TSI->getTypeLoc().castAs<FunctionTypeLoc>().getExceptionSpecRange(); - } else if (const auto *ParmDecl = - Result.Nodes.getNodeAs<ParmVarDecl>("parmVarDecl")) { - FnTy = ParmDecl->getType() - ->getAs<Type>() - ->getPointeeType() - ->getAs<FunctionProtoType>(); - - if (const auto *TSI = ParmDecl->getTypeSourceInfo()) - Range = TSI->getTypeLoc() - .getNextTypeLoc() - .IgnoreParens() - .castAs<FunctionProtoTypeLoc>() - .getExceptionSpecRange(); - } - CharSourceRange CRange = Lexer::makeFileCharRange( - CharSourceRange::getTokenRange(Range), *Result.SourceManager, - Result.Context->getLangOpts()); - - assert(FnTy && "FunctionProtoType is null."); - bool IsNoThrow = FnTy->isNothrow(*Result.Context); - StringRef ReplacementStr = - IsNoThrow - ? NoexceptMacro.empty() ? "noexcept" : NoexceptMacro - : NoexceptMacro.empty() - ? (DtorOrOperatorDel || UseNoexceptFalse) ? "noexcept(false)" - : "" - : ""; - - FixItHint FixIt; - if ((IsNoThrow || NoexceptMacro.empty()) && CRange.isValid()) - FixIt = FixItHint::CreateReplacement(CRange, ReplacementStr); - - diag(Range.getBegin(), "dynamic exception specification '%0' is deprecated; " - "consider %select{using '%2'|removing it}1 instead") - << Lexer::getSourceText(CRange, *Result.SourceManager, - Result.Context->getLangOpts()) - << ReplacementStr.empty() << ReplacementStr << FixIt; -} - -} // namespace modernize -} // namespace tidy -} // namespace clang |