<div dir="ltr">On Mon, Jan 14, 2013 at 9:02 AM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">The cast macros like PetscBLASIntCast() are not "safe" in that they include two separate statements. Unfortunately, we cannot do better with C89 unless we pass the target as an argument. Regardless, these casts <b>cannot</b> be used in declarations.<div>

<br></div><div><font face="courier new, monospace">PetscBLASInt   one = 1,bn = PetscBLASIntCast(xin->map->n);<br></font></div><div><font face="courier new, monospace">PetscErrorCode ierr;</font></div><div>
<font face="courier new, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">This is invalid C89 because once the macro expands, there is a statement before the next declaration. Furthermore, the check calls SETERRQ in case of failure, so it <b>must</b> be inside a PetscFunctionBegin/PetscFunctionReturn block.</font></div>

<div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Should we change this cast to an inline function (or equivalent macro) so that this usage is more explicit?</font></div>
</div></blockquote><div><br></div><div style>Yes, definitely.</div><div style><br></div><div style>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div><font face="arial, helvetica, sans-serif">Regardless, Satish, can you set up a build --with-64-bit-indices CFLAGS='-std=c89 -pedantic -Wno-long-long'?</font></div>
</div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener
</div></div>