Commit d12ccbd3 authored by Juergen Ributzka's avatar Juergen Ributzka
Browse files

[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. The memory leaks in this version have been fixed. Thanks
Alexey for pointing them out.

Differential Revision: http://llvm-reviews.chandlerc.com/D2068

Reviewed by Andy

llvm-svn: 195064
parent 3af14421
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1577,9 +1577,11 @@ public:
                                 std::runtime_error::operator=(toCopy)));
  }

  ~OurCppRunException (void) throw () {}
  ~OurCppRunException (void) throw ();
};

// Provide out-of-line definition to prevent weak vtable.
OurCppRunException::~OurCppRunException() throw () {}

/// Throws foreign C++ exception.
/// @param ignoreIt unused parameter that allows function to match implied
+12 −1
Original line number Diff line number Diff line
@@ -79,13 +79,14 @@ static int gettok() {
/// ExprAST - Base class for all expression nodes.
class ExprAST {
public:
  virtual ~ExprAST() {}
  virtual ~ExprAST();
};

/// NumberExprAST - Expression class for numeric literals like "1.0".
class NumberExprAST : public ExprAST {
public:
  NumberExprAST(double val) {}
  virtual ~NumberExprAST();
};

/// VariableExprAST - Expression class for referencing a variable, like "a".
@@ -93,12 +94,14 @@ class VariableExprAST : public ExprAST {
  std::string Name;
public:
  VariableExprAST(const std::string &name) : Name(name) {}
  virtual ~VariableExprAST();
};

/// BinaryExprAST - Expression class for a binary operator.
class BinaryExprAST : public ExprAST {
public:
  BinaryExprAST(char op, ExprAST *lhs, ExprAST *rhs) {}
  virtual ~BinaryExprAST();
};

/// CallExprAST - Expression class for function calls.
@@ -108,8 +111,16 @@ class CallExprAST : public ExprAST {
public:
  CallExprAST(const std::string &callee, std::vector<ExprAST*> &args)
    : Callee(callee), Args(args) {}
  virtual ~CallExprAST();
};

// Provide out-of-line definitions to prevent weak vtables.
ExprAST::~ExprAST() {}
NumberExprAST::~NumberExprAST() {}
VariableExprAST::~VariableExprAST() {}
BinaryExprAST::~BinaryExprAST() {}
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).
+4 −1
Original line number Diff line number Diff line
@@ -84,10 +84,13 @@ static int gettok() {
/// ExprAST - Base class for all expression nodes.
class ExprAST {
public:
  virtual ~ExprAST() {}
  virtual ~ExprAST();
  virtual Value *Codegen() = 0;
};

// Provide out-of-line definition to prevent weak vtable.
ExprAST::~ExprAST() {}

/// NumberExprAST - Expression class for numeric literals like "1.0".
class NumberExprAST : public ExprAST {
  double Val;
+4 −1
Original line number Diff line number Diff line
@@ -91,10 +91,13 @@ static int gettok() {
/// ExprAST - Base class for all expression nodes.
class ExprAST {
public:
  virtual ~ExprAST() {}
  virtual ~ExprAST();
  virtual Value *Codegen() = 0;
};

// Provide out-of-line definition to prevent weak vtable.
ExprAST::~ExprAST() {}

/// NumberExprAST - Expression class for numeric literals like "1.0".
class NumberExprAST : public ExprAST {
  double Val;
+4 −1
Original line number Diff line number Diff line
@@ -100,10 +100,13 @@ static int gettok() {
/// ExprAST - Base class for all expression nodes.
class ExprAST {
public:
  virtual ~ExprAST() {}
  virtual ~ExprAST();
  virtual Value *Codegen() = 0;
};

// Provide out-of-line definition to prevent weak vtable.
ExprAST::~ExprAST() {}

/// NumberExprAST - Expression class for numeric literals like "1.0".
class NumberExprAST : public ExprAST {
  double Val;
Loading