Warning fix for final destructor in directors

Fix suppression of final destructors used in director classes.
Add testcase for final destructors in director classes.
This commit is contained in:
William S Fulton 2019-03-02 19:02:35 +00:00
commit b9c4a84780
3 changed files with 11 additions and 0 deletions

View file

@ -1,6 +1,9 @@
%module(directors="1") cpp11_final_directors
%director Derived;
%director BaseFinalDestructor;
%warnfilter(SWIGWARN_LANG_DIRECTOR_FINAL) BaseFinalDestructor::~BaseFinalDestructor;
%inline %{
struct Base {
@ -13,4 +16,9 @@ struct Derived : Base {
virtual int meth() { return 2; }
virtual ~Derived() {}
};
struct BaseFinalDestructor {
virtual void basefinalmeth() final {}
virtual ~BaseFinalDestructor() final {}
};
%}

View file

@ -0,0 +1 @@
cpp_final_destructor.i:7: Warning 525: Destructor of director base class BaseFinal is marked as final.

View file

@ -2200,7 +2200,9 @@ int Language::classDirector(Node *n) {
Node *nodeType = Getattr(ni, "nodeType");
if (Cmp(nodeType, "destructor") == 0 && GetFlag(ni, "final")) {
String *classtype = Getattr(n, "classtype");
SWIG_WARN_NODE_BEGIN(ni);
Swig_warning(WARN_LANG_DIRECTOR_FINAL, input_file, line_number, "Destructor of director base class %s is marked as final.\n", classtype);
SWIG_WARN_NODE_END(ni);
Delete(vtable);
Delete(using_protected_members_code);
return SWIG_OK;