[clang] [llvm] [SystemZ][z/OS] Add options -m[no-]zos-ppa1-name to remove the function name in PPA1. (PR #207416)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 10 05:29:57 PDT 2026
https://github.com/sujianIBM updated https://github.com/llvm/llvm-project/pull/207416
>From bec5141a9a339c59cf763e6695c36ba3f368f39b Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Fri, 3 Jul 2026 11:25:51 -0400
Subject: [PATCH 1/6] Add options -m[no-]zos-ppa1-name to remove the function
name in PPA1 on z/OS. (#2)
This PR adds options -m[no-]zos-ppa1-name to remove the function name in PPA1 on z/OS.
---
clang/include/clang/Basic/LangOptions.def | 2 +
clang/include/clang/Basic/LangOptions.h | 10 ++++
clang/include/clang/Options/Options.td | 7 +++
clang/lib/CodeGen/Targets/SystemZ.cpp | 13 +++++
clang/lib/Driver/ToolChains/ZOS.cpp | 2 +
clang/lib/Frontend/CompilerInvocation.cpp | 15 ++++++
clang/test/CodeGen/SystemZ/zos-ppa1-name.c | 19 +++++++
clang/test/Driver/zos-ppa1-name.c | 15 ++++++
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp | 12 ++++-
llvm/test/CodeGen/SystemZ/zos-ppa1.ll | 54 +++++++++++++++++++
10 files changed, 148 insertions(+), 1 deletion(-)
create mode 100644 clang/test/CodeGen/SystemZ/zos-ppa1-name.c
create mode 100644 clang/test/Driver/zos-ppa1-name.c
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
index b4d03a1a3e0b5..935c95846d4f6 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -295,6 +295,8 @@ LANGOPT(ConstantNSDictionaryLiterals , 1, 0, NotCompatible, "constant dictionary
LANGOPT(InlineVisibilityHidden , 1, 0, Benign, "hidden visibility for inline C++ methods")
ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, Benign, "controls mapping of default visibility to dllexport")
LANGOPT(IgnoreXCOFFVisibility, 1, 0, Benign, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.")
+ENUM_LANGOPT(ZOSPPA1Name, ZOSPPA1NameKind, 2, ZOSPPA1NameKind::Default, Benign,
+ "Emit the function name in PPA1 on z/OS.")
LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, Benign,
"hidden visibility for static local variables in inline C++ "
"methods when -fvisibility-inlines hidden is enabled")
diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h
index 6c86300fc5581..fceac5c2946f2 100644
--- a/clang/include/clang/Basic/LangOptions.h
+++ b/clang/include/clang/Basic/LangOptions.h
@@ -451,6 +451,16 @@ class LangOptionsBase {
Microsoft = 2,
};
+ enum class ZOSPPA1NameKind {
+ /// Optimization for size level decides whether to emit the function name
+ /// in PPA1 on z/OS.
+ Default,
+ /// Emit the function name in PPA1 on z/OS.
+ Emit,
+ /// Do not emit the function name in PPA1 on z/OS.
+ NoEmit,
+ };
+
// Define simple language options (with no accessors).
#define LANGOPT(Name, Bits, Default, Compatibility, Description) \
unsigned Name : Bits;
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 2f0e2b03fdb09..7e9dbb1a03dd8 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -6092,6 +6092,13 @@ defm backchain : BoolMOption<"backchain",
PosFlag<SetTrue, [], [ClangOption], "Link stack frames through backchain on System Z">,
NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
+def mzos_ppa1_name : Flag<["-"], "mzos-ppa1-name">, Group<m_Group>,
+ Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>,
+ HelpText<"Emit the function name in PPA1 on z/OS">;
+def mno_zos_ppa1_name : Flag<["-"], "mno-zos-ppa1-name">, Group<m_Group>,
+ Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>,
+ HelpText<"Do not emit the function name in PPA1 on z/OS">;
+
def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>;
def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>;
def momit_leaf_frame_pointer : Flag<["-"], "momit-leaf-frame-pointer">, Group<m_Group>,
diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp
index 37f6b3017f776..10f69ef379ba6 100644
--- a/clang/lib/CodeGen/Targets/SystemZ.cpp
+++ b/clang/lib/CodeGen/Targets/SystemZ.cpp
@@ -595,6 +595,19 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo {
SwiftInfo =
std::make_unique<SwiftABIInfo>(CGT, /*SwiftErrorInRegister=*/false);
}
+
+ void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
+ CodeGen::CodeGenModule &M) const override {
+ if (dyn_cast_or_null<FunctionDecl>(D)) {
+ if (auto *Fn = dyn_cast<llvm::Function>(GV)) {
+ auto ZOSPPA1Name = M.getLangOpts().getZOSPPA1Name();
+ if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::Emit)
+ Fn->addFnAttr("zos-ppa1-name", "all");
+ else if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::NoEmit)
+ Fn->addFnAttr("zos-ppa1-name", "none");
+ }
+ }
+ }
};
} // namespace
diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp
index da4aaa28cd1da..bc4ff08e6e2c6 100644
--- a/clang/lib/Driver/ToolChains/ZOS.cpp
+++ b/clang/lib/Driver/ToolChains/ZOS.cpp
@@ -49,6 +49,8 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs,
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
options::OPT_fno_sized_deallocation))
CC1Args.push_back("-fno-sized-deallocation");
+
+ DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, options::OPT_mno_zos_ppa1_name);
}
void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 50a2359c0e986..5afe8487a9a21 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -3822,6 +3822,11 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts,
if (Opts.IgnoreXCOFFVisibility)
GenerateArg(Consumer, OPT_mignore_xcoff_visibility);
+ if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::Emit)
+ GenerateArg(Consumer, OPT_mzos_ppa1_name);
+ else if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::NoEmit)
+ GenerateArg(Consumer, OPT_mno_zos_ppa1_name);
+
if (Opts.SignedOverflowBehavior == LangOptions::SOB_Trapping) {
GenerateArg(Consumer, OPT_ftrapv);
GenerateArg(Consumer, OPT_ftrapv_handler, Opts.OverflowHandler);
@@ -4241,6 +4246,16 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
if (T.isOSAIX() && (Args.hasArg(OPT_mignore_xcoff_visibility)))
Opts.IgnoreXCOFFVisibility = 1;
+ if (T.isOSzOS()) {
+ if (const Arg *A = Args.getLastArg(OPT_mzos_ppa1_name,
+ OPT_mno_zos_ppa1_name)) {
+ if (A->getOption().matches(OPT_mzos_ppa1_name))
+ Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit);
+ else
+ Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::NoEmit);
+ }
+ }
+
if (Args.hasArg(OPT_ftrapv)) {
Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping);
// Set the handler, if one is specified.
diff --git a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c
new file mode 100644
index 0000000000000..e49c6ae7a20ca
--- /dev/null
+++ b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c
@@ -0,0 +1,19 @@
+// REQUIRES: systemz-registered-target
+
+// test default
+// RUN: %clang_cc1 -triple s390x-ibm-zos -emit-llvm %s -o -\
+// RUN: | FileCheck %s -check-prefix=DEFAULT
+
+// test the positive and negative options
+// RUN: %clang_cc1 -triple s390x-ibm-zos -mzos-ppa1-name -emit-llvm %s -o -\
+// RUN: | FileCheck %s -check-prefix=EMIT-NAME
+// RUN: %clang_cc1 -triple s390x-ibm-zos -mno-zos-ppa1-name -emit-llvm %s -o -\
+// RUN: | FileCheck %s -check-prefix=NOT-EMIT-NAME
+
+// DEFAULT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"{{.*}}}
+// EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="all"{{.*}}}
+// NOT-EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}}
+
+int main() {
+ return 0;
+}
diff --git a/clang/test/Driver/zos-ppa1-name.c b/clang/test/Driver/zos-ppa1-name.c
new file mode 100644
index 0000000000000..a5a1f9ca2486e
--- /dev/null
+++ b/clang/test/Driver/zos-ppa1-name.c
@@ -0,0 +1,15 @@
+// REQUIRES: systemz-registered-target
+
+// RUN: %clang -### -target s390x-ibm-zos -mzos-ppa1-name -c %s 2>&1 \
+// RUN: | FileCheck -check-prefix=EMIT-NAME %s
+// EMIT-NAME: "-mzos-ppa1-name"
+
+// RUN: %clang -### -target s390x-ibm-zos -mno-zos-ppa1-name -c %s 2>&1 \
+// RUN: | FileCheck -check-prefix=NOT-EMIT-NAME %s
+// NOT-EMIT-NAME: "-mno-zos-ppa1-name"
+
+// RUN: not %clang -target systemz-unknown-elf -mzos-ppa1-name -c %s 2>&1 \
+// RUN: | FileCheck -check-prefix=ERR %s
+// RUN: not %clang -target systemz-unknown-elf -mno-zos-ppa1-name -c %s 2>&1 \
+// RUN: | FileCheck -check-prefix=ERR %s
+// ERR: error: unsupported option '-m{{.*}}zos-ppa1-name' for target 'systemz-unknown-elf'
diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
index 5c755db5f7f5f..6dbe55b63b2a8 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -1756,7 +1756,17 @@ void SystemZAsmPrinter::calculatePPA1() {
: "");
// Save the calculated values.
- if (MF->getFunction().hasName())
+ // Whether to emit the function name is decided by optimization level,
+ // unless it is explicitly required via -m[no-]zos-ppa1-name options.
+ bool IncludeFunctionName = !MF->getFunction().hasMinSize();
+ if (MF->getFunction().hasFnAttribute("zos-ppa1-name")) {
+ auto ZOSPPA1Name =
+ MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString();
+ assert((ZOSPPA1Name == "all" || ZOSPPA1Name == "none") &&
+ "Invalid value for attribute zos-ppa1-name.");
+ IncludeFunctionName = ZOSPPA1Name == "all";
+ }
+ if (MF->getFunction().hasName() && IncludeFunctionName)
Info.Name = MF->getFunction().getName();
Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N), true);
Info.EPMarker = OutContext.createTempSymbol(Twine("EPM_").concat(N), true);
diff --git a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
index 88790a9a45ddb..326de409bb2b3 100644
--- a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
+++ b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
@@ -50,3 +50,57 @@ define void @void_test() {
entry:
ret void
}
+
+; Attribute "zos-ppa1-name"="none" removes the function name from PPA1.
+; CHECK: * PPA1
+; CHECK-NEXT: L#PPA1_void_test_no_name_0 DS 0H
+; CHECK: * PPA1 Flags 4
+; CHECK-NEXT: DC XL1'80'
+; CHECK-NEXT: * Length/4 of Parms
+; CHECK-NEXT: DC XL2'0000'
+; CHECK-NEXT: * Length of Code
+; CHECK-NEXT: DC AD(L#void_test_no_name_end_0-L#EPM_void_test_no_name_0)
+; CHECK-NEXT: DC AD(L#EPM_void_test_no_name_0-L#PPA1_void_test_no_name_0)
+define void @void_test_no_name() #0 {
+entry:
+ ret void
+}
+attributes #0 = { "zos-ppa1-name"="none" }
+
+; Attribute minsize removes the function name from PPA1.
+; CHECK: * PPA1
+; CHECK-NEXT: L#PPA1_void_test_minsize_0 DS 0H
+; CHECK: * PPA1 Flags 4
+; CHECK-NEXT: DC XL1'80'
+; CHECK-NEXT: * Length/4 of Parms
+; CHECK-NEXT: DC XL2'0000'
+; CHECK-NEXT: * Length of Code
+; CHECK-NEXT: DC AD(L#void_test_minsize_end_0-L#EPM_void_test_minsize_0)
+; CHECK-NEXT: DC AD(L#EPM_void_test_minsize_0-L#PPA1_void_test_minsize_0)
+define void @void_test_minsize() #1 {
+entry:
+ ret void
+}
+attributes #1 = { minsize }
+
+; Attribute "zos-ppa1-name"="all" takes precedence over minsize,
+; and thus emits the function name in PPA1.
+; CHECK: * PPA1
+; CHECK-NEXT: L#PPA1_void_test_name_0 DS 0H
+; CHECK: * PPA1 Flags 4
+; CHECK-NEXT: * Bit 7: 1 = Name Length and Name
+; CHECK-NEXT: DC XL1'81'
+; CHECK-NEXT: * Length/4 of Parms
+; CHECK-NEXT: DC XL2'0000'
+; CHECK-NEXT: * Length of Code
+; CHECK-NEXT: DC AD(L#void_test_name_end_0-L#EPM_void_test_name_0)
+; CHECK-NEXT: * Length of Name
+; CHECK-NEXT: DC XL2'000E'
+; CHECK-NEXT: * Name of Function
+; CHECK-NEXT: DC XL14'A59689846DA385A2A36D95819485'
+; CHECK-NEXT: DC AD(L#EPM_void_test_name_0-L#PPA1_void_test_name_0)
+define void @void_test_name() #2 {
+entry:
+ ret void
+}
+attributes #2 = { "zos-ppa1-name"="all" minsize }
>From 089262cd088da84c33173ff554175de89da1be06 Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Fri, 3 Jul 2026 15:39:02 +0000
Subject: [PATCH 2/6] Fix format
---
clang/lib/Driver/ToolChains/ZOS.cpp | 3 ++-
clang/lib/Frontend/CompilerInvocation.cpp | 4 ++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp
index bc4ff08e6e2c6..107f150fa8274 100644
--- a/clang/lib/Driver/ToolChains/ZOS.cpp
+++ b/clang/lib/Driver/ToolChains/ZOS.cpp
@@ -50,7 +50,8 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs,
options::OPT_fno_sized_deallocation))
CC1Args.push_back("-fno-sized-deallocation");
- DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name, options::OPT_mno_zos_ppa1_name);
+ DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name,
+ options::OPT_mno_zos_ppa1_name);
}
void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 5afe8487a9a21..b84b082a8a361 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -4247,8 +4247,8 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
Opts.IgnoreXCOFFVisibility = 1;
if (T.isOSzOS()) {
- if (const Arg *A = Args.getLastArg(OPT_mzos_ppa1_name,
- OPT_mno_zos_ppa1_name)) {
+ if (const Arg *A =
+ Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) {
if (A->getOption().matches(OPT_mzos_ppa1_name))
Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit);
else
>From a46adc7cec7281c84ab44a808608fdd9fe0d6819 Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Mon, 6 Jul 2026 16:11:19 -0400
Subject: [PATCH 3/6] Move ZOSPPA1Name from LangOptions to CodeGenOptions.
---
clang/include/clang/Basic/CodeGenOptions.def | 4 +++
clang/include/clang/Basic/CodeGenOptions.h | 7 +++++
clang/include/clang/Basic/LangOptions.def | 2 --
clang/include/clang/Basic/LangOptions.h | 10 -------
clang/lib/CodeGen/Targets/SystemZ.cpp | 6 ++--
clang/lib/Frontend/CompilerInvocation.cpp | 30 ++++++++++----------
6 files changed, 29 insertions(+), 30 deletions(-)
diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def
index 49374efbeb28b..a3f1cd3b80b22 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -536,6 +536,10 @@ ENUM_CODEGENOPT(WinControlFlowGuardMechanism, ControlFlowGuardMechanism,
/// Adds attributes that prevent outlining (`-mno-outline`)
CODEGENOPT(DisableOutlining, 1, 0, Benign)
+/// Controlls the emission of function name in PPA1 on z/OS.
+ENUM_CODEGENOPT(ZOSPPA1Name, ZOSPPA1NameKind,
+ 2, ZOSPPA1NameKind::Default, Benign)
+
/// FIXME: Make DebugOptions its own top-level .def file.
#include "DebugOptions.def"
diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h
index 97d68877467fd..61019e2c163d7 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -227,6 +227,13 @@ class CodeGenOptions : public CodeGenOptionsBase {
NonStrictDefault = NonZero
};
+ enum class ZOSPPA1NameKind {
+ Default, /// Optimization for size level decides whether to
+ /// emit the function name in PPA1 on z/OS.
+ Emit, /// Emit the function name in PPA1 on z/OS.
+ NoEmit, /// Do not emit the function name in PPA1 on z/OS.
+ };
+
/// The code model to use (-mcmodel).
std::string CodeModel;
diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def
index 935c95846d4f6..b4d03a1a3e0b5 100644
--- a/clang/include/clang/Basic/LangOptions.def
+++ b/clang/include/clang/Basic/LangOptions.def
@@ -295,8 +295,6 @@ LANGOPT(ConstantNSDictionaryLiterals , 1, 0, NotCompatible, "constant dictionary
LANGOPT(InlineVisibilityHidden , 1, 0, Benign, "hidden visibility for inline C++ methods")
ENUM_LANGOPT(DefaultVisibilityExportMapping, DefaultVisiblityExportMapping, 2, DefaultVisiblityExportMapping::None, Benign, "controls mapping of default visibility to dllexport")
LANGOPT(IgnoreXCOFFVisibility, 1, 0, Benign, "All the visibility attributes that are specified in the source code are ignored in aix XCOFF.")
-ENUM_LANGOPT(ZOSPPA1Name, ZOSPPA1NameKind, 2, ZOSPPA1NameKind::Default, Benign,
- "Emit the function name in PPA1 on z/OS.")
LANGOPT(VisibilityInlinesHiddenStaticLocalVar, 1, 0, Benign,
"hidden visibility for static local variables in inline C++ "
"methods when -fvisibility-inlines hidden is enabled")
diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h
index fceac5c2946f2..6c86300fc5581 100644
--- a/clang/include/clang/Basic/LangOptions.h
+++ b/clang/include/clang/Basic/LangOptions.h
@@ -451,16 +451,6 @@ class LangOptionsBase {
Microsoft = 2,
};
- enum class ZOSPPA1NameKind {
- /// Optimization for size level decides whether to emit the function name
- /// in PPA1 on z/OS.
- Default,
- /// Emit the function name in PPA1 on z/OS.
- Emit,
- /// Do not emit the function name in PPA1 on z/OS.
- NoEmit,
- };
-
// Define simple language options (with no accessors).
#define LANGOPT(Name, Bits, Default, Compatibility, Description) \
unsigned Name : Bits;
diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp
index 10f69ef379ba6..d50ebf14a656a 100644
--- a/clang/lib/CodeGen/Targets/SystemZ.cpp
+++ b/clang/lib/CodeGen/Targets/SystemZ.cpp
@@ -600,10 +600,10 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo {
CodeGen::CodeGenModule &M) const override {
if (dyn_cast_or_null<FunctionDecl>(D)) {
if (auto *Fn = dyn_cast<llvm::Function>(GV)) {
- auto ZOSPPA1Name = M.getLangOpts().getZOSPPA1Name();
- if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::Emit)
+ auto ZOSPPA1Name = M.getCodeGenOpts().getZOSPPA1Name();
+ if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::Emit)
Fn->addFnAttr("zos-ppa1-name", "all");
- else if (ZOSPPA1Name == clang::LangOptions::ZOSPPA1NameKind::NoEmit)
+ else if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::NoEmit)
Fn->addFnAttr("zos-ppa1-name", "none");
}
}
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index b84b082a8a361..0bae762f5fd25 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1766,6 +1766,11 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts,
if (Opts.XCOFFReadOnlyPointers)
GenerateArg(Consumer, OPT_mxcoff_roptr);
+ if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::Emit)
+ GenerateArg(Consumer, OPT_mzos_ppa1_name);
+ else if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::NoEmit)
+ GenerateArg(Consumer, OPT_mno_zos_ppa1_name);
+
if (!Opts.OptRecordPasses.empty())
GenerateArg(Consumer, OPT_opt_record_passes, Opts.OptRecordPasses);
@@ -2193,6 +2198,16 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
<< A->getSpelling() << T.str();
}
+ if (T.isOSzOS()) {
+ if (const Arg *A =
+ Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) {
+ if (A->getOption().matches(OPT_mzos_ppa1_name))
+ Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::Emit);
+ else
+ Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::NoEmit);
+ }
+ }
+
bool NeedLocTracking = false;
if (!Opts.OptRecordFile.empty())
@@ -3822,11 +3837,6 @@ void CompilerInvocationBase::GenerateLangArgs(const LangOptions &Opts,
if (Opts.IgnoreXCOFFVisibility)
GenerateArg(Consumer, OPT_mignore_xcoff_visibility);
- if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::Emit)
- GenerateArg(Consumer, OPT_mzos_ppa1_name);
- else if (Opts.getZOSPPA1Name() == LangOptions::ZOSPPA1NameKind::NoEmit)
- GenerateArg(Consumer, OPT_mno_zos_ppa1_name);
-
if (Opts.SignedOverflowBehavior == LangOptions::SOB_Trapping) {
GenerateArg(Consumer, OPT_ftrapv);
GenerateArg(Consumer, OPT_ftrapv_handler, Opts.OverflowHandler);
@@ -4246,16 +4256,6 @@ bool CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
if (T.isOSAIX() && (Args.hasArg(OPT_mignore_xcoff_visibility)))
Opts.IgnoreXCOFFVisibility = 1;
- if (T.isOSzOS()) {
- if (const Arg *A =
- Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) {
- if (A->getOption().matches(OPT_mzos_ppa1_name))
- Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::Emit);
- else
- Opts.setZOSPPA1Name(LangOptions::ZOSPPA1NameKind::NoEmit);
- }
- }
-
if (Args.hasArg(OPT_ftrapv)) {
Opts.setSignedOverflowBehavior(LangOptions::SOB_Trapping);
// Set the handler, if one is specified.
>From 68125be6026665b7e1fd48cccdae30a0791b4eca Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Thu, 9 Jul 2026 17:42:02 +0000
Subject: [PATCH 4/6] Use marshalling in option handling and some other small
changes.
---
clang/include/clang/Basic/CodeGenOptions.def | 3 +-
clang/include/clang/Basic/CodeGenOptions.h | 7 ----
clang/include/clang/Options/Options.td | 11 +++---
clang/lib/CodeGen/CodeGenFunction.cpp | 3 ++
clang/lib/CodeGen/Targets/SystemZ.cpp | 13 -------
clang/lib/Driver/ToolChains/Clang.cpp | 9 +++++
clang/lib/Driver/ToolChains/ZOS.cpp | 3 --
clang/lib/Frontend/CompilerInvocation.cpp | 16 +-------
clang/test/CodeGen/SystemZ/zos-ppa1-name.c | 11 +++---
llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp | 14 ++-----
llvm/test/CodeGen/SystemZ/zos-ppa1.ll | 38 -------------------
11 files changed, 28 insertions(+), 100 deletions(-)
diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def
index a3f1cd3b80b22..87660f2015d96 100644
--- a/clang/include/clang/Basic/CodeGenOptions.def
+++ b/clang/include/clang/Basic/CodeGenOptions.def
@@ -537,8 +537,7 @@ ENUM_CODEGENOPT(WinControlFlowGuardMechanism, ControlFlowGuardMechanism,
CODEGENOPT(DisableOutlining, 1, 0, Benign)
/// Controlls the emission of function name in PPA1 on z/OS.
-ENUM_CODEGENOPT(ZOSPPA1Name, ZOSPPA1NameKind,
- 2, ZOSPPA1NameKind::Default, Benign)
+CODEGENOPT(ZOSPPA1Name, 1, 1, Benign)
/// FIXME: Make DebugOptions its own top-level .def file.
#include "DebugOptions.def"
diff --git a/clang/include/clang/Basic/CodeGenOptions.h b/clang/include/clang/Basic/CodeGenOptions.h
index 61019e2c163d7..97d68877467fd 100644
--- a/clang/include/clang/Basic/CodeGenOptions.h
+++ b/clang/include/clang/Basic/CodeGenOptions.h
@@ -227,13 +227,6 @@ class CodeGenOptions : public CodeGenOptionsBase {
NonStrictDefault = NonZero
};
- enum class ZOSPPA1NameKind {
- Default, /// Optimization for size level decides whether to
- /// emit the function name in PPA1 on z/OS.
- Emit, /// Emit the function name in PPA1 on z/OS.
- NoEmit, /// Do not emit the function name in PPA1 on z/OS.
- };
-
/// The code model to use (-mcmodel).
std::string CodeModel;
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 7e9dbb1a03dd8..07ba8677ef770 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -6092,12 +6092,11 @@ defm backchain : BoolMOption<"backchain",
PosFlag<SetTrue, [], [ClangOption], "Link stack frames through backchain on System Z">,
NegFlag<SetFalse>, BothFlags<[], [ClangOption, CC1Option]>>;
-def mzos_ppa1_name : Flag<["-"], "mzos-ppa1-name">, Group<m_Group>,
- Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>,
- HelpText<"Emit the function name in PPA1 on z/OS">;
-def mno_zos_ppa1_name : Flag<["-"], "mno-zos-ppa1-name">, Group<m_Group>,
- Flags<[TargetSpecific]>, Visibility<[ClangOption, CC1Option]>,
- HelpText<"Do not emit the function name in PPA1 on z/OS">;
+defm zos_ppa1_name : BoolMOption<"zos-ppa1-name",
+ CodeGenOpts<"ZOSPPA1Name">, DefaultTrue,
+ PosFlag<SetTrue, [], [], "Emit the function name in PPA1 on z/OS">,
+ NegFlag<SetFalse, [], [], "Do not emit the function name in PPA1 on z/OS">,
+ BothFlags<[], [ClangOption, CC1Option]>>;
def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>;
def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>;
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp
index b920266b59808..5c69f3bdd5656 100644
--- a/clang/lib/CodeGen/CodeGenFunction.cpp
+++ b/clang/lib/CodeGen/CodeGenFunction.cpp
@@ -1203,6 +1203,9 @@ void CodeGenFunction::StartFunction(GlobalDecl GD, QualType RetTy,
Fn->addFnAttr("packed-stack");
}
+ if (!CGM.getCodeGenOpts().ZOSPPA1Name)
+ Fn->addFnAttr("zos-ppa1-name", "none");
+
if (CGM.getCodeGenOpts().WarnStackSize != UINT_MAX &&
!CGM.getDiags().isIgnored(diag::warn_fe_backend_frame_larger_than, Loc))
Fn->addFnAttr("warn-stack-size",
diff --git a/clang/lib/CodeGen/Targets/SystemZ.cpp b/clang/lib/CodeGen/Targets/SystemZ.cpp
index d50ebf14a656a..37f6b3017f776 100644
--- a/clang/lib/CodeGen/Targets/SystemZ.cpp
+++ b/clang/lib/CodeGen/Targets/SystemZ.cpp
@@ -595,19 +595,6 @@ class ZOSXPLinkTargetCodeGenInfo : public TargetCodeGenInfo {
SwiftInfo =
std::make_unique<SwiftABIInfo>(CGT, /*SwiftErrorInRegister=*/false);
}
-
- void setTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
- CodeGen::CodeGenModule &M) const override {
- if (dyn_cast_or_null<FunctionDecl>(D)) {
- if (auto *Fn = dyn_cast<llvm::Function>(GV)) {
- auto ZOSPPA1Name = M.getCodeGenOpts().getZOSPPA1Name();
- if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::Emit)
- Fn->addFnAttr("zos-ppa1-name", "all");
- else if (ZOSPPA1Name == clang::CodeGenOptions::ZOSPPA1NameKind::NoEmit)
- Fn->addFnAttr("zos-ppa1-name", "none");
- }
- }
- }
};
} // namespace
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index fe01e6ffd59ef..481a3c67b3594 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -2168,6 +2168,15 @@ void Clang::AddSystemZTargetArgs(const ArgList &Args,
CmdArgs.push_back("-mfloat-abi");
CmdArgs.push_back("soft");
}
+
+ if (Arg *A = Args.getLastArg(options::OPT_mzos_ppa1_name,
+ options::OPT_mno_zos_ppa1_name)) {
+ if(!Triple.isOSzOS())
+ D.Diag(diag::err_drv_unsupported_opt_for_target)
+ << A->getSpelling() << Triple.str();
+ else
+ CmdArgs.push_back(A->getValue());
+ }
}
void Clang::AddX86TargetArgs(const ArgList &Args,
diff --git a/clang/lib/Driver/ToolChains/ZOS.cpp b/clang/lib/Driver/ToolChains/ZOS.cpp
index 107f150fa8274..da4aaa28cd1da 100644
--- a/clang/lib/Driver/ToolChains/ZOS.cpp
+++ b/clang/lib/Driver/ToolChains/ZOS.cpp
@@ -49,9 +49,6 @@ void ZOS::addClangTargetOptions(const ArgList &DriverArgs,
if (!DriverArgs.hasArgNoClaim(options::OPT_fsized_deallocation,
options::OPT_fno_sized_deallocation))
CC1Args.push_back("-fno-sized-deallocation");
-
- DriverArgs.AddLastArg(CC1Args, options::OPT_mzos_ppa1_name,
- options::OPT_mno_zos_ppa1_name);
}
void zos::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 0bae762f5fd25..4e877f73c3497 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -1766,11 +1766,6 @@ void CompilerInvocationBase::GenerateCodeGenArgs(const CodeGenOptions &Opts,
if (Opts.XCOFFReadOnlyPointers)
GenerateArg(Consumer, OPT_mxcoff_roptr);
- if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::Emit)
- GenerateArg(Consumer, OPT_mzos_ppa1_name);
- else if (Opts.getZOSPPA1Name() == CodeGenOptions::ZOSPPA1NameKind::NoEmit)
- GenerateArg(Consumer, OPT_mno_zos_ppa1_name);
-
if (!Opts.OptRecordPasses.empty())
GenerateArg(Consumer, OPT_opt_record_passes, Opts.OptRecordPasses);
@@ -2198,15 +2193,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
<< A->getSpelling() << T.str();
}
- if (T.isOSzOS()) {
- if (const Arg *A =
- Args.getLastArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name)) {
- if (A->getOption().matches(OPT_mzos_ppa1_name))
- Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::Emit);
- else
- Opts.setZOSPPA1Name(CodeGenOptions::ZOSPPA1NameKind::NoEmit);
- }
- }
+ if (!T.isOSzOS() && Args.hasArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name))
+ Opts.ZOSPPA1Name = true;
bool NeedLocTracking = false;
diff --git a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c
index e49c6ae7a20ca..1f5db9b13307d 100644
--- a/clang/test/CodeGen/SystemZ/zos-ppa1-name.c
+++ b/clang/test/CodeGen/SystemZ/zos-ppa1-name.c
@@ -2,17 +2,16 @@
// test default
// RUN: %clang_cc1 -triple s390x-ibm-zos -emit-llvm %s -o -\
-// RUN: | FileCheck %s -check-prefix=DEFAULT
+// RUN: | FileCheck %s -check-prefix=EMIT
// test the positive and negative options
// RUN: %clang_cc1 -triple s390x-ibm-zos -mzos-ppa1-name -emit-llvm %s -o -\
-// RUN: | FileCheck %s -check-prefix=EMIT-NAME
+// RUN: | FileCheck %s -check-prefix=EMIT
// RUN: %clang_cc1 -triple s390x-ibm-zos -mno-zos-ppa1-name -emit-llvm %s -o -\
-// RUN: | FileCheck %s -check-prefix=NOT-EMIT-NAME
+// RUN: | FileCheck %s -check-prefix=NOEMIT
-// DEFAULT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"{{.*}}}
-// EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="all"{{.*}}}
-// NOT-EMIT-NAME: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}}
+// EMIT-NOT: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}}
+// NOEMIT: attributes #0 = {{{.*}}"zos-ppa1-name"="none"{{.*}}}
int main() {
return 0;
diff --git a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
index 6dbe55b63b2a8..e93f2cfe5243d 100644
--- a/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZAsmPrinter.cpp
@@ -1756,17 +1756,9 @@ void SystemZAsmPrinter::calculatePPA1() {
: "");
// Save the calculated values.
- // Whether to emit the function name is decided by optimization level,
- // unless it is explicitly required via -m[no-]zos-ppa1-name options.
- bool IncludeFunctionName = !MF->getFunction().hasMinSize();
- if (MF->getFunction().hasFnAttribute("zos-ppa1-name")) {
- auto ZOSPPA1Name =
- MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString();
- assert((ZOSPPA1Name == "all" || ZOSPPA1Name == "none") &&
- "Invalid value for attribute zos-ppa1-name.");
- IncludeFunctionName = ZOSPPA1Name == "all";
- }
- if (MF->getFunction().hasName() && IncludeFunctionName)
+ if (MF->getFunction().hasName() &&
+ MF->getFunction().getFnAttribute("zos-ppa1-name").getValueAsString()
+ != "none")
Info.Name = MF->getFunction().getName();
Info.PPA1 = OutContext.createTempSymbol(Twine("PPA1_").concat(N), true);
Info.EPMarker = OutContext.createTempSymbol(Twine("EPM_").concat(N), true);
diff --git a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
index 326de409bb2b3..fa71aaf74d9e2 100644
--- a/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
+++ b/llvm/test/CodeGen/SystemZ/zos-ppa1.ll
@@ -66,41 +66,3 @@ entry:
ret void
}
attributes #0 = { "zos-ppa1-name"="none" }
-
-; Attribute minsize removes the function name from PPA1.
-; CHECK: * PPA1
-; CHECK-NEXT: L#PPA1_void_test_minsize_0 DS 0H
-; CHECK: * PPA1 Flags 4
-; CHECK-NEXT: DC XL1'80'
-; CHECK-NEXT: * Length/4 of Parms
-; CHECK-NEXT: DC XL2'0000'
-; CHECK-NEXT: * Length of Code
-; CHECK-NEXT: DC AD(L#void_test_minsize_end_0-L#EPM_void_test_minsize_0)
-; CHECK-NEXT: DC AD(L#EPM_void_test_minsize_0-L#PPA1_void_test_minsize_0)
-define void @void_test_minsize() #1 {
-entry:
- ret void
-}
-attributes #1 = { minsize }
-
-; Attribute "zos-ppa1-name"="all" takes precedence over minsize,
-; and thus emits the function name in PPA1.
-; CHECK: * PPA1
-; CHECK-NEXT: L#PPA1_void_test_name_0 DS 0H
-; CHECK: * PPA1 Flags 4
-; CHECK-NEXT: * Bit 7: 1 = Name Length and Name
-; CHECK-NEXT: DC XL1'81'
-; CHECK-NEXT: * Length/4 of Parms
-; CHECK-NEXT: DC XL2'0000'
-; CHECK-NEXT: * Length of Code
-; CHECK-NEXT: DC AD(L#void_test_name_end_0-L#EPM_void_test_name_0)
-; CHECK-NEXT: * Length of Name
-; CHECK-NEXT: DC XL2'000E'
-; CHECK-NEXT: * Name of Function
-; CHECK-NEXT: DC XL14'A59689846DA385A2A36D95819485'
-; CHECK-NEXT: DC AD(L#EPM_void_test_name_0-L#PPA1_void_test_name_0)
-define void @void_test_name() #2 {
-entry:
- ret void
-}
-attributes #2 = { "zos-ppa1-name"="all" minsize }
>From ef6cd2f6c46140363b67f8ab43773c6162b693c7 Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Thu, 9 Jul 2026 19:49:25 +0000
Subject: [PATCH 5/6] Use TargetSpecific instead of manually emitting error.
---
clang/include/clang/Options/Options.td | 2 +-
clang/lib/Driver/ToolChains/Clang.cpp | 11 +++--------
2 files changed, 4 insertions(+), 9 deletions(-)
diff --git a/clang/include/clang/Options/Options.td b/clang/include/clang/Options/Options.td
index 07ba8677ef770..04064b55d2516 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -6096,7 +6096,7 @@ defm zos_ppa1_name : BoolMOption<"zos-ppa1-name",
CodeGenOpts<"ZOSPPA1Name">, DefaultTrue,
PosFlag<SetTrue, [], [], "Emit the function name in PPA1 on z/OS">,
NegFlag<SetFalse, [], [], "Do not emit the function name in PPA1 on z/OS">,
- BothFlags<[], [ClangOption, CC1Option]>>;
+ BothFlags<[TargetSpecific], [ClangOption, CC1Option]>>;
def mno_warn_nonportable_cfstrings : Flag<["-"], "mno-warn-nonportable-cfstrings">, Group<m_Group>;
def mno_omit_leaf_frame_pointer : Flag<["-"], "mno-omit-leaf-frame-pointer">, Group<m_Group>;
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 481a3c67b3594..0d9bf360bbb9f 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -2169,14 +2169,9 @@ void Clang::AddSystemZTargetArgs(const ArgList &Args,
CmdArgs.push_back("soft");
}
- if (Arg *A = Args.getLastArg(options::OPT_mzos_ppa1_name,
- options::OPT_mno_zos_ppa1_name)) {
- if(!Triple.isOSzOS())
- D.Diag(diag::err_drv_unsupported_opt_for_target)
- << A->getSpelling() << Triple.str();
- else
- CmdArgs.push_back(A->getValue());
- }
+ if(Triple.isOSzOS())
+ Args.AddLastArg(CmdArgs, options::OPT_mzos_ppa1_name,
+ options::OPT_mno_zos_ppa1_name);
}
void Clang::AddX86TargetArgs(const ArgList &Args,
>From bdad0290af7d5bab36d847020e170e7cfa71190b Mon Sep 17 00:00:00 2001
From: sujianIBM <Jian.Su at ibm.com>
Date: Fri, 10 Jul 2026 12:29:37 +0000
Subject: [PATCH 6/6] Remove check of systems for option validation at cc1.
---
clang/lib/Frontend/CompilerInvocation.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 4e877f73c3497..50a2359c0e986 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -2193,9 +2193,6 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
<< A->getSpelling() << T.str();
}
- if (!T.isOSzOS() && Args.hasArg(OPT_mzos_ppa1_name, OPT_mno_zos_ppa1_name))
- Opts.ZOSPPA1Name = true;
-
bool NeedLocTracking = false;
if (!Opts.OptRecordFile.empty())
More information about the cfe-commits
mailing list