r350856 - Split -Wdelete-non-virtual-dtor into two groups

Erik Pilkington via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 14 11:33:41 PST 2019


Sure, for posterity: this was originally committed in r350585 and 
reverted in r350639. The original commit added 
-Wdelete-abstract-non-virtual-dtor as a group including 
-Wdelete-non-virtual-dtor, which led to strange cli behaviour.

Thanks!

On 1/13/19 5:28 PM, David Blaikie wrote:
> Might be handy to summarize the changes from the previous reverted 
> version of this patch (& mention the original commit revision and 
> revert revision) - in the commit message is ideal, but in a reply to 
> the commit after the fact will do in a pinch
>
> On Fri, Jan 11, 2019 at 4:06 AM Erik Pilkington via cfe-commits 
> <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
>
>     Author: epilk
>     Date: Thu Jan 10 10:03:07 2019
>     New Revision: 350856
>
>     URL: http://llvm.org/viewvc/llvm-project?rev=350856&view=rev
>     Log:
>     Split -Wdelete-non-virtual-dtor into two groups
>
>     This group controls two diagnostics: deleting an abstract class with
>     a non-virtual dtor, which is a guaranteed crash, and deleting a
>     non-abstract polymorphic class with a non-virtual dtor, which is just
>     suspicious.
>
>     rdar://40380564
>
>     Differential revision: https://reviews.llvm.org/D56405
>
>     Added:
>         cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp
>     Modified:
>         cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>         cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>
>     Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>     URL:
>     http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=350856&r1=350855&r2=350856&view=diff
>     ==============================================================================
>     --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
>     +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Thu Jan 10
>     10:03:07 2019
>     @@ -104,7 +104,11 @@ def UndefinedFuncTemplate : DiagGroup<"u
>      def MissingNoEscape : DiagGroup<"missing-noescape">;
>
>      def DeleteIncomplete : DiagGroup<"delete-incomplete">;
>     -def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor">;
>     +def DeleteNonAbstractNonVirtualDtor :
>     DiagGroup<"delete-non-abstract-non-virtual-dtor">;
>     +def DeleteAbstractNonVirtualDtor :
>     DiagGroup<"delete-abstract-non-virtual-dtor">;
>     +def DeleteNonVirtualDtor : DiagGroup<"delete-non-virtual-dtor",
>     +  [DeleteNonAbstractNonVirtualDtor,
>     + DeleteAbstractNonVirtualDtor]>;
>      def AbstractFinalClass : DiagGroup<"abstract-final-class">;
>
>      def CXX11CompatDeprecatedWritableStr :
>
>     Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>     URL:
>     http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=350856&r1=350855&r2=350856&view=diff
>     ==============================================================================
>     --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
>     +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Jan
>     10 10:03:07 2019
>     @@ -6455,12 +6455,12 @@ def warn_non_virtual_dtor : Warning<
>      def warn_delete_non_virtual_dtor : Warning<
>        "%select{delete|destructor}0 called on non-final %1 that has "
>        "virtual functions but non-virtual destructor">,
>     -  InGroup<DeleteNonVirtualDtor>, DefaultIgnore, ShowInSystemHeader;
>     +  InGroup<DeleteNonAbstractNonVirtualDtor>, DefaultIgnore,
>     ShowInSystemHeader;
>      def note_delete_non_virtual : Note<
>        "qualify call to silence this warning">;
>      def warn_delete_abstract_non_virtual_dtor : Warning<
>        "%select{delete|destructor}0 called on %1 that is abstract but
>     has "
>     -  "non-virtual destructor">, InGroup<DeleteNonVirtualDtor>,
>     ShowInSystemHeader;
>     +  "non-virtual destructor">,
>     InGroup<DeleteAbstractNonVirtualDtor>, ShowInSystemHeader;
>      def warn_overloaded_virtual : Warning<
>        "%q0 hides overloaded virtual %select{function|functions}1">,
>        InGroup<OverloadedVirtual>, DefaultIgnore;
>
>     Added: cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp
>     URL:
>     http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp?rev=350856&view=auto
>     ==============================================================================
>     --- cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp (added)
>     +++ cfe/trunk/test/SemaCXX/delete-non-virtual-dtor.cpp Thu Jan 10
>     10:03:07 2019
>     @@ -0,0 +1,30 @@
>     +// RUN: %clang_cc1 %s -verify -DDIAG1
>     +// RUN: %clang_cc1 %s -verify -DDIAG1 -DDIAG2
>     -Wdelete-non-virtual-dtor
>     +// RUN: %clang_cc1 %s -verify -DDIAG1         -Wmost
>     -Wno-delete-non-abstract-non-virtual-dtor
>     +// RUN: %clang_cc1 %s -verify         -DDIAG2 -Wmost
>     -Wno-delete-abstract-non-virtual-dtor
>     +// RUN: %clang_cc1 %s -verify                 -Wmost
>     -Wno-delete-non-virtual-dtor
>     +
>     +#ifndef DIAG1
>     +#ifndef DIAG2
>     +// expected-no-diagnostics
>     +#endif
>     +#endif
>     +
>     +struct S1 {
>     +  ~S1() {}
>     +  virtual void abs() = 0;
>     +};
>     +
>     +void f1(S1 *s1) { delete s1; }
>     +#ifdef DIAG1
>     +// expected-warning at -2 {{delete called on 'S1' that is abstract
>     but has non-virtual destructor}}
>     +#endif
>     +
>     +struct S2 {
>     +  ~S2() {}
>     +  virtual void real() {}
>     +};
>     +void f2(S2 *s2) { delete s2; }
>     +#ifdef DIAG2
>     +// expected-warning at -2 {{delete called on non-final 'S2' that has
>     virtual functions but non-virtual destructor}}
>     +#endif
>
>
>     _______________________________________________
>     cfe-commits mailing list
>     cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>
>     http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190114/761a8907/attachment-0001.html>


More information about the cfe-commits mailing list