summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArlie Davis <arlied@google.com>2018-11-28 13:53:38 -0800
committerArlie Davis <arlied@google.com>2018-11-29 14:34:01 -0800
commitc4939c4e12ac66aa3ac92470169abca16bb9ce5b (patch)
tree96a522451a111966e81780cd3aedff6b39485a1c /src
parentb71e1359a6a79caea35f3cda82d028aa5d2a7e65 (diff)
downloadmrust-c4939c4e12ac66aa3ac92470169abca16bb9ce5b.tar.gz
Mark destructors in base classes as virtual.
This is required for correctness, and when using -fsized-deallocation the previous code fails.
Diffstat (limited to 'src')
-rw-r--r--src/ast/expr.hpp1
-rw-r--r--src/expand/derive.cpp1
-rw-r--r--src/hir/expr.hpp1
-rw-r--r--src/hir_typeck/expr_cs.cpp1
-rw-r--r--src/include/synext_decorator.hpp1
-rw-r--r--src/include/synext_macro.hpp1
6 files changed, 6 insertions, 0 deletions
diff --git a/src/ast/expr.hpp b/src/ast/expr.hpp
index f3981db5..264b37e9 100644
--- a/src/ast/expr.hpp
+++ b/src/ast/expr.hpp
@@ -623,6 +623,7 @@ struct ExprNode_UniOp:
class NodeVisitor
{
public:
+ virtual ~NodeVisitor() = default;
inline void visit(const unique_ptr<ExprNode>& cnode) {
if(cnode.get())
cnode->visit(*this);
diff --git a/src/expand/derive.cpp b/src/expand/derive.cpp
index 5e97c888..5bbef62c 100644
--- a/src/expand/derive.cpp
+++ b/src/expand/derive.cpp
@@ -72,6 +72,7 @@ struct DeriveOpts
/// Interface for derive handlers
struct Deriver
{
+ virtual ~Deriver() = default;
virtual const char* trait_name() const = 0;
virtual AST::Impl handle_item(Span sp, const DeriveOpts& opts, const AST::GenericParams& p, const TypeRef& type, const AST::Struct& str) const = 0;
virtual AST::Impl handle_item(Span sp, const DeriveOpts& opts, const AST::GenericParams& p, const TypeRef& type, const AST::Enum& enm) const = 0;
diff --git a/src/hir/expr.hpp b/src/hir/expr.hpp
index 55a4eaf2..00d22c00 100644
--- a/src/hir/expr.hpp
+++ b/src/hir/expr.hpp
@@ -815,6 +815,7 @@ struct ExprNode_Closure:
class ExprVisitor
{
public:
+ virtual ~ExprVisitor() = default;
virtual void visit_node_ptr(::std::unique_ptr<ExprNode>& node_ptr);
virtual void visit_node(ExprNode& node);
#define NV(nt) virtual void visit(nt& n) = 0;
diff --git a/src/hir_typeck/expr_cs.cpp b/src/hir_typeck/expr_cs.cpp
index 554fea69..363dfeeb 100644
--- a/src/hir_typeck/expr_cs.cpp
+++ b/src/hir_typeck/expr_cs.cpp
@@ -25,6 +25,7 @@ struct Context
class Revisitor
{
public:
+ virtual ~Revisitor() = default;
virtual void fmt(::std::ostream& os) const = 0;
virtual bool revisit(Context& context) = 0;
};
diff --git a/src/include/synext_decorator.hpp b/src/include/synext_decorator.hpp
index eaed3154..1e16ce09 100644
--- a/src/include/synext_decorator.hpp
+++ b/src/include/synext_decorator.hpp
@@ -45,6 +45,7 @@ class ExpandDecorator
{
void unexpected(const Span& sp, const AST::Attribute& mi, const char* loc_str) const;
public:
+ virtual ~ExpandDecorator() = default;
virtual AttrStage stage() const = 0;
virtual void handle(const Span& sp, const AST::Attribute& mi, AST::Crate& crate) const { unexpected(sp, mi, "crate"); }
diff --git a/src/include/synext_macro.hpp b/src/include/synext_macro.hpp
index d414ceb0..60b52d89 100644
--- a/src/include/synext_macro.hpp
+++ b/src/include/synext_macro.hpp
@@ -27,6 +27,7 @@ class TokenStream;
class ExpandProcMacro
{
public:
+ virtual ~ExpandProcMacro() = default;
virtual ::std::unique_ptr<TokenStream> expand(const Span& sp, const AST::Crate& crate, const ::std::string& ident, const TokenTree& tt, AST::Module& mod) = 0;
};