Skip to content

Commit

Permalink
Set the SuppressWarnings option on tool level and propagate to the li…
Browse files Browse the repository at this point in the history
…brary.

The SuppressWarnings flag, unfortunately, isn't very useful for custom tools
that want to use the LLVM module linker. So I'm changing it to a parameter of
the Linker, and the flag itself moves to the llvm-link tool.

For the time being as SuppressWarnings is pretty much the only "option" it
seems reasonable to propagate it to Linker objects. If we end up with more
options in the future, some sort of "struct collecting options" may be a
better idea.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201819 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
eliben committed Feb 20, 2014
1 parent 8a6788c commit f17f214
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 14 deletions.
4 changes: 3 additions & 1 deletion include/llvm/Linker.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class Linker {
PreserveSource = 1 // Preserve the source module.
};

Linker(Module *M);
Linker(Module *M, bool SuppressWarnings=false);
~Linker();

Module *getModule() const { return Composite; }
Expand All @@ -52,6 +52,8 @@ class Linker {
private:
Module *Composite;
SmallPtrSet<StructType*, 32> IdentifiedStructTypes;

bool SuppressWarnings;
};

} // End llvm namespace
Expand Down
25 changes: 13 additions & 12 deletions lib/Linker/LinkModules.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,6 @@
using namespace llvm;


static cl::opt<bool>
SuppressWarnings("suppress-warnings", cl::desc("Suppress all linking warnings"),
cl::init(false));

//===----------------------------------------------------------------------===//
// TypeMap implementation.
//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -408,15 +404,18 @@ namespace {

// Vector of functions to lazily link in.
std::vector<Function*> LazilyLinkFunctions;

bool SuppressWarnings;

public:
std::string ErrorMsg;

ModuleLinker(Module *dstM, TypeSet &Set, Module *srcM, unsigned mode)
: DstM(dstM), SrcM(srcM), TypeMap(Set),
ValMaterializer(TypeMap, DstM, LazilyLinkFunctions),
Mode(mode) { }


ModuleLinker(Module *dstM, TypeSet &Set, Module *srcM, unsigned mode,
bool SuppressWarnings=false)
: DstM(dstM), SrcM(srcM), TypeMap(Set),
ValMaterializer(TypeMap, DstM, LazilyLinkFunctions), Mode(mode),
SuppressWarnings(SuppressWarnings) {}

bool run();

private:
Expand Down Expand Up @@ -1354,7 +1353,8 @@ bool ModuleLinker::run() {
return false;
}

Linker::Linker(Module *M) : Composite(M) {
Linker::Linker(Module *M, bool SuppressWarnings)
: Composite(M), SuppressWarnings(SuppressWarnings) {
TypeFinder StructTypes;
StructTypes.run(*M, true);
IdentifiedStructTypes.insert(StructTypes.begin(), StructTypes.end());
Expand All @@ -1369,7 +1369,8 @@ void Linker::deleteModule() {
}

bool Linker::linkInModule(Module *Src, unsigned Mode, std::string *ErrorMsg) {
ModuleLinker TheLinker(Composite, IdentifiedStructTypes, Src, Mode);
ModuleLinker TheLinker(Composite, IdentifiedStructTypes, Src, Mode,
SuppressWarnings);
if (TheLinker.run()) {
if (ErrorMsg)
*ErrorMsg = TheLinker.ErrorMsg;
Expand Down
6 changes: 5 additions & 1 deletion tools/llvm-link/llvm-link.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ Verbose("v", cl::desc("Print information about actions taken"));
static cl::opt<bool>
DumpAsm("d", cl::desc("Print assembly as linked"), cl::Hidden);

static cl::opt<bool>
SuppressWarnings("suppress-warnings", cl::desc("Suppress all linking warnings"),
cl::init(false));

// LoadFile - Read the specified bitcode file in and return it. This routine
// searches the link path for the specified file to try to find it...
//
Expand Down Expand Up @@ -86,7 +90,7 @@ int main(int argc, char **argv) {
return 1;
}

Linker L(Composite.get());
Linker L(Composite.get(), SuppressWarnings);
for (unsigned i = BaseArg+1; i < InputFilenames.size(); ++i) {
OwningPtr<Module> M(LoadFile(argv[0], InputFilenames[i], Context));
if (M.get() == 0) {
Expand Down

0 comments on commit f17f214

Please sign in to comment.