[clang] [SystemZ][Clang] Fix up clang lit tests to pass on z/OS or mark xfail/unsupported (PR #234370)

Sean Perry via cfe-commits cfe-commits at lists.llvm.org
Wed Oct 21 13:57:09 PDT 2026


https://github.com/perry-ca created https://github.com/llvm/llvm-project/pull/234370

Applying fixes to test cases to get them working for z/OS.  Common issues are:
- TLS support
  - TLS isn't supported in the compiler yet.  Update the tests to expect "not supported on target" errors
- trigraphs
  - trigraphs are always enabled on z/OS.  Mark the ones testing -fno-trigraphs as xfail.
- tests comparing IR files
  - GOFF object files record the compilation time.  That is passed in the IR.
  - add source epoch option so time stamps are same in both IR files

>From 3c33eac036b0e146c3dc071e8fa68559da2f57ee Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 00:45:01 -0400
Subject: [PATCH 01/17] [SystemZ] Clean up clang lit tests for z/OS

---
 clang/test/AST/ByteCode/command-line-options.cpp                | 1 +
 clang/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c   | 1 +
 clang/test/Analysis/null-deref-path-notes.cpp                   | 1 +
 clang/test/ClangScanDeps/logging-two-threads.c                  | 2 +-
 clang/test/ClangScanDeps/module-format.c                        | 2 +-
 clang/test/ClangScanDeps/modules-pch-compatibility.c            | 1 +
 clang/test/ClangScanDeps/modules-symlink.c                      | 2 +-
 clang/test/ClangScanDeps/multiple-commands.c                    | 1 +
 clang/test/ClangScanDeps/resource_directory.c                   | 1 +
 clang/test/CodeGen/2007-04-14-FNoBuiltin.c                      | 1 +
 clang/test/CodeGen/builtin-rename.c                             | 1 +
 clang/test/CodeGen/libcalls-fno-builtin.c                       | 1 +
 clang/test/CodeGen/nomathbuiltin.c                              | 1 +
 clang/test/CodeGen/variable-array.c                             | 1 +
 .../CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp  | 1 +
 clang/test/CoverageMapping/mcdc-error-conditions.cpp            | 1 +
 clang/test/Driver/crash-diagnostics-tar.c                       | 1 +
 clang/test/Driver/experimental-library-flag.cpp                 | 2 +-
 clang/test/Driver/no-objc-arr.m                                 | 1 +
 clang/test/ExtractAPI/invalid_utf8_doc_comment.c                | 1 +
 clang/test/Index/local-symbols.m                                | 1 +
 clang/test/Index/preamble-reparse-changed-module.m              | 1 +
 clang/test/Index/record-completion-invocation.c                 | 1 +
 clang/test/Index/record-parsing-invocation.c                    | 1 +
 clang/test/InstallAPI/binary-attributes.test                    | 1 +
 clang/test/InstallAPI/reexport-with-linker-symbols.test         | 1 +
 clang/test/InstallAPI/reexported-frameworks.test                | 1 +
 clang/test/Modules/DebugInfoSubmoduleImport.c                   | 2 +-
 clang/test/Modules/DebugInfoSubmodules.c                        | 2 +-
 clang/test/Modules/class-instantiate-no-change-02.cppm          | 1 +
 clang/test/Modules/class-instantiate-no-change.cppm             | 1 +
 clang/test/Modules/diagnostic-options-out-of-date.m             | 1 +
 clang/test/Modules/double-quotes.m                              | 1 +
 clang/test/Modules/framework-public-includes-private.m          | 1 +
 clang/test/Modules/modules-reduced-bmi.cppm                     | 1 +
 clang/test/Modules/no-external-type-id.cppm                     | 1 +
 clang/test/Modules/no-transitive-decl-change-2.cppm             | 1 +
 clang/test/Modules/no-transitive-decl-change-4.cppm             | 1 +
 clang/test/Modules/no-transitive-decls-change.cppm              | 1 +
 clang/test/Modules/no-transitive-identifier-change.cppm         | 1 +
 clang/test/Modules/no-transitive-source-location-change-2.cppm  | 1 +
 clang/test/Modules/no-transitive-source-location-change.cppm    | 1 +
 clang/test/Modules/no-transitive-type-change.cppm               | 1 +
 .../test/Modules/prune-non-affecting-module-map-files-textual.c | 1 +
 clang/test/Modules/prune-non-affecting-module-map-files.m       | 1 +
 clang/test/Modules/stress1.cpp                                  | 1 +
 clang/test/Parser/cxx2c-expansion-statements.cpp                | 1 +
 clang/test/Preprocessor/SOURCE_DATE_EPOCH.c                     | 1 +
 clang/test/Sema/warn-unused-but-set-static-global.cpp           | 1 +
 clang/test/SemaCXX/cxx2a-nttp-printing.cpp                      | 1 +
 clang/test/SemaCXX/thread-specifier.cpp                         | 1 +
 clang/test/Tooling/clang-diff-ast.cpp                           | 1 +
 clang/test/Tooling/clang-diff-basic.cpp                         | 1 +
 clang/test/Tooling/clang-diff-html.test                         | 1 +
 clang/test/Tooling/clang-diff-json.cpp                          | 1 +
 55 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/clang/test/AST/ByteCode/command-line-options.cpp b/clang/test/AST/ByteCode/command-line-options.cpp
index b64fc565e042ab..4c7a5021b80472 100644
--- a/clang/test/AST/ByteCode/command-line-options.cpp
+++ b/clang/test/AST/ByteCode/command-line-options.cpp
@@ -6,6 +6,7 @@
 /// All this should be true if the driver is used or -cc1.
 
 
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang -fsyntax-only -fexperimental-new-constant-interpreter %s -Xclang -verify=bc
 // RUN: %clang -cc1          -fexperimental-new-constant-interpreter %s         -verify=bc
 
diff --git a/clang/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c b/clang/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c
index 5842574793bce9..d0c088b03c51a9 100644
--- a/clang/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c
+++ b/clang/test/Analysis/diagnostics/sarif-multi-diagnostic-test.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t && mkdir %t && %clang_analyze_cc1 -analyzer-checker=core,optin.taint,debug.TaintTest,unix.Malloc %s -verify -analyzer-output=sarif-html -o %t%{fs-sep}out.sarif
 // RUN: cat %t%{fs-sep}out.sarif | %normalize_sarif | diff -U1 -b %S/Inputs/expected-sarif/sarif-multi-diagnostic-test.c.sarif -
 #include "../Inputs/system-header-simulator.h"
diff --git a/clang/test/Analysis/null-deref-path-notes.cpp b/clang/test/Analysis/null-deref-path-notes.cpp
index a37bbfe41a2c70..78b3315b8f35d5 100644
--- a/clang/test/Analysis/null-deref-path-notes.cpp
+++ b/clang/test/Analysis/null-deref-path-notes.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_analyze_cc1 -w -x c++ -analyzer-checker=core -analyzer-output=text -verify %s
 
 namespace pr34731 {
diff --git a/clang/test/ClangScanDeps/logging-two-threads.c b/clang/test/ClangScanDeps/logging-two-threads.c
index e3173deaddcf65..df7d21272daa0f 100644
--- a/clang/test/ClangScanDeps/logging-two-threads.c
+++ b/clang/test/ClangScanDeps/logging-two-threads.c
@@ -1,7 +1,7 @@
 // Test that when two threads are scanning two different TUs, we log an expected
 // number of events, and for each pcm file, the sequence of events is expected.
 
-// UNSUPPORTED: system-windows
+// UNSUPPORTED: system-windows, target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 // RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.template > %t/cdb.json
diff --git a/clang/test/ClangScanDeps/module-format.c b/clang/test/ClangScanDeps/module-format.c
index acfe195c4e080d..0028e1e765e2fd 100644
--- a/clang/test/ClangScanDeps/module-format.c
+++ b/clang/test/ClangScanDeps/module-format.c
@@ -4,7 +4,7 @@
 
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t && mkdir %t
 // RUN: cp %S/Inputs/modules-pch/* %t
diff --git a/clang/test/ClangScanDeps/modules-pch-compatibility.c b/clang/test/ClangScanDeps/modules-pch-compatibility.c
index 79d6ce24ce8bba..d300fa669c8411 100644
--- a/clang/test/ClangScanDeps/modules-pch-compatibility.c
+++ b/clang/test/ClangScanDeps/modules-pch-compatibility.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/ClangScanDeps/modules-symlink.c b/clang/test/ClangScanDeps/modules-symlink.c
index e4983bc6d0ccec..1edcc8f004b737 100644
--- a/clang/test/ClangScanDeps/modules-symlink.c
+++ b/clang/test/ClangScanDeps/modules-symlink.c
@@ -2,7 +2,7 @@
 // RUN: split-file %s %t
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: system-windows, target={{.*}}-aix{{.*}}
+// UNSUPPORTED: system-windows, target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 //--- cdb_pch.json
 [
diff --git a/clang/test/ClangScanDeps/multiple-commands.c b/clang/test/ClangScanDeps/multiple-commands.c
index b53e871afe6366..84d4e3ad616dc8 100644
--- a/clang/test/ClangScanDeps/multiple-commands.c
+++ b/clang/test/ClangScanDeps/multiple-commands.c
@@ -5,6 +5,7 @@
 // We use an x86_64-apple-darwin target to avoid host-dependent behaviour in
 // the driver. Platforms without an integrated assembler have different commands
 // REQUIRES: x86-registered-target
+// XFAIL: system-zos
 
 // RUN: rm -rf %t
 // RUN: split-file %s %t
diff --git a/clang/test/ClangScanDeps/resource_directory.c b/clang/test/ClangScanDeps/resource_directory.c
index 5c4b24f386de35..96ed4cd34f8f9c 100644
--- a/clang/test/ClangScanDeps/resource_directory.c
+++ b/clang/test/ClangScanDeps/resource_directory.c
@@ -1,5 +1,6 @@
 // Path seperator differences
 // UNSUPPORTED: system-windows
+// XFAIL: system-zos
 
 // RUN: rm -rf %t && mkdir %t
 // RUN: cp %S/Inputs/resource_directory/* %t
diff --git a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
index b95f41c52d27c6..936ea03e78b68e 100644
--- a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
+++ b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin -o - | FileCheck %s
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin-printf -o - | FileCheck %s
 // Check that -fno-builtin is honored.
diff --git a/clang/test/CodeGen/builtin-rename.c b/clang/test/CodeGen/builtin-rename.c
index 0092e54ef37d9b..54bdaed14b0cbd 100644
--- a/clang/test/CodeGen/builtin-rename.c
+++ b/clang/test/CodeGen/builtin-rename.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 %s -emit-llvm -o - | grep 'declare.*printf' | count 1
 // PR3612
 
diff --git a/clang/test/CodeGen/libcalls-fno-builtin.c b/clang/test/CodeGen/libcalls-fno-builtin.c
index 6aef0efa1d9b7c..3e908d2f2eeded 100644
--- a/clang/test/CodeGen/libcalls-fno-builtin.c
+++ b/clang/test/CodeGen/libcalls-fno-builtin.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -emit-llvm -fno-builtin -o - %s | FileCheck --check-prefixes=GLOBAL,CHECK %s
 // RUN: %clang_cc1 -emit-llvm -fno-builtin-ceil -fno-builtin-copysign -fno-builtin-cos \
 // RUN:  -fno-builtin-fabs -fno-builtin-floor -fno-builtin-strcat -fno-builtin-strncat \
diff --git a/clang/test/CodeGen/nomathbuiltin.c b/clang/test/CodeGen/nomathbuiltin.c
index 35e7c567e68d27..d9a82c634bc1e4 100644
--- a/clang/test/CodeGen/nomathbuiltin.c
+++ b/clang/test/CodeGen/nomathbuiltin.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fno-math-builtin -emit-llvm -o - %s | FileCheck %s
 
 // Check that the -fno-math-builtin option for -cc1 is working properly.
diff --git a/clang/test/CodeGen/variable-array.c b/clang/test/CodeGen/variable-array.c
index c2a7c2ffb93f47..7d9229bcbdc5e8 100644
--- a/clang/test/CodeGen/variable-array.c
+++ b/clang/test/CodeGen/variable-array.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -emit-llvm < %s | grep puts | count 4
 
 int puts(const char *);
diff --git a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
index a44267196eeedc..83340d0a3a4e2b 100644
--- a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
+++ b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
@@ -1,4 +1,5 @@
 // REQUIRES: amdgpu-registered-target
+// XFAIL: target={{.*}}-zos{{.*}}
 // Test that the accelerator code selection pass only gets invoked after linking
 
 // Ensure Pass HipStdParAcceleratorCodeSelectionPass is not invoked in PreLink.
diff --git a/clang/test/CoverageMapping/mcdc-error-conditions.cpp b/clang/test/CoverageMapping/mcdc-error-conditions.cpp
index 8f5d6bd66897c9..a551b4188e2a44 100644
--- a/clang/test/CoverageMapping/mcdc-error-conditions.cpp
+++ b/clang/test/CoverageMapping/mcdc-error-conditions.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -fcoverage-mcdc -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s 2>&1| FileCheck %s --check-prefixes=CHECK,COND7,TV
 
 // RUN: %clang_cc1 -fmcdc-max-test-vectors=8 -triple %itanium_abi_triple -std=c++11 -fcoverage-mcdc -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s 2>&1| FileCheck %s --check-prefixes=CHECK,COND7,TV
diff --git a/clang/test/Driver/crash-diagnostics-tar.c b/clang/test/Driver/crash-diagnostics-tar.c
index 931c3524ed1558..97ec95f3e1a71f 100644
--- a/clang/test/Driver/crash-diagnostics-tar.c
+++ b/clang/test/Driver/crash-diagnostics-tar.c
@@ -1,4 +1,5 @@
 // REQUIRES: backtrace
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t && mkdir %t
 // RUN: cd %t
diff --git a/clang/test/Driver/experimental-library-flag.cpp b/clang/test/Driver/experimental-library-flag.cpp
index 62b007516897e4..40f3b32e942303 100644
--- a/clang/test/Driver/experimental-library-flag.cpp
+++ b/clang/test/Driver/experimental-library-flag.cpp
@@ -3,7 +3,7 @@
 // XFAIL: target={{.*-windows-msvc.*}}, target={{.*-(ps4|ps5)}}
 
 // For some reason, this fails with a core dump on AIX. This needs to be investigated.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: %clangxx -fexperimental-library -stdlib=libc++ -### %s 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-LIBCXX %s
 // RUN: %clangxx -fexperimental-library -stdlib=libstdc++ -### %s 2>&1 | FileCheck --check-prefixes=CHECK,CHECK-LIBSTDCXX %s
diff --git a/clang/test/Driver/no-objc-arr.m b/clang/test/Driver/no-objc-arr.m
index deaf6b9e00ad1d..a5f523e1b42096 100644
--- a/clang/test/Driver/no-objc-arr.m
+++ b/clang/test/Driver/no-objc-arr.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang  -Werror -fobjc-arc -fsyntax-only -fno-objc-arc -Xclang -verify %s
 // expected-no-diagnostics
 
diff --git a/clang/test/ExtractAPI/invalid_utf8_doc_comment.c b/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
index f3f09ea9cbb56f..0bfa355fa82b1e 100644
--- a/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
+++ b/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: %clang_cc1 -extract-api --pretty-sgf -verify \
 // RUN:   -triple arm64-apple-macosx -x c-header %s -o %t/output.symbols.json
diff --git a/clang/test/Index/local-symbols.m b/clang/test/Index/local-symbols.m
index bc74e75919bea2..a644b8c9a507ce 100644
--- a/clang/test/Index/local-symbols.m
+++ b/clang/test/Index/local-symbols.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: c-index-test -test-load-source local %s | FileCheck %s
 
 // The method 'bar' was also being reported outside the @implementation
diff --git a/clang/test/Index/preamble-reparse-changed-module.m b/clang/test/Index/preamble-reparse-changed-module.m
index 88e837afe6b0ae..02e9c0c71be515 100644
--- a/clang/test/Index/preamble-reparse-changed-module.m
+++ b/clang/test/Index/preamble-reparse-changed-module.m
@@ -1,4 +1,5 @@
 // UNSUPPORTED: system-windows
+// XFAIL: target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t
 // RUN: mkdir -p %t/mod
diff --git a/clang/test/Index/record-completion-invocation.c b/clang/test/Index/record-completion-invocation.c
index 4b667134fa2d4a..40dc09dc25109b 100644
--- a/clang/test/Index/record-completion-invocation.c
+++ b/clang/test/Index/record-completion-invocation.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
diff --git a/clang/test/Index/record-parsing-invocation.c b/clang/test/Index/record-parsing-invocation.c
index e0c4cdb05fb005..96ccfadadb868c 100644
--- a/clang/test/Index/record-parsing-invocation.c
+++ b/clang/test/Index/record-parsing-invocation.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
diff --git a/clang/test/InstallAPI/binary-attributes.test b/clang/test/InstallAPI/binary-attributes.test
index fe107199c1d05a..e79e5acd89c3fe 100644
--- a/clang/test/InstallAPI/binary-attributes.test
+++ b/clang/test/InstallAPI/binary-attributes.test
@@ -1,3 +1,4 @@
+; XFAIL: target={{.*}}-zos{{.*}}
 ; RUN: rm -rf %t 
 ; RUN: split-file %s %t
 ; RUN: mkdir -p %t/System/Library/Frameworks 
diff --git a/clang/test/InstallAPI/reexport-with-linker-symbols.test b/clang/test/InstallAPI/reexport-with-linker-symbols.test
index ab7ac65af82e26..2dcb2faed9a77e 100644
--- a/clang/test/InstallAPI/reexport-with-linker-symbols.test
+++ b/clang/test/InstallAPI/reexport-with-linker-symbols.test
@@ -1,3 +1,4 @@
+; XFAIL: target={{.*}}-zos{{.*}}
 ; RUN: rm -rf %t
 ; RUN: split-file %s %t
 
diff --git a/clang/test/InstallAPI/reexported-frameworks.test b/clang/test/InstallAPI/reexported-frameworks.test
index 41c4f539c0b1fd..ad0005451e365d 100644
--- a/clang/test/InstallAPI/reexported-frameworks.test
+++ b/clang/test/InstallAPI/reexported-frameworks.test
@@ -1,3 +1,4 @@
+; XFAIL: target={{.*}}-zos{{.*}}
 ; RUN: rm -rf %t
 ; RUN: split-file %s %t
 ; RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json
diff --git a/clang/test/Modules/DebugInfoSubmoduleImport.c b/clang/test/Modules/DebugInfoSubmoduleImport.c
index 91cb11ef5958ac..3026a115180461 100644
--- a/clang/test/Modules/DebugInfoSubmoduleImport.c
+++ b/clang/test/Modules/DebugInfoSubmoduleImport.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-aix{{.*}}
+// XFAIL: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: %clang_cc1 -fmodules -fmodule-format=obj -debug-info-kind=limited -dwarf-ext-refs \
 // RUN:     -fimplicit-module-maps -x c -fmodules-cache-path=%t -I %S/Inputs \
diff --git a/clang/test/Modules/DebugInfoSubmodules.c b/clang/test/Modules/DebugInfoSubmodules.c
index f66dc7a96ef0a4..cefeb8efa7c562 100644
--- a/clang/test/Modules/DebugInfoSubmodules.c
+++ b/clang/test/Modules/DebugInfoSubmodules.c
@@ -3,7 +3,7 @@
 // RUN:     -fimplicit-module-maps -x c -fmodules-cache-path=%t -I %S/Inputs \
 // RUN:     %s -mllvm -debug-only=pchcontainer -emit-llvm -o %t.ll \
 // RUN:     2>&1 | FileCheck %s
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 // REQUIRES: asserts
 #include "DebugSubmoduleA.h"
 
diff --git a/clang/test/Modules/class-instantiate-no-change-02.cppm b/clang/test/Modules/class-instantiate-no-change-02.cppm
index 9188408af6ec8b..03bb5f8bbe7dd7 100644
--- a/clang/test/Modules/class-instantiate-no-change-02.cppm
+++ b/clang/test/Modules/class-instantiate-no-change-02.cppm
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/class-instantiate-no-change.cppm b/clang/test/Modules/class-instantiate-no-change.cppm
index 6ea7d24252ab56..bf7357028c73cf 100644
--- a/clang/test/Modules/class-instantiate-no-change.cppm
+++ b/clang/test/Modules/class-instantiate-no-change.cppm
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/diagnostic-options-out-of-date.m b/clang/test/Modules/diagnostic-options-out-of-date.m
index fd98a8f99d6672..707998212bbb26 100644
--- a/clang/test/Modules/diagnostic-options-out-of-date.m
+++ b/clang/test/Modules/diagnostic-options-out-of-date.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // Build A.pcm
 // RUN: %clang_cc1 -Werror -Wno-conversion -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs %s -fmodules-disable-diagnostic-validation
diff --git a/clang/test/Modules/double-quotes.m b/clang/test/Modules/double-quotes.m
index b5b4db9911b661..46534660f9720a 100644
--- a/clang/test/Modules/double-quotes.m
+++ b/clang/test/Modules/double-quotes.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir %t
 
diff --git a/clang/test/Modules/framework-public-includes-private.m b/clang/test/Modules/framework-public-includes-private.m
index f6ddaf42ab8565..420dd87a1bfb76 100644
--- a/clang/test/Modules/framework-public-includes-private.m
+++ b/clang/test/Modules/framework-public-includes-private.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir %t
 
diff --git a/clang/test/Modules/modules-reduced-bmi.cppm b/clang/test/Modules/modules-reduced-bmi.cppm
index a2636f6df988ee..54445f38d4c352 100644
--- a/clang/test/Modules/modules-reduced-bmi.cppm
+++ b/clang/test/Modules/modules-reduced-bmi.cppm
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/no-external-type-id.cppm b/clang/test/Modules/no-external-type-id.cppm
index 2c05769e4f0821..41a65032fbbdb5 100644
--- a/clang/test/Modules/no-external-type-id.cppm
+++ b/clang/test/Modules/no-external-type-id.cppm
@@ -1,5 +1,6 @@
 // Testing that we won't record the type ID from external modules.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 // RUN: cd %t
diff --git a/clang/test/Modules/no-transitive-decl-change-2.cppm b/clang/test/Modules/no-transitive-decl-change-2.cppm
index fe29d9169201d6..56053a642335bc 100644
--- a/clang/test/Modules/no-transitive-decl-change-2.cppm
+++ b/clang/test/Modules/no-transitive-decl-change-2.cppm
@@ -1,5 +1,6 @@
 // Test that adding a new unused decl within reduced BMI may not produce a transitive change.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-decl-change-4.cppm b/clang/test/Modules/no-transitive-decl-change-4.cppm
index bb7e47f32669e7..f06dc18d405222 100644
--- a/clang/test/Modules/no-transitive-decl-change-4.cppm
+++ b/clang/test/Modules/no-transitive-decl-change-4.cppm
@@ -1,5 +1,6 @@
 // Test that adding a new unused decl within reduced BMI may not produce a transitive change.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-decls-change.cppm b/clang/test/Modules/no-transitive-decls-change.cppm
index 83594b09ea7896..4807a297fd39ac 100644
--- a/clang/test/Modules/no-transitive-decls-change.cppm
+++ b/clang/test/Modules/no-transitive-decls-change.cppm
@@ -1,6 +1,7 @@
 // Testing that changing a declaration in an unused module file won't change 
 // the BMI of the current module file.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-identifier-change.cppm b/clang/test/Modules/no-transitive-identifier-change.cppm
index 541c8ae754960b..bc7bd3a3bc7339 100644
--- a/clang/test/Modules/no-transitive-identifier-change.cppm
+++ b/clang/test/Modules/no-transitive-identifier-change.cppm
@@ -1,6 +1,7 @@
 // Testing that adding an new identifier in an unused module file won't change 
 // the BMI of the current module file.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-source-location-change-2.cppm b/clang/test/Modules/no-transitive-source-location-change-2.cppm
index f16b945a04d69e..15f36428b4bc1e 100644
--- a/clang/test/Modules/no-transitive-source-location-change-2.cppm
+++ b/clang/test/Modules/no-transitive-source-location-change-2.cppm
@@ -1,6 +1,7 @@
 // Testing that adding a new line in a module interface unit won't cause the BMI
 // of consuming module unit changes.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-source-location-change.cppm b/clang/test/Modules/no-transitive-source-location-change.cppm
index 2a84ef6a912f54..596bd47384057e 100644
--- a/clang/test/Modules/no-transitive-source-location-change.cppm
+++ b/clang/test/Modules/no-transitive-source-location-change.cppm
@@ -1,6 +1,7 @@
 // Testing that adding a new line in a module interface unit won't cause the BMI
 // of consuming module unit changes.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-type-change.cppm b/clang/test/Modules/no-transitive-type-change.cppm
index 9ec72e851b17dc..13008b2593716d 100644
--- a/clang/test/Modules/no-transitive-type-change.cppm
+++ b/clang/test/Modules/no-transitive-type-change.cppm
@@ -1,6 +1,7 @@
 // Testing that changing a type in an unused module file won't change 
 // the BMI of the current module file.
 //
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/prune-non-affecting-module-map-files-textual.c b/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
index 90ceb089eb5dec..b18a1efffad492 100644
--- a/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
+++ b/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
@@ -1,6 +1,7 @@
 // This test checks that a module map with a textual header can be marked as
 // non-affecting.
 
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/Modules/prune-non-affecting-module-map-files.m b/clang/test/Modules/prune-non-affecting-module-map-files.m
index ba2b3a306eaf46..8895b42f940b07 100644
--- a/clang/test/Modules/prune-non-affecting-module-map-files.m
+++ b/clang/test/Modules/prune-non-affecting-module-map-files.m
@@ -1,6 +1,7 @@
 // Check that the presence of non-affecting module map files does not affect the
 // contents of PCM files.
 
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/Modules/stress1.cpp b/clang/test/Modules/stress1.cpp
index c47e04dcf50973..8563b8f789f4e7 100644
--- a/clang/test/Modules/stress1.cpp
+++ b/clang/test/Modules/stress1.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: cd %S
 //
diff --git a/clang/test/Parser/cxx2c-expansion-statements.cpp b/clang/test/Parser/cxx2c-expansion-statements.cpp
index 3a28b3268fd7a1..49a8280b10c61a 100644
--- a/clang/test/Parser/cxx2c-expansion-statements.cpp
+++ b/clang/test/Parser/cxx2c-expansion-statements.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 %s -std=c++2c -fsyntax-only -verify
 namespace std {
 template <typename T>
diff --git a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
index 30aec44a535d71..44384fe784c15e 100644
--- a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
+++ b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -source-date-epoch 0 -E %s | FileCheck %s --check-prefix=19700101
 
 // 19700101:      const char date[] = "Jan  1 1970";
diff --git a/clang/test/Sema/warn-unused-but-set-static-global.cpp b/clang/test/Sema/warn-unused-but-set-static-global.cpp
index e0354848bdd99a..1c47e1d2abd8e6 100644
--- a/clang/test/Sema/warn-unused-but-set-static-global.cpp
+++ b/clang/test/Sema/warn-unused-but-set-static-global.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fsyntax-only -Wunused-but-set-variable -verify -std=c++17 %s
 // RUN: %clang_cc1 -fsyntax-only -Wunused-but-set-variable -Wno-unused-but-set-global -verify=no-global -std=c++17 %s
 // no-global-no-diagnostics
diff --git a/clang/test/SemaCXX/cxx2a-nttp-printing.cpp b/clang/test/SemaCXX/cxx2a-nttp-printing.cpp
index cace0bc94f3909..09360ca739f3c8 100644
--- a/clang/test/SemaCXX/cxx2a-nttp-printing.cpp
+++ b/clang/test/SemaCXX/cxx2a-nttp-printing.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify
 
 template <int N> struct Str {
diff --git a/clang/test/SemaCXX/thread-specifier.cpp b/clang/test/SemaCXX/thread-specifier.cpp
index 2b909ecd175d04..d476349f70c49a 100644
--- a/clang/test/SemaCXX/thread-specifier.cpp
+++ b/clang/test/SemaCXX/thread-specifier.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fsyntax-only -std=c++23 -verify %s
 
 namespace GH140509 {
diff --git a/clang/test/Tooling/clang-diff-ast.cpp b/clang/test/Tooling/clang-diff-ast.cpp
index a8efda50a4052e..51b85f33ad9a9a 100644
--- a/clang/test/Tooling/clang-diff-ast.cpp
+++ b/clang/test/Tooling/clang-diff-ast.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: clang-diff -ast-dump %s -- -std=c++11 | FileCheck %s
 
 
diff --git a/clang/test/Tooling/clang-diff-basic.cpp b/clang/test/Tooling/clang-diff-basic.cpp
index a0c0163530ffaa..3fa80685db2395 100644
--- a/clang/test/Tooling/clang-diff-basic.cpp
+++ b/clang/test/Tooling/clang-diff-basic.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: clang-diff -dump-matches %S/Inputs/clang-diff-basic-src.cpp %s -- | FileCheck %s
 
 // CHECK: Match TranslationUnitDecl{{.*}} to TranslationUnitDecl
diff --git a/clang/test/Tooling/clang-diff-html.test b/clang/test/Tooling/clang-diff-html.test
index 00d9e07d2fcf4b..e364dde5f98e3c 100644
--- a/clang/test/Tooling/clang-diff-html.test
+++ b/clang/test/Tooling/clang-diff-html.test
@@ -1,3 +1,4 @@
+XFAIL: target={{.*}}-zos{{.*}}
 RUN: clang-diff -html %S/Inputs/clang-diff-basic-src.cpp %S/clang-diff-basic.cpp -- | FileCheck %s
 
 CHECK: <pre><div id='L' class='code'><span id='L0' tid='R0' title='TranslationUnitDecl
diff --git a/clang/test/Tooling/clang-diff-json.cpp b/clang/test/Tooling/clang-diff-json.cpp
index cc2bb0805e53fc..c09e15850aef27 100644
--- a/clang/test/Tooling/clang-diff-json.cpp
+++ b/clang/test/Tooling/clang-diff-json.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: clang-diff -ast-dump-json %s -- \
 // RUN: | %python -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' \
 // RUN: | FileCheck %s

>From 888bce58ec03db689f3ec5f3ac8a8b91ecf14bed Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 17:21:25 -0400
Subject: [PATCH 02/17] [SystemZ] Clean up more clang lit tests for z/OS

---
 .../conflict-preserves-unrelated-zero-length-insert.test        | 1 +
 .../ssaf-src-edit-merge/conflict-stderr-without-sarif.test      | 1 +
 .../test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test | 1 +
 .../Scalable/ssaf-src-edit-merge/identical-overlap.test         | 1 +
 .../Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test   | 1 +
 .../Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test  | 1 +
 .../Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test | 1 +
 .../pre-dedup-identical-non-zero-length.test                    | 1 +
 .../ssaf-src-edit-merge/pre-dedup-zero-length-insert.test       | 1 +
 .../range-overlap-cluster-of-three-sarif.test                   | 1 +
 .../ssaf-src-edit-merge/range-overlap-conflict-sarif.test       | 1 +
 .../ssaf-src-edit-merge/single-input-internal-conflict.test     | 1 +
 .../Analysis/Scalable/ssaf-src-edit-merge/single-input.test     | 1 +
 .../Scalable/ssaf-src-edit-merge/three-input-all-conflict.test  | 1 +
 .../ssaf-src-edit-merge/three-input-conflict-sarif.test         | 1 +
 .../two-conflicts-different-offsets-sarif.test                  | 1 +
 .../Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test  | 1 +
 .../Scalable/ssaf-src-edit-merge/two-input-conflict.test        | 1 +
 clang/test/ClangScanDeps/modules-debug-dir.c                    | 1 +
 clang/test/ClangScanDeps/modules-no-undeclared-includes.c       | 2 +-
 clang/test/ClangScanDeps/modules-pch-common-submodule.c         | 2 +-
 clang/test/ClangScanDeps/modules-pch-common-via-submodule.c     | 2 +-
 clang/test/ClangScanDeps/modules-pch-dangling.c                 | 2 +-
 clang/test/ClangScanDeps/modules-pch.c                          | 2 +-
 clang/test/ClangScanDeps/print-timing.c                         | 1 +
 clang/test/CodeGenCXX/module-initializer-elision.cpp            | 1 +
 clang/test/CoverageMapping/coroutine.cpp                        | 1 +
 clang/test/DebugInfo/CXX/byval.cpp                              | 1 +
 clang/test/Driver/hip-version.hip                               | 2 +-
 clang/test/Driver/nostdincxx.cpp                                | 1 +
 clang/test/Frontend/backend-attribute-error-warning-optimize.c  | 1 +
 clang/test/Frontend/backend-attribute-error-warning.c           | 1 +
 clang/test/Frontend/ir-support.c                                | 1 +
 clang/test/Modules/ASTSignature.c                               | 1 +
 clang/test/Modules/cxx20-fatal-module-loader-error.cpp          | 1 +
 clang/test/Modules/lsv-debuginfo.cpp                            | 2 +-
 clang/test/Modules/stress-objc.m                                | 1 +
 clang/test/PCH/debug-info-pch-path.c                            | 2 +-
 clang/test/PCH/gch-probe.c                                      | 2 +-
 clang/test/PCH/pragma-redefine-extname.c                        | 1 +
 clang/test/Sema/LifetimeSafety/noescape-violation.cpp           | 1 +
 clang/test/Sema/attr-nonblocking-constraints.cpp                | 1 +
 clang/test/SemaCUDA/managed-var.cu                              | 1 +
 clang/test/SemaCXX/cxx2c-expansion-stmts.cpp                    | 1 +
 clang/test/SemaCXX/expansion-statements-local-extern-decls.cpp  | 1 +
 45 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
index bdda153a0034b0..1bcbd6084ddf0b 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
@@ -13,6 +13,7 @@
 # (file, offset, length, text), not just (file, offset), or it will
 # collaterally delete this unrelated insertion.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
index 9d58c9f0fbc853..5afefe7e701c84 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
@@ -2,6 +2,7 @@
 # NOT pass --sarif-conflicts-out=. Stderr cluster line is still emitted
 # and drop-all still applies; no SARIF file is created at any path.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
index c45b8001797c00..9818df738c07e4 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
@@ -2,6 +2,7 @@
 # a valid TranslationUnitReplacements with an empty Replacements sequence.
 # Per spec the MainSourceFile is the shared value when all inputs agree.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
index 300a6f9add3927..b327a8db75ba40 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
@@ -2,6 +2,7 @@
 # inputs collapse to one in the merged output. No "conflict:" line because
 # this is a textbook dedup, not a conflict.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
index 3353d4b4470be3..e7172d710ed00d 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
@@ -2,6 +2,7 @@
 # with results: [] (empty array). The merged YAML retains both replacements.
 # Tool exits 0; stderr contains no `conflict:` line.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
index 314d35ff1b77e8..33f56a13e25380 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
@@ -2,6 +2,7 @@
 # Conflicts are detected per-(file, offset) so disjoint offsets yield no
 # tool-level "conflict:" line, and exit is 0.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # Real source file required so groupReplacements doesn't drop the entries.
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
index 84d21423269573..655cf6137504de 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
@@ -3,6 +3,7 @@
 # the deterministic sort in flattenFileChanges and the dedup-by-key
 # logic don't inadvertently depend on input order.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
index ce802f23ecae77..94d27f817b77f2 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
@@ -3,6 +3,7 @@
 # also covers this through library-side overlap detection; this test pins the
 # pre-dedup pass's contract that the dedup applies regardless of length.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
index a545ad37b385fe..b657df5719016b 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
@@ -5,6 +5,7 @@
 # where clang-apply-replacements' groupReplacements skipped dedup for plain
 # TUReplacements and AtomicChange::replace stacked the duplicates.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
index 742ac28ef1a543..8a6cad0730fc2f 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
@@ -13,6 +13,7 @@
 ## This is the regression guard for transitive merging — it cannot be
 ## exercised by any pairwise-only fixture.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
index 19c04176fd37b9..836a2e1970eeb4 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
@@ -9,6 +9,7 @@
 # This is the mandatory regression guard for the range-overlap cluster
 # definition — it cannot be exercised by any same-offset fixture.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
index e14ead37fdf1a9..c26ebbf6a075ee 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
@@ -3,6 +3,7 @@
 # this as a within-input conflict and drops one; the tool reports the
 # cluster on stderr and exits 0.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
index 55c9399373f2a6..86d4553ac5e68a 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
@@ -2,6 +2,7 @@
 # "If exactly one input is given, the tool SHALL still produce a one-run
 # merged document equivalent to that input."
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
index cc59927176736f..0526a9996c062a 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
@@ -4,6 +4,7 @@
 # a "conflict:" line for the (file, offset) cluster with the full cluster
 # size (3) and exits 0.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
index 2e7e32c16425b2..acbfe8444fb650 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
@@ -1,6 +1,7 @@
 # Three inputs all conflict pairwise at (foo.cpp, 10) — drop-all removes
 # all three from the merged YAML; SARIF result lists three relatedLocations.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
index e6d080018463c8..68a433c4ab2eb7 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
@@ -3,6 +3,7 @@
 # removes all four; SARIF has two results, ordered by (file, min-offset)
 # ascending so the offset-10 cluster precedes the offset-30 cluster.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
index 742557b3b2dc29..343c1f73dbab2b 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
@@ -4,6 +4,7 @@
 # given by --sarif-conflicts-out= containing one error-level result with
 # two relatedLocations (one per dropped candidate).
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
index 029973d57f3b2e..23bb5d88d87c92 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
@@ -4,6 +4,7 @@
 # tool emits one "conflict:" cluster line for that (file, offset) with the
 # full cluster size, and exits 0.
 
+# XFAIL: target={{.*}}-zos{{.*}}
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/ClangScanDeps/modules-debug-dir.c b/clang/test/ClangScanDeps/modules-debug-dir.c
index e2a0e1b7a5b012..372abf99d5090c 100644
--- a/clang/test/ClangScanDeps/modules-debug-dir.c
+++ b/clang/test/ClangScanDeps/modules-debug-dir.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 // RUN: sed -e "s|DIR|%/t|g" %t/cdb.json.in > %t/cdb.json
diff --git a/clang/test/ClangScanDeps/modules-no-undeclared-includes.c b/clang/test/ClangScanDeps/modules-no-undeclared-includes.c
index 8039e98e71626a..0f106b0c6acbda 100644
--- a/clang/test/ClangScanDeps/modules-no-undeclared-includes.c
+++ b/clang/test/ClangScanDeps/modules-no-undeclared-includes.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
diff --git a/clang/test/ClangScanDeps/modules-pch-common-submodule.c b/clang/test/ClangScanDeps/modules-pch-common-submodule.c
index 78c60c8f3629f2..c3bb088da7558e 100644
--- a/clang/test/ClangScanDeps/modules-pch-common-submodule.c
+++ b/clang/test/ClangScanDeps/modules-pch-common-submodule.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // Check that when depending on a precompiled module, we depend on the
 // **top-level** module. Submodules don't have some information present (for
diff --git a/clang/test/ClangScanDeps/modules-pch-common-via-submodule.c b/clang/test/ClangScanDeps/modules-pch-common-via-submodule.c
index 6d266f15c3ec9f..1fbffa45ffc13a 100644
--- a/clang/test/ClangScanDeps/modules-pch-common-via-submodule.c
+++ b/clang/test/ClangScanDeps/modules-pch-common-via-submodule.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // Check that we discover dependency on a precompiled module when it's imported
 // by a **submodule** instead of a top-level module.
diff --git a/clang/test/ClangScanDeps/modules-pch-dangling.c b/clang/test/ClangScanDeps/modules-pch-dangling.c
index b96a759ff3c6d1..b408247b06b701 100644
--- a/clang/test/ClangScanDeps/modules-pch-dangling.c
+++ b/clang/test/ClangScanDeps/modules-pch-dangling.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // This test checks that the dependency scanner can handle larger amount of
 // explicitly built modules retrieved from the PCH.
diff --git a/clang/test/ClangScanDeps/modules-pch.c b/clang/test/ClangScanDeps/modules-pch.c
index 0235c2104bb076..91833f3a99fe03 100644
--- a/clang/test/ClangScanDeps/modules-pch.c
+++ b/clang/test/ClangScanDeps/modules-pch.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t && mkdir %t
 // RUN: cp %S/Inputs/modules-pch/* %t
diff --git a/clang/test/ClangScanDeps/print-timing.c b/clang/test/ClangScanDeps/print-timing.c
index fa2a433b955370..f17327b279bc3f 100644
--- a/clang/test/ClangScanDeps/print-timing.c
+++ b/clang/test/ClangScanDeps/print-timing.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/CodeGenCXX/module-initializer-elision.cpp b/clang/test/CodeGenCXX/module-initializer-elision.cpp
index 7f6d0b68cf55d4..f81d9c4623ba9b 100644
--- a/clang/test/CodeGenCXX/module-initializer-elision.cpp
+++ b/clang/test/CodeGenCXX/module-initializer-elision.cpp
@@ -1,4 +1,5 @@
 // UNSUPPORTED: target={{.*}}-apple-darwin
+// XFAIL: target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t
 // RUN: split-file %s %t
diff --git a/clang/test/CoverageMapping/coroutine.cpp b/clang/test/CoverageMapping/coroutine.cpp
index d322bc351a7276..3e8b4afde2fc23 100644
--- a/clang/test/CoverageMapping/coroutine.cpp
+++ b/clang/test/CoverageMapping/coroutine.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -triple x86_64-unknown-linux-gnu -std=c++20 -emit-llvm -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping %s -o - | FileCheck %s
 
 namespace std {
diff --git a/clang/test/DebugInfo/CXX/byval.cpp b/clang/test/DebugInfo/CXX/byval.cpp
index ac122ec567da79..2bf919b5d6cfe7 100644
--- a/clang/test/DebugInfo/CXX/byval.cpp
+++ b/clang/test/DebugInfo/CXX/byval.cpp
@@ -1,4 +1,5 @@
 // FIXME: Check IR rather than asm, then triple is not needed.
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang --target=%itanium_abi_triple -g -S %s -o - | FileCheck %s
 // Test to check presence of debug info for byval parameter.
 class DAG {
diff --git a/clang/test/Driver/hip-version.hip b/clang/test/Driver/hip-version.hip
index 9d5833142fe9dc..bdcd098eea7a1e 100644
--- a/clang/test/Driver/hip-version.hip
+++ b/clang/test/Driver/hip-version.hip
@@ -1,6 +1,6 @@
 // REQUIRES: x86-registered-target
 // REQUIRES: amdgpu-registered-target
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: %clang -v --rocm-path=%S/Inputs/rocm 2>&1 \
 // RUN:   | FileCheck -check-prefixes=FOUND %s
diff --git a/clang/test/Driver/nostdincxx.cpp b/clang/test/Driver/nostdincxx.cpp
index 94d74f230eb16c..73ebe7947ea63b 100644
--- a/clang/test/Driver/nostdincxx.cpp
+++ b/clang/test/Driver/nostdincxx.cpp
@@ -8,3 +8,4 @@
 
 // MSVC, PS4, PS5 have C++ headers in the same directory as C headers.
 // UNSUPPORTED: ms-sdk, target={{.*-(ps4|ps5)}}
+// XFAIL: target={{.*}}-zos{{.*}}
diff --git a/clang/test/Frontend/backend-attribute-error-warning-optimize.c b/clang/test/Frontend/backend-attribute-error-warning-optimize.c
index d5a8d57e36c964..6ff840a4651fb5 100644
--- a/clang/test/Frontend/backend-attribute-error-warning-optimize.c
+++ b/clang/test/Frontend/backend-attribute-error-warning-optimize.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -O2 -verify -emit-codegen-only %s
 
 __attribute__((error("oh no foo"))) void foo(void);
diff --git a/clang/test/Frontend/backend-attribute-error-warning.c b/clang/test/Frontend/backend-attribute-error-warning.c
index c3c7803479aac9..ff5a0c4f1643b9 100644
--- a/clang/test/Frontend/backend-attribute-error-warning.c
+++ b/clang/test/Frontend/backend-attribute-error-warning.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -verify=expected,enabled -emit-codegen-only %s
 // RUN: %clang_cc1 -verify -emit-codegen-only -Wno-attribute-warning %s
 
diff --git a/clang/test/Frontend/ir-support.c b/clang/test/Frontend/ir-support.c
index d0c7dfa418cad2..3c819cf21d68dc 100644
--- a/clang/test/Frontend/ir-support.c
+++ b/clang/test/Frontend/ir-support.c
@@ -4,6 +4,7 @@
 // We strip differing '.file' directives before comparing.
 
 // Reference output:
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -S -o - %s | grep -v '\.file' > %t.s
 
 // LLVM bitcode:
diff --git a/clang/test/Modules/ASTSignature.c b/clang/test/Modules/ASTSignature.c
index 11d7c5c9d43d53..5a45cbfbbdea33 100644
--- a/clang/test/Modules/ASTSignature.c
+++ b/clang/test/Modules/ASTSignature.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: %clang_cc1             -iquote %S/Inputs/ASTHash/ -fsyntax-only \
 // RUN:   -fmodules -fimplicit-module-maps -fmodules-strict-context-hash \
diff --git a/clang/test/Modules/cxx20-fatal-module-loader-error.cpp b/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
index ea2b3a2274fd3b..d022620f107c89 100644
--- a/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
+++ b/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: touch %t/A.pcm
diff --git a/clang/test/Modules/lsv-debuginfo.cpp b/clang/test/Modules/lsv-debuginfo.cpp
index 40455727ecddae..6394e7e8cc7a0c 100644
--- a/clang/test/Modules/lsv-debuginfo.cpp
+++ b/clang/test/Modules/lsv-debuginfo.cpp
@@ -1,5 +1,5 @@
 // Test C++ -gmodules debug info in the PCMs with local submodule visibility.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 // REQUIRES: asserts
 // RUN: rm -rf %t
 // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++14 \
diff --git a/clang/test/Modules/stress-objc.m b/clang/test/Modules/stress-objc.m
index edbebd3576a95e..ef628e21ce0ea3 100644
--- a/clang/test/Modules/stress-objc.m
+++ b/clang/test/Modules/stress-objc.m
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: cd %S
 
 // RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00.pch -fno-pch-timestamp
diff --git a/clang/test/PCH/debug-info-pch-path.c b/clang/test/PCH/debug-info-pch-path.c
index 0a4e9d8146f003..0b1cd038a4b7f6 100644
--- a/clang/test/PCH/debug-info-pch-path.c
+++ b/clang/test/PCH/debug-info-pch-path.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // RUN: rm -rf %t
 // RUN: mkdir %t
diff --git a/clang/test/PCH/gch-probe.c b/clang/test/PCH/gch-probe.c
index 370abd26d25174..44896904b7cb14 100644
--- a/clang/test/PCH/gch-probe.c
+++ b/clang/test/PCH/gch-probe.c
@@ -1,6 +1,6 @@
 // Unsupported on AIX because we don't support the requisite "__clangast"
 // section in XCOFF yet.
-// UNSUPPORTED: target={{.*}}-aix{{.*}}
+// UNSUPPORTED: target={{.*}}-aix{{.*}}, target={{.*}}-zos{{.*}}
 
 // For GCC compatibility, clang should probe also with the .gch extension.
 // RUN: %clang -x c-header -c %s -o %t.h.gch
diff --git a/clang/test/PCH/pragma-redefine-extname.c b/clang/test/PCH/pragma-redefine-extname.c
index 70f03444388a73..baee0a6cc30335 100644
--- a/clang/test/PCH/pragma-redefine-extname.c
+++ b/clang/test/PCH/pragma-redefine-extname.c
@@ -1,4 +1,5 @@
 /// Test this without pch.
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -triple=x86_64-unknown-linux -include %S/pragma-redefine-extname.h %s -verify -emit-llvm -o - | FileCheck %s
 
 /// Test with pch.
diff --git a/clang/test/Sema/LifetimeSafety/noescape-violation.cpp b/clang/test/Sema/LifetimeSafety/noescape-violation.cpp
index 9978850a92e51b..5ed358142feb9a 100644
--- a/clang/test/Sema/LifetimeSafety/noescape-violation.cpp
+++ b/clang/test/Sema/LifetimeSafety/noescape-violation.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fsyntax-only -flifetime-safety-inference -Wlifetime-safety-noescape -Wlifetime-safety-annotation-placement -verify %s
 
 #include "Inputs/lifetime-analysis.h"
diff --git a/clang/test/Sema/attr-nonblocking-constraints.cpp b/clang/test/Sema/attr-nonblocking-constraints.cpp
index 400057768523c5..710dac0b6d91a5 100644
--- a/clang/test/Sema/attr-nonblocking-constraints.cpp
+++ b/clang/test/Sema/attr-nonblocking-constraints.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fsyntax-only -fblocks -fcxx-exceptions -std=c++20 -verify -Wfunction-effects -Wno-vla-extension %s
 // These are in a separate file because errors (e.g. incompatible attributes) currently prevent
 // the FXAnalysis pass from running at all.
diff --git a/clang/test/SemaCUDA/managed-var.cu b/clang/test/SemaCUDA/managed-var.cu
index 5e05c0d25f6e33..756662e0fe8ea9 100644
--- a/clang/test/SemaCUDA/managed-var.cu
+++ b/clang/test/SemaCUDA/managed-var.cu
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -fsyntax-only -verify -x hip %s
 // RUN: %clang_cc1 -fsyntax-only -fcuda-is-device -verify -x hip %s
 // RUN: %clang_cc1 -fsyntax-only -fgpu-rdc -verify -x hip %s
diff --git a/clang/test/SemaCXX/cxx2c-expansion-stmts.cpp b/clang/test/SemaCXX/cxx2c-expansion-stmts.cpp
index c195f662597b59..f7985b6b810398 100644
--- a/clang/test/SemaCXX/cxx2c-expansion-stmts.cpp
+++ b/clang/test/SemaCXX/cxx2c-expansion-stmts.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 %s -std=c++2c -fsyntax-only -fdeclspec -fblocks -Wno-vla-cxx-extension -fconstexpr-steps=10000 -verify=expected,old-interp
 // RUN: %clang_cc1 %s -std=c++2c -fsyntax-only -fdeclspec -fblocks -Wno-vla-cxx-extension -fconstexpr-steps=10000 -verify=expected,new-interp -fexperimental-new-constant-interpreter
 namespace std {
diff --git a/clang/test/SemaCXX/expansion-statements-local-extern-decls.cpp b/clang/test/SemaCXX/expansion-statements-local-extern-decls.cpp
index a99db79b1b72fa..1f4c5ea9dc68b2 100644
--- a/clang/test/SemaCXX/expansion-statements-local-extern-decls.cpp
+++ b/clang/test/SemaCXX/expansion-statements-local-extern-decls.cpp
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 %s -I %S/Inputs -std=c++2c -fsyntax-only -verify
 
 int wibble(); // #wibble_decl

>From 96ea673e57ba65117315bb57b5bd7f6c89441f3b Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 22:56:45 -0400
Subject: [PATCH 03/17] mark XPASS on lop as system-zos

---
 .../conflict-preserves-unrelated-zero-length-insert.test        | 2 +-
 .../ssaf-src-edit-merge/conflict-stderr-without-sarif.test      | 2 +-
 .../test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test | 2 +-
 .../Scalable/ssaf-src-edit-merge/identical-overlap.test         | 2 +-
 .../Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test   | 2 +-
 .../Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test  | 2 +-
 .../Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test | 2 +-
 .../pre-dedup-identical-non-zero-length.test                    | 2 +-
 .../ssaf-src-edit-merge/pre-dedup-zero-length-insert.test       | 2 +-
 .../range-overlap-cluster-of-three-sarif.test                   | 2 +-
 .../ssaf-src-edit-merge/range-overlap-conflict-sarif.test       | 2 +-
 .../ssaf-src-edit-merge/single-input-internal-conflict.test     | 2 +-
 .../Analysis/Scalable/ssaf-src-edit-merge/single-input.test     | 2 +-
 .../Scalable/ssaf-src-edit-merge/three-input-all-conflict.test  | 2 +-
 .../ssaf-src-edit-merge/three-input-conflict-sarif.test         | 2 +-
 .../two-conflicts-different-offsets-sarif.test                  | 2 +-
 .../Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test  | 2 +-
 .../Scalable/ssaf-src-edit-merge/two-input-conflict.test        | 2 +-
 clang/test/ClangScanDeps/modules-pch-compatibility.c            | 2 +-
 clang/test/ClangScanDeps/print-timing.c                         | 2 +-
 clang/test/CodeGen/2007-04-14-FNoBuiltin.c                      | 2 +-
 clang/test/CodeGen/builtin-rename.c                             | 2 +-
 clang/test/CodeGen/libcalls-fno-builtin.c                       | 2 +-
 clang/test/CodeGen/nomathbuiltin.c                              | 2 +-
 clang/test/CodeGen/variable-array.c                             | 2 +-
 .../CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp  | 2 +-
 clang/test/CoverageMapping/coroutine.cpp                        | 2 +-
 clang/test/CoverageMapping/mcdc-error-conditions.cpp            | 2 +-
 clang/test/Driver/amdgpu-hip-system-arch.c                      | 2 +-
 clang/test/Driver/crash-diagnostics-tar.c                       | 2 +-
 clang/test/Driver/no-objc-arr.m                                 | 2 +-
 clang/test/Driver/nostdincxx.cpp                                | 2 +-
 clang/test/Driver/nvptx-cuda-system-arch.c                      | 2 +-
 clang/test/Driver/openmp-system-arch.c                          | 2 +-
 clang/test/ExtractAPI/invalid_utf8_doc_comment.c                | 2 +-
 clang/test/Frontend/ir-support.c                                | 2 +-
 clang/test/Index/preamble-reparse-changed-module.m              | 2 +-
 clang/test/Index/record-completion-invocation.c                 | 2 +-
 clang/test/Index/record-parsing-invocation.c                    | 2 +-
 clang/test/InstallAPI/binary-attributes.test                    | 2 +-
 clang/test/InstallAPI/reexport-with-linker-symbols.test         | 2 +-
 clang/test/InstallAPI/reexported-frameworks.test                | 2 +-
 clang/test/Modules/ASTSignature.c                               | 2 +-
 clang/test/Modules/class-instantiate-no-change-02.cppm          | 2 +-
 clang/test/Modules/class-instantiate-no-change.cppm             | 2 +-
 clang/test/Modules/cxx20-fatal-module-loader-error.cpp          | 2 +-
 clang/test/Modules/diagnostic-options-out-of-date.m             | 2 +-
 clang/test/Modules/double-quotes.m                              | 2 +-
 clang/test/Modules/framework-public-includes-private.m          | 2 +-
 clang/test/Modules/modules-reduced-bmi.cppm                     | 2 +-
 clang/test/Modules/no-external-type-id.cppm                     | 2 +-
 clang/test/Modules/no-transitive-decl-change-2.cppm             | 2 +-
 clang/test/Modules/no-transitive-decl-change-4.cppm             | 2 +-
 clang/test/Modules/no-transitive-decls-change.cppm              | 2 +-
 clang/test/Modules/no-transitive-identifier-change.cppm         | 2 +-
 clang/test/Modules/no-transitive-source-location-change-2.cppm  | 2 +-
 clang/test/Modules/no-transitive-source-location-change.cppm    | 2 +-
 clang/test/Modules/no-transitive-type-change.cppm               | 2 +-
 .../test/Modules/prune-non-affecting-module-map-files-textual.c | 2 +-
 clang/test/Modules/prune-non-affecting-module-map-files.m       | 2 +-
 clang/test/Modules/stress-objc.m                                | 2 +-
 clang/test/Modules/stress1.cpp                                  | 2 +-
 clang/test/PCH/pragma-redefine-extname.c                        | 2 +-
 clang/test/Preprocessor/SOURCE_DATE_EPOCH.c                     | 2 +-
 clang/test/Tooling/clang-diff-ast.cpp                           | 2 +-
 clang/test/Tooling/clang-diff-basic.cpp                         | 2 +-
 clang/test/Tooling/clang-diff-html.test                         | 2 +-
 67 files changed, 67 insertions(+), 67 deletions(-)

diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
index 1bcbd6084ddf0b..458f54f056a830 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
@@ -13,7 +13,7 @@
 # (file, offset, length, text), not just (file, offset), or it will
 # collaterally delete this unrelated insertion.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
index 5afefe7e701c84..15fb1e89a38584 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
@@ -2,7 +2,7 @@
 # NOT pass --sarif-conflicts-out=. Stderr cluster line is still emitted
 # and drop-all still applies; no SARIF file is created at any path.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
index 9818df738c07e4..4b738e67a111e5 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
@@ -2,7 +2,7 @@
 # a valid TranslationUnitReplacements with an empty Replacements sequence.
 # Per spec the MainSourceFile is the shared value when all inputs agree.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
index b327a8db75ba40..3840d8a25cc447 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
@@ -2,7 +2,7 @@
 # inputs collapse to one in the merged output. No "conflict:" line because
 # this is a textbook dedup, not a conflict.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
index e7172d710ed00d..b58e49aca34925 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
@@ -2,7 +2,7 @@
 # with results: [] (empty array). The merged YAML retains both replacements.
 # Tool exits 0; stderr contains no `conflict:` line.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
index 33f56a13e25380..e72f59859443ca 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
@@ -2,7 +2,7 @@
 # Conflicts are detected per-(file, offset) so disjoint offsets yield no
 # tool-level "conflict:" line, and exit is 0.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # Real source file required so groupReplacements doesn't drop the entries.
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
index 655cf6137504de..b158b675467443 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
@@ -3,7 +3,7 @@
 # the deterministic sort in flattenFileChanges and the dedup-by-key
 # logic don't inadvertently depend on input order.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
index 94d27f817b77f2..9c4f497ba3fff0 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
@@ -3,7 +3,7 @@
 # also covers this through library-side overlap detection; this test pins the
 # pre-dedup pass's contract that the dedup applies regardless of length.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
index b657df5719016b..27441d6edb084f 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
@@ -5,7 +5,7 @@
 # where clang-apply-replacements' groupReplacements skipped dedup for plain
 # TUReplacements and AtomicChange::replace stacked the duplicates.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
index 8a6cad0730fc2f..40441807d408ba 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
@@ -13,7 +13,7 @@
 ## This is the regression guard for transitive merging — it cannot be
 ## exercised by any pairwise-only fixture.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
index 836a2e1970eeb4..f79670f877d6e3 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
@@ -9,7 +9,7 @@
 # This is the mandatory regression guard for the range-overlap cluster
 # definition — it cannot be exercised by any same-offset fixture.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
index c26ebbf6a075ee..9f48bf2dabca7c 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
@@ -3,7 +3,7 @@
 # this as a within-input conflict and drops one; the tool reports the
 # cluster on stderr and exits 0.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
index 86d4553ac5e68a..9a8f05fa513e71 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
@@ -2,7 +2,7 @@
 # "If exactly one input is given, the tool SHALL still produce a one-run
 # merged document equivalent to that input."
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
index 0526a9996c062a..9b74feedb5ebed 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
@@ -4,7 +4,7 @@
 # a "conflict:" line for the (file, offset) cluster with the full cluster
 # size (3) and exits 0.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
index acbfe8444fb650..918bb2533e16d7 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
@@ -1,7 +1,7 @@
 # Three inputs all conflict pairwise at (foo.cpp, 10) — drop-all removes
 # all three from the merged YAML; SARIF result lists three relatedLocations.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
index 68a433c4ab2eb7..fd08981661acf1 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
@@ -3,7 +3,7 @@
 # removes all four; SARIF has two results, ordered by (file, min-offset)
 # ascending so the offset-10 cluster precedes the offset-30 cluster.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
index 343c1f73dbab2b..85a3a3bb9a1d62 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
@@ -4,7 +4,7 @@
 # given by --sarif-conflicts-out= containing one error-level result with
 # two relatedLocations (one per dropped candidate).
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
index 23bb5d88d87c92..eb89efff9e2d01 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
@@ -4,7 +4,7 @@
 # tool emits one "conflict:" cluster line for that (file, offset) with the
 # full cluster size, and exits 0.
 
-# XFAIL: target={{.*}}-zos{{.*}}
+# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/ClangScanDeps/modules-pch-compatibility.c b/clang/test/ClangScanDeps/modules-pch-compatibility.c
index d300fa669c8411..4fb050e5dc274f 100644
--- a/clang/test/ClangScanDeps/modules-pch-compatibility.c
+++ b/clang/test/ClangScanDeps/modules-pch-compatibility.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/ClangScanDeps/print-timing.c b/clang/test/ClangScanDeps/print-timing.c
index f17327b279bc3f..053d4dd52ef1d1 100644
--- a/clang/test/ClangScanDeps/print-timing.c
+++ b/clang/test/ClangScanDeps/print-timing.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
index 936ea03e78b68e..12173ca25a723e 100644
--- a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
+++ b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin -o - | FileCheck %s
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin-printf -o - | FileCheck %s
 // Check that -fno-builtin is honored.
diff --git a/clang/test/CodeGen/builtin-rename.c b/clang/test/CodeGen/builtin-rename.c
index 54bdaed14b0cbd..bebe7586b33349 100644
--- a/clang/test/CodeGen/builtin-rename.c
+++ b/clang/test/CodeGen/builtin-rename.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 %s -emit-llvm -o - | grep 'declare.*printf' | count 1
 // PR3612
 
diff --git a/clang/test/CodeGen/libcalls-fno-builtin.c b/clang/test/CodeGen/libcalls-fno-builtin.c
index 3e908d2f2eeded..7941c621e46541 100644
--- a/clang/test/CodeGen/libcalls-fno-builtin.c
+++ b/clang/test/CodeGen/libcalls-fno-builtin.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm -fno-builtin -o - %s | FileCheck --check-prefixes=GLOBAL,CHECK %s
 // RUN: %clang_cc1 -emit-llvm -fno-builtin-ceil -fno-builtin-copysign -fno-builtin-cos \
 // RUN:  -fno-builtin-fabs -fno-builtin-floor -fno-builtin-strcat -fno-builtin-strncat \
diff --git a/clang/test/CodeGen/nomathbuiltin.c b/clang/test/CodeGen/nomathbuiltin.c
index d9a82c634bc1e4..9c2d647253505b 100644
--- a/clang/test/CodeGen/nomathbuiltin.c
+++ b/clang/test/CodeGen/nomathbuiltin.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -fno-math-builtin -emit-llvm -o - %s | FileCheck %s
 
 // Check that the -fno-math-builtin option for -cc1 is working properly.
diff --git a/clang/test/CodeGen/variable-array.c b/clang/test/CodeGen/variable-array.c
index 7d9229bcbdc5e8..9d979e7492cc0b 100644
--- a/clang/test/CodeGen/variable-array.c
+++ b/clang/test/CodeGen/variable-array.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm < %s | grep puts | count 4
 
 int puts(const char *);
diff --git a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
index 83340d0a3a4e2b..4ea49de1a094a7 100644
--- a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
+++ b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
@@ -1,5 +1,5 @@
 // REQUIRES: amdgpu-registered-target
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // Test that the accelerator code selection pass only gets invoked after linking
 
 // Ensure Pass HipStdParAcceleratorCodeSelectionPass is not invoked in PreLink.
diff --git a/clang/test/CoverageMapping/coroutine.cpp b/clang/test/CoverageMapping/coroutine.cpp
index 3e8b4afde2fc23..6e564865108698 100644
--- a/clang/test/CoverageMapping/coroutine.cpp
+++ b/clang/test/CoverageMapping/coroutine.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -triple x86_64-unknown-linux-gnu -std=c++20 -emit-llvm -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping %s -o - | FileCheck %s
 
 namespace std {
diff --git a/clang/test/CoverageMapping/mcdc-error-conditions.cpp b/clang/test/CoverageMapping/mcdc-error-conditions.cpp
index a551b4188e2a44..8c0cc01509c379 100644
--- a/clang/test/CoverageMapping/mcdc-error-conditions.cpp
+++ b/clang/test/CoverageMapping/mcdc-error-conditions.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -fcoverage-mcdc -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s 2>&1| FileCheck %s --check-prefixes=CHECK,COND7,TV
 
 // RUN: %clang_cc1 -fmcdc-max-test-vectors=8 -triple %itanium_abi_triple -std=c++11 -fcoverage-mcdc -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s 2>&1| FileCheck %s --check-prefixes=CHECK,COND7,TV
diff --git a/clang/test/Driver/amdgpu-hip-system-arch.c b/clang/test/Driver/amdgpu-hip-system-arch.c
index 0949159d460923..78e9f3eb7fbda9 100644
--- a/clang/test/Driver/amdgpu-hip-system-arch.c
+++ b/clang/test/Driver/amdgpu-hip-system-arch.c
@@ -1,6 +1,6 @@
 // Needs chmod
 // UNSUPPORTED: system-windows
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 
 // RUN: mkdir -p %t
 // RUN: cp %S/Inputs/amdgpu-arch/amdgpu_arch_fail %t/
diff --git a/clang/test/Driver/crash-diagnostics-tar.c b/clang/test/Driver/crash-diagnostics-tar.c
index 97ec95f3e1a71f..9567ce0b72979b 100644
--- a/clang/test/Driver/crash-diagnostics-tar.c
+++ b/clang/test/Driver/crash-diagnostics-tar.c
@@ -1,5 +1,5 @@
 // REQUIRES: backtrace
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t && mkdir %t
 // RUN: cd %t
diff --git a/clang/test/Driver/no-objc-arr.m b/clang/test/Driver/no-objc-arr.m
index a5f523e1b42096..3a519abd70409f 100644
--- a/clang/test/Driver/no-objc-arr.m
+++ b/clang/test/Driver/no-objc-arr.m
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang  -Werror -fobjc-arc -fsyntax-only -fno-objc-arc -Xclang -verify %s
 // expected-no-diagnostics
 
diff --git a/clang/test/Driver/nostdincxx.cpp b/clang/test/Driver/nostdincxx.cpp
index 73ebe7947ea63b..24db38a5f21aa1 100644
--- a/clang/test/Driver/nostdincxx.cpp
+++ b/clang/test/Driver/nostdincxx.cpp
@@ -8,4 +8,4 @@
 
 // MSVC, PS4, PS5 have C++ headers in the same directory as C headers.
 // UNSUPPORTED: ms-sdk, target={{.*-(ps4|ps5)}}
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
diff --git a/clang/test/Driver/nvptx-cuda-system-arch.c b/clang/test/Driver/nvptx-cuda-system-arch.c
index dd6c0646272102..2f4f6d1c073d93 100644
--- a/clang/test/Driver/nvptx-cuda-system-arch.c
+++ b/clang/test/Driver/nvptx-cuda-system-arch.c
@@ -1,5 +1,5 @@
 // UNSUPPORTED: system-windows
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 
 // RUN: mkdir -p %t
 // RUN: cp %S/Inputs/nvptx-arch/nvptx_arch_fail %t/
diff --git a/clang/test/Driver/openmp-system-arch.c b/clang/test/Driver/openmp-system-arch.c
index 464d93dfa9489e..a24799fbab35b7 100644
--- a/clang/test/Driver/openmp-system-arch.c
+++ b/clang/test/Driver/openmp-system-arch.c
@@ -1,6 +1,6 @@
 // Needs chmod
 // UNSUPPORTED: system-windows
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 
 // RUN: mkdir -p %t
 // RUN: cp %S/Inputs/amdgpu-arch/amdgpu_arch_fail %t/
diff --git a/clang/test/ExtractAPI/invalid_utf8_doc_comment.c b/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
index 0bfa355fa82b1e..c75b780a34bfd9 100644
--- a/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
+++ b/clang/test/ExtractAPI/invalid_utf8_doc_comment.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: %clang_cc1 -extract-api --pretty-sgf -verify \
 // RUN:   -triple arm64-apple-macosx -x c-header %s -o %t/output.symbols.json
diff --git a/clang/test/Frontend/ir-support.c b/clang/test/Frontend/ir-support.c
index 3c819cf21d68dc..5feacf6c7b1b0e 100644
--- a/clang/test/Frontend/ir-support.c
+++ b/clang/test/Frontend/ir-support.c
@@ -4,7 +4,7 @@
 // We strip differing '.file' directives before comparing.
 
 // Reference output:
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -S -o - %s | grep -v '\.file' > %t.s
 
 // LLVM bitcode:
diff --git a/clang/test/Index/preamble-reparse-changed-module.m b/clang/test/Index/preamble-reparse-changed-module.m
index 02e9c0c71be515..851de3c2f3e03a 100644
--- a/clang/test/Index/preamble-reparse-changed-module.m
+++ b/clang/test/Index/preamble-reparse-changed-module.m
@@ -1,5 +1,5 @@
 // UNSUPPORTED: system-windows
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 
 // RUN: rm -rf %t
 // RUN: mkdir -p %t/mod
diff --git a/clang/test/Index/record-completion-invocation.c b/clang/test/Index/record-completion-invocation.c
index 40dc09dc25109b..df18764f88acb1 100644
--- a/clang/test/Index/record-completion-invocation.c
+++ b/clang/test/Index/record-completion-invocation.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
diff --git a/clang/test/Index/record-parsing-invocation.c b/clang/test/Index/record-parsing-invocation.c
index 96ccfadadb868c..f63a0f92d6fd02 100644
--- a/clang/test/Index/record-parsing-invocation.c
+++ b/clang/test/Index/record-parsing-invocation.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
diff --git a/clang/test/InstallAPI/binary-attributes.test b/clang/test/InstallAPI/binary-attributes.test
index e79e5acd89c3fe..cf593544fa6b54 100644
--- a/clang/test/InstallAPI/binary-attributes.test
+++ b/clang/test/InstallAPI/binary-attributes.test
@@ -1,4 +1,4 @@
-; XFAIL: target={{.*}}-zos{{.*}}
+; XFAIL: system-zos
 ; RUN: rm -rf %t 
 ; RUN: split-file %s %t
 ; RUN: mkdir -p %t/System/Library/Frameworks 
diff --git a/clang/test/InstallAPI/reexport-with-linker-symbols.test b/clang/test/InstallAPI/reexport-with-linker-symbols.test
index 2dcb2faed9a77e..f6b8b6a61a87f4 100644
--- a/clang/test/InstallAPI/reexport-with-linker-symbols.test
+++ b/clang/test/InstallAPI/reexport-with-linker-symbols.test
@@ -1,4 +1,4 @@
-; XFAIL: target={{.*}}-zos{{.*}}
+; XFAIL: system-zos
 ; RUN: rm -rf %t
 ; RUN: split-file %s %t
 
diff --git a/clang/test/InstallAPI/reexported-frameworks.test b/clang/test/InstallAPI/reexported-frameworks.test
index ad0005451e365d..c189054e5a56ec 100644
--- a/clang/test/InstallAPI/reexported-frameworks.test
+++ b/clang/test/InstallAPI/reexported-frameworks.test
@@ -1,4 +1,4 @@
-; XFAIL: target={{.*}}-zos{{.*}}
+; XFAIL: system-zos
 ; RUN: rm -rf %t
 ; RUN: split-file %s %t
 ; RUN: sed -e "s|DSTROOT|%/t|g" %t/inputs.json.in > %t/inputs.json
diff --git a/clang/test/Modules/ASTSignature.c b/clang/test/Modules/ASTSignature.c
index 5a45cbfbbdea33..0816a23daf06c3 100644
--- a/clang/test/Modules/ASTSignature.c
+++ b/clang/test/Modules/ASTSignature.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: %clang_cc1             -iquote %S/Inputs/ASTHash/ -fsyntax-only \
 // RUN:   -fmodules -fimplicit-module-maps -fmodules-strict-context-hash \
diff --git a/clang/test/Modules/class-instantiate-no-change-02.cppm b/clang/test/Modules/class-instantiate-no-change-02.cppm
index 03bb5f8bbe7dd7..78178bc21c25ae 100644
--- a/clang/test/Modules/class-instantiate-no-change-02.cppm
+++ b/clang/test/Modules/class-instantiate-no-change-02.cppm
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/class-instantiate-no-change.cppm b/clang/test/Modules/class-instantiate-no-change.cppm
index bf7357028c73cf..b8a97d3927099f 100644
--- a/clang/test/Modules/class-instantiate-no-change.cppm
+++ b/clang/test/Modules/class-instantiate-no-change.cppm
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/cxx20-fatal-module-loader-error.cpp b/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
index d022620f107c89..4100724faa8c7f 100644
--- a/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
+++ b/clang/test/Modules/cxx20-fatal-module-loader-error.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: touch %t/A.pcm
diff --git a/clang/test/Modules/diagnostic-options-out-of-date.m b/clang/test/Modules/diagnostic-options-out-of-date.m
index 707998212bbb26..ccf2998ea6a7dc 100644
--- a/clang/test/Modules/diagnostic-options-out-of-date.m
+++ b/clang/test/Modules/diagnostic-options-out-of-date.m
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // Build A.pcm
 // RUN: %clang_cc1 -Werror -Wno-conversion -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs %s -fmodules-disable-diagnostic-validation
diff --git a/clang/test/Modules/double-quotes.m b/clang/test/Modules/double-quotes.m
index 46534660f9720a..de9467529b6f02 100644
--- a/clang/test/Modules/double-quotes.m
+++ b/clang/test/Modules/double-quotes.m
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir %t
 
diff --git a/clang/test/Modules/framework-public-includes-private.m b/clang/test/Modules/framework-public-includes-private.m
index 420dd87a1bfb76..349df13111271f 100644
--- a/clang/test/Modules/framework-public-includes-private.m
+++ b/clang/test/Modules/framework-public-includes-private.m
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir %t
 
diff --git a/clang/test/Modules/modules-reduced-bmi.cppm b/clang/test/Modules/modules-reduced-bmi.cppm
index 54445f38d4c352..c3b1698272d50b 100644
--- a/clang/test/Modules/modules-reduced-bmi.cppm
+++ b/clang/test/Modules/modules-reduced-bmi.cppm
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/no-external-type-id.cppm b/clang/test/Modules/no-external-type-id.cppm
index 41a65032fbbdb5..cf9182569aa9e6 100644
--- a/clang/test/Modules/no-external-type-id.cppm
+++ b/clang/test/Modules/no-external-type-id.cppm
@@ -1,6 +1,6 @@
 // Testing that we won't record the type ID from external modules.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 // RUN: cd %t
diff --git a/clang/test/Modules/no-transitive-decl-change-2.cppm b/clang/test/Modules/no-transitive-decl-change-2.cppm
index 56053a642335bc..16041dc7c63773 100644
--- a/clang/test/Modules/no-transitive-decl-change-2.cppm
+++ b/clang/test/Modules/no-transitive-decl-change-2.cppm
@@ -1,6 +1,6 @@
 // Test that adding a new unused decl within reduced BMI may not produce a transitive change.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-decl-change-4.cppm b/clang/test/Modules/no-transitive-decl-change-4.cppm
index f06dc18d405222..0fe8b54037116c 100644
--- a/clang/test/Modules/no-transitive-decl-change-4.cppm
+++ b/clang/test/Modules/no-transitive-decl-change-4.cppm
@@ -1,6 +1,6 @@
 // Test that adding a new unused decl within reduced BMI may not produce a transitive change.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-decls-change.cppm b/clang/test/Modules/no-transitive-decls-change.cppm
index 4807a297fd39ac..66a482bd689abb 100644
--- a/clang/test/Modules/no-transitive-decls-change.cppm
+++ b/clang/test/Modules/no-transitive-decls-change.cppm
@@ -1,7 +1,7 @@
 // Testing that changing a declaration in an unused module file won't change 
 // the BMI of the current module file.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-identifier-change.cppm b/clang/test/Modules/no-transitive-identifier-change.cppm
index bc7bd3a3bc7339..53158af1e6caae 100644
--- a/clang/test/Modules/no-transitive-identifier-change.cppm
+++ b/clang/test/Modules/no-transitive-identifier-change.cppm
@@ -1,7 +1,7 @@
 // Testing that adding an new identifier in an unused module file won't change 
 // the BMI of the current module file.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-source-location-change-2.cppm b/clang/test/Modules/no-transitive-source-location-change-2.cppm
index 15f36428b4bc1e..3199ba74cc0591 100644
--- a/clang/test/Modules/no-transitive-source-location-change-2.cppm
+++ b/clang/test/Modules/no-transitive-source-location-change-2.cppm
@@ -1,7 +1,7 @@
 // Testing that adding a new line in a module interface unit won't cause the BMI
 // of consuming module unit changes.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-source-location-change.cppm b/clang/test/Modules/no-transitive-source-location-change.cppm
index 596bd47384057e..e8c914987c83e5 100644
--- a/clang/test/Modules/no-transitive-source-location-change.cppm
+++ b/clang/test/Modules/no-transitive-source-location-change.cppm
@@ -1,7 +1,7 @@
 // Testing that adding a new line in a module interface unit won't cause the BMI
 // of consuming module unit changes.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-type-change.cppm b/clang/test/Modules/no-transitive-type-change.cppm
index 13008b2593716d..bfbc1a9da4e088 100644
--- a/clang/test/Modules/no-transitive-type-change.cppm
+++ b/clang/test/Modules/no-transitive-type-change.cppm
@@ -1,7 +1,7 @@
 // Testing that changing a type in an unused module file won't change 
 // the BMI of the current module file.
 //
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/prune-non-affecting-module-map-files-textual.c b/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
index b18a1efffad492..917793aaa9f958 100644
--- a/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
+++ b/clang/test/Modules/prune-non-affecting-module-map-files-textual.c
@@ -1,7 +1,7 @@
 // This test checks that a module map with a textual header can be marked as
 // non-affecting.
 
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/Modules/prune-non-affecting-module-map-files.m b/clang/test/Modules/prune-non-affecting-module-map-files.m
index 8895b42f940b07..1cff7c13f0cff3 100644
--- a/clang/test/Modules/prune-non-affecting-module-map-files.m
+++ b/clang/test/Modules/prune-non-affecting-module-map-files.m
@@ -1,7 +1,7 @@
 // Check that the presence of non-affecting module map files does not affect the
 // contents of PCM files.
 
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t && mkdir %t
 // RUN: split-file %s %t
 
diff --git a/clang/test/Modules/stress-objc.m b/clang/test/Modules/stress-objc.m
index ef628e21ce0ea3..0cc5cab062fb8f 100644
--- a/clang/test/Modules/stress-objc.m
+++ b/clang/test/Modules/stress-objc.m
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: cd %S
 
 // RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00.pch -fno-pch-timestamp
diff --git a/clang/test/Modules/stress1.cpp b/clang/test/Modules/stress1.cpp
index 8563b8f789f4e7..14ac6fa965d2ad 100644
--- a/clang/test/Modules/stress1.cpp
+++ b/clang/test/Modules/stress1.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: cd %S
 //
diff --git a/clang/test/PCH/pragma-redefine-extname.c b/clang/test/PCH/pragma-redefine-extname.c
index baee0a6cc30335..6f50b39a6c2cd7 100644
--- a/clang/test/PCH/pragma-redefine-extname.c
+++ b/clang/test/PCH/pragma-redefine-extname.c
@@ -1,5 +1,5 @@
 /// Test this without pch.
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -triple=x86_64-unknown-linux -include %S/pragma-redefine-extname.h %s -verify -emit-llvm -o - | FileCheck %s
 
 /// Test with pch.
diff --git a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
index 44384fe784c15e..aa1ee51f2b6704 100644
--- a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
+++ b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: %clang_cc1 -source-date-epoch 0 -E %s | FileCheck %s --check-prefix=19700101
 
 // 19700101:      const char date[] = "Jan  1 1970";
diff --git a/clang/test/Tooling/clang-diff-ast.cpp b/clang/test/Tooling/clang-diff-ast.cpp
index 51b85f33ad9a9a..0e6365467d1f56 100644
--- a/clang/test/Tooling/clang-diff-ast.cpp
+++ b/clang/test/Tooling/clang-diff-ast.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: clang-diff -ast-dump %s -- -std=c++11 | FileCheck %s
 
 
diff --git a/clang/test/Tooling/clang-diff-basic.cpp b/clang/test/Tooling/clang-diff-basic.cpp
index 3fa80685db2395..3fa0d224fecd32 100644
--- a/clang/test/Tooling/clang-diff-basic.cpp
+++ b/clang/test/Tooling/clang-diff-basic.cpp
@@ -1,4 +1,4 @@
-// XFAIL: target={{.*}}-zos{{.*}}
+// XFAIL: system-zos
 // RUN: clang-diff -dump-matches %S/Inputs/clang-diff-basic-src.cpp %s -- | FileCheck %s
 
 // CHECK: Match TranslationUnitDecl{{.*}} to TranslationUnitDecl
diff --git a/clang/test/Tooling/clang-diff-html.test b/clang/test/Tooling/clang-diff-html.test
index e364dde5f98e3c..98f3601a299869 100644
--- a/clang/test/Tooling/clang-diff-html.test
+++ b/clang/test/Tooling/clang-diff-html.test
@@ -1,4 +1,4 @@
-XFAIL: target={{.*}}-zos{{.*}}
+XFAIL: system-zos
 RUN: clang-diff -html %S/Inputs/clang-diff-basic-src.cpp %S/clang-diff-basic.cpp -- | FileCheck %s
 
 CHECK: <pre><div id='L' class='code'><span id='L0' tid='R0' title='TranslationUnitDecl

>From e252d1bb383ae731136087bd207a1821f0ac68e7 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 23:12:02 -0400
Subject: [PATCH 04/17] Add changes for z/OS

---
 ...xx1z-class-template-argument-deduction.cpp |  3 ++
 clang/test/Parser/cxx2c-pack-indexing.cpp     |  3 ++
 clang/test/Sema/init.c                        |  3 ++
 .../attr-require-constant-initialization.cpp  | 43 +++++++++++++++++--
 clang/test/SemaCXX/auto-cxx0x.cpp             |  3 ++
 ...xx1z-class-template-argument-deduction.cpp |  3 ++
 clang/test/SemaCXX/no_destroy.cpp             | 12 ++++++
 7 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp b/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
index b1320a8924f734..963b5cc33635ba 100644
--- a/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
+++ b/clang/test/Parser/cxx1z-class-template-argument-deduction.cpp
@@ -99,6 +99,9 @@ namespace stmt {
     A local = 0;
     static A local_static = 0;
     static thread_local A thread_local_static = 0;
+#ifdef __MVS__
+    // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
     if (A a = 0) {}
     if (A a = 0; a) {}
     switch (A a = 0) {} // expected-warning {{no case matching constant switch condition '0'}}
diff --git a/clang/test/Parser/cxx2c-pack-indexing.cpp b/clang/test/Parser/cxx2c-pack-indexing.cpp
index 79069a86ea7069..85e53530e57a10 100644
--- a/clang/test/Parser/cxx2c-pack-indexing.cpp
+++ b/clang/test/Parser/cxx2c-pack-indexing.cpp
@@ -40,6 +40,9 @@ struct SS : T...[1] {
     const T...[0] f(T...[0] && p) noexcept((T...[0])0) {
         T...[0] (*test)(const volatile T...[0]**);
         thread_local T...[0] d;
+#ifdef __MVS__
+        // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
         [[maybe_unused]] T...[0] a = p;
         auto ptr = new T...[0](0);
         (*ptr).~T...[0]();
diff --git a/clang/test/Sema/init.c b/clang/test/Sema/init.c
index 32a0a94a8b8a61..041d673793b1d9 100644
--- a/clang/test/Sema/init.c
+++ b/clang/test/Sema/init.c
@@ -246,9 +246,12 @@ void GH69213(void) {
 
 // GH198767
 void GH198767(void) {
+// FIXME: remove MVS guard when TLS is supported on z/OS wyvern_dev branch
+#ifndef __MVS__
   static __thread static char buffer[128] = {{{}, 0}}; // expected-warning {{duplicate 'static' declaration specifier}} \
                                                              expected-warning {{too many braces around scalar initializer}} \
                                                              expected-warning {{excess elements in scalar initializer}}
+#endif
 }
 
 struct GH207566 {};
diff --git a/clang/test/SemaCXX/attr-require-constant-initialization.cpp b/clang/test/SemaCXX/attr-require-constant-initialization.cpp
index b1736ea7a3ebe5..57c8f52fa8fe52 100644
--- a/clang/test/SemaCXX/attr-require-constant-initialization.cpp
+++ b/clang/test/SemaCXX/attr-require-constant-initialization.cpp
@@ -77,6 +77,9 @@ const int glvalue_int2 = ReturnInt();
 ATTR const int &glvalue_ref ATTR = glvalue_int;
 ATTR const int &glvalue_ref2 ATTR = glvalue_int2;
 ATTR __thread const int &glvalue_ref_tl = glvalue_int;
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+#endif
 
 void test_basic_start_static_2_1(void) {
   const int non_global = 42;
@@ -128,7 +131,13 @@ struct TT1 {
   ATTR static const int &subobj_init;
 #if __cplusplus >= 201103L
   ATTR static thread_local const int &tl_glvalue_init;
-  ATTR static thread_local const int &tl_temp_init; // expected-note {{required by 'require_constant_initialization' attribute here}}
+  ATTR static thread_local const int &tl_temp_init;
+#ifdef __MVS__
+  // expected-error at -3  {{thread-local storage is not supported for the current target}}
+  // expected-error at -3  {{thread-local storage is not supported for the current target}}
+#else
+  // expected-note at -5 {{required by 'require_constant_initialization' attribute here}}
+#endif
 #endif
 };
 const int &TT1::glvalue_init = glvalue_int;
@@ -136,9 +145,15 @@ const int &TT1::temp_init = 42;
 const int &TT1::subobj_init = PODType().value;
 #if __cplusplus >= 201103L
 thread_local const int &TT1::tl_glvalue_init = glvalue_int;
-thread_local const int &TT1::tl_temp_init = 42; // expected-error {{variable does not have a constant initializer}}
-// expected-note at -1 {{reference to temporary is not a constant expression}}
-// expected-note at -2 {{temporary created here}}
+thread_local const int &TT1::tl_temp_init = 42;
+#ifdef __MVS__
+  // expected-error at -3  {{thread-local storage is not supported for the current target}}
+  // expected-error at -3  {{thread-local storage is not supported for the current target}}
+#else
+  // expected-error at -5 {{variable does not have a constant initializer}}
+  // expected-note at -6 {{reference to temporary is not a constant expression}}
+  // expected-note at -7 {{temporary created here}}
+#endif
 #endif
 
 // [basic.start.static]p2.2
@@ -172,6 +187,10 @@ void test_basic_start_static_2_2(void) {
   // expected-note at -1 {{required by 'require_constant_initialization' attribute here}}
   // expected-note at -2 {{non-constexpr function 'ReturnInt' cannot be used in a constant expression}}
   ATTR thread_local LitType tls = 42;
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+  // expected-error at -3 {{'require_constant_initialization' attribute only applies to global variables}}
+#endif
 #endif
 }
 
@@ -213,12 +232,18 @@ ATTR LitType lit_ctor;
 ATTR LitType lit_ctor2{};
 ATTR LitType lit_ctor3 = {};
 ATTR __thread LitType lit_ctor_tl = {};
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+#endif
 
 #if __cplusplus >= 201402L
 ATTR NonLit nl_ctor;
 ATTR NonLit nl_ctor2{};
 ATTR NonLit nl_ctor3 = {};
 ATTR thread_local NonLit nl_ctor_tl = {};
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+#endif
 ATTR StoresNonLit snl;
 #else
 ATTR NonLit nl_ctor; // expected-error {{variable does not have a constant initializer}}
@@ -233,6 +258,9 @@ ATTR NonLit nl_ctor3 = {}; // expected-error {{variable does not have a constant
 ATTR thread_local NonLit nl_ctor_tl = {}; // expected-error {{variable does not have a constant initializer}}
 // expected-note at -1 {{required by 'require_constant_initialization' attribute here}}
 // expected-note at -2 {{non-constexpr constructor 'NonLit' cannot be used in a constant expression}}
+#ifdef __MVS__
+  // expected-error at -4  {{thread-local storage is not supported for the current target}}
+#endif
 ATTR StoresNonLit snl; // expected-error {{variable does not have a constant initializer}}
 // expected-note at -1 {{required by 'require_constant_initialization' attribute here}}
 // expected-note at -2 {{non-constexpr constructor 'StoresNonLit' cannot be used in a constant expression}}
@@ -254,6 +282,10 @@ void test_basic_start_static_2_3(void) {
   ATTR static int static_local2; // zero-initialization takes place
 #if __cplusplus >= 201103L
   ATTR thread_local int tl_local = 42;
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+  // expected-error at -3 {{'require_constant_initialization' attribute only applies to global variables}}
+#endif
 #endif
 }
 
@@ -276,6 +308,9 @@ ATTR int brace_init = {};
 #endif
 
 ATTR __thread int tl_init = 0;
+#ifdef __MVS__
+  // expected-error at -2  {{thread-local storage is not supported for the current target}}
+#endif
 typedef const char *StrType;
 
 #if __cplusplus >= 201103L
diff --git a/clang/test/SemaCXX/auto-cxx0x.cpp b/clang/test/SemaCXX/auto-cxx0x.cpp
index f429bebb9941a4..d878d3c39b46de 100644
--- a/clang/test/SemaCXX/auto-cxx0x.cpp
+++ b/clang/test/SemaCXX/auto-cxx0x.cpp
@@ -8,6 +8,9 @@ void f() {
 typedef auto PR25449(); // expected-error {{'auto' not allowed in typedef}}
 
 thread_local auto x; // expected-error {{requires an initializer}}
+#ifdef __MVS__
+// expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 
 void g() {
   [](auto){}(0);
diff --git a/clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp b/clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
index 204dd9b077b938..a6c868b8623c4d 100644
--- a/clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
+++ b/clang/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp
@@ -559,6 +559,9 @@ namespace PR45124 {
   // deduction guide 'template<typename T> y(x = x()) -> Y<T>;' leaves behind a
   // pending cleanup.
   __thread b g;
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 }
 
 namespace PR47175 {
diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index 1ec994cd73ca56..fcff4dd310c838 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -11,13 +11,22 @@ private: ~SecretDestructor(); // expected-note + {{private}}
 
 SecretDestructor sd1; // all-dtors-error{{private}}
 thread_local SecretDestructor sd2; // thread-local-dtors-error{{private}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 void locals() {
   static SecretDestructor sd3; // all-dtors-error{{private}}
   thread_local SecretDestructor sd4; // thread-local-dtors-error{{private}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 }
 
 [[clang::always_destroy]] SecretDestructor sd6; // expected-error{{private}}
 [[clang::always_destroy]] thread_local SecretDestructor sd7; // expected-error{{private}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 
 [[clang::no_destroy]] SecretDestructor sd8;
 
@@ -45,6 +54,9 @@ void local_arrays() {
   static SecretDestructor arr2[10];
   // expected-error at +1 {{temporary of type 'SecretDestructor' has private destructor}}
   thread_local SecretDestructor arr3[10];
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 }
 
 struct Base {

>From 742873638fd74bf1455efa0b4faa8d6f3df75169 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 23:26:10 -0400
Subject: [PATCH 05/17] More changes to enable z/OS

---
 clang/test/C/C2y/n3369_2.c                          |  4 ++--
 .../CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp     |  4 ++++
 .../CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp    | 13 ++++++++++++-
 .../test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp  |  8 ++++++--
 .../test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp  |  7 +++++++
 .../test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp |  7 ++++++-
 clang/test/CodeCompletion/attr.cpp                  | 10 ++++++----
 clang/test/Lexer/bcpl-escaped-newline.c             |  2 +-
 clang/test/Modules/stress1.cpp                      |  4 ++--
 9 files changed, 46 insertions(+), 13 deletions(-)

diff --git a/clang/test/C/C2y/n3369_2.c b/clang/test/C/C2y/n3369_2.c
index d0862c591a3a70..fa7e2b4f6ec100 100644
--- a/clang/test/C/C2y/n3369_2.c
+++ b/clang/test/C/C2y/n3369_2.c
@@ -5,7 +5,7 @@
 
 typedef typeof(sizeof(0)) size_t;
 
-// CHECK-LABEL: define{{( dso_local)?}} i{{64|32}} @test1(
+// CHECK-LABEL: define{{( dso_local)?}}{{( zeroext)?}} i{{64|32}} @test1(
 // CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    [[ARRAY:%.*]] = alloca [12 x i32], align
@@ -16,7 +16,7 @@ size_t test1() {
   return _Countof(array);
 }
 
-// CHECK-LABEL: define{{( dso_local)?}} i{{64|32}} @test2(
+// CHECK-LABEL: define{{( dso_local)?}}{{( zeroext)?}} i{{64|32}} @test2(
 // CHECK-SAME: ) #[[ATTR0]] {
 // CHECK-NEXT:  [[ENTRY:.*:]]
 // CHECK-NEXT:    ret i{{64|32}} 100
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
index 48bc8fb426bcb1..fa6ffc155ea88a 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/dtor.cpp
@@ -41,7 +41,11 @@ namespace contents {
   struct E {
     constexpr ~E() {
       return;
+#ifdef __MVS__
+      thread_local int e; // expected-error {{thread-local storage is not supported for the current target}}
+#else
       thread_local int e; // cxx2a-warning {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
+#endif
     }
   };
   struct F {
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
index 8cb37ae6d1cdec..6bb2a046dd4e16 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3-2b.cpp
@@ -10,7 +10,12 @@ constexpr int h(int n) {
 constexpr int i(int n) {
   if (!n)
     return 0;
-  thread_local const int m = n; // expected-warning {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
+  thread_local const int m = n;
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#else
+  // expected-warning at -4 {{definition of a thread_local variable in a constexpr function is incompatible with C++ standards before C++23}}
+#endif
   return m;
 }
 
@@ -41,6 +46,9 @@ constexpr int c_thread_local(int n) {
   if (!n)
     return 0;
   static _Thread_local int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
   _Thread_local int b;        // // expected-error {{'_Thread_local' variables must have global storage}}
   return 0;
 }
@@ -49,6 +57,9 @@ constexpr int gnu_thread_local(int n) {
   if (!n)
     return 0;
   static __thread int a; // expected-warning {{definition of a static variable in a constexpr function is incompatible with C++ standards before C++23}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
   __thread int b;        // expected-error {{'__thread' variables must have global storage}}
   return 0;
 }
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
index 51990ee4341d29..5de69072597f6c 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p3.cpp
@@ -158,8 +158,12 @@ constexpr int DisallowedStmtsCXX14_5() {
 constexpr int DisallowedStmtsCXX14_6() {
   //  - a definition of a variable of thread storage duration
   return 0;
-  thread_local constexpr int n = 123; // beforecxx14-warning {{variable declaration in a constexpr function is a C++14 extension}} \
-                                      // beforecxx23-warning {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
+  thread_local constexpr int n = 123; // beforecxx14-warning {{variable declaration in a constexpr function is a C++14 extension}}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#else
+  // beforecxx23-warning at -4 {{definition of a thread_local variable in a constexpr function is a C++23 extension}}
+#endif
 }
 constexpr int DisallowedStmtsCXX14_7() {
   //  - a definition of a variable for which no initialization is performed
diff --git a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp
index 170c8c7be0c9f4..7ac1ed00ade450 100644
--- a/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp
+++ b/clang/test/CXX/dcl.dcl/dcl.spec/dcl.constinit/p1.cpp
@@ -2,11 +2,18 @@
 
 constinit int a;
 constinit thread_local int b;
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#endif
 constinit static int c;
 
 void f() {
   constinit static int a;
   constinit thread_local int b;
+#ifdef __MVS__
+  // expected-error at -2 {{local variable cannot be declared 'constinit'}}
+  // expected-error at -3 {{thread-local storage is not supported for the current target}}
+#endif
   constinit int c; // expected-error {{local variable cannot be declared 'constinit'}}
 }
 
diff --git a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
index e82b4d33d5a6a0..a7062b6503960e 100644
--- a/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
+++ b/clang/test/CXX/stmt.stmt/stmt.iter/stmt.ranged/p1.cpp
@@ -151,7 +151,12 @@ void g() {
 
   for (extern int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'extern'}}
   for (static int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'static'}}
-  for (thread_local int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'thread_local'}}
+  for (thread_local int a : A()) {}
+#ifdef __MVS__
+  // expected-error at -2 {{thread-local storage is not supported for the current target}}
+#else
+  // expected-error at -4 {{loop variable 'a' may not be declared 'thread_local'}}
+#endif
   for (register int a : A()) {} // expected-error {{loop variable 'a' may not be declared 'register'}} expected-warning 0-1{{register}} expected-error 0-1{{register}}
   for (constexpr int a : X::C()) {} // OK per CWG issue #1204.
   for (constexpr int a : A()) {} // expected-error {{constexpr variable 'a' must be initialized by a constant expression}} expected-note-re {{read of implicit variable '__begin{{[0-9]+}}' of range-based 'for' loop is not allowed in a constant expression}}
diff --git a/clang/test/CodeCompletion/attr.cpp b/clang/test/CodeCompletion/attr.cpp
index cf7298e742e833..46b79d07cfbc42 100644
--- a/clang/test/CodeCompletion/attr.cpp
+++ b/clang/test/CodeCompletion/attr.cpp
@@ -53,9 +53,9 @@ int e;
 // RUN: %clang_cc1 -code-completion-at=%s:%(line-3):46 %s | FileCheck --check-prefix=PRAGMA %s
 // PRAGMA: COMPLETION: Pattern : internal_linkage
 
-#ifdef MS_EXT
+#ifdef MS_EXT_DSTHREAD
 int __declspec(thread) f;
-// RUN: %clang_cc1 -fms-extensions -DMS_EXT -code-completion-at=%s:%(line-1):16 %s | FileCheck --check-prefix=DS %s
+// RUN: %clang_cc1 -fms-extensions -DMS_EXT_DSTHREAD -code-completion-at=%s:%(line-1):16 %s | FileCheck --check-prefix=DS %s
 // DS-NOT: COMPLETION: Pattern : __convergent__
 // DS-NOT: COMPLETION: Pattern : __used__
 // DS-NOT: COMPLETION: Pattern : clang::convergent
@@ -63,16 +63,18 @@ int __declspec(thread) f;
 // DS:     COMPLETION: Pattern : thread
 // DS-NOT: COMPLETION: Pattern : used
 // DS:     COMPLETION: Pattern : uuid
+#endif // MS_EXT_DSTHREAD
 
+#ifdef MS_EXT_UUID
 [uuid("123e4567-e89b-12d3-a456-426614174000")] struct g;
-// RUN: %clang_cc1 -fms-extensions -DMS_EXT -code-completion-at=%s:%(line-1):2 %s | FileCheck --check-prefix=MS %s
+// RUN: %clang_cc1 -fms-extensions -DMS_EXT_UUID -code-completion-at=%s:%(line-1):2 %s | FileCheck --check-prefix=MS %s
 // MS-NOT: COMPLETION: Pattern : __uuid__
 // MS-NOT: COMPLETION: Pattern : clang::convergent
 // MS-NOT: COMPLETION: Pattern : convergent
 // MS-NOT: COMPLETION: Pattern : thread
 // MS-NOT: COMPLETION: Pattern : used
 // MS:     COMPLETION: Pattern : uuid
-#endif // MS_EXT
+#endif // MS_EXT_UUID
 
 void foo() {
   [[omp::sequence(directive(parallel), directive(critical))]]
diff --git a/clang/test/Lexer/bcpl-escaped-newline.c b/clang/test/Lexer/bcpl-escaped-newline.c
index 0883173b224fda..bf91551877f327 100644
--- a/clang/test/Lexer/bcpl-escaped-newline.c
+++ b/clang/test/Lexer/bcpl-escaped-newline.c
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -Eonly -ftrigraphs %s
-// RUN: %clang_cc1 -Eonly -verify %s
+// RUN: %clang_cc1 -Eonly -fno-trigraphs -verify %s
 
 //\
 #error bar
diff --git a/clang/test/Modules/stress1.cpp b/clang/test/Modules/stress1.cpp
index 14ac6fa965d2ad..451d6410b20637 100644
--- a/clang/test/Modules/stress1.cpp
+++ b/clang/test/Modules/stress1.cpp
@@ -80,7 +80,7 @@
 //
 // RUN: diff %t/merge00.pcm %t/merge00_check.pcm
 //
-// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 \
+// RUN: %clang_cc1 -source-date-epoch 1613676318 -fmodules -x c++ -std=c++11 \
 // RUN:   -I Inputs/stress1 \
 // RUN:   -fno-implicit-modules \
 // RUN:   -fmodules-cache-path=%t \
@@ -93,7 +93,7 @@
 // RUN:   -fmodule-file=%t/merge00.pcm \
 // RUN:   -verify stress1.cpp -emit-llvm -o %t/stress1.ll
 //
-// RUN: %clang_cc1 -fmodules -x c++ -std=c++11 \
+// RUN: %clang_cc1 -source-date-epoch 1613676318 -fmodules -x c++ -std=c++11 \
 // RUN:   -I Inputs/stress1 \
 // RUN:   -fno-implicit-modules \
 // RUN:   -fmodules-cache-path=%t \

>From 41ff51b3d53e3d57d7b117f97c567292d0650813 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Tue, 20 Oct 2026 23:51:36 -0400
Subject: [PATCH 06/17] Update tests that now pass

---
 .../conflict-preserves-unrelated-zero-length-insert.test         | 1 -
 .../ssaf-src-edit-merge/conflict-stderr-without-sarif.test       | 1 -
 .../test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test  | 1 -
 .../Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test | 1 -
 .../Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test    | 1 -
 .../Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test   | 1 -
 .../Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test  | 1 -
 .../ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test | 1 -
 .../ssaf-src-edit-merge/pre-dedup-zero-length-insert.test        | 1 -
 .../range-overlap-cluster-of-three-sarif.test                    | 1 -
 .../ssaf-src-edit-merge/range-overlap-conflict-sarif.test        | 1 -
 .../ssaf-src-edit-merge/single-input-internal-conflict.test      | 1 -
 .../test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test | 1 -
 .../Scalable/ssaf-src-edit-merge/three-input-all-conflict.test   | 1 -
 .../Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test | 1 -
 .../two-conflicts-different-offsets-sarif.test                   | 1 -
 .../Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test   | 1 -
 .../Scalable/ssaf-src-edit-merge/two-input-conflict.test         | 1 -
 clang/test/CodeGen/2007-04-14-FNoBuiltin.c                       | 1 -
 clang/test/CodeGen/builtin-rename.c                              | 1 -
 clang/test/CodeGen/libcalls-fno-builtin.c                        | 1 -
 clang/test/CodeGen/nomathbuiltin.c                               | 1 -
 clang/test/CodeGen/variable-array.c                              | 1 -
 .../CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp   | 1 -
 clang/test/Driver/no-objc-arr.m                                  | 1 -
 clang/test/Frontend/backend-attribute-error-warning-optimize.c   | 1 -
 clang/test/Modules/ASTSignature.c                                | 1 -
 clang/test/Modules/class-instantiate-no-change-02.cppm           | 1 -
 clang/test/Modules/no-transitive-decls-change.cppm               | 1 -
 clang/test/Modules/no-transitive-source-location-change-2.cppm   | 1 -
 clang/test/Modules/no-transitive-type-change.cppm                | 1 -
 clang/test/Modules/stress-objc.m                                 | 1 -
 clang/test/Preprocessor/SOURCE_DATE_EPOCH.c                      | 1 -
 clang/test/Tooling/clang-diff-ast.cpp                            | 1 -
 clang/test/Tooling/clang-diff-basic.cpp                          | 1 -
 clang/test/Tooling/clang-diff-html.test                          | 1 -
 36 files changed, 36 deletions(-)

diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
index 458f54f056a830..bdda153a0034b0 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-preserves-unrelated-zero-length-insert.test
@@ -13,7 +13,6 @@
 # (file, offset, length, text), not just (file, offset), or it will
 # collaterally delete this unrelated insertion.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
index 15fb1e89a38584..9d58c9f0fbc853 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/conflict-stderr-without-sarif.test
@@ -2,7 +2,6 @@
 # NOT pass --sarif-conflicts-out=. Stderr cluster line is still emitted
 # and drop-all still applies; no SARIF file is created at any path.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
index 4b738e67a111e5..c45b8001797c00 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/empty-input.test
@@ -2,7 +2,6 @@
 # a valid TranslationUnitReplacements with an empty Replacements sequence.
 # Per spec the MainSourceFile is the shared value when all inputs agree.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
index 3840d8a25cc447..300a6f9add3927 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/identical-overlap.test
@@ -2,7 +2,6 @@
 # inputs collapse to one in the merged output. No "conflict:" line because
 # this is a textbook dedup, not a conflict.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
index b58e49aca34925..3353d4b4470be3 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/no-conflict-sarif-empty.test
@@ -2,7 +2,6 @@
 # with results: [] (empty array). The merged YAML retains both replacements.
 # Tool exits 0; stderr contains no `conflict:` line.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
index e72f59859443ca..314d35ff1b77e8 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/non-overlapping.test
@@ -2,7 +2,6 @@
 # Conflicts are detected per-(file, offset) so disjoint offsets yield no
 # tool-level "conflict:" line, and exit is 0.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # Real source file required so groupReplacements doesn't drop the entries.
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
index b158b675467443..84d21423269573 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/order-invariance.test
@@ -3,7 +3,6 @@
 # the deterministic sort in flattenFileChanges and the dedup-by-key
 # logic don't inadvertently depend on input order.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
index 9c4f497ba3fff0..ce802f23ecae77 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-identical-non-zero-length.test
@@ -3,7 +3,6 @@
 # also covers this through library-side overlap detection; this test pins the
 # pre-dedup pass's contract that the dedup applies regardless of length.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
index 27441d6edb084f..a545ad37b385fe 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/pre-dedup-zero-length-insert.test
@@ -5,7 +5,6 @@
 # where clang-apply-replacements' groupReplacements skipped dedup for plain
 # TUReplacements and AtomicChange::replace stacked the duplicates.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
index 40441807d408ba..742ac28ef1a543 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-cluster-of-three-sarif.test
@@ -13,7 +13,6 @@
 ## This is the regression guard for transitive merging — it cannot be
 ## exercised by any pairwise-only fixture.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
index f79670f877d6e3..19c04176fd37b9 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/range-overlap-conflict-sarif.test
@@ -9,7 +9,6 @@
 # This is the mandatory regression guard for the range-overlap cluster
 # definition — it cannot be exercised by any same-offset fixture.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
index 9f48bf2dabca7c..e14ead37fdf1a9 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input-internal-conflict.test
@@ -3,7 +3,6 @@
 # this as a within-input conflict and drops one; the tool reports the
 # cluster on stderr and exits 0.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
index 9a8f05fa513e71..55c9399373f2a6 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/single-input.test
@@ -2,7 +2,6 @@
 # "If exactly one input is given, the tool SHALL still produce a one-run
 # merged document equivalent to that input."
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
index 9b74feedb5ebed..cc59927176736f 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-all-conflict.test
@@ -4,7 +4,6 @@
 # a "conflict:" line for the (file, offset) cluster with the full cluster
 # size (3) and exits 0.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
index 918bb2533e16d7..2e7e32c16425b2 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/three-input-conflict-sarif.test
@@ -1,7 +1,6 @@
 # Three inputs all conflict pairwise at (foo.cpp, 10) — drop-all removes
 # all three from the merged YAML; SARIF result lists three relatedLocations.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
index fd08981661acf1..e6d080018463c8 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-conflicts-different-offsets-sarif.test
@@ -3,7 +3,6 @@
 # removes all four; SARIF has two results, ordered by (file, min-offset)
 # ascending so the offset-10 cluster precedes the offset-30 cluster.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
index 85a3a3bb9a1d62..742557b3b2dc29 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict-sarif.test
@@ -4,7 +4,6 @@
 # given by --sarif-conflicts-out= containing one error-level result with
 # two relatedLocations (one per dropped candidate).
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
index eb89efff9e2d01..029973d57f3b2e 100644
--- a/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
+++ b/clang/test/Analysis/Scalable/ssaf-src-edit-merge/two-input-conflict.test
@@ -4,7 +4,6 @@
 # tool emits one "conflict:" cluster line for that (file, offset) with the
 # full cluster size, and exits 0.
 
-# XFAIL: system-zos
 # RUN: rm -rf %t.dir
 # RUN: mkdir -p %t.dir
 # RUN: printf '%%80s' '' > %t.dir/foo.cpp
diff --git a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
index 12173ca25a723e..b95f41c52d27c6 100644
--- a/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
+++ b/clang/test/CodeGen/2007-04-14-FNoBuiltin.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin -o - | FileCheck %s
 // RUN: %clang_cc1 -emit-llvm %s -O2 -fno-builtin-printf -o - | FileCheck %s
 // Check that -fno-builtin is honored.
diff --git a/clang/test/CodeGen/builtin-rename.c b/clang/test/CodeGen/builtin-rename.c
index bebe7586b33349..0092e54ef37d9b 100644
--- a/clang/test/CodeGen/builtin-rename.c
+++ b/clang/test/CodeGen/builtin-rename.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 %s -emit-llvm -o - | grep 'declare.*printf' | count 1
 // PR3612
 
diff --git a/clang/test/CodeGen/libcalls-fno-builtin.c b/clang/test/CodeGen/libcalls-fno-builtin.c
index 7941c621e46541..6aef0efa1d9b7c 100644
--- a/clang/test/CodeGen/libcalls-fno-builtin.c
+++ b/clang/test/CodeGen/libcalls-fno-builtin.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm -fno-builtin -o - %s | FileCheck --check-prefixes=GLOBAL,CHECK %s
 // RUN: %clang_cc1 -emit-llvm -fno-builtin-ceil -fno-builtin-copysign -fno-builtin-cos \
 // RUN:  -fno-builtin-fabs -fno-builtin-floor -fno-builtin-strcat -fno-builtin-strncat \
diff --git a/clang/test/CodeGen/nomathbuiltin.c b/clang/test/CodeGen/nomathbuiltin.c
index 9c2d647253505b..35e7c567e68d27 100644
--- a/clang/test/CodeGen/nomathbuiltin.c
+++ b/clang/test/CodeGen/nomathbuiltin.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 -fno-math-builtin -emit-llvm -o - %s | FileCheck %s
 
 // Check that the -fno-math-builtin option for -cc1 is working properly.
diff --git a/clang/test/CodeGen/variable-array.c b/clang/test/CodeGen/variable-array.c
index 9d979e7492cc0b..c2a7c2ffb93f47 100644
--- a/clang/test/CodeGen/variable-array.c
+++ b/clang/test/CodeGen/variable-array.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 -emit-llvm < %s | grep puts | count 4
 
 int puts(const char *);
diff --git a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
index 4ea49de1a094a7..a44267196eeedc 100644
--- a/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
+++ b/clang/test/CodeGenHipStdPar/select-accelerator-code-pass-ordering.cpp
@@ -1,5 +1,4 @@
 // REQUIRES: amdgpu-registered-target
-// XFAIL: system-zos
 // Test that the accelerator code selection pass only gets invoked after linking
 
 // Ensure Pass HipStdParAcceleratorCodeSelectionPass is not invoked in PreLink.
diff --git a/clang/test/Driver/no-objc-arr.m b/clang/test/Driver/no-objc-arr.m
index 3a519abd70409f..deaf6b9e00ad1d 100644
--- a/clang/test/Driver/no-objc-arr.m
+++ b/clang/test/Driver/no-objc-arr.m
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang  -Werror -fobjc-arc -fsyntax-only -fno-objc-arc -Xclang -verify %s
 // expected-no-diagnostics
 
diff --git a/clang/test/Frontend/backend-attribute-error-warning-optimize.c b/clang/test/Frontend/backend-attribute-error-warning-optimize.c
index 6ff840a4651fb5..d5a8d57e36c964 100644
--- a/clang/test/Frontend/backend-attribute-error-warning-optimize.c
+++ b/clang/test/Frontend/backend-attribute-error-warning-optimize.c
@@ -1,4 +1,3 @@
-// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -O2 -verify -emit-codegen-only %s
 
 __attribute__((error("oh no foo"))) void foo(void);
diff --git a/clang/test/Modules/ASTSignature.c b/clang/test/Modules/ASTSignature.c
index 0816a23daf06c3..11d7c5c9d43d53 100644
--- a/clang/test/Modules/ASTSignature.c
+++ b/clang/test/Modules/ASTSignature.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: %clang_cc1             -iquote %S/Inputs/ASTHash/ -fsyntax-only \
 // RUN:   -fmodules -fimplicit-module-maps -fmodules-strict-context-hash \
diff --git a/clang/test/Modules/class-instantiate-no-change-02.cppm b/clang/test/Modules/class-instantiate-no-change-02.cppm
index 78178bc21c25ae..9188408af6ec8b 100644
--- a/clang/test/Modules/class-instantiate-no-change-02.cppm
+++ b/clang/test/Modules/class-instantiate-no-change-02.cppm
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: mkdir -p %t
 // RUN: split-file %s %t
diff --git a/clang/test/Modules/no-transitive-decls-change.cppm b/clang/test/Modules/no-transitive-decls-change.cppm
index 66a482bd689abb..83594b09ea7896 100644
--- a/clang/test/Modules/no-transitive-decls-change.cppm
+++ b/clang/test/Modules/no-transitive-decls-change.cppm
@@ -1,7 +1,6 @@
 // Testing that changing a declaration in an unused module file won't change 
 // the BMI of the current module file.
 //
-// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-source-location-change-2.cppm b/clang/test/Modules/no-transitive-source-location-change-2.cppm
index 3199ba74cc0591..f16b945a04d69e 100644
--- a/clang/test/Modules/no-transitive-source-location-change-2.cppm
+++ b/clang/test/Modules/no-transitive-source-location-change-2.cppm
@@ -1,7 +1,6 @@
 // Testing that adding a new line in a module interface unit won't cause the BMI
 // of consuming module unit changes.
 //
-// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/no-transitive-type-change.cppm b/clang/test/Modules/no-transitive-type-change.cppm
index bfbc1a9da4e088..9ec72e851b17dc 100644
--- a/clang/test/Modules/no-transitive-type-change.cppm
+++ b/clang/test/Modules/no-transitive-type-change.cppm
@@ -1,7 +1,6 @@
 // Testing that changing a type in an unused module file won't change 
 // the BMI of the current module file.
 //
-// XFAIL: system-zos
 // RUN: rm -rf %t
 // RUN: split-file %s %t
 //
diff --git a/clang/test/Modules/stress-objc.m b/clang/test/Modules/stress-objc.m
index 0cc5cab062fb8f..edbebd3576a95e 100644
--- a/clang/test/Modules/stress-objc.m
+++ b/clang/test/Modules/stress-objc.m
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: cd %S
 
 // RUN: %clang_cc1 -emit-pch -x objective-c-header %s -o %t_c00.pch -fno-pch-timestamp
diff --git a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
index aa1ee51f2b6704..30aec44a535d71 100644
--- a/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
+++ b/clang/test/Preprocessor/SOURCE_DATE_EPOCH.c
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: %clang_cc1 -source-date-epoch 0 -E %s | FileCheck %s --check-prefix=19700101
 
 // 19700101:      const char date[] = "Jan  1 1970";
diff --git a/clang/test/Tooling/clang-diff-ast.cpp b/clang/test/Tooling/clang-diff-ast.cpp
index 0e6365467d1f56..a8efda50a4052e 100644
--- a/clang/test/Tooling/clang-diff-ast.cpp
+++ b/clang/test/Tooling/clang-diff-ast.cpp
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: clang-diff -ast-dump %s -- -std=c++11 | FileCheck %s
 
 
diff --git a/clang/test/Tooling/clang-diff-basic.cpp b/clang/test/Tooling/clang-diff-basic.cpp
index 3fa0d224fecd32..a0c0163530ffaa 100644
--- a/clang/test/Tooling/clang-diff-basic.cpp
+++ b/clang/test/Tooling/clang-diff-basic.cpp
@@ -1,4 +1,3 @@
-// XFAIL: system-zos
 // RUN: clang-diff -dump-matches %S/Inputs/clang-diff-basic-src.cpp %s -- | FileCheck %s
 
 // CHECK: Match TranslationUnitDecl{{.*}} to TranslationUnitDecl
diff --git a/clang/test/Tooling/clang-diff-html.test b/clang/test/Tooling/clang-diff-html.test
index 98f3601a299869..00d9e07d2fcf4b 100644
--- a/clang/test/Tooling/clang-diff-html.test
+++ b/clang/test/Tooling/clang-diff-html.test
@@ -1,4 +1,3 @@
-XFAIL: system-zos
 RUN: clang-diff -html %S/Inputs/clang-diff-basic-src.cpp %S/clang-diff-basic.cpp -- | FileCheck %s
 
 CHECK: <pre><div id='L' class='code'><span id='L0' tid='R0' title='TranslationUnitDecl

>From cf62d03d26751f0e7c575368fd601c32c848d337 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:10:47 -0400
Subject: [PATCH 07/17] ObjC isn't supported on z/OS

---
 clang/test/DebugInfo/ObjC/lit.local.cfg   | 8 ++++++--
 clang/test/DebugInfo/ObjCXX/lit.local.cfg | 8 ++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/clang/test/DebugInfo/ObjC/lit.local.cfg b/clang/test/DebugInfo/ObjC/lit.local.cfg
index b48f68b01581d8..168a6591a6e546 100644
--- a/clang/test/DebugInfo/ObjC/lit.local.cfg
+++ b/clang/test/DebugInfo/ObjC/lit.local.cfg
@@ -1,5 +1,9 @@
 # objective-C is not supported on AIX and zOS
-unsupported_platforms = [ "system-aix", "system-zos" ]
+import re
 
-if any(up in config.available_features for up in unsupported_platforms):
+unsupported_platforms = [ "system-aix" ]
+
+if any(up in config.available_features for up in unsupported_platforms) or re.match(
+    r".*-zos", config.target_triple
+):
     config.unsupported = True
diff --git a/clang/test/DebugInfo/ObjCXX/lit.local.cfg b/clang/test/DebugInfo/ObjCXX/lit.local.cfg
index 8d5c476a2f6822..1530b83cba60a3 100644
--- a/clang/test/DebugInfo/ObjCXX/lit.local.cfg
+++ b/clang/test/DebugInfo/ObjCXX/lit.local.cfg
@@ -1,5 +1,9 @@
 # objective-CXX is not supported on AIX and zOS
-unsupported_platforms = [ "system-aix", "system-zos" ]
+import re
 
-if any(up in config.available_features for up in unsupported_platforms):
+unsupported_platforms = [ "system-aix" ]
+
+if any(up in config.available_features for up in unsupported_platforms) or re.match(
+    r".*-zos", config.target_triple
+):
     config.unsupported = True

>From a2a43dcdcd6fb52ed2432bc7d250ddfc1cee98aa Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:19:59 -0400
Subject: [PATCH 08/17] Set epoch so diff works

---
 clang/test/Frontend/ast-main.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/Frontend/ast-main.c b/clang/test/Frontend/ast-main.c
index 6a64497f4109ca..ff5991c03c9c5b 100644
--- a/clang/test/Frontend/ast-main.c
+++ b/clang/test/Frontend/ast-main.c
@@ -1,6 +1,6 @@
-// RUN: env SDKROOT="/" %clang -emit-llvm -S -o - -x c - < %s | grep -v DIFile > %t1.ll
+// RUN: env SDKROOT="/" %clang -Xclang -source-date-epoch -Xclang 1613676318 -emit-llvm -S -o - -x c - < %s | grep -v DIFile > %t1.ll
 // RUN: env SDKROOT="/" %clang -emit-ast -o %t.ast %s
-// RUN: env SDKROOT="/" %clang -emit-llvm -S -o - -x ast - < %t.ast | grep -v DIFile > %t2.ll
+// RUN: env SDKROOT="/" %clang -Xclang -source-date-epoch -Xclang 1613676318 -emit-llvm -S -o - -x ast - < %t.ast | grep -v DIFile > %t2.ll
 // RUN: diff %t1.ll %t2.ll
 
 int main(void) {

>From ecb8fa28d50ef6fec453de6cb25be19824d877aa Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:29:12 -0400
Subject: [PATCH 09/17] Set epoch so diff works

---
 clang/test/DebugInfo/CXX/determinism.cpp | 4 ++--
 clang/test/Frontend/ast-main.cpp         | 4 ++--
 clang/test/Modules/empty.modulemap       | 4 ++--
 clang/test/PCH/designated-init.c         | 4 ++--
 clang/test/VFS/output-file-permissions.c | 4 ++--
 5 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/clang/test/DebugInfo/CXX/determinism.cpp b/clang/test/DebugInfo/CXX/determinism.cpp
index c0a70a09c95db0..f413f9bc16ed22 100644
--- a/clang/test/DebugInfo/CXX/determinism.cpp
+++ b/clang/test/DebugInfo/CXX/determinism.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -o %t1.ll %s
-// RUN: %clang_cc1 -emit-llvm -debug-info-kind=limited -o %t2.ll %s
+// RUN: %clang_cc1 -source-date-epoch 1613676318 -emit-llvm -debug-info-kind=limited -o %t1.ll %s
+// RUN: %clang_cc1 -source-date-epoch 1613676318 -emit-llvm -debug-info-kind=limited -o %t2.ll %s
 // RUN: diff %t1.ll %t2.ll
 
 template <int N> struct C {
diff --git a/clang/test/Frontend/ast-main.cpp b/clang/test/Frontend/ast-main.cpp
index fc09e6437f93f1..ea4ce52e01a509 100644
--- a/clang/test/Frontend/ast-main.cpp
+++ b/clang/test/Frontend/ast-main.cpp
@@ -1,6 +1,6 @@
-// RUN: env SDKROOT="/" %clang -Wno-error=return-type -emit-llvm -S -o - -x c++ - < %s | grep -v DIFile > %t1.ll
+// RUN: env SDKROOT="/" %clang -Wno-error=return-type -Xclang -source-date-epoch -Xclang 1613676318 -emit-llvm -S -o - -x c++ - < %s | grep -v DIFile > %t1.ll
 // RUN: env SDKROOT="/" %clang -Wno-error=return-type -fno-delayed-template-parsing -emit-ast -o %t.ast %s
-// RUN: env SDKROOT="/" %clang -Wno-error=return-type -emit-llvm -S -o - -x ast - < %t.ast | grep -v DIFile > %t2.ll
+// RUN: env SDKROOT="/" %clang -Wno-error=return-type -Xclang -source-date-epoch -Xclang 1613676318 -emit-llvm -S -o - -x ast - < %t.ast | grep -v DIFile > %t2.ll
 // RUN: diff %t1.ll %t2.ll
 
 // http://llvm.org/bugs/show_bug.cgi?id=15377
diff --git a/clang/test/Modules/empty.modulemap b/clang/test/Modules/empty.modulemap
index 8cad8b67b91155..5cee31da19103f 100644
--- a/clang/test/Modules/empty.modulemap
+++ b/clang/test/Modules/empty.modulemap
@@ -1,12 +1,12 @@
 // RUN: rm -rf %t
 //
 // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
-// RUN:   -fno-implicit-modules \
+// RUN:   -fno-implicit-modules -source-date-epoch 1613676318 \
 // RUN:   -emit-module -fmodule-name=empty -o %t/base.pcm \
 // RUN:   %s
 //
 // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
-// RUN:   -fno-implicit-modules \
+// RUN:   -fno-implicit-modules -source-date-epoch 1613676318 \
 // RUN:   -emit-module -fmodule-name=empty -o %t/check.pcm \
 // RUN:   %s
 //
diff --git a/clang/test/PCH/designated-init.c b/clang/test/PCH/designated-init.c
index beb4dffe6144bf..7050bb82507c5e 100644
--- a/clang/test/PCH/designated-init.c
+++ b/clang/test/PCH/designated-init.c
@@ -1,7 +1,7 @@
 // Test this without pch.
-// RUN: %clang_cc1 %s -include %s.h -emit-llvm -o %t.withoutpch.ll
+// RUN: %clang_cc1 -source-date-epoch 1613676318 %s -include %s.h -emit-llvm -o %t.withoutpch.ll
 
 // Test with pch.
 // RUN: %clang_cc1 %s.h -emit-pch -o %t.pch
-// RUN: %clang_cc1 %s -include-pch %t.pch -emit-llvm -o %t.withpch.ll
+// RUN: %clang_cc1 -source-date-epoch 1613676318 %s -include-pch %t.pch -emit-llvm -o %t.withpch.ll
 // RUN: diff %t.withoutpch.ll %t.withpch.ll
diff --git a/clang/test/VFS/output-file-permissions.c b/clang/test/VFS/output-file-permissions.c
index 4628024c031155..17bfd7ad25e630 100644
--- a/clang/test/VFS/output-file-permissions.c
+++ b/clang/test/VFS/output-file-permissions.c
@@ -4,13 +4,13 @@
 // rm -f %t-ref.o %t-readonly.o
 
 // Create a reference file
-// RUN: %clang -c %s -o %t-ref.o
+// RUN: env SOURCE_DATE_EPOCH=1789091336 %clang -c %s -o %t-ref.o
 
 // Compile something, mark the output as read-only and expect it to be replaced
 // (permission bits of the file itself are irrelevant)
 // RUN: touch %t-readonly.o
 // RUN: chmod 000 %t-readonly.o
-// RUN: %clang -c %s -o %t-readonly.o
+// RUN: env SOURCE_DATE_EPOCH=1789091336 %clang -c %s -o %t-readonly.o
 // RUN: cmp %t-ref.o %t-readonly.o
 
 void foo() {}

>From 5aa7c3d358301c36f3202c8087a2db0721ac451b Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:38:36 -0400
Subject: [PATCH 10/17] More z/OS changes

---
 clang/test/C/C23/n2940.c                                | 1 +
 clang/test/C/drs/dr3xx.c                                | 8 ++++++++
 clang/test/ClangScanDeps/optimize-canonicalize-macros.m | 2 ++
 clang/test/Parser/c11-keywords.c                        | 2 ++
 clang/test/SemaCXX/no_destroy.cpp                       | 2 ++
 5 files changed, 15 insertions(+)

diff --git a/clang/test/C/C23/n2940.c b/clang/test/C/C23/n2940.c
index ee92b6ec94a8c7..108cd3f4352b9b 100644
--- a/clang/test/C/C23/n2940.c
+++ b/clang/test/C/C23/n2940.c
@@ -1,3 +1,4 @@
+// XFAIL: target={{.*}}-zos{{.*}}
 // RUN: %clang_cc1 -verify=no-trigraphs -std=c23 %s
 // RUN: %clang_cc1 -verify=no-trigraphs -std=gnu23 %s
 // RUN: %clang_cc1 -verify=no-trigraphs -std=gnu17 %s
diff --git a/clang/test/C/drs/dr3xx.c b/clang/test/C/drs/dr3xx.c
index 0f67470b013a5d..c78b66710c89ec 100644
--- a/clang/test/C/drs/dr3xx.c
+++ b/clang/test/C/drs/dr3xx.c
@@ -289,11 +289,19 @@ void f(long double f,
 /* WG14 DR309: yes
  * Clarifying trigraph substitution
  */
+#ifdef __MVS__
+/* Trigraphs are enabled by default on z/OS in every language mode, so the
+ * same warnings are produced for all standards. */
+int dr309??(1??) = { 1 }; /* expected-warning {{trigraph converted to '[' character}}
+                             expected-warning {{trigraph converted to ']' character}}
+                           */
+#else
 int dr309??(1??) = { 1 }; /* c17andearlier-warning {{trigraph converted to '[' character}}
                              c17andearlier-warning {{trigraph converted to ']' character}}
                              c23andup-warning 2 {{trigraph ignored}}
                              c23andup-error {{expected ';' after top level declarator}}
                            */
+#endif
 
 /* NOTE: Due to interactions with the diagnostic system, dr309 should be the
  * last test case in this file because subsequent diagnostics may not be
diff --git a/clang/test/ClangScanDeps/optimize-canonicalize-macros.m b/clang/test/ClangScanDeps/optimize-canonicalize-macros.m
index 3b617129138b1c..3eb0d6add093a8 100644
--- a/clang/test/ClangScanDeps/optimize-canonicalize-macros.m
+++ b/clang/test/ClangScanDeps/optimize-canonicalize-macros.m
@@ -11,6 +11,8 @@
 // This tests that we have two scanning module variants.
 // RUN: find %t/module-cache -name "*.pcm" | wc -l | grep 2
 
+// XFAIL: target={{.*}}-zos{{.*}}
+
 // Verify that there are only two variants and that the expected merges have
 // happened.
 
diff --git a/clang/test/Parser/c11-keywords.c b/clang/test/Parser/c11-keywords.c
index 2621e1a1a8595d..72df636841ade4 100644
--- a/clang/test/Parser/c11-keywords.c
+++ b/clang/test/Parser/c11-keywords.c
@@ -10,9 +10,11 @@ extern _Noreturn void exit(int); /* compat-warning {{'_Noreturn' is incompatible
                                   */
 
 void func(void) {
+#ifndef __MVS__
   static _Thread_local int tl;   /* compat-warning {{'_Thread_local' is incompatible with C standards before C11}}
                                     ext-warning {{'_Thread_local' is a C11 extension}}
                                   */
+#endif
   _Alignas(8) char c;            /* compat-warning {{'_Alignas' is incompatible with C standards before C11}}
                                     ext-warning {{'_Alignas' is a C11 extension}}
                                   */
diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index fcff4dd310c838..73441ec3584d0a 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -5,6 +5,8 @@
 // RUN: %clang_cc1 -fexceptions -fc++-static-destructors=thread-local -verify=expected,thread-local-dtors %s
 // RUN: %clang_cc1 -fexceptions -verify=expected,thread-local-dtors,all-dtors %s
 
+// XFAIL: target=s390x-ibm-zos
+
 struct SecretDestructor {
 private: ~SecretDestructor(); // expected-note + {{private}}
 };

>From ece4388cecb35c2665cef88dd7874090775522bd Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:42:48 -0400
Subject: [PATCH 11/17] Shouldn't fail

---
 clang/test/SemaCXX/no_destroy.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index 73441ec3584d0a..fcff4dd310c838 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -5,8 +5,6 @@
 // RUN: %clang_cc1 -fexceptions -fc++-static-destructors=thread-local -verify=expected,thread-local-dtors %s
 // RUN: %clang_cc1 -fexceptions -verify=expected,thread-local-dtors,all-dtors %s
 
-// XFAIL: target=s390x-ibm-zos
-
 struct SecretDestructor {
 private: ~SecretDestructor(); // expected-note + {{private}}
 };

>From 73f0ec091ad9b40dd13b95420aa7758217250d33 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 00:49:44 -0400
Subject: [PATCH 12/17] Shouldn't fail

---
 clang/test/SemaCXX/no_destroy.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index fcff4dd310c838..c1ab05a2bd9571 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -19,6 +19,7 @@ void locals() {
   thread_local SecretDestructor sd4; // thread-local-dtors-error{{private}}
 #ifdef __MVS__
   // expected-error at -2 {{thread-local storage is not supported for the current target}}
+  // expected-error at -3 {{private}}
 #endif
 }
 

>From b119307e79f2fca8029d01de64f9d2184036010c Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 14:23:58 -0400
Subject: [PATCH 13/17] Handle no TLS on z/OS

---
 clang/test/SemaCXX/no_destroy.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index c1ab05a2bd9571..130d37111def06 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -10,16 +10,21 @@ private: ~SecretDestructor(); // expected-note + {{private}}
 };
 
 SecretDestructor sd1; // all-dtors-error{{private}}
-thread_local SecretDestructor sd2; // thread-local-dtors-error{{private}}
+thread_local SecretDestructor sd2;
 #ifdef __MVS__
   // expected-error at -2 {{thread-local storage is not supported for the current target}}
+  // expected-error at -3 {{variable of type 'SecretDestructor' has private destructor}}
+#else
+  // thread-local-dtors-error at -5 {{private}}
 #endif
 void locals() {
   static SecretDestructor sd3; // all-dtors-error{{private}}
-  thread_local SecretDestructor sd4; // thread-local-dtors-error{{private}}
+  thread_local SecretDestructor sd4;
 #ifdef __MVS__
   // expected-error at -2 {{thread-local storage is not supported for the current target}}
-  // expected-error at -3 {{private}}
+  // expected-error at -3 {{variable of type 'SecretDestructor' has private destructor}}
+#else
+  // thread-local-dtors-error at -5 {{private}}
 #endif
 }
 

>From 31073597142f91d16f829b0d7fc628129e3c62f5 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 14:29:45 -0400
Subject: [PATCH 14/17] fix ups

---
 clang/test/SemaCXX/no_destroy.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/SemaCXX/no_destroy.cpp b/clang/test/SemaCXX/no_destroy.cpp
index 130d37111def06..1dbd422dea875d 100644
--- a/clang/test/SemaCXX/no_destroy.cpp
+++ b/clang/test/SemaCXX/no_destroy.cpp
@@ -13,7 +13,7 @@ SecretDestructor sd1; // all-dtors-error{{private}}
 thread_local SecretDestructor sd2;
 #ifdef __MVS__
   // expected-error at -2 {{thread-local storage is not supported for the current target}}
-  // expected-error at -3 {{variable of type 'SecretDestructor' has private destructor}}
+  // all-dtors-error at -3 {{private}}
 #else
   // thread-local-dtors-error at -5 {{private}}
 #endif
@@ -22,7 +22,7 @@ void locals() {
   thread_local SecretDestructor sd4;
 #ifdef __MVS__
   // expected-error at -2 {{thread-local storage is not supported for the current target}}
-  // expected-error at -3 {{variable of type 'SecretDestructor' has private destructor}}
+  // expected-error at -3 {{private}}
 #else
   // thread-local-dtors-error at -5 {{private}}
 #endif

>From 822545a0769aab719dc93a7ad1f20b2a8c17d1d3 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 15:39:58 -0400
Subject: [PATCH 15/17] unsupported on z/OS

---
 clang/test/Analysis/scan-build/help.test | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/test/Analysis/scan-build/help.test b/clang/test/Analysis/scan-build/help.test
index d1f17cd69f51d1..907f770e4f34de 100644
--- a/clang/test/Analysis/scan-build/help.test
+++ b/clang/test/Analysis/scan-build/help.test
@@ -1,3 +1,4 @@
+UNSUPPORTED: system-zos
 RUN: %scan-build -h | FileCheck %s
 RUN: %scan-build --help | FileCheck %s
 

>From e699d5d476e2bdf2a61de232d0ce9a63ef7a62da Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 15:55:03 -0400
Subject: [PATCH 16/17] fix Index tests

---
 clang/tools/c-index-test/c-index-test.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c
index 4b3e105aa7aff5..a8989a9f47aefd 100644
--- a/clang/tools/c-index-test/c-index-test.c
+++ b/clang/tools/c-index-test/c-index-test.c
@@ -36,7 +36,9 @@ extern int indextest_perform_shell_execution(const char *command_line);
 /* Utility functions.                                                         */
 /******************************************************************************/
 
-#ifdef _MSC_VER
+#ifdef __MVS__
+#include <libgen.h>
+#elif _MSC_VER
 char *basename(const char* path)
 {
     char* base1 = (char*)strrchr(path, '/');

>From 7fd8e81c246bb73988c914754c98b5c13e2c0442 Mon Sep 17 00:00:00 2001
From: Sean Perry <perry at ca.ibm.com>
Date: Wed, 21 Oct 2026 20:38:07 +0000
Subject: [PATCH 17/17] Suppres the warning from z/OS

---
 clang/tools/c-index-test/c-index-test.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/clang/tools/c-index-test/c-index-test.c b/clang/tools/c-index-test/c-index-test.c
index a8989a9f47aefd..2cb544cc6a3e5e 100644
--- a/clang/tools/c-index-test/c-index-test.c
+++ b/clang/tools/c-index-test/c-index-test.c
@@ -1242,7 +1242,14 @@ static CXString GetCursorSource(CXCursor Cursor) {
     clang_disposeString(source);
     return createCXString("<invalid loc>");
   }
+#ifdef __MVS__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+#endif
   b = basename(clang_getCString(source));
+#ifdef __MVS__
+#pragma clang diagnostic pop
+#endif
   result = duplicateCXString(b);
   clang_disposeString(source);
   return result;



More information about the cfe-commits mailing list