Abstract

Type-preserving compilation improves software reliability by generating code that can be verified independently of the compiler. Practical type-preserving compilation does not exist for languages with multiple inheritance. This paper presents EMI, the first typed intermediate language to support practical compilation of a programming language with fully general multiple inheritance. The paper demonstrates the practicality of EMI by showing that EMI can be used to faithfully model standard implementation strategies of multiple inheritance for C++, the most widely-used programming language with general multiple inheritance. The paper describes syntax, semantics, and properties of EMI as well as a type-preserving translation from a source language.