[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:41:26 PDT 2025


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

The RENAME intrinsic did not correctly remove trailing spaces from filenames.  This PR introduces code to remove trailing blanks as documented by GFortran.

>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] [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



More information about the llvm-commits mailing list