[llvm] r194865 - [weak vtables] Remove a bunch of weak vtables

Alexey Samsonov samsonov at google.com
Mon Nov 18 01:36:39 PST 2013


Hi Juergen,

I have reverted this change in r194997 due to numerous memory leaks it
caused. See the details in commit message.


On Sat, Nov 16, 2013 at 2:34 AM, Juergen Ributzka <juergen at apple.com> wrote:

> Author: ributzka
> Date: Fri Nov 15 16:34:48 2013
> New Revision: 194865
>
> URL: http://llvm.org/viewvc/llvm-project?rev=194865&view=rev
> Log:
> [weak vtables] Remove a bunch of weak vtables
>
> This patch removes most of the trivial cases of weak vtables by pinning
> them to
> a single object file.
>
> Differential Revision: http://llvm-reviews.chandlerc.com/D2068
>
> Reviewed by Andy
>
> Added:
>     llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.cpp
>       - copied, changed from r194862,
> llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp
>     llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.cpp
>     llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.cpp
>       - copied, changed from r194862,
> llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp
> Modified:
>     llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter2/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter3/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp
>     llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp
>     llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
>     llvm/trunk/include/llvm/CodeGen/MachineScheduler.h
>     llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h
>     llvm/trunk/include/llvm/ExecutionEngine/ObjectCache.h
>     llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h
>     llvm/trunk/include/llvm/MC/MCAtom.h
>     llvm/trunk/include/llvm/MC/MCStreamer.h
>     llvm/trunk/include/llvm/MC/MCWinCOFFObjectWriter.h
>     llvm/trunk/include/llvm/Support/CommandLine.h
>     llvm/trunk/include/llvm/Support/ValueHandle.h
>     llvm/trunk/include/llvm/Support/YAMLParser.h
>     llvm/trunk/include/llvm/Support/YAMLTraits.h
>     llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp
>     llvm/trunk/lib/CodeGen/MachineScheduler.cpp
>     llvm/trunk/lib/CodeGen/RegAllocBase.cpp
>     llvm/trunk/lib/CodeGen/RegAllocBase.h
>     llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
>     llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
>     llvm/trunk/lib/IR/AttributeImpl.h
>     llvm/trunk/lib/IR/Attributes.cpp
>     llvm/trunk/lib/IR/Metadata.cpp
>     llvm/trunk/lib/IR/Value.cpp
>     llvm/trunk/lib/MC/MCAtom.cpp
>     llvm/trunk/lib/MC/MCStreamer.cpp
>     llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
>     llvm/trunk/lib/Support/CommandLine.cpp
>     llvm/trunk/lib/Support/ErrorHandling.cpp
>     llvm/trunk/lib/Support/YAMLParser.cpp
>     llvm/trunk/lib/Support/YAMLTraits.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp
>     llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h
>     llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
>     llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
>     llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp
>     llvm/trunk/lib/Target/Hexagon/CMakeLists.txt
>     llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h
>     llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.h
>     llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h
>     llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp
>     llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.h
>     llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp
>     llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.h
>     llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
>     llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp
>     llvm/trunk/lib/Target/Mips/MipsInstrInfo.h
>     llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h
>     llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp
>     llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.cpp
>     llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.h
>     llvm/trunk/lib/Target/NVPTX/NVPTXSection.h
>     llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp
>     llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h
>     llvm/trunk/lib/Target/NVPTX/NVPTXTargetObjectFile.h
>     llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
>     llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp
>     llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.h
>     llvm/trunk/lib/Target/PowerPC/PPCTargetStreamer.h
>     llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.cpp
>     llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.h
>     llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.cpp
>     llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.h
>     llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h
>     llvm/trunk/lib/Target/R600/MCTargetDesc/CMakeLists.txt
>     llvm/trunk/lib/Target/R600/R600InstrInfo.cpp
>     llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp
>     llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.h
>     llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.cpp
>     llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.h
>     llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp
>     llvm/trunk/lib/Target/Sparc/SparcInstrInfo.h
>     llvm/trunk/lib/Target/SystemZ/CMakeLists.txt
>     llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.cpp
>     llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.h
>     llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
>     llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.cpp
>     llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.h
>     llvm/trunk/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
>     llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
>     llvm/trunk/lib/Target/X86/X86InstrInfo.h
>     llvm/trunk/lib/Target/XCore/XCoreInstrInfo.cpp
>     llvm/trunk/lib/Target/XCore/XCoreInstrInfo.h
>     llvm/trunk/tools/llvm-stress/llvm-stress.cpp
>     llvm/trunk/unittests/ADT/IntrusiveRefCntPtrTest.cpp
>     llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp
>     llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITMultipleModuleTest.cpp
>     llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITTest.cpp
>     llvm/trunk/utils/TableGen/CodeGenSchedule.cpp
>     llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp
>     llvm/trunk/utils/TableGen/SetTheory.cpp
>     llvm/trunk/utils/TableGen/TGValueTypes.cpp
>     llvm/trunk/utils/unittest/googletest/include/gtest/gtest-test-part.h
>     llvm/trunk/utils/unittest/googletest/include/gtest/gtest.h
>
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-death-test-internal.h
>
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal.h
>
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-param-util.h
>
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-port.h
>     llvm/trunk/utils/unittest/googletest/src/gtest-death-test.cc
>     llvm/trunk/utils/unittest/googletest/src/gtest-internal-inl.h
>     llvm/trunk/utils/unittest/googletest/src/gtest-port.cc
>     llvm/trunk/utils/unittest/googletest/src/gtest.cc
>
> Modified: llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp (original)
> +++ llvm/trunk/examples/ExceptionDemo/ExceptionDemo.cpp Fri Nov 15
> 16:34:48 2013
> @@ -1577,9 +1577,11 @@ public:
>                                   std::runtime_error::operator=(toCopy)));
>    }
>
> -  ~OurCppRunException (void) throw () {}
> +  ~OurCppRunException (void) throw ();
>  };
>
> +OurCppRunException::~OurCppRunException() throw () {}
> +
>
>  /// Throws foreign C++ exception.
>  /// @param ignoreIt unused parameter that allows function to match implied
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter2/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter2/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter2/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter2/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -79,28 +79,39 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>  public:
>    NumberExprAST(double val) {}
> +  virtual ~NumberExprAST();
>  };
>
> +NumberExprAST::~NumberExprAST() {}
> +
>  /// VariableExprAST - Expression class for referencing a variable, like
> "a".
>  class VariableExprAST : public ExprAST {
>    std::string Name;
>  public:
>    VariableExprAST(const std::string &name) : Name(name) {}
> +  virtual ~VariableExprAST();
>  };
>
> +VariableExprAST::~VariableExprAST() {}
> +
>  /// BinaryExprAST - Expression class for a binary operator.
>  class BinaryExprAST : public ExprAST {
>  public:
>    BinaryExprAST(char op, ExprAST *lhs, ExprAST *rhs) {}
> +  virtual ~BinaryExprAST();
>  };
>
> +BinaryExprAST::~BinaryExprAST() {}
> +
>  /// CallExprAST - Expression class for function calls.
>  class CallExprAST : public ExprAST {
>    std::string Callee;
> @@ -108,8 +119,11 @@ class CallExprAST : public ExprAST {
>  public:
>    CallExprAST(const std::string &callee, std::vector<ExprAST*> &args)
>      : Callee(callee), Args(args) {}
> +  virtual ~CallExprAST();
>  };
>
> +CallExprAST::~CallExprAST() {}
> +
>  /// PrototypeAST - This class represents the "prototype" for a function,
>  /// which captures its name, and its argument names (thus implicitly the
> number
>  /// of arguments the function takes).
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter3/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter3/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter3/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter3/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -84,10 +84,12 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>    virtual Value *Codegen() = 0;
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>    double Val;
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter4/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -91,10 +91,12 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>    virtual Value *Codegen() = 0;
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>    double Val;
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter5/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -100,10 +100,12 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>    virtual Value *Codegen() = 0;
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>    double Val;
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter6/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -105,10 +105,12 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>    virtual Value *Codegen() = 0;
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>    double Val;
>
> Modified: llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp (original)
> +++ llvm/trunk/examples/Kaleidoscope/Chapter7/toy.cpp Fri Nov 15 16:34:48
> 2013
> @@ -109,10 +109,12 @@ static int gettok() {
>  /// ExprAST - Base class for all expression nodes.
>  class ExprAST {
>  public:
> -  virtual ~ExprAST() {}
> +  virtual ~ExprAST();
>    virtual Value *Codegen() = 0;
>  };
>
> +ExprAST::~ExprAST() {}
> +
>  /// NumberExprAST - Expression class for numeric literals like "1.0".
>  class NumberExprAST : public ExprAST {
>    double Val;
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineRegisterInfo.h Fri Nov 15
> 16:34:48 2013
> @@ -30,8 +30,9 @@ class PSetIterator;
>  class MachineRegisterInfo {
>  public:
>    class Delegate {
> +    virtual void anchor();
>    public:
> -    virtual void MRI_NoteNewVirtualRegister(unsigned Reg) {}
> +    virtual void MRI_NoteNewVirtualRegister(unsigned Reg) = 0;
>
>      virtual ~Delegate() {}
>    };
>
> Modified: llvm/trunk/include/llvm/CodeGen/MachineScheduler.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineScheduler.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/CodeGen/MachineScheduler.h (original)
> +++ llvm/trunk/include/llvm/CodeGen/MachineScheduler.h Fri Nov 15 16:34:48
> 2013
> @@ -164,6 +164,7 @@ struct MachineSchedPolicy {
>  /// Initialization sequence:
>  ///   initPolicy -> shouldTrackPressure -> initialize(DAG) ->
> registerRoots
>  class MachineSchedStrategy {
> +  virtual void anchor();
>  public:
>    virtual ~MachineSchedStrategy() {}
>
> @@ -262,6 +263,7 @@ public:
>
>  /// Mutate the DAG as a postpass after normal DAG building.
>  class ScheduleDAGMutation {
> +  virtual void anchor();
>  public:
>    virtual ~ScheduleDAGMutation() {}
>
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/ObjectBuffer.h Fri Nov 15
> 16:34:48 2013
> @@ -33,7 +33,6 @@ class ObjectBuffer {
>  public:
>    ObjectBuffer() {}
>    ObjectBuffer(MemoryBuffer* Buf) : Buffer(Buf) {}
> -  virtual ~ObjectBuffer() {}
>
>    /// getMemBuffer - Like MemoryBuffer::getMemBuffer() this function
>    /// returns a pointer to an object that is owned by the caller. However,
> @@ -58,7 +57,6 @@ protected:
>  class ObjectBufferStream : public ObjectBuffer {
>  public:
>    ObjectBufferStream() : OS(SV) {}
> -  virtual ~ObjectBufferStream() {}
>
>    raw_ostream &getOStream() { return OS; }
>    void flush()
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/ObjectCache.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ObjectCache.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/ObjectCache.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/ObjectCache.h Fri Nov 15
> 16:34:48 2013
> @@ -20,6 +20,7 @@ class Module;
>  /// ExecutionEngine for the purpose of avoiding compilation for Modules
> that
>  /// have already been compiled and an object file is available.
>  class ObjectCache {
> +  virtual void anchor();
>  public:
>    ObjectCache() { }
>
>
> Modified: llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h (original)
> +++ llvm/trunk/include/llvm/ExecutionEngine/ObjectImage.h Fri Nov 15
> 16:34:48 2013
> @@ -25,6 +25,7 @@ namespace llvm {
>  class ObjectImage {
>    ObjectImage() LLVM_DELETED_FUNCTION;
>    ObjectImage(const ObjectImage &other) LLVM_DELETED_FUNCTION;
> +  virtual void anchor();
>
>  protected:
>    OwningPtr<ObjectBuffer> Buffer;
>
> Modified: llvm/trunk/include/llvm/MC/MCAtom.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCAtom.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCAtom.h (original)
> +++ llvm/trunk/include/llvm/MC/MCAtom.h Fri Nov 15 16:34:48 2013
> @@ -32,6 +32,7 @@ class MCDataAtom;
>  /// \brief Represents a contiguous range of either instructions (a
> TextAtom)
>  /// or data (a DataAtom).  Address ranges are expressed as _closed_
> intervals.
>  class MCAtom {
> +  virtual void anchor();
>  public:
>    virtual ~MCAtom() {}
>
>
> Modified: llvm/trunk/include/llvm/MC/MCStreamer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCStreamer.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCStreamer.h (original)
> +++ llvm/trunk/include/llvm/MC/MCStreamer.h Fri Nov 15 16:34:48 2013
> @@ -76,6 +76,7 @@ public:
>  // FIXME: declared here because it is used from
>  // lib/CodeGen/AsmPrinter/ARMException.cpp.
>  class ARMTargetStreamer : public MCTargetStreamer {
> +  virtual void anchor();
>  public:
>    virtual void emitFnStart() = 0;
>    virtual void emitFnEnd() = 0;
>
> Modified: llvm/trunk/include/llvm/MC/MCWinCOFFObjectWriter.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCWinCOFFObjectWriter.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/MC/MCWinCOFFObjectWriter.h (original)
> +++ llvm/trunk/include/llvm/MC/MCWinCOFFObjectWriter.h Fri Nov 15 16:34:48
> 2013
> @@ -19,6 +19,8 @@ namespace llvm {
>    class MCWinCOFFObjectTargetWriter {
>      const unsigned Machine;
>
> +    virtual void anchor();
> +
>    protected:
>      MCWinCOFFObjectTargetWriter(unsigned Machine_);
>
>
> Modified: llvm/trunk/include/llvm/Support/CommandLine.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/CommandLine.h (original)
> +++ llvm/trunk/include/llvm/Support/CommandLine.h Fri Nov 15 16:34:48 2013
> @@ -350,6 +350,9 @@ struct cat {
>  struct GenericOptionValue {
>    virtual ~GenericOptionValue() {}
>    virtual bool compare(const GenericOptionValue &V) const = 0;
> +
> +private:
> +  virtual void anchor();
>  };
>
>  template<class DataType> struct OptionValue;
> @@ -1752,6 +1755,7 @@ void getRegisteredOptions(StringMap<Opti
>  /// \brief Saves strings in the inheritor's stable storage and returns a
> stable
>  /// raw character pointer.
>  class StringSaver {
> +  virtual void anchor();
>  public:
>    virtual const char *SaveString(const char *Str) = 0;
>    virtual ~StringSaver() {};  // Pacify -Wnon-virtual-dtor.
>
> Modified: llvm/trunk/include/llvm/Support/ValueHandle.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/ValueHandle.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/ValueHandle.h (original)
> +++ llvm/trunk/include/llvm/Support/ValueHandle.h Fri Nov 15 16:34:48 2013
> @@ -339,6 +339,7 @@ public:
>  /// rearrange itself when the pointer changes).  Unlike ValueHandleBase,
> this
>  /// class has a vtable and a virtual destructor.
>  class CallbackVH : public ValueHandleBase {
> +  virtual void anchor();
>  protected:
>    CallbackVH(const CallbackVH &RHS)
>      : ValueHandleBase(Callback, RHS) {}
> @@ -365,13 +366,13 @@ public:
>    ///
>    /// All implementations must remove the reference from this object to
> the
>    /// Value that's being destroyed.
> -  virtual void deleted();
> +  virtual void deleted() { setValPtr(NULL); }
>
>    /// Called when this->getValPtr()->replaceAllUsesWith(new_value) is
> called,
>    /// _before_ any of the uses have actually been replaced.  If WeakVH
> were
>    /// implemented as a CallbackVH, it would use this method to call
>    /// setValPtr(new_value).  AssertingVH would do nothing in this method.
> -  virtual void allUsesReplacedWith(Value *);
> +  virtual void allUsesReplacedWith(Value *) {}
>  };
>
>  } // End llvm namespace
>
> Modified: llvm/trunk/include/llvm/Support/YAMLParser.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLParser.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/YAMLParser.h (original)
> +++ llvm/trunk/include/llvm/Support/YAMLParser.h Fri Nov 15 16:34:48 2013
> @@ -105,6 +105,7 @@ private:
>
>  /// @brief Abstract base class for all Nodes.
>  class Node {
> +   virtual void anchor();
>  public:
>    enum NodeKind {
>      NK_Null,
> @@ -175,6 +176,7 @@ private:
>  /// Example:
>  ///   !!null null
>  class NullNode : public Node {
> +  virtual void anchor();
>  public:
>    NullNode(OwningPtr<Document> &D)
>        : Node(NK_Null, D, StringRef(), StringRef()) {}
> @@ -190,6 +192,7 @@ public:
>  /// Example:
>  ///   Adena
>  class ScalarNode : public Node {
> +  virtual void anchor();
>  public:
>    ScalarNode(OwningPtr<Document> &D, StringRef Anchor, StringRef Tag,
>               StringRef Val)
> @@ -231,6 +234,7 @@ private:
>  /// Example:
>  ///   Section: .text
>  class KeyValueNode : public Node {
> +  virtual void anchor();
>  public:
>    KeyValueNode(OwningPtr<Document> &D)
>      : Node(NK_KeyValue, D, StringRef(), StringRef())
> @@ -342,6 +346,7 @@ void skip(CollectionType &C) {
>  ///   Name: _main
>  ///   Scope: Global
>  class MappingNode : public Node {
> +  virtual void anchor();
>  public:
>    enum MappingType {
>      MT_Block,
> @@ -391,6 +396,7 @@ private:
>  ///   - Hello
>  ///   - World
>  class SequenceNode : public Node {
> +  virtual void anchor();
>  public:
>    enum SequenceType {
>      ST_Block,
> @@ -446,6 +452,7 @@ private:
>  /// Example:
>  ///   *AnchorName
>  class AliasNode : public Node {
> +  virtual void anchor();
>  public:
>    AliasNode(OwningPtr<Document> &D, StringRef Val)
>      : Node(NK_Alias, D, StringRef(), StringRef()), Name(Val) {}
>
> Modified: llvm/trunk/include/llvm/Support/YAMLTraits.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/YAMLTraits.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/YAMLTraits.h (original)
> +++ llvm/trunk/include/llvm/Support/YAMLTraits.h Fri Nov 15 16:34:48 2013
> @@ -723,6 +723,7 @@ private:
>    virtual bool canElideEmptySequence();
>
>    class HNode {
> +    virtual void anchor();
>    public:
>      HNode(Node *n) : _node(n) { }
>      virtual ~HNode() { }
> @@ -732,9 +733,9 @@ private:
>    };
>
>    class EmptyHNode : public HNode {
> +    virtual void anchor();
>    public:
>      EmptyHNode(Node *n) : HNode(n) { }
> -    virtual ~EmptyHNode() {}
>      static inline bool classof(const HNode *n) {
>        return NullNode::classof(n->_node);
>      }
> @@ -742,9 +743,9 @@ private:
>    };
>
>    class ScalarHNode : public HNode {
> +    virtual void anchor();
>    public:
>      ScalarHNode(Node *n, StringRef s) : HNode(n), _value(s) { }
> -    virtual ~ScalarHNode() { }
>
>      StringRef value() const { return _value; }
>
> @@ -757,6 +758,7 @@ private:
>    };
>
>    class MapHNode : public HNode {
> +    virtual void anchor();
>    public:
>      MapHNode(Node *n) : HNode(n) { }
>      virtual ~MapHNode();
> @@ -775,6 +777,7 @@ private:
>    };
>
>    class SequenceHNode : public HNode {
> +    virtual void anchor();
>    public:
>      SequenceHNode(Node *n) : HNode(n) { }
>      virtual ~SequenceHNode();
>
> Modified: llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineRegisterInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -19,6 +19,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void MachineRegisterInfo::Delegate::anchor() {}
> +
>  MachineRegisterInfo::MachineRegisterInfo(const TargetMachine &TM)
>    : TM(TM), TheDelegate(0), IsSSA(true), TracksLiveness(true) {
>    VRegInfo.reserve(256);
>
> Modified: llvm/trunk/lib/CodeGen/MachineScheduler.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineScheduler.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineScheduler.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineScheduler.cpp Fri Nov 15 16:34:48 2013
> @@ -72,6 +72,10 @@ static cl::opt<bool> VerifyScheduling("v
>  // DAG subtrees must have at least this many nodes.
>  static const unsigned MinSubtreeSize = 8;
>
> +// pin vtable to this file
> +void MachineSchedStrategy::anchor() {}
> +void ScheduleDAGMutation::anchor() {}
> +
>
>  //===----------------------------------------------------------------------===//
>  // Machine Instruction Scheduling Pass and Registry
>
>  //===----------------------------------------------------------------------===//
>
> Modified: llvm/trunk/lib/CodeGen/RegAllocBase.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocBase.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/RegAllocBase.cpp (original)
> +++ llvm/trunk/lib/CodeGen/RegAllocBase.cpp Fri Nov 15 16:34:48 2013
> @@ -50,6 +50,9 @@ bool RegAllocBase::VerifyEnabled = false
>  //                         RegAllocBase Implementation
>
>  //===----------------------------------------------------------------------===//
>
> +// pin vtable to this file
> +void RegAllocBase::anchor() {}
> +
>  void RegAllocBase::init(VirtRegMap &vrm,
>                          LiveIntervals &lis,
>                          LiveRegMatrix &mat) {
>
> Modified: llvm/trunk/lib/CodeGen/RegAllocBase.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegAllocBase.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/RegAllocBase.h (original)
> +++ llvm/trunk/lib/CodeGen/RegAllocBase.h Fri Nov 15 16:34:48 2013
> @@ -57,6 +57,7 @@ class Spiller;
>  /// live range splitting. They must also override enqueue/dequeue to
> provide an
>  /// assignment order.
>  class RegAllocBase {
> +  virtual void anchor();
>  protected:
>    const TargetRegisterInfo *TRI;
>    MachineRegisterInfo *MRI;
>
> Modified: llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/ExecutionEngine.cpp Fri Nov 15 16:34:48
> 2013
> @@ -15,6 +15,7 @@
>  #define DEBUG_TYPE "jit"
>  #include "llvm/ExecutionEngine/ExecutionEngine.h"
>  #include "llvm/ExecutionEngine/JITMemoryManager.h"
> +#include "llvm/ExecutionEngine/ObjectCache.h"
>  #include "llvm/ADT/SmallString.h"
>  #include "llvm/ADT/Statistic.h"
>  #include "llvm/ExecutionEngine/GenericValue.h"
> @@ -39,6 +40,9 @@ using namespace llvm;
>  STATISTIC(NumInitBytes, "Number of bytes of global vars initialized");
>  STATISTIC(NumGlobals  , "Number of global vars initialized");
>
> +// pin vtable to this file
> +void ObjectCache::anchor() {}
> +
>  ExecutionEngine *(*ExecutionEngine::JITCtor)(
>    Module *M,
>    std::string *ErrorStr,
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/JITRegistrar.h Fri Nov 15
> 16:34:48 2013
> @@ -16,6 +16,7 @@ namespace llvm {
>
>  /// Global access point for the JIT debugging interface.
>  class JITRegistrar {
> +  virtual void anchor();
>  public:
>    /// Instantiates the JIT service.
>    JITRegistrar() {}
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h
> (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/ObjectImageCommon.h Fri Nov
> 15 16:34:48 2013
> @@ -23,6 +23,7 @@ namespace llvm {
>  class ObjectImageCommon : public ObjectImage {
>    ObjectImageCommon(); // = delete
>    ObjectImageCommon(const ObjectImageCommon &other); // = delete
> +  virtual void anchor();
>
>  protected:
>    object::ObjectFile *ObjFile;
>
> Modified: llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp (original)
> +++ llvm/trunk/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp Fri Nov 15
> 16:34:48 2013
> @@ -13,6 +13,7 @@
>
>  #define DEBUG_TYPE "dyld"
>  #include "llvm/ExecutionEngine/RuntimeDyld.h"
> +#include "JITRegistrar.h"
>  #include "ObjectImageCommon.h"
>  #include "RuntimeDyldELF.h"
>  #include "RuntimeDyldImpl.h"
> @@ -28,6 +29,11 @@ using namespace llvm::object;
>  // Empty out-of-line virtual destructor as the key function.
>  RuntimeDyldImpl::~RuntimeDyldImpl() {}
>
> +// pin JITRegistrar.h and ObjectImage*.h vtables to this file
> +void JITRegistrar::anchor() {}
> +void ObjectImage::anchor() {}
> +void ObjectImageCommon::anchor() {}
> +
>  namespace llvm {
>
>  void RuntimeDyldImpl::registerEHFrames() {
>
> Modified: llvm/trunk/lib/IR/AttributeImpl.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AttributeImpl.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/AttributeImpl.h (original)
> +++ llvm/trunk/lib/IR/AttributeImpl.h Fri Nov 15 16:34:48 2013
> @@ -46,8 +46,6 @@ protected:
>    AttributeImpl(AttrEntryKind KindID) : KindID(KindID) {}
>
>  public:
> -  virtual ~AttributeImpl();
> -
>    bool isEnumAttribute() const { return KindID == EnumAttrEntry; }
>    bool isAlignAttribute() const { return KindID == AlignAttrEntry; }
>    bool isStringAttribute() const { return KindID == StringAttrEntry; }
>
> Modified: llvm/trunk/lib/IR/Attributes.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Attributes.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Attributes.cpp (original)
> +++ llvm/trunk/lib/IR/Attributes.cpp Fri Nov 15 16:34:48 2013
> @@ -286,8 +286,6 @@ bool Attribute::operator<(Attribute A) c
>  // AttributeImpl Definition
>
>  //===----------------------------------------------------------------------===//
>
> -AttributeImpl::~AttributeImpl() {}
> -
>  bool AttributeImpl::hasAttribute(Attribute::AttrKind A) const {
>    if (isStringAttribute()) return false;
>    return getKindAsEnum() == A;
>
> Modified: llvm/trunk/lib/IR/Metadata.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Metadata.cpp (original)
> +++ llvm/trunk/lib/IR/Metadata.cpp Fri Nov 15 16:34:48 2013
> @@ -65,7 +65,7 @@ class MDNodeOperand : public CallbackVH
>
>  public:
>    MDNodeOperand(Value *V) : CallbackVH(V) {}
> -  ~MDNodeOperand() {}
> +  virtual ~MDNodeOperand();
>
>    void set(Value *V) {
>      unsigned IsFirst = this->getValPtrInt();
> @@ -82,6 +82,8 @@ public:
>  };
>  } // end namespace llvm.
>
> +MDNodeOperand::~MDNodeOperand() {}
> +
>
>  void MDNodeOperand::deleted() {
>    getParent()->replaceOperand(this, 0);
>
> Modified: llvm/trunk/lib/IR/Value.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Value.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/Value.cpp (original)
> +++ llvm/trunk/lib/IR/Value.cpp Fri Nov 15 16:34:48 2013
> @@ -735,9 +735,5 @@ void ValueHandleBase::ValueIsRAUWd(Value
>  #endif
>  }
>
> -// Default implementation for CallbackVH.
> -void CallbackVH::allUsesReplacedWith(Value *) {}
> -
> -void CallbackVH::deleted() {
> -  setValPtr(NULL);
> -}
> +// pin vtable to this file
> +void CallbackVH::anchor() {}
>
> Modified: llvm/trunk/lib/MC/MCAtom.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCAtom.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCAtom.cpp (original)
> +++ llvm/trunk/lib/MC/MCAtom.cpp Fri Nov 15 16:34:48 2013
> @@ -14,6 +14,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void MCAtom::anchor() {}
> +
>  void MCAtom::remap(uint64_t NewBegin, uint64_t NewEnd) {
>    Parent->remap(this, NewBegin, NewEnd);
>  }
>
> Modified: llvm/trunk/lib/MC/MCStreamer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCStreamer.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/MCStreamer.cpp (original)
> +++ llvm/trunk/lib/MC/MCStreamer.cpp Fri Nov 15 16:34:48 2013
> @@ -22,7 +22,9 @@
>  #include <cstdlib>
>  using namespace llvm;
>
> +// pin vtables to this file
>  MCTargetStreamer::~MCTargetStreamer() {}
> +void ARMTargetStreamer::anchor() {}
>
>  MCStreamer::MCStreamer(MCContext &Ctx, MCTargetStreamer *TargetStreamer)
>      : Context(Ctx), TargetStreamer(TargetStreamer), EmitEHFrame(true),
>
> Modified: llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp (original)
> +++ llvm/trunk/lib/MC/WinCOFFObjectWriter.cpp Fri Nov 15 16:34:48 2013
> @@ -138,7 +138,7 @@ public:
>    symbol_map  SymbolMap;
>
>    WinCOFFObjectWriter(MCWinCOFFObjectTargetWriter *MOTW, raw_ostream &OS);
> -  ~WinCOFFObjectWriter();
> +  virtual ~WinCOFFObjectWriter();
>
>    COFFSymbol *createSymbol(StringRef Name);
>    COFFSymbol *GetOrCreateCOFFSymbol(const MCSymbol * Symbol);
> @@ -898,6 +898,9 @@ MCWinCOFFObjectTargetWriter::MCWinCOFFOb
>    Machine(Machine_) {
>  }
>
> +// pin vtable to this file
> +void MCWinCOFFObjectTargetWriter::anchor() {}
> +
>
>  //------------------------------------------------------------------------------
>  // WinCOFFObjectWriter factory function
>
>
> Modified: llvm/trunk/lib/Support/CommandLine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/CommandLine.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/CommandLine.cpp (original)
> +++ llvm/trunk/lib/Support/CommandLine.cpp Fri Nov 15 16:34:48 2013
> @@ -60,6 +60,7 @@ TEMPLATE_INSTANTIATION(class opt<char>);
>  TEMPLATE_INSTANTIATION(class opt<bool>);
>  } } // end namespace llvm::cl
>
> +void GenericOptionValue::anchor() {}
>  void OptionValue<boolOrDefault>::anchor() {}
>  void OptionValue<std::string>::anchor() {}
>  void Option::anchor() {}
> @@ -73,6 +74,7 @@ void parser<double>::anchor() {}
>  void parser<float>::anchor() {}
>  void parser<std::string>::anchor() {}
>  void parser<char>::anchor() {}
> +void StringSaver::anchor() {}
>
>
>  //===----------------------------------------------------------------------===//
>
>
> Modified: llvm/trunk/lib/Support/ErrorHandling.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ErrorHandling.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/ErrorHandling.cpp (original)
> +++ llvm/trunk/lib/Support/ErrorHandling.cpp Fri Nov 15 16:34:48 2013
> @@ -17,6 +17,7 @@
>  #include "llvm/ADT/Twine.h"
>  #include "llvm/Config/config.h"
>  #include "llvm/Support/Debug.h"
> +#include "llvm/Support/ErrorOr.h"
>  #include "llvm/Support/Signals.h"
>  #include "llvm/Support/Threading.h"
>  #include "llvm/Support/raw_ostream.h"
> @@ -119,3 +120,4 @@ void LLVMInstallFatalErrorHandler(LLVMFa
>  void LLVMResetFatalErrorHandler() {
>    remove_fatal_error_handler();
>  }
> +
>
> Modified: llvm/trunk/lib/Support/YAMLParser.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLParser.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/YAMLParser.cpp (original)
> +++ llvm/trunk/lib/Support/YAMLParser.cpp Fri Nov 15 16:34:48 2013
> @@ -96,6 +96,15 @@ static EncodingInfo getUnicodeEncoding(S
>
>  namespace llvm {
>  namespace yaml {
> +/// pin the vtables to this file
> +void Node::anchor() {}
> +void NullNode::anchor() {}
> +void ScalarNode::anchor() {}
> +void KeyValueNode::anchor() {}
> +void MappingNode::anchor() {}
> +void SequenceNode::anchor() {}
> +void AliasNode::anchor() {}
> +
>  /// Token - A single YAML token.
>  struct Token : ilist_node<Token> {
>    enum TokenKind {
>
> Modified: llvm/trunk/lib/Support/YAMLTraits.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/YAMLTraits.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/YAMLTraits.cpp (original)
> +++ llvm/trunk/lib/Support/YAMLTraits.cpp Fri Nov 15 16:34:48 2013
> @@ -59,6 +59,13 @@ void Input::setDiagHandler(SourceMgr::Di
>    SrcMgr.setDiagHandler(Handler, Ctxt);
>  }
>
> +/// pin the vtables to this file
> +void Input::HNode::anchor() {}
> +void Input::EmptyHNode::anchor() {}
> +void Input::ScalarHNode::anchor() {}
> +void Input::MapHNode::anchor() {}
> +void Input::SequenceHNode::anchor() {}
> +
>  bool Input::outputting() const {
>    return false;
>  }
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64InstrInfo.cpp Fri Nov 15 16:34:48
> 2013
> @@ -29,7 +29,7 @@
>
>  #include <algorithm>
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "AArch64GenInstrInfo.inc"
>
>  using namespace llvm;
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64Subtarget.cpp Fri Nov 15 16:34:48
> 2013
> @@ -25,6 +25,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void AArch64Subtarget::anchor() {}
> +
>  AArch64Subtarget::AArch64Subtarget(StringRef TT, StringRef CPU, StringRef
> FS)
>      : AArch64GenSubtargetInfo(TT, CPU, FS), HasFPARMv8(false),
> HasNEON(false),
>        HasCrypto(false), TargetTriple(TT), CPUString(CPU) {
>
> Modified: llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h (original)
> +++ llvm/trunk/lib/Target/AArch64/AArch64Subtarget.h Fri Nov 15 16:34:48
> 2013
> @@ -27,6 +27,7 @@ class StringRef;
>  class GlobalValue;
>
>  class AArch64Subtarget : public AArch64GenSubtargetInfo {
> +  virtual void anchor();
>  protected:
>    bool HasFPARMv8;
>    bool HasNEON;
>
> Modified: llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
> (original)
> +++ llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp Fri
> Nov 15 16:34:48 2013
> @@ -37,3 +37,5 @@ AArch64ELFMCAsmInfo::AArch64ELFMCAsmInfo
>    // Exceptions handling
>    ExceptionsType = ExceptionHandling::DwarfCFI;
>  }
> +
> +void AArch64ELFMCAsmInfo::anchor() {}
>
> Modified: llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h
> (original)
> +++ llvm/trunk/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.h Fri Nov
> 15 16:34:48 2013
> @@ -18,9 +18,12 @@
>
>  namespace llvm {
>
> -  struct AArch64ELFMCAsmInfo : public MCAsmInfoELF {
> -    explicit AArch64ELFMCAsmInfo();
> -  };
> +struct AArch64ELFMCAsmInfo : public MCAsmInfoELF {
> +  explicit AArch64ELFMCAsmInfo();
> +
> +private:
> +  virtual void anchor();
> +};
>
>  } // namespace llvm
>
>
> Modified: llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMBaseInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -37,7 +37,7 @@
>  #include "llvm/Support/Debug.h"
>  #include "llvm/Support/ErrorHandling.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "ARMGenInstrInfo.inc"
>
>  using namespace llvm;
>
> Modified: llvm/trunk/lib/Target/Hexagon/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/CMakeLists.txt?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/Hexagon/CMakeLists.txt Fri Nov 15 16:34:48 2013
> @@ -17,6 +17,7 @@ add_llvm_target(HexagonCodeGen
>    HexagonFrameLowering.cpp
>    HexagonHardwareLoops.cpp
>    HexagonFixupHwLoops.cpp
> +  HexagonMachineFunctionInfo.cpp
>    HexagonMachineScheduler.cpp
>    HexagonMCInstLower.cpp
>    HexagonInstrInfo.cpp
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.cpp Fri Nov 15 16:34:48
> 2013
> @@ -26,7 +26,7 @@
>  #include "llvm/Support/Debug.h"
>  #include "llvm/Support/MathExtras.h"
>  #include "llvm/Support/raw_ostream.h"
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #define GET_INSTRMAP_INFO
>  #include "HexagonGenInstrInfo.inc"
>  #include "HexagonGenDFAPacketizer.inc"
> @@ -55,6 +55,8 @@ const int Hexagon_MEMH_AUTOINC_MIN = -16
>  const int Hexagon_MEMB_AUTOINC_MAX = 7;
>  const int Hexagon_MEMB_AUTOINC_MIN = -8;
>
> +// pin vtable to this file
> +void HexagonInstrInfo::anchor() {}
>
>  HexagonInstrInfo::HexagonInstrInfo(HexagonSubtarget &ST)
>    : HexagonGenInstrInfo(Hexagon::ADJCALLSTACKDOWN,
> Hexagon::ADJCALLSTACKUP),
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonInstrInfo.h Fri Nov 15 16:34:48
> 2013
> @@ -30,6 +30,8 @@ class HexagonInstrInfo : public HexagonG
>    const HexagonSubtarget &Subtarget;
>    typedef unsigned Opcode_t;
>
> +  virtual void anchor();
> +
>  public:
>    explicit HexagonInstrInfo(HexagonSubtarget &ST);
>
>
> Copied: llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.cpp (from
> r194862, llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.cpp?p2=llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.cpp&p1=llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp&r1=194862&r2=194865&rev=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.cpp Fri Nov
> 15 16:34:48 2013
> @@ -1,18 +1,16 @@
> -//===-- R600MachineFunctionInfo.cpp - R600 Machine Function Info-*- C++
> -*-===//
> +//= HexagonMachineFunctionInfo.cpp - Hexagon machine function info *- C++
> -*-=//
>  //
>  //                     The LLVM Compiler Infrastructure
>  //
>  // This file is distributed under the University of Illinois Open Source
>  // License. See LICENSE.TXT for details.
>  //
> -/// \file
>
>  //===----------------------------------------------------------------------===//
>
> -#include "R600MachineFunctionInfo.h"
> +#include "HexagonMachineFunctionInfo.h"
>
>  using namespace llvm;
>
> -R600MachineFunctionInfo::R600MachineFunctionInfo(const MachineFunction
> &MF)
> -  : AMDGPUMachineFunction(MF) { }
> -
> +// pin vtable to this file
> +void HexagonMachineFunctionInfo::anchor() {}
>
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonMachineFunctionInfo.h Fri Nov 15
> 16:34:48 2013
> @@ -1,4 +1,4 @@
> -//=- HexagonMachineFuctionInfo.h - Hexagon machine function info --*- C++
> -*-=//
> +//=- HexagonMachineFunctionInfo.h - Hexagon machine function info -*- C++
> -*-=//
>  //
>  //                     The LLVM Compiler Infrastructure
>  //
> @@ -10,6 +10,7 @@
>  #ifndef HexagonMACHINEFUNCTIONINFO_H
>  #define HexagonMACHINEFUNCTIONINFO_H
>
> +#include <map>
>  #include "llvm/CodeGen/MachineFunction.h"
>
>  namespace llvm {
> @@ -33,6 +34,7 @@ class HexagonMachineFunctionInfo : publi
>
>    std::map<const MachineInstr*, unsigned> PacketInfo;
>
> +  virtual void anchor();
>
>  public:
>    HexagonMachineFunctionInfo() : SRetReturnReg(0), HasClobberLR(0),
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.cpp Fri Nov 15 16:34:48
> 2013
> @@ -86,3 +86,4 @@ HexagonSubtarget::HexagonSubtarget(Strin
>      ModeIEEERndNear = false;
>  }
>
> +HexagonSubtarget::~HexagonSubtarget() {}
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonSubtarget.h Fri Nov 15 16:34:48
> 2013
> @@ -42,6 +42,7 @@ public:
>
>  public:
>    HexagonSubtarget(StringRef TT, StringRef CPU, StringRef FS);
> +  virtual ~HexagonSubtarget();
>
>    /// getInstrItins - Return the instruction itineraies based on subtarget
>    /// selection.
>
> Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp
> (original)
> +++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.cpp Fri
> Nov 15 16:34:48 2013
> @@ -15,6 +15,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void HexagonMCAsmInfo::anchor() {}
> +
>  HexagonMCAsmInfo::HexagonMCAsmInfo(StringRef TT) {
>    Data16bitsDirective = "\t.half\t";
>    Data32bitsDirective = "\t.word\t";
>
> Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.h
> (original)
> +++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCAsmInfo.h Fri Nov
> 15 16:34:48 2013
> @@ -19,6 +19,7 @@
>
>  namespace llvm {
>    class HexagonMCAsmInfo : public MCAsmInfoELF {
> +    virtual void anchor();
>    public:
>      explicit HexagonMCAsmInfo(StringRef TT);
>    };
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.cpp Fri Nov 15 16:34:48
> 2013
> @@ -22,11 +22,14 @@
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/TargetRegistry.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "MSP430GenInstrInfo.inc"
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void MSP430InstrInfo::anchor() {}
> +
>  MSP430InstrInfo::MSP430InstrInfo(MSP430TargetMachine &tm)
>    : MSP430GenInstrInfo(MSP430::ADJCALLSTACKDOWN, MSP430::ADJCALLSTACKUP),
>      RI(tm) {}
>
> Modified: llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/MSP430/MSP430InstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -42,6 +42,7 @@ namespace MSP430II {
>
>  class MSP430InstrInfo : public MSP430GenInstrInfo {
>    const MSP430RegisterInfo RI;
> +  virtual void anchor();
>  public:
>    explicit MSP430InstrInfo(MSP430TargetMachine &TM);
>
>
> Modified: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.cpp Fri Nov
> 15 16:34:48 2013
> @@ -42,6 +42,9 @@ using namespace llvm;
>  static cl::opt<bool> PrintHackDirectives("print-hack-directives",
>                                           cl::init(false), cl::Hidden);
>
> +// pin vtable to this file
> +void MipsTargetStreamer::anchor() {}
> +
>  static std::string ParseMipsTriple(StringRef TT, StringRef CPU) {
>    std::string MipsArchFeature;
>    size_t DashPosition = 0;
>
> Modified: llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Mips/MipsInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -22,11 +22,14 @@
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/TargetRegistry.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "MipsGenInstrInfo.inc"
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void MipsInstrInfo::anchor() {}
> +
>  MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm, unsigned UncondBr)
>    : MipsGenInstrInfo(Mips::ADJCALLSTACKDOWN, Mips::ADJCALLSTACKUP),
>      TM(tm), UncondBrOpc(UncondBr) {}
>
> Modified: llvm/trunk/lib/Target/Mips/MipsInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -27,6 +27,7 @@
>  namespace llvm {
>
>  class MipsInstrInfo : public MipsGenInstrInfo {
> +  virtual void anchor();
>  protected:
>    MipsTargetMachine &TM;
>    unsigned UncondBrOpc;
>
> Modified: llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h (original)
> +++ llvm/trunk/lib/Target/Mips/MipsTargetStreamer.h Fri Nov 15 16:34:48
> 2013
> @@ -14,6 +14,7 @@
>
>  namespace llvm {
>  class MipsTargetStreamer : public MCTargetStreamer {
> +  virtual void anchor();
>  public:
>    virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
>    virtual void emitMipsHackSTOCG(MCSymbol *Sym, unsigned Val) = 0;
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXISelLowering.cpp Fri Nov 15 16:34:48
> 2013
> @@ -2288,3 +2288,29 @@ void NVPTXTargetLowering::ReplaceNodeRes
>      return;
>    }
>  }
> +
> +// pin NVPTXSection.h and NVPTXTargetObjectFile.h vtables to this file
> +void NVPTXSection::anchor() {}
> +
> +NVPTXTargetObjectFile::~NVPTXTargetObjectFile() {
> +  delete TextSection;
> +  delete DataSection;
> +  delete BSSSection;
> +  delete ReadOnlySection;
> +
> +  delete StaticCtorSection;
> +  delete StaticDtorSection;
> +  delete LSDASection;
> +  delete EHFrameSection;
> +  delete DwarfAbbrevSection;
> +  delete DwarfInfoSection;
> +  delete DwarfLineSection;
> +  delete DwarfFrameSection;
> +  delete DwarfPubTypesSection;
> +  delete DwarfDebugInlineSection;
> +  delete DwarfStrSection;
> +  delete DwarfLocSection;
> +  delete DwarfARangesSection;
> +  delete DwarfRangesSection;
> +  delete DwarfMacroInfoSection;
> +}
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -14,7 +14,7 @@
>  #include "NVPTX.h"
>  #include "NVPTXInstrInfo.h"
>  #include "NVPTXTargetMachine.h"
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "NVPTXGenInstrInfo.inc"
>  #include "llvm/IR/Function.h"
>  #include "llvm/ADT/STLExtras.h"
> @@ -24,6 +24,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +void NVPTXInstrInfo::anchor() {}
> +
>  // FIXME: Add the subtarget support on this constructor.
>  NVPTXInstrInfo::NVPTXInstrInfo(NVPTXTargetMachine &tm)
>      : NVPTXGenInstrInfo(), TM(tm), RegInfo(*TM.getSubtargetImpl()) {}
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -26,6 +26,7 @@ namespace llvm {
>  class NVPTXInstrInfo : public NVPTXGenInstrInfo {
>    NVPTXTargetMachine &TM;
>    const NVPTXRegisterInfo RegInfo;
> +  virtual void anchor();
>  public:
>    explicit NVPTXInstrInfo(NVPTXTargetMachine &TM);
>
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXSection.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXSection.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXSection.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXSection.h Fri Nov 15 16:34:48 2013
> @@ -24,10 +24,10 @@ namespace llvm {
>  /// the ASMPrint interface.
>  ///
>  class NVPTXSection : public MCSection {
> -
> +  virtual void anchor();
>  public:
>    NVPTXSection(SectionVariant V, SectionKind K) : MCSection(V, K) {}
> -  ~NVPTXSection() {}
> +  virtual ~NVPTXSection() {}
>
>    /// Override this as NVPTX has its own way of printing switching
>    /// to a section.
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.cpp Fri Nov 15 16:34:48 2013
> @@ -20,6 +20,9 @@
>  using namespace llvm;
>
>
> +// pin vtable to this file
> +void NVPTXSubtarget::anchor() {}
> +
>  NVPTXSubtarget::NVPTXSubtarget(const std::string &TT, const std::string
> &CPU,
>                                 const std::string &FS, bool is64Bit)
>      : NVPTXGenSubtargetInfo(TT, CPU, FS), Is64Bit(is64Bit), PTXVersion(0),
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXSubtarget.h Fri Nov 15 16:34:48 2013
> @@ -36,6 +36,8 @@ class NVPTXSubtarget : public NVPTXGenSu
>    // SM version x.y is represented as 10*x+y, e.g. 3.1 == 31
>    unsigned int SmVersion;
>
> +  virtual void anchor();
> +
>  public:
>    /// This constructor initializes the data members to match that
>    /// of the specified module.
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXTargetObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXTargetObjectFile.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXTargetObjectFile.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXTargetObjectFile.h Fri Nov 15
> 16:34:48 2013
> @@ -44,28 +44,7 @@ public:
>      DwarfMacroInfoSection = 0;
>    }
>
> -  ~NVPTXTargetObjectFile() {
> -    delete TextSection;
> -    delete DataSection;
> -    delete BSSSection;
> -    delete ReadOnlySection;
> -
> -    delete StaticCtorSection;
> -    delete StaticDtorSection;
> -    delete LSDASection;
> -    delete EHFrameSection;
> -    delete DwarfAbbrevSection;
> -    delete DwarfInfoSection;
> -    delete DwarfLineSection;
> -    delete DwarfFrameSection;
> -    delete DwarfPubTypesSection;
> -    delete DwarfDebugInlineSection;
> -    delete DwarfStrSection;
> -    delete DwarfLocSection;
> -    delete DwarfARangesSection;
> -    delete DwarfRangesSection;
> -    delete DwarfMacroInfoSection;
> -  }
> +  virtual ~NVPTXTargetObjectFile();
>
>    virtual void Initialize(MCContext &ctx, const TargetMachine &TM) {
>      TargetLoweringObjectFile::Initialize(ctx, TM);
>
> Modified: llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp
> (original)
> +++ llvm/trunk/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.cpp Fri Nov
> 15 16:34:48 2013
> @@ -37,6 +37,9 @@
>
>  using namespace llvm;
>
> +// pin vtable to this file
> +PPCTargetStreamer::~PPCTargetStreamer() {}
> +
>  static MCInstrInfo *createPPCMCInstrInfo() {
>    MCInstrInfo *X = new MCInstrInfo();
>    InitPPCMCInstrInfo(X);
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -33,7 +33,7 @@
>  #include "llvm/Support/raw_ostream.h"
>
>  #define GET_INSTRMAP_INFO
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "PPCGenInstrInfo.inc"
>
>  using namespace llvm;
> @@ -45,6 +45,9 @@ opt<bool> DisableCTRLoopAnal("disable-pp
>  static cl::opt<bool> DisableCmpOpt("disable-ppc-cmp-opt",
>  cl::desc("Disable compare instruction optimization"), cl::Hidden);
>
> +//pin vtable to this file
> +void PPCInstrInfo::anchor() {}
> +
>  PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm)
>    : PPCGenInstrInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP),
>      TM(tm), RI(*TM.getSubtargetImpl()) {}
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -78,6 +78,7 @@ class PPCInstrInfo : public PPCGenInstrI
>                              const TargetRegisterClass *RC,
>                              SmallVectorImpl<MachineInstr*> &NewMIs,
>                              bool &NonRI, bool &SpillsVRS) const;
> +  virtual void anchor();
>  public:
>    explicit PPCInstrInfo(PPCTargetMachine &TM);
>
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCTargetStreamer.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCTargetStreamer.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCTargetStreamer.h (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCTargetStreamer.h Fri Nov 15 16:34:48
> 2013
> @@ -15,6 +15,7 @@
>  namespace llvm {
>  class PPCTargetStreamer : public MCTargetStreamer {
>  public:
> +  virtual ~PPCTargetStreamer();
>    virtual void emitTCEntry(const MCSymbol &S) = 0;
>  };
>  }
>
> Modified: llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -20,13 +20,17 @@
>  #include "llvm/CodeGen/MachineInstrBuilder.h"
>  #include "llvm/CodeGen/MachineRegisterInfo.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #define GET_INSTRINFO_NAMED_OPS
>  #define GET_INSTRMAP_INFO
>  #include "AMDGPUGenInstrInfo.inc"
>
>  using namespace llvm;
>
> +
> +// pin vtable to this file
> +void AMDGPUInstrInfo::anchor() {}
> +
>  AMDGPUInstrInfo::AMDGPUInstrInfo(TargetMachine &tm)
>    : AMDGPUGenInstrInfo(-1,-1), RI(tm), TM(tm) { }
>
>
> Modified: llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/R600/AMDGPUInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -43,6 +43,7 @@ private:
>    const AMDGPURegisterInfo RI;
>    bool getNextBranchInstr(MachineBasicBlock::iterator &iter,
>                            MachineBasicBlock &MBB) const;
> +  virtual void anchor();
>  protected:
>    TargetMachine &TM;
>  public:
>
> Modified: llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.cpp (original)
> +++ llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.cpp Fri Nov 15
> 16:34:48 2013
> @@ -6,6 +6,9 @@ using namespace llvm;
>
>  static const char *const ShaderTypeAttribute = "ShaderType";
>
> +// pin vtable to this file
> +void AMDGPUMachineFunction::anchor() {}
> +
>  AMDGPUMachineFunction::AMDGPUMachineFunction(const MachineFunction &MF) :
>      MachineFunctionInfo() {
>    ShaderType = ShaderType::COMPUTE;
>
> Modified: llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.h (original)
> +++ llvm/trunk/lib/Target/R600/AMDGPUMachineFunction.h Fri Nov 15 16:34:48
> 2013
> @@ -19,6 +19,7 @@
>  namespace llvm {
>
>  class AMDGPUMachineFunction : public MachineFunctionInfo {
> +  virtual void anchor();
>  public:
>    AMDGPUMachineFunction(const MachineFunction &MF);
>    unsigned ShaderType;
>
> Added: llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.cpp?rev=194865&view=auto
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.cpp (added)
> +++ llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.cpp Fri
> Nov 15 16:34:48 2013
> @@ -0,0 +1,21 @@
> +//===-- AMDGPUCodeEmitter.cpp - AMDGPU Code Emitter interface
> -------------===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +/// \file
> +/// \brief CodeEmitter interface for R600 and SI codegen.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "AMDGPUMCCodeEmitter.h"
> +
> +using namespace llvm;
> +
> +// pin vtable to this file
> +void AMDGPUMCCodeEmitter::anchor() {}
> +
>
> Modified: llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h
> (original)
> +++ llvm/trunk/lib/Target/R600/MCTargetDesc/AMDGPUMCCodeEmitter.h Fri Nov
> 15 16:34:48 2013
> @@ -24,6 +24,7 @@ class MCInst;
>  class MCOperand;
>
>  class AMDGPUMCCodeEmitter : public MCCodeEmitter {
> +  virtual void anchor();
>  public:
>
>    uint64_t getBinaryCodeForInstr(const MCInst &MI,
>
> Modified: llvm/trunk/lib/Target/R600/MCTargetDesc/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/MCTargetDesc/CMakeLists.txt?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/MCTargetDesc/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/R600/MCTargetDesc/CMakeLists.txt Fri Nov 15
> 16:34:48 2013
> @@ -2,6 +2,7 @@
>  add_llvm_library(LLVMR600Desc
>    AMDGPUAsmBackend.cpp
>    AMDGPUELFObjectWriter.cpp
> +  AMDGPUMCCodeEmitter.cpp
>    AMDGPUMCTargetDesc.cpp
>    AMDGPUMCAsmInfo.cpp
>    R600MCCodeEmitter.cpp
>
> Modified: llvm/trunk/lib/Target/R600/R600InstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/R600InstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/R600/R600InstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -23,7 +23,7 @@
>  #include "llvm/CodeGen/MachineInstrBuilder.h"
>  #include "llvm/CodeGen/MachineRegisterInfo.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "AMDGPUGenDFAPacketizer.inc"
>
>  using namespace llvm;
>
> Modified: llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp (original)
> +++ llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp Fri Nov 15
> 16:34:48 2013
> @@ -12,7 +12,9 @@
>
>  using namespace llvm;
>
> -R600MachineFunctionInfo::R600MachineFunctionInfo(const MachineFunction
> &MF)
> -  : AMDGPUMachineFunction(MF) { }
>
> +// pin vtable to this file
> +void R600MachineFunctionInfo::anchor() {}
>
> +R600MachineFunctionInfo::R600MachineFunctionInfo(const MachineFunction
> &MF)
> +  : AMDGPUMachineFunction(MF) { }
>
> Modified: llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.h Fri Nov 15
> 16:34:48 2013
> @@ -21,6 +21,7 @@
>  namespace llvm {
>
>  class R600MachineFunctionInfo : public AMDGPUMachineFunction {
> +  virtual void anchor();
>  public:
>    R600MachineFunctionInfo(const MachineFunction &MF);
>    SmallVector<unsigned, 4> LiveOuts;
>
> Modified: llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.cpp (original)
> +++ llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.cpp Fri Nov 15
> 16:34:48 2013
> @@ -13,6 +13,10 @@
>
>  using namespace llvm;
>
> +
> +// pin vtable to this file
> +void SIMachineFunctionInfo::anchor() {}
> +
>  SIMachineFunctionInfo::SIMachineFunctionInfo(const MachineFunction &MF)
>    : AMDGPUMachineFunction(MF),
>      PSInputAddr(0) { }
>
> Modified: llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/R600/SIMachineFunctionInfo.h Fri Nov 15 16:34:48
> 2013
> @@ -22,6 +22,7 @@ namespace llvm {
>  /// This class keeps track of the SPI_SP_INPUT_ADDR config register, which
>  /// tells the hardware which interpolation parameters to load.
>  class SIMachineFunctionInfo : public AMDGPUMachineFunction {
> +  virtual void anchor();
>  public:
>    SIMachineFunctionInfo(const MachineFunction &MF);
>    unsigned PSInputAddr;
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -24,11 +24,15 @@
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/TargetRegistry.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "SparcGenInstrInfo.inc"
>
>  using namespace llvm;
>
> +
> +// pin vtable to this file
> +void SparcInstrInfo::anchor() {}
> +
>  SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST)
>    : SparcGenInstrInfo(SP::ADJCALLSTACKDOWN, SP::ADJCALLSTACKUP),
>      RI(ST), Subtarget(ST) {
>
> Modified: llvm/trunk/lib/Target/Sparc/SparcInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Sparc/SparcInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Sparc/SparcInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/Sparc/SparcInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -37,6 +37,7 @@ namespace SPII {
>  class SparcInstrInfo : public SparcGenInstrInfo {
>    const SparcRegisterInfo RI;
>    const SparcSubtarget& Subtarget;
> +  virtual void anchor();
>  public:
>    explicit SparcInstrInfo(SparcSubtarget &ST);
>
>
> Modified: llvm/trunk/lib/Target/SystemZ/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/CMakeLists.txt?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/CMakeLists.txt (original)
> +++ llvm/trunk/lib/Target/SystemZ/CMakeLists.txt Fri Nov 15 16:34:48 2013
> @@ -21,6 +21,7 @@ add_llvm_target(SystemZCodeGen
>    SystemZISelLowering.cpp
>    SystemZInstrInfo.cpp
>    SystemZLongBranch.cpp
> +  SystemZMachineFunctionInfo.cpp
>    SystemZMCInstLower.cpp
>    SystemZRegisterInfo.cpp
>    SystemZSelectionDAGInfo.cpp
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.cpp Fri Nov 15 16:34:48
> 2013
> @@ -17,7 +17,7 @@
>  #include "llvm/CodeGen/LiveVariables.h"
>  #include "llvm/CodeGen/MachineRegisterInfo.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #define GET_INSTRMAP_INFO
>  #include "SystemZGenInstrInfo.inc"
>
> @@ -37,6 +37,9 @@ static bool isHighReg(unsigned int Reg)
>    return false;
>  }
>
> +// pin vtable to this file
> +void SystemZInstrInfo::anchor() {}
> +
>  SystemZInstrInfo::SystemZInstrInfo(SystemZTargetMachine &tm)
>    : SystemZGenInstrInfo(SystemZ::ADJCALLSTACKDOWN,
> SystemZ::ADJCALLSTACKUP),
>      RI(tm), TM(tm) {
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZInstrInfo.h Fri Nov 15 16:34:48
> 2013
> @@ -127,6 +127,7 @@ class SystemZInstrInfo : public SystemZG
>    void emitGRX32Move(MachineBasicBlock &MBB, MachineBasicBlock::iterator
> MBBI,
>                       DebugLoc DL, unsigned DestReg, unsigned SrcReg,
>                       unsigned LowLowOpcode, unsigned Size, bool KillSrc)
> const;
> +  virtual void anchor();
>
>  public:
>    explicit SystemZInstrInfo(SystemZTargetMachine &TM);
>
> Copied: llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.cpp (from
> r194862, llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp)
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.cpp?p2=llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.cpp&p1=llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp&r1=194862&r2=194865&rev=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/R600/R600MachineFunctionInfo.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.cpp Fri Nov
> 15 16:34:48 2013
> @@ -1,18 +1,17 @@
> -//===-- R600MachineFunctionInfo.cpp - R600 Machine Function Info-*- C++
> -*-===//
> +//== SystemZMachineFuctionInfo.cpp - SystemZ machine function info-*- C++
> -*-=//
>  //
>  //                     The LLVM Compiler Infrastructure
>  //
>  // This file is distributed under the University of Illinois Open Source
>  // License. See LICENSE.TXT for details.
>  //
> -/// \file
>
>  //===----------------------------------------------------------------------===//
>
> -#include "R600MachineFunctionInfo.h"
> +#include "SystemZMachineFunctionInfo.h"
>
>  using namespace llvm;
>
> -R600MachineFunctionInfo::R600MachineFunctionInfo(const MachineFunction
> &MF)
> -  : AMDGPUMachineFunction(MF) { }
>
> +// pin vtable to this file
> +void SystemZMachineFunctionInfo::anchor() {}
>
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.h (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZMachineFunctionInfo.h Fri Nov 15
> 16:34:48 2013
> @@ -23,6 +23,8 @@ class SystemZMachineFunctionInfo : publi
>    unsigned RegSaveFrameIndex;
>    bool ManipulatesSP;
>
> +  virtual void anchor();
> +
>  public:
>    explicit SystemZMachineFunctionInfo(MachineFunction &MF)
>      : LowSavedGPR(0), HighSavedGPR(0), VarArgsFirstGPR(0),
> VarArgsFirstFPR(0),
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.cpp (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.cpp Fri Nov 15 16:34:48
> 2013
> @@ -18,6 +18,9 @@
>
>  using namespace llvm;
>
> +// pin vtabel to this file
> +void SystemZSubtarget::anchor() {}
> +
>  SystemZSubtarget::SystemZSubtarget(const std::string &TT,
>                                     const std::string &CPU,
>                                     const std::string &FS)
>
> Modified: llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.h (original)
> +++ llvm/trunk/lib/Target/SystemZ/SystemZSubtarget.h Fri Nov 15 16:34:48
> 2013
> @@ -26,6 +26,7 @@ class GlobalValue;
>  class StringRef;
>
>  class SystemZSubtarget : public SystemZGenSubtargetInfo {
> +  virtual void anchor();
>  protected:
>    bool HasDistinctOps;
>    bool HasLoadStoreOnCond;
>
> Modified: llvm/trunk/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp
> (original)
> +++ llvm/trunk/lib/Target/X86/MCTargetDesc/X86WinCOFFObjectWriter.cpp Fri
> Nov 15 16:34:48 2013
> @@ -27,7 +27,7 @@ namespace {
>
>    public:
>      X86WinCOFFObjectWriter(bool Is64Bit_);
> -    ~X86WinCOFFObjectWriter();
> +    virtual ~X86WinCOFFObjectWriter();
>
>      virtual unsigned getRelocType(const MCValue &Target,
>                                    const MCFixup &Fixup,
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -36,7 +36,7 @@
>  #include "llvm/Target/TargetOptions.h"
>  #include <limits>
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "X86GenInstrInfo.inc"
>
>  using namespace llvm;
> @@ -92,6 +92,9 @@ struct X86OpTblEntry {
>    uint16_t Flags;
>  };
>
> +// pin vtable to this file
> +void X86InstrInfo::anchor() {}
> +
>  X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
>    : X86GenInstrInfo((tm.getSubtarget<X86Subtarget>().is64Bit()
>                       ? X86::ADJCALLSTACKDOWN64
>
> Modified: llvm/trunk/lib/Target/X86/X86InstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86InstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/X86/X86InstrInfo.h (original)
> +++ llvm/trunk/lib/Target/X86/X86InstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -152,6 +152,8 @@ class X86InstrInfo : public X86GenInstrI
>                              MemOp2RegOpTableType &M2RTable,
>                              unsigned RegOp, unsigned MemOp, unsigned
> Flags);
>
> +  virtual void anchor();
> +
>  public:
>    explicit X86InstrInfo(X86TargetMachine &tm);
>
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreInstrInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreInstrInfo.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreInstrInfo.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreInstrInfo.cpp Fri Nov 15 16:34:48 2013
> @@ -22,7 +22,7 @@
>  #include "llvm/Support/ErrorHandling.h"
>  #include "llvm/Support/TargetRegistry.h"
>
> -#define GET_INSTRINFO_CTOR
> +#define GET_INSTRINFO_CTOR_DTOR
>  #include "XCoreGenInstrInfo.inc"
>
>  namespace llvm {
> @@ -39,6 +39,10 @@ namespace XCore {
>
>  using namespace llvm;
>
> +
> +// pin vtable to this file
> +void XCoreInstrInfo::anchor() {}
> +
>  XCoreInstrInfo::XCoreInstrInfo()
>    : XCoreGenInstrInfo(XCore::ADJCALLSTACKDOWN, XCore::ADJCALLSTACKUP),
>      RI() {
>
> Modified: llvm/trunk/lib/Target/XCore/XCoreInstrInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreInstrInfo.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/XCore/XCoreInstrInfo.h (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreInstrInfo.h Fri Nov 15 16:34:48 2013
> @@ -24,6 +24,7 @@ namespace llvm {
>
>  class XCoreInstrInfo : public XCoreGenInstrInfo {
>    const XCoreRegisterInfo RI;
> +  virtual void anchor();
>  public:
>    XCoreInstrInfo();
>
>
> Modified: llvm/trunk/tools/llvm-stress/llvm-stress.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-stress/llvm-stress.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-stress/llvm-stress.cpp (original)
> +++ llvm/trunk/tools/llvm-stress/llvm-stress.cpp Fri Nov 15 16:34:48 2013
> @@ -128,7 +128,7 @@ public:
>      BB(Block),PT(PT),Ran(R),Context(BB->getContext()) {}
>
>    /// virtual D'tor to silence warnings.
> -  virtual ~Modifier() {}
> +  virtual ~Modifier();
>
>    /// Add a new instruction.
>    virtual void Act() = 0;
> @@ -285,8 +285,11 @@ protected:
>    LLVMContext &Context;
>  };
>
> +Modifier::~Modifier() {}
> +
>  struct LoadModifier: public Modifier {
>    LoadModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R) {}
> +  virtual ~LoadModifier();
>    virtual void Act() {
>      // Try to use predefined pointers. If non exist, use undef pointer
> value;
>      Value *Ptr = getRandomPointerValue();
> @@ -295,8 +298,11 @@ struct LoadModifier: public Modifier {
>    }
>  };
>
> +LoadModifier::~LoadModifier() {}
> +
>  struct StoreModifier: public Modifier {
>    StoreModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R) {}
> +  virtual ~StoreModifier();
>    virtual void Act() {
>      // Try to use predefined pointers. If non exist, use undef pointer
> value;
>      Value *Ptr = getRandomPointerValue();
> @@ -313,8 +319,11 @@ struct StoreModifier: public Modifier {
>    }
>  };
>
> +StoreModifier::~StoreModifier() {}
> +
>  struct BinModifier: public Modifier {
>    BinModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT,
> R) {}
> +  virtual ~BinModifier();
>
>    virtual void Act() {
>      Value *Val0 = getRandomVal();
> @@ -356,9 +365,13 @@ struct BinModifier: public Modifier {
>    }
>  };
>
> +BinModifier::~BinModifier() {}
> +
>  /// Generate constant values.
>  struct ConstModifier: public Modifier {
>    ConstModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R) {}
> +  virtual ~ConstModifier();
> +
>    virtual void Act() {
>      Type *Ty = pickType();
>
> @@ -403,8 +416,11 @@ struct ConstModifier: public Modifier {
>    }
>  };
>
> +ConstModifier::~ConstModifier() {}
> +
>  struct AllocaModifier: public Modifier {
>    AllocaModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R){}
> +  virtual ~AllocaModifier();
>
>    virtual void Act() {
>      Type *Tp = pickType();
> @@ -412,9 +428,12 @@ struct AllocaModifier: public Modifier {
>    }
>  };
>
> +AllocaModifier::~AllocaModifier() {}
> +
>  struct ExtractElementModifier: public Modifier {
>    ExtractElementModifier(BasicBlock *BB, PieceTable *PT, Random *R):
>      Modifier(BB, PT, R) {}
> +  virtual ~ExtractElementModifier();
>
>    virtual void Act() {
>      Value *Val0 = getRandomVectorValue();
> @@ -426,8 +445,12 @@ struct ExtractElementModifier: public Mo
>    }
>  };
>
> +ExtractElementModifier::~ExtractElementModifier() {}
> +
>  struct ShuffModifier: public Modifier {
>    ShuffModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R) {}
> +  virtual ~ShuffModifier();
> +
>    virtual void Act() {
>
>      Value *Val0 = getRandomVectorValue();
> @@ -453,9 +476,12 @@ struct ShuffModifier: public Modifier {
>    }
>  };
>
> +ShuffModifier::~ShuffModifier() {}
> +
>  struct InsertElementModifier: public Modifier {
>    InsertElementModifier(BasicBlock *BB, PieceTable *PT, Random *R):
>      Modifier(BB, PT, R) {}
> +  virtual ~InsertElementModifier();
>
>    virtual void Act() {
>      Value *Val0 = getRandomVectorValue();
> @@ -470,8 +496,12 @@ struct InsertElementModifier: public Mod
>
>  };
>
> +InsertElementModifier::~InsertElementModifier() {}
> +
>  struct CastModifier: public Modifier {
>    CastModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB,
> PT, R) {}
> +  virtual ~CastModifier();
> +
>    virtual void Act() {
>
>      Value *V = getRandomVal();
> @@ -555,9 +585,12 @@ struct CastModifier: public Modifier {
>
>  };
>
> +CastModifier::~CastModifier() {}
> +
>  struct SelectModifier: public Modifier {
>    SelectModifier(BasicBlock *BB, PieceTable *PT, Random *R):
>      Modifier(BB, PT, R) {}
> +  virtual ~SelectModifier();
>
>    virtual void Act() {
>      // Try a bunch of different select configuration until a valid one is
> found.
> @@ -579,9 +612,12 @@ struct SelectModifier: public Modifier {
>    }
>  };
>
> +SelectModifier::~SelectModifier() {}
>
>  struct CmpModifier: public Modifier {
>    CmpModifier(BasicBlock *BB, PieceTable *PT, Random *R):Modifier(BB, PT,
> R) {}
> +  virtual ~CmpModifier();
> +
>    virtual void Act() {
>
>      Value *Val0 = getRandomVal();
> @@ -607,6 +643,8 @@ struct CmpModifier: public Modifier {
>    }
>  };
>
> +CmpModifier::~CmpModifier() {}
> +
>  void FillFunction(Function *F, Random &R) {
>    // Create a legal entry block.
>    BasicBlock *BB = BasicBlock::Create(F->getContext(), "BB", F);
>
> Modified: llvm/trunk/unittests/ADT/IntrusiveRefCntPtrTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/IntrusiveRefCntPtrTest.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ADT/IntrusiveRefCntPtrTest.cpp (original)
> +++ llvm/trunk/unittests/ADT/IntrusiveRefCntPtrTest.cpp Fri Nov 15
> 16:34:48 2013
> @@ -13,9 +13,11 @@
>  namespace llvm {
>
>  struct VirtualRefCounted : public RefCountedBaseVPTR {
> -  virtual void f() {}
> +  virtual void f();
>  };
>
> +void VirtualRefCounted::f() {}
> +
>  // Run this test with valgrind to detect memory leaks.
>  TEST(IntrusiveRefCntPtr, RefCountedBaseVPTRCopyDoesNotLeak) {
>    VirtualRefCounted *V1 = new VirtualRefCounted;
>
> Modified: llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp (original)
> +++ llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITCAPITest.cpp Fri Nov
> 15 16:34:48 2013
> @@ -83,14 +83,8 @@ protected:
>      UnsupportedOSs.push_back(Triple::Cygwin);
>    }
>
> -  virtual void SetUp() {
> -    didCallAllocateCodeSection = false;
> -    Module = 0;
> -    Function = 0;
> -    Engine = 0;
> -    Error = 0;
> -  }
> -
> +  virtual void SetUp();
> +
>    virtual void TearDown() {
>      if (Engine)
>        LLVMDisposeExecutionEngine(Engine);
> @@ -157,6 +151,14 @@ protected:
>    char *Error;
>  };
>
> +void MCJITCAPITest::SetUp() {
> +  didCallAllocateCodeSection = false;
> +  Module = 0;
> +  Function = 0;
> +  Engine = 0;
> +  Error = 0;
> +}
> +
>  TEST_F(MCJITCAPITest, simple_function) {
>    SKIP_UNSUPPORTED_PLATFORM;
>
>
> Modified:
> llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITMultipleModuleTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITMultipleModuleTest.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITMultipleModuleTest.cpp
> (original)
> +++ llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITMultipleModuleTest.cpp
> Fri Nov 15 16:34:48 2013
> @@ -18,7 +18,13 @@
>
>  using namespace llvm;
>
> -class MCJITMultipleModuleTest : public testing::Test, public
> MCJITTestBase {};
> +class MCJITMultipleModuleTest : public testing::Test,
> +                                public MCJITTestBase {
> +public:
> +  virtual ~MCJITMultipleModuleTest();
> +};
> +
> +MCJITMultipleModuleTest::~MCJITMultipleModuleTest() {}
>
>  namespace {
>
>
> Modified: llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITTest.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITTest.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITTest.cpp (original)
> +++ llvm/trunk/unittests/ExecutionEngine/MCJIT/MCJITTest.cpp Fri Nov 15
> 16:34:48 2013
> @@ -21,11 +21,13 @@ using namespace llvm;
>  class MCJITTest : public testing::Test, public MCJITTestBase {
>  protected:
>
> -  virtual void SetUp() {
> -    M.reset(createEmptyModule("<main>"));
> -  }
> +  virtual void SetUp();
>  };
>
> +void MCJITTest::SetUp() {
> +  M.reset(createEmptyModule("<main>"));
> +}
> +
>  namespace {
>
>  // FIXME: Ensure creating an execution engine does not crash when
> constructed
>
> Modified: llvm/trunk/utils/TableGen/CodeGenSchedule.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenSchedule.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/CodeGenSchedule.cpp (original)
> +++ llvm/trunk/utils/TableGen/CodeGenSchedule.cpp Fri Nov 15 16:34:48 2013
> @@ -38,12 +38,15 @@ static void dumpIdxVec(const SmallVector
>
>  // (instrs a, b, ...) Evaluate and union all arguments. Identical to
> AddOp.
>  struct InstrsOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts,
> -             ArrayRef<SMLoc> Loc) {
> -    ST.evaluate(Expr->arg_begin(), Expr->arg_end(), Elts, Loc);
> -  }
> +  virtual void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet
> &Elts,
> +                     ArrayRef<SMLoc> Loc);
>  };
>
> +void InstrsOp::apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet
> &Elts,
> +                     ArrayRef<SMLoc> Loc) {
> +  ST.evaluate(Expr->arg_begin(), Expr->arg_end(), Elts, Loc);
> +}
> +
>  // (instregex "OpcPat",...) Find all instructions matching an opcode
> pattern.
>  //
>  // TODO: Since this is a prefix match, perform a binary search over the
> @@ -56,34 +59,37 @@ struct InstRegexOp : public SetTheory::O
>    const CodeGenTarget &Target;
>    InstRegexOp(const CodeGenTarget &t): Target(t) {}
>
> -  void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet &Elts,
> -             ArrayRef<SMLoc> Loc) {
> -    SmallVector<Regex*, 4> RegexList;
> -    for (DagInit::const_arg_iterator
> -           AI = Expr->arg_begin(), AE = Expr->arg_end(); AI != AE; ++AI) {
> -      StringInit *SI = dyn_cast<StringInit>(*AI);
> -      if (!SI)
> -        PrintFatalError(Loc, "instregex requires pattern string: "
> -          + Expr->getAsString());
> -      std::string pat = SI->getValue();
> -      // Implement a python-style prefix match.
> -      if (pat[0] != '^') {
> -        pat.insert(0, "^(");
> -        pat.insert(pat.end(), ')');
> -      }
> -      RegexList.push_back(new Regex(pat));
> +  virtual void apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet
> &Elts,
> +                     ArrayRef<SMLoc> Loc);
> +};
> +
> +void InstRegexOp::apply(SetTheory &ST, DagInit *Expr, SetTheory::RecSet
> &Elts,
> +                       ArrayRef<SMLoc> Loc) {
> +  SmallVector<Regex*, 4> RegexList;
> +  for (DagInit::const_arg_iterator
> +       AI = Expr->arg_begin(), AE = Expr->arg_end(); AI != AE; ++AI) {
> +    StringInit *SI = dyn_cast<StringInit>(*AI);
> +    if (!SI)
> +      PrintFatalError(Loc, "instregex requires pattern string: "
> +                      + Expr->getAsString());
> +    std::string pat = SI->getValue();
> +    // Implement a python-style prefix match.
> +    if (pat[0] != '^') {
> +      pat.insert(0, "^(");
> +      pat.insert(pat.end(), ')');
>      }
> -    for (CodeGenTarget::inst_iterator I = Target.inst_begin(),
> -           E = Target.inst_end(); I != E; ++I) {
> -      for (SmallVectorImpl<Regex*>::iterator
> -             RI = RegexList.begin(), RE = RegexList.end(); RI != RE;
> ++RI) {
> -        if ((*RI)->match((*I)->TheDef->getName()))
> -          Elts.insert((*I)->TheDef);
> -      }
> +    RegexList.push_back(new Regex(pat));
> +  }
> +  for (CodeGenTarget::inst_iterator I = Target.inst_begin(),
> +       E = Target.inst_end(); I != E; ++I) {
> +    for (SmallVectorImpl<Regex*>::iterator
> +         RI = RegexList.begin(), RE = RegexList.end(); RI != RE; ++RI) {
> +      if ((*RI)->match((*I)->TheDef->getName()))
> +        Elts.insert((*I)->TheDef);
>      }
> -    DeleteContainerPointers(RegexList);
>    }
> -};
> +  DeleteContainerPointers(RegexList);
> +}
>
>  /// CodeGenModels ctor interprets machine model records and populates
> maps.
>  CodeGenSchedModels::CodeGenSchedModels(RecordKeeper &RK,
>
> Modified: llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp (original)
> +++ llvm/trunk/utils/TableGen/InstrInfoEmitter.cpp Fri Nov 15 16:34:48 2013
> @@ -408,13 +408,14 @@ void InstrInfoEmitter::run(raw_ostream &
>    OS << "namespace llvm {\n";
>    OS << "struct " << ClassName << " : public TargetInstrInfo {\n"
>       << "  explicit " << ClassName << "(int SO = -1, int DO = -1);\n"
> +     << "  virtual ~" << ClassName << "();\n"
>       << "};\n";
>    OS << "} // End llvm namespace \n";
>
>    OS << "#endif // GET_INSTRINFO_HEADER\n\n";
>
> -  OS << "\n#ifdef GET_INSTRINFO_CTOR\n";
> -  OS << "#undef GET_INSTRINFO_CTOR\n";
> +  OS << "\n#ifdef GET_INSTRINFO_CTOR_DTOR\n";
> +  OS << "#undef GET_INSTRINFO_CTOR_DTOR\n";
>
>    OS << "namespace llvm {\n";
>    OS << "extern const MCInstrDesc " << TargetName << "Insts[];\n";
> @@ -424,10 +425,11 @@ void InstrInfoEmitter::run(raw_ostream &
>       << "  : TargetInstrInfo(SO, DO) {\n"
>       << "  InitMCInstrInfo(" << TargetName << "Insts, "
>       << TargetName << "InstrNameIndices, " << TargetName <<
> "InstrNameData, "
> -     << NumberedInstructions.size() << ");\n}\n";
> +     << NumberedInstructions.size() << ");\n}\n"
> +     << ClassName << "::~" << ClassName << "() {}\n";
>    OS << "} // End llvm namespace \n";
>
> -  OS << "#endif // GET_INSTRINFO_CTOR\n\n";
> +  OS << "#endif // GET_INSTRINFO_CTOR_DTOR\n\n";
>
>    emitOperandNameMappings(OS, Target, NumberedInstructions);
>  }
>
> Modified: llvm/trunk/utils/TableGen/SetTheory.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/SetTheory.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/SetTheory.cpp (original)
> +++ llvm/trunk/utils/TableGen/SetTheory.cpp Fri Nov 15 16:34:48 2013
> @@ -27,14 +27,16 @@ typedef SetTheory::RecVec RecVec;
>
>  // (add a, b, ...) Evaluate and union all arguments.
>  struct AddOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      ST.evaluate(Expr->arg_begin(), Expr->arg_end(), Elts, Loc);
>    }
>  };
>
>  // (sub Add, Sub, ...) Set difference.
>  struct SubOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      if (Expr->arg_size() < 2)
>        PrintFatalError(Loc, "Set difference needs at least two arguments:
> " +
>          Expr->getAsString());
> @@ -49,7 +51,8 @@ struct SubOp : public SetTheory::Operato
>
>  // (and S1, S2) Set intersection.
>  struct AndOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      if (Expr->arg_size() != 2)
>        PrintFatalError(Loc, "Set intersection requires two arguments: " +
>          Expr->getAsString());
> @@ -68,7 +71,8 @@ struct SetIntBinOp : public SetTheory::O
>                       RecSet &Set, int64_t N,
>                       RecSet &Elts, ArrayRef<SMLoc> Loc) =0;
>
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      if (Expr->arg_size() != 2)
>        PrintFatalError(Loc, "Operator requires (Op Set, Int) arguments: " +
>          Expr->getAsString());
> @@ -84,9 +88,9 @@ struct SetIntBinOp : public SetTheory::O
>
>  // (shl S, N) Shift left, remove the first N elements.
>  struct ShlOp : public SetIntBinOp {
> -  void apply2(SetTheory &ST, DagInit *Expr,
> -             RecSet &Set, int64_t N,
> -             RecSet &Elts, ArrayRef<SMLoc> Loc) {
> +  virtual void apply2(SetTheory &ST, DagInit *Expr,
> +                      RecSet &Set, int64_t N,
> +                      RecSet &Elts, ArrayRef<SMLoc> Loc) {
>      if (N < 0)
>        PrintFatalError(Loc, "Positive shift required: " +
>          Expr->getAsString());
> @@ -97,9 +101,9 @@ struct ShlOp : public SetIntBinOp {
>
>  // (trunc S, N) Truncate after the first N elements.
>  struct TruncOp : public SetIntBinOp {
> -  void apply2(SetTheory &ST, DagInit *Expr,
> -             RecSet &Set, int64_t N,
> -             RecSet &Elts, ArrayRef<SMLoc> Loc) {
> +  virtual void apply2(SetTheory &ST, DagInit *Expr,
> +                      RecSet &Set, int64_t N,
> +                      RecSet &Elts, ArrayRef<SMLoc> Loc) {
>      if (N < 0)
>        PrintFatalError(Loc, "Positive length required: " +
>          Expr->getAsString());
> @@ -115,9 +119,9 @@ struct RotOp : public SetIntBinOp {
>
>    RotOp(bool Rev) : Reverse(Rev) {}
>
> -  void apply2(SetTheory &ST, DagInit *Expr,
> -             RecSet &Set, int64_t N,
> -             RecSet &Elts, ArrayRef<SMLoc> Loc) {
> +  virtual void apply2(SetTheory &ST, DagInit *Expr,
> +                      RecSet &Set, int64_t N,
> +                      RecSet &Elts, ArrayRef<SMLoc> Loc) {
>      if (Reverse)
>        N = -N;
>      // N > 0 -> rotate left, N < 0 -> rotate right.
> @@ -134,9 +138,9 @@ struct RotOp : public SetIntBinOp {
>
>  // (decimate S, N) Pick every N'th element of S.
>  struct DecimateOp : public SetIntBinOp {
> -  void apply2(SetTheory &ST, DagInit *Expr,
> -             RecSet &Set, int64_t N,
> -             RecSet &Elts, ArrayRef<SMLoc> Loc) {
> +  virtual void apply2(SetTheory &ST, DagInit *Expr,
> +                      RecSet &Set, int64_t N,
> +                      RecSet &Elts, ArrayRef<SMLoc> Loc) {
>      if (N <= 0)
>        PrintFatalError(Loc, "Positive stride required: " +
>          Expr->getAsString());
> @@ -147,7 +151,8 @@ struct DecimateOp : public SetIntBinOp {
>
>  // (interleave S1, S2, ...) Interleave elements of the arguments.
>  struct InterleaveOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      // Evaluate the arguments individually.
>      SmallVector<RecSet, 4> Args(Expr->getNumArgs());
>      unsigned MaxSize = 0;
> @@ -165,7 +170,8 @@ struct InterleaveOp : public SetTheory::
>
>  // (sequence "Format", From, To) Generate a sequence of records by name.
>  struct SequenceOp : public SetTheory::Operator {
> -  void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts, ArrayRef<SMLoc>
> Loc) {
> +  virtual void apply(SetTheory &ST, DagInit *Expr, RecSet &Elts,
> +                     ArrayRef<SMLoc> Loc) {
>      int Step = 1;
>      if (Expr->arg_size() > 4)
>        PrintFatalError(Loc, "Bad args to (sequence \"Format\", From, To):
> " +
> @@ -232,15 +238,16 @@ struct FieldExpander : public SetTheory:
>
>    FieldExpander(StringRef fn) : FieldName(fn) {}
>
> -  void expand(SetTheory &ST, Record *Def, RecSet &Elts) {
> +  virtual void expand(SetTheory &ST, Record *Def, RecSet &Elts) {
>      ST.evaluate(Def->getValueInit(FieldName), Elts, Def->getLoc());
>    }
>  };
>  } // end anonymous namespace
>
> -void SetTheory::Operator::anchor() { }
> +// pin vtables to this file
> +void SetTheory::Operator::anchor() {}
> +void SetTheory::Expander::anchor() {}
>
> -void SetTheory::Expander::anchor() { }
>
>  SetTheory::SetTheory() {
>    addOperator("add", new AddOp);
>
> Modified: llvm/trunk/utils/TableGen/TGValueTypes.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TGValueTypes.cpp?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/TableGen/TGValueTypes.cpp (original)
> +++ llvm/trunk/utils/TableGen/TGValueTypes.cpp Fri Nov 15 16:34:48 2013
> @@ -35,9 +35,11 @@ public:
>    }
>    Type(TypeKind K) : Kind(K) {}
>    virtual unsigned getSizeInBits() const = 0;
> -  virtual ~Type() {}
> +  virtual ~Type();
>  };
>
> +Type::~Type() {}
> +
>  }
>
>  class ExtendedIntegerType : public Type {
> @@ -45,10 +47,11 @@ class ExtendedIntegerType : public Type
>  public:
>    explicit ExtendedIntegerType(unsigned bits)
>      : Type(TK_ExtendedIntegerType), BitWidth(bits) {}
> +  virtual ~ExtendedIntegerType();
>    static bool classof(const Type *T) {
>      return T->getKind() == TK_ExtendedIntegerType;
>    }
> -  unsigned getSizeInBits() const {
> +  virtual unsigned getSizeInBits() const {
>      return getBitWidth();
>    }
>    unsigned getBitWidth() const {
> @@ -56,16 +59,20 @@ public:
>    }
>  };
>
> +ExtendedIntegerType::~ExtendedIntegerType() {}
> +
> +
>  class ExtendedVectorType : public Type {
>    EVT ElementType;
>    unsigned NumElements;
>  public:
>    ExtendedVectorType(EVT elty, unsigned num)
>      : Type(TK_ExtendedVectorType), ElementType(elty), NumElements(num) {}
> +  virtual ~ExtendedVectorType();
>    static bool classof(const Type *T) {
>      return T->getKind() == TK_ExtendedVectorType;
>    }
> -  unsigned getSizeInBits() const {
> +  virtual unsigned getSizeInBits() const {
>      return getNumElements() * getElementType().getSizeInBits();
>    }
>    EVT getElementType() const {
> @@ -76,6 +83,9 @@ public:
>    }
>  };
>
> +ExtendedVectorType::~ExtendedVectorType() {}
> +
> +
>  static std::map<unsigned, const Type *>
>    ExtendedIntegerTypeMap;
>  static std::map<std::pair<uintptr_t, uintptr_t>, const Type *>
>
> Modified:
> llvm/trunk/utils/unittest/googletest/include/gtest/gtest-test-part.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/gtest-test-part.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/include/gtest/gtest-test-part.h
> (original)
> +++ llvm/trunk/utils/unittest/googletest/include/gtest/gtest-test-part.h
> Fri Nov 15 16:34:48 2013
> @@ -142,7 +142,7 @@ class GTEST_API_ TestPartResultArray {
>  // This interface knows how to report a test part result.
>  class TestPartResultReporterInterface {
>   public:
> -  virtual ~TestPartResultReporterInterface() {}
> +  virtual ~TestPartResultReporterInterface();
>
>    virtual void ReportTestPartResult(const TestPartResult& result) = 0;
>  };
>
> Modified: llvm/trunk/utils/unittest/googletest/include/gtest/gtest.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/gtest.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/include/gtest/gtest.h (original)
> +++ llvm/trunk/utils/unittest/googletest/include/gtest/gtest.h Fri Nov 15
> 16:34:48 2013
> @@ -910,7 +910,7 @@ class GTEST_API_ TestCase {
>  class Environment {
>   public:
>    // The d'tor is virtual as we need to subclass Environment.
> -  virtual ~Environment() {}
> +  virtual ~Environment();
>
>    // Override this to define how to set up the environment.
>    virtual void SetUp() {}
> @@ -928,7 +928,7 @@ class Environment {
>  // the order the corresponding events are fired.
>  class TestEventListener {
>   public:
> -  virtual ~TestEventListener() {}
> +  virtual ~TestEventListener();
>
>    // Fired before any test activity starts.
>    virtual void OnTestProgramStart(const UnitTest& unit_test) = 0;
> @@ -980,6 +980,7 @@ class TestEventListener {
>  // comments about each method please see the definition of
> TestEventListener
>  // above.
>  class EmptyTestEventListener : public TestEventListener {
> +  virtual void anchor();
>   public:
>    virtual void OnTestProgramStart(const UnitTest& /*unit_test*/) {}
>    virtual void OnTestIterationStart(const UnitTest& /*unit_test*/,
>
> Modified:
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-death-test-internal.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-death-test-internal.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-death-test-internal.h
> (original)
> +++
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-death-test-internal.h
> Fri Nov 15 16:34:48 2013
> @@ -79,7 +79,7 @@ class GTEST_API_ DeathTest {
>    static bool Create(const char* statement, const RE* regex,
>                       const char* file, int line, DeathTest** test);
>    DeathTest();
> -  virtual ~DeathTest() { }
> +  virtual ~DeathTest();
>
>    // A helper class that aborts a death test when it's deleted.
>    class ReturnSentinel {
> @@ -139,7 +139,7 @@ class GTEST_API_ DeathTest {
>  // Factory interface for death tests.  May be mocked out for testing.
>  class DeathTestFactory {
>   public:
> -  virtual ~DeathTestFactory() { }
> +  virtual ~DeathTestFactory();
>    virtual bool Create(const char* statement, const RE* regex,
>                        const char* file, int line, DeathTest** test) = 0;
>  };
>
> Modified:
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal.h
> (original)
> +++
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-internal.h
> Fri Nov 15 16:34:48 2013
> @@ -105,6 +105,7 @@
>  #if !GTEST_NO_LLVM_RAW_OSTREAM
>  namespace llvm {
>  class convertible_fwd_ostream : public std::ostream {
> +  virtual void anchor();
>    raw_os_ostream ros_;
>
>  public:
> @@ -536,7 +537,7 @@ GTEST_API_ TypeId GetTestTypeId();
>  // of a Test object.
>  class TestFactoryBase {
>   public:
> -  virtual ~TestFactoryBase() {}
> +  virtual ~TestFactoryBase();
>
>    // Creates a test instance to run. The instance is both created and
> destroyed
>    // within TestInfoImpl::Run()
>
> Modified:
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-param-util.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-param-util.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-param-util.h
> (original)
> +++
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-param-util.h
> Fri Nov 15 16:34:48 2013
> @@ -414,7 +414,7 @@ class TestMetaFactory
>  // and calls RegisterTests() on each of them when asked.
>  class ParameterizedTestCaseInfoBase {
>   public:
> -  virtual ~ParameterizedTestCaseInfoBase() {}
> +  virtual ~ParameterizedTestCaseInfoBase();
>
>    // Base part of test case name for display purposes.
>    virtual const string& GetTestCaseName() const = 0;
>
> Modified:
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-port.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-port.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> ---
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-port.h
> (original)
> +++
> llvm/trunk/utils/unittest/googletest/include/gtest/internal/gtest-port.h
> Fri Nov 15 16:34:48 2013
> @@ -1116,7 +1116,7 @@ class Notification {
>  // problem.
>  class ThreadWithParamBase {
>   public:
> -  virtual ~ThreadWithParamBase() {}
> +  virtual ~ThreadWithParamBase();
>    virtual void Run() = 0;
>  };
>
> @@ -1290,7 +1290,7 @@ typedef GTestMutexLock MutexLock;
>  // ThreadLocalValueHolderBase.
>  class ThreadLocalValueHolderBase {
>   public:
> -  virtual ~ThreadLocalValueHolderBase() {}
> +  virtual ~ThreadLocalValueHolderBase();
>  };
>
>  // Called by pthread to delete thread-local data stored by
>
> Modified: llvm/trunk/utils/unittest/googletest/src/gtest-death-test.cc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/src/gtest-death-test.cc?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/src/gtest-death-test.cc (original)
> +++ llvm/trunk/utils/unittest/googletest/src/gtest-death-test.cc Fri Nov
> 15 16:34:48 2013
> @@ -300,6 +300,8 @@ DeathTest::DeathTest() {
>    }
>  }
>
> +DeathTest::~DeathTest() {}
> +
>  // Creates and returns a death test by dispatching to the current
>  // death test factory.
>  bool DeathTest::Create(const char* statement, const RE* regex,
> @@ -733,6 +735,8 @@ DeathTest::TestRole WindowsDeathTest::As
>  }
>  # else  // We are not on Windows.
>
> +DeathTestFactory::~DeathTestFactory() {}
> +
>  // ForkingDeathTest provides implementations for most of the abstract
>  // methods of the DeathTest interface.  Only the AssumeRole method is
>  // left undefined.
>
> Modified: llvm/trunk/utils/unittest/googletest/src/gtest-internal-inl.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/src/gtest-internal-inl.h?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/src/gtest-internal-inl.h
> (original)
> +++ llvm/trunk/utils/unittest/googletest/src/gtest-internal-inl.h Fri Nov
> 15 16:34:48 2013
> @@ -408,7 +408,7 @@ GTEST_API_ FilePath GetCurrentExecutable
>  class OsStackTraceGetterInterface {
>   public:
>    OsStackTraceGetterInterface() {}
> -  virtual ~OsStackTraceGetterInterface() {}
> +  virtual ~OsStackTraceGetterInterface();
>
>    // Returns the current OS stack trace as a String.  Parameters:
>    //
>
> Modified: llvm/trunk/utils/unittest/googletest/src/gtest-port.cc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/src/gtest-port.cc?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/src/gtest-port.cc (original)
> +++ llvm/trunk/utils/unittest/googletest/src/gtest-port.cc Fri Nov 15
> 16:34:48 2013
> @@ -746,5 +746,15 @@ const char* StringFromGTestEnv(const cha
>    return value == NULL ? default_value : value;
>  }
>
> +ThreadWithParamBase::~ThreadWithParamBase() {}
> +ThreadLocalValueHolderBase::~ThreadLocalValueHolderBase() {}
> +TestFactoryBase::~TestFactoryBase() {}
> +
>  }  // namespace internal
>  }  // namespace testing
> +
> +#if !GTEST_NO_LLVM_RAW_OSTREAM
> +namespace llvm {
> +void convertible_fwd_ostream::anchor() {}
> +}
> +#endif
>
> Modified: llvm/trunk/utils/unittest/googletest/src/gtest.cc
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/unittest/googletest/src/gtest.cc?rev=194865&r1=194864&r2=194865&view=diff
>
> ==============================================================================
> --- llvm/trunk/utils/unittest/googletest/src/gtest.cc (original)
> +++ llvm/trunk/utils/unittest/googletest/src/gtest.cc Fri Nov 15 16:34:48
> 2013
> @@ -4863,4 +4863,13 @@ void InitGoogleTest(int* argc, wchar_t**
>    internal::InitGoogleTestImpl(argc, argv);
>  }
>
> +Environment::~Environment() {}
> +TestPartResultReporterInterface::~TestPartResultReporterInterface() {}
> +TestEventListener::~TestEventListener() {}
> +void EmptyTestEventListener::anchor() {}
> +namespace internal {
> +OsStackTraceGetterInterface::~OsStackTraceGetterInterface() {}
> +ParameterizedTestCaseInfoBase::~ParameterizedTestCaseInfoBase() {}
> +}
> +
>  }  // namespace testing
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131118/161c7066/attachment.html>


More information about the llvm-commits mailing list