From 4533793b137a767011200f33775c6443f4720947 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Nov 2025 12:58:40 +0000 Subject: [PATCH 1/2] Phase 112.1: Fix Clang sign-conversion errors in std::span accessors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: Phase 112 broke Clang builds due to -Wsign-conversion errors when passing int sizes to std::span constructor (expects size_t). Changes: - Added static_cast to all span constructor calls in: - Proto::getCodeSpan() (sizecode) - Proto::getConstantsSpan() (sizek) - Proto::getProtosSpan() (sizep) - Proto::getUpvaluesSpan() (sizeupvalues) - ProtoDebugInfo::getLineInfoSpan() (sizelineinfo) - ProtoDebugInfo::getAbsLineInfoSpan() (sizeabslineinfo) - ProtoDebugInfo::getLocVarsSpan() (sizelocvars) - Fixed ldump.cpp subspan calls: - locvars.subspan(0, n) → locvars.subspan(0, static_cast(n)) - upvalues.subspan(0, n) → upvalues.subspan(0, static_cast(n)) Result: - ✅ GCC build: passes (4.73s avg) - ✅ Clang build: now compiles successfully (4.51s avg) - ✅ All tests passing: final OK !!! Note: Performance variance observed (4.16s-5.56s range), investigating separately. Primary goal achieved: Clang compatibility restored. --- src/objects/lobject.h | 28 ++++++++++++++-------------- src/serialization/ldump.cpp | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/objects/lobject.h b/src/objects/lobject.h index 3222defd..d500bb66 100644 --- a/src/objects/lobject.h +++ b/src/objects/lobject.h @@ -933,24 +933,24 @@ class ProtoDebugInfo { /* Phase 112: std::span accessors for debug info arrays */ inline std::span getLineInfoSpan() noexcept { - return std::span(lineinfo, sizelineinfo); + return std::span(lineinfo, static_cast(sizelineinfo)); } inline std::span getLineInfoSpan() const noexcept { - return std::span(lineinfo, sizelineinfo); + return std::span(lineinfo, static_cast(sizelineinfo)); } inline std::span getAbsLineInfoSpan() noexcept { - return std::span(abslineinfo, sizeabslineinfo); + return std::span(abslineinfo, static_cast(sizeabslineinfo)); } inline std::span getAbsLineInfoSpan() const noexcept { - return std::span(abslineinfo, sizeabslineinfo); + return std::span(abslineinfo, static_cast(sizeabslineinfo)); } inline std::span getLocVarsSpan() noexcept { - return std::span(locvars, sizelocvars); + return std::span(locvars, static_cast(sizelocvars)); } inline std::span getLocVarsSpan() const noexcept { - return std::span(locvars, sizelocvars); + return std::span(locvars, static_cast(sizelocvars)); } }; @@ -1034,31 +1034,31 @@ class Proto : public GCBase { /* Phase 112: std::span accessors for arrays */ inline std::span getCodeSpan() noexcept { - return std::span(code, sizecode); + return std::span(code, static_cast(sizecode)); } inline std::span getCodeSpan() const noexcept { - return std::span(code, sizecode); + return std::span(code, static_cast(sizecode)); } inline std::span getConstantsSpan() noexcept { - return std::span(k, sizek); + return std::span(k, static_cast(sizek)); } inline std::span getConstantsSpan() const noexcept { - return std::span(k, sizek); + return std::span(k, static_cast(sizek)); } inline std::span getProtosSpan() noexcept { - return std::span(p, sizep); + return std::span(p, static_cast(sizep)); } inline std::span getProtosSpan() const noexcept { - return std::span(p, sizep); + return std::span(p, static_cast(sizep)); } inline std::span getUpvaluesSpan() noexcept { - return std::span(upvalues, sizeupvalues); + return std::span(upvalues, static_cast(sizeupvalues)); } inline std::span getUpvaluesSpan() const noexcept { - return std::span(upvalues, sizeupvalues); + return std::span(upvalues, static_cast(sizeupvalues)); } inline Proto** getProtos() const noexcept { return p; } diff --git a/src/serialization/ldump.cpp b/src/serialization/ldump.cpp index af1c47ce..f130326a 100644 --- a/src/serialization/ldump.cpp +++ b/src/serialization/ldump.cpp @@ -244,7 +244,7 @@ static void dumpDebug (DumpState *D, const Proto *f) { auto locvars = f->getDebugInfo().getLocVarsSpan(); n = (D->strip) ? 0 : static_cast(locvars.size()); dumpInt(D, n); - for (const auto& lv : locvars.subspan(0, n)) { + for (const auto& lv : locvars.subspan(0, static_cast(n))) { dumpString(D, lv.getVarName()); dumpInt(D, lv.getStartPC()); dumpInt(D, lv.getEndPC()); @@ -252,7 +252,7 @@ static void dumpDebug (DumpState *D, const Proto *f) { auto upvalues = f->getUpvaluesSpan(); n = (D->strip) ? 0 : static_cast(upvalues.size()); dumpInt(D, n); - for (const auto& uv : upvalues.subspan(0, n)) { + for (const auto& uv : upvalues.subspan(0, static_cast(n))) { dumpString(D, uv.getName()); } } From 240bb269de1494cf384f28e41140e86ac00cdc6f Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 21 Nov 2025 12:59:11 +0000 Subject: [PATCH 2/2] Add build-clang/ to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index fdd5c7be..70a9a059 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ temp # CMake build directories build/ build_clang/ +build-clang/ install_test/ cmake-build-*/ coverage_html/