[llvm] annotate interfaces in Passes for DLL export #143794
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Purpose
This patch is one in a series of code-mods that annotate LLVM’s public interface for export. This patch annotates the
llvm/Passeslibrary and other pass-related headers. These annotations currently have no meaningful impact on the LLVM build; however, they are a prerequisite to support an LLVM Windows DLL (shared library) build.Background
This effort is tracked in #109483. Additional context is provided in this discourse, and documentation for
LLVM_ABIand related annotations is found in the LLVM repo here.The bulk of these changes were generated automatically using the Interface Definition Scanner (IDS) tool, followed formatting with
git clang-format.The following manual adjustments were also applied after running IDS on Linux:
initializeKCFIPassfunction from llvm/include/llvm/InitializePasses.h because IDS only auto-annotates the first declaration it encounters, and the second un-annotated declaration results in an MSVC warningLLVM_ABIto a number of privateAnalysisKeyfields in classes that extend theAnalysisInfoMixintemplate class.LLVM_ABIto theChangeReporterandTextChangeReportertemplate class definitions in llvm/include/llvm/Passes/StandardInstrumentations.h and remove the extern template instantiations. This is the only way I've found to get everything compiling warning-free when building a DLL because both template classes have methods implemented out-of-line.Validation
Local builds and tests to validate cross-platform compatibility. This included llvm, clang, and lldb on the following configurations: