[clang] d32fb5e - [SystemZ][z/OS] Add required options/macro/etc for z/os compilation step
Abhina Sreeskantharajan via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 30 05:06:16 PDT 2023
Author: Sean Perry
Date: 2023-06-30T08:06:12-04:00
New Revision: d32fb5e5f51dedba495301073b9250f84ac6d8a8
URL: https://github.com/llvm/llvm-project/commit/d32fb5e5f51dedba495301073b9250f84ac6d8a8
DIFF: https://github.com/llvm/llvm-project/commit/d32fb5e5f51dedba495301073b9250f84ac6d8a8.diff
LOG: [SystemZ][z/OS] Add required options/macro/etc for z/os compilation step
Add the required options and macros to the compilation step for z/os.
Reviewed By: abhina.sreeskantharajan, fanbo-meng
Differential Revision: https://reviews.llvm.org/D153582
Added:
clang/test/Driver/zos-comp-cxx.cpp
clang/test/Driver/zos-comp.c
Modified:
clang/include/clang/Driver/Options.td
clang/lib/Basic/Targets/OSTargets.h
clang/lib/Basic/Targets/SystemZ.h
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Driver/ToolChains/ZOS.cpp
clang/lib/Driver/ToolChains/ZOS.h
clang/test/Driver/zos-driver-defaults.c
clang/test/Preprocessor/init-s390x.c
Removed:
################################################################################
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
index dfecea22ea69b0..c3242ac2a804b8 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -3710,6 +3710,8 @@ def mstack_probe_size : Joined<["-"], "mstack-probe-size=">, Group<m_Group>, Fla
MarshallingInfoInt<CodeGenOpts<"StackProbeSize">, "4096">;
def mstack_arg_probe : Flag<["-"], "mstack-arg-probe">, Group<m_Group>,
HelpText<"Enable stack probes">;
+def mzos_sys_include_EQ : Joined<["-"], "mzos-sys-include=">, MetaVarName<"<SysInclude>">,
+ HelpText<"Path to system headers on z/OS">;
def mno_stack_arg_probe : Flag<["-"], "mno-stack-arg-probe">, Group<m_Group>, Flags<[CC1Option]>,
HelpText<"Disable stack probes which are enabled by default">,
MarshallingInfoFlag<CodeGenOpts<"NoStackArgProbe">>;
diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h
index 445718ea66b689..8f4331b02f3b73 100644
--- a/clang/lib/Basic/Targets/OSTargets.h
+++ b/clang/lib/Basic/Targets/OSTargets.h
@@ -771,13 +771,11 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
MacroBuilder &Builder) const override {
// FIXME: _LONG_LONG should not be defined under -std=c89.
Builder.defineMacro("_LONG_LONG");
- Builder.defineMacro("_OPEN_DEFAULT");
- // _UNIX03_WITHDRAWN is required to build libcxx.
- Builder.defineMacro("_UNIX03_WITHDRAWN");
Builder.defineMacro("__370__");
Builder.defineMacro("__BFP__");
// FIXME: __BOOL__ should not be defined under -std=c89.
Builder.defineMacro("__BOOL__");
+ Builder.defineMacro("__COMPILER_VER__", "0x50000000");
Builder.defineMacro("__LONGNAME__");
Builder.defineMacro("__MVS__");
Builder.defineMacro("__THW_370__");
@@ -789,17 +787,6 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
if (this->PointerWidth == 64)
Builder.defineMacro("__64BIT__");
- if (Opts.CPlusPlus) {
- Builder.defineMacro("__DLL__");
- // _XOPEN_SOURCE=600 is required to build libcxx.
- Builder.defineMacro("_XOPEN_SOURCE", "600");
- }
-
- if (Opts.GNUMode) {
- Builder.defineMacro("_MI_BUILTIN");
- Builder.defineMacro("_EXT");
- }
-
if (Opts.CPlusPlus && Opts.WChar) {
// Macro __wchar_t is defined so that the wchar_t data
// type is not declared as a typedef in system headers.
@@ -818,6 +805,7 @@ class LLVM_LIBRARY_VISIBILITY ZOSTargetInfo : public OSTargetInfo<Target> {
this->UseZeroLengthBitfieldAlignment = true;
this->UseLeadingZeroLengthBitfield = false;
this->ZeroLengthBitfieldBoundary = 32;
+ this->TheCXXABI.set(TargetCXXABI::XL);
}
bool areDefaultedSMFStillPOD(const LangOptions &) const override {
diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h
index e8c0831a3e76e1..9ba255745cf2cc 100644
--- a/clang/lib/Basic/Targets/SystemZ.h
+++ b/clang/lib/Basic/Targets/SystemZ.h
@@ -36,7 +36,6 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
HasTransactionalExecution(false), HasVector(false), SoftFloat(false) {
IntMaxType = SignedLong;
Int64Type = SignedLong;
- TLSSupported = true;
IntWidth = IntAlign = 32;
LongWidth = LongLongWidth = LongAlign = LongLongAlign = 64;
Int128Align = 64;
@@ -47,16 +46,20 @@ class LLVM_LIBRARY_VISIBILITY SystemZTargetInfo : public TargetInfo {
DefaultAlignForAttributeAligned = 64;
MinGlobalAlign = 16;
if (Triple.isOSzOS()) {
+ TLSSupported = false;
// All vector types are default aligned on an 8-byte boundary, even if the
// vector facility is not available. That is
diff erent from Linux.
MaxVectorAlign = 64;
- // Compared to Linux/ELF, the data layout
diff ers only in that name
- // mangling is GOFF.
- resetDataLayout(
- "E-m:l-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-a:8:16-n32:64");
- } else
+ // Compared to Linux/ELF, the data layout
diff ers only in some details:
+ // - name mangling is GOFF.
+ // - 32 bit pointers, either as default or special address space
+ resetDataLayout("E-m:l-i1:8:16-i8:8:16-i64:64-f128:64-v128:64-"
+ "a:8:16-n32:64");
+ } else {
+ TLSSupported = true;
resetDataLayout("E-m:e-i1:8:16-i8:8:16-i64:64-f128:64"
"-v128:64-a:8:16-n32:64");
+ }
MaxAtomicPromoteWidth = MaxAtomicInlineWidth = 64;
HasStrictFP = true;
}
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 3b00d6d549954b..6f3d86b900edfb 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -3924,7 +3924,8 @@ static void RenderCharacterOptions(const ArgList &Args, const llvm::Triple &T,
else
CmdArgs.push_back("-fsigned-wchar");
}
- }
+ } else if (T.isOSzOS())
+ CmdArgs.push_back("-fno-signed-wchar");
}
static void RenderObjCOptions(const ToolChain &TC, const Driver &D,
@@ -5147,6 +5148,37 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
Twine(std::min(Value, 65536u))));
}
+ if (Triple.isOSzOS()) {
+ // On z/OS some of the system header feature macros need to
+ // be defined to enable most cross platform projects to build
+ // successfully. Ths include the libc++ library. A
+ // complicating factor is that users can define these
+ // macros to the same or
diff erent values. We need to add
+ // the definition for these macros to the compilation command
+ // if the user hasn't already defined them.
+
+ auto findMacroDefinition = [&](const std::string &Macro) {
+ auto MacroDefs = Args.getAllArgValues(options::OPT_D);
+ return std::find_if(MacroDefs.begin(), MacroDefs.end(),
+ [&](const std::string &M) {
+ return M == Macro ||
+ M.find(Macro + '=') != std::string::npos;
+ }) != MacroDefs.end();
+ };
+
+ // _UNIX03_WITHDRAWN is required for libcxx & porting.
+ if (!findMacroDefinition("_UNIX03_WITHDRAWN"))
+ CmdArgs.push_back("-D_UNIX03_WITHDRAWN");
+ // _OPEN_DEFAULT is required for XL compat
+ if (!findMacroDefinition("_OPEN_DEFAULT"))
+ CmdArgs.push_back("-D_OPEN_DEFAULT");
+ if (D.CCCIsCXX() || types::isCXX(Input.getType())) {
+ // _XOPEN_SOURCE=600 is required for libcxx.
+ if (!findMacroDefinition("_XOPEN_SOURCE"))
+ CmdArgs.push_back("-D_XOPEN_SOURCE=600");
+ }
+ }
+
llvm::Reloc::Model RelocationModel;
unsigned PICLevel;
bool IsPIE;
diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp
index c5100a38648580..db10567ca28ec2 100644
--- a/clang/lib/Driver/ToolChains/ZOS.cpp
+++ b/clang/lib/Driver/ToolChains/ZOS.cpp
@@ -11,13 +11,17 @@
#include "clang/Driver/Compilation.h"
#include "clang/Driver/Options.h"
#include "llvm/Option/ArgList.h"
+#include "llvm/Support/FileSystem.h"
#include "llvm/Support/VirtualFileSystem.h"
+#include "llvm/Support/WithColor.h"
+using namespace clang;
using namespace clang::driver;
using namespace clang::driver::tools;
using namespace clang::driver::toolchains;
+using namespace llvm;
using namespace llvm::opt;
-using namespace clang;
+using namespace llvm::sys;
ZOS::ZOS(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
: ToolChain(D, Triple, Args) {}
@@ -241,3 +245,97 @@ void ZOS::AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
auto ZOS::buildAssembler() const -> Tool * { return new zos::Assembler(*this); }
auto ZOS::buildLinker() const -> Tool * { return new zos::Linker(*this); }
+
+void ZOS::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
+ ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdinc))
+ return;
+
+ const Driver &D = getDriver();
+
+ // resolve ResourceDir
+ std::string ResourceDir(D.ResourceDir);
+
+ // zos_wrappers must take highest precedence
+
+ // - <clang>/lib/clang/<ver>/include/zos_wrappers
+ if (!DriverArgs.hasArg(options::OPT_nobuiltininc)) {
+ SmallString<128> P(ResourceDir);
+ path::append(P, "include", "zos_wrappers");
+ addSystemInclude(DriverArgs, CC1Args, P.str());
+
+ // - <clang>/lib/clang/<ver>/include
+ SmallString<128> P2(ResourceDir);
+ path::append(P2, "include");
+ addSystemInclude(DriverArgs, CC1Args, P2.str());
+ }
+
+ // - /usr/include
+ if (Arg *SysIncludeArg =
+ DriverArgs.getLastArg(options::OPT_mzos_sys_include_EQ)) {
+ StringRef SysInclude = SysIncludeArg->getValue();
+
+ // fall back to the default include path
+ if (!SysInclude.empty()) {
+
+ // -mzos-sys-include opton can have colon separated
+ // list of paths, so we need to parse the value.
+ StringRef PathLE(SysInclude);
+ size_t Colon = PathLE.find(':');
+ if (Colon == StringRef::npos) {
+ addSystemInclude(DriverArgs, CC1Args, PathLE.str());
+ return;
+ }
+
+ while (Colon != StringRef::npos) {
+ SmallString<128> P = PathLE.substr(0, Colon);
+ addSystemInclude(DriverArgs, CC1Args, P.str());
+ PathLE = PathLE.substr(Colon + 1);
+ Colon = PathLE.find(':');
+ }
+ if (PathLE.size())
+ addSystemInclude(DriverArgs, CC1Args, PathLE.str());
+
+ return;
+ }
+ }
+
+ addSystemInclude(DriverArgs, CC1Args, "/usr/include");
+}
+
+void ZOS::TryAddIncludeFromPath(llvm::SmallString<128> Path,
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const {
+ if (!getVFS().exists(Path)) {
+ if (DriverArgs.hasArg(options::OPT_v))
+ WithColor::warning(errs(), "Clang")
+ << "ignoring nonexistent directory \"" << Path << "\"\n";
+ if (!DriverArgs.hasArg(options::OPT__HASH_HASH_HASH))
+ return;
+ }
+ addSystemInclude(DriverArgs, CC1Args, Path);
+}
+
+void ZOS::AddClangCXXStdlibIncludeArgs(
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdinc) ||
+ DriverArgs.hasArg(options::OPT_nostdincxx) ||
+ DriverArgs.hasArg(options::OPT_nostdlibinc))
+ return;
+
+ switch (GetCXXStdlibType(DriverArgs)) {
+ case ToolChain::CST_Libcxx: {
+ // <install>/bin/../include/c++/v1
+ llvm::SmallString<128> InstallBin =
+ llvm::StringRef(getDriver().getInstalledDir());
+ llvm::sys::path::append(InstallBin, "..", "include", "c++", "v1");
+ TryAddIncludeFromPath(InstallBin, DriverArgs, CC1Args);
+ break;
+ }
+ case ToolChain::CST_Libstdcxx:
+ llvm::report_fatal_error(
+ "picking up libstdc++ headers is unimplemented on z/OS");
+ break;
+ }
+}
diff --git a/clang/lib/Driver/ToolChains/ZOS.h b/clang/lib/Driver/ToolChains/ZOS.h
index 117a3abee50373..0c6d59394a185e 100644
--- a/clang/lib/Driver/ToolChains/ZOS.h
+++ b/clang/lib/Driver/ToolChains/ZOS.h
@@ -63,13 +63,23 @@ class LLVM_LIBRARY_VISIBILITY ZOS : public ToolChain {
bool IsIntegratedAssemblerDefault() const override { return true; }
+ void TryAddIncludeFromPath(llvm::SmallString<128> Path,
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const;
+ void
+ AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
+
+ void AddClangCXXStdlibIncludeArgs(
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
+
unsigned GetDefaultDwarfVersion() const override { return 4; }
+ CXXStdlibType GetDefaultCXXStdlibType() const override;
void AddCXXStdlibLibArgs(const llvm::opt::ArgList &Args,
llvm::opt::ArgStringList &CmdArgs) const override;
- CXXStdlibType GetDefaultCXXStdlibType() const override;
-
RuntimeLibType GetDefaultRuntimeLibType() const override;
void addClangTargetOptions(
diff --git a/clang/test/Driver/zos-comp-cxx.cpp b/clang/test/Driver/zos-comp-cxx.cpp
new file mode 100644
index 00000000000000..4904913bcf6178
--- /dev/null
+++ b/clang/test/Driver/zos-comp-cxx.cpp
@@ -0,0 +1,99 @@
+// Tests that the z/OS toolchain adds system includes to its search path.
+
+// RUN: %clangxx -c -### %s --target=s390x-ibm-zos 2>&1 \
+// RUN: | FileCheck %s
+
+// CHECK: "-D_UNIX03_WITHDRAWN"
+// CHECK-SAME: "-D_OPEN_DEFAULT"
+// CHECK-SAME: "-D_XOPEN_SOURCE=600"
+// CHECK-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-SAME: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK-SAME: "-internal-isystem" "/usr/include"
+// CHECK-SAME: "-fshort-enums"
+// CHECK-SAME: "-fno-signed-char"
+// CHECK-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -mzos-sys-include=/ABC/DEF %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK2 %s
+
+// CHECK2: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK2-SAME: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK2-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK2-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK2-SAME: "-internal-isystem" "{{/|\\\\}}ABC{{/|\\\\}}DEF"
+// CHECK2-NOT: "-internal-isystem" "/usr/include"
+// CHECK2-SAME: "-fshort-enums"
+// CHECK2-SAME: "-fno-signed-char"
+// CHECK2-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -nostdinc %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK3 %s
+
+// CHECK3: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK3-NOT: "-internal-isystem" "{{.*}}/bin/../include/c++/v1"
+// CHECK3-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK3-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK3-NOT: "-internal-isystem" "/usr/include"
+// CHECK3-SAME: "-fshort-enums"
+// CHECK3-SAME: "-fno-signed-char"
+// CHECK3-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -nostdinc++ %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK4 %s
+
+// CHECK4: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK4-NOT: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK4-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK4-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK4-SAME: "-internal-isystem" "/usr/include"
+// CHECK4-SAME: "-fshort-enums"
+// CHECK4-SAME: "-fno-signed-char"
+// CHECK4-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -nostdlibinc %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK5 %s
+
+// CHECK5: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK5-NOT: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK5-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK5-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK5-SAME: "-internal-isystem" "/usr/include"
+// CHECK5-SAME: "-fshort-enums"
+// CHECK5-SAME: "-fno-signed-char"
+// CHECK5-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -nobuiltininc %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK6 %s
+
+// CHECK6: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK6-SAME: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK6-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK6-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK6-SAME: "-internal-isystem" "/usr/include"
+// CHECK6-SAME: "-fshort-enums"
+// CHECK6-SAME: "-fno-signed-char"
+// CHECK6-SAME: "-fno-signed-wchar"
+
+// RUN: %clangxx -c -### -D_XOPEN_SOURCE=700 %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK7 %s
+
+// CHECK7: "-D_UNIX03_WITHDRAWN"
+// CHECK7-SAME: "-D_OPEN_DEFAULT"
+// CHECK7-NOT: "-D_XOPEN_SOURCE=600"
+// CHECK7-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK7-SAME: "-D" "_XOPEN_SOURCE=700"
+// CHECK7-SAME: "-internal-isystem" "{{.*}}{{/|\\\\}}bin{{/|\\\\}}..{{/|\\\\}}include{{/|\\\\}}c++{{/|\\\\}}v1"
+// CHECK7-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK7-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK7-SAME: "-internal-isystem" "/usr/include"
+// CHECK7-SAME: "-fshort-enums"
+// CHECK7-SAME: "-fno-signed-char"
+// CHECK7-SAME: "-fno-signed-wchar"
diff --git a/clang/test/Driver/zos-comp.c b/clang/test/Driver/zos-comp.c
new file mode 100644
index 00000000000000..1120f939175f22
--- /dev/null
+++ b/clang/test/Driver/zos-comp.c
@@ -0,0 +1,75 @@
+// Tests that the z/OS toolchain adds system includes to its search path.
+
+// RUN: %clang -c -### %s --target=s390x-ibm-zos 2>&1 \
+// RUN: | FileCheck %s
+
+// CHECK: "-D_UNIX03_WITHDRAWN"
+// CHECK-SAME: "-D_OPEN_DEFAULT"
+// CHECK-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK-SAME: "-internal-isystem" "/usr/include"
+// CHECK-SAME: "-fshort-enums"
+// CHECK-SAME: "-fno-signed-char"
+// CHECK-SAME: "-fno-signed-wchar"
+
+// RUN: %clang -c -### -mzos-sys-include=/ABC/DEF %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK2 %s
+
+// CHECK2: "-D_UNIX03_WITHDRAWN"
+// CHECK2-SAME: "-D_OPEN_DEFAULT"
+// CHECK2-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK2-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK2-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK2-SAME: "-internal-isystem" "/ABC/DEF"
+// CHECK2-NOT: "-internal-isystem" "/usr/include"
+// CHECK2-SAME: "-fshort-enums"
+// CHECK2-SAME: "-fno-signed-char"
+// CHECK2-SAME: "-fno-signed-wchar"
+
+// RUN: %clang -c -### -mzos-sys-include=/ABC/DEF:/ghi/jkl %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK3 %s
+
+// CHECK3: "-D_UNIX03_WITHDRAWN"
+// CHECK3-SAME: "-D_OPEN_DEFAULT"
+// CHECK3-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK3-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK3-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK3-SAME: "-internal-isystem" "/ABC/DEF"
+// CHECK3-SAME: "-internal-isystem" "/ghi/jkl"
+// CHECK3-NOT: "-internal-isystem" "/usr/include"
+// CHECK3-SAME: "-fshort-enums"
+// CHECK3-SAME: "-fno-signed-char"
+// CHECK3-SAME: "-fno-signed-wchar"
+
+// RUN: %clang -c -### -nostdinc %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK4 %s
+
+// CHECK4: "-D_UNIX03_WITHDRAWN"
+// CHECK4-SAME: "-D_OPEN_DEFAULT"
+// CHECK4-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK4-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK4-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK4-NOT: "-internal-isystem" "/usr/include"
+// CHECK4-SAME: "-fshort-enums"
+// CHECK4-SAME: "-fno-signed-char"
+// CHECK4-SAME: "-fno-signed-wchar"
+
+
+// RUN: %clang -c -### -nobuiltininc %s 2>&1 \
+// RUN: --target=s390x-ibm-zos \
+// RUN: | FileCheck --check-prefixes=CHECK5 %s
+
+// CHECK5: "-D_UNIX03_WITHDRAWN"
+// CHECK5-SAME: "-D_OPEN_DEFAULT"
+// CHECK5-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+// CHECK5-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+// CHECK5-NOT: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+// CHECK5-SAME: "-internal-isystem" "/usr/include"
+// CHECK5-SAME: "-fshort-enums"
+// CHECK5-SAME: "-fno-signed-char"
+// CHECK5-SAME: "-fno-signed-wchar"
+
diff --git a/clang/test/Driver/zos-driver-defaults.c b/clang/test/Driver/zos-driver-defaults.c
index 9ab9d09d54cab4..798fa893a1fdb5 100644
--- a/clang/test/Driver/zos-driver-defaults.c
+++ b/clang/test/Driver/zos-driver-defaults.c
@@ -1,8 +1,23 @@
-// RUN: %clang -### --target=s390x-none-zos -fsyntax-only %s 2>&1 | FileCheck --check-prefix=CHECK-SHORT-ENUMS %s
+// RUN: %clang -### --target=s390x-none-zos -fsyntax-only %s 2>&1 | FileCheck --check-prefixes=CHECK-C-MACRO,CHECK-SHORT-ENUMS %s
+// RUN: %clang -### --target=s390x-none-zos -fsyntax-only %s 2>&1 | FileCheck --check-prefix=CHECK-ZOS-INCLUDES %s
// RUN: %clang -### --target=s390x-none-zos -fno-short-enums -fsyntax-only %s 2>&1 | FileCheck %s
+// RUN: %clangxx -### --target=s390x-none-zos -fsyntax-only %s 2>&1 | FileCheck --check-prefixes=CHECK-C-MACRO,CHECK-CXX-MACRO %s
+// RUN: %clang -### --target=s390x-none-zos -x c++ -fsyntax-only %s 2>&1 | FileCheck --check-prefixes=CHECK-C-MACRO,CHECK-CXX-MACRO %s
+
+//CHECK-C-MACRO: -D_UNIX03_WITHDRAWN
+//CHECK-C-MACRO: -D_OPEN_DEFAULT
+
+//CHECK-CXX-MACRO: -D_XOPEN_SOURCE=600
+//CHECK-USER-CXX-MACRO-NOT: -D_XOPEN_SOURCE=600
+//CHECK-USER-CXX-MACRO: "-D" "_XOPEN_SOURCE=700"
//CHECK-SHORT-ENUMS: -fshort-enums
//CHECK-SHORT-ENUMS: -fno-signed-char
+//CHECK-ZOS-INCLUDES: clang{{.*}} "-cc1" "-triple" "s390x-none-zos"
+//CHECK-ZOS-INCLUDES-SAME: "-resource-dir" "[[RESOURCE_DIR:[^"]+]]"
+//CHECK-ZOS-INCLUDES-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include{{(/|\\\\)}}zos_wrappers"
+//CHECK-ZOS-INCLUDES-SAME: "-internal-isystem" "[[RESOURCE_DIR]]{{(/|\\\\)}}include"
+//
//CHECK-NOT: -fshort-enums
//CHECK: -fno-signed-char
diff --git a/clang/test/Preprocessor/init-s390x.c b/clang/test/Preprocessor/init-s390x.c
index 6c646527f50f74..6d08e9bfcb6322 100644
--- a/clang/test/Preprocessor/init-s390x.c
+++ b/clang/test/Preprocessor/init-s390x.c
@@ -183,17 +183,12 @@
// RUN: %clang_cc1 -E -dM -ffreestanding -triple=s390x-none-zos -fno-signed-char < /dev/null | FileCheck -match-full-lines -check-prefix S390X-ZOS %s
// RUN: %clang_cc1 -x c++ -std=gnu++14 -E -dM -ffreestanding -triple=s390x-none-zos -fno-signed-char < /dev/null | FileCheck -match-full-lines -check-prefix S390X-ZOS -check-prefix S390X-ZOS-GNUXX %s
-// S390X-ZOS-GNUXX: #define _EXT 1
// S390X-ZOS: #define _LONG_LONG 1
-// S390X-ZOS-GNUXX: #define _MI_BUILTIN 1
-// S390X-ZOS: #define _OPEN_DEFAULT 1
-// S390X-ZOS: #define _UNIX03_WITHDRAWN 1
-// S390X-ZOS-GNUXX: #define _XOPEN_SOURCE 600
// S390X-ZOS: #define __370__ 1
// S390X-ZOS: #define __64BIT__ 1
// S390X-ZOS: #define __BFP__ 1
// S390X-ZOS: #define __BOOL__ 1
-// S390X-ZOS-GNUXX: #define __DLL__ 1
+// S390X-ZOS: #define __COMPILER_VER__ 0x50000000
// S390X-ZOS: #define __LONGNAME__ 1
// S390X-ZOS: #define __MVS__ 1
// S390X-ZOS: #define __THW_370__ 1
More information about the cfe-commits
mailing list