The decNumber package in GCC provides support for decimal floating point arithmetic in the compiler and, for the DPD format, in libgcc's runtime support for decimal float. Some of the code in decNumber violates C's strict-aliasing rules and has resulted in warnings for quite some time. Some of that code has different results since the addition of patch r136695, leading to the failure of test gcc.dg/dfp/convert-int-max.c. The code in question has undefined behavior so I can't say that it is miscompiled, only that the results are different. I'm testing a patch that quiets all of the warnings about dereferencing type-punned pointers with very few changes to the decNumber code, mostly changes to data types and access macros. This PR is to keep track of the change because the decNumber code from GCC is also used by the GDB project and a branch in EGLIBC.
Branches are likely affected as well. There we might consider just building the affected files with -fno-strict-aliasing?
The code in question is in the 4.3 branch but not 4.2. The changes are very minimal, so the patch is probably appropriate for the 4.3 branch. I had already planned to ask to put it there as well as mainline.
Subject: Bug 37897 Author: janis Date: Mon Oct 27 16:45:40 2008 New Revision: 141386 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=141386 Log: PR other/37897 * decDouble.h (decDouble): Replace struct with union accessible by more types. * decSingle.h (decSingle): Ditto. * decQuad.h (decQuad): Ditto. * decNumberLocal.h (DFWORD, DFBYTE, DFWWORD): access decFloat via new members. * decBasic.c (decFloatCompareTotal): Avoid type-pun violation. (decNumberCompare): Ditto. Modified: trunk/libdecnumber/ChangeLog trunk/libdecnumber/decBasic.c trunk/libdecnumber/decDouble.h trunk/libdecnumber/decNumberLocal.h trunk/libdecnumber/decQuad.h trunk/libdecnumber/decSingle.h
Subject: Bug 37897 Author: janis Date: Mon Oct 27 18:16:20 2008 New Revision: 141389 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=141389 Log: PR other/37897 * decDouble.h (decDouble): Replace struct with union accessible by more types. * decSingle.h (decSingle): Ditto. * decQuad.h (decQuad): Ditto. * decNumberLocal.h (DFWORD, DFBYTE, DFWWORD): access decFloat via new members. * decBasic.c (decFloatCompareTotal): Avoid type-pun violation. (decNumberCompare): Ditto. Modified: branches/gcc-4_3-branch/libdecnumber/ChangeLog branches/gcc-4_3-branch/libdecnumber/decBasic.c branches/gcc-4_3-branch/libdecnumber/decDouble.h branches/gcc-4_3-branch/libdecnumber/decNumberLocal.h branches/gcc-4_3-branch/libdecnumber/decQuad.h branches/gcc-4_3-branch/libdecnumber/decSingle.h
Fixed in mainline and 4.3 branch.