Bug 37897 - decNumber functions break strict-aliasing rules
Summary: decNumber functions break strict-aliasing rules
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: other (show other bugs)
Version: 4.4.0
: P3 normal
Target Milestone: ---
Assignee: Janis Johnson
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-10-22 22:37 UTC by Janis Johnson
Modified: 2008-10-31 19:49 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2008-10-22 22:38:06


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Janis Johnson 2008-10-22 22:37:29 UTC
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.
Comment 1 Richard Biener 2008-10-23 10:10:51 UTC
Branches are likely affected as well.  There we might consider just building
the affected files with -fno-strict-aliasing?
Comment 2 Janis Johnson 2008-10-23 16:16:26 UTC
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.
Comment 3 Janis Johnson 2008-10-27 16:47:02 UTC
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

Comment 4 Janis Johnson 2008-10-27 18:17:46 UTC
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

Comment 5 Janis Johnson 2008-10-31 19:49:38 UTC
Fixed in mainline and 4.3 branch.