From 0d03d2ea17b66d8cb0f6ca5f2181237228535845 Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Thu Jun 19 15:38:02 2014 -0700 Subject: Fix the --enable-shared build. Currently a build configured with ./configure --enable-shared breaks with an undefined "llvm::cl::parser::getOption(unsigned int) const" symbol when linking opt. This body for this symbol gets emitted into Pass.o (along with the destructor for PassNameParser), but gets linked into libLLVM-3.5svn.so with local visibility, causing the link error. This fix uses the existing EXTERN_TEMPLATE machinery to force a globally visible definition for the functions in parser into Pass.o. --- include/llvm/IR/LegacyPassNameParser.h | 2 ++ lib/IR/Pass.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/include/llvm/IR/LegacyPassNameParser.h b/include/llvm/IR/LegacyPassNameParser.h index e2e4912..a07e3fd 100644 --- a/include/llvm/IR/LegacyPassNameParser.h +++ b/include/llvm/IR/LegacyPassNameParser.h @@ -95,6 +95,8 @@ private: } }; +EXTERN_TEMPLATE_INSTANTIATION(class cl::parser); + ///===----------------------------------------------------------------------===// /// FilteredPassNameParser class - Make use of the pass registration /// mechanism to automatically add a command line argument to opt for diff --git a/lib/IR/Pass.cpp b/lib/IR/Pass.cpp index 91d86ae..00ce223 100644 --- a/lib/IR/Pass.cpp +++ b/lib/IR/Pass.cpp @@ -234,6 +234,8 @@ PassNameParser::~PassNameParser() { // attempting to remove the registration listener is an error. } +TEMPLATE_INSTANTIATION(class cl::parser); + //===----------------------------------------------------------------------===// // AnalysisUsage Class Implementation // -- 2.1.4