<div dir="ltr"><div>to be complete:</div><div>gcc11 complains with:</div><div>In function 'unit_vec2',<br>    inlined from 'attempt_line_merge' at /home/eric/work/wine/dlls/d3dx9_36/mesh.c:5542:5:<br>/home/eric/work/wine/dlls/d3dx9_36/mesh.c:5511:12: warning: 'lastdir' may be used uninitialized [-Wmaybe-uninitialized]<br> 5511 |     return D3DXVec2Normalize(D3DXVec2Subtract(dir, pt2, pt1), dir);<br>      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>In file included from /home/eric/work/wine/include/d3dx9.h:31,<br>                 from /home/eric/work/wine/dlls/d3dx9_36/d3dx9_private.h:32,<br>                 from /home/eric/work/wine/dlls/d3dx9_36/mesh.c:31:<br>/home/eric/work/wine/dlls/d3dx9_36/mesh.c: In function 'attempt_line_merge':<br>/home/eric/work/wine/include/d3dx9math.h:352:21: note: by argument 2 of type 'const D3DXVECTOR2 *' to 'D3DXVec2Normalize' declared here<br>  352 | D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv);<br>      |                     ^~~~~~~~~~~~~~~~~<br>/home/eric/work/wine/dlls/d3dx9_36/mesh.c:5527:25: note: 'lastdir' declared here<br> 5527 |     D3DXVECTOR2 curdir, lastdir;<br>      |                         ^~~~~~~</div><div><br></div><div>as D3DXV2Normalize isn't symetrical in its arguments definition (first arg is const ptr as input, while second arg is ptr as output)</div><div>so gcc11 complains about passing as first arg (being a const ptr) an uninitialized object (it has no way of knowing that both args are aliased)</div><div></div><div><br></div><div>A+<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 28 Sept 2021 at 22:57, Henri Verbeet <<a href="mailto:hverbeet@gmail.com">hverbeet@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, 28 Sept 2021 at 18:50, Eric Pouech <<a href="mailto:eric.pouech@gmail.com" target="_blank">eric.pouech@gmail.com</a>> wrote:<br>
>  static inline D3DXVECTOR2 *unit_vec2(D3DXVECTOR2 *dir, const D3DXVECTOR2 *pt1, const D3DXVECTOR2 *pt2)<br>
>  {<br>
> -    return D3DXVec2Normalize(D3DXVec2Subtract(dir, pt2, pt1), dir);<br>
> +    return D3DXVec2Normalize(dir, D3DXVec2Subtract(dir, pt2, pt1));<br>
>  }<br>
><br>
That's arguably more readable, but note that this doesn't otherwise<br>
make much of a difference; D3DXVec2Subtract() returns the output<br>
vector, so this effectively does "D3DXVec2Normalize(dir, dir);" either<br>
way.<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">-- <br>Eric Pouech</div>