> If the base class has a protected non-virtual dtor and the derived class is > marked final, this warning will not fire (because that interface will ensure > no > polymorphic destruction occurs). Would that be sufficient for your needs?
Oh, almost. I can't mark the derived class as final, but simply making the base classes dtor protected prevents the warning. Thanks for the information. On Thu, Jul 30, 2015 at 11:16 PM, David Blaikie <dblai...@gmail.com> wrote: > > > On Thu, Jul 30, 2015 at 6:43 PM, Eric Fiselier <e...@efcs.ca> wrote: >> >> EricWF created this revision. >> EricWF added a reviewer: mclow.lists. >> EricWF added a subscriber: cfe-commits. >> >> Normally people won't see warnings in libc++ headers, but if they compile >> with "-Wsystem-headers -Wnon-virtual-dtor" they will likely see issues in >> <locale>. >> >> The struct `time_get` is specified as having a non-virtual protected >> destructor but in the libc++ implementation `time_get` also has a >> non-virtual base class with virtual methods. > > > If the base class has a protected non-virtual dtor and the derived class is > marked final, this warning will not fire (because that interface will ensure > no polymorphic destruction occurs). Would that be sufficient for your needs? > >> >> I don't believe this is a bug but instead a false positive. >> >> >> http://reviews.llvm.org/D11670 >> >> Files: >> include/__config >> include/locale >> >> Index: include/locale >> =================================================================== >> --- include/locale >> +++ include/locale >> @@ -1875,6 +1875,11 @@ >> enum dateorder {no_order, dmy, mdy, ymd, ydm}; >> }; >> >> +#if __has_warning("-Wnon-virtual-dtor") >> +#pragma clang diagnostic push >> +#pragma clang diagnostic ignored "-Wnon-virtual-dtor" >> +#endif >> + >> template <class _CharT> >> class _LIBCPP_TYPE_VIS_ONLY __time_get_c_storage >> { >> @@ -1890,6 +1895,10 @@ >> virtual const string_type& __X() const; >> }; >> >> +#if __has_warning("-Wnon-virtual-dtor") >> +#pragma clang diagnostic pop >> +#endif >> + >> template <class _CharT, class _InputIterator = >> istreambuf_iterator<_CharT> > >> class _LIBCPP_TYPE_VIS_ONLY time_get >> : public locale::facet, >> Index: include/__config >> =================================================================== >> --- include/__config >> +++ include/__config >> @@ -45,6 +45,9 @@ >> #ifndef __is_identifier >> #define __is_identifier(__x) 1 >> #endif >> +#ifndef __has_warning >> +#define __has_warning(__x) 0 >> +#endif >> >> >> #ifdef __LITTLE_ENDIAN__ >> >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >> > _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits