Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] predefined ompi_t types break strict-aliasing rules
From: Number Cruncher (number.cruncher_at_[hidden])
Date: 2009-04-30 08:07:19

Following the discussion about ABI compatibility and type-punning of non
client-visible types, I've attached a patch against 1.3.2 which casts to
an opaque (void *) when OMPI_BUILDING is 0.

This will prevent the compiler from trying to do any strict-aliasing
based optimizations when the definition of the type to cast to is unknown.

When builing Open MPI, the (void *) cast is omitted (because of the
compiler flag "-DOMPI_BUILDING=1") and the code remains as before.

This clears up all warnings for my GCC 4.1 compiler.


>> Ultimately, for internal use, the (void *) is bad, but from client
>> code
>> with no knowledge of your types, it should be mandatory and tells the
>> compiler to make no assumptions about aliasing.
> I think you're convincing me, but I need to think over this a little
> more.
> I wonder if we should have a "smart" #define for MPI_COMM_WORLD that
> puts the (void*) in when compiling user codes, and doesn't include it
> when building OMPI itself (i.e., so that we can get the debugging
> benefit of proper type checking when building OMPI). We do have the
> OMPI_BUILDING macro in opal_config_bottom.h that could be used to
> switch the macro definition. Hrm...