Releases and notable changes, newest first, taken from the commit history. Downloads for each release are on the releases page.
mucc-aarch64-linux. --target=aarch64-linux
and --target=x86_64-linux cross-compile either way.
Programs are aligned to 64 KB pages, so they run on kernels with 4,
16 or 64 KB pages (the Raspberry Pi 5's, Asahi Linux).-D value ending in a
// comment, pasting / and /,
a #define ending a macro argument, division by zero or
LONG_MIN / -1 in a constant, and a file-scope array of
run-time size (now an error, as with gcc). A file that includes
itself stops at a depth of 200.-c, -S, -E and
-fsyntax-only with linker inputs (-lm,
objects) no longer link, or reject -o.\" inside a string, as in
.ascii "a\";b".T x = (T){...};) was all zeros; a VLA
typedef's length was evaluated again at each use, and its
sizeof could be 0 after a branch;
__attribute__((vector_size(N))) before the type was
ignored; some decimal double and float
constants were 1 ULP off; the side effects of
__builtin_expect's second argument and of a VLA
parameter's length were dropped.ATOMIC_FLAG_INIT and
ATOMIC_VAR_INIT; unknown attributes (a warning, as with
gcc); a member of a struct a statement expression gives; a
block-scope extern function declaration hiding a local;
gcc's predefined macros for <stdint.h>'s types,
the types' widths, __BIGGEST_ALIGNMENT__ and the
floating-point limits.~ on floats, casts between pointers and
floats, comparing a pointer with a float, and assigning to, or
taking the address of, values that aren't lvalues. Excess
initializer elements warn.-funsigned-char, -fno-pic,
-ffast-math, -fpermissive and
-fms-extensions; -Xlinker is
-Wl, and needs no system ld..int, .word,
.float, .double, .skip,
.space, .fill, .p2align and
.balign with fill and maximum (code padded with GNU as's
NOPs), .set and .equ with constants and
*, /, << and
>>, .rept, .macro,
.pushsection, .popsection,
.ident, merged sections ("aMS"), and
.cfi_* (dropped). The same objects as GNU as.-g records const and
volatile.--libc=system, the speed of generated code, and the
line count.-g: DWARF debug info, so gdb's print,
ptype, info locals and bt show
variables, parameters, globals and their types, as on a
gcc -g -O0 build.-Wall adds
printf and scanf format checks,
if (x = 0), statements with no effect, comparisons with
string literals, unused static functions and enum values a
switch misses; returning a local's address, division by
zero and bad shift counts warn by default. -Werror,
-Werror=<name> and -Wno-<name>
work.__builtin_isnan,
__builtin_inf, __builtin_fabs,
__builtin_fpclassify, ...), its C library builtins
(__builtin_memcpy, __builtin_strlen, ...),
__builtin_choose_expr and
__builtin_object_size.int x; int x; (the same tentative definition
twice, static or not) defines the variable instead of leaving it
undefined at link time; ## with empty arguments
(x##y##z with x and y empty)
and ## in object-like macros paste as C says;
typeof_unqual drops const,
volatile and _Atomic; a compound literal
keeps its type's qualifiers.unsigned
long and floating types from 263 up,
compare-and-swap for _Atomic floating types, and structs
holding a long double passed as the psABI says.const, volatile, long long
and signed char are types of their own, struct layouts
with #pragma pack match gcc's, and
wchar_t is int, as with gcc and musl.if (s), s * 2, s[0],
(int)s), a variable defined twice, and an enumerator
redeclaring a name.__builtin_offsetof and
__PRETTY_FUNCTION__.make -j test-all works.__int128 (also as bit-fields),
_Complex, asm goto, __auto_type,
gcc's vector types with the SSE to SSE4.2 intrinsics headers,
__builtin_shufflevector and
__builtin_convertvector, K&R function definitions,
objects of 2 GiB and more, and -fvisibility=.test/bootstrap.sh); a build is the same
bytes whichever compiler starts it, and an object without
-g the same in any directory.gcc -O0.test/thirdparty/: redis, jq, GNU make, sed with gnulib's
tests, gawk, stb and miniz, besides SQLite, CPython, Git, Lua, zlib,
libpng and TinyCC. Bugs they found are fixed: #line inside
an #if, a directive after an empty macro, #undef
__inline, macros coming back after #undef, and
variables' visibility.# of a parameter also
used expanded, sizeof of a compound literal of unknown
length, #define inline __inline__, and
<stdbit.h> added..S files, -x assembler-with-cpp,
_Pragma, C23's <stdckdint.h>,
offsetof with a member path as a constant, and forward
enum E; declarations.__sync_*, __atomic_*), and
__builtin_expect, __builtin_constant_p and
others.cpuid, rdtsc,
MSRs, descriptor tables, fences, bswap,
popcnt, .ascii, value lists and label
differences.-r), map files
(-Map) and many more -Wl, flags; the driver:
-pthread, -nostdlib,
-Wp,-MD, and tuning and hardening flags accepted.mucc --version prints the version.The first release: a single static binary with its headers and musl inside, which needs nothing else installed.
sudo, and how
to update and uninstall.make build/mucc makes a single binary with the C
library inside it. It is a static musl program that runs in an
empty container, and its default C library is the musl inside
it.--libc=mucc compiles and links against the bundled
musl.make libc..s files.-std= chooses the
standard.asm with operands and register variables.mucc -ar and
mucc -ranlib.--libc=system, and line markers in -E
output.Copyright (c) 2026 Dom-Yan and Rei