clang 22.0.0git
SemaAvailability.cpp File Reference

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 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 NamedDeclfindEnclosingDeclToAnnotate (Decl *OrigCtx)
static std::optional< unsignedtryParseObjCMethodName (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)

Function Documentation

◆ createAttributeInsertion()

std::optional< AttributeInsertion > createAttributeInsertion ( const NamedDecl * D,
const SourceManager & SM,
const LangOptions & LangOpts )
static

Returns a source location in which it's appropriate to insert a new attribute for the given declaration \D.

Definition at line 379 of file SemaAvailability.cpp.

References clang::Lexer::getLocForEndOfToken(), clang::isa(), clang::SourceLocation::isInvalid(), and SM.

Referenced by DoEmitAvailabilityWarning().

◆ DoEmitAvailabilityWarning()

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 )
static

Actually emit an availability diagnostic for a reference to an unavailable decl.

Parameters
CtxThe context that the reference occurred in
ReferringDeclThe exact declaration that was referenced.
OffendingDeclA 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 409 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::Sema::currentEvaluationContext(), clang::SemaBase::Diag(), findEnclosingDeclToAnnotate(), clang::Sema::getASTContext(), clang::Decl::getAttr(), getAttrForPlatform(), getAvailabilityDiagnosticKind(), clang::CharSourceRange::getCharRange(), clang::Sema::getCurFunctionDecl(), 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::DiagnosticsEngine::getSuppressSystemWarnings(), clang::ASTContext::getTargetInfo(), clang::Sema::getTopMostPointOfInstantiation(), clang::TargetInfo::getTriple(), clang::Decl::getVersionIntroduced(), hasMatchingEnvironmentOrNone(), clang::Sema::ExpressionEvaluationContextRecord::IsCaseExpr, clang::SourceManager::isInSystemHeader(), clang::Preprocessor::isMacroDefined(), clang::CharSourceRange::isValid(), clang::DiagnosticsEngine::setSuppressSystemWarnings(), ShouldDiagnoseAvailabilityInContext(), and tryParseObjCMethodName().

Referenced by EmitAvailabilityWarning(), and clang::Sema::handleDelayedAvailabilityCheck().

◆ EmitAvailabilityWarning()

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

◆ findEnclosingDeclToAnnotate()

NamedDecl * findEnclosingDeclToAnnotate ( Decl * OrigCtx)
static

Definition at line 302 of file SemaAvailability.cpp.

References clang::cast(), and clang::isa().

Referenced by DoEmitAvailabilityWarning().

◆ getAttrForPlatform()

const AvailabilityAttr * getAttrForPlatform ( ASTContext & Context,
const Decl * D )
static

◆ getAvailabilityDiagnosticKind()

unsigned getAvailabilityDiagnosticKind ( const ASTContext & Context,
const VersionTuple & DeploymentVersion,
const VersionTuple & DeclVersion,
bool HasMatchingEnv )
static

Definition at line 259 of file SemaAvailability.cpp.

Referenced by DoEmitAvailabilityWarning().

◆ hasMatchingEnvironmentOrNone()

bool hasMatchingEnvironmentOrNone ( const ASTContext & Context,
const AvailabilityAttr * AA )
static

◆ ShouldDiagnoseAvailabilityInContext()

bool ShouldDiagnoseAvailabilityInContext ( Sema & S,
AvailabilityResult K,
VersionTuple DeclVersion,
const IdentifierInfo * DeclEnv,
Decl * Ctx,
const NamedDecl * OffendingDecl )
static

◆ tryParseObjCMethodName()

std::optional< unsigned > tryParseObjCMethodName ( StringRef Name,
SmallVectorImpl< StringRef > & SlotNames,
const LangOptions & LangOpts )
static

Tries to parse a string as ObjC method name.

Parameters
NameThe string to parse. Expected to originate from availability attribute argument.
SlotNamesThe vector that will be populated with slot names. In case of unsuccessful parsing can contain invalid data.
Returns
A number of method parameters if parsing was successful, std::nullopt otherwise.

Definition at line 346 of file SemaAvailability.cpp.

References clang::isValidAsciiIdentifier().

Referenced by DoEmitAvailabilityWarning().