On Jun 3, 2011, at 11:50 AM, Jed Brown wrote: > On Fri, Jun 3, 2011 at 18:34, Barry Smith <bsmith at mcs.anl.gov> wrote: > So it turns out that gcc has an option -Wconversion that warns one about ALL > implicit conversions of sizes it does. This could be used to find all the > places we pass PetscInt to MPI calls that require int but unfortunately it > reports so much other stuff that it seems unusable. For example, see below. > > I think this other stuff can be dealt with. I use -Wconversion in Dohp and my > builds are all clean [1]. It does report some things that really are not > errors (e.g. positive integer literal becomes size_t and then is put back in > int, but should be known at compile time to fit), but it has not been an > inordinate amount of work to keep the builds clean. In the output you showed, > it looks like most of the errors are coming through macros. The macros can > probably be modified to silence them.
Actually aside from the MPI calls it looks like the big problems are: #elif defined(PETSC_HAVE_ISINF) && defined(PETSC_HAVE_ISNAN) && !defined(_GLIBCXX_CMATH) PETSC_STATIC_INLINE PetscErrorCode PetscIsInfOrNanScalar(PetscScalar a) { return isinf(PetscAbsScalar(a)) || isnan(PetscAbsScalar(a)); } which wants floats, not doubles. I tried casting to float and it didn't help so not sure how to fix. And #if defined(PETSC_HAVE_BUILTIN_EXPECT) # define PetscUnlikely(cond) __builtin_expect(!!(cond),0) # define PetscLikely(cond) __builtin_expect(!!(cond),1) which I also didn't know how to fix. Barry > > Clang also has -Wconversion. You could try building with a recent clang to > see if it's as noisy. > > > [1] Except for a couple places where I use VALGRIND_MAKE_MEM_UNDEFINED() > which has a bad conversion buried deep inside it's macro bowels. I work > around this with the annotation > > PragmaGCC(diagnostic ignored "-Wconversion") > > which expands in terms of _Pragma() on systems that support it. Old versions > of GCC don't support pragmas inside of function bodies, so they generate > warnings if -Wconversion is turned on. Everything else works fine. > > This pragma solution to selectively disable -Wconversion works for both GCC > and Clang. It might also work for Intel and any other compilers that claim to > be gcc-compatible-ish. On other compilers, you don't have to worry about > -Wconversion because you just won't turn it on.