We are currently emitting object files that contain both final code and IL. I believe this is wasteful and does not really serve a useful purpose. However, I think we started emitting hybrid object files for some reason. Does anyone remember why?
Object files with just IL are not a problem for the linker because the norm is to link using the gcc/g++ drivers, which already know how to deal with those, so they are transparent to the user. Emitting hybrid files makes -flto compiles even slower than they already are. Additionally, they are problematic in that we may emit diagnostic messages (warning and info) more than once, which is confusing and irritating to users. For instance, a warning during builtin expansion will be emitted both by cc1 and lto1. Disabling the duplicate warning is not trivial because the first time we emit the warning in cc1/cc1plus, we do it after gimple has been written out, so there is no way of telling lto1 that it shouldn't emit that warning. Thanks. Diego.