@@ -432,15 +432,20 @@ and the row table names none. The alternatives and why they are not taken:
432432 SDK a machine has. The ` llvm@20.1.7 ` workaround is this alternative done by
433433 hand, and it holds only until the next SDK.
434434
435- ** What the engine does when no package is declared.** Rule C still binds:
436- the runtime is the SDK's, so the headers are the SDK's
435+ ** What the engine does when no package is declared.** The runtime is the
436+ SDK's. A graph that does not import ` std ` takes the SDK's headers
437437(` -nostdinc++ -isystem <sdk>/usr/include/c++/v1 ` ; clang's Darwin driver
438- would otherwise prefer the libc++ installed beside the compiler), and the
439- std module is withdrawn: the SDKs ship no module sources (measured above)
440- and the engine does not consume one, so a program that imports ` std ` is
441- refused with a message naming the two package lines, and a program that does
442- not is unaffected. This is honest where today's default is a coincidence,
443- and it is the same ` HostCoupled ` cell the macOS fallback already occupies.
438+ would otherwise prefer the libc++ installed beside the compiler): one libc++
439+ on every line, which Rule C asks for. A graph that imports ` std ` keeps the
440+ payload's module and headers over the SDK's dylib, which is what every iOS
441+ build got before this batch; the SDKs ship no module sources (measured
442+ above) and the engine does not consume one, so there is no consistent pair
443+ to switch to. That pairing is reported once as a degradation
444+ (` target/cxx-runtime ` ) naming the hazard and the two package lines, and the
445+ build proceeds. A refusal was written first and withdrawn on review: it
446+ would have broken a program that built the day before, while the
447+ degradation names the remedy at the first build and costs nothing until an
448+ inline path reaches an export the older dylib lacks.
444449
445450The engine change, in full:
446451
@@ -466,10 +471,12 @@ The engine change, in full:
4664715 . The std-module adoption at ` prepare.cppm:10362 ` accepts
467472 ` mcpp:c++-abi=libc++ ` as the current spelling of ` hosted-standard-library `
468473 and continues to accept the older one.
469- 6 . On an Apple cross target without a graph C++ runtime: the compile side
470- emits ` -nostdinc++ -isystem <sdk>/usr/include/c++/v1 ` ; ` hasImportStd `
471- is false, and a graph that imports ` std ` is refused with the message
472- naming ` llvm.libcxx ` and ` llvm.compiler-rt-builtins ` .
474+ 6 . On an Apple cross target without a graph C++ runtime: when the graph
475+ does not import ` std ` , ` Toolchain::appleSdkCxxHeaders ` is set and the
476+ compile side emits ` -nostdinc++ -isystem <sdk>/usr/include/c++/v1 ` ; when
477+ it does, the payload's module stays and prepare reports the
478+ ` target/cxx-runtime ` degradation naming ` llvm.libcxx ` and
479+ ` llvm.compiler-rt-builtins ` .
4734807 . The builtins archive. Clang's Darwin driver adds
474481 ` libclang_rt.<platform>.a ` from its own resource directory and, when the
475482 file is absent, continues without it (its source says missing runtime
@@ -515,10 +522,10 @@ the engine's part is measured first:
515522 carries ` -nostdlib++ ` and no ` -lc++ ` .
516523- ` aarch64-macos ` with a floor: command lines unchanged from today, byte for
517524 byte (the ` SelfContained ` row must not move).
518- - ` aarch64-ios-sim ` without the declaration: the compile command carries
519- ` -isystem <sdk>/usr/include/c++/v1 ` and no payload ` -isystem ` ; a program
520- that does not import ` std ` links ` -lc++ ` and runs; one that does is refused
521- with the message naming ` llvm.libcxx ` .
525+ - ` aarch64-ios-sim ` without the declaration: a program that does not import
526+ ` std ` carries ` -isystem <sdk>/usr/include/c++/v1 ` and no payload
527+ ` -isystem ` , links ` -lc++ ` and prints no ` target/cxx-runtime ` line; one that
528+ does still builds and the degradation names ` llvm.libcxx ` .
522529- Builtins: ` aarch64-ios-sim ` with ` llvm.compiler-rt-builtins ` declared and
523530 a program whose source contains ` if (__builtin_available(iOS 17, *)) `
524531 links and runs; without the declaration the same program fails at link
0 commit comments