clang 22.0.0git
SemaInit.cpp File Reference
#include "CheckExprLifetime.h"
#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/IgnoreExpr.h"
#include "clang/AST/TypeLoc.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Specifiers.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/Preprocessor.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/SemaHLSL.h"
#include "clang/Sema/SemaObjC.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/PointerIntPair.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...

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, const InitializedEntity &Entity, bool CheckC23ConstexprInit=false)
void emitUninitializedExplicitInitFields (Sema &S, const RecordDecl *R)
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 bool canInitializeArrayWithEmbedDataString (ArrayRef< Expr * > ExprList, const InitializedEntity &Entity, ASTContext &Context)
static bool isInitializedStructuredList (const InitListExpr *StructuredList)
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 TryArrayCopy (Sema &S, const InitializationKind &Kind, const InitializedEntity &Entity, Expr *Initializer, QualType DestType, InitializationSequence &Sequence, bool TreatUnavailableAsInvalid)
 Initialize an array from another array.
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 void TryOrBuildParenListInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, ArrayRef< Expr * > Args, InitializationSequence &Sequence, bool VerifyOnly, ExprResult *Result=nullptr)
static void TryConstructorOrParenListInitialization (Sema &S, const InitializedEntity &Entity, const InitializationKind &Kind, MultiExprArg Args, QualType DestType, InitializationSequence &Sequence, bool IsAggrListInit)
 Attempt to initialize an object of a class type either by direct-initialization, or by copy-initialization from an expression of the same or derived class type.
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 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 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 (const Expr *Init, ASTContext &Ctx)
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 const FieldDeclgetConstField (const RecordDecl *RD)
static 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 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 6238 of file SemaInit.cpp.

◆ StringInitFailureKind

Enumerator
SIF_None 
SIF_NarrowStringIntoWideChar 
SIF_WideStringIntoChar 
SIF_IncompatWideStringIntoWideChar 
SIF_UTF8StringIntoPlainChar 
SIF_PlainStringIntoUTF8Char 
SIF_Other 

Definition at line 58 of file SemaInit.cpp.

Function Documentation

◆ canInitializeArrayWithEmbedDataString()

◆ canPerformArrayCopy()

◆ CheckArrayDesignatorExpr()

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 3532 of file SemaInit.cpp.

References clang::Allow, clang::SemaBase::Diag(), clang::Stmt::getBeginLoc(), clang::Stmt::getSourceRange(), toString(), and clang::Sema::VerifyIntegerConstantExpression().

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

◆ CheckC23ConstexprInitConversion()

◆ CheckC23ConstexprInitStringLiteral()

◆ CheckCXX98CompatAccessibleCopy()

◆ checkDestructorReference()

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 2046 of file SemaInit.cpp.

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

Referenced by PerformConstructorInitialization().

◆ CheckForNullPointerDereference()

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

◆ checkIndirectCopyRestoreSource()

void checkIndirectCopyRestoreSource ( Sema & S,
Expr * src )
static

◆ CheckMoveOnConstruction()

◆ CheckStringInit()

◆ CloneDesignatedInitExpr()

◆ CopyObject()

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 7140 of file SemaInit.cpp.

References clang::Sema::BuildCXXConstructExpr(), clang::Sema::BuildCXXDefaultArgExpr(), clang::cast(), clang::Sema::CheckConstructorAccess(), clang::Complete, clang::Sema::CompleteConstructorCall(), clang::Constructor, clang::Sema::Context, clang::OverloadCandidateSet::CSK_Normal, clang::SemaBase::Diag(), clang::ExprError(), clang::ActionResult< PtrTy, Compress >::get(), clang::ActionResult< PtrTy, Compress >::getAs(), getInitializationLoc(), clang::InitializedEntity::getKind(), clang::Stmt::getSourceRange(), clang::Expr::getType(), clang::ValueDecl::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::SemaBase::PDiag(), clang::Sema::RequireCompleteType(), ResolveConstructorOverload(), shouldBindAsTemporary(), clang::OverloadCandidateSet::size(), and clang::T.

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

◆ diagnoseListInit()

◆ DiagnoseNarrowingInInitList()

◆ DiagnoseUninitializedReference()

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

◆ emitBadConversionNotes()

◆ emitUninitializedExplicitInitFields()

void emitUninitializedExplicitInitFields ( Sema & S,
const RecordDecl * R )

◆ ExpandAnonymousFieldDesignator()

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

◆ getAssignmentAction()

◆ getConstField()

◆ getInitializationLoc()

◆ hasAnyDesignatedInits()

bool hasAnyDesignatedInits ( const InitListExpr * IL)
static

Definition at line 1077 of file SemaInit.cpp.

References clang::Init.

◆ hasCompatibleArrayTypes()

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 6326 of file SemaInit.cpp.

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

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

◆ hasCopyOrMoveCtorParam()

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 4325 of file SemaInit.cpp.

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

Referenced by PerformConstructorInitialization(), and ResolveConstructorOverload().

◆ initializingConstexprVariable()

bool initializingConstexprVariable ( const InitializedEntity & Entity)
static

◆ isExplicitTemporary()

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

◆ isExprAnUnaddressableFunction()

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 6460 of file SemaInit.cpp.

References clang::cast(), clang::Sema::checkAddressOfFunctionIsAvailable(), and clang::isa().

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

◆ isIdiomaticBraceElisionEntity()

◆ isInitializedStructuredList()

bool isInitializedStructuredList ( const InitListExpr * StructuredList)
static

Definition at line 2301 of file SemaInit.cpp.

References clang::InitListExpr::getNumInits().

◆ isInvalidICRSource()

◆ isNonReferenceableGLValue()

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 5339 of file SemaInit.cpp.

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

Referenced by TryReferenceInitializationCore().

◆ isOrIsDerivedFromSpecializationOf()

bool isOrIsDerivedFromSpecializationOf ( CXXRecordDecl * RD,
ClassTemplateDecl * CTD )
static

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

Definition at line 9935 of file SemaInit.cpp.

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

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

◆ IsStringInit() [1/2]

◆ IsStringInit() [2/2]

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

Definition at line 159 of file SemaInit.cpp.

References clang::ast_matchers::arrayType, IsStringInit(), and SIF_Other.

◆ IsWideCharCompatible()

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 48 of file SemaInit.cpp.

References clang::T.

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

◆ IsZeroInitializer()

bool IsZeroInitializer ( const Expr * Init,
ASTContext & Ctx )
static

Definition at line 6402 of file SemaInit.cpp.

References clang::Init.

Referenced by TryOCLZeroOpaqueTypeInitialization().

◆ MaybeProduceObjCObject()

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 4223 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()

◆ PerformConstructorInitialization()

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 7389 of file SemaInit.cpp.

References clang::InitializedEntity::allowsNRVO(), clang::Sema::BuildCXXConstructExpr(), clang::cast(), clang::Sema::CheckConstructorAccess(), checkDestructorReference(), clang::Sema::CheckForImmediateInvocation(), clang::Complete, clang::Sema::CompleteConstructorCall(), clang::Constructor, clang::Sema::Context, clang::CXXTemporaryObjectExpr::Create(), clang::Sema::DefineImplicitDefaultConstructor(), clang::Delegating, clang::SemaBase::Diag(), clang::Sema::diagnoseNullableToNonnullConversion(), clang::Sema::DiagnoseUseOfDecl(), clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Delegating, clang::ExprError(), clang::RecordDecl::fields(), 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::Type::getAsCXXRecordDecl(), clang::ASTContext::getBaseElementType(), clang::InitializedEntity::getBaseSpecifier(), clang::QualType::getCanonicalType(), clang::getConstructorInfo(), clang::DeclAccessPair::getDecl(), clang::InitializedEntity::getKind(), clang::Decl::getLocation(), clang::QualType::getNonLValueExprType(), clang::ASTContext::getTrivialTypeSourceInfo(), clang::InitializedEntity::getType(), clang::InitializedEntity::getTypeSourceInfo(), clang::InitializationSequence::Step::F::HadMultipleCandidates, clang::Decl::hasAttr(), hasCopyOrMoveCtorParam(), clang::RecordDecl::hasUninitializedExplicitInitFields(), clang::InitializationKind::IK_Default, clang::InitializationKind::IK_Direct, clang::InitializationKind::IK_DirectList, clang::InitializationKind::IK_Value, isExplicitTemporary(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Sema::isUnevaluatedContext(), 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()

◆ ResolveOverloadedFunctionForReferenceBinding()

◆ shouldBindAsTemporary()

◆ shouldDestroyEntity()

◆ TryArrayCopy()

◆ TryConstructorInitialization()

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 aggregate type as the entity?

Definition at line 4452 of file SemaInit.cpp.

References clang::InitializationSequence::AddConstructorInitializationStep(), clang::InitializationSequence::AddQualificationConversionStep(), clang::InitializationSequence::AddUserConversionStep(), clang::CXXRecordDecl::allowConstDefaultInit(), clang::cast(), clang::Type::castAsCXXRecordDecl(), clang::Sema::Context, clang::SemaBase::Diag(), clang::InitializedEntity::EK_Base, clang::InitializedEntity::EK_Delegating, clang::InitializedEntity::EK_LambdaToBlockConversionBlockElement, emitUninitializedExplicitInitFields(), clang::InitializationSequence::FK_ConstructorOverloadFailed, clang::InitializationSequence::FK_DefaultInitOfConst, clang::InitializationSequence::FK_ExplicitConstructor, clang::InitializationSequence::FK_ListConstructorOverloadFailed, clang::InitializationSequence::getFailedCandidateSet(), clang::InitListExpr::getInits(), clang::InitializedEntity::getKind(), clang::OverloadCandidateSet::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::InitializationKind::IK_Direct, clang::isa(), clang::Type::isAggregateType(), clang::Sema::isCompleteType(), clang::QualType::isConstQualified(), clang::CXXConstructorDecl::isCopyOrMoveConstructor(), clang::CXXConstructorDecl::isExplicit(), clang::Decl::isImplicit(), clang::Sema::isUnevaluatedContext(), clang::Sema::LookupConstructors(), clang::Sema::LookupDefaultConstructor(), maybeRecoverWithZeroInitialization(), clang::OR_Deleted, clang::OR_No_Viable_Function, ResolveConstructorOverload(), clang::InitializationSequence::RewrapReferenceInitList(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::setIncompleteTypeFailure(), clang::InitializationSequence::SetOverloadFailure(), clang::OverloadCandidateSet::size(), and clang::VK_PRValue.

Referenced by TryConstructorOrParenListInitialization(), TryDefaultInitialization(), TryListInitialization(), and TryValueInitialization().

◆ TryConstructorOrParenListInitialization()

void TryConstructorOrParenListInitialization ( Sema & S,
const InitializedEntity & Entity,
const InitializationKind & Kind,
MultiExprArg Args,
QualType DestType,
InitializationSequence & Sequence,
bool IsAggrListInit )
static

Attempt to initialize an object of a class type either by direct-initialization, or by copy-initialization from an expression of the same or derived class type.

This corresponds to the first two sub-bullets of C++2c [dcl.init.general] p16.6.

Parameters
IsAggrListInitIs this non-list-initialization being done as part of a list-initialization of an aggregate from a single expression of the same or derived class type (C++2c [dcl.init.list] p3.2)?

Definition at line 4689 of file SemaInit.cpp.

References clang::InitializationSequence::Failed(), clang::InitializationSequence::FK_ConstructorOverloadFailed, clang::InitializationSequence::getFailedOverloadResult(), clang::InitializationSequence::getFailureKind(), clang::Sema::getLangOpts(), clang::InitializationKind::IK_Direct, clang::Type::isAggregateType(), clang::OR_No_Viable_Function, TryConstructorInitialization(), and TryOrBuildParenListInitialization().

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

◆ TryDefaultInitialization()

◆ TryInitializerListConstruction()

◆ TryListInitialization()

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 4877 of file SemaInit.cpp.

References clang::InitializationSequence::AddConversionSequenceStep(), clang::InitializationSequence::AddListInitializationStep(), clang::InitializationSequence::AddUnwrapInitListInitStep(), clang::Type::castAsCXXRecordDecl(), clang::Type::castAsEnumDecl(), clang::Sema::Context, clang::InitializationKind::CreateDirect(), clang::InitializedEntity::EK_Variable, clang::StandardConversionSequence::First, clang::InitializationSequence::FK_DesignatedInitForNonAggregate, clang::InitializationSequence::FK_InitListBadDestinationType, clang::InitializationSequence::FK_ListInitializationFailed, clang::InitializationSequence::FK_TooManyInitsForScalar, clang::ASTContext::getAsArrayType(), clang::InitListExpr::getBeginLoc(), clang::InitializedEntity::getDecl(), clang::InitListExpr::getInit(), clang::InitializationKind::getKind(), clang::InitializedEntity::getKind(), 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::Sema::HLSL(), clang::ICK_Floating_Integral, clang::ICK_Integral_Conversion, clang::ICK_Lvalue_To_Rvalue, clang::InitializationKind::IK_DirectList, clang::Init, clang::InitializationSequence::InitializeFrom(), clang::isa(), clang::Type::isAggregateType(), clang::Type::isAnyComplexType(), clang::Type::isBooleanType(), clang::Sema::isCompleteType(), clang::Sema::IsDerivedFrom(), clang::Type::isEnumeralType(), clang::EnumDecl::isFixed(), 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, clang::SemaHLSL::transformInitList(), TryArrayCopy(), TryConstructorInitialization(), TryConstructorOrParenListInitialization(), TryInitializerListConstruction(), TryReferenceListInitialization(), and TryValueInitialization().

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

◆ tryObjCWritebackConversion()

◆ TryOCLSamplerInitialization()

◆ TryOCLZeroOpaqueTypeInitialization()

◆ TryOrBuildParenListInitialization()

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

Definition at line 5797 of file SemaInit.cpp.

References clang::InitializationSequence::AddParenthesizedListInitStep(), 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::ASTContext::getAsArrayType(), clang::ASTContext::getAsConstantArrayType(), clang::Type::getAsCXXRecordDecl(), 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::InitializedEntity::getType(), clang::ValueDecl::getType(), clang::Decl::hasAttr(), clang::FieldDecl::hasInClassInitializer(), clang::InitializationSequence::InitializationSequence(), clang::InitializedEntity::InitializeBase(), clang::InitializedEntity::InitializeElement(), clang::InitializedEntity::InitializeMemberFromParenAggInit(), clang::Type::isIncompleteArrayType(), clang::ActionResult< PtrTy, Compress >::isInvalid(), clang::Decl::isInvalidDecl(), clang::QualType::isNull(), clang::Type::isReferenceType(), clang::Sema::isUnevaluatedContext(), clang::TagDecl::isUnion(), clang::FieldDecl::isUnnamedBitField(), clang::InitializedEntity::isVariableLengthArrayNew(), clang::Normal, clang::InitializationSequence::NormalSequence, clang::InitializationSequence::Perform(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::setSequenceKind(), and clang::T.

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

◆ TryReferenceInitialization()

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

◆ TryReferenceInitializationCore()

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 5348 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_NonConstLValueReferenceBindingToTemporary, clang::InitializationSequence::FK_ReferenceAddrspaceMismatchTemporary, clang::InitializationSequence::FK_ReferenceInitDropsQualifiers, clang::InitializationSequence::FK_ReferenceInitFailed, clang::InitializationSequence::FK_ReferenceInitOverloadFailed, clang::InitializationSequence::FK_RValueReferenceBindingToLValue, clang::Qualifiers::getAddressSpace(), clang::Sema::getASTContext(), 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::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()

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 4774 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::getASTContext(), clang::Sema::getCompletedType(), clang::InitListExpr::getInit(), clang::InitializedEntity::getKind(), clang::Sema::getLangOpts(), clang::InitListExpr::getNumInits(), getPointeeType(), 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::isa(), clang::Qualifiers::isAddressSpaceSupersetOf(), clang::Type::isRValueReferenceType(), clang::Sema::Ref_Related, ResolveOverloadedFunctionForReferenceBinding(), clang::InitializationSequence::RewrapReferenceInitList(), clang::InitializationSequence::SetFailed(), clang::InitializationSequence::steps(), TryListInitialization(), TryReferenceInitializationCore(), clang::VK_LValue, clang::VK_PRValue, clang::VK_XValue, and clang::Qualifiers::withoutAddressSpace().

Referenced by TryListInitialization().

◆ TryRefInitWithConversionFunction()

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 5130 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::cast(), clang::Type::castAs(), clang::Type::castAsCXXRecordDecl(), clang::OverloadCandidateSet::clear(), clang::Sema::CompareReferenceRelationship(), clang::Sema::Context, clang::OverloadCandidateSet::CSK_InitByUserDefinedConversion, clang::Type::getAs(), clang::getConstructorInfo(), clang::CXXConversionDecl::getConversionType(), clang::Decl::getDeclContext(), clang::InitializationSequence::getFailedCandidateSet(), clang::QualType::getNonLValueExprType(), getPointeeType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::StandardConversionSequence::getToType(), clang::InitializedEntity::getType(), clang::QualType::getUnqualifiedType(), clang::ASTContext::hasSameType(), clang::Initializer, clang::isa(), clang::Sema::isCompleteType(), clang::Type::isLValueReferenceType(), clang::Type::isRecordType(), clang::Sema::LookupConstructors(), clang::OR_No_Viable_Function, clang::OR_Success, clang::Sema::Ref_Incompatible, clang::Decl::setReferenced(), clang::ImplicitConversionSequence::setStandard(), clang::OverloadCandidateSet::size(), clang::ImplicitConversionSequence::Standard, clang::VK_LValue, clang::VK_PRValue, and clang::VK_XValue.

Referenced by TryReferenceInitializationCore().

◆ TryStringLiteralInitialization()

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 5673 of file SemaInit.cpp.

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

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

◆ TryUserDefinedConversion()

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 6060 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::cast(), clang::Type::castAsCXXRecordDecl(), clang::OverloadCandidateSet::clear(), clang::Sema::Context, clang::OverloadCandidateSet::CSK_InitByUserDefinedConversion, clang::InitializationSequence::FK_UserConversionOverloadFailed, clang::Qualifiers::getAddressSpace(), 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::isa(), clang::Sema::isCompleteType(), clang::Type::isRecordType(), clang::Type::isReferenceType(), clang::Sema::LookupConstructors(), clang::OR_Deleted, clang::OverloadCandidateSet::setDestAS(), clang::InitializationSequence::SetOverloadFailure(), clang::Decl::setReferenced(), clang::ImplicitConversionSequence::setStandard(), clang::OverloadCandidateSet::size(), clang::ImplicitConversionSequence::Standard, and clang::VK_PRValue.

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

◆ TryValueInitialization()

◆ updateGNUCompoundLiteralRValue()

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::isa(), clang::Expr::setValueKind(), and clang::VK_PRValue.

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

◆ updateStringLiteralType()

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::isa(), clang::Expr::setType(), clang::Expr::setValueKind(), and clang::VK_PRValue.

Referenced by CheckStringInit().

◆ warnBracedScalarInit()