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编译器及深度学习编译器;其二,研究人员在模糊测试技术设计方面的努力,包括测试程序构建与测试预言设计。在讨论现有工作的基础上,本综述还梳理了若干开放挑战并展望了研究机遇。