[clang] [clang][Interp] Cleaning up `FIXME`s added during `ArrayInitLoopExpr` implementation. (PR #70053)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 24 07:55:45 PDT 2023
================
@@ -816,22 +816,18 @@ bool ByteCodeExprGen<Emitter>::VisitArrayInitLoopExpr(
const ArrayInitLoopExpr *E) {
assert(Initializing);
assert(!DiscardResult);
+
+ // We visit the common opaque expression here once so we have its value
+ // cached.
+ if (!this->discard(E->getCommonExpr()))
+ return false;
+
// TODO: This compiles to quite a lot of bytecode if the array is larger.
// Investigate compiling this to a loop.
-
const Expr *SubExpr = E->getSubExpr();
- const Expr *CommonExpr = E->getCommonExpr();
size_t Size = E->getArraySize().getZExtValue();
std::optional<PrimType> ElemT = classify(SubExpr->getType());
- // If the common expression is an opaque expression, we visit it
- // here once so we have its value cached.
- // FIXME: This might be necessary (or useful) for all expressions.
- if (isa<OpaqueValueExpr>(CommonExpr)) {
----------------
isuckatcs wrote:
The common expression is always an `OpaqueValueExpr`. This is ensured by the function return type and is also mentioned in the [documentation](https://clang.llvm.org/doxygen/classclang_1_1ArrayInitLoopExpr.html).
https://github.com/llvm/llvm-project/pull/70053
More information about the cfe-commits
mailing list