Practical Construction of Correct Compiler Implementations by Runtime Result Verification

Software verification is an expensive and tedious job, even software in safety critical applications is tested only. This paper deals with the construction of compilers as an exmaple for big software systems that are hard to verifiy. We describe how program-checking can be used to establish the full correctness of optimizing compilers which may be partly generated by unverified construction tools. We show the practicability of our approach with an application to the construction of verified optimizing compiler back-ends. The basic idea of program-checking is to use an unverified algorithm whose results are checked by a verified component at run time. Run-Time Result Verification in our approach assures formal correctness of the compilation process and its implementation. In our example the approach does not only simplify the construction of verified compilers because checking the result of the transformations is much simpler to verify than the verification of an optimizing code selection. Furthermore, we are still able to use existing compiler generator tools without modifications. This work points out the tasks which still have to be verified and it discusses the flexibility of the approach.