[llvm] [flang][runtime] Fix recently broken big-endian formatted integer input (PR #135417)

Peter Klausler via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 11 11:22:11 PDT 2025


https://github.com/klausler created https://github.com/llvm/llvm-project/pull/135417

My recent change to speed up formatted integer input has a bug on big-endian targets that has shown up on ppc64 AIX build bots. Fix.

>From 2813b88c575ecf663941cdcbc17785220b44b660 Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Fri, 11 Apr 2025 11:20:01 -0700
Subject: [PATCH] [flang][runtime] Fix recently broken big-endian formatted
 integer input

My recent change to speed up formatted integer input has a bug on
big-endian targets that has shown up on ppc64 AIX build bots.
Fix.
---
 flang-rt/lib/runtime/edit-input.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/flang-rt/lib/runtime/edit-input.cpp b/flang-rt/lib/runtime/edit-input.cpp
index 0a7b09f836c7d..4aa8c70f776cd 100644
--- a/flang-rt/lib/runtime/edit-input.cpp
+++ b/flang-rt/lib/runtime/edit-input.cpp
@@ -293,8 +293,8 @@ RT_API_ATTRS bool EditIntegerInput(IoStatementState &io, const DataEdit &edit,
 #if USING_NATIVE_INT128_T
     auto shft{static_cast<int>(sizeof value - kind)};
     if (!isHostLittleEndian && shft >= 0) {
-      auto l{value << shft};
-      std::memcpy(n, &l, kind);
+      auto shifted{value << (8 * shft)};
+      std::memcpy(n, &shifted, kind);
     } else {
       std::memcpy(n, &value, kind); // a blank field means zero
     }



More information about the llvm-commits mailing list