summaryrefslogtreecommitdiff
path: root/CHANGES.current
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2022-11-18 18:49:48 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2022-11-18 19:35:47 +0000
commit4729cf2b1f44e57f46d13758009b10cec5af47b6 (patch)
tree67e0c94bf8f89539c4008c11624b22779c1240c5 /CHANGES.current
parent777fd2c280fbeb0dea79d900f115369bc2295f65 (diff)
downloadswig-4729cf2b1f44e57f46d13758009b10cec5af47b6.tar.gz
Duplicate class template instantiations via %template changes
Named duplicate class template instantiations now issue a warning and are ignored. Duplicate empty class template instantiations are quietly ignored. The test cases are fixed for this new behaviour. This commit is a pre-requisite for the near future so that the Python builtin wrappers can correctly use the SwigType_namestr function without generating duplicate symbol names.
Diffstat (limited to 'CHANGES.current')
-rw-r--r--CHANGES.current44
1 files changed, 44 insertions, 0 deletions
diff --git a/CHANGES.current b/CHANGES.current
index 3cc2c6066..e184cc6d8 100644
--- a/CHANGES.current
+++ b/CHANGES.current
@@ -7,6 +7,50 @@ the issue number to the end of the URL: https://github.com/swig/swig/issues/
Version 4.2.0 (in progress)
===========================
+2022-11-18: wsfulton
+ Duplicate class template instantiations via %template now issue a warning and are ignored.
+
+ %template(Aint) A<int>;
+ %template(Aint2) A<int>; // Now ignored and issues a warning
+
+ example.i:7: Warning 404: Duplicate template instantiation of 'A< int >' with name 'Aint2' ignored,
+ example.i:6: Warning 404: previous instantiation of 'A< int >' with name 'Aint'.
+
+ A single empty template instantiation before a named instantiation is the one exception
+ for allowing duplicate template instantiations as the empty template instantation does not
+ create a wrapper for the template, it merely adds the instantiation into SWIG's internal
+ type system.
+ Duplicate empty template instantiations are quietly ignored.
+
+ %template() B<int>;
+ %template(Bint) B<int>; // OK
+
+ %template() C<int>;
+ %template() C<int>; // Quietly ignored now
+ %template(Cint) C<int>; // OK
+
+ Note that default template parameters are considered when looking for duplicates such as:
+
+ template <typename T, typename U = short> struct D {};
+ %template(Dint) D<int>;
+ %template(Dintshort) D<int, short>;
+
+ example.i:7: Warning 404: Duplicate template instantiation of 'D< int,short >' with name 'Dintshort' ignored,
+ example.i:6: Warning 404: previous instantiation of 'D< int >' with name 'Dint'.
+
+ Note that the following always was ignored, but that was because the chosen name was a
+ duplicate rather than the template being a duplicate:
+
+ %template(Eint) E<int>;
+ %template(Eint) E<int>; // Always has been ignored as a redefined identifier
+
+ The old warning was:
+
+ example.i:7: Warning 302: Identifier 'Eint' redefined (ignored) (Renamed from 'E< int >'),
+ example.i:6: Warning 302: previous definition of 'Eint' (Renamed from 'E< int >').
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
2022-11-05: wsfulton
#2417 Fix -swiglib for Windows when building with CMake.