A formal model and specification language for procedure calling conventions
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
On the Expected Number of Failures Detected by Subdomain Testing and Random Testing
IEEE Transactions on Software Engineering
Lua—an extensible extension language
Software—Practice & Experience
Target-sensitive construction of diagnostic programs for procedure calling sequence generators
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
A theory of probabilistic functional testing
ICSE '97 Proceedings of the 19th international conference on Software engineering
ACM Computing Surveys (CSUR)
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Model checking
QuickCheck: a lightweight tool for random testing of Haskell programs
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
A Retargetable C Compiler: Design and Implementation
A Retargetable C Compiler: Design and Implementation
Automated Debugging: Are We Close
Computer
On some reliability estimation problems in random and partition testing
IEEE Transactions on Software Engineering
CIL: Intermediate Language and Tools for Analysis and Transformation of C Programs
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Embedding an interpreted language using higher-order functions and types
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
Using model checking to find serious file system errors
OSDI'04 Proceedings of the 6th conference on Symposium on Opearting Systems Design & Implementation - Volume 6
Conference record of the 33rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Volatiles are miscompiled, and what to do about it
EMSOFT '08 Proceedings of the 8th ACM international conference on Embedded software
A Formally Verified Compiler Back-end
Journal of Automated Reasoning
Testing an optimising compiler by generating random lambda terms
Proceedings of the 6th International Workshop on Automation of Software Test
Finding and understanding bugs in C compilers
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Past time LTL runtime verification for microcontroller binary code
FMICS'11 Proceedings of the 16th international conference on Formal methods for industrial critical systems
Security'12 Proceedings of the 21st USENIX conference on Security symposium
Compiler testing via a theory of sound optimisations in the C11/C++11 memory model
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
Runtime verification of microcontroller binary code
Science of Computer Programming
Hi-index | 0.00 |
In a C compiler, function calls are difficult to implement correctly because they must respect a platform-specific calling convention. But they are governed by a simple invariant: parameters passed to a function must be received unaltered. A violation of this invariant signals an inconsistency in a compiler. We automatically test the consistency of C compilers using randomly generated programs. An inconsistency manifests itself as an assertion failure when compiling and running the generated code. The generation of programs is type-directed and can be controlled by the user with composable random generators in about 100 lines of Lua. Lua is a scripting language built into our testing tool that drives program generation. Random testing is fully automatic, requires no specification, yet is comparable in effectiveness with specification-based testing from prior work. Using this method, we uncovered 13 new bugs in mature open-source and commercial C compilers.