From: Don Hinton Date: Fri, 3 May 2019 16:15:13 +0000 (+0000) Subject: [llvm] Revert r231274: "Devirtualize ~parser by making it protected in base classe... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b5f456a009db6764a954f6f23060ebada8ef9a98;p=llvm [llvm] Revert r231274: "Devirtualize ~parser by making it protected in base classes and making derived classes final" Summary: This patch was previously applied in r231221, and reverted in r231254 because it broke self-hosting. It was subsequently fixed and reapplied in r231274. Unfortunately, making the `parser` classes final prevents inheritance which makes it impossible to implement custom parsers. Reverting r231221 restores the ability to customize parsers. Reviewers: dblaikie Reviewed By: dblaikie Subscribers: craig.topper, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D60955 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@359902 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h index 1fc26420fe6..7951128a48a 100644 --- a/include/llvm/Support/CommandLine.h +++ b/include/llvm/Support/CommandLine.h @@ -827,6 +827,8 @@ class basic_parser_impl { // non-template implementation of basic_parser public: basic_parser_impl(Option &) {} + virtual ~basic_parser_impl() {} + enum ValueExpected getValueExpectedFlagDefault() const { return ValueRequired; } @@ -854,8 +856,6 @@ public: virtual void anchor(); protected: - ~basic_parser_impl() = default; - // A helper for basic_parser::printOptionDiff. void printOptionName(const Option &O, size_t GlobalWidth) const; }; @@ -869,15 +869,12 @@ public: using OptVal = OptionValue; basic_parser(Option &O) : basic_parser_impl(O) {} - -protected: - ~basic_parser() = default; }; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -904,8 +901,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser -template <> -class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -931,7 +927,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -953,7 +949,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -999,8 +995,7 @@ extern template class basic_parser; // parser // template <> -class parser final - : public basic_parser { +class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -1023,7 +1018,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -1045,7 +1040,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -1067,7 +1062,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {} @@ -1092,7 +1087,7 @@ extern template class basic_parser; //-------------------------------------------------- // parser // -template <> class parser final : public basic_parser { +template <> class parser : public basic_parser { public: parser(Option &O) : basic_parser(O) {}