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 *cannot* be used in declarations.
PetscBLASInt one = 1,bn = PetscBLASIntCast(xin->map->n); PetscErrorCode ierr; 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 *must* be inside a PetscFunctionBegin/PetscFunctionReturn block. Should we change this cast to an inline function (or equivalent macro) so that this usage is more explicit? Regardless, Satish, can you set up a build --with-64-bit-indices CFLAGS='-std=c89 -pedantic -Wno-long-long'? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20130114/837822e4/attachment.html>