[llvm] [Flang][runtime] Fix RENAME intrinsic, remove trailing blanks (PR #159123)

Michael Klemm via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 16 09:58:52 PDT 2025


https://github.com/mjklemm updated https://github.com/llvm/llvm-project/pull/159123

>From 664be1d1b7d632f34a4265bfc747801b63e4c5f2 Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 16 Sep 2025 18:33:16 +0200
Subject: [PATCH 1/2] [Flang][runtime] Fix RENAME intrinsic, remove trailing
 blanks

The RENAME intrinsic did not correctly remove trailing spaces from
filenames.  This PR introduces code to remove trailing blanks as
documented by GFortran.
---
 flang-rt/lib/runtime/misc-intrinsic.cpp | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/flang-rt/lib/runtime/misc-intrinsic.cpp b/flang-rt/lib/runtime/misc-intrinsic.cpp
index 4d1165f25687c..a3aa0953f776e 100644
--- a/flang-rt/lib/runtime/misc-intrinsic.cpp
+++ b/flang-rt/lib/runtime/misc-intrinsic.cpp
@@ -65,8 +65,20 @@ void RTDEF(Rename)(const Descriptor &path1, const Descriptor &path2,
   char *pathDst{EnsureNullTerminated(
       path2.OffsetElement(), path2.ElementBytes(), terminator)};
 
+  // Trim trailing blanks
+  auto srcTrimPos{TrimTrailingSpaces(pathSrc, path1.ElementBytes())};
+  auto dstTrimPos{TrimTrailingSpaces(pathDst, path2.ElementBytes())};
+  char *srcPathTrim{
+      static_cast<char *>(alloca((srcTrimPos + 1) * sizeof(char)))};
+  char *dstPathTrim{
+      static_cast<char *>(alloca((dstTrimPos + 1) * sizeof(char)))};
+  std::strncpy(srcPathTrim, pathSrc, srcTrimPos);
+  std::strncpy(dstPathTrim, pathDst, dstTrimPos);
+  srcPathTrim[srcTrimPos] = '\0';
+  dstPathTrim[dstTrimPos] = '\0';
+
   // We simply call rename(2) from POSIX
-  int result{rename(pathSrc, pathDst)};
+  int result{rename(srcPathTrim, dstPathTrim)};
   if (status) {
     // When an error has happened,
     int errorCode{0}; // Assume success

>From b20d0ab493ceb73f574b9c4f87493c875c499aab Mon Sep 17 00:00:00 2001
From: Michael Klemm <michael.klemm at amd.com>
Date: Tue, 16 Sep 2025 18:58:44 +0200
Subject: [PATCH 2/2] Update flang-rt/lib/runtime/misc-intrinsic.cpp

Co-authored-by: Copilot <175728472+Copilot at users.noreply.github.com>
---
 flang-rt/lib/runtime/misc-intrinsic.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/flang-rt/lib/runtime/misc-intrinsic.cpp b/flang-rt/lib/runtime/misc-intrinsic.cpp
index a3aa0953f776e..b8652b54aa61d 100644
--- a/flang-rt/lib/runtime/misc-intrinsic.cpp
+++ b/flang-rt/lib/runtime/misc-intrinsic.cpp
@@ -72,8 +72,8 @@ void RTDEF(Rename)(const Descriptor &path1, const Descriptor &path2,
       static_cast<char *>(alloca((srcTrimPos + 1) * sizeof(char)))};
   char *dstPathTrim{
       static_cast<char *>(alloca((dstTrimPos + 1) * sizeof(char)))};
-  std::strncpy(srcPathTrim, pathSrc, srcTrimPos);
-  std::strncpy(dstPathTrim, pathDst, dstTrimPos);
+  std::memcpy(srcPathTrim, pathSrc, srcTrimPos);
+  std::memcpy(dstPathTrim, pathDst, dstTrimPos);
   srcPathTrim[srcTrimPos] = '\0';
   dstPathTrim[dstTrimPos] = '\0';
 



More information about the llvm-commits mailing list