diff options
author | Don Hinton <hintonda@gmail.com> | 2019-05-03 16:15:13 +0000 |
---|---|---|
committer | Don Hinton <hintonda@gmail.com> | 2019-05-03 16:15:13 +0000 |
commit | 9bc070077efba53728de05769b803258f832b0d8 (patch) | |
tree | 008db8feac090f79b75390a9f1d83977765adc16 /llvm/include/llvm/Support/CommandLine.h | |
parent | b323d5ec7cac0122cbf6cd98d47119722f02163c (diff) | |
download | bcm5719-llvm-9bc070077efba53728de05769b803258f832b0d8.tar.gz bcm5719-llvm-9bc070077efba53728de05769b803258f832b0d8.zip |
[llvm] Revert r231274: "Devirtualize ~parser<T> 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<T>` 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
llvm-svn: 359902
Diffstat (limited to 'llvm/include/llvm/Support/CommandLine.h')
-rw-r--r-- | llvm/include/llvm/Support/CommandLine.h | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/llvm/include/llvm/Support/CommandLine.h b/llvm/include/llvm/Support/CommandLine.h index 1fc26420fe6..7951128a48a 100644 --- a/llvm/include/llvm/Support/CommandLine.h +++ b/llvm/include/llvm/Support/CommandLine.h @@ -827,6 +827,8 @@ class basic_parser_impl { // non-template implementation of basic_parser<t> 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<DataType>; basic_parser(Option &O) : basic_parser_impl(O) {} - -protected: - ~basic_parser() = default; }; //-------------------------------------------------- // parser<bool> // -template <> class parser<bool> final : public basic_parser<bool> { +template <> class parser<bool> : public basic_parser<bool> { public: parser(Option &O) : basic_parser(O) {} @@ -904,8 +901,7 @@ extern template class basic_parser<bool>; //-------------------------------------------------- // parser<boolOrDefault> -template <> -class parser<boolOrDefault> final : public basic_parser<boolOrDefault> { +template <> class parser<boolOrDefault> : public basic_parser<boolOrDefault> { public: parser(Option &O) : basic_parser(O) {} @@ -931,7 +927,7 @@ extern template class basic_parser<boolOrDefault>; //-------------------------------------------------- // parser<int> // -template <> class parser<int> final : public basic_parser<int> { +template <> class parser<int> : public basic_parser<int> { public: parser(Option &O) : basic_parser(O) {} @@ -953,7 +949,7 @@ extern template class basic_parser<int>; //-------------------------------------------------- // parser<unsigned> // -template <> class parser<unsigned> final : public basic_parser<unsigned> { +template <> class parser<unsigned> : public basic_parser<unsigned> { public: parser(Option &O) : basic_parser(O) {} @@ -999,8 +995,7 @@ extern template class basic_parser<unsigned long>; // parser<unsigned long long> // template <> -class parser<unsigned long long> final - : public basic_parser<unsigned long long> { +class parser<unsigned long long> : public basic_parser<unsigned long long> { public: parser(Option &O) : basic_parser(O) {} @@ -1023,7 +1018,7 @@ extern template class basic_parser<unsigned long long>; //-------------------------------------------------- // parser<double> // -template <> class parser<double> final : public basic_parser<double> { +template <> class parser<double> : public basic_parser<double> { public: parser(Option &O) : basic_parser(O) {} @@ -1045,7 +1040,7 @@ extern template class basic_parser<double>; //-------------------------------------------------- // parser<float> // -template <> class parser<float> final : public basic_parser<float> { +template <> class parser<float> : public basic_parser<float> { public: parser(Option &O) : basic_parser(O) {} @@ -1067,7 +1062,7 @@ extern template class basic_parser<float>; //-------------------------------------------------- // parser<std::string> // -template <> class parser<std::string> final : public basic_parser<std::string> { +template <> class parser<std::string> : public basic_parser<std::string> { public: parser(Option &O) : basic_parser(O) {} @@ -1092,7 +1087,7 @@ extern template class basic_parser<std::string>; //-------------------------------------------------- // parser<char> // -template <> class parser<char> final : public basic_parser<char> { +template <> class parser<char> : public basic_parser<char> { public: parser(Option &O) : basic_parser(O) {} |