diff options
author | robot-ydb-importer <robot-ydb-importer@yandex-team.com> | 2024-03-19 18:52:14 +0300 |
---|---|---|
committer | robot-ydb-importer <robot-ydb-importer@yandex-team.com> | 2024-03-19 19:24:53 +0300 |
commit | d314d6ddf6131c2ee96e97067fb3e5f560395dfb (patch) | |
tree | 167d2449ac47df359988840007e19e8cd152a09c /contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp | |
parent | ac62876a4c7633d486f2ecb111720a426a7da258 (diff) | |
download | ydb-d314d6ddf6131c2ee96e97067fb3e5f560395dfb.tar.gz |
YDB Import 588
1384556be6811c00a4098d426b8eda9be6d2a541
Diffstat (limited to 'contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp')
-rw-r--r-- | contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp b/contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp deleted file mode 100644 index 638850dcf9e..00000000000 --- a/contrib/libs/clang14/lib/ARCMigrate/TransAPIUses.cpp +++ /dev/null @@ -1,107 +0,0 @@ -//===--- TransAPIUses.cpp - Transformations to ARC mode -------------------===// -// -// 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 -// -//===----------------------------------------------------------------------===// -// -// checkAPIUses: -// -// Emits error/fix with some API uses that are obsolete or not safe in ARC mode: -// -// - NSInvocation's [get/set]ReturnValue and [get/set]Argument are only safe -// with __unsafe_unretained objects. -// - Calling -zone gets replaced with 'nil'. -// -//===----------------------------------------------------------------------===// - -#include "Transforms.h" -#include "Internals.h" -#include "clang/AST/ASTContext.h" -#include "clang/Sema/SemaDiagnostic.h" - -using namespace clang; -using namespace arcmt; -using namespace trans; - -namespace { - -class APIChecker : public RecursiveASTVisitor<APIChecker> { - MigrationPass &Pass; - - Selector getReturnValueSel, setReturnValueSel; - Selector getArgumentSel, setArgumentSel; - - Selector zoneSel; -public: - APIChecker(MigrationPass &pass) : Pass(pass) { - SelectorTable &sels = Pass.Ctx.Selectors; - IdentifierTable &ids = Pass.Ctx.Idents; - getReturnValueSel = sels.getUnarySelector(&ids.get("getReturnValue")); - setReturnValueSel = sels.getUnarySelector(&ids.get("setReturnValue")); - - IdentifierInfo *selIds[2]; - selIds[0] = &ids.get("getArgument"); - selIds[1] = &ids.get("atIndex"); - getArgumentSel = sels.getSelector(2, selIds); - selIds[0] = &ids.get("setArgument"); - setArgumentSel = sels.getSelector(2, selIds); - - zoneSel = sels.getNullarySelector(&ids.get("zone")); - } - - bool VisitObjCMessageExpr(ObjCMessageExpr *E) { - // NSInvocation. - if (E->isInstanceMessage() && - E->getReceiverInterface() && - E->getReceiverInterface()->getName() == "NSInvocation") { - StringRef selName; - if (E->getSelector() == getReturnValueSel) - selName = "getReturnValue"; - else if (E->getSelector() == setReturnValueSel) - selName = "setReturnValue"; - else if (E->getSelector() == getArgumentSel) - selName = "getArgument"; - else if (E->getSelector() == setArgumentSel) - selName = "setArgument"; - else - return true; - - Expr *parm = E->getArg(0)->IgnoreParenCasts(); - QualType pointee = parm->getType()->getPointeeType(); - if (pointee.isNull()) - return true; - - if (pointee.getObjCLifetime() > Qualifiers::OCL_ExplicitNone) - Pass.TA.report(parm->getBeginLoc(), - diag::err_arcmt_nsinvocation_ownership, - parm->getSourceRange()) - << selName; - - return true; - } - - // -zone. - if (E->isInstanceMessage() && - E->getInstanceReceiver() && - E->getSelector() == zoneSel && - Pass.TA.hasDiagnostic(diag::err_unavailable, - diag::err_unavailable_message, - E->getSelectorLoc(0))) { - // Calling -zone is meaningless in ARC, change it to nil. - Transaction Trans(Pass.TA); - Pass.TA.clearDiagnostic(diag::err_unavailable, - diag::err_unavailable_message, - E->getSelectorLoc(0)); - Pass.TA.replace(E->getSourceRange(), getNilString(Pass)); - } - return true; - } -}; - -} // anonymous namespace - -void trans::checkAPIUses(MigrationPass &pass) { - APIChecker(pass).TraverseDecl(pass.Ctx.getTranslationUnitDecl()); -} |