Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] PGI 8.0-4 doesn't like ompi/mca/op/op.h
From: Rolf Vandevaart (Rolf.Vandevaart_at_[hidden])
Date: 2009-03-13 17:27:29

On 03/13/09 16:40, Jeff Squyres wrote:
> On Mar 13, 2009, at 4:37 PM, Mostyn Lewis wrote:
>> >From config.log
>> configure:21522: checking for C/C++ restrict keyword
>> configure:21558: pgcc -c -DNDEBUG -fast -Msignextend -tp p7-64
>> conftest.c >&5
>> configure:21564: $? = 0
>> configure:21582: result: restrict
>> So you only check using pgcc (not pgCC)?
> The AC_C_RESTRICT test only checks the C compiler, yet. It's an
> Autoconf-builtin test; we didn't write it.
> Odd that you get "restrict" and I get "__restrict". Hrm.
> Well, I suppose that one solution might be to disable those prototypes
> in the op.h header file when they're included in (that's a
> source file in the ompi_info executable; it shouldn't need the specific
> MPI_Op callback prototypes). Fortunately, we have very little C++ code
> in OMPI, so this isn't a huge issue (C++ is only used for the MPI C++
> bindings -- of course -- and in some of the command line executables).
> Let me see what I can cook up, and then let me see if I can convince
> George that it's the correct answer. ;-)

Please ignore if I am way off base here but....

Isn't this problem similar to what happens with Sun Studio? For Sun
Studio, the C compiler recently added support for some of the restrict
variants. However, the Sun Studio C++ compiler does not support them.
This is handled by autoconf via a workaround targetted specifically at
Sun Studio. Essentially, if you are Sun Studio C++, then #undef any
restricts. This is from lib/autoconf/c.m4

#undef restrict
/* Work around a bug in Sun C++: it does not support _Restrict or
  __restrict__, even though the corresponding Sun C compiler ends up with
  "#define restrict _Restrict" or "#define restrict __restrict__" in the
  previous line. Perhaps some future version of Sun C++ will work with
  restrict; if so, hopefully it defines __RESTRICT like Sun C does. */
#if defined __SUNPRO_CC && !defined __RESTRICT
# define _Restrict
# define __restrict__

We also had to make a change to opal_config_bottom.h so we could work
with older versions of autoconf that did not have the restrict workaround.

 From opal_config_bottom.h:
  * The following is a workaround for a workaround in autoconf for the
  * Sun Studio C++ compiler. The Sun Studio C++ compiler does not
  * support restrict whereas the Sun Studio C compiler does. Initially,
  * Sun Studio C only supported _Restrict, but later version started
  * supporting __restrict__ also. Currently, autoconf handles turning
  * off _Restrict but not __restrict__ for the Sun Studio C++ compiler.
  * Therefore, we are handling it here. When autoconf gets fixed, this
  * code can be removed.
#if defined __SUNPRO_CC && !defined __RESTRICT
# define __restrict__