[clang] [clang][Interp] Use array filler expression (PR #72865)

Timm Baeder via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 20 05:09:10 PST 2023


https://github.com/tbaederr created https://github.com/llvm/llvm-project/pull/72865

This is obviously not what we should ideally do, but the current state is also broken. We are just leaving the other elements uninitialized and rely on them being zero-ed.

>From c6a945bcd760803909ec085b384ead6376dd7abe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <tbaeder at redhat.com>
Date: Mon, 20 Nov 2023 14:02:54 +0100
Subject: [PATCH] [clang][Interp] Use array filler expression

This is obviously not what we should ideally do, but the current state
is also broken. We are just leaving the other elements uninitialized and
rely on them being zero-ed.
---
 clang/lib/AST/Interp/ByteCodeExprGen.cpp | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
index 5dc1f9dfb10ff32..180749a75ebd22e 100644
--- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp
+++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp
@@ -662,13 +662,26 @@ bool ByteCodeExprGen<Emitter>::VisitInitListExpr(const InitListExpr *E) {
     return this->visitInitList(E->inits(), E);
 
   if (T->isArrayType()) {
-    // FIXME: Array fillers.
     unsigned ElementIndex = 0;
     for (const Expr *Init : E->inits()) {
       if (!this->visitArrayElemInit(ElementIndex, Init))
         return false;
       ++ElementIndex;
     }
+
+    // Expand the filler expression.
+    // FIXME: This should go away.
+    if (const Expr *Filler = E->getArrayFiller()) {
+      const ConstantArrayType *CAT =
+          Ctx.getASTContext().getAsConstantArrayType(E->getType());
+      uint64_t NumElems = CAT->getSize().getZExtValue();
+
+      for (; ElementIndex != NumElems; ++ElementIndex) {
+        if (!this->visitArrayElemInit(ElementIndex, Filler))
+          return false;
+      }
+    }
+
     return true;
   }
 



More information about the cfe-commits mailing list