LTO code may end up mixing bitcode files from various sources varying in their use of opaque pointer types. The current strategy to decide between opaque / typed pointers upon the first bitcode file loaded does not work here, since we could be loading a non-opaque bitcode file first and would then be unable to load any files with opaque pointer types later.
This enables/disables opaque pointers immediately when creating an LLVMContext for LTO. Opaque pointers are enabled by default.
- Adds an lto::Config::OpaquePointer option and enforces an upfront decision between the two modes.
- Adds -opaque-pointers/-no-opaque-pointers options to the gold plugin and lld; enabled by default.
- Adds an -lto-opaque-pointers/-lto-opaque-pointers=0 option to the llvm-lto2 tool.
- Changes the clang driver to pass -plugin-opt=no-opaque-pointers to the linker in LTO modes when clang was configured with opaque pointers disabled.
This fixes https://github.com/llvm/llvm-project/issues/55377
I don't think this is needed for cc1 invocations (they should always default to opaque pointers).