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.


Reply via email to