================ @@ -5043,16 +5037,18 @@ 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 && + MutableArrayRef<Expr *> Trail = getTrailingObjects(semantics.size() + 1); + Trail[0] = syntax; + llvm::copy(semantics, Trail.drop_front().begin()); + +#ifndef NDEBUG + llvm::for_each(semantics, [](const Expr *E) { ---------------- erichkeane wrote:
wonder if an: `assert(llvm::all_of(semantics, [](const Expr *E) { return !isa<OpaqueValueExpr>(E) || cast<OpaqueValueExpr>(E)->getSourceExpr() != nullptr; }) && "string stuff");` would read better/be less intrusive? WDYT? https://github.com/llvm/llvm-project/pull/140102 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits