From 2bb6a8c4a82670a590d45ba0555ac073100459e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Tomulik?= Date: Fri, 4 Jan 2013 18:20:19 +0100 Subject: [PATCH 1/3] added test case for SF bug #1296 --- Examples/test-suite/common.mk | 1 + .../template_default_arg_virtual_destructor.i | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 Examples/test-suite/template_default_arg_virtual_destructor.i diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index 0c790caf6..f29374df6 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -355,6 +355,7 @@ CPP_TEST_CASES += \ template_default \ template_default2 \ template_default_arg \ + template_default_arg_virtual_destructor \ template_default_class_parms \ template_default_class_parms_typedef \ template_default_inherit \ diff --git a/Examples/test-suite/template_default_arg_virtual_destructor.i b/Examples/test-suite/template_default_arg_virtual_destructor.i new file mode 100644 index 000000000..c56c29bc6 --- /dev/null +++ b/Examples/test-suite/template_default_arg_virtual_destructor.i @@ -0,0 +1,24 @@ +%module template_default_arg_virtual_destructor + +// SF bug #1296: +// virtual destructor in template class (template specification having +// default parameter(s)) triggers the warnint "illegal destructor name" + +%inline %{ +struct A {}; + +template + struct B + { + B(T const&) {} + virtual ~B() {} + }; +template + struct B + { + B(int,int) {} // constructor specific to this partial specialization + virtual ~B() {} // "illegal destructor name" when ~B() is virtual + }; +%} +%template(B_AF) B; +%template(B_A) B; // this instantiation triggert the warning From 02246d7294fb7d20f5b42e3cbec9719f3d918039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Tomulik?= Date: Fri, 4 Jan 2013 18:24:57 +0100 Subject: [PATCH 2/3] applied patch for SF bug #1296 --- Source/CParse/parser.y | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 0d7c65f85..e4f3d67b2 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -4472,17 +4472,7 @@ cpp_destructor_decl : NOT idtemplate LPAREN parms RPAREN cpp_end { | VIRTUAL NOT idtemplate LPAREN parms RPAREN cpp_vend { String *name; - char *c = 0; $$ = new_node("destructor"); - /* Check for template names. If the class is a template - and the constructor is missing the template part, we - add it */ - if (Classprefix) { - c = strchr(Char(Classprefix),'<'); - if (c && !Strchr($3,'<')) { - $3 = NewStringf("%s%s",$3,c); - } - } Setattr($$,"storage","virtual"); name = NewStringf("%s",$3); if (*(Char(name)) != '~') Insert(name,0,"~"); From 8e418d61e6414fe2659b647d609515e15c5fe495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Tomulik?= Date: Fri, 4 Jan 2013 18:41:10 +0100 Subject: [PATCH 3/3] corrected some typos --- Examples/test-suite/common.mk | 2 +- Examples/test-suite/template_default_arg_virtual_destructor.i | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index f29374df6..b39416ac9 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -355,7 +355,7 @@ CPP_TEST_CASES += \ template_default \ template_default2 \ template_default_arg \ - template_default_arg_virtual_destructor \ + template_default_arg_virtual_destructor \ template_default_class_parms \ template_default_class_parms_typedef \ template_default_inherit \ diff --git a/Examples/test-suite/template_default_arg_virtual_destructor.i b/Examples/test-suite/template_default_arg_virtual_destructor.i index c56c29bc6..319d5b837 100644 --- a/Examples/test-suite/template_default_arg_virtual_destructor.i +++ b/Examples/test-suite/template_default_arg_virtual_destructor.i @@ -2,7 +2,7 @@ // SF bug #1296: // virtual destructor in template class (template specification having -// default parameter(s)) triggers the warnint "illegal destructor name" +// default parameter(s)) triggers the warning "illegal destructor name" %inline %{ struct A {};