diff options
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index f6d0b80f5c6..4b756064add 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -2760,7 +2760,6 @@ void InitializationSequence::Step::Destroy() { case SK_QualificationConversionLValue: case SK_LValueToRValue: case SK_ListInitialization: - case SK_ListConstructorCall: case SK_UnwrapInitList: case SK_RewrapInitList: case SK_ConstructorInitialization: @@ -2775,6 +2774,7 @@ void InitializationSequence::Step::Destroy() { case SK_PassByIndirectRestore: case SK_ProduceObjCObject: case SK_StdInitializerList: + case SK_StdInitializerListConstructorCall: case SK_OCLSamplerInit: case SK_OCLZeroEvent: break; @@ -2945,7 +2945,7 @@ InitializationSequence bool HadMultipleCandidates, bool FromInitList, bool AsInitList) { Step S; - S.Kind = FromInitList ? AsInitList ? SK_ListConstructorCall + S.Kind = FromInitList ? AsInitList ? SK_StdInitializerListConstructorCall : SK_ConstructorInitializationFromList : SK_ConstructorInitialization; S.Type = T; @@ -5148,6 +5148,7 @@ static ExprResult CopyObject(Sema &S, ConstructorArgs, HadMultipleCandidates, /*ListInit*/ false, + /*StdInitListInit*/ false, /*ZeroInit*/ false, CXXConstructExpr::CK_Complete, SourceRange()); @@ -5269,6 +5270,7 @@ PerformConstructorInitialization(Sema &S, const InitializationSequence::Step& Step, bool &ConstructorInitRequiresZeroInit, bool IsListInitialization, + bool IsStdInitListInitialization, SourceLocation LBraceLoc, SourceLocation RBraceLoc) { unsigned NumArgs = Args.size(); @@ -5330,7 +5332,7 @@ PerformConstructorInitialization(Sema &S, CurInit = new (S.Context) CXXTemporaryObjectExpr( S.Context, Constructor, TSInfo, ConstructorArgs, ParenOrBraceRange, HadMultipleCandidates, IsListInitialization, - ConstructorInitRequiresZeroInit); + IsStdInitListInitialization, ConstructorInitRequiresZeroInit); } else { CXXConstructExpr::ConstructionKind ConstructKind = CXXConstructExpr::CK_Complete; @@ -5359,6 +5361,7 @@ PerformConstructorInitialization(Sema &S, ConstructorArgs, HadMultipleCandidates, IsListInitialization, + IsStdInitListInitialization, ConstructorInitRequiresZeroInit, ConstructKind, ParenOrBraceRange); @@ -5368,6 +5371,7 @@ PerformConstructorInitialization(Sema &S, ConstructorArgs, HadMultipleCandidates, IsListInitialization, + IsStdInitListInitialization, ConstructorInitRequiresZeroInit, ConstructKind, ParenOrBraceRange); @@ -5784,7 +5788,7 @@ InitializationSequence::Perform(Sema &S, case SK_ConstructorInitialization: case SK_ConstructorInitializationFromList: - case SK_ListConstructorCall: + case SK_StdInitializerListConstructorCall: case SK_ZeroInitialization: break; } @@ -5959,6 +5963,7 @@ InitializationSequence::Perform(Sema &S, ConstructorArgs, HadMultipleCandidates, /*ListInit*/ false, + /*StdInitListInit*/ false, /*ZeroInit*/ false, CXXConstructExpr::CK_Complete, SourceRange()); @@ -6132,6 +6137,7 @@ InitializationSequence::Perform(Sema &S, Kind, Arg, *Step, ConstructorInitRequiresZeroInit, /*IsListInitialization*/true, + /*IsStdInitListInit*/false, InitList->getLBraceLoc(), InitList->getRBraceLoc()); break; @@ -6154,7 +6160,7 @@ InitializationSequence::Perform(Sema &S, } case SK_ConstructorInitialization: - case SK_ListConstructorCall: { + case SK_StdInitializerListConstructorCall: { // When an initializer list is passed for a parameter of type "reference // to object", we don't get an EK_Temporary entity, but instead an // EK_Parameter entity with reference type. @@ -6164,10 +6170,13 @@ InitializationSequence::Perform(Sema &S, InitializedEntity TempEntity = InitializedEntity::InitializeTemporary( Entity.getType().getNonReferenceType()); bool UseTemporary = Entity.getType()->isReferenceType(); + bool IsStdInitListInit = + Step->Kind == SK_StdInitializerListConstructorCall; CurInit = PerformConstructorInitialization( S, UseTemporary ? TempEntity : Entity, Kind, Args, *Step, ConstructorInitRequiresZeroInit, - /*IsListInitialization*/Step->Kind == SK_ListConstructorCall, + /*IsListInitialization*/IsStdInitListInit, + /*IsStdInitListInitialization*/IsStdInitListInit, /*LBraceLoc*/SourceLocation(), /*RBraceLoc*/SourceLocation()); break; @@ -7030,10 +7039,6 @@ void InitializationSequence::dump(raw_ostream &OS) const { OS << "list initialization via constructor"; break; - case SK_ListConstructorCall: - OS << "list initialization via initializer list constructor"; - break; - case SK_ZeroInitialization: OS << "zero initialization"; break; @@ -7074,6 +7079,10 @@ void InitializationSequence::dump(raw_ostream &OS) const { OS << "std::initializer_list from initializer list"; break; + case SK_StdInitializerListConstructorCall: + OS << "list initialization from std::initializer_list"; + break; + case SK_OCLSamplerInit: OS << "OpenCL sampler_t from integer constant"; break; |