From: Stefan Z. <ste...@am...> - 2011-02-19 18:48:57
|
> When -fastdispatch is used, it can produce unreachable code in dispatch functions where one of the overloaded function signatures has varargs. For example, this interface: > > %inline %{ > extern int func (int i, double j); > extern int func (const char *fmt, ...); > %} > > ... produces this dispatch code: > > if (argc >= 1) { > return _wrap_func__SWIG_1(self, args); > } > if (argc == 2) { > return _wrap_func__SWIG_0(self, args); > } > > With this patch, fast dispatch is automatically disabled for any overloaded function that has varargs in one of its signatures. > > > ---------------------------------------------------------------------- > > >Comment By: William Fulton (wsfulton) > Date: 2011-02-18 21:26 > > Message: > Thanks. Instead I've fixed the problem so that varargs can still be used in > overloaded functions with -fastdispatch. Tested with the python test-suite > with -fastdispatch set. > > ---------------------------------------------------------------------- Hmm... looks like your fix will only dispatch to the varargs method if it's called with only the minimum number of arguments, i.e., no variable-length arguments are used. In some sense, that's probably a good idea, because swig doesn't do anything useful with the variable-length arguments. But it is a change in swig's behavior, and it probably ought to be documented somewhere. Stefan |