https://github.com/osamakader updated https://github.com/llvm/llvm-project/pull/160015
>From 37f712ce9130e949a18ff8ebe5dc0924ea06df81 Mon Sep 17 00:00:00 2001 From: Osama Abdelkader <[email protected]> Date: Mon, 22 Sep 2025 00:59:48 +0300 Subject: [PATCH] [clang][bytecode] Fix unknown size arrays crash in clang bytecode This fixes issue #153948 where clang crashes with assertion failure 'Array of unknown size' when evaluating strlen() on external const char[] declarations. The issue was in evaluateStrlen() which called getNumElems() on unknown size arrays, leading to an assertion in Descriptor::getSize(). Fix: Add check for isUnknownSizeArray() before calling getNumElems() to gracefully handle unknown size arrays by returning false (indicating strlen cannot be evaluated at compile time). Handle dummy blocks (external/unknown declarations) also is added. Tested with the reproducer from the GitHub issue. --- clang/lib/AST/ByteCode/Context.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/clang/lib/AST/ByteCode/Context.cpp b/clang/lib/AST/ByteCode/Context.cpp index cfda6e8ded760..df783f38f7f9a 100644 --- a/clang/lib/AST/ByteCode/Context.cpp +++ b/clang/lib/AST/ByteCode/Context.cpp @@ -245,6 +245,10 @@ bool Context::evaluateStrlen(State &Parent, const Expr *E, uint64_t &Result) { if (!FieldDesc->isPrimitiveArray()) return false; + // Handle dummy blocks (external/unknown declarations) and unknown size arrays - we can't determine the length at compile time + if (Ptr.isDummy() || Ptr.isUnknownSizeArray()) + return false; + unsigned N = Ptr.getNumElems(); if (Ptr.elemSize() == 1) { Result = strnlen(reinterpret_cast<const char *>(Ptr.getRawAddress()), N); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
