K-CONFIG: Using Failing Test Cases to Generate Test Cases in GCC
  Compilers
  The correctness of compilers is instrumental in the safety and reliability of
other software systems, as bugs in compilers can produce programs that do not
reflect the intents of programmers. Compilers are complex software systems due
to the complexity of optimization. GCC is an optimizing C compiler that has
been used in building operating systems and many other system software. In this
paper, we describe K-CONFIG, an approach that uses the bugs reported in the GCC
repository to generate new test inputs. Our main insight is that the features
appearing in the bug reports are likely to reappear in the future bugs, as the
bugfixes can be incomplete or those features may be inherently challenging to
implement hence more prone to errors. Our approach first clusters the failing
test input extracted from the bug reports into clusters of similar test inputs.
It then uses these clusters to create configurations for Csmith, the most
popular test generator for C compilers. In our experiments on two versions of
GCC, our approach could trigger up to 36 miscompilation failures, and 179
crashes, while Csmith with the default configuration did not trigger any
failures. This work signifies the benefits of analyzing and using the reported
bugs in the generation of new test inputs.
