diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2022-11-18 18:49:48 +0000 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2022-11-18 19:35:47 +0000 |
commit | 4729cf2b1f44e57f46d13758009b10cec5af47b6 (patch) | |
tree | 67e0c94bf8f89539c4008c11624b22779c1240c5 /CHANGES.current | |
parent | 777fd2c280fbeb0dea79d900f115369bc2295f65 (diff) | |
download | swig-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.current | 44 |
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. |