mirror of
https://github.com/github/codeql.git
synced 2026-05-02 04:05:14 +02:00
C++: Fork AV Rule 78 into NonVirtualDestructorInBaseClass
AV Rule 78 has proved too noisy for use on lgtm.com. However, if we make the rule less noisy by, say, allowing a protected destructor to be non-virtual, we're no longer actually enforcing AV Rule 78. Instead, I've copied AV Rule 78 into NonVirtualDestructorInBaseClass.ql, given the new query the `@id` that AV Rule 78 had, and given AV Rule 78 a new JSF-specific `@id`. The new rule allows non-public non-virtual destructors, which is the problem originally reported by an lgtm.com user.
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
struct HasDtor
|
||||
{
|
||||
~HasDtor();
|
||||
};
|
||||
|
||||
struct Base_NonVirtual_NoDtor
|
||||
{
|
||||
void NonVirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_NonVirtual_VirtualDtor
|
||||
{
|
||||
virtual ~Base_NonVirtual_VirtualDtor();
|
||||
void NonVirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_NonVirtual_NonVirtualDtor
|
||||
{
|
||||
~Base_NonVirtual_NonVirtualDtor();
|
||||
void NonVirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_NonVirtual_ImplicitDtor
|
||||
{
|
||||
HasDtor m_hasDtor;
|
||||
void NonVirtualFunction();
|
||||
};
|
||||
|
||||
struct Derived_NonVirtual_NoDtor : public Base_NonVirtual_NoDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_NonVirtual_VirtualDtor : public Base_NonVirtual_VirtualDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_NonVirtual_NonVirtualDtor : public Base_NonVirtual_NonVirtualDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_NonVirtual_ImplicitDtor : public Base_NonVirtual_ImplicitDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Base_Virtual_NoDtor
|
||||
{
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_Virtual_VirtualDtor
|
||||
{
|
||||
virtual ~Base_Virtual_VirtualDtor();
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_Virtual_NonVirtualDtor
|
||||
{
|
||||
~Base_Virtual_NonVirtualDtor();
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_Virtual_ImplicitDtor
|
||||
{
|
||||
HasDtor m_hasDtor;
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_Virtual_NonVirtualDtorWithDefinition
|
||||
{
|
||||
~Base_Virtual_NonVirtualDtorWithDefinition();
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
Base_Virtual_NonVirtualDtorWithDefinition::~Base_Virtual_NonVirtualDtorWithDefinition()
|
||||
{
|
||||
}
|
||||
|
||||
struct Base_Virtual_NonVirtualDtorWithInlineDefinition
|
||||
{
|
||||
~Base_Virtual_NonVirtualDtorWithInlineDefinition()
|
||||
{
|
||||
}
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Base_Virtual_ProtectedNonVirtualDtor
|
||||
{
|
||||
protected:
|
||||
~Base_Virtual_ProtectedNonVirtualDtor();
|
||||
|
||||
public:
|
||||
virtual void VirtualFunction();
|
||||
};
|
||||
|
||||
struct Derived_Virtual_NoDtor : public Base_Virtual_NoDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_VirtualDtor : public Base_Virtual_VirtualDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_NonVirtualDtor : public Base_Virtual_NonVirtualDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_ImplicitDtor : public Base_Virtual_ImplicitDtor
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_NonVirtualDtorWithDefinition: public Base_Virtual_NonVirtualDtorWithDefinition
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_NonVirtualDtorWithInlineDefinition: public Base_Virtual_NonVirtualDtorWithInlineDefinition
|
||||
{
|
||||
};
|
||||
|
||||
struct Derived_Virtual_ProtectedNonVirtualDtor : public Base_Virtual_ProtectedNonVirtualDtor
|
||||
{
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
| NonVirtualDestructorInBaseClass.cpp:56:8:56:34 | Base_Virtual_NonVirtualDtor | Base classes with a virtual function must define a virtual destructor. |
|
||||
| NonVirtualDestructorInBaseClass.cpp:68:8:68:48 | Base_Virtual_NonVirtualDtorWithDefinition | Base classes with a virtual function must define a virtual destructor. |
|
||||
| NonVirtualDestructorInBaseClass.cpp:78:8:78:54 | Base_Virtual_NonVirtualDtorWithInlineDefinition | Base classes with a virtual function must define a virtual destructor. |
|
||||
@@ -0,0 +1 @@
|
||||
Likely Bugs/OO/NonVirtualDestructorInBaseClass.ql
|
||||
Reference in New Issue
Block a user