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

> Ralph,
> 
> I don't think I missed the point about the origin of the concern - we just 
> have different view points.
> 
> Jeff indicated that he previously thought the "odd" practice shown in the 
> example was uncommon until he learned is was common in codes at Sandia.  
> Perhaps you and I have interpreted the "impact" differently:
> + From your responses I gather you are concerned only (or primarily) w/ folks 
> at Sandia who work on codes that have the "odd" behavior.

Sigh...no, that isn't accurate. I was only trying to say that the concern was 
raised from that corner for those reasons. And I don't think they would 
consider a code that meets standards as being "odd".


> + On the other hand, I took the Sandia codes as an "existence proof" showing 
> that "really smart people" can still write questionable code at times.  So, I 
> think there could be a non-trivial number of codes developed outside of 
> Sandia that would start generating warnings (possibly MANY of them).

Could be - but again, not many are likely to be using clang, and so they won't 
be affected by this change.

I will now crawl back under my rock - I honestly couldn't care less about this, 
but was trying to explain the concern voiced on the telecon as that person is 
way too busy for this debate.


> 
> 
> -Paul
> 
> On Wed, Oct 31, 2012 at 12:16 PM, Ralph Castain <r...@open-mpi.org> wrote:
> 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
> 
> 
> _______________________________________________
> 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