clang 20.0.0git
|
#include "clang/APINotes/APINotesReader.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclObjC.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Lex/Lexer.h"
#include "clang/Sema/SemaInternal.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 | applyNullability (Sema &S, Decl *D, 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 130 of file SemaAPINotes.cpp.
|
static |
Apply nullability to the given declaration.
Definition at line 53 of file SemaAPINotes.cpp.
References clang::Sema::CheckImplicitNullabilityTypeSpecifier(), clang::Sema::Context, D, clang::Function, clang::FunctionType::getExtInfo(), clang::ASTContext::getFunctionNoProtoType(), clang::ASTContext::getFunctionType(), clang::Decl::getLocation(), clang::Value::getType(), isIndirectPointerType(), clang::ObjCPropertyAttribute::kind_null_resettable, clang::Decl::OBJC_TQ_CSNullability, and clang::Property.
Referenced by ProcessAPINotes().
|
static |
Copy a string into ASTContext-allocated memory.
Definition at line 113 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 349 of file SemaAPINotes.cpp.
References clang::Sema::Context, clang::SemaBase::Diag(), clang::ASTContext::getTypeSize(), and Loc.
Referenced by ProcessAPINotes().
|
static |
Definition at line 119 of file SemaAPINotes.cpp.
References clang::AttributeCommonInfo::AS_GNU, and clang::AttributeCommonInfo::UnknownAttribute.
Referenced by handleAPINotedRetainCountAttribute(), and ProcessAPINotes().
|
static |
Definition at line 197 of file SemaAPINotes.cpp.
References clang::Decl::attrs(), clang::Sema::Context, D, and getPlaceholderAttrInfo().
|
static |
Determine whether this is a multi-level pointer type.
Definition at line 43 of file SemaAPINotes.cpp.
References clang::Type::getPointeeType(), clang::Type::isAnyPointerType(), clang::Type::isMemberPointerType(), clang::QualType::isNull(), and clang::Type::isObjCObjectPointerType().
Referenced by 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 738 of file SemaAPINotes.cpp.
References D, 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 559 of file SemaAPINotes.cpp.
References ProcessAPINotes().
|
static |
Definition at line 250 of file SemaAPINotes.cpp.
References clang::Sema::AP_Explicit, ASTAllocateString(), clang::Decl::attrs(), clang::C, clang::Sema::Context, D, clang::SemaSwift::DiagnoseName(), clang::IdentifierTable::get(), clang::Sema::getASTContext(), clang::Decl::getLocation(), getPlaceholderAttrInfo(), clang::ASTContext::Idents, clang::api_notes::CommonEntityInfo::isSwiftPrivate(), clang::Sema::Swift(), clang::api_notes::CommonEntityInfo::SwiftName, clang::api_notes::CommonEntityInfo::Unavailable, clang::api_notes::CommonEntityInfo::UnavailableInSwift, and clang::api_notes::CommonEntityInfo::UnavailableMsg.
Referenced by ProcessAPINotes(), and ProcessVersionedAPINotes().
|
static |
Definition at line 319 of file SemaAPINotes.cpp.
References D, clang::api_notes::CommonTypeInfo::getNSErrorDomain(), clang::api_notes::CommonTypeInfo::getSwiftBridge(), and ProcessAPINotes().
|
static |
Process API notes for a variable or property.
Definition at line 363 of file SemaAPINotes.cpp.
References clang::SemaObjC::AdjustParameterTypeForObjCAutoRefCount(), applyNullability(), checkAPINotesReplacementType(), clang::Sema::Context, D, clang::OpaquePtr< PtrTy >::get(), clang::ASTContext::getAdjustedParameterType(), clang::Decl::getLocation(), clang::api_notes::VariableInfo::getNullability(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::api_notes::VariableInfo::getType(), clang::Sema::GetTypeFromParser(), clang::Sema::ObjC(), clang::Sema::ParseTypeFromStringCallback, ProcessAPINotes(), and clang::Property.
|
static |
Process API notes for an enumerator.
Definition at line 575 of file SemaAPINotes.cpp.
References D, and ProcessAPINotes().
|
static |
Process API notes for a C field.
Definition at line 437 of file SemaAPINotes.cpp.
References D, and ProcessAPINotes().
|
static |
Process API notes for a global function.
Definition at line 566 of file SemaAPINotes.cpp.
References D, and ProcessAPINotes().
|
static |
Process API notes for a function or method.
Definition at line 467 of file SemaAPINotes.cpp.
References applyNullability(), clang::Type::castAs(), checkAPINotesReplacementType(), clang::Sema::Context, D, clang::OpaquePtr< PtrTy >::get(), 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(), and clang::ValueDecl::setType().
|
static |
Process API notes for an Objective-C class or protocol.
Definition at line 696 of file SemaAPINotes.cpp.
References D, and ProcessAPINotes().
|
static |
Process API notes for an Objective-C class.
Definition at line 705 of file SemaAPINotes.cpp.
References clang::Sema::Context, D, 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 584 of file SemaAPINotes.cpp.
References clang::Sema::Context, D, clang::api_notes::ObjCMethodInfo::DesignatedInit, getPlaceholderAttrInfo(), and ProcessAPINotes().
|
static |
Process API notes for an Objective-C property.
Definition at line 446 of file SemaAPINotes.cpp.
References clang::Sema::Context, D, getPlaceholderAttrInfo(), clang::api_notes::ObjCPropertyInfo::getSwiftImportAsAccessors(), and ProcessAPINotes().
|
static |
Process API notes for a parameter.
Definition at line 409 of file SemaAPINotes.cpp.
References clang::Sema::Context, D, getPlaceholderAttrInfo(), clang::api_notes::ParamInfo::getRetainCountConvention(), handleAPINotedRetainCountConvention(), clang::api_notes::ParamInfo::isNoEscape(), and ProcessAPINotes().
|
static |
Process API notes for a tag.
Definition at line 605 of file SemaAPINotes.cpp.
References clang::Decl::addAttr(), clang::Sema::Context, D, clang::api_notes::TagInfo::EnumExtensibility, getPlaceholderAttrInfo(), clang::api_notes::TagInfo::isFlagEnum(), clang::api_notes::TagInfo::isSwiftCopyable(), ProcessAPINotes(), clang::api_notes::TagInfo::SwiftConformance, 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 659 of file SemaAPINotes.cpp.
References clang::AttributeCommonInfo::AS_GNU, clang::Sema::Context, D, ProcessAPINotes(), and clang::api_notes::TypedefInfo::SwiftWrapper.
|
static |
Process API notes for a global variable.
Definition at line 428 of file SemaAPINotes.cpp.
References D, and ProcessAPINotes().
|
static |
Processes all versions of versioned API notes.
Just dispatches to the various ProcessAPINotes functions in this file.
Definition at line 776 of file SemaAPINotes.cpp.
References D, 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 800 of file SemaAPINotes.cpp.
References clang::api_notes::APINotesManager::findAPINotes().
Referenced by clang::Sema::ProcessAPINotes(), and UnwindTagContext().
|
static |
Definition at line 831 of file SemaAPINotes.cpp.
References clang::api_notes::APINotesManager::findAPINotes(), clang::Decl::getLocation(), and UnwindNamespaceContext().
Referenced by clang::Sema::ProcessAPINotes().