Title: Factor out Itanium C++ ABI support Student: Charles Davis Abstract: Currently, Clang, like GCC, only supports the Itanium C++ ABI. This is only one of many C++ ABIs in existence. Other C++ ABIs include the various vendor-specific ABIs used on various UNIXes, and the Microsoft Visual C++ ABI. This project proposes to introduce an interface to the IRGen library to support multiple C++ ABis, and to factor Itanium C++ ABI support to use this new interface. Content: My name is Charles Davis, but you can call me "Chip". I am a CS major at the Colorado School of Mines, working on my BS. I love to write code, just for the sake of writing code, but I have many interests beyond that (which I won't discuss because they're not relevant). I have some experience with LLVM and Clang (mostly Clang). You may remember that I started the process of moving calling convention attributes over to function types (which John McCall finished), that I fixed __alignof__() with respect to class/struct/union fields, that I added force_align_arg_pointer support, and (my most controversial addition) that I added support for redeclaring 'extern inline' functions. I have strong C/C++ skills, and I am a fast learner. I have also created my own C++ ABI (but it isn't posted anywhere, and it isn't complete yet). My proposal is simple: I want to allow Clang to support multiple C++ ABIs. Currently Clang, like GCC, only supports the Itanium C++ ABI. There are many others in existence--not the least of which is the Microsoft Visual C++ ABI, which is ubiquitous on Windows. Many of our fellow LLVMers run Windows, so supporting the Microsoft ABI would let us use libraries that were compiled with Visual C++. I can envision several uses for the Wine project as well. And as for me, I'd like a way to test the C++ ABI that I am developing myself. However, implementing an entire C++ ABI is beyond the scope of a GSoC project. Therefore, my project only proposes to add a framework for supporting multiple C++ ABIs to the IRGen library, and then port the current Itanium ABI support over to this new framework. After 4 to 6 weeks, I expect to have the framework in place, and by the end of the 3 months I expect to have the Itanium ABI support ported. After this project is complete, we should be able to implement support for other C++ ABis, such as the Microsoft ABI, as well as the various (obsolete?) vendor-specific C++ ABIs used on various UNIXes.