  As research in automatically detecting bugs grows and produces new
techniques, having suitable collections of programs with known bugs becomes
crucial to reliably and meaningfully compare the effectiveness of these
techniques. Most of the existing approaches rely on benchmarks collecting
manually curated real-world bugs, or synthetic bugs seeded into real-world
programs. Using real-world programs entails that extending the existing
benchmarks or creating new ones remains a complex time-consuming task.
  In this paper, we propose a complementary approach that automatically
generates programs with seeded bugs. Our technique, called HyperPUT, builds C
programs from a "seed" bug by incrementally applying program transformations
(introducing programming constructs such as conditionals, loops, etc.) until a
program of the desired size is generated. In our experimental evaluation, we
demonstrate how HyperPUT can generate buggy programs that can challenge in
different ways the capabilities of modern bug-finding tools, and some of whose
characteristics are comparable to those of bugs in existing benchmarks. These
results suggest that HyperPUT can be a useful tool to support further research
in bug-finding techniques -- in particular their empirical evaluation.
