Release v0.76.0 — 2026-08-11
madc's first public macOS release. The tarballs
(madc-0.76.0-macos-{arm64,x86_64}.tar.gz) run on a header-less Mac —
JIT, packed C/C++ standard-library forest, and native AOT -o that now
covers C and C++ programs — and every byte they embed is
provenance-clean: the darwin C prelude is flattened from Apple's own
APSL/BSD-licensed headers as publicly shipped by the Zig project, with
the binary naming its own prelude input and the release gate refusing
anything else. Underneath sits the release's deepest fix: on AArch64 the
hidden result pointer of a by-value class return rides x8, not the
first argument register, and madc now lets the target place it.
- Public macOS tarballs (arm64 + x86_64) — stripped, ad-hoc-signed
hosted binaries carrying the compressed frozen forest (<string>,
containers, streams,<algorithm>compile straight from the image);
THIRD_PARTY_NOTICES/ships the per-file license audit (213 APSL,
21 BSD, 1 public domain) and the canonical APSL-2.0 text. - Darwin AOT for C++ —
madc -static-libmadc -o prog prog.mad
emits a runnable, self-signed Mach-O executable: the fork's writer
binds imports flat-namespace when extra dylibs are present, and
madc putslibc++.1.dylibon the load list whenever the import set
is Itanium-mangled. Runtime-free C and C-lane-runtime (try/catch,
VLA) static images were already covered. libmadc_rtfor emitted C — the tarballs ship the C-lane runtime
archive;cc -std=c11 program.c -L<dir>/lib -lmadc_rt -lc++links
madc's--emit=c11output on a stock Mac.- The AArch64 indirect-return ABI fix — by-value class returns
(std::locale,ostringstream::str()) declared their hidden result
pointer as a first argument, an x86-64-only shape that read garbage
thispointers on Apple arm64. The parameter is now marked
(__attribute__((ret_addr))→MIR_T_RBLK) and placed per target;
CirBuilder::retbuf_paramis its single producer. - Target-neutral emitted C for
>16-byte class returns — the
emit-time pre-pass fuses declaration and call into
struct __madc_ret_K X = SYM(args);, the one C spelling both ABIs
compile to the C++ convention. - An unprototyped call is not a variadic call (fork) — C89
implicit-declaration calls now build their proto from the call
site's promoted argument types; fatal on Apple arm64 before, where
varargs are stack-banished. - Forest fidelity under libc++ — container v39 transports the
owner-derived Itanium symbol for bound static data members, minted
__fwdalias tags reach the type arena,__need-protocol servings
form no husk units, and binding is machine-portable (include-spelling
path-tail match). - Embedded headers rounded out —
stdint.his the complete C11
7.20 surface,#include_next/__has_include_nextanswer honestly,
and the glibc__needprotocol is honoured through PCH and forest. - Compiler fixes surfaced by the lane — file-scope
staticclass
objects no longer collapse tostatic int(one type-spec derivation
for all storage shapes); the--emitlane opens the stdlib-flavor
runtime before tree build, fixing facet-id externs under libc++. - Suite grows to 1019 integration tests (JIT, EXE, OBJ, release,
packed all 0-failure) and 1015/0 on the libc++ flavor lane; the
on-Mac evidence battery runs 10 checks (the two fails are the named
known-opens: groves alias-husk completion, darwinmadc::value).
See CHANGELOG.md for full details.