In order to support attribute((constructor)) and attribute((destructor)), which is used by various LLVM non-C++ runtime components, AIX will include crti[_64].o and -bcdtors for C language link invocations by default.
I think that rather that adding CC, we should just pull the if and unconditionally link crti.o. This is consistent with what is done on other platforms and since the llvm.global_c/dtors are generally allowable in the IR, we might see them in more than just the two driver scenarios suggested here.
Ditto the previous comment.
I was thinking to use the code to document what exactly happen is under c++ and c mode we link crti.o. But I think it makes sense to just remove if as you said. But we can indicate it's something for C and CXX mode only? Cuz as far as I know, there are c++, c, preprocessor, cl and flang driver mode. I think it only make sense for us to see static init functions generated in IR in c++ and c mode on AIX?
These mode flags don't exactly correspond to input languages though, so it's not quite right to say this is "something for C and CXX mode only" (i.e. CXX isn't defined as "C++" mode, it's "behave similar to g++").
For example, it seems like if someone tired to link a mixed C and Fortran program using --driver-mode=flang, the static init in the C portion would stop working because we'd omit crit.o. I don't know if there is an advantage to being more specific in this case, and it definitely seems like it could run us into problems.