diff options
author | Arlie Davis <arlied@google.com> | 2018-11-28 13:53:38 -0800 |
---|---|---|
committer | Arlie Davis <arlied@google.com> | 2018-11-29 14:34:01 -0800 |
commit | c4939c4e12ac66aa3ac92470169abca16bb9ce5b (patch) | |
tree | 96a522451a111966e81780cd3aedff6b39485a1c /src | |
parent | b71e1359a6a79caea35f3cda82d028aa5d2a7e65 (diff) | |
download | mrust-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.hpp | 1 | ||||
-rw-r--r-- | src/expand/derive.cpp | 1 | ||||
-rw-r--r-- | src/hir/expr.hpp | 1 | ||||
-rw-r--r-- | src/hir_typeck/expr_cs.cpp | 1 | ||||
-rw-r--r-- | src/include/synext_decorator.hpp | 1 | ||||
-rw-r--r-- | src/include/synext_macro.hpp | 1 |
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; }; |