Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions clang/test/CodeGen/SystemZ/encoding.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// Checks encoding of output file
// This is only required for z/OS.
//
// REQUIRES: system-zos, systemz-registered-target
// RUN: %clang_cc1 -triple s390x-ibm-zos -S %s -o %t.s
// RUN: ls -T %t.s | FileCheck %s

// CHECK: t IBM-1047 T=on
void foo() { return; }
23 changes: 15 additions & 8 deletions llvm/lib/Support/VirtualOutputBackends.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,18 @@ static Error createDirectoriesOnDemand(StringRef OutputPath,
});
}

static sys::fs::OpenFlags generateFlagsFromConfig(OutputConfig Config) {
sys::fs::OpenFlags OF = sys::fs::OF_None;
if (Config.getTextWithCRLF())
OF |= sys::fs::OF_TextWithCRLF;
else if (Config.getText())
OF |= sys::fs::OF_Text;
if (Config.getAppend() && !Config.getAtomicWrite())
OF |= sys::fs::OF_Append;

return OF;
}

Error OnDiskOutputFile::tryToCreateTemporary(std::optional<int> &FD) {
// Create a temporary file.
// Insert -%%%%%%%% before the extension (if any), and because some tools
Expand All @@ -269,8 +281,9 @@ Error OnDiskOutputFile::tryToCreateTemporary(std::optional<int> &FD) {
return createDirectoriesOnDemand(OutputPath, Config, [&]() -> Error {
int NewFD;
SmallString<128> UniquePath;
sys::fs::OpenFlags OF = generateFlagsFromConfig(Config);
if (std::error_code EC =
sys::fs::createUniqueFile(ModelPath, NewFD, UniquePath))
sys::fs::createUniqueFile(ModelPath, NewFD, UniquePath, OF))
return make_error<TempFileOutputError>(ModelPath, OutputPath, EC);

if (Config.getDiscardOnSignal())
Expand Down Expand Up @@ -312,13 +325,7 @@ Error OnDiskOutputFile::initializeFile(std::optional<int> &FD) {
// Not using a temporary file. Open the final output file.
return createDirectoriesOnDemand(OutputPath, Config, [&]() -> Error {
int NewFD;
sys::fs::OpenFlags OF = sys::fs::OF_None;
if (Config.getTextWithCRLF())
OF |= sys::fs::OF_TextWithCRLF;
else if (Config.getText())
OF |= sys::fs::OF_Text;
if (Config.getAppend())
OF |= sys::fs::OF_Append;
sys::fs::OpenFlags OF = generateFlagsFromConfig(Config);
if (std::error_code EC = sys::fs::openFileForWrite(
OutputPath, NewFD, sys::fs::CD_CreateAlways, OF))
return convertToOutputError(OutputPath, EC);
Expand Down
Loading