@@ -1946,7 +1946,7 @@ Sema::ActOnCXXNew(SourceLocation StartLoc, bool UseGlobal,
19461946 Initializer);
19471947}
19481948
1949- static bool isLegalArrayNewInitializer (CXXNewInitializationStyle Style,
1949+ static bool isLegalArrayNewInitializer (CXXNewExpr::InitializationStyle Style,
19501950 Expr *Init) {
19511951 if (!Init)
19521952 return true ;
@@ -1957,7 +1957,7 @@ static bool isLegalArrayNewInitializer(CXXNewInitializationStyle Style,
19571957 else if (CXXConstructExpr *CCE = dyn_cast<CXXConstructExpr>(Init))
19581958 return !CCE->isListInitialization () &&
19591959 CCE->getConstructor ()->isDefaultConstructor ();
1960- else if (Style == CXXNewInitializationStyle::List ) {
1960+ else if (Style == CXXNewExpr::ListInit ) {
19611961 assert (isa<InitListExpr>(Init) &&
19621962 " Shouldn't create list CXXConstructExprs for arrays." );
19631963 return true ;
@@ -2008,49 +2008,44 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
20082008 SourceRange TypeRange = AllocTypeInfo->getTypeLoc ().getSourceRange ();
20092009 SourceLocation StartLoc = Range.getBegin ();
20102010
2011- CXXNewInitializationStyle InitStyle ;
2011+ CXXNewExpr::InitializationStyle initStyle ;
20122012 if (DirectInitRange.isValid ()) {
20132013 assert (Initializer && " Have parens but no initializer." );
2014- InitStyle = CXXNewInitializationStyle::Call ;
2014+ initStyle = CXXNewExpr::CallInit ;
20152015 } else if (Initializer && isa<InitListExpr>(Initializer))
2016- InitStyle = CXXNewInitializationStyle::List ;
2016+ initStyle = CXXNewExpr::ListInit ;
20172017 else {
20182018 assert ((!Initializer || isa<ImplicitValueInitExpr>(Initializer) ||
20192019 isa<CXXConstructExpr>(Initializer)) &&
20202020 " Initializer expression that cannot have been implicitly created." );
2021- InitStyle = CXXNewInitializationStyle::None ;
2021+ initStyle = CXXNewExpr::NoInit ;
20222022 }
20232023
20242024 MultiExprArg Exprs (&Initializer, Initializer ? 1 : 0 );
20252025 if (ParenListExpr *List = dyn_cast_or_null<ParenListExpr>(Initializer)) {
2026- assert (InitStyle == CXXNewInitializationStyle::Call &&
2027- " paren init for non-call init" );
2026+ assert (initStyle == CXXNewExpr::CallInit && " paren init for non-call init" );
20282027 Exprs = MultiExprArg (List->getExprs (), List->getNumExprs ());
20292028 }
20302029
20312030 // C++11 [expr.new]p15:
20322031 // A new-expression that creates an object of type T initializes that
20332032 // object as follows:
2034- InitializationKind Kind = [&] {
2035- switch (InitStyle) {
2036- // - If the new-initializer is omitted, the object is default-
2037- // initialized (8.5); if no initialization is performed,
2038- // the object has indeterminate value
2039- case CXXNewInitializationStyle::None:
2040- case CXXNewInitializationStyle::Implicit:
2041- return InitializationKind::CreateDefault (TypeRange.getBegin ());
2042- // - Otherwise, the new-initializer is interpreted according to the
2043- // initialization rules of 8.5 for direct-initialization.
2044- case CXXNewInitializationStyle::Call:
2045- return InitializationKind::CreateDirect (TypeRange.getBegin (),
2046- DirectInitRange.getBegin (),
2047- DirectInitRange.getEnd ());
2048- case CXXNewInitializationStyle::List:
2049- return InitializationKind::CreateDirectList (TypeRange.getBegin (),
2050- Initializer->getBeginLoc (),
2051- Initializer->getEndLoc ());
2052- }
2053- }();
2033+ InitializationKind Kind
2034+ // - If the new-initializer is omitted, the object is default-
2035+ // initialized (8.5); if no initialization is performed,
2036+ // the object has indeterminate value
2037+ = initStyle == CXXNewExpr::NoInit
2038+ ? InitializationKind::CreateDefault (TypeRange.getBegin ())
2039+ // - Otherwise, the new-initializer is interpreted according to
2040+ // the
2041+ // initialization rules of 8.5 for direct-initialization.
2042+ : initStyle == CXXNewExpr::ListInit
2043+ ? InitializationKind::CreateDirectList (
2044+ TypeRange.getBegin (), Initializer->getBeginLoc (),
2045+ Initializer->getEndLoc ())
2046+ : InitializationKind::CreateDirect (TypeRange.getBegin (),
2047+ DirectInitRange.getBegin (),
2048+ DirectInitRange.getEnd ());
20542049
20552050 // C++11 [dcl.spec.auto]p6. Deduce the type which 'auto' stands in for.
20562051 auto *Deduced = AllocType->getContainedDeducedType ();
@@ -2071,14 +2066,13 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
20712066 return ExprError ();
20722067 } else if (Deduced && !Deduced->isDeduced ()) {
20732068 MultiExprArg Inits = Exprs;
2074- bool Braced = (InitStyle == CXXNewInitializationStyle::List );
2069+ bool Braced = (initStyle == CXXNewExpr::ListInit );
20752070 if (Braced) {
20762071 auto *ILE = cast<InitListExpr>(Exprs[0 ]);
20772072 Inits = MultiExprArg (ILE->getInits (), ILE->getNumInits ());
20782073 }
20792074
2080- if (InitStyle == CXXNewInitializationStyle::None ||
2081- InitStyle == CXXNewInitializationStyle::Implicit || Inits.empty ())
2075+ if (initStyle == CXXNewExpr::NoInit || Inits.empty ())
20822076 return ExprError (Diag (StartLoc, diag::err_auto_new_requires_ctor_arg)
20832077 << AllocType << TypeRange);
20842078 if (Inits.size () > 1 ) {
@@ -2402,7 +2396,7 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
24022396 // Array 'new' can't have any initializers except empty parentheses.
24032397 // Initializer lists are also allowed, in C++11. Rely on the parser for the
24042398 // dialect distinction.
2405- if (ArraySize && !isLegalArrayNewInitializer (InitStyle , Initializer)) {
2399+ if (ArraySize && !isLegalArrayNewInitializer (initStyle , Initializer)) {
24062400 SourceRange InitRange (Exprs.front ()->getBeginLoc (),
24072401 Exprs.back ()->getEndLoc ());
24082402 Diag (StartLoc, diag::err_new_array_init_args) << InitRange;
@@ -2474,7 +2468,7 @@ ExprResult Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
24742468
24752469 return CXXNewExpr::Create (Context, UseGlobal, OperatorNew, OperatorDelete,
24762470 PassAlignment, UsualArrayDeleteWantsSize,
2477- PlacementArgs, TypeIdParens, ArraySize, InitStyle ,
2471+ PlacementArgs, TypeIdParens, ArraySize, initStyle ,
24782472 Initializer, ResultType, AllocTypeInfo, Range,
24792473 DirectInitRange);
24802474}
0 commit comments