Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add release note about ABI #6

Open
wants to merge 26 commits into
base: release/19.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
9301cd5
[sanitizer_common] Make sanitizer_linux.cpp kernel_stat* handling Lin…
rorth Jul 30, 2024
9dc4bdf
[clang][modules] Built-in modules are not correctly enabled for Mac C…
ian-twilightcoder Aug 20, 2024
8ea372d
[SPARC] Remove assertions in printOperand for inline asm operands (#1…
koachan Aug 20, 2024
6420a2e
Add AIX/PPC Clang/LLVM release notes for LLVM 19.
amy-kwan Aug 20, 2024
38f3dbe
use default intrinsic attrs for BPF packet loads
brycekahle Aug 20, 2024
43b455b
[AMDGPU] Disable inline constants for pseudo scalar transcendentals (…
perlfu Aug 17, 2024
b6a562d
[DAGCombiner] Fix ReplaceAllUsesOfValueWith mutation bug in visitFREE…
bjope Aug 21, 2024
1503d18
[X86] Use correct fp immediate types in _mm_set_ss/sd
RKSimon Aug 20, 2024
1241c76
[clang-format] Don't insert a space between :: and * (#105043)
owenca Aug 23, 2024
3ff9d92
[ConstraintElim] Fix miscompilation caused by PR97974 (#105790)
dtcxzyw Aug 23, 2024
cfe8eb8
[MCA][X86] Add missing 512-bit vpscatterqd/vscatterqps schedule data …
RKSimon Aug 1, 2024
5f744ee
[DwarfEhPrepare] Assign dummy debug location for more inserted _Unwin…
sunfishcode Aug 22, 2024
53c43ba
[clangd] Add clangd 19 release notes
HighCommander4 Aug 25, 2024
1b643db
Restrict LLVM_TARGETS_TO_BUILD in Windows release packaging (#106059)
zmodem Aug 29, 2024
eba1ef5
[AArch64] Make apple-m4 armv8.7-a again (from armv9.2-a). (#106312)
ahmedbougacha Aug 29, 2024
c21b039
workflows/release-binaries: Remove .git/config file from artifacts (#…
tstellar Aug 31, 2024
816fde1
[clang] Install scan-build-py into plain "lib" directory (#106612)
mgorny Aug 29, 2024
e81188d
[llvm][CodeGen] Added missing initialization failure information for …
kaiyan96 Jul 24, 2024
7b86034
[llvm][CodeGen] Added a new restriction for II by pragma in window sc…
kaiyan96 Jul 24, 2024
06d0097
[llvm][CodeGen] Fixed a bug in stall cycle calculation for window sch…
kaiyan96 Jul 25, 2024
5a164a2
[llvm][CodeGen] Fixed max cycle calculation with zero-cost instructio…
kaiyan96 Jul 24, 2024
5457983
[llvm][CodeGen] Address the issue of multiple resource reservations I…
kaiyan96 Aug 5, 2024
78f97e2
[analyzer] Limit `isTainted()` by skipping complicated symbols (#105493)
steakhal Aug 21, 2024
40b0764
[lld-macho] Fix crash: ObjC category merge + relative method lists (#…
alx32 Aug 15, 2024
45b149d
[PowerPC] Respect endianness when bitcasting to fp128 (#95931)
tgymnich Aug 8, 2024
3f768dd
Add release note about ABI implementation changes for _BitInt on Arm
mgabka Aug 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/release-binaries-save-stage/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ inputs:
required: true
type: 'string'

permissions:
contents: read

runs:
using: "composite"
steps:
Expand All @@ -18,6 +21,9 @@ runs:
- name: Package Build and Source Directories
shell: bash
run: |
# Remove .git/config to avoid leaking GITHUB_TOKEN stored there.
# See https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens/
rm -Rf .git/config
# Windows does not support symlinks, so we need to dereference them.
tar --exclude build/ ${{ (runner.os == 'Windows' && '-h') || '' }} -c . | zstd -T0 -c > ../llvm-project.tar.zst
mv ../llvm-project.tar.zst .
Expand Down
35 changes: 35 additions & 0 deletions clang-tools-extra/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ Diagnostics
Semantic Highlighting
^^^^^^^^^^^^^^^^^^^^^

- Improved semantic token coverage in some edge cases, e.g. IndirectFieldDecl

Compile flags
^^^^^^^^^^^^^

Expand All @@ -70,24 +72,57 @@ Hover
Code completion
^^^^^^^^^^^^^^^

- ``--function-arg-placeholders=0`` is now respected for variable template argument lists
as well
- Macro proposals now use the completion item kind ``Constant`` (for object-like macros)
or ``Function`` (for function-style macros) even for proposals coming from the index

Code actions
^^^^^^^^^^^^

- The "extract variable" tweak is no longer offered for the initializer expression of a
declaration
- The tweak for turning unscoped into scoped enums now removes redundant prefixes
from the enum values.
- Support "move function body out-of-line" in non-header files as well

Signature help
^^^^^^^^^^^^^^

- Signature help now shows function argument names for calls through pointers to
functions in struct fields

Cross-references
^^^^^^^^^^^^^^^^

- Improve go-to-definition for some concept references

Document outline
^^^^^^^^^^^^^^^^

- Improved precision of document outline information for symbols whose definitions
involve macro expansions

Clang-tidy integration
^^^^^^^^^^^^^^^^^^^^^^

- The quick fix for clang-tidy's ``readability-identifier-naming`` diagnostic is now
hooked to invoke ``textDocument/rename``, renaming the identifier across the whole
project rather than just the translation unit of the diagnostic
- ``misc-const-correctness`` can now be enabled with ``FastCheckFilter: None``
(previously clangd would force it off unconditionally due to its run time)

Objective-C
^^^^^^^^^^^

- Added support for renaming Objective-C methods

Miscellaneous
^^^^^^^^^^^^^

- Worked around a clang-format bug that caused memory exhaustion when opening some large
``.h`` files due to the formatter's language guessing heuristic (#GH85703)
- Various other stability improvements, e.g. crash fixes
- Added a boolean option `AnalyzeAngledIncludes` to `Includes` config section,
which allows to enable unused includes detection for all angled ("system") headers.
At this moment umbrella headers are not supported, so enabling this option
Expand Down
25 changes: 25 additions & 0 deletions clang/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1221,6 +1221,9 @@ Arm and AArch64 Support
``-mabi=pauthtest`` option or via specifying ``pauthtest`` environment part of
target triple.

- The C23 ``_BitInt`` implementation has been brought into compliance
with AAPCS32 and AAPCS64.

Android Support
^^^^^^^^^^^^^^^

Expand Down Expand Up @@ -1276,6 +1279,14 @@ RISC-V Support
accesses may be created. ``-m[no-]strict-align`` applies to both scalar and
vector.

PowerPC Support
^^^^^^^^^^^^^^^

- Clang now emits errors for impossible ``__attribute__((musttail))``.
- Added support for ``-mcpu=[pwr11 | power11]`` and ``-mtune=[pwr11 | power11]``.
- Added support for ``builtin_cpu_supports`` on AIX, along with a subset of
features that can be queried.

CUDA/HIP Language Changes
^^^^^^^^^^^^^^^^^^^^^^^^^

Expand All @@ -1294,6 +1305,14 @@ AIX Support
base is encoded as an immediate operand.
This access sequence is not used for TLS variables larger than 32KB, and is
currently only supported on 64-bit mode.
- Introduced the options ``-mtocdata/-mno-tocdata`` to enable/disable TOC data
transformations for the listed suitable variables.
- Introduced the ``-maix-shared-lib-tls-model-opt`` option to enable the tuning
of changing local-dynamic mode access(es) to initial-exec access(es) at the
function level on 64-bit mode.
- Clang now emits errors for ``-gdwarf-5``.
- Added the support of the OpenMP runtime libomp on AIX. OpenMP applications can be
compiled with ``-fopenmp`` and execute on AIX.

NetBSD Support
^^^^^^^^^^^^^^
Expand Down Expand Up @@ -1391,6 +1410,11 @@ Crash and bug fixes
- Z3 crosschecking (aka. Z3 refutation) is now bounded, and can't consume
more total time than the eymbolic execution itself. (#GH97298)

- In clang-18, we regressed in terms of analysis time for projects having many
nested loops with buffer indexing or shifting or other binary operations.
For example, functions computing different hash values. Some of this slowdown
was attributed to taint analysis, which is fixed now. (#GH105493)

- ``std::addressof``, ``std::as_const``, ``std::forward``,
``std::forward_like``, ``std::move``, ``std::move_if_noexcept``, are now
modeled just like their builtin counterpart. (#GH94193)
Expand Down Expand Up @@ -1451,6 +1475,7 @@ OpenMP Support
--------------

- Added support for the `[[omp::assume]]` attribute.
- AIX added an include directory for ``omp.h`` at ``/opt/IBM/openxlCSDK/include/openmp``.

Additional Information
======================
Expand Down
5 changes: 5 additions & 0 deletions clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.def
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,11 @@ ANALYZER_OPTION(
ANALYZER_OPTION(unsigned, MaxSymbolComplexity, "max-symbol-complexity",
"The maximum complexity of symbolic constraint.", 35)

// HACK:https://discourse.llvm.org/t/rfc-make-istainted-and-complex-symbols-friends/79570
// Ideally, we should get rid of this option soon.
ANALYZER_OPTION(unsigned, MaxTaintedSymbolComplexity, "max-tainted-symbol-complexity",
"[DEPRECATED] The maximum complexity of a symbol to carry taint", 9)

ANALYZER_OPTION(unsigned, MaxTimesInlineLarge, "max-times-inline-large",
"The maximum times a large function could be inlined.", 32)

Expand Down
10 changes: 9 additions & 1 deletion clang/lib/Driver/ToolChains/Darwin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2953,7 +2953,15 @@ static bool sdkSupportsBuiltinModules(
case Darwin::MacOS:
return SDKVersion >= VersionTuple(15U);
case Darwin::IPhoneOS:
return SDKVersion >= VersionTuple(18U);
switch (TargetEnvironment) {
case Darwin::MacCatalyst:
// Mac Catalyst uses `-target arm64-apple-ios18.0-macabi` so the platform
// is iOS, but it builds with the macOS SDK, so it's the macOS SDK version
// that's relevant.
return SDKVersion >= VersionTuple(15U);
default:
return SDKVersion >= VersionTuple(18U);
}
case Darwin::TvOS:
return SDKVersion >= VersionTuple(18U);
case Darwin::WatchOS:
Expand Down
16 changes: 10 additions & 6 deletions clang/lib/Format/TokenAnnotator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4467,10 +4467,8 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
}
if (Left.is(tok::colon))
return Left.isNot(TT_ObjCMethodExpr);
if (Left.is(tok::coloncolon)) {
return Right.is(tok::star) && Right.is(TT_PointerOrReference) &&
Style.PointerAlignment != FormatStyle::PAS_Left;
}
if (Left.is(tok::coloncolon))
return false;
if (Left.is(tok::less) || Right.isOneOf(tok::greater, tok::less)) {
if (Style.Language == FormatStyle::LK_TextProto ||
(Style.Language == FormatStyle::LK_Proto &&
Expand Down Expand Up @@ -4580,8 +4578,14 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
if (!BeforeLeft)
return false;
if (BeforeLeft->is(tok::coloncolon)) {
return Left.is(tok::star) &&
Style.PointerAlignment != FormatStyle::PAS_Right;
if (Left.isNot(tok::star))
return false;
assert(Style.PointerAlignment != FormatStyle::PAS_Right);
if (!Right.startsSequence(tok::identifier, tok::r_paren))
return true;
assert(Right.Next);
const auto *LParen = Right.Next->MatchingParen;
return !LParen || LParen->isNot(TT_FunctionTypeLParen);
}
return !BeforeLeft->isOneOf(tok::l_paren, tok::l_square);
}
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Headers/emmintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -1771,7 +1771,7 @@ static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_undefined_pd(void) {
/// lower 64 bits contain the value of the parameter. The upper 64 bits are
/// set to zero.
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_set_sd(double __w) {
return __extension__(__m128d){__w, 0};
return __extension__(__m128d){__w, 0.0};
}

/// Constructs a 128-bit floating-point vector of [2 x double], with each
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Headers/xmmintrin.h
Original file line number Diff line number Diff line change
Expand Up @@ -1910,7 +1910,7 @@ _mm_undefined_ps(void)
static __inline__ __m128 __DEFAULT_FN_ATTRS
_mm_set_ss(float __w)
{
return __extension__ (__m128){ __w, 0, 0, 0 };
return __extension__ (__m128){ __w, 0.0f, 0.0f, 0.0f };
}

/// Constructs a 128-bit floating-point vector of [4 x float], with each
Expand Down
7 changes: 7 additions & 0 deletions clang/lib/StaticAnalyzer/Checkers/Taint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include "clang/StaticAnalyzer/Checkers/Taint.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
#include <optional>

Expand Down Expand Up @@ -256,6 +257,12 @@ std::vector<SymbolRef> taint::getTaintedSymbolsImpl(ProgramStateRef State,
if (!Sym)
return TaintedSymbols;

// HACK:https://discourse.llvm.org/t/rfc-make-istainted-and-complex-symbols-friends/79570
if (const auto &Opts = State->getAnalysisManager().getAnalyzerOptions();
Sym->computeComplexity() > Opts.MaxTaintedSymbolComplexity) {
return {};
}

// Traverse all the symbols this symbol depends on to see if any are tainted.
for (SymbolRef SubSym : Sym->symbols()) {
if (!isa<SymbolData>(SubSym))
Expand Down
1 change: 1 addition & 0 deletions clang/test/Analysis/analyzer-config.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
// CHECK-NEXT: max-inlinable-size = 100
// CHECK-NEXT: max-nodes = 225000
// CHECK-NEXT: max-symbol-complexity = 35
// CHECK-NEXT: max-tainted-symbol-complexity = 9
// CHECK-NEXT: max-times-inline-large = 32
// CHECK-NEXT: min-cfg-size-treat-functions-as-large = 14
// CHECK-NEXT: mode = deep
Expand Down
49 changes: 48 additions & 1 deletion clang/test/Analysis/taint-generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ void clang_analyzer_isTainted_char(char);
void clang_analyzer_isTainted_wchar(wchar_t);
void clang_analyzer_isTainted_charp(char*);
void clang_analyzer_isTainted_int(int);
void clang_analyzer_dump_int(int);

int coin();

Expand Down Expand Up @@ -459,7 +460,53 @@ unsigned radar11369570_hanging(const unsigned char *arr, int l) {
longcmp(a, t, c);
l -= 12;
}
return 5/a; // expected-warning {{Division by a tainted value, possibly zero}}
return 5/a; // FIXME: Should be a "div by tainted" warning here.
}

// This computation used to take a very long time.
void complex_taint_queries(const int *p) {
int tainted = 0;
scanf("%d", &tainted);

// Make "tmp" tainted.
int tmp = tainted + tainted;
clang_analyzer_isTainted_int(tmp); // expected-warning{{YES}}

// Make "tmp" SymExpr a lot more complicated by applying computation.
// This should balloon the symbol complexity.
tmp += p[0] + p[0];
tmp += p[1] + p[1];
tmp += p[2] + p[2];
clang_analyzer_dump_int(tmp); // expected-warning{{((((conj_}} symbol complexity: 8
clang_analyzer_isTainted_int(tmp); // expected-warning{{YES}}

tmp += p[3] + p[3];
clang_analyzer_dump_int(tmp); // expected-warning{{(((((conj_}} symbol complexity: 10
clang_analyzer_isTainted_int(tmp); // expected-warning{{NO}} 10 is already too complex to be traversed

tmp += p[4] + p[4];
tmp += p[5] + p[5];
tmp += p[6] + p[6];
tmp += p[7] + p[7];
tmp += p[8] + p[8];
tmp += p[9] + p[9];
tmp += p[10] + p[10];
tmp += p[11] + p[11];
tmp += p[12] + p[12];
tmp += p[13] + p[13];
tmp += p[14] + p[14];
tmp += p[15] + p[15];

// The SymExpr still holds the full history of the computation, yet, "isTainted" doesn't traverse the tree as the complexity is over the threshold.
clang_analyzer_dump_int(tmp);
// expected-warning@-1{{(((((((((((((((((conj_}} symbol complexity: 34
clang_analyzer_isTainted_int(tmp); // expected-warning{{NO}} FIXME: Ideally, this should still result in "tainted".

// By making it even one step more complex, then it would hit the "max-symbol-complexity"
// threshold and the engine would cut the SymExpr and replace it by a new conjured symbol.
tmp += p[16];
clang_analyzer_dump_int(tmp); // expected-warning{{conj_}} symbol complexity: 1
clang_analyzer_isTainted_int(tmp); // expected-warning{{NO}}
}

// Check that we do not assert of the following code.
Expand Down
26 changes: 26 additions & 0 deletions clang/test/CodeGen/X86/strictfp_patterns.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
// RUN: %clang_cc1 %s -O2 -emit-llvm -o - -triple x86_64-unknown-unknown -ffreestanding -ffp-exception-behavior=maytrap -Wall -Werror | FileCheck %s

#include <immintrin.h>

// PR104848 - ensure the _mm_set_ss/d headers don't implicity promote any integer/fp values.

// CHECK-LABEL: @test_mm_set_ss(
// CHECK-NEXT: entry:
// CHECK-NEXT: [[VECINIT3_I:%.*]] = insertelement <4 x float> <float poison, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, float [[NUM:%.*]], i64 0
// CHECK-NEXT: ret <4 x float> [[VECINIT3_I]]
//
__m128 test_mm_set_ss(float num)
{
return _mm_set_ss(num);
}

// CHECK-LABEL: @test_mm_set_sd(
// CHECK-NEXT: entry:
// CHECK-NEXT: [[VECINIT1_I:%.*]] = insertelement <2 x double> <double poison, double 0.000000e+00>, double [[NUM:%.*]], i64 0
// CHECK-NEXT: ret <2 x double> [[VECINIT1_I]]
//
__m128d test_mm_set_sd(double num)
{
return _mm_set_sd(num);
}
9 changes: 9 additions & 0 deletions clang/test/CodeGen/aarch64-targetattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,14 @@ __attribute__((target("no-v9.3a")))
//
void minusarch() {}

__attribute__((target("cpu=apple-m4")))
// CHECK-LABEL: define {{[^@]+}}@applem4
// CHECK-SAME: () #[[ATTR18:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret void
//
void applem4() {}

//.
// CHECK: attributes #[[ATTR0]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+crc,+fp-armv8,+lse,+neon,+ras,+rdm,+v8.1a,+v8.2a,+v8a" }
// CHECK: attributes #[[ATTR1]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+crc,+fp-armv8,+fullfp16,+lse,+neon,+ras,+rdm,+sve,+v8.1a,+v8.2a,+v8a" }
Expand All @@ -210,6 +218,7 @@ void minusarch() {}
// CHECK: attributes #[[ATTR15]] = { noinline nounwind optnone "branch-target-enforcement" "guarded-control-stack" "no-trapping-math"="true" "sign-return-address"="non-leaf" "sign-return-address-key"="a_key" "stack-protector-buffer-size"="8" "target-cpu"="neoverse-n1" "target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+spe,+ssbs,+sve,+sve2,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8a" "tune-cpu"="cortex-a710" }
// CHECK: attributes #[[ATTR16]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
// CHECK: attributes #[[ATTR17]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="-v9.3a" }
// CHECK: attributes #[[ATTR18]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="apple-m4" "target-features"="+aes,+bf16,+bti,+ccidx,+complxnum,+crc,+dit,+dotprod,+flagm,+fp-armv8,+fp16fml,+fullfp16,+i8mm,+jsconv,+lse,+neon,+pauth,+perfmon,+predres,+ras,+rcpc,+rdm,+sb,+sha2,+sha3,+sme,+sme-f64f64,+sme-i16i64,+sme2,+ssbs,+v8.1a,+v8.2a,+v8.3a,+v8.4a,+v8.5a,+v8.6a,+v8.7a,+v8a,+wfxt" }
//.
// CHECK: [[META0:![0-9]+]] = !{i32 1, !"wchar_size", i32 4}
// CHECK: [[META1:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Driver/Inputs/MacOSX15.0.sdk/SDKSettings.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"Version":"990.0", "MaximumDeploymentTarget": "99.0.99"}
{"Version":"15.0", "MaximumDeploymentTarget": "15.0.99"}
1 change: 1 addition & 0 deletions clang/test/Driver/Inputs/MacOSX15.1.sdk/SDKSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Version":"15.1", "MaximumDeploymentTarget": "15.1.99"}
3 changes: 3 additions & 0 deletions clang/test/Driver/darwin-builtin-modules.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,8 @@

// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos14.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-macos15.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.0.sdk -target x86_64-apple-ios18.0-macabi -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.1.sdk -target x86_64-apple-macos15.1 -darwin-target-variant x86_64-apple-ios18.1-macabi -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/MacOSX15.1.sdk -target x86_64-apple-ios18.1-macabi -darwin-target-variant x86_64-apple-macos15.1 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// RUN: %clang -isysroot %S/Inputs/DriverKit23.0.sdk -target arm64-apple-driverkit23.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_FUTURE %s
// CHECK_FUTURE-NOT: -fbuiltin-headers-in-system-modules
Loading