summaryrefslogtreecommitdiff
path: root/Lib/d
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2017-12-13 20:47:05 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2017-12-14 07:00:42 +0000
commite86c881a70333af96694dae4310f1ba48e71dd64 (patch)
tree954d5a93e7de0cbed6f7ceb07bece6a4971b10ad /Lib/d
parent224bb9e0232a219b7cefd23472b592b39e277f46 (diff)
downloadswig-e86c881a70333af96694dae4310f1ba48e71dd64.tar.gz
Fix directorout typemaps which were causing undefined behaviour when returning pointers by reference.
Closes #1167
Diffstat (limited to 'Lib/d')
-rw-r--r--Lib/d/dswigtype.swg4
1 files changed, 3 insertions, 1 deletions
diff --git a/Lib/d/dswigtype.swg b/Lib/d/dswigtype.swg
index 19b700052..f0d604b6f 100644
--- a/Lib/d/dswigtype.swg
+++ b/Lib/d/dswigtype.swg
@@ -185,7 +185,9 @@
%typemap(directorin) SWIGTYPE *const&
"$input = (void *) $1;"
%typemap(directorout, warning=SWIGWARN_TYPEMAP_DIRECTOROUT_PTR_MSG) SWIGTYPE *const&
- "$result = ($1_ltype)&$input;"
+%{ static $*1_ltype swig_temp;
+ swig_temp = ($*1_ltype)$input;
+ $result = &swig_temp; %}
%typemap(ddirectorin,
nativepointer="cast($dtype)$winput"
) SWIGTYPE *const& "($winput is null) ? null : new $*dclassname($winput, false)"