clang 22.0.0git
Typedefs | Enumerations | Functions
SemaTypeTraits.cpp File Reference
#include "clang/AST/DeclCXX.h"
#include "clang/AST/TemplateBase.h"
#include "clang/AST/Type.h"
#include "clang/Basic/DiagnosticIDs.h"
#include "clang/Basic/DiagnosticParse.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/TypeTraits.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/Sema.h"
#include "clang/Sema/SemaHLSL.h"

Go to the source code of this file.

Typedefs

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

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)
 

Typedef Documentation

◆ ExtractedTypeTraitInfo

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

Definition at line 1972 of file SemaTypeTraits.cpp.

Enumeration Type Documentation

◆ TypeTraitReturnType

enum class TypeTraitReturnType
strong
Enumerator
Bool 
SizeT 

Definition at line 1513 of file SemaTypeTraits.cpp.

Function Documentation

◆ CheckConvertibilityForTypeTraits()

static ExprResult CheckConvertibilityForTypeTraits ( Sema Self,
const TypeSourceInfo Lhs,
const TypeSourceInfo Rhs,
SourceLocation  KeyLoc,
llvm::BumpPtrAllocator &  OpaqueExprAllocator 
)
static

◆ CheckUnaryTypeTraitTypeCompleteness()

static 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 409 of file SemaTypeTraits.cpp.

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

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

◆ DiagnoseAtomicInCXXTypeTrait()

static 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 393 of file SemaTypeTraits.cpp.

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

Referenced by EvaluateUnaryTypeTrait().

◆ DiagnoseIsEmptyReason() [1/2]

static void DiagnoseIsEmptyReason ( Sema S,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

Definition at line 2385 of file SemaTypeTraits.cpp.

References D, clang::SemaBase::Diag(), and Loc.

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

◆ DiagnoseIsEmptyReason() [2/2]

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

◆ DiagnoseIsFinalReason() [1/2]

static void DiagnoseIsFinalReason ( Sema S,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseIsFinalReason() [2/2]

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

◆ DiagnoseNonAssignableReason()

static void DiagnoseNonAssignableReason ( Sema SemaRef,
SourceLocation  Loc,
QualType  T,
QualType  U 
)
static

◆ DiagnoseNonConstructibleReason()

static void DiagnoseNonConstructibleReason ( Sema SemaRef,
SourceLocation  Loc,
const llvm::SmallVector< clang::QualType, 1 > &  Ts 
)
static

◆ DiagnoseNonDefaultMovable()

static void DiagnoseNonDefaultMovable ( Sema SemaRef,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseNonReplaceableReason() [1/2]

static void DiagnoseNonReplaceableReason ( Sema SemaRef,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseNonReplaceableReason() [2/2]

static void DiagnoseNonReplaceableReason ( Sema SemaRef,
SourceLocation  Loc,
QualType  T 
)
static

◆ DiagnoseNonStandardLayoutReason() [1/2]

static void DiagnoseNonStandardLayoutReason ( Sema SemaRef,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseNonStandardLayoutReason() [2/2]

static void DiagnoseNonStandardLayoutReason ( Sema SemaRef,
SourceLocation  Loc,
QualType  T 
)
static

◆ DiagnoseNonTriviallyCopyableReason() [1/2]

static void DiagnoseNonTriviallyCopyableReason ( Sema SemaRef,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseNonTriviallyCopyableReason() [2/2]

static void DiagnoseNonTriviallyCopyableReason ( Sema SemaRef,
SourceLocation  Loc,
QualType  T 
)
static

◆ DiagnoseNonTriviallyRelocatableReason() [1/2]

static void DiagnoseNonTriviallyRelocatableReason ( Sema SemaRef,
SourceLocation  Loc,
const CXXRecordDecl D 
)
static

◆ DiagnoseNonTriviallyRelocatableReason() [2/2]

static void DiagnoseNonTriviallyRelocatableReason ( Sema SemaRef,
SourceLocation  Loc,
QualType  T 
)
static

◆ DiagnoseVLAInCXXTypeTrait()

static 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 379 of file SemaTypeTraits.cpp.

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

Referenced by EvaluateBinaryTypeTrait(), and EvaluateUnaryTypeTrait().

◆ EvaluateArrayTypeTrait()

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

◆ EvaluateBinaryTypeTrait()

static bool EvaluateBinaryTypeTrait ( Sema Self,
TypeTrait  BTT,
const TypeSourceInfo Lhs,
const TypeSourceInfo Rhs,
SourceLocation  KeyLoc 
)
static

◆ EvaluateBooleanTypeTrait()

static bool EvaluateBooleanTypeTrait ( Sema S,
TypeTrait  Kind,
SourceLocation  KWLoc,
ArrayRef< TypeSourceInfo * >  Args,
SourceLocation  RParenLoc,
bool  IsDependent 
)
static

◆ EvaluateExpressionTrait()

static bool EvaluateExpressionTrait ( ExpressionTrait  ET,
Expr E 
)
static

◆ EvaluateSizeTTypeTrait()

static APValue EvaluateSizeTTypeTrait ( Sema S,
TypeTrait  Kind,
SourceLocation  KWLoc,
ArrayRef< TypeSourceInfo * >  Args,
SourceLocation  RParenLoc,
bool  IsDependent 
)
static

◆ EvaluateUnaryTypeTrait()

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

Definition at line 702 of file SemaTypeTraits.cpp.

References clang::AS_public, clang::C, clang::RecordDecl::canPassInRegisters(), clang::Constructor, clang::Destructor, DiagnoseAtomicInCXXTypeTrait(), DiagnoseVLAInCXXTypeTrait(), clang::Type::getAsCXXRecordDecl(), clang::TypeLoc::getBeginLoc(), clang::Type::getCanonicalTypeUnqualified(), 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::CXXRecordDecl::isAbstract(), clang::Type::isAggregateType(), clang::Type::isAnyComplexType(), clang::Type::isAnyPointerType(), clang::Type::isArithmeticType(), clang::Type::isArrayType(), clang::Type::isClassType(), clang::Type::isCompoundType(), clang::CXXMethodDecl::isCopyAssignmentOperator(), clang::FunctionDecl::isDeleted(), clang::Type::isDependentType(), clang::CXXRecordDecl::isEmpty(), clang::Type::isEnumeralType(), clang::Type::isExtVectorType(), clang::Type::isFloatingType(), clang::Type::isFunctionType(), clang::Type::isFundamentalType(), clang::Type::isHLSLIntangibleType(), clang::Type::isIncompleteArrayType(), clang::Type::isIncompleteType(), clang::Type::isIntegralType(), clang::Type::isInterfaceType(), clang::Type::isLiteralType(), clang::Type::isLValueReferenceType(), clang::Type::isMemberDataPointerType(), clang::Type::isMemberFunctionPointerType(), clang::Type::isMemberPointerType(), clang::CXXMethodDecl::isMoveAssignmentOperator(), clang::FunctionProtoType::isNothrow(), clang::Type::isObjCLifetimeType(), clang::Type::isObjectType(), clang::CXXRecordDecl::isPolymorphic(), clang::Type::isReferenceType(), clang::Type::isRValueReferenceType(), clang::Type::isScalarType(), clang::Type::isScopedEnumeralType(), clang::Type::isSignedIntegerType(), clang::Type::isStandardLayoutType(), clang::Type::isStructureType(), isTriviallyEqualityComparableType(), IsTriviallyRelocatableType(), clang::TagDecl::isUnion(), clang::Type::isUnionType(), clang::Type::isUnsignedIntegerType(), clang::FunctionDecl::isUserProvided(), clang::Type::isVectorType(), clang::Type::isVoidType(), 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()

static ExtractedTypeTraitInfo ExtractTypeTraitFromExpression ( const Expr E)
static

◆ GetReturnType()

static TypeTraitReturnType GetReturnType ( TypeTrait  Kind)
static

Definition at line 1518 of file SemaTypeTraits.cpp.

◆ hasMultipleDataBaseClassesWithFields()

static bool hasMultipleDataBaseClassesWithFields ( const CXXRecordDecl D)
static

◆ HasNonDeletedDefaultedEqualityComparison()

static bool HasNonDeletedDefaultedEqualityComparison ( Sema S,
const CXXRecordDecl Decl,
SourceLocation  KeyLoc 
)
static

◆ HasNoThrowOperator()

static bool HasNoThrowOperator ( CXXRecordDecl RD,
OverloadedOperatorKind  Op,
Sema Self,
SourceLocation  KeyLoc,
ASTContext C,
bool(CXXRecordDecl::*)() const  HasTrivial,
bool(CXXRecordDecl::*)() const  HasNonTrivial,
bool(CXXMethodDecl::*)() const  IsDesiredOp 
)
static

◆ hasSuitableConstructorForRelocation()

static bool hasSuitableConstructorForRelocation ( Sema SemaRef,
const CXXRecordDecl D,
bool  AllowUserDefined 
)
static

◆ hasSuitableMoveAssignmentOperatorForRelocation()

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

◆ IsCXXReplaceableType()

static bool IsCXXReplaceableType ( Sema S,
const CXXRecordDecl RD 
)
static

◆ IsDefaultMovable()

static bool IsDefaultMovable ( Sema SemaRef,
const CXXRecordDecl D 
)
static

◆ IsEligibleForReplacement()

static bool IsEligibleForReplacement ( Sema SemaRef,
const CXXRecordDecl D 
)
static

◆ IsEligibleForTrivialRelocation()

static bool IsEligibleForTrivialRelocation ( Sema SemaRef,
const CXXRecordDecl D 
)
static

◆ isTriviallyEqualityComparableType()

static bool isTriviallyEqualityComparableType ( Sema S,
QualType  Type,
SourceLocation  KeyLoc 
)
static

◆ IsTriviallyRelocatableType()

static bool IsTriviallyRelocatableType ( Sema SemaRef,
QualType  T 
)
static

◆ LookupSpecialMemberFromXValue()

static CXXMethodDecl * LookupSpecialMemberFromXValue ( Sema SemaRef,
const CXXRecordDecl RD,
bool  Assign 
)
static

◆ StdNameToTypeTrait()

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

Definition at line 1958 of file SemaTypeTraits.cpp.

Referenced by ExtractTypeTraitFromExpression().