In this chapter, you learned how to translate aggregate data types and pointers to LLVM IR code. You also learned about the intricacies of the ABI. Finally, you learned about the different approaches to translating classes and virtual functions to LLVM IR. With the knowledge of this chapter, you will be able to create an LLVM IR code generator for most real programming languages.
In the next chapter, you will learn about some advanced techniques. Exception handling is fairly common in modern programming languages, and LLVM has some support for it. Attaching type information to pointers can help with certain optimizations, so we will add this, too. Last but not least, the ability to debug an application is essential for many developers, so we will add the generation of debug metadata to our code generator.