clang 22.0.0git
SemaTypeTraits.cpp File Reference

Go to the source code of this file.

Typedefs

using ExtractedTypeTraitInfo

Enumerations

enum class  TypeTraitReturnType { Bool , SizeT }

Functions

static CXXMethodDeclLookupSpecialMemberFromXValue (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 IsEligibleForReplacement (Sema &SemaRef, const CXXRecordDecl *D)
static bool IsCXXReplaceableType (Sema &S, const CXXRecordDecl *RD)
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< TypeTraitStdNameToTypeTrait (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 DiagnoseNonReplaceableReason (Sema &SemaRef, SourceLocation Loc, const CXXRecordDecl *D)
static void DiagnoseNonReplaceableReason (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)

Typedef Documentation

◆ ExtractedTypeTraitInfo

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

Definition at line 2021 of file SemaTypeTraits.cpp.

Enumeration Type Documentation

◆ TypeTraitReturnType

enum class TypeTraitReturnType
strong
Enumerator
Bool 
SizeT 

Definition at line 1515 of file SemaTypeTraits.cpp.

Function Documentation

◆ CheckConvertibilityForTypeTraits()

◆ CheckUnaryTypeTraitTypeCompleteness()

bool CheckUnaryTypeTraitTypeCompleteness ( Sema & S,
TypeTrait UTT,
SourceLocation Loc,
QualType ArgTy )
static

Check the completeness of a type in a unary type trait.

If the particular type trait requires a complete type, tries to complete it. If completing the type fails, a diagnostic is emitted and false returned. If completing the type succeeds or no completion was required, returns true.

Definition at line 411 of file SemaTypeTraits.cpp.

References clang::Type::getAsCXXRecordDecl(), clang::Type::getBaseElementTypeUnsafe(), clang::Type::isArrayType(), clang::Type::isIncompleteArrayType(), clang::Type::isVoidType(), and clang::Sema::RequireCompleteType().

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

◆ DiagnoseAtomicInCXXTypeTrait()

bool DiagnoseAtomicInCXXTypeTrait ( Sema & S,
const TypeSourceInfo * T,
clang::tok::TokenKind TypeTraitID )
static

Checks that type T is not an atomic type (_Atomic).

Returns
true if T is VLA and a diagnostic was emitted, false otherwise.

Definition at line 395 of file SemaTypeTraits.cpp.

References clang::SemaBase::Diag(), and clang::T.

Referenced by EvaluateUnaryTypeTrait().

◆ DiagnoseIsEmptyReason() [1/2]

◆ DiagnoseIsEmptyReason() [2/2]

void DiagnoseIsEmptyReason ( Sema & S,
SourceLocation Loc,
QualType T )
static

◆ DiagnoseIsFinalReason() [1/2]

◆ DiagnoseIsFinalReason() [2/2]

void DiagnoseIsFinalReason ( Sema & S,
SourceLocation Loc,
QualType T )
static

◆ DiagnoseNonAbstractReason() [1/2]

void DiagnoseNonAbstractReason ( Sema & SemaRef,
SourceLocation Loc,
const CXXRecordDecl * D )
static

◆ DiagnoseNonAbstractReason() [2/2]

◆ DiagnoseNonAggregateReason() [1/2]

◆ DiagnoseNonAggregateReason() [2/2]

void DiagnoseNonAggregateReason ( Sema & SemaRef,
SourceLocation Loc,
QualType T )
static

◆ DiagnoseNonAssignableReason()

◆ DiagnoseNonConstructibleReason()

◆ DiagnoseNonDefaultMovable()

◆ DiagnoseNonReplaceableReason() [1/2]

◆ DiagnoseNonReplaceableReason() [2/2]

◆ DiagnoseNonStandardLayoutReason() [1/2]

◆ DiagnoseNonStandardLayoutReason() [2/2]

◆ DiagnoseNonTriviallyCopyableReason() [1/2]

◆ DiagnoseNonTriviallyCopyableReason() [2/2]

◆ DiagnoseNonTriviallyRelocatableReason() [1/2]

◆ DiagnoseNonTriviallyRelocatableReason() [2/2]

◆ DiagnoseVLAInCXXTypeTrait()

bool DiagnoseVLAInCXXTypeTrait ( Sema & S,
const TypeSourceInfo * T,
clang::tok::TokenKind TypeTraitID )
static

Checks that type T is not a VLA.

Returns
true if T is VLA and a diagnostic was emitted, false otherwise.

Definition at line 381 of file SemaTypeTraits.cpp.

References clang::SemaBase::Diag(), and clang::T.

Referenced by EvaluateBinaryTypeTrait(), and EvaluateUnaryTypeTrait().

◆ EvaluateArrayTypeTrait()

uint64_t EvaluateArrayTypeTrait ( Sema & Self,
ArrayTypeTrait ATT,
QualType T,
Expr * DimExpr,
SourceLocation KeyLoc )
static

◆ EvaluateBinaryTypeTrait()

◆ EvaluateBooleanTypeTrait()

◆ EvaluateExpressionTrait()

bool EvaluateExpressionTrait ( ExpressionTrait ET,
Expr * E )
static

◆ EvaluateSizeTTypeTrait()

◆ EvaluateUnaryTypeTrait()

bool EvaluateUnaryTypeTrait ( Sema & Self,
TypeTrait UTT,
SourceLocation KeyLoc,
TypeSourceInfo * TInfo )
static

Definition at line 704 of file SemaTypeTraits.cpp.

References clang::AS_public, clang::C, clang::RecordDecl::canPassInRegisters(), clang::cast(), clang::Constructor, 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::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()

◆ GetReturnType()

TypeTraitReturnType GetReturnType ( TypeTrait Kind)
static

Definition at line 1520 of file SemaTypeTraits.cpp.

References Bool, and SizeT.

◆ hasMultipleDataBaseClassesWithFields()

bool hasMultipleDataBaseClassesWithFields ( const CXXRecordDecl * D)
static

◆ HasNonDeletedDefaultedEqualityComparison()

◆ HasNoThrowOperator()

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

◆ hasSuitableConstructorForRelocation()

◆ hasSuitableMoveAssignmentOperatorForRelocation()

◆ IsCXXReplaceableType()

◆ IsDefaultMovable()

◆ IsEligibleForReplacement()

◆ IsEligibleForTrivialRelocation()

◆ isTriviallyEqualityComparableType()

◆ IsTriviallyRelocatableType()

◆ LookupSpecialMemberFromXValue()

◆ StdNameToTypeTrait()

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

Definition at line 2005 of file SemaTypeTraits.cpp.

Referenced by ExtractTypeTraitFromExpression().