From 531db82c6ecfb4772c6870731c06ad8718f1e0ce Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Thu, 7 Mar 2013 02:00:27 +0000 Subject: [PATCH] Add a hasExternalLinkage helper. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176607 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Decl.h | 5 +++++ lib/ARCMigrate/TransUnbridgedCasts.cpp | 4 ++-- lib/ARCMigrate/Transforms.cpp | 4 ++-- lib/Sema/Sema.cpp | 6 +++--- lib/Sema/SemaDecl.cpp | 12 ++++++------ lib/Sema/SemaDeclCXX.cpp | 2 +- 6 files changed, 19 insertions(+), 14 deletions(-) diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index 68d7d56585..d969acd807 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -214,6 +214,11 @@ public: /// \brief Determine what kind of linkage this entity has. Linkage getLinkage() const; + /// \brief True if this decl has external linkage. + bool hasExternalLinkage() const { + return getLinkage() == ExternalLinkage; + } + /// \brief Determines the visibility of this entity. Visibility getVisibility() const { return getLinkageAndVisibility().getVisibility(); diff --git a/lib/ARCMigrate/TransUnbridgedCasts.cpp b/lib/ARCMigrate/TransUnbridgedCasts.cpp index 429a705a1f..fc4a75fdb8 100644 --- a/lib/ARCMigrate/TransUnbridgedCasts.cpp +++ b/lib/ARCMigrate/TransUnbridgedCasts.cpp @@ -148,7 +148,7 @@ private: if (FD->getName() == "CFRetain" && FD->getNumParams() == 1 && FD->getParent()->isTranslationUnit() && - FD->getLinkage() == ExternalLinkage) { + FD->hasExternalLinkage()) { Expr *Arg = callE->getArg(0); if (const ImplicitCastExpr *ICE = dyn_cast(Arg)) { const Expr *sub = ICE->getSubExpr(); @@ -413,7 +413,7 @@ private: FD = dyn_cast_or_null(callE->getCalleeDecl())) if (FD->getName() == "CFRetain" && FD->getNumParams() == 1 && FD->getParent()->isTranslationUnit() && - FD->getLinkage() == ExternalLinkage) + FD->hasExternalLinkage()) return true; return false; diff --git a/lib/ARCMigrate/Transforms.cpp b/lib/ARCMigrate/Transforms.cpp index 136f618787..087219535a 100644 --- a/lib/ARCMigrate/Transforms.cpp +++ b/lib/ARCMigrate/Transforms.cpp @@ -94,7 +94,7 @@ bool trans::isPlusOne(const Expr *E) { if (FD->isGlobal() && FD->getIdentifier() && FD->getParent()->isTranslationUnit() && - FD->getLinkage() == ExternalLinkage && + FD->hasExternalLinkage() && ento::cocoa::isRefType(callE->getType(), "CF", FD->getIdentifier()->getName())) { StringRef fname = FD->getIdentifier()->getName(); @@ -198,7 +198,7 @@ bool trans::isGlobalVar(Expr *E) { E = E->IgnoreParenCasts(); if (DeclRefExpr *DRE = dyn_cast(E)) return DRE->getDecl()->getDeclContext()->isFileContext() && - DRE->getDecl()->getLinkage() == ExternalLinkage; + DRE->getDecl()->hasExternalLinkage(); if (ConditionalOperator *condOp = dyn_cast(E)) return isGlobalVar(condOp->getTrueExpr()) && isGlobalVar(condOp->getFalseExpr()); diff --git a/lib/Sema/Sema.cpp b/lib/Sema/Sema.cpp index 8c79d822cf..6239172a09 100644 --- a/lib/Sema/Sema.cpp +++ b/lib/Sema/Sema.cpp @@ -360,7 +360,7 @@ static bool ShouldRemoveFromUnused(Sema *SemaRef, const DeclaratorDecl *D) { return !SemaRef->ShouldWarnIfUnusedFileScopedDecl(DeclToCheck); } - if (D->getLinkage() == ExternalLinkage) + if (D->hasExternalLinkage()) return true; return false; @@ -402,13 +402,13 @@ void Sema::getUndefinedButUsed( if (FunctionDecl *FD = dyn_cast(ND)) { if (FD->isDefined()) continue; - if (FD->getLinkage() == ExternalLinkage && + if (FD->hasExternalLinkage() && !FD->getMostRecentDecl()->isInlined()) continue; } else { if (cast(ND)->hasDefinition() != VarDecl::DeclarationOnly) continue; - if (ND->getLinkage() == ExternalLinkage) + if (ND->hasExternalLinkage()) continue; } diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 78f1784ad1..82d216ee01 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1223,7 +1223,7 @@ bool Sema::ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const { } // Only warn for unused decls internal to the translation unit. - if (D->getLinkage() == ExternalLinkage) + if (D->hasExternalLinkage()) return false; return true; @@ -1584,7 +1584,7 @@ static void filterNonConflictingPreviousDecls(ASTContext &context, return; // If this declaration has external - bool hasExternalLinkage = (decl->getLinkage() == ExternalLinkage); + bool hasExternalLinkage = decl->hasExternalLinkage(); LookupResult::Filter filter = previous.makeFilter(); while (filter.hasNext()) { @@ -4577,7 +4577,7 @@ static void checkAttributesAfterMerging(Sema &S, NamedDecl &ND) { } } if (WeakRefAttr *Attr = ND.getAttr()) { - if (ND.getLinkage() == ExternalLinkage) { + if (ND.hasExternalLinkage()) { S.Diag(Attr->getLocation(), diag::err_attribute_weakref_not_static); ND.dropAttr(); } @@ -6388,7 +6388,7 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC, // If there's a #pragma GCC visibility in scope, and this isn't a class // member, set the visibility of this function. - if (NewFD->getLinkage() == ExternalLinkage && !DC->isRecord()) + if (NewFD->hasExternalLinkage() && !DC->isRecord()) AddPushedVisibilityAttribute(NewFD); // If there's a #pragma clang arc_cf_code_audited in scope, consider @@ -7782,7 +7782,7 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) { } if (var->isThisDeclarationADefinition() && - var->getLinkage() == ExternalLinkage && + var->hasExternalLinkage() && getDiagnostics().getDiagnosticLevel( diag::warn_missing_variable_declarations, var->getLocation())) { @@ -7880,7 +7880,7 @@ Sema::FinalizeDeclaration(Decl *ThisDecl) { const DeclContext *DC = VD->getDeclContext(); // If there's a #pragma GCC visibility in scope, and this isn't a class // member, set the visibility of this variable. - if (VD->getLinkage() == ExternalLinkage && !DC->isRecord()) + if (VD->hasExternalLinkage() && !DC->isRecord()) AddPushedVisibilityAttribute(VD); if (VD->isFileVarDecl()) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 46010e4bdb..22a31e0af5 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -11364,7 +11364,7 @@ bool Sema::DefineUsedVTables() { Consumer.HandleVTable(Class, VTablesUsed[Canonical]); // Optionally warn if we're emitting a weak vtable. - if (Class->getLinkage() == ExternalLinkage && + if (Class->hasExternalLinkage() && Class->getTemplateSpecializationKind() != TSK_ImplicitInstantiation) { const FunctionDecl *KeyFunctionDef = 0; if (!KeyFunction || -- 2.40.0