arrow
Return

Fuzzing C++ Compilers via Type-Driven Mutation

delete2025-10-01
delete0
PRE
AI
B
Bo Wang *
C
Chong Chen
J
Junjie Chen
X
Xing Zhang
林
林友芳 (Youfang Lin)
D
Dan Hao
孙俊 cover
孙俊 (Jun Sun)
DOI:10.1145/3763094delete
deleteOriginal
deleteOriginal request for help
deleteShare
deleteSave
Abstract

Abstract

En 中文
C++ is a system-level programming language for modern software development, which supports multiple programming paradigms, including object-oriented, generic, and functional programming. The intrinsic complexity of these paradigms and their interactions grants C++ powerful expressiveness while posing significant challenges for compilers in correctly implementing its type system. A type system encompasses various aspects such as type inference, type checking, subtyping, type conversions, generics, scoping, and binding. However, systematic testing of the type systems of C++ compilers remains largely underexplored in existing studies. In this work, we present TyMut, the first approach specifically designed to test the C++ type system. TyMut is a mutation-based compiler fuzzer equipped with advanced type-driven mutation operators, carefully crafted to target intricate type-related features such as template generics, type conversions, and inheritance. Beyond differential testing, TyMut introduces enhanced test oracles through a must analysis that partially confirms the validity of generated programs. Specifically, mutation operators are classified into well-formed and not-well-formed: Programs generated by well-formed mutation operators are valid and must be accepted by compilers. Programs generated by not-well-formed operators are validated against a set of well-formedness rules. Any violation indicates the program is invalid and must be rejected. For programs that pass the rules but lack a definitive oracle, TyMut applies differential testing to identify behavioral inconsistencies across compilers. The testing campaign took about 32 hours to generate and test 250584 programs. The must analysis provides definite test oracles for nearly 80% of all generated programs. TyMut uncovered 102 bugs in the recent versions of GCC and Clang, with 56 confirmed as new bugs by compiler developers. Among the confirmed bugs, 26 of them cause compiler crashes, and more than 50% cause miscompilation. Additionally, 7 of them had remained hidden for over 20 years, 22 for over 10 years, and 39 for over 5 years. One long-standing bug discovered by TyMut was later confirmed as the root cause of a real-world issue in TensorFlow. Before submitting this paper, 13 bugs were fixed, most of which were fixed within 60 days. Notably, some unconfirmed bugs have led to in-depth discussions among developers. For instance, one bug led a compiler developer to submit a new issue to the C++ language standard, showing that we uncovered ambiguities in the language specification.
Keywords:
Compiler Testing
Compiler Bugs
Type System
C++
Generics
OOP

Journal

P
Proceedings of the ACM on Programming Languages-PACMPL
IF:
2.8
Papers:
308
Citations:
4.7K

Organization

B
Beijing Jiaotong University
Scholars:
2.2W
Papers: 1.7W
Citations: 1.2W
S
Singapore Management University
Scholars:
1.5K
Papers: 2.5K
Citations: 3.5K
P
Peking University
Scholars:
1.0W
Papers: 3.8K
Citations: 14.7W
researcher View more organizations
Cited Papers

Cited Papers

Compiler validation via equivalence modulo inputs
err2014-06-09
err0
PREAI
errVu Le; Mehrdad Afshari; Zhendong Su
errShare
errSave
Fuzz4All: Universal Fuzzing with Large Language Models
err2024-04-12
err0
errOAAI
errChunqiu Steven Xia; Matteo Paltenghi; Jia Le Tian; Michael Pradel; Lingming Zhang
errShare
errSave
err
IF0
err
err0
PREAI
err
errShare
errSave
Detecting C plus plus Compiler Front-End Bugs via Grammar Mutation and Differential Testing
err2023-03-01
err6
errOAAI
errTu, Haoxin; Jiang, He; Zhou, Zhide; Tang, Yixuan; Ren, Zhilei; Qiao, Lei; Jiang, Lingxiao
errShare
errSave
Closer to the edge
err2021-01-27
err0
errOAAI
errKarine Even-Mendoza; Cristian Cadar; Alastair F. Donaldson
errShare
errSave
errShare
errSave
Finding typing compiler bugs
err2022-06-09
err0
PREAI
errChaliasos,Stefanos; Sotiropoulos,Thodoris; Spinellis,Diomidis; Gervais,Arthur; Livshits,Benjamin; Mitropoulos,Dimitris
errShare
errSave
researcher View more