返回
Fuzzing C++ Compilers via Type-Driven Mutation
DOI:10.1145/3763094.png)
摘要
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
IF:
2.8
论文数:
308
被引数:
4.7K
机构
引用论文
Detecting C plus plus Compiler Front-End Bugs via Grammar Mutation and Differential Testing通过语法突变和差异测试检测C plus plus编译器前端错误

