[clang] [CIR] Upstream ArraySubscriptExpr from function parameter with pointer base (PR #135493)

Amr Hesham via cfe-commits cfe-commits at lists.llvm.org
Mon Apr 14 11:39:39 PDT 2025


================
@@ -570,9 +570,17 @@ CIRGenFunction::emitArraySubscriptExpr(const clang::ArraySubscriptExpr *e) {
   }
 
   // The base must be a pointer; emit it with an estimate of its alignment.
-  cgm.errorNYI(e->getSourceRange(),
-               "emitArraySubscriptExpr: The base must be a pointer");
-  return {};
+  assert(e->getBase()->getType()->isPointerType() &&
+         "The base must be a pointer");
+
+  LValueBaseInfo eltBaseInfo;
+  const Address ptrAddr = emitPointerWithAlignment(e->getBase(), &eltBaseInfo);
+  // Propagate the alignment from the array itself to the result.
+  const Address addxr = emitArraySubscriptPtr(
+      *this, cgm.getLoc(e->getBeginLoc()), cgm.getLoc(e->getEndLoc()), ptrAddr,
+      e->getType(), idx, cgm.getLoc(e->getExprLoc()),
+      /*shouldDecay=*/false);
+  return LValue::makeAddr(addxr, e->getType(), eltBaseInfo);
----------------
AmrDeveloper wrote:

Done, I modified the lambda to just return the idx directly because no need to move the checks for RHS and LHS inside lambda

https://github.com/llvm/llvm-project/pull/135493


More information about the cfe-commits mailing list