thanks for the continuing { strict-aliasing sequence-point } discussion
I'm a bit under the weather this week so responses may be sporadic
one accomplishment was to get these gcc implementations installed
gcc version 4.7.0 20120225 (experimental) (GCC)
gcc version 4.7.0 20120302 (prerelease) (GCC)
in order to reproduce the { strict-aliasing sequence-point } warnings
however, both of these implementations have a bug in { -O2 -O3 } optimization
the bug does not manifest for -O1 (all with -g also on)
howto reproduce the bug
on a linux.i386-64 host from $PACKAGEROOT (the dir containing bin package):
mkdir -p arch/linux.i386-64-gcc47/bin tmp
# NOTE: linux.i386-64-gcc47 is up to you
# you can do similarly for any number of intercepts
# we prefer to use the actual hosttype as the prefix
# copy the attached cc intercept script to arch/linux.i386-64-gcc47/bin/cc
chmod +x arch/linux.i386-64-gcc47/bin/cc
# edit arch/linux.i386-64-gcc47/bin/cc to point to the full path of gcc 4.7
bin/package make HOSTTYPE=linux.i386-64-gcc47
A=$PWD/arch/linux.i386-64-gcc47
cd tmp
# copy the attached sfset.c to .
arch/linux.i386-64-gcc47/bin/cc -I$A/include/ast -L$A/lib -o sfset sfset.c -last
./sfset sfset.c
a working version of the program should produce
00000003 00000003 3
00000013 00000023 19
00000853 00004123 2131
00000853 00004123 2131
00000013 00000023 19
the -O2 or greater version of this program has been observed to produce
00000003 00000003 3
00000853 00004123 2131
00000853 00004123 2131
00000013 00000023 19
00000013 00000023 19
since its the result of a bug the buggy output may differ for your
implementation
run gdb with a breakpoint on sfset to see the problem
I'm not a compiler guru but it looks like the optimizer sets up an equivalence
for
oflags = f->flags;
at line 65 and fails to undo the equivalence, leading to the return at line 98
being shunted to the return at line 60, even though f->flags is clearly modified
in the interim
{ dgk kpv gsf } don't have the time to deal with filing bug reports for these
kind of problems
that's why we have :NOOPTIMIZE: assertions peppered throughout the build
if anyone would like to pursue this through the proper gcc channels please have
at it
this bug was caught by 2 strange ksh93 regressions
compiling src/lib/libast/sfio/sfset.c with -O* off eliminates the regressions
I'm adding this line to src/lib/libast/Makefile until the issue is resolved
"linux.i386-64*":NOOPTIMIZE: sfset.c
so do any bug testing on the current release
because the default build will bypass the bug starting with the next release
cc
Description: application/sh
sfset.c
Description: application/cc
_______________________________________________ ast-developers mailing list [email protected] https://mailman.research.att.com/mailman/listinfo/ast-developers
