[flang-commits] [flang] [llvm] [flang] Implement 'F_C_STRING' library function (Fortran 2023) (PR #174474)
Peter Klausler via flang-commits
flang-commits at lists.llvm.org
Fri Jan 30 07:33:14 PST 2026
================
@@ -843,6 +843,30 @@ void RTDEF(Repeat)(Descriptor &result, const Descriptor &string,
}
}
+// F_C_STRING - Appends null terminator to create C-compatible string
+// If asis is false, trailing blanks are trimmed first
+void RTDEF(FCString)(Descriptor &result, const Descriptor &string,
+ const Descriptor *asis, const char *sourceFile, int sourceLine) {
+ Terminator terminator{sourceFile, sourceLine};
+ RUNTIME_CHECK(terminator, string.raw().type == CFI_type_char);
+
+ std::size_t chars{string.ElementBytes()};
+ if (!asis || !IsLogicalElementTrue(*asis, nullptr)) {
+ chars = LenTrim(string.OffsetElement<const char>(), chars);
+ }
+ std::size_t resultBytes{chars + 1};
+
+ result.Establish(string.type(), resultBytes, nullptr, 0, nullptr,
+ CFI_attribute_allocatable);
+ RUNTIME_CHECK(terminator, result.Allocate(kNoAsyncObject) == CFI_SUCCESS);
+
+ if (chars > 0) {
+ std::memcpy(result.OffsetElement(), string.OffsetElement(), chars);
+ }
+
+ result.OffsetElement<char>()[chars] = '\0';
----------------
klausler wrote:
That's a weird way to use `OffsetElement`. Why not use its offset argument?
https://github.com/llvm/llvm-project/pull/174474
More information about the flang-commits
mailing list