clang 22.0.0git
|
#include "CheckExprLifetime.h"
#include "TypeLocBuilder.h"
#include "clang/APINotes/APINotesReader.h"
#include "clang/APINotes/Types.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Lex/Lexer.h"
#include "clang/Sema/SemaObjC.h"
#include "clang/Sema/SemaSwift.h"
#include <stack>
#include "clang/Basic/AttrList.inc"
Go to the source code of this file.
Macros | |
#define | ATTR(X) |
Functions | |
static bool | isIndirectPointerType (QualType Type) |
Determine whether this is a multi-level pointer type. | |
static void | applyAPINotesType (Sema &S, Decl *decl, StringRef typeString, VersionedInfoMetadata metadata) |
static void | applyNullability (Sema &S, Decl *decl, NullabilityKind nullability, VersionedInfoMetadata metadata) |
Apply nullability to the given declaration. | |
static StringRef | ASTAllocateString (ASTContext &Ctx, StringRef String) |
Copy a string into ASTContext-allocated memory. | |
static AttributeCommonInfo | getPlaceholderAttrInfo () |
template<typename A> | |
static void | handleAPINotedRetainCountAttribute (Sema &S, Decl *D, bool ShouldAddAttribute, VersionedInfoMetadata Metadata) |
static void | handleAPINotedRetainCountConvention (Sema &S, Decl *D, VersionedInfoMetadata Metadata, std::optional< api_notes::RetainCountConventionKind > Convention) |
static void | ProcessAPINotes (Sema &S, Decl *D, const api_notes::CommonEntityInfo &Info, VersionedInfoMetadata Metadata) |
static void | ProcessAPINotes (Sema &S, Decl *D, const api_notes::CommonTypeInfo &Info, VersionedInfoMetadata Metadata) |
static bool | checkAPINotesReplacementType (Sema &S, SourceLocation Loc, QualType OrigType, QualType ReplacementType) |
Check that the replacement type provided by API notes is reasonable. | |
static void | ProcessAPINotes (Sema &S, Decl *D, const api_notes::VariableInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a variable or property. | |
static void | ProcessAPINotes (Sema &S, ParmVarDecl *D, const api_notes::ParamInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a parameter. | |
static void | ProcessAPINotes (Sema &S, VarDecl *D, const api_notes::GlobalVariableInfo &Info, VersionedInfoMetadata metadata) |
Process API notes for a global variable. | |
static void | ProcessAPINotes (Sema &S, FieldDecl *D, const api_notes::FieldInfo &Info, VersionedInfoMetadata metadata) |
Process API notes for a C field. | |
static void | ProcessAPINotes (Sema &S, ObjCPropertyDecl *D, const api_notes::ObjCPropertyInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for an Objective-C property. | |
static void | ProcessAPINotes (Sema &S, FunctionOrMethod AnyFunc, const api_notes::FunctionInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a function or method. | |
static void | ProcessAPINotes (Sema &S, CXXMethodDecl *Method, const api_notes::CXXMethodInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a C++ method. | |
static void | ProcessAPINotes (Sema &S, FunctionDecl *D, const api_notes::GlobalFunctionInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a global function. | |
static void | ProcessAPINotes (Sema &S, EnumConstantDecl *D, const api_notes::EnumConstantInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for an enumerator. | |
static void | ProcessAPINotes (Sema &S, ObjCMethodDecl *D, const api_notes::ObjCMethodInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for an Objective-C method. | |
static void | ProcessAPINotes (Sema &S, TagDecl *D, const api_notes::TagInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a tag. | |
static void | ProcessAPINotes (Sema &S, TypedefNameDecl *D, const api_notes::TypedefInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for a typedef. | |
static void | ProcessAPINotes (Sema &S, ObjCContainerDecl *D, const api_notes::ContextInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for an Objective-C class or protocol. | |
static void | ProcessAPINotes (Sema &S, ObjCInterfaceDecl *D, const api_notes::ContextInfo &Info, VersionedInfoMetadata Metadata) |
Process API notes for an Objective-C class. | |
template<typename SpecificInfo> | |
static void | maybeAttachUnversionedSwiftName (Sema &S, Decl *D, const api_notes::APINotesReader::VersionedInfo< SpecificInfo > Info) |
If we're applying API notes with an active, non-default version, and the versioned API notes have a SwiftName but the declaration normally wouldn't have one, add a removal attribute to make it clear that the new SwiftName attribute only applies to the active version of D , not to all versions. | |
template<typename SpecificDecl, typename SpecificInfo> | |
static void | ProcessVersionedAPINotes (Sema &S, SpecificDecl *D, const api_notes::APINotesReader::VersionedInfo< SpecificInfo > Info) |
Processes all versions of versioned API notes. | |
static std::optional< api_notes::Context > | UnwindNamespaceContext (DeclContext *DC, api_notes::APINotesManager &APINotes) |
static std::optional< api_notes::Context > | UnwindTagContext (TagDecl *DC, api_notes::APINotesManager &APINotes) |
#define ATTR | ( | X | ) |
Definition at line 129 of file SemaAPINotes.cpp.
|
static |
Definition at line 56 of file SemaAPINotes.cpp.
References clang::Sema::ApplyAPINotesType(), clang::Sema::captureSwiftVersionIndependentAPINotes(), clang::Sema::Context, and clang::ast_matchers::decl.
Referenced by ProcessAPINotes().
|
static |
Apply nullability to the given declaration.
Definition at line 77 of file SemaAPINotes.cpp.
References clang::Sema::ApplyNullability(), clang::Sema::captureSwiftVersionIndependentAPINotes(), clang::Sema::Context, clang::ast_matchers::decl, clang::NonNull, clang::Nullable, clang::NullableResult, and clang::Unspecified.
Referenced by ProcessAPINotes(), and ProcessAPINotes().
|
static |
Copy a string into ASTContext-allocated memory.
Definition at line 112 of file SemaAPINotes.cpp.
References clang::ASTContext::Allocate(), and memcpy().
Referenced by ProcessAPINotes().
|
static |
Check that the replacement type provided by API notes is reasonable.
This is a very weak form of ABI check.
Definition at line 374 of file SemaAPINotes.cpp.
References clang::Sema::Context, clang::SemaBase::Diag(), and clang::ASTContext::getTypeSize().
Referenced by clang::Sema::ApplyAPINotesType(), and ProcessAPINotes().
|
static |
Definition at line 118 of file SemaAPINotes.cpp.
References clang::AttributeCommonInfo::AS_GNU, and clang::AttributeCommonInfo::UnknownAttribute.
Referenced by handleAPINotedRetainCountAttribute(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), and ProcessAPINotes().
|
static |
Definition at line 196 of file SemaAPINotes.cpp.
References clang::Decl::attrs(), clang::Sema::Context, getPlaceholderAttrInfo(), and Next.
Referenced by handleAPINotedRetainCountConvention().
|
static |
Definition at line 215 of file SemaAPINotes.cpp.
References clang::api_notes::CFReturnsNotRetained, clang::api_notes::CFReturnsRetained, handleAPINotedRetainCountAttribute(), clang::isa(), clang::api_notes::None, clang::api_notes::NSReturnsNotRetained, and clang::api_notes::NSReturnsRetained.
Referenced by ProcessAPINotes(), and ProcessAPINotes().
Determine whether this is a multi-level pointer type.
Definition at line 47 of file SemaAPINotes.cpp.
References clang::Type::getPointeeType(), clang::Type::isAnyPointerType(), clang::Type::isMemberPointerType(), clang::QualType::isNull(), and clang::Type::isObjCObjectPointerType().
Referenced by clang::Sema::ApplyNullability().
|
static |
If we're applying API notes with an active, non-default version, and the versioned API notes have a SwiftName but the declaration normally wouldn't have one, add a removal attribute to make it clear that the new SwiftName attribute only applies to the active version of D
, not to all versions.
This must be run before processing API notes for D
, because otherwise any existing SwiftName attribute will have been packaged up in a SwiftVersionedAdditionAttr.
Definition at line 854 of file SemaAPINotes.cpp.
References clang::api_notes::APINotesReader::VersionedInfo< T >::getSelected(), and clang::Decl::hasAttr().
Referenced by ProcessVersionedAPINotes().
|
static |
Process API notes for a C++ method.
Definition at line 653 of file SemaAPINotes.cpp.
References clang::Sema::Context, clang::ASTContext::getAttributedType(), getPlaceholderAttrInfo(), clang::TypeLocBuilder::getTypeSourceInfo(), clang::sema::implicitObjectParamIsLifetimeBound(), ProcessAPINotes(), clang::TypeLocBuilder::push(), clang::TypeLocBuilder::pushFullCopy(), clang::AttributedTypeLoc::setAttr(), and clang::api_notes::CXXMethodInfo::This.
|
static |
Definition at line 249 of file SemaAPINotes.cpp.
References clang::Addition, clang::Sema::AP_Explicit, ASTAllocateString(), clang::Decl::attrs(), clang::Sema::Context, clang::IdentifierTable::get(), getPlaceholderAttrInfo(), clang::api_notes::CommonEntityInfo::getSwiftSafety(), clang::ASTContext::Idents, clang::api_notes::CommonEntityInfo::isSwiftPrivate(), clang::api_notes::Safe, clang::api_notes::CommonEntityInfo::Unavailable, clang::api_notes::CommonEntityInfo::UnavailableInSwift, clang::api_notes::CommonEntityInfo::UnavailableMsg, and clang::api_notes::Unspecified.
Referenced by clang::Sema::ActOnAliasDeclaration(), clang::Sema::ActOnStartNamespaceDef(), clang::Sema::ActOnUsingDirective(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), ProcessAPINotes(), and ProcessVersionedAPINotes().
|
static |
|
static |
Process API notes for a variable or property.
Definition at line 475 of file SemaAPINotes.cpp.
References applyAPINotesType(), applyNullability(), clang::api_notes::VariableInfo::getNullability(), clang::api_notes::VariableInfo::getType(), and ProcessAPINotes().
|
static |
Process API notes for an enumerator.
Definition at line 684 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Process API notes for a C field.
Definition at line 526 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Process API notes for a global function.
Definition at line 675 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Process API notes for a function or method.
Definition at line 556 of file SemaAPINotes.cpp.
References clang::Decl::addAttr(), applyNullability(), clang::cast(), clang::Type::castAs(), checkAPINotesReplacementType(), clang::Sema::Context, clang::Type::getAs(), clang::QualType::getAsOpaquePtr(), clang::ASTContext::getFunctionNoProtoType(), clang::ASTContext::getFunctionType(), clang::Decl::getLocation(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::api_notes::FunctionInfo::getParamTypeInfo(), clang::api_notes::FunctionInfo::getRetainCountConvention(), clang::FunctionDecl::getReturnType(), clang::ObjCMethodDecl::getReturnType(), clang::api_notes::FunctionInfo::getReturnTypeInfo(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ValueDecl::getType(), clang::Sema::GetTypeFromParser(), handleAPINotedRetainCountConvention(), clang::QualType::isNull(), clang::api_notes::FunctionInfo::NullabilityAudited, clang::ObjCMethodDecl::param_begin(), clang::ObjCMethodDecl::param_size(), clang::FunctionDecl::parameters(), clang::api_notes::FunctionInfo::Params, clang::Sema::ParseTypeFromStringCallback, ProcessAPINotes(), clang::api_notes::FunctionInfo::ResultType, clang::ObjCMethodDecl::setReturnType(), clang::ObjCMethodDecl::setReturnTypeSourceInfo(), clang::ValueDecl::setType(), and clang::api_notes::FunctionInfo::SwiftReturnOwnership.
|
static |
Process API notes for an Objective-C class or protocol.
Definition at line 812 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Process API notes for an Objective-C class.
Definition at line 821 of file SemaAPINotes.cpp.
References clang::Sema::Context, getPlaceholderAttrInfo(), clang::api_notes::ContextInfo::getSwiftImportAsNonGeneric(), clang::api_notes::ContextInfo::getSwiftObjCMembers(), and ProcessAPINotes().
|
static |
Process API notes for an Objective-C method.
Definition at line 693 of file SemaAPINotes.cpp.
References clang::Sema::Context, clang::api_notes::ObjCMethodInfo::DesignatedInit, clang::ObjCMethodDecl::getClassInterface(), getPlaceholderAttrInfo(), and ProcessAPINotes().
|
static |
Process API notes for an Objective-C property.
Definition at line 535 of file SemaAPINotes.cpp.
References clang::Sema::Context, getPlaceholderAttrInfo(), clang::api_notes::ObjCPropertyInfo::getSwiftImportAsAccessors(), and ProcessAPINotes().
|
static |
Process API notes for a parameter.
Definition at line 491 of file SemaAPINotes.cpp.
References clang::Sema::Context, getPlaceholderAttrInfo(), clang::api_notes::ParamInfo::getRetainCountConvention(), handleAPINotedRetainCountConvention(), clang::api_notes::ParamInfo::isLifetimebound(), clang::api_notes::ParamInfo::isNoEscape(), and ProcessAPINotes().
|
static |
Process API notes for a tag.
Definition at line 714 of file SemaAPINotes.cpp.
References clang::Decl::addAttr(), clang::Sema::Context, clang::api_notes::TagInfo::EnumExtensibility, getPlaceholderAttrInfo(), clang::api_notes::TagInfo::isFlagEnum(), clang::api_notes::TagInfo::isSwiftCopyable(), clang::api_notes::TagInfo::isSwiftEscapable(), ProcessAPINotes(), clang::api_notes::TagInfo::SwiftDefaultOwnership, clang::api_notes::TagInfo::SwiftDestroyOp, clang::api_notes::TagInfo::SwiftImportAs, clang::api_notes::TagInfo::SwiftReleaseOp, and clang::api_notes::TagInfo::SwiftRetainOp.
|
static |
Process API notes for a typedef.
Definition at line 775 of file SemaAPINotes.cpp.
References clang::AttributeCommonInfo::AS_GNU, clang::Sema::Context, ProcessAPINotes(), and clang::api_notes::TypedefInfo::SwiftWrapper.
|
static |
Process API notes for a global variable.
Definition at line 517 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Processes all versions of versioned API notes.
Just dispatches to the various ProcessAPINotes functions in this file.
Definition at line 892 of file SemaAPINotes.cpp.
References clang::Sema::captureSwiftVersionIndependentAPINotes(), clang::api_notes::APINotesReader::VersionedInfo< T >::getSelected(), maybeAttachUnversionedSwiftName(), ProcessAPINotes(), and clang::api_notes::APINotesReader::VersionedInfo< T >::size().
Referenced by clang::Sema::ProcessAPINotes().
|
static |
Definition at line 925 of file SemaAPINotes.cpp.
References clang::api_notes::APINotesManager::findAPINotes(), and clang::api_notes::Namespace.
Referenced by clang::Sema::ProcessAPINotes(), and UnwindTagContext().
|
static |
Definition at line 956 of file SemaAPINotes.cpp.
References clang::api_notes::APINotesManager::findAPINotes(), clang::Decl::getLocation(), clang::api_notes::Tag, and UnwindNamespaceContext().
Referenced by clang::Sema::ProcessAPINotes().