diff options
author | Rahul Joshi <rjoshi@nvidia.com> | 2025-05-19 08:20:30 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-19 08:20:30 -0700 |
commit | 37ece04e096b76eef5f3cf7241ea3ff0d212a8ed (patch) | |
tree | f0ab3bd7d879e8480e8f44848aa57f1b2f97c9a4 /clang/lib | |
parent | f85d03c21518fa87239fa4e2d23267d0d5af9cf6 (diff) | |
download | llvm-37ece04e096b76eef5f3cf7241ea3ff0d212a8ed.zip llvm-37ece04e096b76eef5f3cf7241ea3ff0d212a8ed.tar.gz llvm-37ece04e096b76eef5f3cf7241ea3ff0d212a8ed.tar.bz2 |
[NFC][Clang] Adopt simplified `getTrailingObjects` in Expr.cpp/h (#140102)
Adopt non-templated and array-ref returning forms of
`getTrailingObjects` in Expr.cpp/.h.
Use ArrayRef forms to eliminate manual asserting for OOB index. Use
llvm::copy() instead of std::copy() in some instances.
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Expr.cpp | 70 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReaderStmt.cpp | 4 |
2 files changed, 34 insertions, 40 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index ba75197..fe874cc 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -4449,11 +4449,10 @@ GenericSelectionExpr::GenericSelectionExpr( GenericSelectionExprBits.GenericLoc = GenericLoc; getTrailingObjects<Stmt *>()[getIndexOfControllingExpression()] = ControllingExpr; - std::copy(AssocExprs.begin(), AssocExprs.end(), - getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); - std::copy(AssocTypes.begin(), AssocTypes.end(), - getTrailingObjects<TypeSourceInfo *>() + - getIndexOfStartOfAssociatedTypes()); + llvm::copy(AssocExprs, + getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); + llvm::copy(AssocTypes, getTrailingObjects<TypeSourceInfo *>() + + getIndexOfStartOfAssociatedTypes()); setDependence(computeDependence(this, ContainsUnexpandedParameterPack)); } @@ -4477,11 +4476,10 @@ GenericSelectionExpr::GenericSelectionExpr( GenericSelectionExprBits.GenericLoc = GenericLoc; getTrailingObjects<TypeSourceInfo *>()[getIndexOfControllingType()] = ControllingType; - std::copy(AssocExprs.begin(), AssocExprs.end(), - getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); - std::copy(AssocTypes.begin(), AssocTypes.end(), - getTrailingObjects<TypeSourceInfo *>() + - getIndexOfStartOfAssociatedTypes()); + llvm::copy(AssocExprs, + getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); + llvm::copy(AssocTypes, getTrailingObjects<TypeSourceInfo *>() + + getIndexOfStartOfAssociatedTypes()); setDependence(computeDependence(this, ContainsUnexpandedParameterPack)); } @@ -4502,11 +4500,10 @@ GenericSelectionExpr::GenericSelectionExpr( GenericSelectionExprBits.GenericLoc = GenericLoc; getTrailingObjects<Stmt *>()[getIndexOfControllingExpression()] = ControllingExpr; - std::copy(AssocExprs.begin(), AssocExprs.end(), - getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); - std::copy(AssocTypes.begin(), AssocTypes.end(), - getTrailingObjects<TypeSourceInfo *>() + - getIndexOfStartOfAssociatedTypes()); + llvm::copy(AssocExprs, + getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); + llvm::copy(AssocTypes, getTrailingObjects<TypeSourceInfo *>() + + getIndexOfStartOfAssociatedTypes()); setDependence(computeDependence(this, ContainsUnexpandedParameterPack)); } @@ -4527,11 +4524,10 @@ GenericSelectionExpr::GenericSelectionExpr( GenericSelectionExprBits.GenericLoc = GenericLoc; getTrailingObjects<TypeSourceInfo *>()[getIndexOfControllingType()] = ControllingType; - std::copy(AssocExprs.begin(), AssocExprs.end(), - getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); - std::copy(AssocTypes.begin(), AssocTypes.end(), - getTrailingObjects<TypeSourceInfo *>() + - getIndexOfStartOfAssociatedTypes()); + llvm::copy(AssocExprs, + getTrailingObjects<Stmt *>() + getIndexOfStartOfAssociatedExprs()); + llvm::copy(AssocTypes, getTrailingObjects<TypeSourceInfo *>() + + getIndexOfStartOfAssociatedTypes()); setDependence(computeDependence(this, ContainsUnexpandedParameterPack)); } @@ -4780,9 +4776,7 @@ ParenListExpr::ParenListExpr(SourceLocation LParenLoc, ArrayRef<Expr *> Exprs, : Expr(ParenListExprClass, QualType(), VK_PRValue, OK_Ordinary), LParenLoc(LParenLoc), RParenLoc(RParenLoc) { ParenListExprBits.NumExprs = Exprs.size(); - - for (unsigned I = 0, N = Exprs.size(); I != N; ++I) - getTrailingObjects<Stmt *>()[I] = Exprs[I]; + llvm::copy(Exprs, getTrailingObjects()); setDependence(computeDependence(this)); } @@ -5043,17 +5037,19 @@ PseudoObjectExpr::PseudoObjectExpr(QualType type, ExprValueKind VK, : Expr(PseudoObjectExprClass, type, VK, OK_Ordinary) { PseudoObjectExprBits.NumSubExprs = semantics.size() + 1; PseudoObjectExprBits.ResultIndex = resultIndex + 1; - - for (unsigned i = 0, e = semantics.size() + 1; i != e; ++i) { - Expr *E = (i == 0 ? syntax : semantics[i-1]); - getSubExprsBuffer()[i] = E; - - if (isa<OpaqueValueExpr>(E)) - assert(cast<OpaqueValueExpr>(E)->getSourceExpr() != nullptr && - "opaque-value semantic expressions for pseudo-object " - "operations must have sources"); - } - + MutableArrayRef<Expr *> Trail = getTrailingObjects(semantics.size() + 1); + Trail[0] = syntax; + + assert(llvm::all_of(semantics, + [](const Expr *E) { + return !isa<OpaqueValueExpr>(E) || + cast<OpaqueValueExpr>(E)->getSourceExpr() != + nullptr; + }) && + "opaque-value semantic expressions for pseudo-object " + "operations must have sources"); + + llvm::copy(semantics, Trail.drop_front().begin()); setDependence(computeDependence(this)); } @@ -5240,7 +5236,7 @@ RecoveryExpr::RecoveryExpr(ASTContext &Ctx, QualType T, SourceLocation BeginLoc, assert(!T.isNull()); assert(!llvm::is_contained(SubExprs, nullptr)); - llvm::copy(SubExprs, getTrailingObjects<Expr *>()); + llvm::copy(SubExprs, getTrailingObjects()); setDependence(computeDependence(this)); } @@ -5307,9 +5303,7 @@ OMPArrayShapingExpr *OMPArrayShapingExpr::CreateEmpty(const ASTContext &Context, } void OMPIteratorExpr::setIteratorDeclaration(unsigned I, Decl *D) { - assert(I < NumIterators && - "Idx is greater or equal the number of iterators definitions."); - getTrailingObjects<Decl *>()[I] = D; + getTrailingObjects<Decl *>(NumIterators)[I] = D; } void OMPIteratorExpr::setAssignmentLoc(unsigned I, SourceLocation Loc) { diff --git a/clang/lib/Serialization/ASTReaderStmt.cpp b/clang/lib/Serialization/ASTReaderStmt.cpp index bf352c3..0ba0378 100644 --- a/clang/lib/Serialization/ASTReaderStmt.cpp +++ b/clang/lib/Serialization/ASTReaderStmt.cpp @@ -1433,12 +1433,12 @@ void ASTStmtReader::VisitPseudoObjectExpr(PseudoObjectExpr *E) { E->PseudoObjectExprBits.ResultIndex = Record.readInt(); // Read the syntactic expression. - E->getSubExprsBuffer()[0] = Record.readSubExpr(); + E->getTrailingObjects()[0] = Record.readSubExpr(); // Read all the semantic expressions. for (unsigned i = 0; i != numSemanticExprs; ++i) { Expr *subExpr = Record.readSubExpr(); - E->getSubExprsBuffer()[i+1] = subExpr; + E->getTrailingObjects()[i + 1] = subExpr; } } |