https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61555

            Bug ID: 61555
           Summary: [4.9/4.10 Regression] LLVM build failure
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: trippels at gcc dot gnu.org

LLVM trunk fails to build with 4.9 and 4.10:

[1299/1853] Linking CXX executable bin/bugpoint
FAILED: : && /usr/bin/g++   -fPIC -fvisibility-inlines-hidden -Wall -W
-Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers -pedantic
-Wno-long-long -Wno-maybe-uninitialized -Wnon-virtual-dtor -Wno-comment
-std=c++11 -ffunction-sections -fdata-sections -O2  -DNDEBUG -pipe
-march=native 
-Wl,-O1,--hash-style=gnu,--gc-sections,--icf=all,--icf-iterations=3   
-Wl,--export-dynamic tools/bugpoint/CMakeFiles/bugpoint.dir/BugDriver.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/CrashDebugger.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/ExecutionDriver.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/ExtractFunction.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/FindBugs.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/Miscompilation.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/OptimizerDriver.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/ToolRunner.cpp.o
tools/bugpoint/CMakeFiles/bugpoint.dir/bugpoint.cpp.o  -o bin/bugpoint 
lib/libLLVMAnalysis.so lib/libLLVMBitWriter.so lib/libLLVMCodeGen.so
lib/libLLVMCore.so lib/libLLVMipa.so lib/libLLVMipo.so lib/libLLVMIRReader.so
lib/libLLVMInstCombine.so lib/libLLVMInstrumentation.so lib/libLLVMLinker.so
lib/libLLVMObjCARCOpts.so lib/libLLVMScalarOpts.so lib/libLLVMSupport.so
lib/libLLVMTarget.so lib/libLLVMTransformUtils.so lib/libLLVMVectorize.so
lib/libLLVMInstCombine.so lib/libLLVMAsmParser.so lib/libLLVMTransformUtils.so
lib/libLLVMipa.so lib/libLLVMAnalysis.so lib/libLLVMTarget.so lib/libLLVMMC.so
lib/libLLVMObject.so lib/libLLVMBitReader.so lib/libLLVMCore.so
lib/libLLVMSupport.so -lrt -ldl -lcurses -lpthread -lz
-Wl,-rpath,"\$ORIGIN/../lib" && :
tools/bugpoint/CMakeFiles/bugpoint.dir/bugpoint.cpp.o:bugpoint.cpp:function
llvm::cl::list<llvm::PassInfo const*, bool,
llvm::PassNameParser>::getExtraOptionNames(llvm::SmallVectorImpl<char
const*>&): error: undefined reference to 'llvm::cl::parser<llvm::PassInfo
const*>::getOption(unsigned int) const'
collect2: error: ld returned 1 exit status
[1299/1853] Building CXX object
tools/clang/lib/Basic/CMakeFiles/clangBasic.dir/Targets.cpp.o
ninja: build stopped: subcommand failed.

Reduced:

markus@x4 llvm_build % cat bugpoint.ii
namespace llvm
{
namespace cl
{
enum NumOccurrencesFlag
{
  ZeroOrMore
};
enum OptionHidden
{
  NotHidden
};
class A
{
protected:
  A (NumOccurrencesFlag, OptionHidden);
  virtual void getExtraOptionNames (int &);
};
class B
{
public:
  virtual char *getOption (unsigned) const;
  void getExtraOptionNames (int) { getOption (0); }
};
template <class> class parser : public B
{
  char *getOption (unsigned) const;
};
template <class ParserClass = parser<int> > class C : A
{
  ParserClass Parser;
  void getExtraOptionNames (int &p1) { Parser.getExtraOptionNames (0); }
public:
  template <class M0t, class M1t> C (M0t, M1t) : A (ZeroOrMore, NotHidden) {}
};
}
class PassInfo;
class D : public cl::parser<const PassInfo *>
{
public:
  D ();
};
}

using namespace llvm;
cl::C<D> a (0, cl::ZeroOrMore);

markus@x4 llvm_build % g++ -c -O2 -std=c++11 bugpoint.ii
markus@x4 llvm_build % nm bugpoint.o | grep
_ZNK4llvm2cl6parserIPKNS_8PassInfoEE9getOptionEj
                 U _ZNK4llvm2cl6parserIPKNS_8PassInfoEE9getOptionEj

(4.8.3 is fine)
markus@x4 llvm_build % /usr/x86_64-pc-linux-gnu/gcc-bin/4.8.3/g++ -c -O2
-std=c++11 bugpoint.ii
markus@x4 llvm_build % nm bugpoint.o | grep
_ZNK4llvm2cl6parserIPKNS_8PassInfoEE9getOptionEj
markus@x4 llvm_build %

Reply via email to