clang  19.0.0git
Functions
SemaAvailability.cpp File Reference
#include "clang/AST/Attr.h"
#include "clang/AST/Decl.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/IdentifierTable.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. More...
 
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. More...
 
static bool shouldDiagnoseAvailabilityByDefault (const ASTContext &Context, const VersionTuple &DeploymentVersion, const VersionTuple &DeclVersion)
 
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. More...
 
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. More...
 
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. More...
 
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()

static 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 318 of file SemaAvailability.cpp.

◆ DoEmitAvailabilityWarning()

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 
)
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 348 of file SemaAvailability.cpp.

Referenced by clang::Sema::handleDelayedAvailabilityCheck().

◆ EmitAvailabilityWarning()

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

Definition at line 636 of file SemaAvailability.cpp.

◆ findEnclosingDeclToAnnotate()

static NamedDecl* findEnclosingDeclToAnnotate ( Decl OrigCtx)
static

Definition at line 241 of file SemaAvailability.cpp.

◆ getAttrForPlatform()

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

Definition at line 42 of file SemaAvailability.cpp.

◆ hasMatchingEnvironmentOrNone()

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

Definition at line 30 of file SemaAvailability.cpp.

◆ shouldDiagnoseAvailabilityByDefault()

static bool shouldDiagnoseAvailabilityByDefault ( const ASTContext Context,
const VersionTuple &  DeploymentVersion,
const VersionTuple &  DeclVersion 
)
static

Definition at line 213 of file SemaAvailability.cpp.

◆ ShouldDiagnoseAvailabilityInContext()

static bool ShouldDiagnoseAvailabilityInContext ( Sema S,
AvailabilityResult  K,
VersionTuple  DeclVersion,
const IdentifierInfo DeclEnv,
Decl Ctx,
const NamedDecl OffendingDecl 
)
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 142 of file SemaAvailability.cpp.

◆ ShouldDiagnoseAvailabilityOfDecl()

static std::pair<AvailabilityResult, const NamedDecl *> ShouldDiagnoseAvailabilityOfDecl ( Sema S,
const NamedDecl D,
std::string *  Message,
ObjCInterfaceDecl ClassReceiver 
)
static

The diagnostic we should emit for D, and the declaration that originated it, or AR_Available.

Parameters
DThe declaration to check.
MessageIf non-null, this will be populated with the message from the availability attribute that is selected.
ClassReceiverIf we're checking the method of a class message send, the class. Otherwise nullptr.

Definition at line 86 of file SemaAvailability.cpp.

Referenced by clang::Sema::DiagnoseAvailabilityOfDecl().

◆ tryParseObjCMethodName()

static 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 285 of file SemaAvailability.cpp.