On Tue, Jun 9, 2015 at 12:42 PM, Gilles Gouaillardet <gilles.gouaillar...@gmail.com> wrote: > This is a follow-up on a discussion about OpenMPI that started at > http://www.open-mpi.org/community/lists/users/2015/06/27039.php > and continued at https://github.com/open-mpi/ompi/pull/625 > > The attached test program does not produce correct results with gcc > 4.9.2 and gcc 5.1.0 with -O1 or greater (gcc 4.8.7 is safe) > > At first glance, it seems gcc is not aware a wrapper can be added to > posix_memalign and hence posix_memalign can have some side effects > such as updating user global variables.
mark the global variable as volatile. Thanks, Andrew > > > A workaround is to declare the global variable as volatile. > > The expected output of this test program is : > global = 0 > changed ! > global = 1 > > > here are the full outputs with gcc 4.9.2 and 5.1.0 and from O0 to O3 > > $ gcc --version ; for i in 0 1 2 3 ; do echo ; echo opt = O$i ; gcc -o > test.O$i -Wno-deprecated-declarations -O$i test.c ; ./test.O$i ; done > gcc (GCC) 4.9.2 > Copyright (C) 2014 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > > opt = O0 > global = 0 > changed ! > global = 1 > > opt = O1 > global = 0 > global = 1 > > opt = O2 > global = 0 > global = 0 > > opt = O3 > global = 0 > global = 0 > > > $ gcc --version ; for i in 0 1 2 3 ; do echo ; echo opt = O$i ; gcc -o > test.O$i -Wno-deprecated-declarations -O$i test.c ; ./test.O$i ; done > gcc (GCC) 5.1.0 > Copyright (C) 2015 Free Software Foundation, Inc. > This is free software; see the source for copying conditions. There is NO > warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > > > opt = O0 > global = 0 > changed ! > global = 1 > > opt = O1 > global = 0 > global = 0 > > opt = O2 > global = 0 > global = 0 > > opt = O3 > global = 0 > global = 0 > > > please note the different behaviour with O1 between gcc 4.9.2 and gcc 5.1.0 > > > Could you please comment on this issue ? > - is this a bug ? > - is this a "feature" ? (e.g. a known to be aggressive optimization > that explicitly requires the global variable is declared as volatile) > > > Thanks and regards, > > Gilles