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

Go to the source code of this file.

Macros
#define ABSTRACT_TYPELOC(CLASS, PARENT)
#define TYPELOC(CLASS, PARENT)
#define CheckPolymorphic(Type)
#define OVERLOADED_OPERATOR(Name, Spelling, Token, Unary, Binary, MemberOnly)
Enumerations
enum ImplicitInitializerKind { IIK_Default, IIK_Copy, IIK_Move, IIK_Inherit }
ImplicitInitializerKind - How an implicit base or member initializer should initialize its base or member. More...
enum TrivialSubobjectKind { TSK_BaseClass, TSK_Field, TSK_CompleteObject }
The kind of subobject we are checking for triviality. More...
enum class AllocationOperatorKind { New, Delete }
Functions
static bool functionDeclHasDefaultArgument (const FunctionDecl *FD)
static bool CheckBindingsCount (Sema &S, DecompositionDecl *DD, QualType DecompType, ArrayRef< BindingDecl * > Bindings, unsigned MemberCount)
static bool checkSimpleDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const llvm::APSInt &NumElemsAPS, QualType ElemType, llvm::function_ref< ExprResult(SourceLocation, Expr *, unsigned)> GetInit)
static bool checkArrayLikeDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const llvm::APSInt &NumElems, QualType ElemType)
static bool checkArrayDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const ConstantArrayType *CAT)
static bool checkVectorDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const VectorType *VT)
static bool checkComplexDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const ComplexType *CT)
static std::string printTemplateArgs (const PrintingPolicy &PrintingPolicy, TemplateArgumentListInfo &Args, const TemplateParameterList *Params)
static QualType getStdTrait (Sema &S, SourceLocation Loc, StringRef Trait, TemplateArgumentListInfo &Args, unsigned DiagID)
static bool lookupMember (Sema &S, CXXRecordDecl *RD, LookupResult &MemberLookup)
static TemplateArgumentLoc getTrivialIntegralTemplateArgument (Sema &S, SourceLocation Loc, QualType T, uint64_t I)
static TemplateArgumentLoc getTrivialTypeTemplateArgument (Sema &S, SourceLocation Loc, QualType T)
static IsTupleLike isTupleLike (Sema &S, SourceLocation Loc, QualType T, unsigned &OutSize)
static QualType getTupleLikeElementType (Sema &S, SourceLocation Loc, unsigned I, QualType T)
static bool checkTupleLikeDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, VarDecl *Src, QualType DecompType, unsigned NumElems)
static DeclAccessPair findDecomposableBaseClass (Sema &S, SourceLocation Loc, const CXXRecordDecl *RD, CXXCastPath &BasePath)
Find the base class to decompose in a built-in decomposition of a class type.
static bool CheckMemberDecompositionFields (Sema &S, SourceLocation Loc, const CXXRecordDecl *OrigRD, QualType DecompType, DeclAccessPair BasePair)
static bool checkMemberDecomposition (Sema &S, ArrayRef< BindingDecl * > Bindings, ValueDecl *Src, QualType DecompType, const CXXRecordDecl *OrigRD)
template<typename... Ts>
static bool CheckLiteralType (Sema &SemaRef, Sema::CheckConstexprKind Kind, SourceLocation Loc, QualType T, unsigned DiagID, Ts &&...DiagArgs)
Check that the given type is a literal type.
static bool CheckConstexprDestructorSubobjects (Sema &SemaRef, const CXXDestructorDecl *DD, Sema::CheckConstexprKind Kind)
Determine whether a destructor cannot be constexpr due to.
static bool CheckConstexprParameterTypes (Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind)
Check whether a function's parameter types are all literal types.
static bool CheckConstexprReturnType (Sema &SemaRef, const FunctionDecl *FD, Sema::CheckConstexprKind Kind)
Check whether a function's return type is a literal type.
static unsigned getRecordDiagFromTagKind (TagTypeKind Tag)
Get diagnostic select index for tag kind for record diagnostic message.
static bool CheckConstexprFunctionBody (Sema &SemaRef, const FunctionDecl *Dcl, Stmt *Body, Sema::CheckConstexprKind Kind)
Check the body for the given constexpr function declaration only contains the permitted types of statement.
static bool CheckConstexprMissingReturn (Sema &SemaRef, const FunctionDecl *Dcl)
static bool CheckConstexprDeclStmt (Sema &SemaRef, const FunctionDecl *Dcl, DeclStmt *DS, SourceLocation &Cxx1yLoc, Sema::CheckConstexprKind Kind)
Check the given declaration statement is legal within a constexpr function body.
static bool CheckConstexprCtorInitializer (Sema &SemaRef, const FunctionDecl *Dcl, FieldDecl *Field, llvm::SmallPtrSet< Decl *, 16 > &Inits, bool &Diagnosed, Sema::CheckConstexprKind Kind)
Check that the given field is initialized within a constexpr constructor.
static bool CheckConstexprFunctionStmt (Sema &SemaRef, const FunctionDecl *Dcl, Stmt *S, SmallVectorImpl< SourceLocation > &ReturnStmts, SourceLocation &Cxx1yLoc, SourceLocation &Cxx2aLoc, SourceLocation &Cxx2bLoc, Sema::CheckConstexprKind Kind)
Check the provided statement is allowed in a constexpr function definition.
static void NoteIndirectBases (ASTContext &Context, IndirectBaseSet &Set, const QualType &Type)
Recursively add the bases of Type. Don't add Type itself.
static void BuildBasePathArray (const CXXBasePath &Path, CXXCastPath &BasePathArray)
static bool InitializationHasSideEffects (const FieldDecl &FD)
template
static bool HasAttribute (const QualType &T)
static bool IsUnusedPrivateField (const FieldDecl *FD)
static bool FindBaseInitializer (Sema &SemaRef, CXXRecordDecl *ClassDecl, QualType BaseType, const CXXBaseSpecifier *&DirectBaseSpec, const CXXBaseSpecifier *&VirtualBaseSpec)
Find the direct and/or virtual base specifiers that correspond to the given base type, for use in base initialization within a constructor.
static Expr * CastForMoving (Sema &SemaRef, Expr *E)
static bool BuildImplicitBaseInitializer (Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, CXXBaseSpecifier *BaseSpec, bool IsInheritedVirtualBase, CXXCtorInitializer *&CXXBaseInit)
static bool RefersToRValueRef (Expr *MemRef)
static bool BuildImplicitMemberInitializer (Sema &SemaRef, CXXConstructorDecl *Constructor, ImplicitInitializerKind ImplicitInitKind, FieldDecl *Field, IndirectFieldDecl *Indirect, CXXCtorInitializer *&CXXMemberInit)
static bool isIncompleteOrZeroLengthArrayType (ASTContext &Context, QualType T)
Determine whether the given type is an incomplete or zero-lenfgth array type.
static bool CollectFieldInitializer (Sema &SemaRef, BaseAndFieldInfo &Info, FieldDecl *Field, IndirectFieldDecl *Indirect=nullptr)
static CXXDestructorDecl * LookupDestructorIfRelevant (Sema &S, CXXRecordDecl *Class)
static void MarkFieldDestructorReferenced (Sema &S, SourceLocation Location, FieldDecl *Field)
static void MarkBaseDestructorsReferenced (Sema &S, SourceLocation Location, CXXRecordDecl *ClassDecl)
static void PopulateKeysForFields (FieldDecl *Field, SmallVectorImpl< const void * > &IdealInits)
static const void * GetKeyForBase (ASTContext &Context, QualType BaseType)
static const void * GetKeyForMember (ASTContext &Context, CXXCtorInitializer *Member)
static void AddInitializerToDiag (const Sema::SemaDiagnosticBuilder &Diag, const CXXCtorInitializer *Previous, const CXXCtorInitializer *Current)
static void DiagnoseBaseOrMemInitializerOrder (Sema &SemaRef, const CXXConstructorDecl *Constructor, ArrayRef< CXXCtorInitializer * > Inits)
static void CheckAbstractClassUsage (AbstractUsageInfo &Info, FunctionDecl *FD)
Check for invalid uses of an abstract type in a function declaration.
static void CheckAbstractClassUsage (AbstractUsageInfo &Info, VarDecl *VD)
Check for invalid uses of an abstract type in a variable0 declaration.
static void CheckAbstractClassUsage (AbstractUsageInfo &Info, CXXRecordDecl *RD)
Check for invalid uses of an abstract type within a class definition.
static void ReferenceDllExportedMembers (Sema &S, CXXRecordDecl *Class)
static void checkForMultipleExportedDefaultConstructors (Sema &S, CXXRecordDecl *Class)
static void checkCUDADeviceBuiltinSurfaceClassTemplate (Sema &S, CXXRecordDecl *Class)
static void checkCUDADeviceBuiltinTextureClassTemplate (Sema &S, CXXRecordDecl *Class)
static void DefineDefaultedFunction (Sema &S, FunctionDecl *FD, SourceLocation DefaultLoc)
static bool canPassInRegisters (Sema &S, CXXRecordDecl *D, TargetInfo::CallingConvKind CCK)
Determine whether a type is permitted to be passed or returned in registers, per C++ [class.temporary]p3.
static bool ReportOverrides (Sema &S, unsigned DiagID, const CXXMethodDecl *MD, llvm::function_ref< bool(const CXXMethodDecl *)> Report)
Report an error regarding overriding, along with any relevant overridden methods.
static Sema::SpecialMemberOverloadResult lookupCallFromSpecialMember (Sema &S, CXXRecordDecl *Class, CXXSpecialMemberKind CSM, unsigned FieldQuals, bool ConstRHS)
Look up the special member function that would be called by a special member function for a subobject of class type.
static bool specialMemberIsConstexpr (Sema &S, CXXRecordDecl *ClassDecl, CXXSpecialMemberKind CSM, unsigned Quals, bool ConstRHS, CXXConstructorDecl *InheritedCtor=nullptr, Sema::InheritedConstructorInfo *Inherited=nullptr)
Is the special member function which would be selected to perform the specified operation on the specified class type a constexpr constructor?
static bool defaultedSpecialMemberIsConstexpr (Sema &S, CXXRecordDecl *ClassDecl, CXXSpecialMemberKind CSM, bool ConstArg, CXXConstructorDecl *InheritedCtor=nullptr, Sema::InheritedConstructorInfo *Inherited=nullptr)
Determine whether the specified special member function would be constexpr if it were implicitly defined.
static Sema::ImplicitExceptionSpecification ComputeDefaultedSpecialMemberExceptionSpec (Sema &S, SourceLocation Loc, CXXMethodDecl *MD, CXXSpecialMemberKind CSM, Sema::InheritedConstructorInfo *ICI)
static Sema::ImplicitExceptionSpecification ComputeDefaultedComparisonExceptionSpec (Sema &S, SourceLocation Loc, FunctionDecl *FD, Sema::DefaultedComparisonKind DCK)
static Sema::ImplicitExceptionSpecification computeImplicitExceptionSpec (Sema &S, SourceLocation Loc, FunctionDecl *FD)
static FunctionProtoType::ExtProtoInfo getImplicitMethodEPI (Sema &S, CXXMethodDecl *MD)
static void lookupOperatorsForDefaultedComparison (Sema &Self, Scope *S, UnresolvedSetImpl &Operators, OverloadedOperatorKind Op)
Perform the unqualified lookups that might be needed to form a defaulted comparison function for the given operator.
static bool findTrivialSpecialMember (Sema &S, CXXRecordDecl *RD, CXXSpecialMemberKind CSM, unsigned Quals, bool ConstRHS, TrivialABIHandling TAH, CXXMethodDecl **Selected)
Perform lookup for a special member of the specified kind, and determine whether it is trivial.
static CXXConstructorDecl * findUserDeclaredCtor (CXXRecordDecl *RD)
static bool checkTrivialSubobjectCall (Sema &S, SourceLocation SubobjLoc, QualType SubType, bool ConstRHS, CXXSpecialMemberKind CSM, TrivialSubobjectKind Kind, TrivialABIHandling TAH, bool Diagnose)
Check whether the special member selected for a given type would be trivial.
static bool checkTrivialClassMembers (Sema &S, CXXRecordDecl *RD, CXXSpecialMemberKind CSM, bool ConstArg, TrivialABIHandling TAH, bool Diagnose)
Check whether the members of a class type allow a special member to be trivial.
static void AddMostOverridenMethods (const CXXMethodDecl *MD, llvm::SmallPtrSetImpl< const CXXMethodDecl * > &Methods)
Add the most overridden methods from MD to Methods.
static void findImplicitlyDeclaredEqualityComparisons (ASTContext &Ctx, CXXRecordDecl *RD, llvm::SmallVectorImpl< FunctionDecl * > &Spaceships)
Find the equality comparison functions that should be implicitly declared in a given class definition, per C++2a [class.compare.default]p3.
static void checkMethodTypeQualifiers (Sema &S, Declarator &D, unsigned DiagID)
static void diagnoseInvalidDeclaratorChunks (Sema &S, Declarator &D, unsigned Kind)
static void extendLeft (SourceRange &R, SourceRange Before)
static void extendRight (SourceRange &R, SourceRange After)
static void DiagnoseNamespaceInlineMismatch (Sema &S, SourceLocation KeywordLoc, SourceLocation Loc, IdentifierInfo *II, bool *IsInline, NamespaceDecl *PrevNS)
Diagnose a mismatch in 'inline' qualifiers when a namespace is reopened.
static NamespaceDecl * getNamespaceDecl (NamespaceBaseDecl *D)
getNamespaceDecl - Returns the namespace a decl represents.
static bool isStdClassTemplate (Sema &S, QualType SugaredType, QualType *TypeArg, const char *ClassName, ClassTemplateDecl **CachedDecl, const Decl **MalformedDecl)
static ClassTemplateDecl * LookupStdClassTemplate (Sema &S, SourceLocation Loc, const char *ClassName, bool *WasMalformed)
static QualType BuildStdClassTemplate (Sema &S, ClassTemplateDecl *CTD, QualType TypeParam, SourceLocation Loc)
static bool IsUsingDirectiveInToplevelContext (DeclContext *CurContext)
Determine whether a using statement is in a context where it will be apply in all contexts.
static void DiagnoseInvisibleNamespace (const TypoCorrection &Corrected, Sema &S)
static bool TryNamespaceTypoCorrection (Sema &S, LookupResult &R, Scope *Sc, CXXScopeSpec &SS, SourceLocation IdentLoc, IdentifierInfo *Ident)
static bool IsEquivalentForUsingDecl (ASTContext &Context, NamedDecl *D1, NamedDecl *D2)
Determine whether a using declaration considers the given declarations as "equivalent", e.g., if they are redeclarations of the same entity or are both typedefs of the same type.
static bool isVirtualDirectBase (CXXRecordDecl *Derived, CXXRecordDecl *Base)
Determine whether a direct base class is a virtual base class.
static CXXBaseSpecifier * findDirectBaseWithType (CXXRecordDecl *Derived, QualType DesiredBase, bool &AnyDependentBases)
Find the base specifier for a base class with the given type.
static StmtResult buildMemcpyForAssignmentOp (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &ToB, const ExprBuilder &FromB)
When generating a defaulted copy or move assignment operator, if a field should be copied with __builtin_memcpy rather than via explicit assignments, do so.
static StmtResult buildSingleCopyAssignRecursively (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &To, const ExprBuilder &From, bool CopyingBaseSubobject, bool Copying, unsigned Depth=0)
Builds a statement that copies/moves the given entity from From to To.
static StmtResult buildSingleCopyAssign (Sema &S, SourceLocation Loc, QualType T, const ExprBuilder &To, const ExprBuilder &From, bool CopyingBaseSubobject, bool Copying)
static void diagnoseDeprecatedCopyOperation (Sema &S, CXXMethodDecl *CopyOp)
Diagnose an implicit copy operation for a class which is odr-used, but which is deprecated because the class has a user-declared copy constructor, copy assignment operator, or destructor.
static void checkMoveAssignmentForRepeatedMove (Sema &S, CXXRecordDecl *Class, SourceLocation CurrentLocation)
Check if we're implicitly defining a move assignment operator for a class with virtual bases.
static bool hasOneRealArgument (MultiExprArg Args)
Determine whether the given list arguments contains exactly one "real" (non-default) argument.
static bool CheckOperatorNewDeleteDeclarationScope (Sema &SemaRef, const FunctionDecl *FnDecl)
static CanQualType RemoveAddressSpaceFromPtr (Sema &SemaRef, const PointerType *PtrTy)
static bool IsPotentiallyTypeAwareOperatorNewOrDelete (Sema &SemaRef, const FunctionDecl *FD, bool *WasMalformed)
static bool isDestroyingDeleteT (QualType Type)
static bool IsPotentiallyDestroyingOperatorDelete (Sema &SemaRef, const FunctionDecl *FD)
static bool CheckOperatorNewDeleteTypes (Sema &SemaRef, FunctionDecl *FnDecl, AllocationOperatorKind OperatorKind, CanQualType ExpectedResultType, CanQualType ExpectedSizeOrAddressParamType, unsigned DependentParamTypeDiag, unsigned InvalidParamTypeDiag)
static bool CheckOperatorNewDeclaration (Sema &SemaRef, FunctionDecl *FnDecl)
static bool CheckOperatorDeleteDeclaration (Sema &SemaRef, FunctionDecl *FnDecl)
static bool checkLiteralOperatorTemplateParameterList (Sema &SemaRef, FunctionTemplateDecl *TpDecl)
static void WriteCharTypePrefix (BuiltinType::Kind BTK, llvm::raw_ostream &OS)
static void WriteCharValueForDiagnostic (uint32_t Value, const BuiltinType *BTy, unsigned TyWidth, SmallVectorImpl< char > &Str)
Convert character's value, interpreted as a code unit, to a string.
static bool ConvertAPValueToString (const APValue &V, QualType T, SmallVectorImpl< char > &Str, ASTContext &Context)
Convert \V to a string we can present to the user in a diagnostic \T is the type of the expression that has been evaluated into \V.
static bool UsefulToPrintExpr (const Expr *E)
Some Expression types are not useful to print notes about, e.g.
template
static bool EvaluateAsStringImpl (Sema &SemaRef, Expr *Message, ResultType &Result, ASTContext &Ctx, Sema::StringEvaluationContext EvalContext, bool ErrorOnInvalidMessage)
static void SearchForReturnInStmt (Sema &Self, Stmt *S)
static void DelegatingCycleHelper (CXXConstructorDecl *Ctor, llvm::SmallPtrSet< CXXConstructorDecl *, 4 > &Valid, llvm::SmallPtrSet< CXXConstructorDecl *, 4 > &Invalid, llvm::SmallPtrSet< CXXConstructorDecl *, 4 > &Current, Sema &S)

ABSTRACT_TYPELOC

#define ABSTRACT_TYPELOC ( CLASS,
PARENT )

CheckPolymorphic

#define CheckPolymorphic ( Type )

Value:

}

The base class of the type hierarchy.

Definition at line 6144 of file SemaDeclCXX.cpp.

OVERLOADED_OPERATOR

#define OVERLOADED_OPERATOR ( Name,
Spelling,
Token,
Unary,
Binary,
MemberOnly )

Value:

, { Unary, Binary, MemberOnly }

TYPELOC

#define TYPELOC ( CLASS,
PARENT )

Value:

case TypeLoc::CLASS: Check(TL.castAs<CLASS##TypeLoc>(), Sel); break;

Base wrapper for a particular "section" of type source info.

IndirectBaseSet

Use small set to collect indirect bases.

As this is only used locally, there's no need to abstract the small size parameter.

Definition at line 2916 of file SemaDeclCXX.cpp.

AllocationOperatorKind

enum class AllocationOperatorKind strong

ImplicitInitializerKind

ImplicitInitializerKind - How an implicit base or member initializer should initialize its base or member.

Enumerator
IIK_Default
IIK_Copy
IIK_Move
IIK_Inherit

Definition at line 4902 of file SemaDeclCXX.cpp.

TrivialSubobjectKind

The kind of subobject we are checking for triviality.

The values of this enumeration are used in diagnostics.

Enumerator
TSK_BaseClass The subobject is a base class.
TSK_Field The subobject is a non-static data member.
TSK_CompleteObject The object is actually the complete object.

Definition at line 10194 of file SemaDeclCXX.cpp.

AddInitializerToDiag()

AddMostOverridenMethods()

BuildBasePathArray()

BuildImplicitBaseInitializer()

Definition at line 4910 of file SemaDeclCXX.cpp.

References clang::cast(), CastForMoving(), clang::Constructor, clang::Sema::Context, clang::DeclRefExpr::Create(), clang::InitializationKind::CreateDefault(), clang::InitializationKind::CreateDirect(), clang::ActionResult< PtrTy, Compress >::get(), clang::ActionResult< PtrTy, Compress >::getAs(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::CXXBaseSpecifier::getType(), clang::QualType::getUnqualifiedType(), IIK_Copy, IIK_Default, IIK_Inherit, IIK_Move, clang::Sema::ImpCastExprToType(), clang::InitializedEntity::InitializeBase(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::CXXBaseSpecifier::isVirtual(), clang::Sema::MarkDeclRefReferenced(), clang::Sema::MaybeCreateExprWithCleanups(), clang::InitializationSequence::Perform(), clang::VK_LValue, and clang::VK_XValue.

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

BuildImplicitMemberInitializer()

Definition at line 4993 of file SemaDeclCXX.cpp.

References clang::LookupResult::addDecl(), clang::AS_public, clang::Sema::BuildMemberReferenceExpr(), clang::cast(), CastForMoving(), clang::Constructor, clang::Sema::Context, clang::DeclRefExpr::Create(), clang::InitializationKind::CreateDefault(), clang::InitializationKind::CreateDirect(), clang::SemaBase::Diag(), clang::ActionResult< PtrTy, Compress >::get(), clang::ActionResult< PtrTy, Compress >::getAs(), clang::ASTContext::getBaseElementType(), clang::ASTContext::getCanonicalTagType(), clang::QualType::hasNonTrivialObjCLifetime(), IIK_Copy, IIK_Default, IIK_Inherit, IIK_Move, clang::InitializedEntity::InitializeMember(), int, clang::QualType::isConstQualified(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Sema::LookupMemberName, clang::Sema::MarkDeclRefReferenced(), clang::Sema::MaybeCreateExprWithCleanups(), RefersToRValueRef(), clang::LookupResult::resolveKind(), and clang::VK_LValue.

Referenced by CollectFieldInitializer().

buildMemcpyForAssignmentOp()

StmtResult buildMemcpyForAssignmentOp ( Sema & S, SourceLocation Loc, QualType T, const ExprBuilder & ToB, const ExprBuilder & FromB ) static

When generating a defaulted copy or move assignment operator, if a field should be copied with __builtin_memcpy rather than via explicit assignments, do so.

This optimization only applies for arrays of scalars, and for arrays of class type where the selected copy/move-assignment operator is trivial.

Definition at line 14821 of file SemaDeclCXX.cpp.

References clang::Sema::BuildCallExpr(), clang::Sema::BuildDeclRefExpr(), clang::ASTContext::BuiltinFnTy, clang::Call, clang::Sema::Context, clang::IntegerLiteral::Create(), clang::UnaryOperator::Create(), clang::Sema::CurFPFeatureOverrides(), clang::ActionResult< PtrTy, Compress >::get(), clang::IdentifierTable::get(), clang::LookupResult::getAsSingle(), clang::ASTContext::getPointerType(), clang::CharUnits::getQuantity(), clang::ASTContext::getSizeType(), clang::Expr::getType(), clang::ASTContext::getTypeSize(), clang::ASTContext::getTypeSizeInChars(), clang::RecordDecl::hasObjectMember(), clang::ASTContext::Idents, clang::ActionResult< PtrTy, Compress >::isUsable(), clang::Sema::LookupName(), clang::Sema::LookupOrdinaryName, clang::OK_Ordinary, clang::StmtError(), clang::T, clang::Sema::TUScope, and clang::VK_PRValue.

Referenced by buildSingleCopyAssign().

buildSingleCopyAssign()

StmtResult buildSingleCopyAssign ( Sema & S, SourceLocation Loc, QualType T, const ExprBuilder & To, const ExprBuilder & From, bool CopyingBaseSubobject, bool Copying ) static

buildSingleCopyAssignRecursively()

Builds a statement that copies/moves the given entity from From to To.

This routine is used to copy/move the members of a class with an implicitly-declared copy/move assignment operator. When the entities being copied are arrays, this routine builds for loops to copy them.

Parameters

S The Sema object used for type-checking.
Loc The location where the implicit copy/move is being generated.
T The type of the expressions being copied/moved. Both expressions must have this type.
To The expression we are copying/moving to.
From The expression we are copying/moving from.
CopyingBaseSubobject Whether we're copying/moving a base subobject. Otherwise, it's a non-static member subobject.
Copying Whether we're copying or moving.
Depth Internal parameter recording the depth of the recursion.

Returns

A statement or a loop that copies the expressions, or StmtResult(0) if a memcpy should be used instead.

Definition at line 14900 of file SemaDeclCXX.cpp.

References clang::Sema::ActOnCondition(), clang::Sema::ActOnExprStmt(), clang::Sema::ActOnForStmt(), clang::AS_protected, clang::AS_public, clang::Assignment, clang::LookupResult::begin(), clang::Sema::Boolean, clang::ASTContext::BoolTy, clang::Sema::BuildCallToMemberFunction(), clang::Sema::BuildMemberReferenceExpr(), buildSingleCopyAssignRecursively(), clang::Call, clang::Comparison, clang::Sema::Context, clang::Copy, clang::BinaryOperator::Create(), clang::IntegerLiteral::Create(), clang::UnaryOperator::Create(), clang::VarDecl::Create(), clang::Sema::CreateBuiltinBinOp(), clang::Sema::CurContext, clang::Sema::CurFPFeatureOverrides(), clang::ASTContext::DeclarationNames, clang::LookupResult::Filter::done(), clang::LookupResult::end(), clang::LookupResult::Filter::erase(), clang::IdentifierTable::get(), clang::ActionResult< PtrTy, Compress >::getAs(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getCanonicalType(), clang::DeclarationNameTable::getCXXOperatorName(), clang::ArrayType::getElementType(), clang::Sema::getLangOpts(), clang::CXXMemberCallExpr::getMethodDecl(), clang::ConstantArrayType::getSize(), clang::ASTContext::getSizeType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::ASTContext::getTypeSize(), clang::LookupResult::Filter::hasNext(), clang::ASTContext::Idents, clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::FunctionDecl::isTrivial(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::LookupResult::makeFilter(), clang::Sema::MakeFullDiscardedValueExpr(), clang::CXXScopeSpec::MakeTrivial(), clang::LookupResult::Filter::next(), clang::OK_Ordinary, clang::SC_None, clang::VarDecl::setInit(), clang::StmtError(), clang::T, clang::VK_LValue, clang::VK_PRValue, and clang::Zero.

Referenced by buildSingleCopyAssign(), and buildSingleCopyAssignRecursively().

BuildStdClassTemplate()

canPassInRegisters()

Determine whether a type is permitted to be passed or returned in registers, per C++ [class.temporary]p3.

Definition at line 6841 of file SemaDeclCXX.cpp.

References clang::TargetInfo::CCK_ClangABI4OrPS4, clang::TargetInfo::CCK_MicrosoftWin64, clang::Sema::Context, clang::CXXRecordDecl::ctors(), clang::CXXRecordDecl::defaultedCopyConstructorIsDeleted(), clang::CXXRecordDecl::defaultedDestructorIsDeleted(), clang::CXXRecordDecl::defaultedMoveConstructorIsDeleted(), clang::Sema::getASTContext(), clang::ASTContext::getCanonicalTagType(), clang::CXXRecordDecl::getDestructor(), clang::Sema::getLangOpts(), clang::ASTContext::getTargetInfo(), clang::TargetInfo::getTriple(), clang::ASTContext::getTypeSize(), clang::CXXRecordDecl::hasNonTrivialCopyConstructorForCall(), clang::CXXRecordDecl::hasNonTrivialDestructorForCall(), clang::CXXRecordDecl::hasTrivialCopyConstructor(), clang::CXXRecordDecl::hasTrivialCopyConstructorForCall(), clang::CXXRecordDecl::hasTrivialDestructorForCall(), clang::CXXRecordDecl::hasTrivialMoveConstructorForCall(), clang::isa(), clang::TagDecl::isDependentType(), clang::Decl::isInvalidDecl(), clang::CXXRecordDecl::methods(), clang::CXXRecordDecl::needsImplicitCopyConstructor(), clang::CXXRecordDecl::needsImplicitDestructor(), and clang::CXXRecordDecl::needsImplicitMoveConstructor().

Referenced by clang::Sema::CheckCompletedCXXClass(), and clang::TextNodeDumper::VisitCXXRecordDecl().

CastForMoving()

CheckAbstractClassUsage() [1/3]

void CheckAbstractClassUsage ( AbstractUsageInfo & Info, CXXRecordDecl * RD ) static

CheckAbstractClassUsage() [2/3]

void CheckAbstractClassUsage ( AbstractUsageInfo & Info, FunctionDecl * FD ) static

CheckAbstractClassUsage() [3/3]

void CheckAbstractClassUsage ( AbstractUsageInfo & Info, VarDecl * VD ) static

checkArrayDecomposition()

checkArrayLikeDecomposition()

CheckBindingsCount()

Definition at line 955 of file SemaDeclCXX.cpp.

References clang::Sema::Context, clang::BindingDecl::Create(), clang::FunctionParmPackExpr::Create(), clang::ASTContext::DependentTy, clang::SemaBase::Diag(), clang::Decl::getBeginLoc(), clang::Decl::getDeclContext(), clang::NamedDecl::getIdentifier(), clang::Decl::getLocation(), clang::ASTContext::getPackExpansionType(), clang::ValueDecl::isParameterPack(), clang::BindingDecl::setBinding(), and clang::BindingDecl::setDecomposedDecl().

Referenced by checkMemberDecomposition(), checkSimpleDecomposition(), and checkTupleLikeDecomposition().

checkComplexDecomposition()

CheckConstexprCtorInitializer()

CheckConstexprDeclStmt()

Check the given declaration statement is legal within a constexpr function body.

C++11 [dcl.constexpr]p3,p4, and C++1y [dcl.constexpr]p3.

Returns

true if the body is OK (maybe only as an extension), false if we have diagnosed a problem.

Definition at line 2009 of file SemaDeclCXX.cpp.

References clang::cast(), CheckLiteralType(), clang::DeclStmt::decls(), clang::SemaBase::Diag(), clang::SemaBase::DiagCompat(), clang::Sema::Diagnose, clang::DeclStmt::getBeginLoc(), clang::TypeLoc::getBeginLoc(), clang::Sema::getLangOpts(), clang::TypeLoc::getSourceRange(), clang::TypeLoc::getType(), clang::isa(), clang::FunctionDecl::isConsteval(), clang::SourceLocation::isValid(), clang::Sema::LangOpts, and clang::VarDecl::TLS_Dynamic.

Referenced by CheckConstexprFunctionStmt().

CheckConstexprDestructorSubobjects()

CheckConstexprFunctionBody()

Check the body for the given constexpr function declaration only contains the permitted types of statement.

C++11 [dcl.constexpr]p3,p4.

Returns

true if the body is OK, false if we have found or diagnosed a problem.

Definition at line 2367 of file SemaDeclCXX.cpp.

References CheckConstexprCtorInitializer(), CheckConstexprFunctionStmt(), CheckConstexprMissingReturn(), clang::Sema::CheckValid, clang::Stmt::children(), clang::Constructor, clang::SemaBase::Diag(), clang::SemaBase::DiagCompat(), clang::Sema::Diagnose, clang::RecordDecl::field_begin(), clang::RecordDecl::field_end(), clang::RecordDecl::fields(), clang::Stmt::getBeginLoc(), clang::Sema::getDiagnostics(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::FunctionDecl::getNameInfo(), clang::CXXRecordDecl::getNumBases(), clang::CXXRecordDecl::getNumVBases(), clang::Sema::getSourceManager(), clang::DeclarationNameInfo::getSourceRange(), clang::CXXRecordDecl::hasVariantMembers(), clang::isa(), clang::FunctionDecl::isConsteval(), clang::DiagnosticsEngine::isIgnored(), clang::SourceManager::isInSystemHeader(), clang::Expr::isPotentialConstantExpr(), clang::TagDecl::isUnion(), and clang::SourceLocation::isValid().

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

CheckConstexprFunctionStmt()

Check the provided statement is allowed in a constexpr function definition.

Definition at line 2205 of file SemaDeclCXX.cpp.

References clang::CompoundStmt::body(), clang::cast(), CheckConstexprDeclStmt(), CheckConstexprFunctionStmt(), clang::Stmt::children(), clang::SemaBase::Diag(), clang::Sema::Diagnose, clang::Stmt::getBeginLoc(), clang::Sema::getLangOpts(), clang::Stmt::getStmtClass(), clang::If, clang::isa(), clang::FunctionDecl::isConsteval(), clang::SourceLocation::isInvalid(), and clang::SourceLocation::isValid().

Referenced by CheckConstexprFunctionBody(), and CheckConstexprFunctionStmt().

CheckConstexprMissingReturn()

CheckConstexprParameterTypes()

Check whether a function's parameter types are all literal types.

If so, return true. If not, produce a suitable diagnostic and return false.

Definition at line 1862 of file SemaDeclCXX.cpp.

References clang::Type::castAs(), CheckLiteralType(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::FunctionDecl::getParamDecl(), clang::ParmVarDecl::getSourceRange(), clang::ValueDecl::getType(), clang::isa(), and clang::FunctionDecl::isConsteval().

Referenced by clang::Sema::CheckConstexprFunctionDefinition(), and clang::Sema::CheckExplicitlyDefaultedComparison().

CheckConstexprReturnType()

checkCUDADeviceBuiltinSurfaceClassTemplate()

checkCUDADeviceBuiltinTextureClassTemplate()

checkForMultipleExportedDefaultConstructors()

checkLiteralOperatorTemplateParameterList()

Definition at line 17001 of file SemaDeclCXX.cpp.

References clang::ASTContext::CharTy, clang::Sema::Context, clang::SemaBase::Diag(), clang::Type::getAs(), clang::Type::getAsCanonical(), clang::SourceRange::getBegin(), clang::TemplateTypeParmDecl::getDepth(), clang::TemplateTypeParmDecl::getIndex(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::TemplateParameterList::getParam(), clang::TemplateParameterList::getSourceRange(), clang::TemplateDecl::getTemplateParameters(), clang::ValueDecl::getType(), clang::ASTContext::hasSameType(), clang::Sema::inTemplateInstantiation(), clang::Type::isRecordType(), clang::Decl::isTemplateParameterPack(), and clang::TemplateParameterList::size().

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

CheckLiteralType()

checkMemberDecomposition()

Definition at line 1531 of file SemaDeclCXX.cpp.

References clang::Sema::BuildDeclRefExpr(), clang::Sema::BuildFieldReferenceExpr(), clang::Sema::BuildQualifiedType(), clang::cast(), CheckBindingsCount(), CheckMemberDecompositionFields(), clang::Sema::Context, findDecomposableBaseClass(), clang::ActionResult< PtrTy, Compress >::get(), clang::Decl::getAccess(), clang::ASTContext::getCanonicalTagType(), clang::DeclAccessPair::getDecl(), clang::NamedDecl::getDeclName(), clang::Decl::getLocation(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::ValueDecl::getType(), clang::Sema::ImpCastExprToType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::FieldDecl::isMutable(), clang::FieldDecl::isUnnamedBitField(), clang::DeclAccessPair::make(), clang::Qualifiers::removeConst(), clang::Sema::RequireCompleteType(), clang::BindingDecl::setBinding(), and clang::VK_LValue.

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

CheckMemberDecompositionFields()

checkMethodTypeQualifiers()

checkMoveAssignmentForRepeatedMove()

Check if we're implicitly defining a move assignment operator for a class with virtual bases.

Such a move assignment might move-assign the virtual base multiple times.

Definition at line 15550 of file SemaDeclCXX.cpp.

References clang::SemaBase::Diag(), clang::Type::getAsCXXRecordDecl(), clang::CXXBaseSpecifier::getBeginLoc(), clang::CXXRecordDecl::getCanonicalDecl(), clang::Sema::SpecialMemberOverloadResult::getMethod(), clang::CXXBaseSpecifier::getSourceRange(), clang::CXXBaseSpecifier::getType(), clang::FunctionDecl::isDefaulted(), clang::CXXMethodDecl::isMoveAssignmentOperator(), clang::FunctionDecl::isTrivial(), clang::CXXBaseSpecifier::isVirtual(), clang::Sema::LookupSpecialMember(), and clang::MoveAssignment.

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

CheckOperatorDeleteDeclaration()

Definition at line 16753 of file SemaDeclCXX.cpp.

References CheckOperatorNewDeleteDeclarationScope(), CheckOperatorNewDeleteTypes(), clang::Sema::Context, Delete, clang::SemaBase::Diag(), clang::ASTContext::getCanonicalTagType(), clang::ASTContext::getCanonicalType(), clang::Decl::getLocation(), clang::FunctionDecl::getParamDecl(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getPointerType(), clang::ValueDecl::getType(), clang::DeclContext::isDependentContext(), isDestroyingDeleteT(), clang::FunctionDecl::isDestroyingOperatorDelete(), IsPotentiallyDestroyingOperatorDelete(), IsPotentiallyTypeAwareOperatorNewOrDelete(), clang::Sema::isUsualDeallocationFunction(), clang::FunctionDecl::parameters(), clang::ASTContext::VoidPtrTy, and clang::ASTContext::VoidTy.

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

CheckOperatorNewDeclaration()

CheckOperatorNewDeleteDeclarationScope()

CheckOperatorNewDeleteTypes()

Definition at line 16599 of file SemaDeclCXX.cpp.

References clang::Type::castAs(), clang::Sema::Context, clang::SemaBase::Diag(), clang::ASTContext::getCanonicalTagType(), clang::ASTContext::getCanonicalType(), clang::NamedDecl::getDeclName(), clang::ParmVarDecl::getDefaultArgRange(), clang::FunctionDecl::getDescribedFunctionTemplate(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ASTContext::getSizeType(), clang::ParmVarDecl::getSourceRange(), clang::Sema::getStdAlignValT(), clang::ValueDecl::getType(), clang::QualType::getUnqualifiedType(), clang::ParmVarDecl::hasDefaultArg(), IsPotentiallyDestroyingOperatorDelete(), IsPotentiallyTypeAwareOperatorNewOrDelete(), clang::FunctionDecl::isTemplateInstantiation(), New, RemoveAddressSpaceFromPtr(), clang::FunctionDecl::RequiredTypeAwareDeleteParameterCount, clang::FunctionDecl::RequiredTypeAwareNewParameterCount, clang::FunctionDecl::setIsDestroyingOperatorDelete(), clang::FunctionDecl::setIsTypeAwareOperatorNewOrDelete(), and clang::T.

Referenced by CheckOperatorDeleteDeclaration(), and CheckOperatorNewDeclaration().

checkSimpleDecomposition()

checkTrivialClassMembers()

Check whether the members of a class type allow a special member to be trivial.

Definition at line 10255 of file SemaDeclCXX.cpp.

References checkTrivialClassMembers(), checkTrivialSubobjectCall(), clang::Sema::Context, clang::DefaultConstructor, clang::SemaBase::Diag(), clang::RecordDecl::fields(), clang::Type::getAsCXXRecordDecl(), clang::ASTContext::getBaseElementType(), clang::QualType::getObjCLifetime(), clang::QualType::hasNonTrivialObjCLifetime(), and TSK_Field.

Referenced by checkTrivialClassMembers(), and clang::Sema::SpecialMemberIsTrivial().

checkTrivialSubobjectCall()

Check whether the special member selected for a given type would be trivial.

Definition at line 10204 of file SemaDeclCXX.cpp.

References clang::QualType::addConst(), clang::DefaultConstructor, clang::SemaBase::Diag(), findTrivialSpecialMember(), findUserDeclaredCtor(), clang::Type::getAsCXXRecordDecl(), clang::QualType::getCVRQualifiers(), clang::Decl::getLocation(), clang::QualType::getUnqualifiedType(), clang::IgnoreTrivialABI, clang::FunctionDecl::isUserProvided(), clang::Sema::SpecialMemberIsTrivial(), and TSK_CompleteObject.

Referenced by checkTrivialClassMembers(), clang::Sema::DiagnoseNontrivial(), and clang::Sema::SpecialMemberIsTrivial().

checkTupleLikeDecomposition()

Definition at line 1279 of file SemaDeclCXX.cpp.

References clang::Sema::ActOnFinishFullExpr(), clang::TemplateArgumentListInfo::addArgument(), clang::Sema::BuildCallExpr(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::BuildDeclRefExpr(), clang::Sema::BuildMemberReferenceExpr(), clang::Sema::BuildReferenceType(), clang::cast(), CheckBindingsCount(), clang::Sema::CheckCompleteVariableDeclaration(), clang::Sema::Context, clang::ImplicitCastExpr::Create(), clang::UnresolvedLookupExpr::Create(), clang::VarDecl::Create(), clang::InitializationKind::CreateCopy(), clang::ActionResult< PtrTy, Compress >::get(), clang::Type::getAsCXXRecordDecl(), clang::Decl::getDeclContext(), clang::Preprocessor::getIdentifierInfo(), clang::Decl::getLexicalDeclContext(), clang::Decl::getLocation(), clang::TemplateParameterList::getParam(), clang::ASTContext::getSizeType(), clang::VarDecl::getStorageClass(), getTrivialIntegralTemplateArgument(), clang::VarDecl::getTSCSpec(), getTupleLikeElementType(), clang::Expr::getType(), clang::ValueDecl::getType(), clang::Init, clang::InitializedEntity::InitializeBinding(), clang::isa(), clang::LookupResult::isAmbiguous(), clang::Sema::isCompleteType(), clang::VarDecl::isInlineSpecified(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Expr::isLValue(), clang::Type::isLValueReferenceType(), clang::QualType::isNull(), clang::Sema::LookupMemberName, clang::Sema::LookupQualifiedName(), clang::Sema::PP, clang::Seq, clang::TemplateParameterList::size(), clang::T, clang::VK_LValue, and clang::VK_XValue.

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

checkVectorDecomposition()

CollectFieldInitializer()

Definition at line 5256 of file SemaDeclCXX.cpp.

References clang::Sema::BuildCXXDefaultInitExpr(), BuildImplicitMemberInitializer(), clang::Sema::checkInitializerLifetime(), clang::Sema::Context, clang::ActionResult< PtrTy, Compress >::get(), clang::Decl::getLocation(), clang::Init, clang::InitializedEntity::InitializeMember(), isIncompleteOrZeroLengthArrayType(), and clang::ActionResult< PtrTy, Compress >::isInvalid().

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

ComputeDefaultedComparisonExceptionSpec()

Definition at line 9305 of file SemaDeclCXX.cpp.

References clang::Sema::ImplicitExceptionSpecification::CalledStmt(), clang::cast(), clang::Decl::FOK_None, clang::FunctionDecl::getBody(), clang::Decl::getDeclContext(), clang::Decl::getEndLoc(), clang::Decl::getFriendObjectKind(), clang::Decl::getLexicalDeclContext(), clang::Decl::getLocation(), clang::FunctionDecl::hasBody(), clang::Decl::isInvalidDecl(), clang::SourceLocation::isValid(), and clang::Sema::Unevaluated.

Referenced by computeImplicitExceptionSpec().

ComputeDefaultedSpecialMemberExceptionSpec()

computeImplicitExceptionSpec()

ConvertAPValueToString()

defaultedSpecialMemberIsConstexpr()

Determine whether the specified special member function would be constexpr if it were implicitly defined.

Definition at line 7549 of file SemaDeclCXX.cpp.

References clang::CXXRecordDecl::bases(), clang::cast(), clang::Sema::Context, clang::CopyAssignment, clang::CopyConstructor, clang::DefaultConstructor, clang::CXXRecordDecl::defaultedDefaultConstructorIsConstexpr(), clang::CXXRecordDecl::defaultedDestructorIsConstexpr(), clang::Destructor, clang::RecordDecl::fields(), clang::ASTContext::getBaseElementType(), clang::Sema::getLangOpts(), clang::CXXRecordDecl::getNumVBases(), clang::CXXRecordDecl::hasInClassInitializer(), clang::CXXRecordDecl::hasVariantMembers(), clang::Invalid, clang::CXXRecordDecl::isLiteral(), clang::TagDecl::isUnion(), clang::MoveAssignment, clang::MoveConstructor, and specialMemberIsConstexpr().

Referenced by clang::Sema::CheckExplicitlyDefaultedSpecialMember(), clang::Sema::DeclareImplicitCopyAssignment(), clang::Sema::DeclareImplicitCopyConstructor(), clang::Sema::DeclareImplicitDefaultConstructor(), clang::Sema::DeclareImplicitDestructor(), clang::Sema::DeclareImplicitMoveAssignment(), clang::Sema::DeclareImplicitMoveConstructor(), and clang::Sema::findInheritingConstructor().

DefineDefaultedFunction()

Definition at line 6808 of file SemaDeclCXX.cpp.

References clang::Sema::DefaultedFunctionKind::asComparison(), clang::Sema::DefaultedFunctionKind::asSpecialMember(), clang::cast(), clang::CopyAssignment, clang::CopyConstructor, clang::DefaultConstructor, clang::Sema::DefineDefaultedComparison(), clang::Sema::DefineImplicitCopyAssignment(), clang::Sema::DefineImplicitCopyConstructor(), clang::Sema::DefineImplicitDefaultConstructor(), clang::Sema::DefineImplicitDestructor(), clang::Sema::DefineImplicitMoveAssignment(), clang::Sema::DefineImplicitMoveConstructor(), clang::Destructor, clang::Sema::getDefaultedFunctionKind(), clang::Invalid, clang::Sema::DefaultedFunctionKind::isComparison(), clang::MoveAssignment, and clang::MoveConstructor.

Referenced by clang::Sema::ActOnFinishCXXNonNestedClass(), clang::Sema::CheckCompletedCXXClass(), and clang::Sema::SetDeclDefaulted().

DelegatingCycleHelper()

Definition at line 19228 of file SemaDeclCXX.cpp.

References clang::C, clang::cast(), DelegatingCycleHelper(), clang::SemaBase::Diag(), clang::CXXConstructorDecl::getCanonicalDecl(), clang::CXXConstructorDecl::getTargetConstructor(), clang::CXXConstructorDecl::init_begin(), clang::Invalid, clang::Decl::isInvalidDecl(), and clang::Valid.

Referenced by clang::Sema::CheckDelegatingCtorCycles(), and DelegatingCycleHelper().

DiagnoseBaseOrMemInitializerOrder()

Definition at line 5669 of file SemaDeclCXX.cpp.

References AddInitializerToDiag(), clang::CXXRecordDecl::bases(), clang::Constructor, clang::Sema::Context, clang::FixItHint::CreateReplacement(), clang::SemaBase::Diag(), clang::Sema::Diags, clang::RecordDecl::fields(), GetKeyForBase(), GetKeyForMember(), clang::Sema::getLangOpts(), clang::CXXCtorInitializer::getSourceLocation(), clang::Sema::getSourceManager(), clang::CXXCtorInitializer::getSourceRange(), clang::Lexer::getSourceText(), clang::CharSourceRange::getTokenRange(), clang::Init, clang::DiagnosticsEngine::isIgnored(), PopulateKeysForFields(), and clang::CXXRecordDecl::vbases().

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

diagnoseDeprecatedCopyOperation()

Diagnose an implicit copy operation for a class which is odr-used, but which is deprecated because the class has a user-declared copy constructor, copy assignment operator, or destructor.

Definition at line 15196 of file SemaDeclCXX.cpp.

References clang::CXXRecordDecl::ctors(), clang::SemaBase::Diag(), clang::CXXRecordDecl::getDestructor(), clang::Decl::getLocation(), clang::CXXMethodDecl::getParent(), clang::CXXRecordDecl::hasUserDeclaredCopyAssignment(), clang::CXXRecordDecl::hasUserDeclaredCopyConstructor(), clang::CXXRecordDecl::hasUserDeclaredDestructor(), clang::isa(), clang::Decl::isImplicit(), clang::FunctionDecl::isUserProvided(), and clang::CXXRecordDecl::methods().

Referenced by clang::Sema::DefineImplicitCopyAssignment(), and clang::Sema::DefineImplicitCopyConstructor().

diagnoseInvalidDeclaratorChunks()

Definition at line 11026 of file SemaDeclCXX.cpp.

References clang::SemaBase::Diag(), clang::DeclaratorChunk::Function, clang::SourceRange::getBegin(), clang::Declarator::getNumTypeObjects(), clang::DeclaratorChunk::getSourceRange(), clang::Declarator::getTypeObject(), clang::Declarator::isInvalidType(), clang::DeclaratorChunk::Kind, clang::DeclaratorChunk::Paren, and clang::Declarator::setInvalidType().

Referenced by clang::Sema::CheckConstructorDeclarator(), and clang::Sema::CheckDestructorDeclarator().

DiagnoseInvisibleNamespace()

DiagnoseNamespaceInlineMismatch()

EvaluateAsStringImpl()

template

Definition at line 17719 of file SemaDeclCXX.cpp.

References clang::APValue, clang::Sema::BuildCallExpr(), clang::Sema::BuildConvertedConstantExpression(), clang::Sema::BuildMemberReferenceExpr(), clang::ASTContext::CharTy, clang::Sema::Context, clang::OverloadCandidateSet::CSK_Normal, clang::SemaBase::Diag(), clang::Sema::Diags, clang::LookupResult::empty(), clang::ExprError(), clang::ActionResult< PtrTy, Compress >::get(), clang::ASTContext::getAsConstantArrayType(), clang::Sema::getASTContext(), clang::ASTContext::getConstType(), clang::ArrayType::getElementType(), clang::Preprocessor::getIdentifierInfo(), clang::LookupResult::getNameLoc(), clang::ASTContext::getPointerType(), clang::ASTContext::getSizeType(), clang::ASTContext::getTypeSize(), clang::DiagnosticsEngine::isIgnored(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Expr::isTypeDependent(), clang::Type::isUnsignedIntegerType(), clang::Expr::isValueDependent(), clang::Sema::LookupMemberName, clang::Sema::LookupQualifiedName(), clang::Member, clang::Note, clang::Sema::PP, SizeT, clang::StaticAssertMessageData, clang::StaticAssertMessageSize, clang::T, and clang::Sema::TemporaryMaterializationConversion().

Referenced by clang::Sema::EvaluateAsString(), and clang::Sema::EvaluateAsString().

extendLeft()

extendRight()

FindBaseInitializer()

Find the direct and/or virtual base specifiers that correspond to the given base type, for use in base initialization within a constructor.

Definition at line 4235 of file SemaDeclCXX.cpp.

References clang::CXXRecordDecl::bases(), clang::CXXBasePaths::begin(), clang::Sema::Context, clang::CXXBasePaths::end(), clang::ASTContext::getCanonicalTagType(), clang::Decl::getLocation(), clang::ASTContext::hasSameUnqualifiedType(), clang::Sema::IsDerivedFrom(), and clang::CXXBaseSpecifier::isVirtual().

Referenced by clang::Sema::BuildBaseInitializer(), and clang::Sema::BuildMemInitializer().

findDecomposableBaseClass()

Find the base class to decompose in a built-in decomposition of a class type.

This base class search is, unfortunately, not quite like any other that we perform anywhere else in C++.

Definition at line 1418 of file SemaDeclCXX.cpp.

References clang::CXXBasePath::Access, clang::AS_public, clang::Sema::BuildBasePathArray(), clang::Sema::CheckBaseClassAccess(), clang::Sema::Context, clang::SemaBase::Diag(), clang::CXXBasePaths::front(), clang::Sema::getAmbiguousPathsDisplayString(), clang::ASTContext::getCanonicalTagType(), clang::ASTContext::getCanonicalType(), clang::CXXRecordDecl::hasDirectFields(), clang::ASTContext::hasSameType(), clang::CXXBasePaths::isAmbiguous(), clang::CXXRecordDecl::lookupInBases(), clang::DeclAccessPair::make(), and clang::CXXBasePaths::setOrigin().

Referenced by checkMemberDecomposition(), and clang::Sema::GetDecompositionElementCount().

findDirectBaseWithType()

findImplicitlyDeclaredEqualityComparisons()

findTrivialSpecialMember()

Perform lookup for a special member of the specified kind, and determine whether it is trivial.

If the triviality can be determined without the lookup, skip it. This is intended for use when determining whether a special member of a containing object is trivial, and thus does not ever perform overload resolution for default constructors.

If Selected is not NULL, *Selected will be filled in with the member that was most likely to be intended to be trivial, if any.

If ForCall is true, look at CXXRecord::HasTrivialSpecialMembersForCall to determine whether the special member is trivial.

Definition at line 10049 of file SemaDeclCXX.cpp.

References clang::Sema::SpecialMemberOverloadResult::Ambiguous, clang::ConsiderTrivialABI, clang::Qualifiers::Const, clang::CopyAssignment, clang::CopyConstructor, clang::CXXRecordDecl::ctors(), clang::Sema::DeclareImplicitDefaultConstructor(), clang::Sema::DeclareImplicitDestructor(), clang::DefaultConstructor, clang::Destructor, clang::CXXRecordDecl::getDestructor(), clang::Sema::SpecialMemberOverloadResult::getKind(), clang::Sema::SpecialMemberOverloadResult::getMethod(), clang::CXXRecordDecl::hasTrivialCopyAssignment(), clang::CXXRecordDecl::hasTrivialCopyConstructor(), clang::CXXRecordDecl::hasTrivialCopyConstructorForCall(), clang::CXXRecordDecl::hasTrivialDefaultConstructor(), clang::CXXRecordDecl::hasTrivialDestructor(), clang::CXXRecordDecl::hasTrivialDestructorForCall(), clang::Invalid, clang::FunctionDecl::isTrivial(), clang::FunctionDecl::isTrivialForCall(), clang::FunctionDecl::isUserProvided(), lookupCallFromSpecialMember(), clang::MoveAssignment, clang::MoveConstructor, clang::CXXRecordDecl::needsImplicitDefaultConstructor(), clang::CXXRecordDecl::needsImplicitDestructor(), and clang::Sema::SpecialMemberOverloadResult::NoMemberOrDeleted.

Referenced by checkTrivialSubobjectCall().

findUserDeclaredCtor()

functionDeclHasDefaultArgument()

getImplicitMethodEPI()

GetKeyForBase()

GetKeyForMember()

getNamespaceDecl()

getRecordDiagFromTagKind()

getStdTrait()

Definition at line 1091 of file SemaDeclCXX.cpp.

References clang::Sema::CheckTemplateIdType(), clang::Sema::Context, clang::SemaBase::Diag(), clang::Found, clang::IdentifierTable::get(), clang::Preprocessor::getIdentifierTable(), clang::ASTContext::getPrintingPolicy(), clang::Sema::getStdNamespace(), clang::TemplateDecl::getTemplateParameters(), clang::Sema::isCompleteType(), clang::QualType::isNull(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::None, clang::Sema::PP, printTemplateArgs(), clang::Sema::RequireCompleteType(), clang::Result, and clang::TemplateName.

Referenced by getTupleLikeElementType(), and isTupleLike().

getTrivialIntegralTemplateArgument()

getTrivialTypeTemplateArgument()

getTupleLikeElementType()

Returns

std::tuple_element<I, T>::type.

Definition at line 1229 of file SemaDeclCXX.cpp.

References clang::TemplateArgumentListInfo::addArgument(), clang::Sema::Context, clang::SemaBase::Diag(), clang::LookupResult::empty(), clang::Type::getAsCXXRecordDecl(), clang::LookupResult::getAsSingle(), clang::Preprocessor::getIdentifierInfo(), clang::Decl::getLocation(), clang::ASTContext::getPrintingPolicy(), clang::LookupResult::getRepresentativeDecl(), clang::ASTContext::getSizeType(), getStdTrait(), getTrivialIntegralTemplateArgument(), getTrivialTypeTemplateArgument(), clang::ASTContext::getTypeDeclType(), clang::QualType::getTypePtr(), clang::QualType::isNull(), lookupMember(), clang::Sema::LookupOrdinaryName, clang::None, clang::Sema::PP, printTemplateArgs(), clang::LookupResult::suppressDiagnostics(), and clang::T.

Referenced by checkTupleLikeDecomposition().

HasAttribute()

template

hasOneRealArgument()

InitializationHasSideEffects()

isDestroyingDeleteT()

IsEquivalentForUsingDecl()

isIncompleteOrZeroLengthArrayType()

IsPotentiallyDestroyingOperatorDelete()

IsPotentiallyTypeAwareOperatorNewOrDelete()

isStdClassTemplate()

Definition at line 12228 of file SemaDeclCXX.cpp.

References clang::Sema::Context, clang::IdentifierTable::get(), clang::Type::getAs(), clang::Type::getAsNonAliasTemplateSpecializationType(), clang::Type::getAsTagDecl(), clang::NamedDecl::getIdentifier(), clang::Preprocessor::getIdentifierTable(), clang::Sema::getLangOpts(), clang::TemplateParameterList::getMinRequiredArguments(), clang::Decl::getNonTransparentDeclContext(), clang::TemplateParameterList::getParam(), clang::ASTContext::getQualifiedType(), clang::Sema::getStdNamespace(), clang::DeclContext::InEnclosingNamespaceSetOf(), clang::isa(), clang::Decl::isInStdNamespace(), clang::Decl::isTemplateParameterPack(), clang::Qualifiers::OCL_Strong, clang::Sema::PP, clang::Qualifiers::setObjCLifetime(), clang::Sema::StdNamespace, and clang::Template.

Referenced by clang::Sema::isStdInitializerList(), and clang::Sema::isStdTypeIdentity().

isTupleLike()

Definition at line 1165 of file SemaDeclCXX.cpp.

References clang::TemplateArgumentListInfo::addArgument(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::ConstantEvaluated, clang::Sema::Context, clang::SemaBase::Diag(), clang::LookupResult::empty(), clang::ActionResult< PtrTy, Compress >::get(), clang::Type::getAsCXXRecordDecl(), clang::Preprocessor::getIdentifierInfo(), clang::ASTContext::getPrintingPolicy(), getStdTrait(), getTrivialTypeTemplateArgument(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::QualType::isNull(), lookupMember(), clang::Sema::LookupOrdinaryName, clang::Sema::PP, printTemplateArgs(), clang::T, UINT_MAX, and clang::Sema::VerifyIntegerConstantExpression().

Referenced by clang::Sema::CheckCompleteDecompositionDeclaration(), and clang::Sema::GetDecompositionElementCount().

IsUnusedPrivateField()

IsUsingDirectiveInToplevelContext()

isVirtualDirectBase()

lookupCallFromSpecialMember()

Look up the special member function that would be called by a special member function for a subobject of class type.

Parameters

Class The class type of the subobject.
CSM The kind of special member function.
FieldQuals If the subobject is a field, its cv-qualifiers.
ConstRHS True if this is a copy operation with a const object on its RHS, that is, if the argument to the outer special member function is 'const' and this is not a field marked 'mutable'.

Definition at line 7408 of file SemaDeclCXX.cpp.

References clang::Qualifiers::Const, clang::CopyAssignment, clang::DefaultConstructor, clang::Destructor, clang::Sema::LookupSpecialMember(), clang::MoveAssignment, and clang::Qualifiers::Volatile.

Referenced by findTrivialSpecialMember(), and specialMemberIsConstexpr().

LookupDestructorIfRelevant()

lookupMember()

lookupOperatorsForDefaultedComparison()

LookupStdClassTemplate()

Definition at line 12341 of file SemaDeclCXX.cpp.

References clang::SemaBase::Diag(), clang::Found, clang::IdentifierTable::get(), clang::Preprocessor::getIdentifierTable(), clang::TemplateParameterList::getMinRequiredArguments(), clang::TemplateParameterList::getParam(), clang::Sema::getStdNamespace(), clang::isa(), clang::Sema::LookupOrdinaryName, clang::Sema::LookupQualifiedName(), clang::Sema::PP, clang::Result, clang::Sema::StdNamespace, and clang::Template.

Referenced by clang::Sema::BuildStdInitializerList(), and clang::Sema::tryBuildStdTypeIdentity().

MarkBaseDestructorsReferenced()

Definition at line 5388 of file SemaDeclCXX.cpp.

References clang::CXXRecordDecl::bases(), clang::Sema::CheckDestructorAccess(), clang::Sema::Context, clang::Sema::DiagnoseUseOfDecl(), clang::ASTContext::getCanonicalTagType(), clang::TargetInfo::getCXXABI(), clang::CXXRecordDecl::getDestructor(), clang::ASTContext::getTargetInfo(), clang::CXXRecordDecl::isAbstract(), clang::DeclContext::isDependentContext(), clang::TargetCXXABI::isMicrosoft(), clang::Decl::isUsed(), LookupDestructorIfRelevant(), clang::Sema::MarkFunctionReferenced(), clang::Sema::MarkVirtualBaseDestructorsReferenced(), and clang::SemaBase::PDiag().

Referenced by clang::Sema::MarkBaseAndMemberDestructorsReferenced(), and clang::Sema::SetCtorInitializers().

MarkFieldDestructorReferenced()

NoteIndirectBases()

PopulateKeysForFields()

printTemplateArgs()

ReferenceDllExportedMembers()

Definition at line 6259 of file SemaDeclCXX.cpp.

References clang::Sema::Consumer, clang::Sema::Context, clang::Sema::CodeSynthesisContext::Entity, clang::TargetInfo::getCXXABI(), clang::getDLLAttr(), clang::Attr::getKind(), clang::Attr::getLocation(), clang::ASTContext::getTargetInfo(), clang::TargetInfo::getTriple(), clang::ASTConsumer::HandleTopLevelDecl(), clang::Sema::InstantiateDefaultCtorDefaultArgs(), clang::Attr::isInherited(), clang::TargetCXXABI::isMicrosoft(), clang::Sema::CodeSynthesisContext::Kind, clang::Sema::MarkFunctionReferenced(), clang::Sema::CodeSynthesisContext::MarkingClassDllexported, clang::Sema::MarkVariableReferenced(), clang::Sema::MarkVTableUsed(), clang::Member, clang::Sema::CodeSynthesisContext::PointOfInstantiation, clang::Sema::popCodeSynthesisContext(), clang::Sema::pushCodeSynthesisContext(), clang::SC_Static, clang::TSK_ExplicitInstantiationDeclaration, clang::TSK_ExplicitInstantiationDefinition, clang::TSK_ImplicitInstantiation, and clang::TSK_Undeclared.

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

RefersToRValueRef()

bool RefersToRValueRef ( Expr * MemRef) static

RemoveAddressSpaceFromPtr()

ReportOverrides()

SearchForReturnInStmt()

void SearchForReturnInStmt ( Sema & Self, Stmt * S ) static

specialMemberIsConstexpr()

TryNamespaceTypoCorrection()

Definition at line 12480 of file SemaDeclCXX.cpp.

References clang::LookupResult::addDecl(), clang::LookupResult::clear(), clang::Sema::computeDeclContext(), clang::Sema::CorrectTypo(), DiagnoseInvisibleNamespace(), clang::Sema::diagnoseTypo(), clang::ErrorRecovery, clang::Sema::getLangOpts(), clang::LookupResult::getLookupKind(), clang::LookupResult::getLookupNameInfo(), clang::IdentifierInfo::getName(), clang::CXXScopeSpec::getRange(), and clang::SemaBase::PDiag().

Referenced by clang::Sema::ActOnNamespaceAliasDef(), and clang::Sema::ActOnUsingDirective().

UsefulToPrintExpr()

bool UsefulToPrintExpr ( const Expr * E) static

WriteCharTypePrefix()

WriteCharValueForDiagnostic()