diff options
Diffstat (limited to 'lib/Sema/TreeTransform.h')
-rw-r--r-- | lib/Sema/TreeTransform.h | 703 |
1 files changed, 382 insertions, 321 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index de962d775d73..df14768cbe81 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -328,7 +328,7 @@ public: /// other mechanism. /// /// \returns the transformed statement. - StmtResult TransformStmt(Stmt *S); + StmtResult TransformStmt(Stmt *S, bool DiscardedValue = false); /// Transform the given statement. /// @@ -597,7 +597,7 @@ public: QualType TransformFunctionProtoType(TypeLocBuilder &TLB, FunctionProtoTypeLoc TL, CXXRecordDecl *ThisContext, - unsigned ThisTypeQuals, + Qualifiers ThisTypeQuals, Fn TransformExceptionSpec); bool TransformExceptionSpec(SourceLocation Loc, @@ -684,15 +684,13 @@ public: OMPClause *Transform ## Class(Class *S); #include "clang/Basic/OpenMPKinds.def" - /// Build a new qualified type given its unqualified type and type - /// qualifiers. + /// Build a new qualified type given its unqualified type and type location. /// /// By default, this routine adds type qualifiers only to types that can /// have qualifiers, and silently suppresses those qualifiers that are not /// permitted. Subclasses may override this routine to provide different /// behavior. - QualType RebuildQualifiedType(QualType T, SourceLocation Loc, - Qualifiers Quals); + QualType RebuildQualifiedType(QualType T, QualifiedTypeLoc TL); /// Build a new pointer type given its pointee type. /// @@ -1798,14 +1796,16 @@ public: /// By default, performs semantic analysis to build the new OpenMP clause. /// Subclasses may override this routine to provide different behavior. OMPClause * - RebuildOMPMapClause(OpenMPMapClauseKind MapTypeModifier, + RebuildOMPMapClause(ArrayRef<OpenMPMapModifierKind> MapTypeModifiers, + ArrayRef<SourceLocation> MapTypeModifiersLoc, OpenMPMapClauseKind MapType, bool IsMapTypeImplicit, SourceLocation MapLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VarList, SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation EndLoc) { - return getSema().ActOnOpenMPMapClause(MapTypeModifier, MapType, - IsMapTypeImplicit, MapLoc, ColonLoc, - VarList, StartLoc, LParenLoc, EndLoc); + return getSema().ActOnOpenMPMapClause(MapTypeModifiers, MapTypeModifiersLoc, + MapType, IsMapTypeImplicit, MapLoc, + ColonLoc, VarList, StartLoc, + LParenLoc, EndLoc); } /// Build a new OpenMP 'num_teams' clause. @@ -2021,11 +2021,10 @@ public: /// By default, performs semantic analysis to build the new statement. /// Subclasses may override this routine to provide different behavior. StmtResult RebuildCXXForRangeStmt(SourceLocation ForLoc, - SourceLocation CoawaitLoc, - SourceLocation ColonLoc, - Stmt *Range, Stmt *Begin, Stmt *End, - Expr *Cond, Expr *Inc, - Stmt *LoopVar, + SourceLocation CoawaitLoc, Stmt *Init, + SourceLocation ColonLoc, Stmt *Range, + Stmt *Begin, Stmt *End, Expr *Cond, + Expr *Inc, Stmt *LoopVar, SourceLocation RParenLoc) { // If we've just learned that the range is actually an Objective-C // collection, treat this as an Objective-C fast enumeration loop. @@ -2037,17 +2036,24 @@ public: Expr *RangeExpr = RangeVar->getInit(); if (!RangeExpr->isTypeDependent() && - RangeExpr->getType()->isObjCObjectPointerType()) - return getSema().ActOnObjCForCollectionStmt(ForLoc, LoopVar, RangeExpr, - RParenLoc); + RangeExpr->getType()->isObjCObjectPointerType()) { + // FIXME: Support init-statements in Objective-C++20 ranged for + // statement. + if (Init) { + return SemaRef.Diag(Init->getBeginLoc(), + diag::err_objc_for_range_init_stmt) + << Init->getSourceRange(); + } + return getSema().ActOnObjCForCollectionStmt(ForLoc, LoopVar, + RangeExpr, RParenLoc); + } } } } - return getSema().BuildCXXForRangeStmt(ForLoc, CoawaitLoc, ColonLoc, - Range, Begin, End, - Cond, Inc, LoopVar, RParenLoc, - Sema::BFRK_Rebuild); + return getSema().BuildCXXForRangeStmt(ForLoc, CoawaitLoc, Init, ColonLoc, + Range, Begin, End, Cond, Inc, LoopVar, + RParenLoc, Sema::BFRK_Rebuild); } /// Build a new C++0x range-based for statement. @@ -2090,8 +2096,8 @@ public: /// By default, performs semantic analysis to build the new expression. /// Subclasses may override this routine to provide different behavior. ExprResult RebuildPredefinedExpr(SourceLocation Loc, - PredefinedExpr::IdentType IT) { - return getSema().BuildPredefinedExpr(Loc, IT); + PredefinedExpr::IdentKind IK) { + return getSema().BuildPredefinedExpr(Loc, IK); } /// Build a new expression that references a declaration. @@ -3124,15 +3130,15 @@ public: // Build a reference to the __builtin_shufflevector builtin FunctionDecl *Builtin = cast<FunctionDecl>(Lookup.front()); - Expr *Callee = new (SemaRef.Context) DeclRefExpr(Builtin, false, - SemaRef.Context.BuiltinFnTy, - VK_RValue, BuiltinLoc); + Expr *Callee = new (SemaRef.Context) + DeclRefExpr(SemaRef.Context, Builtin, false, + SemaRef.Context.BuiltinFnTy, VK_RValue, BuiltinLoc); QualType CalleePtrTy = SemaRef.Context.getPointerType(Builtin->getType()); Callee = SemaRef.ImpCastExprToType(Callee, CalleePtrTy, CK_BuiltinFnToFnPtr).get(); // Build the CallExpr - ExprResult TheCall = new (SemaRef.Context) CallExpr( + ExprResult TheCall = CallExpr::Create( SemaRef.Context, Callee, SubExprs, Builtin->getCallResultType(), Expr::getValueKindForType(Builtin->getReturnType()), RParenLoc); @@ -3263,8 +3269,8 @@ private: bool DeducibleTSTContext); }; -template<typename Derived> -StmtResult TreeTransform<Derived>::TransformStmt(Stmt *S) { +template <typename Derived> +StmtResult TreeTransform<Derived>::TransformStmt(Stmt *S, bool DiscardedValue) { if (!S) return S; @@ -3288,7 +3294,7 @@ StmtResult TreeTransform<Derived>::TransformStmt(Stmt *S) { if (E.isInvalid()) return StmtError(); - return getSema().ActOnExprStmt(E); + return getSema().ActOnExprStmt(E, DiscardedValue); } } @@ -3338,8 +3344,8 @@ ExprResult TreeTransform<Derived>::TransformInitializer(Expr *Init, if (!Init) return Init; - if (ExprWithCleanups *ExprTemp = dyn_cast<ExprWithCleanups>(Init)) - Init = ExprTemp->getSubExpr(); + if (auto *FE = dyn_cast<FullExpr>(Init)) + Init = FE->getSubExpr(); if (auto *AIL = dyn_cast<ArrayInitLoopExpr>(Init)) Init = AIL->getCommonExpr(); @@ -3386,6 +3392,11 @@ ExprResult TreeTransform<Derived>::TransformInitializer(Expr *Init, if (Construct && Construct->isStdInitListInitialization()) return TransformInitializer(Construct->getArg(0), NotCopyInit); + // Enter a list-init context if this was list initialization. + EnterExpressionEvaluationContext Context( + getSema(), EnterExpressionEvaluationContext::InitList, + Construct->isListInitialization()); + SmallVector<Expr*, 8> NewArgs; bool ArgChanged = false; if (getDerived().TransformExprs(Construct->getArgs(), Construct->getNumArgs(), @@ -3394,8 +3405,8 @@ ExprResult TreeTransform<Derived>::TransformInitializer(Expr *Init, // If this was list initialization, revert to syntactic list form. if (Construct->isListInitialization()) - return getDerived().RebuildInitList(Construct->getLocStart(), NewArgs, - Construct->getLocEnd()); + return getDerived().RebuildInitList(Construct->getBeginLoc(), NewArgs, + Construct->getEndLoc()); // Build a ParenListExpr to represent anything else. SourceRange Parens = Construct->getParenOrBraceRange(); @@ -4217,8 +4228,9 @@ TreeTransform<Derived>::TransformTypeWithDeducedTST(TypeSourceInfo *DI) { return nullptr; if (QTL) { - Result = getDerived().RebuildQualifiedType( - Result, QTL.getBeginLoc(), QTL.getType().getLocalQualifiers()); + Result = getDerived().RebuildQualifiedType(Result, QTL); + if (Result.isNull()) + return nullptr; TLB.TypeWasModifiedSafely(Result); } @@ -4229,13 +4241,14 @@ template<typename Derived> QualType TreeTransform<Derived>::TransformQualifiedType(TypeLocBuilder &TLB, QualifiedTypeLoc T) { - Qualifiers Quals = T.getType().getLocalQualifiers(); - QualType Result = getDerived().TransformType(TLB, T.getUnqualifiedLoc()); if (Result.isNull()) return QualType(); - Result = getDerived().RebuildQualifiedType(Result, T.getBeginLoc(), Quals); + Result = getDerived().RebuildQualifiedType(Result, T); + + if (Result.isNull()) + return QualType(); // RebuildQualifiedType might have updated the type, but not in a way // that invalidates the TypeLoc. (There's no location information for @@ -4245,21 +4258,41 @@ TreeTransform<Derived>::TransformQualifiedType(TypeLocBuilder &TLB, return Result; } -template<typename Derived> +template <typename Derived> QualType TreeTransform<Derived>::RebuildQualifiedType(QualType T, - SourceLocation Loc, - Qualifiers Quals) { + QualifiedTypeLoc TL) { + + SourceLocation Loc = TL.getBeginLoc(); + Qualifiers Quals = TL.getType().getLocalQualifiers(); + + if (((T.getAddressSpace() != LangAS::Default && + Quals.getAddressSpace() != LangAS::Default)) && + T.getAddressSpace() != Quals.getAddressSpace()) { + SemaRef.Diag(Loc, diag::err_address_space_mismatch_templ_inst) + << TL.getType() << T; + return QualType(); + } + // C++ [dcl.fct]p7: // [When] adding cv-qualifications on top of the function type [...] the // cv-qualifiers are ignored. + if (T->isFunctionType()) { + T = SemaRef.getASTContext().getAddrSpaceQualType(T, + Quals.getAddressSpace()); + return T; + } + // C++ [dcl.ref]p1: // when the cv-qualifiers are introduced through the use of a typedef-name // or decltype-specifier [...] the cv-qualifiers are ignored. // Note that [dcl.ref]p1 lists all cases in which cv-qualifiers can be // applied to a reference type. - // FIXME: This removes all qualifiers, not just cv-qualifiers! - if (T->isFunctionType() || T->isReferenceType()) - return T; + if (T->isReferenceType()) { + // The only qualifier that applies to a reference type is restrict. + if (!Quals.hasRestrict()) + return T; + Quals = Qualifiers::fromCVRMask(Qualifiers::Restrict); + } // Suppress Objective-C lifetime qualifiers if they don't make sense for the // resulting type. @@ -4682,7 +4715,8 @@ TreeTransform<Derived>::TransformVariableArrayType(TypeLocBuilder &TLB, } if (SizeResult.isInvalid()) return QualType(); - SizeResult = SemaRef.ActOnFinishFullExpr(SizeResult.get()); + SizeResult = + SemaRef.ActOnFinishFullExpr(SizeResult.get(), /*DiscardedValue*/ false); if (SizeResult.isInvalid()) return QualType(); @@ -5214,7 +5248,7 @@ TreeTransform<Derived>::TransformFunctionProtoType(TypeLocBuilder &TLB, SmallVector<QualType, 4> ExceptionStorage; TreeTransform *This = this; // Work around gcc.gnu.org/PR56135. return getDerived().TransformFunctionProtoType( - TLB, TL, nullptr, 0, + TLB, TL, nullptr, Qualifiers(), [&](FunctionProtoType::ExceptionSpecInfo &ESI, bool &Changed) { return This->TransformExceptionSpec(TL.getBeginLoc(), ESI, ExceptionStorage, Changed); @@ -5224,7 +5258,7 @@ TreeTransform<Derived>::TransformFunctionProtoType(TypeLocBuilder &TLB, template<typename Derived> template<typename Fn> QualType TreeTransform<Derived>::TransformFunctionProtoType( TypeLocBuilder &TLB, FunctionProtoTypeLoc TL, CXXRecordDecl *ThisContext, - unsigned ThisTypeQuals, Fn TransformExceptionSpec) { + Qualifiers ThisTypeQuals, Fn TransformExceptionSpec) { // Transform the parameters and return type. // @@ -5267,6 +5301,13 @@ QualType TreeTransform<Derived>::TransformFunctionProtoType( if (ResultType.isNull()) return QualType(); + // Return type can not be qualified with an address space. + if (ResultType.getAddressSpace() != LangAS::Default) { + SemaRef.Diag(TL.getReturnLoc().getBeginLoc(), + diag::err_attribute_address_function_type); + return QualType(); + } + if (getDerived().TransformFunctionTypeParams( TL.getBeginLoc(), TL.getParams(), TL.getTypePtr()->param_type_begin(), @@ -6058,6 +6099,12 @@ QualType TreeTransform<Derived>::TransformAttributedType( if (modifiedType.isNull()) return QualType(); + // oldAttr can be null if we started with a QualType rather than a TypeLoc. + const Attr *oldAttr = TL.getAttr(); + const Attr *newAttr = oldAttr ? getDerived().TransformAttr(oldAttr) : nullptr; + if (oldAttr && !newAttr) + return QualType(); + QualType result = TL.getType(); // FIXME: dependent operand expressions? @@ -6074,26 +6121,20 @@ QualType TreeTransform<Derived>::TransformAttributedType( // type sugar, and therefore cannot be diagnosed in any other way. if (auto nullability = oldType->getImmediateNullability()) { if (!modifiedType->canHaveNullability()) { - SemaRef.Diag(TL.getAttrNameLoc(), diag::err_nullability_nonpointer) - << DiagNullabilityKind(*nullability, false) << modifiedType; + SemaRef.Diag(TL.getAttr()->getLocation(), + diag::err_nullability_nonpointer) + << DiagNullabilityKind(*nullability, false) << modifiedType; return QualType(); } } - result = SemaRef.Context.getAttributedType(oldType->getAttrKind(), + result = SemaRef.Context.getAttributedType(TL.getAttrKind(), modifiedType, equivalentType); } AttributedTypeLoc newTL = TLB.push<AttributedTypeLoc>(result); - newTL.setAttrNameLoc(TL.getAttrNameLoc()); - if (TL.hasAttrOperand()) - newTL.setAttrOperandParensRange(TL.getAttrOperandParensRange()); - if (TL.hasAttrExprOperand()) - newTL.setAttrExprOperand(TL.getAttrExprOperand()); - else if (TL.hasAttrEnumOperand()) - newTL.setAttrEnumOperandLoc(TL.getAttrEnumOperandLoc()); - + newTL.setAttr(newAttr); return result; } @@ -6411,16 +6452,10 @@ TreeTransform<Derived>::TransformObjCObjectType(TypeLocBuilder &TLB, if (getDerived().AlwaysRebuild() || AnyChanged) { // Rebuild the type. Result = getDerived().RebuildObjCObjectType( - BaseType, - TL.getLocStart(), - TL.getTypeArgsLAngleLoc(), - NewTypeArgInfos, - TL.getTypeArgsRAngleLoc(), - TL.getProtocolLAngleLoc(), - llvm::makeArrayRef(TL.getTypePtr()->qual_begin(), - TL.getNumProtocols()), - TL.getProtocolLocs(), - TL.getProtocolRAngleLoc()); + BaseType, TL.getBeginLoc(), TL.getTypeArgsLAngleLoc(), NewTypeArgInfos, + TL.getTypeArgsRAngleLoc(), TL.getProtocolLAngleLoc(), + llvm::makeArrayRef(TL.getTypePtr()->qual_begin(), TL.getNumProtocols()), + TL.getProtocolLocs(), TL.getProtocolRAngleLoc()); if (Result.isNull()) return QualType(); @@ -6486,7 +6521,9 @@ TreeTransform<Derived>::TransformCompoundStmt(CompoundStmt *S, bool SubStmtChanged = false; SmallVector<Stmt*, 8> Statements; for (auto *B : S->body()) { - StmtResult Result = getDerived().TransformStmt(B); + StmtResult Result = + getDerived().TransformStmt(B, !IsStmtExpr || B != S->body_back()); + if (Result.isInvalid()) { // Immediately fail if this was a DeclStmt, since it's very // likely that this will cause problems for future statements. @@ -6656,7 +6693,7 @@ TreeTransform<Derived>::TransformIfStmt(IfStmt *S) { if (Then.isInvalid()) return StmtError(); } else { - Then = new (getSema().Context) NullStmt(S->getThen()->getLocStart()); + Then = new (getSema().Context) NullStmt(S->getThen()->getBeginLoc()); } // Transform the "else" branch. @@ -6759,6 +6796,9 @@ TreeTransform<Derived>::TransformDoStmt(DoStmt *S) { template<typename Derived> StmtResult TreeTransform<Derived>::TransformForStmt(ForStmt *S) { + if (getSema().getLangOpts().OpenMP) + getSema().startOpenMPLoop(); + // Transform the initialization statement StmtResult Init = getDerived().TransformStmt(S->getInit()); if (Init.isInvalid()) @@ -6875,7 +6915,7 @@ TreeTransform<Derived>::TransformDeclStmt(DeclStmt *S) { if (!getDerived().AlwaysRebuild() && !DeclChanged) return S; - return getDerived().RebuildDeclStmt(Decls, S->getStartLoc(), S->getEndLoc()); + return getDerived().RebuildDeclStmt(Decls, S->getBeginLoc(), S->getEndLoc()); } template<typename Derived> @@ -7407,6 +7447,11 @@ StmtResult TreeTransform<Derived>::TransformCXXTryStmt(CXXTryStmt *S) { template<typename Derived> StmtResult TreeTransform<Derived>::TransformCXXForRangeStmt(CXXForRangeStmt *S) { + StmtResult Init = + S->getInit() ? getDerived().TransformStmt(S->getInit()) : StmtResult(); + if (Init.isInvalid()) + return StmtError(); + StmtResult Range = getDerived().TransformStmt(S->getRangeStmt()); if (Range.isInvalid()) return StmtError(); @@ -7440,6 +7485,7 @@ TreeTransform<Derived>::TransformCXXForRangeStmt(CXXForRangeStmt *S) { StmtResult NewStmt = S; if (getDerived().AlwaysRebuild() || + Init.get() != S->getInit() || Range.get() != S->getRangeStmt() || Begin.get() != S->getBeginStmt() || End.get() != S->getEndStmt() || @@ -7447,7 +7493,7 @@ TreeTransform<Derived>::TransformCXXForRangeStmt(CXXForRangeStmt *S) { Inc.get() != S->getInc() || LoopVar.get() != S->getLoopVarStmt()) { NewStmt = getDerived().RebuildCXXForRangeStmt(S->getForLoc(), - S->getCoawaitLoc(), + S->getCoawaitLoc(), Init.get(), S->getColonLoc(), Range.get(), Begin.get(), End.get(), Cond.get(), @@ -7465,7 +7511,7 @@ TreeTransform<Derived>::TransformCXXForRangeStmt(CXXForRangeStmt *S) { // it now so we have a new statement to attach the body to. if (Body.get() != S->getBody() && NewStmt.get() == S) { NewStmt = getDerived().RebuildCXXForRangeStmt(S->getForLoc(), - S->getCoawaitLoc(), + S->getCoawaitLoc(), Init.get(), S->getColonLoc(), Range.get(), Begin.get(), End.get(), Cond.get(), @@ -7708,7 +7754,7 @@ StmtResult TreeTransform<Derived>::TransformOMPExecutableDirective( return getDerived().RebuildOMPExecutableDirective( D->getDirectiveKind(), DirName, CancelRegion, TClauses, - AssociatedStmt.get(), D->getLocStart(), D->getLocEnd()); + AssociatedStmt.get(), D->getBeginLoc(), D->getEndLoc()); } template <typename Derived> @@ -7716,7 +7762,7 @@ StmtResult TreeTransform<Derived>::TransformOMPParallelDirective(OMPParallelDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_parallel, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7727,7 +7773,7 @@ StmtResult TreeTransform<Derived>::TransformOMPSimdDirective(OMPSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_simd, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7738,7 +7784,7 @@ StmtResult TreeTransform<Derived>::TransformOMPForDirective(OMPForDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_for, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7749,7 +7795,7 @@ StmtResult TreeTransform<Derived>::TransformOMPForSimdDirective(OMPForSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_for_simd, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7760,7 +7806,7 @@ StmtResult TreeTransform<Derived>::TransformOMPSectionsDirective(OMPSectionsDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_sections, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7771,7 +7817,7 @@ StmtResult TreeTransform<Derived>::TransformOMPSectionDirective(OMPSectionDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_section, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7782,7 +7828,7 @@ StmtResult TreeTransform<Derived>::TransformOMPSingleDirective(OMPSingleDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_single, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7793,7 +7839,7 @@ StmtResult TreeTransform<Derived>::TransformOMPMasterDirective(OMPMasterDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_master, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7803,7 +7849,7 @@ template <typename Derived> StmtResult TreeTransform<Derived>::TransformOMPCriticalDirective(OMPCriticalDirective *D) { getDerived().getSema().StartOpenMPDSABlock( - OMPD_critical, D->getDirectiveName(), nullptr, D->getLocStart()); + OMPD_critical, D->getDirectiveName(), nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7814,7 +7860,7 @@ StmtResult TreeTransform<Derived>::TransformOMPParallelForDirective( OMPParallelForDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_parallel_for, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7825,7 +7871,7 @@ StmtResult TreeTransform<Derived>::TransformOMPParallelForSimdDirective( OMPParallelForSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_parallel_for_simd, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7836,7 +7882,7 @@ StmtResult TreeTransform<Derived>::TransformOMPParallelSectionsDirective( OMPParallelSectionsDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_parallel_sections, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7847,7 +7893,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskDirective(OMPTaskDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_task, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7858,7 +7904,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskyieldDirective( OMPTaskyieldDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_taskyield, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7869,7 +7915,7 @@ StmtResult TreeTransform<Derived>::TransformOMPBarrierDirective(OMPBarrierDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_barrier, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7880,7 +7926,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskwaitDirective(OMPTaskwaitDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_taskwait, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7891,7 +7937,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskgroupDirective( OMPTaskgroupDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_taskgroup, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7902,7 +7948,7 @@ StmtResult TreeTransform<Derived>::TransformOMPFlushDirective(OMPFlushDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_flush, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7913,7 +7959,7 @@ StmtResult TreeTransform<Derived>::TransformOMPOrderedDirective(OMPOrderedDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_ordered, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7924,7 +7970,7 @@ StmtResult TreeTransform<Derived>::TransformOMPAtomicDirective(OMPAtomicDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_atomic, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7935,7 +7981,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetDirective(OMPTargetDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7946,7 +7992,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetDataDirective( OMPTargetDataDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_data, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7957,7 +8003,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetEnterDataDirective( OMPTargetEnterDataDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_enter_data, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7968,7 +8014,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetExitDataDirective( OMPTargetExitDataDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_exit_data, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7979,7 +8025,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetParallelDirective( OMPTargetParallelDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_parallel, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -7990,7 +8036,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetParallelForDirective( OMPTargetParallelForDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_parallel_for, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8001,7 +8047,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetUpdateDirective( OMPTargetUpdateDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_update, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8012,7 +8058,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTeamsDirective(OMPTeamsDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_teams, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8023,7 +8069,7 @@ StmtResult TreeTransform<Derived>::TransformOMPCancellationPointDirective( OMPCancellationPointDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_cancellation_point, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8034,7 +8080,7 @@ StmtResult TreeTransform<Derived>::TransformOMPCancelDirective(OMPCancelDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_cancel, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8045,7 +8091,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskLoopDirective(OMPTaskLoopDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_taskloop, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8056,7 +8102,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTaskLoopSimdDirective( OMPTaskLoopSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_taskloop_simd, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8067,7 +8113,7 @@ StmtResult TreeTransform<Derived>::TransformOMPDistributeDirective( OMPDistributeDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_distribute, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8078,7 +8124,7 @@ StmtResult TreeTransform<Derived>::TransformOMPDistributeParallelForDirective( OMPDistributeParallelForDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( - OMPD_distribute_parallel_for, DirName, nullptr, D->getLocStart()); + OMPD_distribute_parallel_for, DirName, nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8090,7 +8136,7 @@ TreeTransform<Derived>::TransformOMPDistributeParallelForSimdDirective( OMPDistributeParallelForSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( - OMPD_distribute_parallel_for_simd, DirName, nullptr, D->getLocStart()); + OMPD_distribute_parallel_for_simd, DirName, nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8101,7 +8147,7 @@ StmtResult TreeTransform<Derived>::TransformOMPDistributeSimdDirective( OMPDistributeSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_distribute_simd, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8111,9 +8157,8 @@ template <typename Derived> StmtResult TreeTransform<Derived>::TransformOMPTargetParallelForSimdDirective( OMPTargetParallelForSimdDirective *D) { DeclarationNameInfo DirName; - getDerived().getSema().StartOpenMPDSABlock(OMPD_target_parallel_for_simd, - DirName, nullptr, - D->getLocStart()); + getDerived().getSema().StartOpenMPDSABlock( + OMPD_target_parallel_for_simd, DirName, nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8124,7 +8169,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetSimdDirective( OMPTargetSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_simd, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8135,7 +8180,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTeamsDistributeDirective( OMPTeamsDistributeDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_teams_distribute, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8146,7 +8191,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTeamsDistributeSimdDirective( OMPTeamsDistributeSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( - OMPD_teams_distribute_simd, DirName, nullptr, D->getLocStart()); + OMPD_teams_distribute_simd, DirName, nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8157,7 +8202,8 @@ StmtResult TreeTransform<Derived>::TransformOMPTeamsDistributeParallelForSimdDir OMPTeamsDistributeParallelForSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( - OMPD_teams_distribute_parallel_for_simd, DirName, nullptr, D->getLocStart()); + OMPD_teams_distribute_parallel_for_simd, DirName, nullptr, + D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8167,8 +8213,8 @@ template <typename Derived> StmtResult TreeTransform<Derived>::TransformOMPTeamsDistributeParallelForDirective( OMPTeamsDistributeParallelForDirective *D) { DeclarationNameInfo DirName; - getDerived().getSema().StartOpenMPDSABlock(OMPD_teams_distribute_parallel_for, - DirName, nullptr, D->getLocStart()); + getDerived().getSema().StartOpenMPDSABlock( + OMPD_teams_distribute_parallel_for, DirName, nullptr, D->getBeginLoc()); StmtResult Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8179,7 +8225,7 @@ StmtResult TreeTransform<Derived>::TransformOMPTargetTeamsDirective( OMPTargetTeamsDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock(OMPD_target_teams, DirName, - nullptr, D->getLocStart()); + nullptr, D->getBeginLoc()); auto Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8189,8 +8235,8 @@ template <typename Derived> StmtResult TreeTransform<Derived>::TransformOMPTargetTeamsDistributeDirective( OMPTargetTeamsDistributeDirective *D) { DeclarationNameInfo DirName; - getDerived().getSema().StartOpenMPDSABlock(OMPD_target_teams_distribute, - DirName, nullptr, D->getLocStart()); + getDerived().getSema().StartOpenMPDSABlock( + OMPD_target_teams_distribute, DirName, nullptr, D->getBeginLoc()); auto Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8203,7 +8249,7 @@ TreeTransform<Derived>::TransformOMPTargetTeamsDistributeParallelForDirective( DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( OMPD_target_teams_distribute_parallel_for, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); auto Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8216,7 +8262,7 @@ StmtResult TreeTransform<Derived>:: DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( OMPD_target_teams_distribute_parallel_for_simd, DirName, nullptr, - D->getLocStart()); + D->getBeginLoc()); auto Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8228,7 +8274,7 @@ TreeTransform<Derived>::TransformOMPTargetTeamsDistributeSimdDirective( OMPTargetTeamsDistributeSimdDirective *D) { DeclarationNameInfo DirName; getDerived().getSema().StartOpenMPDSABlock( - OMPD_target_teams_distribute_simd, DirName, nullptr, D->getLocStart()); + OMPD_target_teams_distribute_simd, DirName, nullptr, D->getBeginLoc()); auto Res = getDerived().TransformOMPExecutableDirective(D); getDerived().getSema().EndOpenMPDSABlock(Res.get()); return Res; @@ -8244,8 +8290,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPIfClause(OMPIfClause *C) { if (Cond.isInvalid()) return nullptr; return getDerived().RebuildOMPIfClause( - C->getNameModifier(), Cond.get(), C->getLocStart(), C->getLParenLoc(), - C->getNameModifierLoc(), C->getColonLoc(), C->getLocEnd()); + C->getNameModifier(), Cond.get(), C->getBeginLoc(), C->getLParenLoc(), + C->getNameModifierLoc(), C->getColonLoc(), C->getEndLoc()); } template <typename Derived> @@ -8253,8 +8299,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPFinalClause(OMPFinalClause *C) { ExprResult Cond = getDerived().TransformExpr(C->getCondition()); if (Cond.isInvalid()) return nullptr; - return getDerived().RebuildOMPFinalClause(Cond.get(), C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPFinalClause(Cond.get(), C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8264,7 +8310,7 @@ TreeTransform<Derived>::TransformOMPNumThreadsClause(OMPNumThreadsClause *C) { if (NumThreads.isInvalid()) return nullptr; return getDerived().RebuildOMPNumThreadsClause( - NumThreads.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + NumThreads.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8274,7 +8320,7 @@ TreeTransform<Derived>::TransformOMPSafelenClause(OMPSafelenClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPSafelenClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8284,7 +8330,7 @@ TreeTransform<Derived>::TransformOMPSimdlenClause(OMPSimdlenClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPSimdlenClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8294,23 +8340,23 @@ TreeTransform<Derived>::TransformOMPCollapseClause(OMPCollapseClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPCollapseClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> OMPClause * TreeTransform<Derived>::TransformOMPDefaultClause(OMPDefaultClause *C) { return getDerived().RebuildOMPDefaultClause( - C->getDefaultKind(), C->getDefaultKindKwLoc(), C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + C->getDefaultKind(), C->getDefaultKindKwLoc(), C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> OMPClause * TreeTransform<Derived>::TransformOMPProcBindClause(OMPProcBindClause *C) { return getDerived().RebuildOMPProcBindClause( - C->getProcBindKind(), C->getProcBindKindKwLoc(), C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + C->getProcBindKind(), C->getProcBindKindKwLoc(), C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8321,9 +8367,9 @@ TreeTransform<Derived>::TransformOMPScheduleClause(OMPScheduleClause *C) { return nullptr; return getDerived().RebuildOMPScheduleClause( C->getFirstScheduleModifier(), C->getSecondScheduleModifier(), - C->getScheduleKind(), E.get(), C->getLocStart(), C->getLParenLoc(), + C->getScheduleKind(), E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getFirstScheduleModifierLoc(), C->getSecondScheduleModifierLoc(), - C->getScheduleKindLoc(), C->getCommaLoc(), C->getLocEnd()); + C->getScheduleKindLoc(), C->getCommaLoc(), C->getEndLoc()); } template <typename Derived> @@ -8335,7 +8381,7 @@ TreeTransform<Derived>::TransformOMPOrderedClause(OMPOrderedClause *C) { if (E.isInvalid()) return nullptr; } - return getDerived().RebuildOMPOrderedClause(C->getLocStart(), C->getLocEnd(), + return getDerived().RebuildOMPOrderedClause(C->getBeginLoc(), C->getEndLoc(), C->getLParenLoc(), E.get()); } @@ -8414,6 +8460,39 @@ TreeTransform<Derived>::TransformOMPNogroupClause(OMPNogroupClause *C) { } template <typename Derived> +OMPClause *TreeTransform<Derived>::TransformOMPUnifiedAddressClause( + OMPUnifiedAddressClause *C) { + llvm_unreachable("unified_address clause cannot appear in dependent context"); +} + +template <typename Derived> +OMPClause *TreeTransform<Derived>::TransformOMPUnifiedSharedMemoryClause( + OMPUnifiedSharedMemoryClause *C) { + llvm_unreachable( + "unified_shared_memory clause cannot appear in dependent context"); +} + +template <typename Derived> +OMPClause *TreeTransform<Derived>::TransformOMPReverseOffloadClause( + OMPReverseOffloadClause *C) { + llvm_unreachable("reverse_offload clause cannot appear in dependent context"); +} + +template <typename Derived> +OMPClause *TreeTransform<Derived>::TransformOMPDynamicAllocatorsClause( + OMPDynamicAllocatorsClause *C) { + llvm_unreachable( + "dynamic_allocators clause cannot appear in dependent context"); +} + +template <typename Derived> +OMPClause *TreeTransform<Derived>::TransformOMPAtomicDefaultMemOrderClause( + OMPAtomicDefaultMemOrderClause *C) { + llvm_unreachable( + "atomic_default_mem_order clause cannot appear in dependent context"); +} + +template <typename Derived> OMPClause * TreeTransform<Derived>::TransformOMPPrivateClause(OMPPrivateClause *C) { llvm::SmallVector<Expr *, 16> Vars; @@ -8425,7 +8504,7 @@ TreeTransform<Derived>::TransformOMPPrivateClause(OMPPrivateClause *C) { Vars.push_back(EVar.get()); } return getDerived().RebuildOMPPrivateClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8440,7 +8519,7 @@ OMPClause *TreeTransform<Derived>::TransformOMPFirstprivateClause( Vars.push_back(EVar.get()); } return getDerived().RebuildOMPFirstprivateClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8455,7 +8534,7 @@ TreeTransform<Derived>::TransformOMPLastprivateClause(OMPLastprivateClause *C) { Vars.push_back(EVar.get()); } return getDerived().RebuildOMPLastprivateClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8469,8 +8548,8 @@ TreeTransform<Derived>::TransformOMPSharedClause(OMPSharedClause *C) { return nullptr; Vars.push_back(EVar.get()); } - return getDerived().RebuildOMPSharedClause(Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPSharedClause(Vars, C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8516,8 +8595,8 @@ TreeTransform<Derived>::TransformOMPReductionClause(OMPReductionClause *C) { UnresolvedReductions.push_back(nullptr); } return getDerived().RebuildOMPReductionClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getColonLoc(), - C->getLocEnd(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getColonLoc(), + C->getEndLoc(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); } template <typename Derived> @@ -8561,8 +8640,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPTaskReductionClause( UnresolvedReductions.push_back(nullptr); } return getDerived().RebuildOMPTaskReductionClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getColonLoc(), - C->getLocEnd(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getColonLoc(), + C->getEndLoc(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); } template <typename Derived> @@ -8606,8 +8685,8 @@ TreeTransform<Derived>::TransformOMPInReductionClause(OMPInReductionClause *C) { UnresolvedReductions.push_back(nullptr); } return getDerived().RebuildOMPInReductionClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getColonLoc(), - C->getLocEnd(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getColonLoc(), + C->getEndLoc(), ReductionIdScopeSpec, NameInfo, UnresolvedReductions); } template <typename Derived> @@ -8625,8 +8704,8 @@ TreeTransform<Derived>::TransformOMPLinearClause(OMPLinearClause *C) { if (Step.isInvalid()) return nullptr; return getDerived().RebuildOMPLinearClause( - Vars, Step.get(), C->getLocStart(), C->getLParenLoc(), C->getModifier(), - C->getModifierLoc(), C->getColonLoc(), C->getLocEnd()); + Vars, Step.get(), C->getBeginLoc(), C->getLParenLoc(), C->getModifier(), + C->getModifierLoc(), C->getColonLoc(), C->getEndLoc()); } template <typename Derived> @@ -8644,8 +8723,8 @@ TreeTransform<Derived>::TransformOMPAlignedClause(OMPAlignedClause *C) { if (Alignment.isInvalid()) return nullptr; return getDerived().RebuildOMPAlignedClause( - Vars, Alignment.get(), C->getLocStart(), C->getLParenLoc(), - C->getColonLoc(), C->getLocEnd()); + Vars, Alignment.get(), C->getBeginLoc(), C->getLParenLoc(), + C->getColonLoc(), C->getEndLoc()); } template <typename Derived> @@ -8659,8 +8738,8 @@ TreeTransform<Derived>::TransformOMPCopyinClause(OMPCopyinClause *C) { return nullptr; Vars.push_back(EVar.get()); } - return getDerived().RebuildOMPCopyinClause(Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPCopyinClause(Vars, C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8675,7 +8754,7 @@ TreeTransform<Derived>::TransformOMPCopyprivateClause(OMPCopyprivateClause *C) { Vars.push_back(EVar.get()); } return getDerived().RebuildOMPCopyprivateClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8688,8 +8767,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPFlushClause(OMPFlushClause *C) { return nullptr; Vars.push_back(EVar.get()); } - return getDerived().RebuildOMPFlushClause(Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPFlushClause(Vars, C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8705,7 +8784,7 @@ TreeTransform<Derived>::TransformOMPDependClause(OMPDependClause *C) { } return getDerived().RebuildOMPDependClause( C->getDependencyKind(), C->getDependencyLoc(), C->getColonLoc(), Vars, - C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8714,8 +8793,8 @@ TreeTransform<Derived>::TransformOMPDeviceClause(OMPDeviceClause *C) { ExprResult E = getDerived().TransformExpr(C->getDevice()); if (E.isInvalid()) return nullptr; - return getDerived().RebuildOMPDeviceClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPDeviceClause(E.get(), C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8729,9 +8808,9 @@ OMPClause *TreeTransform<Derived>::TransformOMPMapClause(OMPMapClause *C) { Vars.push_back(EVar.get()); } return getDerived().RebuildOMPMapClause( - C->getMapTypeModifier(), C->getMapType(), C->isImplicitMapType(), - C->getMapLoc(), C->getColonLoc(), Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + C->getMapTypeModifiers(), C->getMapTypeModifiersLoc(), C->getMapType(), + C->isImplicitMapType(), C->getMapLoc(), C->getColonLoc(), Vars, + C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8741,7 +8820,7 @@ TreeTransform<Derived>::TransformOMPNumTeamsClause(OMPNumTeamsClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPNumTeamsClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8751,7 +8830,7 @@ TreeTransform<Derived>::TransformOMPThreadLimitClause(OMPThreadLimitClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPThreadLimitClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8761,7 +8840,7 @@ TreeTransform<Derived>::TransformOMPPriorityClause(OMPPriorityClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPPriorityClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8771,7 +8850,7 @@ TreeTransform<Derived>::TransformOMPGrainsizeClause(OMPGrainsizeClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPGrainsizeClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8781,7 +8860,7 @@ TreeTransform<Derived>::TransformOMPNumTasksClause(OMPNumTasksClause *C) { if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPNumTasksClause( - E.get(), C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + E.get(), C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8789,8 +8868,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPHintClause(OMPHintClause *C) { ExprResult E = getDerived().TransformExpr(C->getHint()); if (E.isInvalid()) return nullptr; - return getDerived().RebuildOMPHintClause(E.get(), C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPHintClause(E.get(), C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8800,8 +8879,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPDistScheduleClause( if (E.isInvalid()) return nullptr; return getDerived().RebuildOMPDistScheduleClause( - C->getDistScheduleKind(), E.get(), C->getLocStart(), C->getLParenLoc(), - C->getDistScheduleKindLoc(), C->getCommaLoc(), C->getLocEnd()); + C->getDistScheduleKind(), E.get(), C->getBeginLoc(), C->getLParenLoc(), + C->getDistScheduleKindLoc(), C->getCommaLoc(), C->getEndLoc()); } template <typename Derived> @@ -8820,8 +8899,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPToClause(OMPToClause *C) { return 0; Vars.push_back(EVar.get()); } - return getDerived().RebuildOMPToClause(Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPToClause(Vars, C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8834,8 +8913,8 @@ OMPClause *TreeTransform<Derived>::TransformOMPFromClause(OMPFromClause *C) { return 0; Vars.push_back(EVar.get()); } - return getDerived().RebuildOMPFromClause(Vars, C->getLocStart(), - C->getLParenLoc(), C->getLocEnd()); + return getDerived().RebuildOMPFromClause(Vars, C->getBeginLoc(), + C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8850,7 +8929,7 @@ OMPClause *TreeTransform<Derived>::TransformOMPUseDevicePtrClause( Vars.push_back(EVar.get()); } return getDerived().RebuildOMPUseDevicePtrClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } template <typename Derived> @@ -8865,7 +8944,7 @@ TreeTransform<Derived>::TransformOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) { Vars.push_back(EVar.get()); } return getDerived().RebuildOMPIsDevicePtrClause( - Vars, C->getLocStart(), C->getLParenLoc(), C->getLocEnd()); + Vars, C->getBeginLoc(), C->getLParenLoc(), C->getEndLoc()); } //===----------------------------------------------------------------------===// @@ -8873,12 +8952,18 @@ TreeTransform<Derived>::TransformOMPIsDevicePtrClause(OMPIsDevicePtrClause *C) { //===----------------------------------------------------------------------===// template<typename Derived> ExprResult +TreeTransform<Derived>::TransformConstantExpr(ConstantExpr *E) { + return TransformExpr(E->getSubExpr()); +} + +template<typename Derived> +ExprResult TreeTransform<Derived>::TransformPredefinedExpr(PredefinedExpr *E) { if (!E->isTypeDependent()) return E; return getDerived().RebuildPredefinedExpr(E->getLocation(), - E->getIdentType()); + E->getIdentKind()); } template<typename Derived> @@ -8973,7 +9058,7 @@ template<typename Derived> ExprResult TreeTransform<Derived>::TransformUserDefinedLiteral(UserDefinedLiteral *E) { if (FunctionDecl *FD = E->getDirectCallee()) - SemaRef.MarkFunctionReferenced(E->getLocStart(), FD); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), FD); return SemaRef.MaybeBindToTemporary(E); } @@ -9227,10 +9312,9 @@ TreeTransform<Derived>::TransformArraySubscriptExpr(ArraySubscriptExpr *E) { RHS.get() == E->getRHS()) return E; - return getDerived().RebuildArraySubscriptExpr(LHS.get(), - /*FIXME:*/E->getLHS()->getLocStart(), - RHS.get(), - E->getRBracketLoc()); + return getDerived().RebuildArraySubscriptExpr( + LHS.get(), + /*FIXME:*/ E->getLHS()->getBeginLoc(), RHS.get(), E->getRBracketLoc()); } template <typename Derived> @@ -9259,7 +9343,7 @@ TreeTransform<Derived>::TransformOMPArraySectionExpr(OMPArraySectionExpr *E) { return E; return getDerived().RebuildOMPArraySectionExpr( - Base.get(), E->getBase()->getLocEnd(), LowerBound.get(), E->getColonLoc(), + Base.get(), E->getBase()->getEndLoc(), LowerBound.get(), E->getColonLoc(), Length.get(), E->getRBracketLoc()); } @@ -9512,9 +9596,9 @@ TreeTransform<Derived>::TransformCompoundLiteralExpr(CompoundLiteralExpr *E) { // type-as-written, but that's okay, because it should always be // derivable from the initializer. - return getDerived().RebuildCompoundLiteralExpr(E->getLParenLoc(), NewT, - /*FIXME:*/E->getInitializer()->getLocEnd(), - Init.get()); + return getDerived().RebuildCompoundLiteralExpr( + E->getLParenLoc(), NewT, + /*FIXME:*/ E->getInitializer()->getEndLoc(), Init.get()); } template<typename Derived> @@ -9530,7 +9614,7 @@ TreeTransform<Derived>::TransformExtVectorElementExpr(ExtVectorElementExpr *E) { // FIXME: Bad source location SourceLocation FakeOperatorLoc = - SemaRef.getLocForEndOfToken(E->getBase()->getLocEnd()); + SemaRef.getLocForEndOfToken(E->getBase()->getEndLoc()); return getDerived().RebuildExtVectorElementExpr(Base.get(), FakeOperatorLoc, E->getAccessorLoc(), E->getAccessor()); @@ -9544,6 +9628,9 @@ TreeTransform<Derived>::TransformInitListExpr(InitListExpr *E) { bool InitChanged = false; + EnterExpressionEvaluationContext Context( + getSema(), EnterExpressionEvaluationContext::InitList); + SmallVector<Expr*, 4> Inits; if (getDerived().TransformExprs(E->getInits(), E->getNumInits(), false, Inits, &InitChanged)) @@ -9676,7 +9763,7 @@ template<typename Derived> ExprResult TreeTransform<Derived>::TransformImplicitValueInitExpr( ImplicitValueInitExpr *E) { - TemporaryBase Rebase(*this, E->getLocStart(), DeclarationName()); + TemporaryBase Rebase(*this, E->getBeginLoc(), DeclarationName()); // FIXME: Will we ever have proper type location here? Will we actually // need to transform the type? @@ -9818,7 +9905,7 @@ TreeTransform<Derived>::TransformCXXOperatorCallExpr(CXXOperatorCallExpr *E) { // FIXME: Poor location information SourceLocation FakeLParenLoc = SemaRef.getLocForEndOfToken( - static_cast<Expr *>(Object.get())->getLocEnd()); + static_cast<Expr *>(Object.get())->getEndLoc()); // Transform the call arguments. SmallVector<Expr*, 8> Args; @@ -9826,9 +9913,8 @@ TreeTransform<Derived>::TransformCXXOperatorCallExpr(CXXOperatorCallExpr *E) { Args)) return ExprError(); - return getDerived().RebuildCallExpr(Object.get(), FakeLParenLoc, - Args, - E->getLocEnd()); + return getDerived().RebuildCallExpr(Object.get(), FakeLParenLoc, Args, + E->getEndLoc()); } #define OVERLOADED_OPERATOR(Name,Spelling,Token,Unary,Binary,MemberOnly) \ @@ -10008,10 +10094,8 @@ TreeTransform<Derived>::TransformCXXTypeidExpr(CXXTypeidExpr *E) { TInfo == E->getTypeOperandSourceInfo()) return E; - return getDerived().RebuildCXXTypeidExpr(E->getType(), - E->getLocStart(), - TInfo, - E->getLocEnd()); + return getDerived().RebuildCXXTypeidExpr(E->getType(), E->getBeginLoc(), + TInfo, E->getEndLoc()); } // We don't know whether the subexpression is potentially evaluated until @@ -10030,10 +10114,8 @@ TreeTransform<Derived>::TransformCXXTypeidExpr(CXXTypeidExpr *E) { SubExpr.get() == E->getExprOperand()) return E; - return getDerived().RebuildCXXTypeidExpr(E->getType(), - E->getLocStart(), - SubExpr.get(), - E->getLocEnd()); + return getDerived().RebuildCXXTypeidExpr(E->getType(), E->getBeginLoc(), + SubExpr.get(), E->getEndLoc()); } template<typename Derived> @@ -10049,10 +10131,8 @@ TreeTransform<Derived>::TransformCXXUuidofExpr(CXXUuidofExpr *E) { TInfo == E->getTypeOperandSourceInfo()) return E; - return getDerived().RebuildCXXUuidofExpr(E->getType(), - E->getLocStart(), - TInfo, - E->getLocEnd()); + return getDerived().RebuildCXXUuidofExpr(E->getType(), E->getBeginLoc(), + TInfo, E->getEndLoc()); } EnterExpressionEvaluationContext Unevaluated( @@ -10066,10 +10146,8 @@ TreeTransform<Derived>::TransformCXXUuidofExpr(CXXUuidofExpr *E) { SubExpr.get() == E->getExprOperand()) return E; - return getDerived().RebuildCXXUuidofExpr(E->getType(), - E->getLocStart(), - SubExpr.get(), - E->getLocEnd()); + return getDerived().RebuildCXXUuidofExpr(E->getType(), E->getBeginLoc(), + SubExpr.get(), E->getEndLoc()); } template<typename Derived> @@ -10092,11 +10170,11 @@ TreeTransform<Derived>::TransformCXXThisExpr(CXXThisExpr *E) { if (!getDerived().AlwaysRebuild() && T == E->getType()) { // Make sure that we capture 'this'. - getSema().CheckCXXThisCapture(E->getLocStart()); + getSema().CheckCXXThisCapture(E->getBeginLoc()); return E; } - return getDerived().RebuildCXXThisExpr(E->getLocStart(), T, E->isImplicit()); + return getDerived().RebuildCXXThisExpr(E->getBeginLoc(), T, E->isImplicit()); } template<typename Derived> @@ -10117,9 +10195,8 @@ TreeTransform<Derived>::TransformCXXThrowExpr(CXXThrowExpr *E) { template<typename Derived> ExprResult TreeTransform<Derived>::TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E) { - ParmVarDecl *Param - = cast_or_null<ParmVarDecl>(getDerived().TransformDecl(E->getLocStart(), - E->getParam())); + ParmVarDecl *Param = cast_or_null<ParmVarDecl>( + getDerived().TransformDecl(E->getBeginLoc(), E->getParam())); if (!Param) return ExprError(); @@ -10133,9 +10210,8 @@ TreeTransform<Derived>::TransformCXXDefaultArgExpr(CXXDefaultArgExpr *E) { template<typename Derived> ExprResult TreeTransform<Derived>::TransformCXXDefaultInitExpr(CXXDefaultInitExpr *E) { - FieldDecl *Field - = cast_or_null<FieldDecl>(getDerived().TransformDecl(E->getLocStart(), - E->getField())); + FieldDecl *Field = cast_or_null<FieldDecl>( + getDerived().TransformDecl(E->getBeginLoc(), E->getField())); if (!Field) return ExprError(); @@ -10196,8 +10272,7 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { FunctionDecl *OperatorNew = nullptr; if (E->getOperatorNew()) { OperatorNew = cast_or_null<FunctionDecl>( - getDerived().TransformDecl(E->getLocStart(), - E->getOperatorNew())); + getDerived().TransformDecl(E->getBeginLoc(), E->getOperatorNew())); if (!OperatorNew) return ExprError(); } @@ -10205,8 +10280,7 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { FunctionDecl *OperatorDelete = nullptr; if (E->getOperatorDelete()) { OperatorDelete = cast_or_null<FunctionDecl>( - getDerived().TransformDecl(E->getLocStart(), - E->getOperatorDelete())); + getDerived().TransformDecl(E->getBeginLoc(), E->getOperatorDelete())); if (!OperatorDelete) return ExprError(); } @@ -10221,9 +10295,9 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { // Mark any declarations we need as referenced. // FIXME: instantiation-specific. if (OperatorNew) - SemaRef.MarkFunctionReferenced(E->getLocStart(), OperatorNew); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), OperatorNew); if (OperatorDelete) - SemaRef.MarkFunctionReferenced(E->getLocStart(), OperatorDelete); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), OperatorDelete); if (E->isArray() && !E->getAllocatedType()->isDependentType()) { QualType ElementType @@ -10231,7 +10305,7 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { if (const RecordType *RecordT = ElementType->getAs<RecordType>()) { CXXRecordDecl *Record = cast<CXXRecordDecl>(RecordT->getDecl()); if (CXXDestructorDecl *Destructor = SemaRef.LookupDestructor(Record)) { - SemaRef.MarkFunctionReferenced(E->getLocStart(), Destructor); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), Destructor); } } } @@ -10253,7 +10327,7 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { = dyn_cast<ConstantArrayType>(ArrayT)) { ArraySize = IntegerLiteral::Create(SemaRef.Context, ConsArrayT->getSize(), SemaRef.Context.getSizeType(), - /*FIXME:*/ E->getLocStart()); + /*FIXME:*/ E->getBeginLoc()); AllocType = ConsArrayT->getElementType(); } else if (const DependentSizedArrayType *DepArrayT = dyn_cast<DependentSizedArrayType>(ArrayT)) { @@ -10264,17 +10338,11 @@ TreeTransform<Derived>::TransformCXXNewExpr(CXXNewExpr *E) { } } - return getDerived().RebuildCXXNewExpr(E->getLocStart(), - E->isGlobalNew(), - /*FIXME:*/E->getLocStart(), - PlacementArgs, - /*FIXME:*/E->getLocStart(), - E->getTypeIdParens(), - AllocType, - AllocTypeInfo, - ArraySize.get(), - E->getDirectInitRange(), - NewInit.get()); + return getDerived().RebuildCXXNewExpr( + E->getBeginLoc(), E->isGlobalNew(), + /*FIXME:*/ E->getBeginLoc(), PlacementArgs, + /*FIXME:*/ E->getBeginLoc(), E->getTypeIdParens(), AllocType, + AllocTypeInfo, ArraySize.get(), E->getDirectInitRange(), NewInit.get()); } template<typename Derived> @@ -10288,8 +10356,7 @@ TreeTransform<Derived>::TransformCXXDeleteExpr(CXXDeleteExpr *E) { FunctionDecl *OperatorDelete = nullptr; if (E->getOperatorDelete()) { OperatorDelete = cast_or_null<FunctionDecl>( - getDerived().TransformDecl(E->getLocStart(), - E->getOperatorDelete())); + getDerived().TransformDecl(E->getBeginLoc(), E->getOperatorDelete())); if (!OperatorDelete) return ExprError(); } @@ -10300,14 +10367,14 @@ TreeTransform<Derived>::TransformCXXDeleteExpr(CXXDeleteExpr *E) { // Mark any declarations we need as referenced. // FIXME: instantiation-specific. if (OperatorDelete) - SemaRef.MarkFunctionReferenced(E->getLocStart(), OperatorDelete); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), OperatorDelete); if (!E->getArgument()->isTypeDependent()) { QualType Destroyed = SemaRef.Context.getBaseElementType( E->getDestroyedType()); if (const RecordType *DestroyedRec = Destroyed->getAs<RecordType>()) { CXXRecordDecl *Record = cast<CXXRecordDecl>(DestroyedRec->getDecl()); - SemaRef.MarkFunctionReferenced(E->getLocStart(), + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), SemaRef.LookupDestructor(Record)); } } @@ -10315,10 +10382,8 @@ TreeTransform<Derived>::TransformCXXDeleteExpr(CXXDeleteExpr *E) { return E; } - return getDerived().RebuildCXXDeleteExpr(E->getLocStart(), - E->isGlobalDelete(), - E->isArrayForm(), - Operand.get()); + return getDerived().RebuildCXXDeleteExpr( + E->getBeginLoc(), E->isGlobalDelete(), E->isArrayForm(), Operand.get()); } template<typename Derived> @@ -10651,10 +10716,8 @@ TreeTransform<Derived>::TransformTypeTraitExpr(TypeTraitExpr *E) { if (!getDerived().AlwaysRebuild() && !ArgChanged) return E; - return getDerived().RebuildTypeTrait(E->getTrait(), - E->getLocStart(), - Args, - E->getLocEnd()); + return getDerived().RebuildTypeTrait(E->getTrait(), E->getBeginLoc(), Args, + E->getEndLoc()); } template<typename Derived> @@ -10680,11 +10743,8 @@ TreeTransform<Derived>::TransformArrayTypeTraitExpr(ArrayTypeTraitExpr *E) { return E; } - return getDerived().RebuildArrayTypeTrait(E->getTrait(), - E->getLocStart(), - T, - SubExpr.get(), - E->getLocEnd()); + return getDerived().RebuildArrayTypeTrait(E->getTrait(), E->getBeginLoc(), T, + SubExpr.get(), E->getEndLoc()); } template<typename Derived> @@ -10702,8 +10762,8 @@ TreeTransform<Derived>::TransformExpressionTraitExpr(ExpressionTraitExpr *E) { return E; } - return getDerived().RebuildExpressionTrait( - E->getTrait(), E->getLocStart(), SubExpr.get(), E->getLocEnd()); + return getDerived().RebuildExpressionTrait(E->getTrait(), E->getBeginLoc(), + SubExpr.get(), E->getEndLoc()); } template <typename Derived> @@ -10789,24 +10849,27 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { !E->isListInitialization()) return getDerived().TransformExpr(E->getArg(0)); - TemporaryBase Rebase(*this, /*FIXME*/E->getLocStart(), DeclarationName()); + TemporaryBase Rebase(*this, /*FIXME*/ E->getBeginLoc(), DeclarationName()); QualType T = getDerived().TransformType(E->getType()); if (T.isNull()) return ExprError(); - CXXConstructorDecl *Constructor - = cast_or_null<CXXConstructorDecl>( - getDerived().TransformDecl(E->getLocStart(), - E->getConstructor())); + CXXConstructorDecl *Constructor = cast_or_null<CXXConstructorDecl>( + getDerived().TransformDecl(E->getBeginLoc(), E->getConstructor())); if (!Constructor) return ExprError(); bool ArgumentChanged = false; SmallVector<Expr*, 8> Args; - if (getDerived().TransformExprs(E->getArgs(), E->getNumArgs(), true, Args, - &ArgumentChanged)) - return ExprError(); + { + EnterExpressionEvaluationContext Context( + getSema(), EnterExpressionEvaluationContext::InitList, + E->isListInitialization()); + if (getDerived().TransformExprs(E->getArgs(), E->getNumArgs(), true, Args, + &ArgumentChanged)) + return ExprError(); + } if (!getDerived().AlwaysRebuild() && T == E->getType() && @@ -10814,19 +10877,15 @@ TreeTransform<Derived>::TransformCXXConstructExpr(CXXConstructExpr *E) { !ArgumentChanged) { // Mark the constructor as referenced. // FIXME: Instantiation-specific - SemaRef.MarkFunctionReferenced(E->getLocStart(), Constructor); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), Constructor); return E; } - return getDerived().RebuildCXXConstructExpr(T, /*FIXME:*/E->getLocStart(), - Constructor, - E->isElidable(), Args, - E->hadMultipleCandidates(), - E->isListInitialization(), - E->isStdInitListInitialization(), - E->requiresZeroInitialization(), - E->getConstructionKind(), - E->getParenOrBraceRange()); + return getDerived().RebuildCXXConstructExpr( + T, /*FIXME:*/ E->getBeginLoc(), Constructor, E->isElidable(), Args, + E->hadMultipleCandidates(), E->isListInitialization(), + E->isStdInitListInitialization(), E->requiresZeroInitialization(), + E->getConstructionKind(), E->getParenOrBraceRange()); } template<typename Derived> @@ -10837,7 +10896,7 @@ ExprResult TreeTransform<Derived>::TransformCXXInheritedCtorInitExpr( return ExprError(); CXXConstructorDecl *Constructor = cast_or_null<CXXConstructorDecl>( - getDerived().TransformDecl(E->getLocStart(), E->getConstructor())); + getDerived().TransformDecl(E->getBeginLoc(), E->getConstructor())); if (!Constructor) return ExprError(); @@ -10846,7 +10905,7 @@ ExprResult TreeTransform<Derived>::TransformCXXInheritedCtorInitExpr( Constructor == E->getConstructor()) { // Mark the constructor as referenced. // FIXME: Instantiation-specific - SemaRef.MarkFunctionReferenced(E->getLocStart(), Constructor); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), Constructor); return E; } @@ -10885,26 +10944,29 @@ TreeTransform<Derived>::TransformCXXTemporaryObjectExpr( if (!T) return ExprError(); - CXXConstructorDecl *Constructor - = cast_or_null<CXXConstructorDecl>( - getDerived().TransformDecl(E->getLocStart(), - E->getConstructor())); + CXXConstructorDecl *Constructor = cast_or_null<CXXConstructorDecl>( + getDerived().TransformDecl(E->getBeginLoc(), E->getConstructor())); if (!Constructor) return ExprError(); bool ArgumentChanged = false; SmallVector<Expr*, 8> Args; Args.reserve(E->getNumArgs()); - if (TransformExprs(E->getArgs(), E->getNumArgs(), true, Args, - &ArgumentChanged)) - return ExprError(); + { + EnterExpressionEvaluationContext Context( + getSema(), EnterExpressionEvaluationContext::InitList, + E->isListInitialization()); + if (TransformExprs(E->getArgs(), E->getNumArgs(), true, Args, + &ArgumentChanged)) + return ExprError(); + } if (!getDerived().AlwaysRebuild() && T == E->getTypeSourceInfo() && Constructor == E->getConstructor() && !ArgumentChanged) { // FIXME: Instantiation-specific - SemaRef.MarkFunctionReferenced(E->getLocStart(), Constructor); + SemaRef.MarkFunctionReferenced(E->getBeginLoc(), Constructor); return SemaRef.MaybeBindToTemporary(E); } @@ -10912,7 +10974,7 @@ TreeTransform<Derived>::TransformCXXTemporaryObjectExpr( // prepared to handle list-initialization without a child InitListExpr. SourceLocation LParenLoc = T->getTypeLoc().getEndLoc(); return getDerived().RebuildCXXTemporaryObjectExpr( - T, LParenLoc, Args, E->getLocEnd(), + T, LParenLoc, Args, E->getEndLoc(), /*ListInitialization=*/LParenLoc.isInvalid()); } @@ -10970,7 +11032,7 @@ TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) { SmallVector<QualType, 4> ExceptionStorage; TreeTransform *This = this; // Work around gcc.gnu.org/PR56135. QualType NewCallOpType = TransformFunctionProtoType( - NewCallOpTLBuilder, OldCallOpFPTL, nullptr, 0, + NewCallOpTLBuilder, OldCallOpFPTL, nullptr, Qualifiers(), [&](FunctionProtoType::ExceptionSpecInfo &ESI, bool &Changed) { return This->TransformExceptionSpec(OldCallOpFPTL.getBeginLoc(), ESI, ExceptionStorage, Changed); @@ -10996,7 +11058,7 @@ TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) { // Build the call operator. CXXMethodDecl *NewCallOperator = getSema().startLambdaDefinition( Class, E->getIntroducerRange(), NewCallOpTSI, - E->getCallOperator()->getLocEnd(), + E->getCallOperator()->getEndLoc(), NewCallOpTSI->getTypeLoc().castAs<FunctionProtoTypeLoc>().getParams(), E->getCallOperator()->isConstexpr()); @@ -11160,7 +11222,7 @@ TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) { if (Body.isInvalid()) { SavedContext.pop(); - getSema().ActOnLambdaError(E->getLocStart(), /*CurScope=*/nullptr, + getSema().ActOnLambdaError(E->getBeginLoc(), /*CurScope=*/nullptr, /*IsInstantiation=*/true); return ExprError(); } @@ -11173,7 +11235,7 @@ TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) { /*IsInstantiation*/ true); SavedContext.pop(); - return getSema().BuildLambdaExpr(E->getLocStart(), Body.get()->getLocEnd(), + return getSema().BuildLambdaExpr(E->getBeginLoc(), Body.get()->getEndLoc(), &LSICopy); } @@ -11189,9 +11251,14 @@ TreeTransform<Derived>::TransformCXXUnresolvedConstructExpr( bool ArgumentChanged = false; SmallVector<Expr*, 8> Args; Args.reserve(E->arg_size()); - if (getDerived().TransformExprs(E->arg_begin(), E->arg_size(), true, Args, - &ArgumentChanged)) - return ExprError(); + { + EnterExpressionEvaluationContext Context( + getSema(), EnterExpressionEvaluationContext::InitList, + E->isListInitialization()); + if (getDerived().TransformExprs(E->arg_begin(), E->arg_size(), true, Args, + &ArgumentChanged)) + return ExprError(); + } if (!getDerived().AlwaysRebuild() && T == E->getTypeSourceInfo() && @@ -11620,8 +11687,8 @@ TreeTransform<Derived>::TransformCXXFoldExpr(CXXFoldExpr *E) { return E; return getDerived().RebuildCXXFoldExpr( - E->getLocStart(), LHS.get(), E->getOperator(), E->getEllipsisLoc(), - RHS.get(), E->getLocEnd()); + E->getBeginLoc(), LHS.get(), E->getOperator(), E->getEllipsisLoc(), + RHS.get(), E->getEndLoc()); } // The transform has determined that we should perform an elementwise @@ -11641,8 +11708,8 @@ TreeTransform<Derived>::TransformCXXFoldExpr(CXXFoldExpr *E) { return true; Result = getDerived().RebuildCXXFoldExpr( - E->getLocStart(), Out.get(), E->getOperator(), E->getEllipsisLoc(), - Result.get(), E->getLocEnd()); + E->getBeginLoc(), Out.get(), E->getOperator(), E->getEllipsisLoc(), + Result.get(), E->getEndLoc()); if (Result.isInvalid()) return true; } @@ -11657,11 +11724,9 @@ TreeTransform<Derived>::TransformCXXFoldExpr(CXXFoldExpr *E) { if (Out.get()->containsUnexpandedParameterPack()) { // We still have a pack; retain a pack expansion for this slice. Result = getDerived().RebuildCXXFoldExpr( - E->getLocStart(), - LeftFold ? Result.get() : Out.get(), + E->getBeginLoc(), LeftFold ? Result.get() : Out.get(), E->getOperator(), E->getEllipsisLoc(), - LeftFold ? Out.get() : Result.get(), - E->getLocEnd()); + LeftFold ? Out.get() : Result.get(), E->getEndLoc()); } else if (Result.isUsable()) { // We've got down to a single element; build a binary operator. Result = getDerived().RebuildBinaryOperator( @@ -11685,9 +11750,8 @@ TreeTransform<Derived>::TransformCXXFoldExpr(CXXFoldExpr *E) { return true; Result = getDerived().RebuildCXXFoldExpr( - E->getLocStart(), Result.get(), - E->getOperator(), E->getEllipsisLoc(), - Out.get(), E->getLocEnd()); + E->getBeginLoc(), Result.get(), E->getOperator(), E->getEllipsisLoc(), + Out.get(), E->getEndLoc()); if (Result.isInvalid()) return true; } @@ -11775,13 +11839,11 @@ TreeTransform<Derived>::TransformObjCDictionaryLiteral( bool RetainExpansion = false; Optional<unsigned> OrigNumExpansions = OrigElement.NumExpansions; Optional<unsigned> NumExpansions = OrigNumExpansions; - SourceRange PatternRange(OrigElement.Key->getLocStart(), - OrigElement.Value->getLocEnd()); - if (getDerived().TryExpandParameterPacks(OrigElement.EllipsisLoc, - PatternRange, - Unexpanded, - Expand, RetainExpansion, - NumExpansions)) + SourceRange PatternRange(OrigElement.Key->getBeginLoc(), + OrigElement.Value->getEndLoc()); + if (getDerived().TryExpandParameterPacks(OrigElement.EllipsisLoc, + PatternRange, Unexpanded, Expand, + RetainExpansion, NumExpansions)) return ExprError(); if (!Expand) { @@ -12651,9 +12713,8 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, if (Op == OO_Subscript) { if (!First->getType()->isOverloadableType() && !Second->getType()->isOverloadableType()) - return getSema().CreateBuiltinArraySubscriptExpr(First, - Callee->getLocStart(), - Second, OpLoc); + return getSema().CreateBuiltinArraySubscriptExpr( + First, Callee->getBeginLoc(), Second, OpLoc); } else if (Op == OO_Arrow) { // -> is never a builtin operation. return SemaRef.BuildOverloadedArrowExpr(nullptr, First, OpLoc); @@ -12727,8 +12788,8 @@ TreeTransform<Derived>::RebuildCXXOperatorCallExpr(OverloadedOperatorKind Op, RBrace = SourceLocation::getFromRawEncoding( NameLoc.CXXOperatorName.EndOpNameLoc); } else { - LBrace = Callee->getLocStart(); - RBrace = OpLoc; + LBrace = Callee->getBeginLoc(); + RBrace = OpLoc; } return SemaRef.CreateOverloadedArraySubscriptExpr(LBrace, RBrace, @@ -12799,7 +12860,7 @@ TreeTransform<Derived>::RebuildCXXPseudoDestructorExpr(Expr *Base, template<typename Derived> StmtResult TreeTransform<Derived>::TransformCapturedStmt(CapturedStmt *S) { - SourceLocation Loc = S->getLocStart(); + SourceLocation Loc = S->getBeginLoc(); CapturedDecl *CD = S->getCapturedDecl(); unsigned NumParams = CD->getNumParams(); unsigned ContextParamPos = CD->getContextParamPosition(); |