clang 19.0.0git
Enumerations | Functions
SemaInit.cpp File Reference
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include "clang/AST/ExprOpenMP.h"
#include "clang/AST/IgnoreExpr.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/CharInfo.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/Designator.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Ownership.h"
#include "clang/Sema/SemaInternal.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/STLForwardCompat.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"

Go to the source code of this file.

Enumerations

enum  StringInitFailureKind {
  SIF_None , SIF_NarrowStringIntoWideChar , SIF_WideStringIntoChar , SIF_IncompatWideStringIntoWideChar ,
  SIF_UTF8StringIntoPlainChar , SIF_PlainStringIntoUTF8Char , SIF_Other
}
 
enum  InvalidICRKind { IIK_okay , IIK_nonlocal , IIK_nonscalar }
 The non-zero enum values here are indexes into diagnostic alternatives. More...
 
enum  PathLifetimeKind { Extend , ShouldExtend , NoExtend }
 Whether a path to an object supports lifetime extension. More...
 

Functions

static bool IsWideCharCompatible (QualType T, ASTContext &Context)
 Check whether T is compatible with a wide character type (wchar_t, char16_t or char32_t).
 
static StringInitFailureKind IsStringInit (Expr *Init, const ArrayType *AT, ASTContext &Context)
 Check whether the array of type AT can be initialized by the Init expression by means of string initialization.
 
static StringInitFailureKind IsStringInit (Expr *init, QualType declType, ASTContext &Context)
 
static void updateStringLiteralType (Expr *E, QualType Ty)
 Update the type of a string literal, including any surrounding parentheses, to match the type of the object which it is initializing.
 
static void updateGNUCompoundLiteralRValue (Expr *E)
 Fix a compound literal initializing an array so it's correctly marked as an rvalue.
 
static bool initializingConstexprVariable (const InitializedEntity &Entity)
 
static void CheckC23ConstexprInitStringLiteral (const StringLiteral *SE, Sema &SemaRef, QualType &TT)
 
static void CheckStringInit (Expr *Str, QualType &DeclT, const ArrayType *AT, Sema &S, bool CheckC23ConstexprInit=false)
 
static bool hasAnyDesignatedInits (const InitListExpr *IL)
 
static bool isIdiomaticBraceElisionEntity (const InitializedEntity &Entity)
 Determine whether Entity is an entity for which it is idiomatic to elide the braces in aggregate initialization.
 
static void warnBracedScalarInit (Sema &S, const InitializedEntity &Entity, SourceRange Braces)
 Warn that Entity was of scalar type and was initialized by a single-element braced initializer list.
 
static bool checkDestructorReference (QualType ElementType, SourceLocation Loc, Sema &SemaRef)
 Check if the type of a class element has an accessible destructor, and marks it referenced.
 
static void ExpandAnonymousFieldDesignator (Sema &SemaRef, DesignatedInitExpr *DIE, unsigned DesigIdx, IndirectFieldDecl *IndirectField)
 Expand a field designator that refers to a member of an anonymous struct or union into a series of field designators that refers to the field within the appropriate subobject.
 
static DesignatedInitExprCloneDesignatedInitExpr (Sema &SemaRef, DesignatedInitExpr *DIE)
 
static ExprResult CheckArrayDesignatorExpr (Sema &S, Expr *Index, llvm::APSInt &Value)
 Check that the given Index expression is a valid array designator value.
 
static bool maybeRecoverWithZeroInitialization (Sema &S, InitializationSequence &Sequence, const InitializedEntity &Entity)
 Tries to add a zero initializer. Returns true if that worked.
 
static void MaybeProduceObjCObject (Sema &S, InitializationSequence &Sequence, const InitializedEntity &Entity)
 
static void TryListInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, InitListExpr *InitList, InitializationSequence &Sequence, bool TreatUnavailableAsInvalid)
 Attempt list initialization (C++0x [dcl.init.list])
 
static bool TryInitializerListConstruction (Sema &S, InitListExpr *List, QualType DestType, InitializationSequence &Sequence, bool TreatUnavailableAsInvalid)
 When initializing from init list via constructor, handle initialization of an object of type std::initializer_list<T>.
 
static bool hasCopyOrMoveCtorParam (ASTContext &Ctx, const ConstructorInfo &Info)
 Determine if the constructor has the signature of a copy or move constructor for the type T of the class in which it was found.
 
static OverloadingResult ResolveConstructorOverload (Sema &S, SourceLocation DeclLoc, MultiExprArg Args, OverloadCandidateSet &CandidateSet, QualType DestType, DeclContext::lookup_result Ctors, OverloadCandidateSet::iterator &Best, bool CopyInitializing, bool AllowExplicit, bool OnlyListConstructors, bool IsListInit, bool RequireActualConstructor, bool SecondStepOfCopyInit=false)
 
static void TryConstructorInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType DestType, QualType DestArrayType, InitializationSequence &Sequence, bool IsListInit=false, bool IsInitListCopy=false)
 Attempt initialization by constructor (C++ [dcl.init]), which enumerates the constructors of the initialized entity and performs overload resolution to select the best.
 
static bool ResolveOverloadedFunctionForReferenceBinding (Sema &S, Expr *Initializer, QualType &SourceType, QualType &UnqualifiedSourceType, QualType UnqualifiedTargetType, InitializationSequence &Sequence)
 
static void TryReferenceInitializationCore (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr *Initializer, QualType cv1T1, QualType T1, Qualifiers T1Quals, QualType cv2T2, QualType T2, Qualifiers T2Quals, InitializationSequence &Sequence, bool TopLevelOfInitList)
 Reference initialization without resolving overloaded functions.
 
static void TryValueInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, InitializationSequence &Sequence, InitListExpr *InitList)
 Attempt value initialization (C++ [dcl.init]p7).
 
static void TryReferenceListInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, InitListExpr *InitList, InitializationSequence &Sequence, bool TreatUnavailableAsInvalid)
 Attempt list initialization of a reference.
 
static OverloadingResult TryRefInitWithConversionFunction (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr *Initializer, bool AllowRValues, bool IsLValueRef, InitializationSequence &Sequence)
 Try a reference initialization that involves calling a conversion function.
 
static void CheckCXX98CompatAccessibleCopy (Sema &S, const InitializedEntity &Entity, Expr *CurInitExpr)
 Check whether elidable copy construction for binding a reference to a temporary would have succeeded if we were building in C++98 mode, for -Wc++98-compat.
 
static void TryReferenceInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr *Initializer, InitializationSequence &Sequence, bool TopLevelOfInitList)
 Attempt reference initialization (C++0x [dcl.init.ref])
 
static bool isNonReferenceableGLValue (Expr *E)
 Determine whether an expression is a non-referenceable glvalue (one to which a reference can never bind).
 
static void TryStringLiteralInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, Expr *Initializer, InitializationSequence &Sequence)
 Attempt character array initialization from a string literal (C++ [dcl.init.string], C99 6.7.8).
 
static void TryDefaultInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, InitializationSequence &Sequence)
 Attempt default initialization (C++ [dcl.init]p6).
 
static void TryOrBuildParenListInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef< Expr * > Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result=nullptr)
 
static void TryUserDefinedConversion (Sema &S, QualType DestType, const InitializationKind &Kind, Expr *Initializer, InitializationSequence &Sequence, bool TopLevelOfInitList)
 Attempt a user-defined conversion between two types (C++ [dcl.init]), which enumerates all conversion functions and performs overload resolution to select the best.
 
static bool isLibstdcxxPointerReturnFalseHack (Sema &S, const InitializedEntity &Entity, const Expr *Init)
 An egregious hack for compatibility with libstdc++-4.2: in <tr1/hashtable>, a function with a pointer return type contains a 'return false;' statement.
 
static InvalidICRKind isInvalidICRSource (ASTContext &C, Expr *e, bool isAddressOf, bool &isWeakAccess)
 Determines whether this expression is an acceptable ICR source.
 
static void checkIndirectCopyRestoreSource (Sema &S, Expr *src)
 Check whether the given expression is a valid operand for an indirect copy/restore.
 
static bool hasCompatibleArrayTypes (ASTContext &Context, const ArrayType *Dest, const ArrayType *Source)
 Determine whether we have compatible array types for the purposes of GNU by-copy array initialization.
 
static bool tryObjCWritebackConversion (Sema &S, InitializationSequence &Sequence, const InitializedEntity &Entity, Expr *Initializer)
 
static bool TryOCLSamplerInitialization (Sema &S, InitializationSequence &Sequence, QualType DestType, Expr *Initializer)
 
static bool IsZeroInitializer (Expr *Initializer, Sema &S)
 
static bool TryOCLZeroOpaqueTypeInitialization (Sema &S, InitializationSequence &Sequence, QualType DestType, Expr *Initializer)
 
static bool isExprAnUnaddressableFunction (Sema &S, const Expr *E)
 Tries to get a FunctionDecl out of E.
 
static bool canPerformArrayCopy (const InitializedEntity &Entity)
 Determine whether we can perform an elementwise array copy for this kind of entity.
 
static Sema::AssignmentAction getAssignmentAction (const InitializedEntity &Entity, bool Diagnose=false)
 
static bool shouldBindAsTemporary (const InitializedEntity &Entity)
 Whether we should bind a created object as a temporary when initializing the given entity.
 
static bool shouldDestroyEntity (const InitializedEntity &Entity)
 Whether the given entity, when initialized with an object created for that initialization, requires destruction.
 
static SourceLocation getInitializationLoc (const InitializedEntity &Entity, Expr *Initializer)
 Get the location at which initialization diagnostics should appear.
 
static ExprResult CopyObject (Sema &S, QualType T, const InitializedEntity &Entity, ExprResult CurInit, bool IsExtraneousCopy)
 Make a (potentially elidable) temporary copy of the object provided by the given initializer by calling the appropriate copy constructor.
 
static bool isExplicitTemporary (const InitializedEntity &Entity, const InitializationKind &Kind, unsigned NumArgs)
 Returns true if the parameters describe a constructor initialization of an explicit temporary object, e.g.
 
static ExprResult PerformConstructorInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, const InitializationSequence::Step &Step, bool &ConstructorInitRequiresZeroInit, bool IsListInitialization, bool IsStdInitListInitialization, SourceLocation LBraceLoc, SourceLocation RBraceLoc)
 
static LifetimeResult getEntityLifetime (const InitializedEntity *Entity, const InitializedEntity *InitField=nullptr)
 Determine the declaration which an initialized entity ultimately refers to, for the purpose of lifetime-extending a temporary bound to a reference in the initialization of Entity.
 
static bool isVarOnPath (IndirectLocalPath &Path, VarDecl *VD)
 
static bool pathContainsInit (IndirectLocalPath &Path)
 
static void visitLocalsRetainedByInitializer (IndirectLocalPath &Path, Expr *Init, LocalVisitor Visit, bool RevisitSubinits, bool EnableLifetimeWarnings)
 Visit the locals that would be reachable through an object initialized by the prvalue expression Init.
 
static void visitLocalsRetainedByReferenceBinding (IndirectLocalPath &Path, Expr *Init, ReferenceKind RK, LocalVisitor Visit, bool EnableLifetimeWarnings)
 Visit the locals that would be reachable through a reference bound to the glvalue expression Init.
 
template<typename T >
static bool isRecordWithAttr (QualType Type)
 
static bool isInStlNamespace (const Decl *D)
 
static bool shouldTrackImplicitObjectArg (const CXXMethodDecl *Callee)
 
static bool shouldTrackFirstArgument (const FunctionDecl *FD)
 
static void handleGslAnnotatedTypes (IndirectLocalPath &Path, Expr *Call, LocalVisitor Visit)
 
static bool implicitObjectParamIsLifetimeBound (const FunctionDecl *FD)
 
static void visitLifetimeBoundArguments (IndirectLocalPath &Path, Expr *Call, LocalVisitor Visit)
 
static PathLifetimeKind shouldLifetimeExtendThroughPath (const IndirectLocalPath &Path)
 Determine whether this is an indirect path to a temporary that we are supposed to lifetime-extend along.
 
static SourceRange nextPathEntryRange (const IndirectLocalPath &Path, unsigned I, Expr *E)
 Find the range for the first interesting entry in the path at or after I.
 
static bool pathOnlyInitializesGslPointer (IndirectLocalPath &Path)
 
static void DiagnoseNarrowingInInitList (Sema &S, const ImplicitConversionSequence &ICS, QualType PreNarrowingType, QualType EntityType, const Expr *PostInit)
 
static void CheckC23ConstexprInitConversion (Sema &S, QualType FromType, QualType ToType, Expr *Init)
 
static void CheckMoveOnConstruction (Sema &S, const Expr *InitExpr, bool IsReturnStmt)
 Provide warnings when std::move is used on construction.
 
static void CheckForNullPointerDereference (Sema &S, const Expr *E)
 
static bool DiagnoseUninitializedReference (Sema &S, SourceLocation Loc, QualType T)
 Somewhere within T there is an uninitialized reference subobject.
 
static void emitBadConversionNotes (Sema &S, const InitializedEntity &entity, Expr *op)
 Emit notes associated with an initialization that failed due to a "simple" conversion failure.
 
static void diagnoseListInit (Sema &S, const InitializedEntity &Entity, InitListExpr *InitList)
 
static bool isOrIsDerivedFromSpecializationOf (CXXRecordDecl *RD, ClassTemplateDecl *CTD)
 Determine whether RD is, or is derived from, a specialization of CTD.
 

Enumeration Type Documentation

◆ InvalidICRKind

The non-zero enum values here are indexes into diagnostic alternatives.

Enumerator
IIK_okay 
IIK_nonlocal 
IIK_nonscalar 

Definition at line 5902 of file SemaInit.cpp.

◆ PathLifetimeKind

Whether a path to an object supports lifetime extension.

Enumerator
Extend 

Lifetime-extend along this path.

ShouldExtend 

We should lifetime-extend, but we don't because (due to technical limitations) we can't.

This happens for default member initializers, which we don't clone for every use, so we don't have a unique MaterializeTemporaryExpr to update.

NoExtend 

Do not lifetime extend along this path.

Definition at line 8065 of file SemaInit.cpp.

◆ StringInitFailureKind

Enumerator
SIF_None 
SIF_NarrowStringIntoWideChar 
SIF_WideStringIntoChar 
SIF_IncompatWideStringIntoWideChar 
SIF_UTF8StringIntoPlainChar 
SIF_PlainStringIntoUTF8Char 
SIF_Other 

Definition at line 59 of file SemaInit.cpp.

Function Documentation

◆ canPerformArrayCopy()

static bool canPerformArrayCopy ( const InitializedEntity Entity)
static

◆ CheckArrayDesignatorExpr()

static ExprResult CheckArrayDesignatorExpr ( Sema S,
Expr Index,
llvm::APSInt Value 
)
static

Check that the given Index expression is a valid array designator value.

This is essentially just a wrapper around VerifyIntegerConstantExpression that also checks for negative values and produces a reasonable diagnostic if there is a failure. Returns the index expression, possibly with an implicit cast added, on success. If everything went okay, Value will receive the value of the constant expression.

Definition at line 3351 of file SemaInit.cpp.

References clang::Sema::AllowFold, clang::SemaBase::Diag(), clang::Result, toString(), and clang::Sema::VerifyIntegerConstantExpression().

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

◆ CheckC23ConstexprInitConversion()

static void CheckC23ConstexprInitConversion ( Sema S,
QualType  FromType,
QualType  ToType,
Expr Init 
)
static

◆ CheckC23ConstexprInitStringLiteral()

static void CheckC23ConstexprInitStringLiteral ( const StringLiteral SE,
Sema SemaRef,
QualType TT 
)
static

◆ CheckCXX98CompatAccessibleCopy()

static void CheckCXX98CompatAccessibleCopy ( Sema S,
const InitializedEntity Entity,
Expr CurInitExpr 
)
static

◆ checkDestructorReference()

static bool checkDestructorReference ( QualType  ElementType,
SourceLocation  Loc,
Sema SemaRef 
)
static

Check if the type of a class element has an accessible destructor, and marks it referenced.

Returns true if we shouldn't form a reference to the destructor.

Aggregate initialization requires a class element's destructor be accessible per 11.6.1 [dcl.init.aggr]:

The destructor for each element of class type is potentially invoked (15.4 [class.dtor]) from the context where the aggregate initialization occurs.

Definition at line 1926 of file SemaInit.cpp.

References clang::Sema::CheckDestructorAccess(), clang::Destructor, clang::Sema::DiagnoseUseOfDecl(), clang::Type::getAsCXXRecordDecl(), clang::Sema::LookupDestructor(), clang::Sema::MarkFunctionReferenced(), and clang::Sema::PDiag().

Referenced by PerformConstructorInitialization().

◆ CheckForNullPointerDereference()

static void CheckForNullPointerDereference ( Sema S,
const Expr E 
)
static

◆ checkIndirectCopyRestoreSource()

static void checkIndirectCopyRestoreSource ( Sema S,
Expr src 
)
static

◆ CheckMoveOnConstruction()

static void CheckMoveOnConstruction ( Sema S,
const Expr InitExpr,
bool  IsReturnStmt 
)
static

◆ CheckStringInit()

static void CheckStringInit ( Expr Str,
QualType DeclT,
const ArrayType AT,
Sema S,
bool  CheckC23ConstexprInit = false 
)
static

◆ CloneDesignatedInitExpr()

static DesignatedInitExpr * CloneDesignatedInitExpr ( Sema SemaRef,
DesignatedInitExpr DIE 
)
static

◆ CopyObject()

static ExprResult CopyObject ( Sema S,
QualType  T,
const InitializedEntity Entity,
ExprResult  CurInit,
bool  IsExtraneousCopy 
)
static

Make a (potentially elidable) temporary copy of the object provided by the given initializer by calling the appropriate copy constructor.

Parameters
SThe Sema object used for type-checking.
TThe type of the temporary object, which must either be the type of the initializer expression or a superclass thereof.
EntityThe entity being initialized.
CurInitThe initializer expression.
IsExtraneousCopyWhether this is an "extraneous" copy that is permitted in C++03 (but not C++0x) when binding a reference to an rvalue.
Returns
An expression that copies the initializer expression into a temporary object, or an error expression if a copy could not be created.

Definition at line 6787 of file SemaInit.cpp.

References clang::Sema::BuildCXXConstructExpr(), clang::Sema::BuildCXXDefaultArgExpr(), clang::Sema::CheckConstructorAccess(), clang::Class, clang::Complete, clang::Sema::CompleteConstructorCall(), clang::Sema::Context, clang::OverloadCandidateSet::CSK_Normal, clang::SemaBase::Diag(), clang::ExprError(), clang::ActionResult< PtrTy, Compress >::get(), clang::ActionResult< PtrTy, Compress >::getAs(), clang::Type::getAs(), getInitializationLoc(), clang::InitializedEntity::getKind(), clang::Stmt::getSourceRange(), clang::ValueDecl::getType(), clang::Expr::getType(), clang::ASTContext::hasSameUnqualifiedType(), int, clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Sema::isSFINAEContext(), clang::Expr::isTemporaryObject(), clang::Sema::LookupConstructors(), clang::Sema::MaybeBindToTemporary(), clang::OverloadCandidateSet::NoteCandidates(), clang::Sema::NoteDeletedFunction(), clang::OCD_AllCandidates, clang::OCD_AmbiguousCandidates, clang::OR_Ambiguous, clang::OR_Deleted, clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::PDiag(), clang::Sema::RequireCompleteType(), ResolveConstructorOverload(), shouldBindAsTemporary(), clang::OverloadCandidateSet::size(), and clang::T.

Referenced by clang::InitializationSequence::Perform().

◆ diagnoseListInit()

static void diagnoseListInit ( Sema S,
const InitializedEntity Entity,
InitListExpr InitList 
)
static

◆ DiagnoseNarrowingInInitList()

static void DiagnoseNarrowingInInitList ( Sema S,
const ImplicitConversionSequence ICS,
QualType  PreNarrowingType,
QualType  EntityType,
const Expr PostInit 
)
static

◆ DiagnoseUninitializedReference()

static bool DiagnoseUninitializedReference ( Sema S,
SourceLocation  Loc,
QualType  T 
)
static

◆ emitBadConversionNotes()

static void emitBadConversionNotes ( Sema S,
const InitializedEntity entity,
Expr op 
)
static

◆ ExpandAnonymousFieldDesignator()

static void ExpandAnonymousFieldDesignator ( Sema SemaRef,
DesignatedInitExpr DIE,
unsigned  DesigIdx,
IndirectFieldDecl IndirectField 
)
static

Expand a field designator that refers to a member of an anonymous struct or union into a series of field designators that refers to the field within the appropriate subobject.

Definition at line 2471 of file SemaInit.cpp.

References clang::IndirectFieldDecl::chain_begin(), clang::IndirectFieldDecl::chain_end(), clang::Sema::Context, clang::Designator::CreateFieldDesignator(), clang::DesignatedInitExpr::ExpandDesignator(), clang::DesignatedInitExpr::getDesignator(), clang::DesignatedInitExpr::Designator::getDotLoc(), and clang::DesignatedInitExpr::Designator::getFieldLoc().

◆ getAssignmentAction()

static Sema::AssignmentAction getAssignmentAction ( const InitializedEntity Entity,
bool  Diagnose = false 
)
static

◆ getEntityLifetime()

static LifetimeResult getEntityLifetime ( const InitializedEntity Entity,
const InitializedEntity InitField = nullptr 
)
static

◆ getInitializationLoc()

static SourceLocation getInitializationLoc ( const InitializedEntity Entity,
Expr Initializer 
)
static

◆ handleGslAnnotatedTypes()

static void handleGslAnnotatedTypes ( IndirectLocalPath &  Path,
Expr Call,
LocalVisitor  Visit 
)
static

◆ hasAnyDesignatedInits()

static bool hasAnyDesignatedInits ( const InitListExpr IL)
static

Definition at line 974 of file SemaInit.cpp.

References clang::Init.

◆ hasCompatibleArrayTypes()

static bool hasCompatibleArrayTypes ( ASTContext Context,
const ArrayType Dest,
const ArrayType Source 
)
static

Determine whether we have compatible array types for the purposes of GNU by-copy array initialization.

Definition at line 5990 of file SemaInit.cpp.

References clang::ArrayType::getElementType(), clang::ASTContext::hasSameType(), clang::Type::isConstantArrayType(), and clang::Type::isIncompleteArrayType().

Referenced by clang::InitializationSequence::InitializeFrom().

◆ hasCopyOrMoveCtorParam()

static bool hasCopyOrMoveCtorParam ( ASTContext Ctx,
const ConstructorInfo Info 
)
static

Determine if the constructor has the signature of a copy or move constructor for the type T of the class in which it was found.

That is, determine if its first parameter is of type T or reference to (possibly cv-qualified) T.

Definition at line 4107 of file SemaInit.cpp.

References clang::ConstructorInfo::Constructor, clang::ConstructorInfo::FoundDecl, clang::Decl::getDeclContext(), clang::QualType::getNonReferenceType(), clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::ASTContext::getRecordType(), clang::ValueDecl::getType(), and clang::ASTContext::hasSameUnqualifiedType().

Referenced by PerformConstructorInitialization(), and ResolveConstructorOverload().

◆ implicitObjectParamIsLifetimeBound()

static bool implicitObjectParamIsLifetimeBound ( const FunctionDecl FD)
static

◆ initializingConstexprVariable()

static bool initializingConstexprVariable ( const InitializedEntity Entity)
static

Definition at line 194 of file SemaInit.cpp.

References clang::InitializedEntity::getDecl(), and Parent.

Referenced by clang::InitializationSequence::Perform().

◆ isExplicitTemporary()

static bool isExplicitTemporary ( const InitializedEntity Entity,
const InitializationKind Kind,
unsigned  NumArgs 
)
static

◆ isExprAnUnaddressableFunction()

static bool isExprAnUnaddressableFunction ( Sema S,
const Expr E 
)
static

Tries to get a FunctionDecl out of E.

If it succeeds and we can take the address of that function, this returns true. Otherwise, it returns false.

Definition at line 6124 of file SemaInit.cpp.

References clang::Sema::checkAddressOfFunctionIsAvailable().

Referenced by clang::InitializationSequence::InitializeFrom().

◆ isIdiomaticBraceElisionEntity()

static bool isIdiomaticBraceElisionEntity ( const InitializedEntity Entity)
static

◆ isInStlNamespace()

static bool isInStlNamespace ( const Decl D)
static

◆ isInvalidICRSource()

static InvalidICRKind isInvalidICRSource ( ASTContext C,
Expr e,
bool  isAddressOf,
bool isWeakAccess 
)
static

◆ isLibstdcxxPointerReturnFalseHack()

static bool isLibstdcxxPointerReturnFalseHack ( Sema S,
const InitializedEntity Entity,
const Expr Init 
)
static

An egregious hack for compatibility with libstdc++-4.2: in <tr1/hashtable>, a function with a pointer return type contains a 'return false;' statement.

In C++11, 'false' is not a null pointer, so this breaks the build of any code using that header.

Work around this by treating 'return false;' as zero-initializing the result if it's used in a pointer-returning function in a system header.

Definition at line 5890 of file SemaInit.cpp.

References clang::InitializedEntity::EK_Result, clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::Sema::getSourceManager(), clang::InitializedEntity::getType(), clang::Init, clang::SourceManager::isInSystemHeader(), and clang::Type::isPointerType().

Referenced by clang::InitializationSequence::InitializeFrom().

◆ isNonReferenceableGLValue()

static bool isNonReferenceableGLValue ( Expr E)
static

Determine whether an expression is a non-referenceable glvalue (one to which a reference can never bind).

Attempting to bind a reference to such a glvalue will always create a temporary.

Definition at line 4993 of file SemaInit.cpp.

References clang::Expr::refersToBitField(), clang::Expr::refersToMatrixElement(), and clang::Expr::refersToVectorElement().

Referenced by TryReferenceInitializationCore().

◆ isOrIsDerivedFromSpecializationOf()

static bool isOrIsDerivedFromSpecializationOf ( CXXRecordDecl RD,
ClassTemplateDecl CTD 
)
static

Determine whether RD is, or is derived from, a specialization of CTD.

Definition at line 10723 of file SemaInit.cpp.

References clang::declaresSameEntity(), and clang::CXXRecordDecl::forallBases().

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

◆ isRecordWithAttr()

template<typename T >
static bool isRecordWithAttr ( QualType  Type)
static

◆ IsStringInit() [1/2]

static StringInitFailureKind IsStringInit ( Expr Init,
const ArrayType AT,
ASTContext Context 
)
static

◆ IsStringInit() [2/2]

static StringInitFailureKind IsStringInit ( Expr init,
QualType  declType,
ASTContext Context 
)
static

◆ isVarOnPath()

static bool isVarOnPath ( IndirectLocalPath &  Path,
VarDecl VD 
)
static

◆ IsWideCharCompatible()

static bool IsWideCharCompatible ( QualType  T,
ASTContext Context 
)
static

Check whether T is compatible with a wide character type (wchar_t, char16_t or char32_t).

Definition at line 49 of file SemaInit.cpp.

References clang::ASTContext::Char16Ty, clang::ASTContext::Char32Ty, clang::ASTContext::getLangOpts(), clang::ASTContext::getWideCharType(), clang::T, and clang::ASTContext::typesAreCompatible().

Referenced by clang::InitializationSequence::InitializeFrom(), and IsStringInit().

◆ IsZeroInitializer()

static bool IsZeroInitializer ( Expr Initializer,
Sema S 
)
static

Definition at line 6066 of file SemaInit.cpp.

References clang::Sema::getASTContext(), and clang::Initializer.

Referenced by TryOCLZeroOpaqueTypeInitialization().

◆ MaybeProduceObjCObject()

static void MaybeProduceObjCObject ( Sema S,
InitializationSequence Sequence,
const InitializedEntity Entity 
)
static

When initializing a parameter, produce the value if it's marked attribute((ns_consumed)).

When initializing a return value, if the return type is a retainable type, then returns need to immediately retain the object. If an autorelease is required, it will be done at the last instant.

Definition at line 4032 of file SemaInit.cpp.

References clang::InitializationSequence::AddProduceObjCObjectStep(), clang::InitializedEntity::EK_Result, clang::InitializedEntity::EK_StmtExprResult, clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::InitializedEntity::getType(), clang::Type::isObjCRetainableType(), clang::InitializedEntity::isParameterConsumed(), and clang::InitializedEntity::isParameterKind().

Referenced by clang::InitializationSequence::InitializeFrom().

◆ maybeRecoverWithZeroInitialization()

static bool maybeRecoverWithZeroInitialization ( Sema S,
InitializationSequence Sequence,
const InitializedEntity Entity 
)
static

◆ nextPathEntryRange()

static SourceRange nextPathEntryRange ( const IndirectLocalPath &  Path,
unsigned  I,
Expr E 
)
static

Find the range for the first interesting entry in the path at or after I.

Definition at line 8092 of file SemaInit.cpp.

References clang::Stmt::getSourceRange().

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

◆ pathContainsInit()

static bool pathContainsInit ( IndirectLocalPath &  Path)
static

Definition at line 7394 of file SemaInit.cpp.

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

◆ pathOnlyInitializesGslPointer()

static bool pathOnlyInitializesGslPointer ( IndirectLocalPath &  Path)
static

Definition at line 8122 of file SemaInit.cpp.

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

◆ PerformConstructorInitialization()

static ExprResult PerformConstructorInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
MultiExprArg  Args,
const InitializationSequence::Step Step,
bool ConstructorInitRequiresZeroInit,
bool  IsListInitialization,
bool  IsStdInitListInitialization,
SourceLocation  LBraceLoc,
SourceLocation  RBraceLoc 
)
static

Definition at line 7039 of file SemaInit.cpp.

References clang::InitializedEntity::allowsNRVO(), clang::Sema::BuildCXXConstructExpr(), clang::Sema::CheckConstructorAccess(), checkDestructorReference(), clang::Sema::CheckForImmediateInvocation(), clang::Complete, clang::Sema::CompleteConstructorCall(), clang::Sema::Context, clang::CXXTemporaryObjectExpr::Create(), clang::Sema::DefineImplicitDefaultConstructor(), clang::Delegating, clang::Sema::diagnoseNullableToNonnullConversion(), clang::Sema::DiagnoseUseOfDecl(), clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Delegating, clang::ExprError(), clang::Sema::findInheritingConstructor(), clang::InitializationSequence::Step::F::FoundDecl, clang::InitializationSequence::Step::F::Function, clang::InitializationSequence::Step::Function, clang::ActionResult< PtrTy, Compress >::get(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getBaseElementType(), clang::InitializedEntity::getBaseSpecifier(), clang::getConstructorInfo(), clang::DeclAccessPair::getDecl(), clang::InitializedEntity::getKind(), clang::QualType::getNonLValueExprType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::InitializedEntity::getType(), clang::InitializedEntity::getTypeSourceInfo(), clang::InitializationSequence::Step::F::HadMultipleCandidates, hasCopyOrMoveCtorParam(), clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_DirectList, isExplicitTemporary(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::CXXBaseSpecifier::isVirtual(), clang::Sema::MarkFunctionReferenced(), clang::Sema::MaybeBindToTemporary(), clang::NonVirtualBase, clang::Sema::runWithSufficientStackSpace(), shouldBindAsTemporary(), clang::InitializationSequence::Step::Type, and clang::VirtualBase.

Referenced by clang::InitializationSequence::Perform().

◆ ResolveConstructorOverload()

static OverloadingResult ResolveConstructorOverload ( Sema S,
SourceLocation  DeclLoc,
MultiExprArg  Args,
OverloadCandidateSet CandidateSet,
QualType  DestType,
DeclContext::lookup_result  Ctors,
OverloadCandidateSet::iterator Best,
bool  CopyInitializing,
bool  AllowExplicit,
bool  OnlyListConstructors,
bool  IsListInit,
bool  RequireActualConstructor,
bool  SecondStepOfCopyInit = false 
)
static

◆ ResolveOverloadedFunctionForReferenceBinding()

static bool ResolveOverloadedFunctionForReferenceBinding ( Sema S,
Expr Initializer,
QualType SourceType,
QualType UnqualifiedSourceType,
QualType  UnqualifiedTargetType,
InitializationSequence Sequence 
)
static

◆ shouldBindAsTemporary()

static bool shouldBindAsTemporary ( const InitializedEntity Entity)
static

◆ shouldDestroyEntity()

static bool shouldDestroyEntity ( const InitializedEntity Entity)
static

◆ shouldLifetimeExtendThroughPath()

static PathLifetimeKind shouldLifetimeExtendThroughPath ( const IndirectLocalPath &  Path)
static

Determine whether this is an indirect path to a temporary that we are supposed to lifetime-extend along.

Definition at line 8080 of file SemaInit.cpp.

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

◆ shouldTrackFirstArgument()

static bool shouldTrackFirstArgument ( const FunctionDecl FD)
static

◆ shouldTrackImplicitObjectArg()

static bool shouldTrackImplicitObjectArg ( const CXXMethodDecl Callee)
static

Definition at line 7435 of file SemaInit.cpp.

References isInStlNamespace().

Referenced by handleGslAnnotatedTypes().

◆ TryConstructorInitialization()

static void TryConstructorInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
MultiExprArg  Args,
QualType  DestType,
QualType  DestArrayType,
InitializationSequence Sequence,
bool  IsListInit = false,
bool  IsInitListCopy = false 
)
static

Attempt initialization by constructor (C++ [dcl.init]), which enumerates the constructors of the initialized entity and performs overload resolution to select the best.

Parameters
DestTypeThe destination class type.
DestArrayTypeThe destination type, which is either DestType or a (possibly multidimensional) array of DestType.
IsListInitIs this list-initialization?
IsInitListCopyIs this non-list-initialization resulting from a list-initialization from {x} where x is the same type as the entity?

Definition at line 4234 of file SemaInit.cpp.

References clang::InitializationSequence::AddConstructorInitializationStep(), clang::InitializationSequence::AddQualificationConversionStep(), clang::InitializationSequence::AddUserConversionStep(), clang::CXXRecordDecl::allowConstDefaultInit(), clang::Sema::Context, clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Delegating, clang::InitializedEntity::EK_LambdaToBlockConversionBlockElement, clang::InitializationSequence::FK_ConstructorOverloadFailed, clang::InitializationSequence::FK_DefaultInitOfConst, clang::InitializationSequence::FK_ExplicitConstructor, clang::InitializationSequence::FK_ListConstructorOverloadFailed, clang::Type::getAs(), clang::RecordType::getDecl(), clang::InitializationSequence::getFailedCandidateSet(), clang::InitListExpr::getInits(), clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::InitListExpr::getNumInits(), clang::CXXMethodDecl::getParent(), clang::InitializedEntity::getType(), clang::ASTContext::hasSameType(), clang::ASTContext::hasSameUnqualifiedType(), clang::InitializationKind::IK_Copy, clang::InitializationKind::IK_Default, clang::Sema::isCompleteType(), clang::QualType::isConstQualified(), clang::CXXConstructorDecl::isExplicit(), clang::Sema::LookupConstructors(), clang::Sema::LookupDefaultConstructor(), maybeRecoverWithZeroInitialization(), clang::OR_Deleted, clang::OR_No_Viable_Function, ResolveConstructorOverload(), clang::Result, clang::InitializationSequence::RewrapReferenceInitList(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::setIncompleteTypeFailure(), clang::InitializationSequence::SetOverloadFailure(), clang::OverloadCandidateSet::size(), and clang::VK_PRValue.

Referenced by clang::InitializationSequence::InitializeFrom(), TryDefaultInitialization(), TryListInitialization(), and TryValueInitialization().

◆ TryDefaultInitialization()

static void TryDefaultInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
InitializationSequence Sequence 
)
static

◆ TryInitializerListConstruction()

static bool TryInitializerListConstruction ( Sema S,
InitListExpr List,
QualType  DestType,
InitializationSequence Sequence,
bool  TreatUnavailableAsInvalid 
)
static

◆ TryListInitialization()

static void TryListInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
InitListExpr InitList,
InitializationSequence Sequence,
bool  TreatUnavailableAsInvalid 
)
static

Attempt list initialization (C++0x [dcl.init.list])

Definition at line 4562 of file SemaInit.cpp.

References clang::InitializationSequence::AddConversionSequenceStep(), clang::InitializationSequence::AddListInitializationStep(), clang::Sema::Context, clang::InitializationKind::CreateDirect(), clang::StandardConversionSequence::First, clang::InitializationSequence::FK_DesignatedInitForNonAggregate, clang::InitializationSequence::FK_InitListBadDestinationType, clang::InitializationSequence::FK_ListInitializationFailed, clang::InitializationSequence::FK_TooManyInitsForScalar, clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::Type::getAsCXXRecordDecl(), clang::InitListExpr::getBeginLoc(), clang::InitListExpr::getInit(), clang::Sema::getLangOpts(), clang::InitListExpr::getLBraceLoc(), clang::InitListExpr::getNumInits(), clang::InitListExpr::getRBraceLoc(), clang::StandardConversionSequence::getToType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::InitListExpr::hasDesignatedInit(), clang::ASTContext::hasSameUnqualifiedType(), clang::ICK_Floating_Integral, clang::ICK_Integral_Conversion, clang::ICK_Lvalue_To_Rvalue, clang::InitializationKind::IK_DirectList, clang::Init, clang::InitializationSequence::InitializeFrom(), clang::Type::isAggregateType(), clang::Type::isAnyComplexType(), clang::Type::isBooleanType(), clang::Sema::isCompleteType(), clang::Sema::IsDerivedFrom(), clang::Type::isFloatingType(), clang::Type::isIntegralOrUnscopedEnumerationType(), clang::Expr::isPRValue(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Type::isScalarType(), clang::Sema::isStdInitializerList(), IsStringInit(), clang::Sema::LookupDefaultConstructor(), clang::InitializationSequence::RewrapReferenceInitList(), clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAsIdentityConversion(), clang::InitializationSequence::SetFailed(), clang::StandardConversionSequence::setFromType(), clang::InitializationSequence::setIncompleteTypeFailure(), clang::ImplicitConversionSequence::setStandard(), clang::StandardConversionSequence::setToType(), SIF_None, clang::ImplicitConversionSequence::Standard, TryConstructorInitialization(), TryInitializerListConstruction(), TryReferenceListInitialization(), and TryValueInitialization().

Referenced by clang::InitializationSequence::InitializeFrom(), TryInitializerListConstruction(), and TryReferenceListInitialization().

◆ tryObjCWritebackConversion()

static bool tryObjCWritebackConversion ( Sema S,
InitializationSequence Sequence,
const InitializedEntity Entity,
Expr Initializer 
)
static

◆ TryOCLSamplerInitialization()

static bool TryOCLSamplerInitialization ( Sema S,
InitializationSequence Sequence,
QualType  DestType,
Expr Initializer 
)
static

◆ TryOCLZeroOpaqueTypeInitialization()

static bool TryOCLZeroOpaqueTypeInitialization ( Sema S,
InitializationSequence Sequence,
QualType  DestType,
Expr Initializer 
)
static

◆ TryOrBuildParenListInitialization()

static void TryOrBuildParenListInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
ArrayRef< Expr * >  Args,
InitializationSequence Sequence,
bool  VerifyOnly,
ExprResult Result = nullptr 
)
static

Definition at line 5451 of file SemaInit.cpp.

References clang::InitializationSequence::AddParenthesizedListInitStep(), clang::CXXRecordDecl::bases(), clang::Sema::BuildCXXDefaultInitExpr(), clang::Sema::checkInitializerLifetime(), clang::Sema::Context, clang::CXXParenListInitExpr::Create(), clang::InitializationKind::CreateForInit(), clang::InitializationKind::CreateValue(), clang::SemaBase::Diag(), clang::InitializationSequence::Diagnose(), clang::InitializationSequence::Failed(), clang::RecordDecl::fields(), clang::InitializationSequence::FK_ParenthesizedListInitFailed, clang::ActionResult< PtrTy, Compress >::get(), clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getAsConstantArrayType(), clang::Sema::getASTContext(), clang::ASTContext::getAsVariableArrayType(), clang::SourceRange::getBegin(), clang::Stmt::getBeginLoc(), clang::ASTContext::getConstantArrayType(), clang::ArrayType::getElementType(), clang::SourceRange::getEnd(), clang::Stmt::getEndLoc(), clang::Expr::getExprLoc(), clang::Decl::getLocation(), clang::Stmt::getSourceRange(), clang::ValueDecl::getType(), clang::InitializedEntity::getType(), clang::FieldDecl::hasInClassInitializer(), clang::InitializedEntity::InitializeBase(), clang::InitializedEntity::InitializeElement(), clang::InitializedEntity::InitializeMemberFromParenAggInit(), clang::Type::isArrayType(), clang::Type::isIncompleteArrayType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Decl::isInvalidDecl(), clang::QualType::isNull(), clang::Type::isReferenceType(), clang::Type::isUnionType(), clang::FieldDecl::isUnnamedBitField(), clang::InitializedEntity::isVariableLengthArrayNew(), clang::Normal, clang::InitializationSequence::NormalSequence, clang::InitializationSequence::Perform(), clang::Result, clang::InitializationSequence::SetFailed(), clang::InitializationSequence::setSequenceKind(), and clang::T.

Referenced by clang::InitializationSequence::Diagnose(), clang::InitializationSequence::InitializeFrom(), and clang::InitializationSequence::Perform().

◆ TryReferenceInitialization()

static void TryReferenceInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr Initializer,
InitializationSequence Sequence,
bool  TopLevelOfInitList 
)
static

◆ TryReferenceInitializationCore()

static void TryReferenceInitializationCore ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr Initializer,
QualType  cv1T1,
QualType  T1,
Qualifiers  T1Quals,
QualType  cv2T2,
QualType  T2,
Qualifiers  T2Quals,
InitializationSequence Sequence,
bool  TopLevelOfInitList 
)
static

Reference initialization without resolving overloaded functions.

We also can get here in C if we call a builtin which is declared as a function with a parameter of reference type (such as __builtin_va_end()).

Definition at line 5002 of file SemaInit.cpp.

References clang::Qualifiers::addAddressSpace(), clang::InitializationSequence::AddConversionSequenceStep(), clang::InitializationSequence::AddDerivedToBaseCastStep(), clang::InitializationSequence::AddExtraneousCopyToTemporary(), clang::InitializationSequence::AddFunctionReferenceConversionStep(), clang::InitializationSequence::AddObjCObjectConversionStep(), clang::InitializationSequence::AddQualificationConversionStep(), clang::InitializationSequence::AddReferenceBindingStep(), CheckCXX98CompatAccessibleCopy(), clang::Sema::CompareReferenceRelationship(), clang::Sema::Context, clang::Default, clang::OverloadCandidateSet::empty(), clang::InitializationSequence::FK_AddressOfOverloadFailed, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToBitfield, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToMatrixElement, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToUnrelated, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToVectorElement, clang::InitializationSequence::FK_ReferenceAddrspaceMismatchTemporary, clang::InitializationSequence::FK_ReferenceInitDropsQualifiers, clang::InitializationSequence::FK_ReferenceInitFailed, clang::InitializationSequence::FK_ReferenceInitOverloadFailed, clang::InitializationSequence::FK_RValueReferenceBindingToLValue, clang::Qualifiers::getAddressSpace(), clang::ASTContext::getCanonicalType(), clang::Qualifiers::getCVRQualifiers(), clang::InitializationSequence::getFailedCandidateSet(), clang::Sema::getLangOpts(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::InitializedEntity::getType(), clang::Qualifiers::hasAddressSpace(), clang::Qualifiers::hasConst(), clang::ASTContext::hasSameType(), clang::Qualifiers::hasVolatile(), clang::Initializer, clang::InitializedEntity::InitializeTemporary(), clang::Qualifiers::isAddressSpaceSupersetOf(), clang::Type::isArrayType(), clang::ImplicitConversionSequence::isBad(), clang::Type::isFunctionType(), clang::Expr::Classification::isLValue(), clang::Type::isLValueReferenceType(), isNonReferenceableGLValue(), clang::Expr::Classification::isPRValue(), clang::Type::isRecordType(), clang::Expr::Classification::isRValue(), isRValueRef(), clang::Expr::Classification::isXValue(), clang::OR_No_Viable_Function, clang::OR_Success, clang::ASTContext::OverloadTy, clang::Sema::Ref_Compatible, clang::Sema::Ref_Incompatible, clang::Sema::Ref_Related, clang::Qualifiers::removeAddressSpace(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::SetOverloadFailure(), clang::Sema::TryImplicitConversion(), TryRefInitWithConversionFunction(), clang::VK_LValue, clang::VK_PRValue, clang::VK_XValue, and clang::Qualifiers::withoutAddressSpace().

Referenced by TryReferenceInitialization(), and TryReferenceListInitialization().

◆ TryReferenceListInitialization()

static void TryReferenceListInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
InitListExpr InitList,
InitializationSequence Sequence,
bool  TreatUnavailableAsInvalid 
)
static

Attempt list initialization of a reference.

Definition at line 4459 of file SemaInit.cpp.

References clang::InitializationSequence::AddQualificationConversionStep(), clang::InitializationSequence::AddReferenceBindingStep(), clang::Type::castAs(), clang::Sema::CompareReferenceRelationship(), clang::Sema::Context, clang::InitializedEntity::EK_CompoundLiteralInit, clang::InitializationSequence::FK_NonConstLValueReferenceBindingToTemporary, clang::InitializationSequence::FK_ReferenceBindingToInitList, clang::InitializationSequence::FK_ReferenceInitDropsQualifiers, clang::Sema::getCompletedType(), clang::InitListExpr::getInit(), clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::InitListExpr::getNumInits(), clang::ASTContext::getQualifiedType(), clang::Expr::getType(), clang::InitializedEntity::getType(), clang::ASTContext::getUnqualifiedArrayType(), clang::Type::getUnqualifiedDesugaredType(), clang::Qualifiers::hasAddressSpace(), clang::Qualifiers::hasConst(), clang::Qualifiers::hasVolatile(), clang::Initializer, clang::InitializedEntity::InitializeTemporary(), clang::Qualifiers::isAddressSpaceSupersetOf(), clang::Type::isRValueReferenceType(), clang::Sema::Ref_Related, ResolveOverloadedFunctionForReferenceBinding(), clang::InitializationSequence::RewrapReferenceInitList(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::step_begin(), clang::InitializationSequence::step_end(), TryListInitialization(), TryReferenceInitializationCore(), clang::VK_LValue, clang::VK_PRValue, clang::VK_XValue, and clang::Qualifiers::withoutAddressSpace().

Referenced by TryListInitialization().

◆ TryRefInitWithConversionFunction()

static OverloadingResult TryRefInitWithConversionFunction ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr Initializer,
bool  AllowRValues,
bool  IsLValueRef,
InitializationSequence Sequence 
)
static

Try a reference initialization that involves calling a conversion function.

Definition at line 4779 of file SemaInit.cpp.

References clang::Sema::AddConversionCandidate(), clang::InitializationSequence::AddConversionSequenceStep(), clang::InitializationSequence::AddDerivedToBaseCastStep(), clang::InitializationSequence::AddFunctionReferenceConversionStep(), clang::InitializationSequence::AddObjCObjectConversionStep(), clang::Sema::AddOverloadCandidate(), clang::InitializationSequence::AddQualificationConversionStep(), clang::InitializationSequence::AddReferenceBindingStep(), clang::Sema::AddTemplateConversionCandidate(), clang::Sema::AddTemplateOverloadCandidate(), clang::InitializationSequence::AddUserConversionStep(), clang::OverloadCandidateSet::BestViableFunction(), clang::Type::castAs(), clang::OverloadCandidateSet::clear(), clang::Sema::CompareReferenceRelationship(), clang::Sema::Context, clang::OverloadCandidateSet::CSK_InitByUserDefinedConversion, clang::Function, clang::Type::getAs(), clang::getConstructorInfo(), clang::CXXConversionDecl::getConversionType(), clang::RecordType::getDecl(), clang::Decl::getDeclContext(), clang::InitializationSequence::getFailedCandidateSet(), clang::QualType::getNonLValueExprType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::StandardConversionSequence::getToType(), clang::InitializedEntity::getType(), clang::QualType::getUnqualifiedType(), clang::CXXRecordDecl::getVisibleConversionFunctions(), clang::ASTContext::hasSameType(), clang::Initializer, clang::Sema::isCompleteType(), clang::Decl::isInvalidDecl(), clang::Type::isLValueReferenceType(), clang::Sema::LookupConstructors(), clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::Ref_Incompatible, clang::Result, clang::ImplicitConversionSequence::setStandard(), clang::OverloadCandidateSet::size(), clang::ImplicitConversionSequence::Standard, clang::VK_LValue, clang::VK_PRValue, and clang::VK_XValue.

Referenced by TryReferenceInitializationCore().

◆ TryStringLiteralInitialization()

static void TryStringLiteralInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
Expr Initializer,
InitializationSequence Sequence 
)
static

Attempt character array initialization from a string literal (C++ [dcl.init.string], C99 6.7.8).

Definition at line 5326 of file SemaInit.cpp.

References clang::InitializationSequence::AddStringInitStep(), and clang::InitializedEntity::getType().

Referenced by clang::InitializationSequence::InitializeFrom().

◆ TryUserDefinedConversion()

static void TryUserDefinedConversion ( Sema S,
QualType  DestType,
const InitializationKind Kind,
Expr Initializer,
InitializationSequence Sequence,
bool  TopLevelOfInitList 
)
static

Attempt a user-defined conversion between two types (C++ [dcl.init]), which enumerates all conversion functions and performs overload resolution to select the best.

Definition at line 5703 of file SemaInit.cpp.

References clang::Sema::AddConversionCandidate(), clang::InitializationSequence::AddConversionSequenceStep(), clang::InitializationSequence::AddFinalCopy(), clang::Sema::AddOverloadCandidate(), clang::InitializationSequence::AddQualificationConversionStep(), clang::Sema::AddTemplateConversionCandidate(), clang::Sema::AddTemplateOverloadCandidate(), clang::InitializationSequence::AddUserConversionStep(), clang::OverloadCandidateSet::BestViableFunction(), clang::OverloadCandidateSet::clear(), clang::Sema::Context, clang::OverloadCandidateSet::CSK_InitByUserDefinedConversion, clang::InitializationSequence::FK_UserConversionOverloadFailed, clang::Function, clang::Qualifiers::getAddressSpace(), clang::Type::getAs(), clang::getConstructorInfo(), clang::Decl::getDeclContext(), clang::InitializationSequence::getFailedCandidateSet(), clang::Sema::getLangOpts(), clang::QualType::getQualifiers(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::QualType::getUnqualifiedType(), clang::CXXRecordDecl::getVisibleConversionFunctions(), clang::QualType::hasQualifiers(), clang::ASTContext::hasSameType(), clang::ASTContext::hasSameUnqualifiedType(), clang::InitializationKind::IK_Copy, clang::Initializer, clang::Sema::isCompleteType(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Sema::LookupConstructors(), clang::OR_Deleted, clang::Result, clang::OverloadCandidateSet::setDestAS(), clang::InitializationSequence::SetOverloadFailure(), clang::ImplicitConversionSequence::setStandard(), clang::OverloadCandidateSet::size(), clang::ImplicitConversionSequence::Standard, and clang::VK_PRValue.

Referenced by clang::InitializationSequence::InitializeFrom(), TryImplicitConversion(), and TryListConversion().

◆ TryValueInitialization()

static void TryValueInitialization ( Sema S,
const InitializedEntity Entity,
const InitializationKind Kind,
InitializationSequence Sequence,
InitListExpr InitList = nullptr 
)
static

◆ updateGNUCompoundLiteralRValue()

static void updateGNUCompoundLiteralRValue ( Expr E)
static

Fix a compound literal initializing an array so it's correctly marked as an rvalue.

Definition at line 185 of file SemaInit.cpp.

References clang::IgnoreParensSingleStep(), clang::Expr::setValueKind(), and clang::VK_PRValue.

Referenced by clang::InitializationSequence::Perform().

◆ updateStringLiteralType()

static void updateStringLiteralType ( Expr E,
QualType  Ty 
)
static

Update the type of a string literal, including any surrounding parentheses, to match the type of the object which it is initializing.

Definition at line 173 of file SemaInit.cpp.

References clang::IgnoreParensSingleStep(), clang::Expr::setType(), clang::Expr::setValueKind(), and clang::VK_PRValue.

Referenced by CheckStringInit().

◆ visitLifetimeBoundArguments()

static void visitLifetimeBoundArguments ( IndirectLocalPath &  Path,
Expr Call,
LocalVisitor  Visit 
)
static

◆ visitLocalsRetainedByInitializer()

static void visitLocalsRetainedByInitializer ( IndirectLocalPath &  Path,
Expr Init,
LocalVisitor  Visit,
bool  RevisitSubinits,
bool  EnableLifetimeWarnings 
)
static

◆ visitLocalsRetainedByReferenceBinding()

static void visitLocalsRetainedByReferenceBinding ( IndirectLocalPath &  Path,
Expr Init,
ReferenceKind  RK,
LocalVisitor  Visit,
bool  EnableLifetimeWarnings 
)
static

◆ warnBracedScalarInit()

static void warnBracedScalarInit ( Sema S,
const InitializedEntity Entity,
SourceRange  Braces 
)
static