[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