Understood - I also do my development on a Mac. You missed my point entirely - 
the concern was raised by a member from Sandia based on not generating warnings 
for their users. Those users are NOT on a Mac - they are building on the head 
node of the HPC cluster.

If we want to raise the issue of what is best for developers, then I tend to 
err on the side of generating warnings. However, those warnings must not appear 
for users when the code is in fact valid.

The fact that some compilers do that is irrelevant - we are talking about what 
we want OMPI to do.


On Oct 31, 2012, at 12:11 PM, Paul Hargrove <phhargr...@lbl.gov> wrote:

> Ralph,
> 
> I work at a National Lab, and like many of my peers I develop/prototype codes 
> on my desktop and/or laptop.  So, I think the default behavior of mpicc on a 
> Clang-based Mac is entirely relevant.
> 
> FWIW:
> I agree w/ Jeff that these datatype checking warnings "feel" like a candidate 
> for "-Wall" (or "-Wextra"), rather than enabled by default.
> 
> -Paul
> 
> 
> On Wed, Oct 31, 2012 at 12:04 PM, Ralph Castain <r...@open-mpi.org> wrote:
> Understood, but also remember that the national labs don't have Mac clusters 
> - and so they couldn't care less about Clang. The concerns over these changes 
> were from the national labs, so my point was that this discussion may all be 
> irrelevant.
> 
> 
> On Oct 31, 2012, at 11:47 AM, Paul Hargrove <phhargr...@lbl.gov> wrote:
> 
>> Note that with Apple's latest versions of Xcode (4.2 and higher, IIRC) Clang 
>> is now the default C compiler.  I am told that Clang is the ONLY bundled 
>> compiler for OSX 10.8 (Mountain Lion) unless you take extra steps to install 
>> gcc (which is actually llvm-gcc and cross-compiles for OSX 10.7).
>> 
>> So, Clang *is* gaining some "market share", though not yet in major HPC 
>> systems.
>> 
>> -Paul
>> 
>> 
>> On Wed, Oct 31, 2012 at 11:40 AM, Ralph Castain <r...@open-mpi.org> wrote:
>> If it's only on for Clang, I very much doubt anyone will care - I'm unaware 
>> of any of our users that currently utilize that compiler, and certainly not 
>> on the clusters in the national labs (gcc, Intel, etc. - but I've never seen 
>> them use Clang).
>> 
>> Not saying anything negative about Clang - just noting it isn't much used in 
>> our current community that I've heard.
>> 
>> 
>> On Oct 31, 2012, at 11:19 AM, Dmitri Gribenko <griboz...@gmail.com> wrote:
>> 
>> > On Wed, Oct 31, 2012 at 5:04 PM, Jeff Squyres <jsquy...@cisco.com> wrote:
>> >> On Oct 31, 2012, at 9:38 AM, Dmitri Gribenko wrote:
>> >>
>> >>>> The rationale here is that correct MPI applications should not need to 
>> >>>> add any extra compiler files to compile without warnings.
>> >>>
>> >>> I would disagree with this.  Compiler warnings are most useful when
>> >>> they are on by default.  Only a few developers will turn on a warning
>> >>> because warnings are hard to discover and enabling a warning requires
>> >>> an explicit action from the developer.
>> >>
>> >> Understood, but:
>> >>
>> >> a) MPI explicitly allows this kind of deliberate mismatch.  It does not 
>> >> make sense to warn for things that are correct in MPI.
>> >
>> > I don't think it is MPI.  It is the C standard that allows one to
>> > store any pointer in void* and char*.  But C standard also considers
>> > lots of other weird things to be valid, see below.
>> >
>> >> b) Warnings are significantly less useful if the user looks at them and 
>> >> says, "the compiler is wrong; I know that MPI says that this deliberate 
>> >> mismatch in my code is ok."
>> >
>> > Well, one can also argue that since the following is valid C, the
>> > warning in question should not be implemented at all:
>> >
>> > long *b = malloc(sizeof(int));
>> > MPI_Recv(b, 1, MPI_INT, ...);
>> >
>> > But this code is clearly badly written, so we are left with a question
>> > about where to draw the line.
>> >
>> >> c) as such, these warnings are really only useful for the application 
>> >> where type/MPI_Datatype matching is expected/desired.
>> >
>> > Compilers already warn about valid C code.  Silencing many warnings
>> > relies on conventions that are derived from best practices of being
>> > explicit about something unusual.  For example:
>> >
>> > $ cat /tmp/aaa.c
>> > void foo(void *a) {
>> >  for(int i = a; i < 10; i++)
>> >  {
>> >    if(i = 5)
>> >      return;
>> >  }
>> > }
>> > $ clang -fsyntax-only -std=c99 /tmp/aaa.c
>> > /tmp/aaa.c:2:11: warning: incompatible pointer to integer conversion
>> > initializing 'int' with an expression of type 'void *'
>> > [-Wint-conversion]
>> >  for(int i = a; i < 10; i++)
>> >          ^   ~
>> > /tmp/aaa.c:4:10: warning: using the result of an assignment as a
>> > condition without parentheses [-Wparentheses]
>> >    if(i = 5)
>> >       ~~^~~
>> > /tmp/aaa.c:4:10: note: place parentheses around the assignment to
>> > silence this warning
>> >    if(i = 5)
>> >         ^
>> >       (    )
>> > /tmp/aaa.c:4:10: note: use '==' to turn this assignment into an
>> > equality comparison
>> >    if(i = 5)
>> >         ^
>> >         ==
>> > 2 warnings generated.
>> >
>> > According to C standard this is valid C code, but clang emits two
>> > warnings on this.
>> >
>> >> Can these warnings be enabled as part of the warnings rollup -Wall 
>> >> option?  That would be an easy way to find/enable these warnings.
>> >
>> > IIRC, -Wall warning set is frozen in clang.  -Wall is misleading in
>> > that it does not turn on all warnings implemented in the compiler.
>> > Clang has -Weverything to really turn on all warnings.  But
>> > -Weverything is very noisy (by design, not to be fixed) unless one
>> > also turns off all warnings that are not interesting for the project
>> > with -Wno-foo.
>> >
>> > I don't think it is possible to disable this warning by default
>> > because off-by-default warnings are discouraged in Clang.  There is no
>> > formal policy, but the rule of thumb is: either make the warning good
>> > enough for everyone or don't implement it; if some particular app does
>> > something strange, it can disable this warning.
>> >
>> >>> The pattern you described is an important one, but most MPI
>> >>> applications will have matching buffer types/type tags.
>> >>
>> >> I agree that most applications *probably* don't do this.  But significant 
>> >> developer in this community (i.e., Sandia) has at least multiple 
>> >> applications that *do* do it.  I can't ignore that.  :-(
>> >
>> > Here are a few approaches to solving this in order of preference:
>> >
>> > 0. Is this really a concern for Sandia?  (I.e., do they target Clang?)
>> >
>> > 1. Ask the developer to silence the warning with a cast to 'void *' or
>> > -Wno-type-safety.  Rationale: compilers already do warn about valid
>> > but suspicious code.
>> >
>> > 2. Turn off checking for char* just like for void*.  Rationale: C
>> > standard allows char* to alias a pointer of any type.  Note that char*
>> > is special in this regard (strict aliasing rules).
>> >
>> > 3. Turn off annotations by default in mpi.h.
>> >
>> > Dmitri
>> >
>> > --
>> > main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
>> > (j){printf("%d\n",i);}}} /*Dmitri Gribenko <griboz...@gmail.com>*/
>> > _______________________________________________
>> > devel mailing list
>> > de...@open-mpi.org
>> > http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> 
>> 
>> _______________________________________________
>> devel mailing list
>> de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>> 
>> 
>> 
>> -- 
>> Paul H. Hargrove                          phhargr...@lbl.gov
>> Future Technologies Group
>> Computer and Data Sciences Department     Tel: +1-510-495-2352
>> Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900
>> 
>> _______________________________________________
>> devel mailing list
>> de...@open-mpi.org
>> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
> 
> 
> 
> -- 
> Paul H. Hargrove                          phhargr...@lbl.gov
> Future Technologies Group
> Computer and Data Sciences Department     Tel: +1-510-495-2352
> Lawrence Berkeley National Laboratory     Fax: +1-510-486-6900
> 
> _______________________________________________
> devel mailing list
> de...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/devel

Reply via email to