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@lists.llvm.org <mailto:cfe-commits@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@-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@-2 {{delete called on non-final 'S2' that has
    virtual functions but non-virtual destructor}}
    +#endif


    _______________________________________________
    cfe-commits mailing list
    cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>
    http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to