clang 20.0.0git
|
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/IdentifierTable.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/Sema.h"
#include "clang/Sema/SemaObjC.h"
#include "llvm/ADT/StringRef.h"
#include <optional>
Go to the source code of this file.
Functions | |
static bool | hasMatchingEnvironmentOrNone (const ASTContext &Context, const AvailabilityAttr *AA) |
static const AvailabilityAttr * | getAttrForPlatform (ASTContext &Context, const Decl *D) |
static std::pair< AvailabilityResult, const NamedDecl * > | ShouldDiagnoseAvailabilityOfDecl (Sema &S, const NamedDecl *D, std::string *Message, ObjCInterfaceDecl *ClassReceiver) |
The diagnostic we should emit for D , and the declaration that originated it, or AR_Available . | |
static bool | ShouldDiagnoseAvailabilityInContext (Sema &S, AvailabilityResult K, VersionTuple DeclVersion, const IdentifierInfo *DeclEnv, Decl *Ctx, const NamedDecl *OffendingDecl) |
whether we should emit a diagnostic for K and DeclVersion in the context of Ctx . | |
static unsigned | getAvailabilityDiagnosticKind (const ASTContext &Context, const VersionTuple &DeploymentVersion, const VersionTuple &DeclVersion, bool HasMatchingEnv) |
static NamedDecl * | findEnclosingDeclToAnnotate (Decl *OrigCtx) |
static std::optional< unsigned > | tryParseObjCMethodName (StringRef Name, SmallVectorImpl< StringRef > &SlotNames, const LangOptions &LangOpts) |
Tries to parse a string as ObjC method name. | |
static std::optional< AttributeInsertion > | createAttributeInsertion (const NamedDecl *D, const SourceManager &SM, const LangOptions &LangOpts) |
Returns a source location in which it's appropriate to insert a new attribute for the given declaration \D. | |
static void | DoEmitAvailabilityWarning (Sema &S, AvailabilityResult K, Decl *Ctx, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef< SourceLocation > Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) |
Actually emit an availability diagnostic for a reference to an unavailable decl. | |
static void | EmitAvailabilityWarning (Sema &S, AvailabilityResult AR, const NamedDecl *ReferringDecl, const NamedDecl *OffendingDecl, StringRef Message, ArrayRef< SourceLocation > Locs, const ObjCInterfaceDecl *UnknownObjCClass, const ObjCPropertyDecl *ObjCProperty, bool ObjCPropertyAccess) |
|
static |
Returns a source location in which it's appropriate to insert a new attribute for the given declaration \D.
Definition at line 358 of file SemaAvailability.cpp.
References D, clang::Lexer::getLocForEndOfToken(), clang::SourceLocation::isInvalid(), Loc, and SM.
Referenced by DoEmitAvailabilityWarning().
|
static |
Actually emit an availability diagnostic for a reference to an unavailable decl.
Ctx | The context that the reference occurred in |
ReferringDecl | The exact declaration that was referenced. |
OffendingDecl | A related decl to ReferringDecl that has an availability attribute corresponding to K attached to it. Note that this may not be the same as ReferringDecl, i.e. if an EnumDecl is annotated and we refer to a member EnumConstantDecl, ReferringDecl is the EnumConstantDecl and OffendingDecl is the EnumDecl. |
Definition at line 388 of file SemaAvailability.cpp.
References clang::AR_Available, clang::AR_Deprecated, clang::AR_NotYetIntroduced, clang::AR_Unavailable, clang::Sema::Context, createAttributeInsertion(), clang::FixItHint::CreateInsertion(), clang::FixItHint::CreateReplacement(), clang::SemaBase::Diag(), E, findEnclosingDeclToAnnotate(), clang::Sema::getASTContext(), clang::Decl::getAttr(), getAttrForPlatform(), getAvailabilityDiagnosticKind(), clang::CharSourceRange::getCharRange(), clang::NamedDecl::getDeclName(), clang::Sema::getDiagnostics(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::Sema::getLocForEndOfToken(), clang::NamedDecl::getMostRecentDecl(), clang::Selector::getNameForSlot(), clang::Selector::getNumArgs(), clang::TargetInfo::getPlatformMinVersion(), clang::TargetInfo::getPlatformName(), clang::Sema::getPreprocessor(), clang::Decl::getPreviousDecl(), clang::Sema::getSourceManager(), clang::ASTContext::getTargetInfo(), clang::Sema::getTopMostPointOfInstantiation(), clang::TargetInfo::getTriple(), clang::Decl::getVersionIntroduced(), hasMatchingEnvironmentOrNone(), clang::SourceManager::isInSystemHeader(), clang::Preprocessor::isMacroDefined(), clang::CharSourceRange::isValid(), Loc, ShouldDiagnoseAvailabilityInContext(), and tryParseObjCMethodName().
Referenced by EmitAvailabilityWarning(), and clang::Sema::handleDelayedAvailabilityCheck().
|
static |
Definition at line 670 of file SemaAvailability.cpp.
References clang::Sema::DelayedDiagnostics::add(), clang::Sema::DelayedDiagnostics, DoEmitAvailabilityWarning(), clang::Sema::getCurLexicalContext(), clang::sema::DelayedDiagnostic::makeAvailability(), and clang::Sema::DelayedDiagnostics::shouldDelayDiagnostics().
Referenced by clang::Sema::DiagnoseAvailabilityOfDecl().
Definition at line 281 of file SemaAvailability.cpp.
Referenced by DoEmitAvailabilityWarning().
|
static |
Definition at line 44 of file SemaAvailability.cpp.
References clang::Decl::attrs(), D, clang::ASTContext::getLangOpts(), clang::TargetInfo::getPlatformName(), clang::ASTContext::getTargetInfo(), and hasMatchingEnvironmentOrNone().
Referenced by DoEmitAvailabilityWarning(), and ShouldDiagnoseAvailabilityInContext().
|
static |
Definition at line 238 of file SemaAvailability.cpp.
References clang::ASTContext::getTargetInfo(), and clang::TargetInfo::getTriple().
Referenced by DoEmitAvailabilityWarning().
|
static |
Definition at line 32 of file SemaAvailability.cpp.
References clang::IdentifierInfo::getName(), clang::ASTContext::getTargetInfo(), and clang::TargetInfo::getTriple().
Referenced by DoEmitAvailabilityWarning(), and getAttrForPlatform().
|
static |
whether we should emit a diagnostic for K
and DeclVersion
in the context of Ctx
.
For example, we should emit an unavailable diagnostic in a deprecated context, but not the other way around.
Definition at line 154 of file SemaAvailability.cpp.
References clang::AR_Available, clang::AR_Deprecated, clang::AR_NotYetIntroduced, clang::AR_Unavailable, clang::C, clang::Sema::Context, clang::Sema::getASTContext(), getAttrForPlatform(), clang::Decl::getBeginLoc(), clang::Decl::getDeclContext(), clang::Preprocessor::getImmediateMacroName(), clang::Sema::getLangOpts(), clang::Sema::getPreprocessor(), clang::ASTContext::getTargetInfo(), clang::TargetInfo::getTriple(), and clang::Interface.
Referenced by DoEmitAvailabilityWarning().
|
static |
The diagnostic we should emit for D
, and the declaration that originated it, or AR_Available
.
D | The declaration to check. |
Message | If non-null, this will be populated with the message from the availability attribute that is selected. |
ClassReceiver | If we're checking the method of a class message send, the class. Otherwise nullptr. |
Definition at line 92 of file SemaAvailability.cpp.
References clang::AR_Available, D, clang::Sema::getASTContext(), clang::Decl::getAvailability(), clang::Init, clang::ObjCInterfaceDecl::lookupInstanceMethod(), clang::SemaObjC::NSAPIObj, and clang::Sema::ObjC().
Referenced by clang::Sema::DiagnoseAvailabilityOfDecl().
|
static |
Tries to parse a string as ObjC method name.
Name | The string to parse. Expected to originate from availability attribute argument. |
SlotNames | The vector that will be populated with slot names. In case of unsuccessful parsing can contain invalid data. |
Definition at line 325 of file SemaAvailability.cpp.
References clang::isValidAsciiIdentifier().
Referenced by DoEmitAvailabilityWarning().