summaryrefslogtreecommitdiff
path: root/Examples
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2023-01-03 23:53:34 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2023-01-03 23:53:34 +0000
commitb18b75369cd4b2795abad1283629b13a62630b58 (patch)
treed34da10c118526e099bd79df3a0da7bfcc6917df /Examples
parent2fc0edc4fd9da1c25254127128aaa601cad30916 (diff)
downloadswig-b18b75369cd4b2795abad1283629b13a62630b58.tar.gz
Fix seg fault using %template
Fix seg fault when instantiating templates with parameters that are function parameters containing templates, such as: %template(MyC) C<int(std::vector<int>)>; Closes #983
Diffstat (limited to 'Examples')
-rw-r--r--Examples/test-suite/java/template_function_parm_runme.java25
-rw-r--r--Examples/test-suite/template_function_parm.i28
2 files changed, 53 insertions, 0 deletions
diff --git a/Examples/test-suite/java/template_function_parm_runme.java b/Examples/test-suite/java/template_function_parm_runme.java
new file mode 100644
index 000000000..3c8f3d1a9
--- /dev/null
+++ b/Examples/test-suite/java/template_function_parm_runme.java
@@ -0,0 +1,25 @@
+import template_function_parm.*;
+
+public class template_function_parm_runme {
+
+ static {
+ try {
+ System.loadLibrary("template_function_parm");
+ } catch (UnsatisfiedLinkError e) {
+ System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
+ System.exit(1);
+ }
+ }
+
+ public static void main(String argv[]) {
+ VectorInt vi = new VectorInt();
+ vi.add(10);
+ vi.add(20);
+ vi.add(30);
+
+ MyC myc = new MyC();
+ int sum = myc.take_function(template_function_parmConstants.accumulate_integers, vi);
+ if (sum != 60)
+ throw new RuntimeException("Expected sum of 60, got " + sum);
+ }
+}
diff --git a/Examples/test-suite/template_function_parm.i b/Examples/test-suite/template_function_parm.i
new file mode 100644
index 000000000..3dc011b67
--- /dev/null
+++ b/Examples/test-suite/template_function_parm.i
@@ -0,0 +1,28 @@
+%module template_function_parm
+
+%include <std_vector.i>
+
+%{
+#include <numeric>
+static int accumulate_integers(std::vector<int> vi) {
+ int sum = std::accumulate(vi.begin(), vi.end(), 0);
+ return sum;
+}
+%}
+
+%inline %{
+template<typename A>
+struct C {
+ int take_function(int fp(std::vector<int>), std::vector<int> v) {
+ return fp(v);
+ }
+};
+%}
+
+%constant int accumulate_integers(std::vector<int>);
+
+%template(VectorInt) std::vector<int>;
+
+// seg fault #983
+%template(MyC) C<int(std::vector<int>)>;
+