clang: lib/Sema/SemaTypeTraits.cpp File Reference (original) (raw)

Go to the source code of this file.

Typedefs
using ExtractedTypeTraitInfo
Enumerations
enum class TypeTraitReturnType { Bool, SizeT }
Functions
static CXXMethodDecl * LookupSpecialMemberFromXValue (Sema &SemaRef, const CXXRecordDecl *RD, bool Assign)
static bool hasSuitableConstructorForRelocation (Sema &SemaRef, const CXXRecordDecl *D, bool AllowUserDefined)
static bool hasSuitableMoveAssignmentOperatorForRelocation (Sema &SemaRef, const CXXRecordDecl *D, bool AllowUserDefined)
static bool IsDefaultMovable (Sema &SemaRef, const CXXRecordDecl *D)
static bool IsEligibleForTrivialRelocation (Sema &SemaRef, const CXXRecordDecl *D)
static bool DiagnoseVLAInCXXTypeTrait (Sema &S, const TypeSourceInfo *T, clang::tok::TokenKind TypeTraitID)
Checks that type T is not a VLA.
static bool DiagnoseAtomicInCXXTypeTrait (Sema &S, const TypeSourceInfo *T, clang::tok::TokenKind TypeTraitID)
Checks that type T is not an atomic type (_Atomic).
static bool CheckUnaryTypeTraitTypeCompleteness (Sema &S, TypeTrait UTT, SourceLocation Loc, QualType ArgTy)
Check the completeness of a type in a unary type trait.
static bool HasNoThrowOperator (CXXRecordDecl *RD, OverloadedOperatorKind Op, Sema &Self, SourceLocation KeyLoc, ASTContext &C, bool(CXXRecordDecl::*HasTrivial)() const, bool(CXXRecordDecl::*HasNonTrivial)() const, bool(CXXMethodDecl::*IsDesiredOp)() const)
static bool HasNonDeletedDefaultedEqualityComparison (Sema &S, const CXXRecordDecl *Decl, SourceLocation KeyLoc)
static bool isTriviallyEqualityComparableType (Sema &S, QualType Type, SourceLocation KeyLoc)
static bool IsTriviallyRelocatableType (Sema &SemaRef, QualType T)
static bool EvaluateUnaryTypeTrait (Sema &Self, TypeTrait UTT, SourceLocation KeyLoc, TypeSourceInfo *TInfo)
static bool EvaluateBinaryTypeTrait (Sema &Self, TypeTrait BTT, const TypeSourceInfo *Lhs, const TypeSourceInfo *Rhs, SourceLocation KeyLoc)
static ExprResult CheckConvertibilityForTypeTraits (Sema &Self, const TypeSourceInfo *Lhs, const TypeSourceInfo *Rhs, SourceLocation KeyLoc, llvm::BumpPtrAllocator &OpaqueExprAllocator)
static APValue EvaluateSizeTTypeTrait (Sema &S, TypeTrait Kind, SourceLocation KWLoc, ArrayRef< TypeSourceInfo * > Args, SourceLocation RParenLoc, bool IsDependent)
static bool EvaluateBooleanTypeTrait (Sema &S, TypeTrait Kind, SourceLocation KWLoc, ArrayRef< TypeSourceInfo * > Args, SourceLocation RParenLoc, bool IsDependent)
static TypeTraitReturnType GetReturnType (TypeTrait Kind)
static uint64_t EvaluateArrayTypeTrait (Sema &Self, ArrayTypeTrait ATT, QualType T, Expr *DimExpr, SourceLocation KeyLoc)
static bool EvaluateExpressionTrait (ExpressionTrait ET, Expr *E)
static std::optional< TypeTrait > StdNameToTypeTrait (StringRef Name)
static ExtractedTypeTraitInfo ExtractTypeTraitFromExpression (const Expr *E)
static void DiagnoseNonDefaultMovable (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonTriviallyRelocatableReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonTriviallyRelocatableReason (Sema &SemaRef, SourceLocation Loc, QualType T)
static void DiagnoseNonTriviallyCopyableReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonConstructibleReason (Sema &SemaRef, SourceLocation Loc, const llvm::SmallVector< clang::QualType, 1 > &Ts)
static void DiagnoseNonTriviallyCopyableReason (Sema &SemaRef, SourceLocation Loc, QualType T)
static void DiagnoseNonAssignableReason (Sema &SemaRef, SourceLocation Loc, QualType T, QualType U)
static void DiagnoseIsEmptyReason (Sema &S, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseIsEmptyReason (Sema &S, SourceLocation Loc, QualType T)
static void DiagnoseIsFinalReason (Sema &S, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseIsFinalReason (Sema &S, SourceLocation Loc, QualType T)
static bool hasMultipleDataBaseClassesWithFields (const CXXRecordDecl *D)
static void DiagnoseNonStandardLayoutReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonStandardLayoutReason (Sema &SemaRef, SourceLocation Loc, QualType T)
static void DiagnoseNonAggregateReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonAggregateReason (Sema &SemaRef, SourceLocation Loc, QualType T)
static void DiagnoseNonAbstractReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonAbstractReason (Sema &SemaRef, SourceLocation Loc, QualType T)

ExtractedTypeTraitInfo

Initial value:

std::optional<std::pair<TypeTrait, llvm::SmallVector<QualType, 1>>>

Definition at line 1947 of file SemaTypeTraits.cpp.

TypeTraitReturnType

enum class TypeTraitReturnType strong

CheckConvertibilityForTypeTraits()

Definition at line 1129 of file SemaTypeTraits.cpp.

References clang::InitializationKind::CreateCopy(), clang::ExprError(), clang::TypeLoc::getBeginLoc(), clang::QualType::getNonLValueExprType(), clang::TypeSourceInfo::getType(), clang::TypeSourceInfo::getTypeLoc(), clang::Expr::getValueKindForType(), clang::Sema::SFINAETrap::hasErrorOccurred(), clang::Init, clang::InitializedEntity::InitializeTemporary(), clang::Type::isArrayType(), clang::Type::isFunctionType(), clang::Type::isObjectType(), clang::Self, clang::Sema::Unevaluated, and clang::Unevaluated.

Referenced by EvaluateBinaryTypeTrait(), and EvaluateBooleanTypeTrait().

CheckUnaryTypeTraitTypeCompleteness()

DiagnoseAtomicInCXXTypeTrait()

DiagnoseIsEmptyReason() [1/2]

DiagnoseIsEmptyReason() [2/2]

DiagnoseIsFinalReason() [1/2]

DiagnoseIsFinalReason() [2/2]

DiagnoseNonAbstractReason() [1/2]

DiagnoseNonAbstractReason() [2/2]

DiagnoseNonAggregateReason() [1/2]

Definition at line 2532 of file SemaTypeTraits.cpp.

References clang::AS_private, clang::AS_protected, clang::CXXRecordDecl::bases(), clang::CXXRecordDecl::ctors(), clang::DeclContext::decls(), clang::SemaBase::Diag(), clang::RecordDecl::fields(), clang::Decl::getLocation(), clang::TagDecl::getSourceRange(), clang::CXXRecordDecl::isPolymorphic(), and clang::CXXRecordDecl::methods().

Referenced by DiagnoseNonAggregateReason(), and clang::Sema::DiagnoseTypeTraitDetails().

DiagnoseNonAggregateReason() [2/2]

DiagnoseNonAssignableReason()

Definition at line 2248 of file SemaTypeTraits.cpp.

References clang::Sema::BuildBinOp(), clang::Sema::Context, clang::SemaBase::Diag(), clang::Decl::getLocation(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getTranslationUnitDecl(), clang::Expr::getValueKindForType(), clang::Decl::isInvalidDecl(), clang::T, clang::Sema::Unevaluated, and clang::Unevaluated.

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

DiagnoseNonConstructibleReason()

Definition at line 2175 of file SemaTypeTraits.cpp.

References clang::Sema::Context, clang::InitializationKind::CreateDirect(), clang::SemaBase::Diag(), clang::Decl::getLocation(), clang::QualType::getNonLValueExprType(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getTranslationUnitDecl(), clang::Expr::getValueKindForType(), clang::CXXRecordDecl::hasDefinition(), clang::Init, clang::InitializedEntity::InitializeTemporary(), clang::Type::isFunctionType(), clang::Decl::isInvalidDecl(), clang::Type::isObjectType(), clang::T, clang::Sema::Unevaluated, and clang::Unevaluated.

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

DiagnoseNonDefaultMovable()

Definition at line 2015 of file SemaTypeTraits.cpp.

References clang::CopyAssignment, clang::CopyConstructor, clang::SemaBase::Diag(), clang::CXXRecordDecl::getDestructor(), clang::Decl::getSourceRange(), clang::CXXRecordDecl::hasSimpleCopyAssignment(), clang::CXXRecordDecl::hasSimpleCopyConstructor(), clang::CXXRecordDecl::hasSimpleMoveAssignment(), clang::CXXRecordDecl::hasSimpleMoveConstructor(), clang::CXXRecordDecl::hasUserDeclaredCopyAssignment(), clang::CXXRecordDecl::hasUserDeclaredCopyConstructor(), clang::CXXRecordDecl::hasUserDeclaredMoveAssignment(), clang::CXXRecordDecl::hasUserDeclaredMoveConstructor(), clang::TagDecl::isUnion(), LookupSpecialMemberFromXValue(), clang::MoveAssignment, and clang::MoveConstructor.

Referenced by DiagnoseNonTriviallyRelocatableReason().

DiagnoseNonStandardLayoutReason() [1/2]

Definition at line 2406 of file SemaTypeTraits.cpp.

References clang::AS_none, clang::CXXRecordDecl::bases(), clang::SemaBase::Diag(), clang::RecordDecl::fields(), clang::CXXRecordDecl::forallBases(), clang::Decl::getAccess(), clang::Decl::getLocation(), clang::TagDecl::getSourceRange(), clang::CXXRecordDecl::hasDirectFields(), hasMultipleDataBaseClassesWithFields(), clang::CXXRecordDecl::isPolymorphic(), and clang::CXXRecordDecl::methods().

Referenced by DiagnoseNonStandardLayoutReason(), and clang::Sema::DiagnoseTypeTraitDetails().

DiagnoseNonStandardLayoutReason() [2/2]

DiagnoseNonTriviallyCopyableReason() [1/2]

Definition at line 2118 of file SemaTypeTraits.cpp.

References clang::Sema::DefaultedFunctionKind::asSpecialMember(), clang::CXXRecordDecl::bases(), clang::CopyAssignment, clang::CopyConstructor, clang::SemaBase::Diag(), clang::RecordDecl::fields(), clang::Decl::getASTContext(), clang::Sema::getDefaultedFunctionKind(), clang::CXXRecordDecl::getDestructor(), clang::FunctionDecl::getSourceRange(), clang::CXXRecordDecl::hasDeletedDestructor(), clang::FunctionDecl::isTrivial(), clang::CXXRecordDecl::methods(), clang::MoveAssignment, and clang::MoveConstructor.

Referenced by DiagnoseNonTriviallyCopyableReason(), and clang::Sema::DiagnoseTypeTraitDetails().

DiagnoseNonTriviallyCopyableReason() [2/2]

DiagnoseNonTriviallyRelocatableReason() [1/2]

DiagnoseNonTriviallyRelocatableReason() [2/2]

DiagnoseVLAInCXXTypeTrait()

EvaluateArrayTypeTrait()

EvaluateBinaryTypeTrait()

Definition at line 1561 of file SemaTypeTraits.cpp.

References clang::cast(), CheckConvertibilityForTypeTraits(), clang::CT_Cannot, DiagnoseVLAInCXXTypeTrait(), clang::Type::getAsCanonical(), clang::TypeLoc::getBeginLoc(), clang::QualType::getNonReferenceType(), clang::TypeSourceInfo::getType(), clang::TypeSourceInfo::getTypeLoc(), clang::Expr::getValueKindForType(), clang::Sema::SFINAETrap::hasErrorOccurred(), clang::QualType::hasNonTrivialObjCLifetime(), clang::isa(), clang::Type::isDependentType(), clang::Type::isIncompleteArrayType(), clang::Type::isLValueReferenceType(), clang::Type::isRValueReferenceType(), clang::Type::isStructureOrClassType(), clang::Type::isVoidType(), clang::Self, clang::Success, clang::Sema::Unevaluated, clang::Unevaluated, clang::VK_LValue, clang::VK_PRValue, and clang::VK_XValue.

Referenced by EvaluateBooleanTypeTrait().

EvaluateBooleanTypeTrait()

Definition at line 1226 of file SemaTypeTraits.cpp.

References clang::BTT_Last, clang::Sema::canThrow(), CheckConvertibilityForTypeTraits(), clang::Sema::Context, clang::InitializationKind::CreateCopy(), clang::InitializationKind::CreateDirect(), clang::ASTContext::CreateTypeSourceInfo(), clang::CT_Cannot, EvaluateBinaryTypeTrait(), EvaluateUnaryTypeTrait(), clang::QualType::getNonLValueExprType(), clang::ASTContext::getPointerType(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getTranslationUnitDecl(), clang::Expr::getValueKindForType(), clang::Sema::SFINAETrap::hasErrorOccurred(), clang::Init, clang::InitializedEntity::InitializeTemporary(), clang::CXXRecordDecl::isAbstract(), clang::Type::isFunctionType(), clang::Type::isIncompleteArrayType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Type::isObjectType(), clang::Type::isVoidType(), clang::Sema::RequireCompleteType(), clang::T, clang::Sema::Unevaluated, clang::Unevaluated, and clang::UTT_Last.

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

EvaluateExpressionTrait()

EvaluateSizeTTypeTrait()

EvaluateUnaryTypeTrait()

Definition at line 620 of file SemaTypeTraits.cpp.

References clang::AS_public, clang::C, clang::RecordDecl::canPassInRegisters(), clang::cast(), clang::Constructor, clang::CXXRecordDecl::ctors(), clang::CXXRecordDecl::defaultedCopyConstructorIsDeleted(), clang::CXXRecordDecl::defaultedMoveConstructorIsDeleted(), clang::Destructor, DiagnoseAtomicInCXXTypeTrait(), DiagnoseVLAInCXXTypeTrait(), clang::Type::getAsCXXRecordDecl(), clang::TypeLoc::getBeginLoc(), clang::CXXRecordDecl::getDestructor(), clang::FunctionProtoType::getNumParams(), clang::TypeSourceInfo::getType(), clang::TypeSourceInfo::getTypeLoc(), clang::Decl::hasAttr(), clang::CXXRecordDecl::hasNonTrivialCopyAssignment(), clang::CXXRecordDecl::hasNonTrivialCopyConstructor(), clang::CXXRecordDecl::hasNonTrivialDefaultConstructor(), clang::CXXRecordDecl::hasNonTrivialMoveAssignment(), clang::CXXRecordDecl::hasNonTrivialMoveConstructor(), HasNoThrowOperator(), clang::CXXRecordDecl::hasTrivialCopyAssignment(), clang::CXXRecordDecl::hasTrivialCopyConstructor(), clang::CXXRecordDecl::hasTrivialDefaultConstructor(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::CXXRecordDecl::hasTrivialMoveAssignment(), clang::CXXRecordDecl::hasTrivialMoveConstructor(), clang::isa(), clang::CXXRecordDecl::isAbstract(), clang::Type::isAggregateType(), clang::Type::isArrayType(), clang::CXXMethodDecl::isCopyAssignmentOperator(), clang::FunctionDecl::isDeleted(), clang::CXXRecordDecl::isEmpty(), clang::CXXMethodDecl::isMoveAssignmentOperator(), clang::FunctionProtoType::isNothrow(), clang::CXXRecordDecl::isPolymorphic(), clang::Type::isScalarType(), isTriviallyEqualityComparableType(), IsTriviallyRelocatableType(), clang::TagDecl::isUnion(), clang::FunctionDecl::isUserProvided(), clang::Type::isVectorType(), clang::CXXRecordDecl::needsImplicitCopyConstructor(), clang::CXXRecordDecl::needsImplicitDefaultConstructor(), clang::CXXRecordDecl::needsImplicitMoveConstructor(), clang::Qualifiers::OCL_Autoreleasing, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Qualifiers::OCL_Weak, clang::Self, and clang::T.

Referenced by EvaluateBooleanTypeTrait().

ExtractTypeTraitFromExpression()

ExtractedTypeTraitInfo ExtractTypeTraitFromExpression ( const Expr * E) static

GetReturnType()

hasMultipleDataBaseClassesWithFields()

HasNonDeletedDefaultedEqualityComparison()

Definition at line 510 of file SemaTypeTraits.cpp.

References clang::Sema::Context, clang::Sema::CreateOverloadedBinOp(), clang::ASTContext::getCanonicalTagType(), clang::CallExpr::getDirectCallee(), clang::ASTContext::getTranslationUnitDecl(), clang::Sema::SFINAETrap::hasErrorOccurred(), clang::ASTContext::hasSameUnqualifiedType(), clang::Sema::LookupBinOp(), clang::T, clang::Sema::TUScope, clang::Sema::Unevaluated, and clang::VK_LValue.

Referenced by isTriviallyEqualityComparableType().

HasNoThrowOperator()

Definition at line 477 of file SemaTypeTraits.cpp.

References clang::LookupResult::begin(), clang::C, clang::cast(), clang::Type::castAs(), clang::LookupResult::end(), clang::ValueDecl::getType(), clang::isa(), clang::FunctionProtoType::isNothrow(), clang::Sema::LookupOrdinaryName, clang::Self, and clang::LookupResult::suppressDiagnostics().

Referenced by EvaluateUnaryTypeTrait().

hasSuitableConstructorForRelocation()

hasSuitableMoveAssignmentOperatorForRelocation()

bool hasSuitableMoveAssignmentOperatorForRelocation ( Sema & SemaRef, const CXXRecordDecl * D, bool AllowUserDefined ) static

IsDefaultMovable()

IsEligibleForTrivialRelocation()

isTriviallyEqualityComparableType()

IsTriviallyRelocatableType()

Definition at line 586 of file SemaTypeTraits.cpp.

References clang::RecordDecl::canPassInRegisters(), clang::ASTContext::containsAddressDiscriminatedPointerAuth(), clang::Type::getAsCXXRecordDecl(), clang::Type::getAsRecordDecl(), clang::Sema::getASTContext(), clang::ASTContext::getBaseElementType(), clang::Sema::IsCXXTriviallyRelocatableType(), clang::Type::isIncompleteType(), clang::Type::isObjectType(), clang::CXXRecordDecl::isPolymorphic(), clang::QualType::isTriviallyCopyableType(), clang::QualType::PCK_ARCStrong, clang::QualType::PCK_Trivial, and clang::T.

Referenced by EvaluateUnaryTypeTrait().

LookupSpecialMemberFromXValue()

Definition at line 31 of file SemaTypeTraits.cpp.

References clang::Sema::AddMethodCandidate(), clang::Sema::AddMethodTemplateCandidate(), clang::Sema::AddOverloadCandidate(), clang::Sema::AddTemplateOverloadCandidate(), clang::AS_none, clang::DeclContextLookupResult::begin(), clang::OverloadCandidateSet::BestViableFunction(), clang::cast(), clang::Expr::Classify(), clang::OverloadCandidateSet::CSK_Normal, clang::ASTContext::DeclarationNames, clang::DeclContextLookupResult::empty(), clang::DeclContextLookupResult::end(), clang::Sema::getASTContext(), clang::ASTContext::getCanonicalTagType(), clang::getConstructorInfo(), clang::DeclarationNameTable::getCXXConstructorName(), clang::DeclarationNameTable::getCXXOperatorName(), clang::CXXRecordDecl::getDefinition(), clang::Decl::getLocation(), clang::NamedDecl::getUnderlyingDecl(), clang::DeclContext::lookup(), clang::DeclAccessPair::make(), clang::OR_Deleted, clang::OR_Success, clang::VK_LValue, and clang::VK_XValue.

Referenced by DiagnoseNonDefaultMovable(), hasSuitableConstructorForRelocation(), and hasSuitableMoveAssignmentOperatorForRelocation().

StdNameToTypeTrait()

std::optional< TypeTrait > StdNameToTypeTrait ( StringRef Name) static