mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-02 02:38:04 +00:00
Factor common code it Linker::init.
The TypeFinder was not being used in one of the constructors. llvm-svn: 222172
This commit is contained in:
parent
557109377d
commit
5cb9c82a5d
@ -45,6 +45,7 @@ class Linker {
|
||||
static bool LinkModules(Module *Dest, Module *Src);
|
||||
|
||||
private:
|
||||
void init(Module *M, DiagnosticHandlerFunction DiagnosticHandler);
|
||||
Module *Composite;
|
||||
SmallPtrSet<StructType*, 32> IdentifiedStructTypes;
|
||||
DiagnosticHandlerFunction DiagnosticHandler;
|
||||
|
@ -1594,18 +1594,25 @@ bool ModuleLinker::run() {
|
||||
return false;
|
||||
}
|
||||
|
||||
Linker::Linker(Module *M, DiagnosticHandlerFunction DiagnosticHandler)
|
||||
: Composite(M), DiagnosticHandler(DiagnosticHandler) {}
|
||||
void Linker::init(Module *M, DiagnosticHandlerFunction DiagnosticHandler) {
|
||||
this->Composite = M;
|
||||
this->DiagnosticHandler = DiagnosticHandler;
|
||||
|
||||
Linker::Linker(Module *M)
|
||||
: Composite(M), DiagnosticHandler([this](const DiagnosticInfo &DI) {
|
||||
Composite->getContext().diagnose(DI);
|
||||
}) {
|
||||
TypeFinder StructTypes;
|
||||
StructTypes.run(*M, true);
|
||||
IdentifiedStructTypes.insert(StructTypes.begin(), StructTypes.end());
|
||||
}
|
||||
|
||||
Linker::Linker(Module *M, DiagnosticHandlerFunction DiagnosticHandler) {
|
||||
init(M, DiagnosticHandler);
|
||||
}
|
||||
|
||||
Linker::Linker(Module *M) {
|
||||
init(M, [this](const DiagnosticInfo &DI) {
|
||||
Composite->getContext().diagnose(DI);
|
||||
});
|
||||
}
|
||||
|
||||
Linker::~Linker() {
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,5 @@
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
AsmParser
|
||||
core
|
||||
linker
|
||||
)
|
||||
|
@ -7,12 +7,14 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/AsmParser/Parser.h"
|
||||
#include "llvm/Linker/Linker.h"
|
||||
#include "llvm/IR/BasicBlock.h"
|
||||
#include "llvm/IR/DataLayout.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Support/SourceMgr.h"
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
using namespace llvm;
|
||||
@ -157,4 +159,22 @@ TEST_F(LinkModuleTest, EmptyModule2) {
|
||||
Linker::LinkModules(InternalM.get(), EmptyM.get());
|
||||
}
|
||||
|
||||
TEST_F(LinkModuleTest, TypeMerge) {
|
||||
LLVMContext C;
|
||||
SMDiagnostic Err;
|
||||
|
||||
const char *M1Str = "%t = type {i32}\n"
|
||||
"@t1 = weak global %t zeroinitializer\n";
|
||||
std::unique_ptr<Module> M1 = parseAssemblyString(M1Str, Err, C);
|
||||
|
||||
const char *M2Str = "%t = type {i32}\n"
|
||||
"@t2 = weak global %t zeroinitializer\n";
|
||||
std::unique_ptr<Module> M2 = parseAssemblyString(M2Str, Err, C);
|
||||
|
||||
Linker::LinkModules(M1.get(), M2.get(), [](const llvm::DiagnosticInfo &){});
|
||||
|
||||
EXPECT_EQ(M1->getNamedGlobal("t1")->getType(),
|
||||
M1->getNamedGlobal("t2")->getType());
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
Loading…
Reference in New Issue
Block a user