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编译器和深度学习编译器的缺陷研究;其次,总结了研究者在设计模糊测试技术方面的成果,包括测试程序构造和测试预言机制设计。除讨论现有工作外,本综述还指出了若干开放挑战并强调了研究机遇。