arrow
返回

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
孙俊 封面图
孙俊 (Jun Sun)
DOI:10.1145/3763094delete
delete原文链接
delete原文求助
delete分享
delete收藏
摘要

摘要

En 中文
C++是一种面向现代软件开发的系统级编程语言,支持多种编程范式,包括面向对象、泛型和函数式编程。这些范式的固有复杂性和它们之间的交互赋予了C++强大的表达能力,同时也给编译器在正确实现其类型系统方面带来了重大挑战。类型系统涵盖类型推断、类型检查、子类型、类型转换、泛型、作用域和绑定等多个方面。然而,现有研究中对C++编译器类型系统的系统性测试仍然在很大程度上未被探索。在本工作中,我们提出了TyMut,这是首个专门设计用于测试C++类型系统的方法。TyMut是一种基于变异的编译器模糊测试工具,配备了先进的类型驱动变异算子,精心设计以针对模板泛型、类型转换和继承等复杂的类型相关特性。除了差异测试外,TyMut通过must分析引入了增强的测试断言,部分确认了生成程序的有效性。具体来说,变异算子被分为格式正确和格式不正确两类:由格式正确的变异算子生成的程序是有效的,必须被编译器接受;由格式不正确的算子生成的程序需根据一组格式正确性规则进行验证,任何违规都表明程序无效且必须被拒绝。对于通过规则但缺乏明确断言的程序,TyMut采用差异测试来识别编译器间的行为不一致。本次测试活动花费约32小时生成并测试了250584个程序。must分析为近80%的生成程序提供了明确的测试断言。TyMut在GCC和Clang的最新版本中发现了102个缺陷,其中56个被编译器开发者确认为新缺陷。在确认的缺陷中,26个导致编译器崩溃,超过50%导致编译错误。此外,其中7个缺陷已隐藏超过20年,22个超过10年,39个超过5年。TyMut发现的一个长期存在的缺陷后来被确认为TensorFlow中一个真实问题的根本原因。在提交本文之前,13个缺陷已被修复,其中大部分在60天内完成。值得注意的是,一些未确认的缺陷引发了开发者之间的深入讨论。例如,一个缺陷促使编译器开发者向C++语言标准提交了一个新问题,表明我们揭示了语言规范中的歧义。
Keyword:
Compiler Testing
Compiler Bugs
Type System
C++
Generics
OOP

期刊

P
Proceedings of the ACM on Programming Languages-PACMPL
IF:
2.8
论文数:
308
被引数:
4.7K

机构

B
Beijing Jiaotong University
学者数:
2.2W
论文数: 1.7W
被引数: 1.2W
S
Singapore Management University
学者数:
1.5K
论文数: 2.5K
被引数: 3.5K
P
Peking University
学者数:
1.0W
论文数: 3.8K
被引数: 14.7W
学者 查看更多机构
引用论文

引用论文

Compiler validation via equivalence modulo inputs
err2014-06-09
err0
PREAI
errVu Le; Mehrdad Afshari; Zhendong Su
err分享
err收藏
Fuzz4All: Universal Fuzzing with Large Language Models
err2024-04-12
err0
errOAAI
errChunqiu Steven Xia; Matteo Paltenghi; Jia Le Tian; Michael Pradel; Lingming Zhang
err分享
err收藏
err
IF0
err
err0
PREAI
err
err分享
err收藏
err分享
err收藏
err分享
err收藏
err分享
err收藏
Finding typing compiler bugs
err2022-06-09
err0
PREAI
errChaliasos,Stefanos; Sotiropoulos,Thodoris; Spinellis,Diomidis; Gervais,Arthur; Livshits,Benjamin; Mitropoulos,Dimitris
err分享
err收藏
学者 查看更多内容