[llvm] [DirectX] Don't byte-swap returned byte-offset (PR #155860)

Finn Plummer via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 28 08:47:31 PDT 2025


https://github.com/inbelic created https://github.com/llvm/llvm-project/pull/155860

- The returned byte offset from `rewriteOffsetToCurrentByte` should not be byte-swapped as it will be compared and interpreted as a uint32_t in its uses

This commit corrects build failures that hit an assert on big-endian builds

>From 1622a527cf178200b7e8ebe2105ccc60cd19ad7b Mon Sep 17 00:00:00 2001
From: Finn Plummer <mail at inbelic.dev>
Date: Thu, 28 Aug 2025 08:41:51 -0700
Subject: [PATCH] [DirectX] Don't byte-swap returned byte-offset

- The returned byte offset from `rewriteOffsetToCurrentByte` should not
be byte-swapped as it will be compared and interpreted as a uint32_t in
its uses

This commit corrects build failures that hit an assert on big-endian
builds
---
 llvm/lib/MC/DXContainerRootSignature.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/MC/DXContainerRootSignature.cpp b/llvm/lib/MC/DXContainerRootSignature.cpp
index 3513892ffcdcc..4d5322b5b3cbe 100644
--- a/llvm/lib/MC/DXContainerRootSignature.cpp
+++ b/llvm/lib/MC/DXContainerRootSignature.cpp
@@ -22,11 +22,12 @@ static uint32_t writePlaceholder(raw_svector_ostream &Stream) {
 
 static uint32_t rewriteOffsetToCurrentByte(raw_svector_ostream &Stream,
                                            uint32_t Offset) {
+  uint32_t ByteOffset = Stream.tell();
   uint32_t Value =
       support::endian::byte_swap<uint32_t, llvm::endianness::little>(
-          Stream.tell());
+          ByteOffset);
   Stream.pwrite(reinterpret_cast<const char *>(&Value), sizeof(Value), Offset);
-  return Value;
+  return ByteOffset;
 }
 
 size_t RootSignatureDesc::getSize() const {



More information about the llvm-commits mailing list