From: SourceForge.net <no...@so...> - 2008-04-16 15:00:25
|
Bugs item #1944074, was opened at 2008-04-16 17:00 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1944074&group_id=1645 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Philipp Thomas (pepys) Assigned to: Nobody/Anonymous (nobody) Summary: SWIG_ConvertPtr interface seems broken. Initial Comment: At least for php, ocaml and perl I get warnings from gcc 4.3 for calls to SWIG_ConvertPtr because it expects a void ** as second parameter and thus any pointer is cast to void ** for the call. Now void ** is NOT a generic pointer that may alias any other type (only char * and void * are), so gcc rightfully warns that dereferencing the type-punned pointer will break strict-aliasing rules. The only viable solution I see is making the second parameter of SWIG_ConvertPtr a 'void *' and cast that to void ** inside of SWIG_ConvertPtr. The plus side is that you just change SWIG_ConvertPtr respectively its language specific versions and then simply remove the explicit cast to void ** wherever SWIG_ConvertPtr is called. The downside is that you loose type checking. The alternatives would be either using -fno-strict-aliasing and thus disable some code optimizations or change the call sites to use unions for punning the type, both of which are IMNSHO rather undesireable. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=1944074&group_id=1645 |