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

Michael Klemm via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 17 05:41:14 PDT 2025


================
@@ -60,13 +62,34 @@ void RTDEF(Rename)(const Descriptor &path1, const Descriptor &path2,
     const Descriptor *status, const char *sourceFile, int line) {
   Terminator terminator{sourceFile, line};
 #if !defined(RT_DEVICE_COMPILATION)
+  // Get the raw strings (null-terminated)
   char *pathSrc{EnsureNullTerminated(
       path1.OffsetElement(), path1.ElementBytes(), terminator)};
   char *pathDst{EnsureNullTerminated(
       path2.OffsetElement(), path2.ElementBytes(), terminator)};
+  char *srcFilePath = pathSrc;
+  char *dstFilePath = pathDst;
+
+  // Trim trailing blanks (if string have not been null-terminated)
+  if (!IsNullTerminated(path1.OffsetElement(), path1.ElementBytes())) {
+    auto srcTrimPos{TrimTrailingSpaces(pathSrc, path1.ElementBytes())};
+    char *srcPathTrim{
+        static_cast<char *>(alloca((srcTrimPos + 1)))};
+    std::memcpy(srcPathTrim, pathSrc, srcTrimPos);
+    srcPathTrim[srcTrimPos] = '\0';
+    srcFilePath = srcPathTrim;
+  }
+  if (!IsNullTerminated(path2.OffsetElement(), path2.ElementBytes())) {
+    auto dstTrimPos{TrimTrailingSpaces(pathDst, path2.ElementBytes())};
+    char *dstPathTrim{
+        static_cast<char *>(alloca((dstTrimPos + 1)))};
+    std::memcpy(dstPathTrim, pathDst, dstTrimPos);
+    dstPathTrim[dstTrimPos] = '\0';
+    dstFilePath = dstPathTrim;
+  }
----------------
mjklemm wrote:

Thanks for the suggestion!  That is much better than what I had :-) and it seems to work for what I have tested.

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


More information about the llvm-commits mailing list