forked from OSchip/llvm-project
Revert r276973 "Adjust Registry interface to not require plugins to export a registry"
Buildbot failures when building with clang -Werror. Reverting while I try to figure this out. llvm-svn: 277008
This commit is contained in:
parent
8550509b64
commit
2853269224
|
@ -47,7 +47,7 @@ using namespace clang::driver;
|
|||
using namespace clang::tooling;
|
||||
using namespace llvm;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(clang::tidy::ClangTidyModuleRegistry)
|
||||
template class llvm::Registry<clang::tidy::ClangTidyModule>;
|
||||
|
||||
namespace clang {
|
||||
namespace tidy {
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#include "ClangTidyModule.h"
|
||||
#include "llvm/Support/Registry.h"
|
||||
|
||||
extern template class llvm::Registry<clang::tidy::ClangTidyModule>;
|
||||
|
||||
namespace clang {
|
||||
namespace tidy {
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
add_llvm_loadable_module(AnnotateFunctions AnnotateFunctions.cpp PLUGIN_TOOL clang)
|
||||
add_llvm_loadable_module(AnnotateFunctions AnnotateFunctions.cpp)
|
||||
|
||||
if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
|
||||
target_link_libraries(AnnotateFunctions PRIVATE
|
||||
|
|
|
@ -9,7 +9,7 @@ if( NOT MSVC ) # MSVC mangles symbols differently, and
|
|||
endif()
|
||||
endif()
|
||||
|
||||
add_llvm_loadable_module(PrintFunctionNames PrintFunctionNames.cpp PLUGIN_TOOL clang)
|
||||
add_llvm_loadable_module(PrintFunctionNames PrintFunctionNames.cpp)
|
||||
|
||||
if(LLVM_ENABLE_PLUGINS AND (WIN32 OR CYGWIN))
|
||||
target_link_libraries(PrintFunctionNames PRIVATE
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#include "clang/Frontend/FrontendAction.h"
|
||||
#include "llvm/Support/Registry.h"
|
||||
|
||||
// Instantiated in FrontendAction.cpp.
|
||||
extern template class llvm::Registry<clang::PluginASTAction>;
|
||||
|
||||
namespace clang {
|
||||
|
||||
/// The frontend plugin registry.
|
||||
|
|
|
@ -1972,4 +1972,6 @@ typedef llvm::Registry<PragmaHandler> PragmaHandlerRegistry;
|
|||
|
||||
} // end namespace clang
|
||||
|
||||
extern template class llvm::Registry<clang::PragmaHandler>;
|
||||
|
||||
#endif
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
#include <system_error>
|
||||
using namespace clang;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(FrontendPluginRegistry)
|
||||
template class llvm::Registry<clang::PluginASTAction>;
|
||||
|
||||
namespace {
|
||||
|
||||
|
|
|
@ -54,7 +54,7 @@
|
|||
#include <utility>
|
||||
using namespace clang;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(PragmaHandlerRegistry)
|
||||
template class llvm::Registry<clang::PragmaHandler>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
ExternalPreprocessorSource::~ExternalPreprocessorSource() { }
|
||||
|
|
|
@ -32,8 +32,6 @@
|
|||
using namespace clang;
|
||||
using namespace tooling;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(CompilationDatabasePluginRegistry)
|
||||
|
||||
CompilationDatabase::~CompilationDatabase() {}
|
||||
|
||||
std::unique_ptr<CompilationDatabase>
|
||||
|
|
|
@ -69,14 +69,13 @@ namespace llvm {
|
|||
node(const entry &V) : Next(nullptr), Val(V) {}
|
||||
};
|
||||
|
||||
/// Add a node to the Registry: this is the interface between the plugin and
|
||||
/// the executable.
|
||||
///
|
||||
/// This function is exported by the executable and called by the plugin to
|
||||
/// add a node to the executable's registry. Therefore it's not defined here
|
||||
/// to avoid it being instantiated in the plugin and is instead defined in
|
||||
/// the executable (see LLVM_INSTANTIATE_REGISTRY below).
|
||||
static void add_node(node *N);
|
||||
static void add_node(node *N) {
|
||||
if (Tail)
|
||||
Tail->Next = N;
|
||||
else
|
||||
Head = N;
|
||||
Tail = N;
|
||||
}
|
||||
|
||||
/// Iterators for registry entries.
|
||||
///
|
||||
|
@ -121,23 +120,61 @@ namespace llvm {
|
|||
add_node(&Node);
|
||||
}
|
||||
};
|
||||
|
||||
/// A dynamic import facility. This is used on Windows to
|
||||
/// import the entries added in the plugin.
|
||||
static void import(sys::DynamicLibrary &DL, const char *RegistryName) {
|
||||
typedef void *(*GetRegistry)();
|
||||
std::string Name("LLVMGetRegistry_");
|
||||
Name.append(RegistryName);
|
||||
GetRegistry Getter =
|
||||
(GetRegistry)(intptr_t)DL.getAddressOfSymbol(Name.c_str());
|
||||
if (Getter) {
|
||||
// Call the getter function in order to get the full copy of the
|
||||
// registry defined in the plugin DLL, and copy them over to the
|
||||
// current Registry.
|
||||
typedef std::pair<const node *, const node *> Info;
|
||||
Info *I = static_cast<Info *>(Getter());
|
||||
iterator begin(I->first);
|
||||
iterator end(I->second);
|
||||
for (++end; begin != end; ++begin) {
|
||||
// This Node object needs to remain alive for the
|
||||
// duration of the program.
|
||||
add_node(new node(*begin));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Retrieve the data to be passed across DLL boundaries when
|
||||
/// importing registries from another DLL on Windows.
|
||||
static void *exportRegistry() {
|
||||
static std::pair<const node *, const node *> Info(Head, Tail);
|
||||
return &Info;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Since these are defined in a header file, plugins must be sure to export
|
||||
// these symbols.
|
||||
template <typename T>
|
||||
typename Registry<T>::node *Registry<T>::Head;
|
||||
|
||||
template <typename T>
|
||||
typename Registry<T>::node *Registry<T>::Tail;
|
||||
} // end namespace llvm
|
||||
|
||||
/// Instantiate a registry class.
|
||||
///
|
||||
/// This instantiates add_node and the Head and Tail pointers.
|
||||
#define LLVM_INSTANTIATE_REGISTRY(REGISTRY_CLASS) \
|
||||
namespace llvm { \
|
||||
template<> typename REGISTRY_CLASS::node *REGISTRY_CLASS::Head = nullptr; \
|
||||
template<> typename REGISTRY_CLASS::node *REGISTRY_CLASS::Tail = nullptr; \
|
||||
template<> void REGISTRY_CLASS::add_node(REGISTRY_CLASS::node *N) { \
|
||||
if (Tail) \
|
||||
Tail->Next = N; \
|
||||
else \
|
||||
Head = N; \
|
||||
Tail = N; \
|
||||
} \
|
||||
#ifdef LLVM_ON_WIN32
|
||||
#define LLVM_EXPORT_REGISTRY(REGISTRY_CLASS) \
|
||||
extern "C" { \
|
||||
__declspec(dllexport) void *__cdecl LLVMGetRegistry_##REGISTRY_CLASS() { \
|
||||
return REGISTRY_CLASS::exportRegistry(); \
|
||||
} \
|
||||
}
|
||||
#define LLVM_IMPORT_REGISTRY(REGISTRY_CLASS, DL) \
|
||||
REGISTRY_CLASS::import(DL, #REGISTRY_CLASS)
|
||||
#else
|
||||
#define LLVM_EXPORT_REGISTRY(REGISTRY_CLASS)
|
||||
#define LLVM_IMPORT_REGISTRY(REGISTRY_CLASS, DL)
|
||||
#endif
|
||||
|
||||
#endif // LLVM_SUPPORT_REGISTRY_H
|
||||
|
|
|
@ -14,8 +14,6 @@
|
|||
#include "llvm/CodeGen/GCMetadataPrinter.h"
|
||||
using namespace llvm;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(GCMetadataPrinterRegistry)
|
||||
|
||||
GCMetadataPrinter::GCMetadataPrinter() {}
|
||||
|
||||
GCMetadataPrinter::~GCMetadataPrinter() {}
|
||||
|
|
|
@ -16,8 +16,6 @@
|
|||
|
||||
using namespace llvm;
|
||||
|
||||
LLVM_INSTANTIATE_REGISTRY(GCRegistry)
|
||||
|
||||
GCStrategy::GCStrategy()
|
||||
: UseStatepoints(false), NeededSafePoints(0), CustomReadBarriers(false),
|
||||
CustomWriteBarriers(false), CustomRoots(false), InitRoots(true),
|
||||
|
|
Loading…
Reference in New Issue