Skip to content

[NFC][Clang] Adopt simplified getTrailingObjects in ExprCXX #143125

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 22 additions & 32 deletions clang/include/clang/AST/ExprCXX.h
Original file line number Diff line number Diff line change
Expand Up @@ -1290,7 +1290,7 @@ class CXXDefaultArgExpr final
CXXDefaultArgExprBits.Loc = Loc;
CXXDefaultArgExprBits.HasRewrittenInit = RewrittenExpr != nullptr;
if (RewrittenExpr)
*getTrailingObjects<Expr *>() = RewrittenExpr;
*getTrailingObjects() = RewrittenExpr;
setDependence(computeDependence(this));
}

Expand Down Expand Up @@ -1323,7 +1323,7 @@ class CXXDefaultArgExpr final
}

Expr *getRewrittenExpr() {
return hasRewrittenInit() ? *getTrailingObjects<Expr *>() : nullptr;
return hasRewrittenInit() ? *getTrailingObjects() : nullptr;
}

const Expr *getRewrittenExpr() const {
Expand Down Expand Up @@ -1421,14 +1421,14 @@ class CXXDefaultInitExpr final
/// any.
const Expr *getRewrittenExpr() const {
assert(hasRewrittenInit() && "expected a rewritten init expression");
return *getTrailingObjects<Expr *>();
return *getTrailingObjects();
}

/// Retrieve the initializing expression with evaluated immediate calls, if
/// any.
Expr *getRewrittenExpr() {
assert(hasRewrittenInit() && "expected a rewritten init expression");
return *getTrailingObjects<Expr *>();
return *getTrailingObjects();
}

const DeclContext *getUsedContext() const { return UsedContext; }
Expand Down Expand Up @@ -1982,8 +1982,8 @@ class LambdaExpr final : public Expr,
/// Construct an empty lambda expression.
LambdaExpr(EmptyShell Empty, unsigned NumCaptures);

Stmt **getStoredStmts() { return getTrailingObjects<Stmt *>(); }
Stmt *const *getStoredStmts() const { return getTrailingObjects<Stmt *>(); }
Stmt **getStoredStmts() { return getTrailingObjects(); }
Stmt *const *getStoredStmts() const { return getTrailingObjects(); }

void initBodyIfNeeded() const;

Expand Down Expand Up @@ -3621,7 +3621,7 @@ class ExprWithCleanups final
ArrayRef<CleanupObject> objects);

ArrayRef<CleanupObject> getObjects() const {
return getTrailingObjects<CleanupObject>(getNumObjects());
return getTrailingObjects(getNumObjects());
}

unsigned getNumObjects() const { return ExprWithCleanupsBits.NumObjects; }
Expand Down Expand Up @@ -3742,14 +3742,14 @@ class CXXUnresolvedConstructExpr final
using arg_iterator = Expr **;
using arg_range = llvm::iterator_range<arg_iterator>;

arg_iterator arg_begin() { return getTrailingObjects<Expr *>(); }
arg_iterator arg_begin() { return getTrailingObjects(); }
arg_iterator arg_end() { return arg_begin() + getNumArgs(); }
arg_range arguments() { return arg_range(arg_begin(), arg_end()); }

using const_arg_iterator = const Expr* const *;
using const_arg_range = llvm::iterator_range<const_arg_iterator>;

const_arg_iterator arg_begin() const { return getTrailingObjects<Expr *>(); }
const_arg_iterator arg_begin() const { return getTrailingObjects(); }
const_arg_iterator arg_end() const { return arg_begin() + getNumArgs(); }
const_arg_range arguments() const {
return const_arg_range(arg_begin(), arg_end());
Expand Down Expand Up @@ -3860,10 +3860,6 @@ class CXXDependentScopeMemberExpr final
return getNumTemplateArgs();
}

unsigned numTrailingObjects(OverloadToken<NamedDecl *>) const {
return hasFirstQualifierFoundInScope();
}

CXXDependentScopeMemberExpr(const ASTContext &Ctx, Expr *Base,
QualType BaseType, bool IsArrow,
SourceLocation OperatorLoc,
Expand Down Expand Up @@ -4419,7 +4415,7 @@ class SizeOfPackExpr final
Length(Length ? *Length : PartialArgs.size()), Pack(Pack) {
assert((!Length || PartialArgs.empty()) &&
"have partial args for non-dependent sizeof... expression");
auto *Args = getTrailingObjects<TemplateArgument>();
auto *Args = getTrailingObjects();
llvm::uninitialized_copy(PartialArgs, Args);
setDependence(Length ? ExprDependence::None
: ExprDependence::ValueInstantiation);
Expand Down Expand Up @@ -4472,8 +4468,7 @@ class SizeOfPackExpr final
/// Get
ArrayRef<TemplateArgument> getPartialArguments() const {
assert(isPartiallySubstituted());
const auto *Args = getTrailingObjects<TemplateArgument>();
return llvm::ArrayRef(Args, Args + Length);
return getTrailingObjects(Length);
}

SourceLocation getBeginLoc() const LLVM_READONLY { return OperatorLoc; }
Expand Down Expand Up @@ -4517,8 +4512,7 @@ class PackIndexingExpr final
SubExprs{PackIdExpr, IndexExpr} {
PackIndexingExprBits.TransformedExpressions = SubstitutedExprs.size();
PackIndexingExprBits.FullySubstituted = FullySubstituted;
auto *Exprs = getTrailingObjects<Expr *>();
llvm::uninitialized_copy(SubstitutedExprs, Exprs);
llvm::uninitialized_copy(SubstitutedExprs, getTrailingObjects());

setDependence(computeDependence(this));
if (!isInstantiationDependent())
Expand Down Expand Up @@ -4583,13 +4577,12 @@ class PackIndexingExpr final
Expr *getSelectedExpr() const {
UnsignedOrNone Index = getSelectedIndex();
assert(Index && "extracting the indexed expression of a dependant pack");
return getTrailingObjects<Expr *>()[*Index];
return getTrailingObjects()[*Index];
}

/// Return the trailing expressions, regardless of the expansion.
ArrayRef<Expr *> getExpressions() const {
return {getTrailingObjects<Expr *>(),
PackIndexingExprBits.TransformedExpressions};
return getTrailingObjects(PackIndexingExprBits.TransformedExpressions);
}

static bool classof(const Stmt *T) {
Expand Down Expand Up @@ -4817,7 +4810,7 @@ class FunctionParmPackExpr final
/// Iterators over the parameters which the parameter pack expanded
/// into.
using iterator = ValueDecl *const *;
iterator begin() const { return getTrailingObjects<ValueDecl *>(); }
iterator begin() const { return getTrailingObjects(); }
iterator end() const { return begin() + NumParameters; }

/// Get the number of parameters in this parameter pack.
Expand Down Expand Up @@ -5099,7 +5092,7 @@ class CXXParenListInitExpr final
: Expr(CXXParenListInitExprClass, T, getValueKindForType(T), OK_Ordinary),
NumExprs(Args.size()), NumUserSpecifiedExprs(NumUserSpecifiedExprs),
InitLoc(InitLoc), LParenLoc(LParenLoc), RParenLoc(RParenLoc) {
std::copy(Args.begin(), Args.end(), getTrailingObjects<Expr *>());
llvm::copy(Args, getTrailingObjects());
assert(NumExprs >= NumUserSpecifiedExprs &&
"number of user specified inits is greater than the number of "
"passed inits");
Expand All @@ -5124,19 +5117,17 @@ class CXXParenListInitExpr final
void updateDependence() { setDependence(computeDependence(this)); }

MutableArrayRef<Expr *> getInitExprs() {
return getTrailingObjects<Expr *>(NumExprs);
return getTrailingObjects(NumExprs);
}

ArrayRef<Expr *> getInitExprs() const {
return getTrailingObjects<Expr *>(NumExprs);
}
ArrayRef<Expr *> getInitExprs() const { return getTrailingObjects(NumExprs); }

ArrayRef<Expr *> getUserSpecifiedInitExprs() {
return getTrailingObjects<Expr *>(NumUserSpecifiedExprs);
return getTrailingObjects(NumUserSpecifiedExprs);
}

ArrayRef<Expr *> getUserSpecifiedInitExprs() const {
return getTrailingObjects<Expr *>(NumUserSpecifiedExprs);
return getTrailingObjects(NumUserSpecifiedExprs);
}

SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
Expand Down Expand Up @@ -5172,13 +5163,12 @@ class CXXParenListInitExpr final
}

child_range children() {
Stmt **Begin = reinterpret_cast<Stmt **>(getTrailingObjects<Expr *>());
Stmt **Begin = reinterpret_cast<Stmt **>(getTrailingObjects());
return child_range(Begin, Begin + NumExprs);
}

const_child_range children() const {
Stmt *const *Begin =
reinterpret_cast<Stmt *const *>(getTrailingObjects<Expr *>());
Stmt *const *Begin = reinterpret_cast<Stmt *const *>(getTrailingObjects());
return const_child_range(Begin, Begin + NumExprs);
}

Expand Down
10 changes: 4 additions & 6 deletions clang/lib/AST/ExprCXX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1067,7 +1067,7 @@ CXXDefaultInitExpr::CXXDefaultInitExpr(const ASTContext &Ctx,
CXXDefaultInitExprBits.HasRewrittenInit = RewrittenInitExpr != nullptr;

if (CXXDefaultInitExprBits.HasRewrittenInit)
*getTrailingObjects<Expr *>() = RewrittenInitExpr;
*getTrailingObjects() = RewrittenInitExpr;

assert(Field->hasInClassInitializer());

Expand Down Expand Up @@ -1437,8 +1437,7 @@ ExprWithCleanups::ExprWithCleanups(Expr *subexpr,
: FullExpr(ExprWithCleanupsClass, subexpr) {
ExprWithCleanupsBits.CleanupsHaveSideEffects = CleanupsHaveSideEffects;
ExprWithCleanupsBits.NumObjects = objects.size();
for (unsigned i = 0, e = objects.size(); i != e; ++i)
getTrailingObjects<CleanupObject>()[i] = objects[i];
llvm::copy(objects, getTrailingObjects());
}

ExprWithCleanups *ExprWithCleanups::Create(const ASTContext &C, Expr *subexpr,
Expand Down Expand Up @@ -1474,7 +1473,7 @@ CXXUnresolvedConstructExpr::CXXUnresolvedConstructExpr(
TypeAndInitForm(TSI, IsListInit), LParenLoc(LParenLoc),
RParenLoc(RParenLoc) {
CXXUnresolvedConstructExprBits.NumArgs = Args.size();
auto **StoredArgs = getTrailingObjects<Expr *>();
auto **StoredArgs = getTrailingObjects();
for (unsigned I = 0; I != Args.size(); ++I)
StoredArgs[I] = Args[I];
setDependence(computeDependence(this));
Expand Down Expand Up @@ -1800,8 +1799,7 @@ FunctionParmPackExpr::FunctionParmPackExpr(QualType T, ValueDecl *ParamPack,
: Expr(FunctionParmPackExprClass, T, VK_LValue, OK_Ordinary),
ParamPack(ParamPack), NameLoc(NameLoc), NumParameters(NumParams) {
if (Params)
std::uninitialized_copy(Params, Params + NumParams,
getTrailingObjects<ValueDecl *>());
std::uninitialized_copy(Params, Params + NumParams, getTrailingObjects());
setDependence(ExprDependence::TypeValueInstantiation |
ExprDependence::UnexpandedPack);
}
Expand Down
Loading