  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.
