Bug Histories as Sources of Compiler Fuzzing Mutators
Lingjun Liu, Feiran Qin, Owolabi Legunsen, Marcelo d'Amorim
TL;DR
This work investigates whether compiler bug histories can be mined to generate effective fuzzing mutators. It introduces IssueMut, a two-part system that (i) mines mutators from GCC/LLVM bug reports by deriving positive and negative inputs and (ii) retrofits these mutators into a state-of-the-art mutational fuzzer (MetaMutou2024mutators). Across 24-hour campaigns, IssueMut discovers more unique crashes and reveals crashes missed by baselines, with 60 confirmed or fixed bugs reported to developers. The results demonstrate that bug-history mutators complement existing mutational strategies and can significantly boost coverage and bug detection in real-world compilers. The work offers practical lessons on leveraging bug histories, including focusing on recent language features (e.g., C23) and tree-level mutations, to accelerate bug discovery in compiler infrastructures.
Abstract
Bugs in compilers, which are critical infrastructure today, can have outsized negative impacts. Mutational fuzzers aid compiler bug detection by systematically mutating compiler inputs, i.e., programs. Their effectiveness depends on the quality of the mutators used. Yet, no prior work used compiler bug histories as a source of mutators. We propose IssueMut, the first approach for extracting compiler fuzzing mutators from bug histories. Our insight is that bug reports contain hints about program elements that induced compiler bugs; they can guide fuzzers towards similar bugs. IssueMut uses an automated method to mine mutators from bug reports and retrofit such mutators into existing mutational compiler fuzzers. Using IssueMut, we mine 587 mutators from 1760 GCC and LLVM bug reports. Then, we run IssueMut on these compilers, with all their test inputs as seed corpora. We find that "bug history" mutators are effective: they find new bugs that a state-of-the-art mutational compiler fuzzer misses-28 in GCC and 37 in LLVM. Of these, 60 were confirmed or fixed, validating our idea that bug histories have rich information that compiler fuzzers should leverage.
