https://github.com/abhina-sree updated https://github.com/llvm/llvm-project/pull/143174
>From 101542e2ea0b58482937819a94dc5d0db81e91a5 Mon Sep 17 00:00:00 2001 From: Abhina Sreeskantharajan <abhina.sreeskanthara...@ibm.com> Date: Fri, 6 Jun 2025 12:16:52 -0400 Subject: [PATCH] refactor AutoConvert.h to remove MVS guard --- clang/tools/c-index-test/c-index-test.c | 4 ++-- llvm/include/llvm/Support/AutoConvert.h | 3 +-- llvm/lib/Support/AutoConvert.cpp | 31 +++++++++++++++++++------ llvm/lib/Support/InitLLVM.cpp | 9 +++---- llvm/lib/Support/MemoryBuffer.cpp | 9 +++---- llvm/lib/Support/raw_ostream.cpp | 10 ++++---- llvm/utils/count/count.c | 6 +++-- 7 files changed, 43 insertions(+), 29 deletions(-) diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c index 4a887cd0c1e2e..3922aa9c31386 100644 --- a/clang/tools/c-index-test/c-index-test.c +++ b/clang/tools/c-index-test/c-index-test.c @@ -5199,13 +5199,13 @@ static void flush_atexit(void) { int main(int argc, const char **argv) { thread_info client_data; -#ifdef __MVS__ + // On z/OS we need to enable auto conversion if (enablezOSAutoConversion(fileno(stdout)) == -1) fprintf(stderr, "Setting conversion on stdout failed\n"); + // On z/OS we need to enable auto conversion if (enablezOSAutoConversion(fileno(stderr)) == -1) fprintf(stderr, "Setting conversion on stderr failed\n"); -#endif atexit(flush_atexit); diff --git a/llvm/include/llvm/Support/AutoConvert.h b/llvm/include/llvm/Support/AutoConvert.h index 352493e9be25f..7f8f6f96b4847 100644 --- a/llvm/include/llvm/Support/AutoConvert.h +++ b/llvm/include/llvm/Support/AutoConvert.h @@ -16,6 +16,7 @@ #ifdef __MVS__ #include <_Ccsid.h> +#endif #ifdef __cplusplus #include "llvm/Support/ErrorOr.h" #include <system_error> @@ -66,6 +67,4 @@ ErrorOr<bool> needzOSConversion(const char *FileName, const int FD = -1); } /* namespace llvm */ #endif /* __cplusplus */ -#endif /* __MVS__ */ - #endif /* LLVM_SUPPORT_AUTOCONVERT_H */ diff --git a/llvm/lib/Support/AutoConvert.cpp b/llvm/lib/Support/AutoConvert.cpp index f7918548df1d0..3c82454f2a3ac 100644 --- a/llvm/lib/Support/AutoConvert.cpp +++ b/llvm/lib/Support/AutoConvert.cpp @@ -11,8 +11,6 @@ // //===----------------------------------------------------------------------===// -#ifdef __MVS__ - #include "llvm/Support/AutoConvert.h" #include "llvm/Support/Error.h" #include <cassert> @@ -25,6 +23,9 @@ using namespace llvm; static int savedStdHandleAutoConversionMode[3] = {-1, -1, -1}; int disablezOSAutoConversion(int FD) { +#ifndef __MVS__ + return 0; +#else static const struct f_cnvrt Convert = { SETCVTOFF, // cvtcmd 0, // pccsid @@ -32,9 +33,13 @@ int disablezOSAutoConversion(int FD) { }; return fcntl(FD, F_CONTROL_CVT, &Convert); +#endif } int restorezOSStdHandleAutoConversion(int FD) { +#ifndef __MVS__ + return 0; +#else assert(FD == STDIN_FILENO || FD == STDOUT_FILENO || FD == STDERR_FILENO); if (savedStdHandleAutoConversionMode[FD] == -1) return 0; @@ -44,9 +49,13 @@ int restorezOSStdHandleAutoConversion(int FD) { 0, // fccsid }; return (fcntl(FD, F_CONTROL_CVT, &Cvt)); +#endif } int enablezOSAutoConversion(int FD) { +#ifndef __MVS__ + return 0; +#else struct f_cnvrt Query = { QUERYCVT, // cvtcmd 0, // pccsid @@ -81,30 +90,35 @@ int enablezOSAutoConversion(int FD) { // Assume untagged files to be IBM-1047 encoded. Query.fccsid = (Query.fccsid == FT_UNTAGGED) ? CCSID_IBM_1047 : Query.fccsid; return fcntl(FD, F_CONTROL_CVT, &Query); +#endif } std::error_code llvm::disablezOSAutoConversion(int FD) { +#ifdef __MVS__ if (::disablezOSAutoConversion(FD) == -1) return errnoAsErrorCode(); - +#endif return std::error_code(); } std::error_code llvm::enablezOSAutoConversion(int FD) { +#ifdef __MVS__ if (::enablezOSAutoConversion(FD) == -1) return errnoAsErrorCode(); - +#endif return std::error_code(); } std::error_code llvm::restorezOSStdHandleAutoConversion(int FD) { +#ifdef __MVS__ if (::restorezOSStdHandleAutoConversion(FD) == -1) return errnoAsErrorCode(); - +#endif return std::error_code(); } std::error_code llvm::setzOSFileTag(int FD, int CCSID, bool Text) { +#ifdef __MVS__ assert((!Text || (CCSID != FT_UNTAGGED && CCSID != FT_BINARY)) && "FT_UNTAGGED and FT_BINARY are not allowed for text files"); struct file_tag Tag; @@ -115,6 +129,7 @@ std::error_code llvm::setzOSFileTag(int FD, int CCSID, bool Text) { if (fcntl(FD, F_SETTAG, &Tag) == -1) return errnoAsErrorCode(); +#endif return std::error_code(); } @@ -138,6 +153,9 @@ ErrorOr<__ccsid_t> llvm::getzOSFileTag(const char *FileName, const int FD) { } ErrorOr<bool> llvm::needzOSConversion(const char *FileName, const int FD) { +#ifndef __MVS__ + return false; +#else ErrorOr<__ccsid_t> Ccsid = getzOSFileTag(FileName, FD); if (std::error_code EC = Ccsid.getError()) return EC; @@ -152,6 +170,5 @@ ErrorOr<bool> llvm::needzOSConversion(const char *FileName, const int FD) { default: return true; } +#endif } - -#endif //__MVS__ diff --git a/llvm/lib/Support/InitLLVM.cpp b/llvm/lib/Support/InitLLVM.cpp index 50f7a43cc34a7..c7613dda0a3ea 100644 --- a/llvm/lib/Support/InitLLVM.cpp +++ b/llvm/lib/Support/InitLLVM.cpp @@ -13,14 +13,12 @@ #include "llvm/Support/ErrorHandling.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/Signals.h" +#include <unistd.h> #ifdef _WIN32 #include "llvm/Support/Windows/WindowsSupport.h" #endif -#ifdef __MVS__ -#include <unistd.h> - void CleanupStdHandles(void *Cookie) { llvm::raw_ostream *Outs = &llvm::outs(), *Errs = &llvm::errs(); Outs->flush(); @@ -29,7 +27,6 @@ void CleanupStdHandles(void *Cookie) { llvm::restorezOSStdHandleAutoConversion(STDOUT_FILENO); llvm::restorezOSStdHandleAutoConversion(STDERR_FILENO); } -#endif using namespace llvm; using namespace llvm::sys; @@ -41,10 +38,10 @@ InitLLVM::InitLLVM(int &Argc, const char **&Argv, assert(!Initialized && "InitLLVM was already initialized!"); Initialized = true; #endif -#ifdef __MVS__ + // Bring stdin/stdout/stderr into a known state. sys::AddSignalHandler(CleanupStdHandles, nullptr); -#endif + if (InstallPipeSignalExitHandler) // The pipe signal handler must be installed before any other handlers are // registered. This is because the Unix \ref RegisterHandlers function does diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index e2044bcc4e4f0..ffa494d5d7727 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/SmallString.h" #include "llvm/Config/config.h" #include "llvm/Support/Alignment.h" +#include "llvm/Support/AutoConvert.h" #include "llvm/Support/Errc.h" #include "llvm/Support/Error.h" #include "llvm/Support/ErrorHandling.h" @@ -34,9 +35,7 @@ #include <io.h> #endif -#ifdef __MVS__ -#include "llvm/Support/AutoConvert.h" -#endif + using namespace llvm; //===----------------------------------------------------------------------===// @@ -507,7 +506,6 @@ getOpenFileImpl(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, return std::move(Result); } -#ifdef __MVS__ ErrorOr<bool> NeedConversion = needzOSConversion(Filename.str().c_str(), FD); if (std::error_code EC = NeedConversion.getError()) return EC; @@ -516,9 +514,8 @@ getOpenFileImpl(sys::fs::file_t FD, const Twine &Filename, uint64_t FileSize, // off the stream. // Note: This only works with the assumption of reading a full file (i.e, // Offset == 0 and MapSize == FileSize). Reading a file slice does not work. - if (Offset == 0 && MapSize == FileSize && *NeedConversion) + if (*NeedConversion && Offset == 0 && MapSize == FileSize) return getMemoryBufferForStream(FD, Filename); -#endif auto Buf = WritableMemoryBuffer::getNewUninitMemBuffer(MapSize, Filename, Alignment); diff --git a/llvm/lib/Support/raw_ostream.cpp b/llvm/lib/Support/raw_ostream.cpp index 16631a63d1921..129723dd11653 100644 --- a/llvm/lib/Support/raw_ostream.cpp +++ b/llvm/lib/Support/raw_ostream.cpp @@ -894,10 +894,11 @@ void raw_fd_ostream::anchor() {} raw_fd_ostream &llvm::outs() { // Set buffer settings to model stdout behavior. std::error_code EC; -#ifdef __MVS__ + + // On z/OS we need to enable auto conversion EC = enablezOSAutoConversion(STDOUT_FILENO); assert(!EC); -#endif + static raw_fd_ostream S("-", EC, sys::fs::OF_None); assert(!EC); return S; @@ -905,10 +906,11 @@ raw_fd_ostream &llvm::outs() { raw_fd_ostream &llvm::errs() { // Set standard error to be unbuffered. -#ifdef __MVS__ + + // On z/OS we need to enable auto conversion std::error_code EC = enablezOSAutoConversion(STDERR_FILENO); assert(!EC); -#endif + static raw_fd_ostream S(STDERR_FILENO, false, true); return S; } diff --git a/llvm/utils/count/count.c b/llvm/utils/count/count.c index 9166145fcc10a..a1faa3a642284 100644 --- a/llvm/utils/count/count.c +++ b/llvm/utils/count/count.c @@ -11,13 +11,15 @@ #include <stdlib.h> int main(int argc, char **argv) { -#ifdef __MVS__ + + // On z/OS we need to enable auto conversion if (enablezOSAutoConversion(fileno(stdin)) == -1) fprintf(stderr, "Setting conversion on stdin failed\n"); + // On z/OS we need to enable auto conversion if (enablezOSAutoConversion(fileno(stderr)) == -1) fprintf(stdout, "Setting conversion on stderr failed\n"); -#endif + size_t Count, NumLines, NumRead; char Buffer[4096], *End; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits