Most software that runs on computers undergoes processing by compilers. Since compilers constitute the fundamental infrastructure of software development, their correctness is paramount. Over the years, researchers have invested in analyzing, understanding, and characterizing the bug features over mainstream compilers. These studies have demonstrated that compilers correctness requires greater research attention, and they also pave the way for compiler fuzzing. To improve compilers correctness, researchers have proposed numerous compiler fuzzing techniques. These techniques were initially developed for testing traditional compilers such as GCC/LLVM and have since been generalized to test various newly developed, domain-specific compilers, such as graphics shader compilers and deep learning (DL) compilers. In this survey, we provide a comprehensive summary of the research efforts for understanding and addressing compilers defects. Specifically, this survey mainly covers two aspects. First, it covers researchers investigation and expertise on compilers bugs, such as their symptoms and root causes. The compiler bug studies cover GCC/LLVM, JVM compilers, and DL compilers. In addition, it covers researchers efforts in designing fuzzing techniques, including constructing test programs and designing test oracles. Besides discussing the existing work, this survey outlines several open challenges and highlights research opportunities.
翻译:计算机上运行的绝大多数软件都需经过编译器处理。由于编译器构成软件开发的基石,其正确性至关重要。多年来,研究者持续对主流编译器的缺陷特征进行分析、理解与刻画。这些研究表明编译器正确性需要更多研究关注,同时也为编译器模糊测试奠定了基础。为提升编译器正确性,研究者提出了众多模糊测试技术。这些技术最初针对GCC/LLVM等传统编译器开发,后来逐步推广至各类新型领域专用编译器,如图形着色器编译器与深度学习编译器。本综述全面梳理了理解与解决编译器缺陷的相关研究工作。具体而言,综述主要涵盖两方面内容:第一,研究者对编译器缺陷症状、根因等特征的分析与认知,涉及GCC/LLVM、JVM编译器及深度学习编译器;第二,研究者设计模糊测试技术的相关工作,包括测试程序构建与测试预言设计。除现有工作外,本综述还指出了若干开放挑战与研究机遇。