[llvm] [SystemZ][z/OS] Fix compile errors cused by sys::fs::file_t (PR #225539)
Kai Nacke via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 23 06:52:53 PDT 2026
https://github.com/redstar updated https://github.com/llvm/llvm-project/pull/225539
>From 6765411ead970552a8b2b538e0d3b05e775e2b05 Mon Sep 17 00:00:00 2001
From: Kai Nacke <kai.peter.nacke at ibm.com>
Date: Tue, 22 Sep 2026 18:01:31 -0400
Subject: [PATCH 1/2] [SystemZ][z/OS] Fix compile errors cused by
sys::fs::file_t
Follow-up to #224859: some calls/prototypes are guarded on z/OS,
and also need to be updated. This change fixes various compile
errors.
---
llvm/include/llvm/Support/AutoConvert.h | 36 ++++++++++++++-----------
llvm/lib/Support/AutoConvert.cpp | 20 ++++++++------
llvm/lib/Support/Unix/Path.inc | 5 ++--
3 files changed, 35 insertions(+), 26 deletions(-)
diff --git a/llvm/include/llvm/Support/AutoConvert.h b/llvm/include/llvm/Support/AutoConvert.h
index 3c025cb605f2c4..d391b8af58501e 100644
--- a/llvm/include/llvm/Support/AutoConvert.h
+++ b/llvm/include/llvm/Support/AutoConvert.h
@@ -20,6 +20,7 @@
#ifdef __cplusplus
#include "llvm/ADT/Twine.h"
#include "llvm/Support/Error.h"
+#include "llvm/Support/File.h"
#include <system_error>
#endif /* __cplusplus */
@@ -46,15 +47,17 @@ namespace llvm {
#ifdef __MVS__
/** \brief Set the tag information for a file descriptor. */
-std::error_code setzOSFileTag(int FD, int CCSID, bool IsText);
+std::error_code setzOSFileTag(sys::fs::file_t FD, int CCSID, bool IsText);
/** \brief Get the the tag ccsid for a file name or a file descriptor. */
-ErrorOr<__ccsid_t> getzOSFileTag(const Twine &FileName, const int FD = -1);
+ErrorOr<__ccsid_t> getzOSFileTag(const Twine &FileName,
+ const sys::fs::file_t FD = -1);
/** \brief Query the file tag to determine if it needs conversion to UTF-8
* codepage.
*/
-ErrorOr<bool> needzOSConversion(const Twine &FileName, const int FD = -1);
+ErrorOr<bool> needzOSConversion(const Twine &FileName,
+ const sys::fs::file_t FD = -1);
/** Copy the tag attributes from \a source to \a destination.
*
@@ -64,52 +67,53 @@ ErrorOr<bool> needzOSConversion(const Twine &FileName, const int FD = -1);
* otherwise returns a specific error_code.
*/
std::error_code copyFileTagAttributes(const std::string &Source,
- const int DestinationFD);
+ const sys::fs::file_t DestinationFD);
#endif /* __MVS__*/
-inline std::error_code disableAutoConversion(int FD) {
+inline std::error_code disableAutoConversion(sys::fs::file_t FD) {
#ifdef __MVS__
- if (::disablezOSAutoConversion(FD) == -1)
+ if (::disablezOSAutoConversion(FD.get()) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
-inline std::error_code enableAutoConversion(int FD) {
+inline std::error_code enableAutoConversion(sys::fs::file_t FD) {
#ifdef __MVS__
- if (::enablezOSAutoConversion(FD) == -1)
+ if (::enablezOSAutoConversion(FD.get()) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
-inline std::error_code enableAutoConversion(int FD, int ccsid) {
+inline std::error_code enableAutoConversion(sys::fs::file_t FD, int ccsid) {
#ifdef __MVS__
- if (::enablezOSAutoConversionCcsid(FD, ccsid) == -1)
+ if (::enablezOSAutoConversionCcsid(FD.get(), ccsid) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
-inline std::error_code restoreStdHandleAutoConversion(int FD) {
+inline std::error_code restoreStdHandleAutoConversion(sys::fs::file_t FD) {
#ifdef __MVS__
- if (::restorezOSStdHandleAutoConversion(FD) == -1)
+ if (::restorezOSStdHandleAutoConversion(FD.get()) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
-inline std::error_code setFileTag(int FD, int CCSID, bool IsText) {
+inline std::error_code setFileTag(sys::fs::file_t FD, int CCSID, bool IsText) {
#ifdef __MVS__
- return setzOSFileTag(FD, CCSID, IsText);
+ return setzOSFileTag(FD.get(), CCSID, IsText);
#endif
return std::error_code();
}
-inline ErrorOr<bool> needConversion(const Twine &FileName, const int FD = -1) {
+inline ErrorOr<bool> needConversion(const Twine &FileName,
+ const sys::fs::file_t FD = -1) {
#ifdef __MVS__
- return needzOSConversion(FileName, FD);
+ return needzOSConversion(FileName, FD.get());
#endif
return false;
}
diff --git a/llvm/lib/Support/AutoConvert.cpp b/llvm/lib/Support/AutoConvert.cpp
index 4f534bb7ac187e..11d345de13797c 100644
--- a/llvm/lib/Support/AutoConvert.cpp
+++ b/llvm/lib/Support/AutoConvert.cpp
@@ -94,7 +94,8 @@ int enablezOSAutoConversionCcsid(int FD, int ccsid) {
return fcntl(FD, F_CONTROL_CVT, &cvt);
}
-std::error_code llvm::setzOSFileTag(int FD, int CCSID, bool IsText) {
+std::error_code llvm::setzOSFileTag(sys::fs::file_t FD, int CCSID,
+ bool IsText) {
assert((!IsText || (CCSID != FT_UNTAGGED && CCSID != FT_BINARY)) &&
"FT_UNTAGGED and FT_BINARY are not allowed for text files");
struct file_tag Tag;
@@ -103,7 +104,7 @@ std::error_code llvm::setzOSFileTag(int FD, int CCSID, bool IsText) {
Tag.ft_deferred = 0;
Tag.ft_rsvflags = 0;
- if (fcntl(FD, F_SETTAG, &Tag) == -1) {
+ if (fcntl(FD.get(), F_SETTAG, &Tag) == -1) {
if (errno == ENOSYS)
// Some file systems do not support filetags.
// Ignore ENOSYS error to allow compilation.
@@ -114,7 +115,8 @@ std::error_code llvm::setzOSFileTag(int FD, int CCSID, bool IsText) {
return std::error_code();
}
-ErrorOr<__ccsid_t> llvm::getzOSFileTag(const Twine &FileName, const int FD) {
+ErrorOr<__ccsid_t> llvm::getzOSFileTag(const Twine &FileName,
+ const sys::fs::file_t FD) {
// If we have a file descriptor, use it to find out file tagging. Otherwise we
// need to use stat() with the file path.
if (FD != -1) {
@@ -123,7 +125,7 @@ ErrorOr<__ccsid_t> llvm::getzOSFileTag(const Twine &FileName, const int FD) {
0, // pccsid
0, // fccsid
};
- if (fcntl(FD, F_CONTROL_CVT, &Query) == -1)
+ if (fcntl(FD.get(), F_CONTROL_CVT, &Query) == -1)
return std::error_code(errno, std::generic_category());
return Query.fccsid;
}
@@ -133,7 +135,8 @@ ErrorOr<__ccsid_t> llvm::getzOSFileTag(const Twine &FileName, const int FD) {
return Attr.st_tag.ft_ccsid;
}
-ErrorOr<bool> llvm::needzOSConversion(const Twine &FileName, const int FD) {
+ErrorOr<bool> llvm::needzOSConversion(const Twine &FileName,
+ const sys::fs::file_t FD) {
ErrorOr<__ccsid_t> Ccsid = getzOSFileTag(FileName, FD);
if (std::error_code EC = Ccsid.getError())
return EC;
@@ -150,14 +153,15 @@ ErrorOr<bool> llvm::needzOSConversion(const Twine &FileName, const int FD) {
}
}
-std::error_code llvm::copyFileTagAttributes(const std::string &Source,
- const int DestinationFD) {
+std::error_code
+llvm::copyFileTagAttributes(const std::string &Source,
+ const sys::fs::file_t DestinationFD) {
struct stat SourceAttributes;
if (stat(Source.c_str(), &SourceAttributes) == -1)
return std::error_code(errno, std::generic_category());
if (SourceAttributes.st_tag.ft_txtflag)
- if (enablezOSAutoConversionCcsid(DestinationFD,
+ if (enablezOSAutoConversionCcsid(DestinationFD.get(),
SourceAttributes.st_tag.ft_ccsid) == -1)
return errnoAsErrorCode();
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc
index 4592252769d56b..04bd21e6aa2902 100644
--- a/llvm/lib/Support/Unix/Path.inc
+++ b/llvm/lib/Support/Unix/Path.inc
@@ -1308,9 +1308,10 @@ Expected<size_t> readNativeFileSlice(file_t FD, MutableArrayRef<char> Buf,
ssize_t NumRead =
sys::RetryAfterSignal(-1, ::pread, FD.get(), Buf.data(), Size, Offset);
#else
- if (lseek(FD, Offset, SEEK_SET) == -1)
+ if (lseek(FD.get(), Offset, SEEK_SET) == -1)
return errorCodeToError(errnoAsErrorCode());
- ssize_t NumRead = sys::RetryAfterSignal(-1, ::read, FD, Buf.data(), Size);
+ ssize_t NumRead =
+ sys::RetryAfterSignal(-1, ::read, FD.get(), Buf.data(), Size);
#endif
if (NumRead == -1)
return errorCodeToError(errnoAsErrorCode());
>From e202f77b8ca99b2330c8ec5a9d7590463c4dc4c0 Mon Sep 17 00:00:00 2001
From: Kai Nacke <kai.peter.nacke at ibm.com>
Date: Wed, 23 Sep 2026 09:52:09 -0400
Subject: [PATCH 2/2] Fix the error on Windows.
---
llvm/include/llvm/Support/AutoConvert.h | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/llvm/include/llvm/Support/AutoConvert.h b/llvm/include/llvm/Support/AutoConvert.h
index d391b8af58501e..b72b695dc6f171 100644
--- a/llvm/include/llvm/Support/AutoConvert.h
+++ b/llvm/include/llvm/Support/AutoConvert.h
@@ -79,14 +79,21 @@ inline std::error_code disableAutoConversion(sys::fs::file_t FD) {
return std::error_code();
}
-inline std::error_code enableAutoConversion(sys::fs::file_t FD) {
+inline std::error_code enableAutoConversion(int FD) {
#ifdef __MVS__
- if (::enablezOSAutoConversion(FD.get()) == -1)
+ if (::enablezOSAutoConversion(FD) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
+inline std::error_code enableAutoConversion(sys::fs::file_t FD) {
+#ifdef __MVS__
+ return enableAutoConversion(FD.get());
+#endif
+ return std::error_code();
+}
+
inline std::error_code enableAutoConversion(sys::fs::file_t FD, int ccsid) {
#ifdef __MVS__
if (::enablezOSAutoConversionCcsid(FD.get(), ccsid) == -1)
@@ -95,14 +102,21 @@ inline std::error_code enableAutoConversion(sys::fs::file_t FD, int ccsid) {
return std::error_code();
}
-inline std::error_code restoreStdHandleAutoConversion(sys::fs::file_t FD) {
+inline std::error_code restoreStdHandleAutoConversion(int FD) {
#ifdef __MVS__
- if (::restorezOSStdHandleAutoConversion(FD.get()) == -1)
+ if (::restorezOSStdHandleAutoConversion(FD) == -1)
return errnoAsErrorCode();
#endif
return std::error_code();
}
+inline std::error_code restoreStdHandleAutoConversion(sys::fs::file_t FD) {
+#ifdef __MVS__
+ return restoreStdHandleAutoConversion(FD.get());
+#endif
+ return std::error_code();
+}
+
inline std::error_code setFileTag(sys::fs::file_t FD, int CCSID, bool IsText) {
#ifdef __MVS__
return setzOSFileTag(FD.get(), CCSID, IsText);
More information about the llvm-commits
mailing list