digitalmars.D.bugs - [Issue 4169] New: building dmd with a modern gcc produces a buggy compiler
- d-bugmail puremagic.com (38/38) May 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (27/27) May 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (8/8) May 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (10/10) May 15 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (11/11) May 25 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (35/35) May 25 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
- d-bugmail puremagic.com (11/11) May 26 2010 http://d.puremagic.com/issues/show_bug.cgi?id=4169
http://d.puremagic.com/issues/show_bug.cgi?id=4169
Summary: building dmd with a modern gcc produces a buggy
compiler
Product: D
Version: unspecified
Platform: Other
OS/Version: Linux
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: braddr puremagic.com
---
modern versions of DMD build with strict alias rules. Somewhere in DMD the
rules are violated sufficiently to produce a compiler that doesn't work
correctly enough to past the test suite. A mostly (but possibly not
completely) reduced test case:
----
import std.math;
void foo()
{
float f[1];
for (int i = 0; i < f.length; i++)
assert(isnan(f[i]));
}
int main()
{
foo();
return 0;
}
----
With dmd as shipped, the test passes. With dmd build with g++ 4.4, it fails.
Adding -fno-strict-aliasing to the compilation flags for dmd produces a
compiler that works (at least well enough to pass the above test).
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bugzilla digitalmars.com
19:39:10 PDT ---
Wikipedia says: "To enable such optimizations in a predictable manner, the ISO
standard for the C programming language (including its newer C99 edition)
specifies that it is illegal (with some exceptions) for pointers of different
types to reference the same memory location. This rule, known as "strict
aliasing", allows impressive increases in performance[citation needed], but has
been known to break some otherwise valid code. Several software projects
intentionally violate this portion of the C99 standard. For example, Python 2.x
did so to implement reference counting,[1] and required changes to the basic
object structs in Python 3 to enable this optimisation. The Linux kernel does
this because strict aliasing causes problems with optimization of inlined
code.[2] In such cases, when compiled with gcc, the option -fno-strict-aliasing
is invoked to prevent unwanted or invalid optimizations that could produce
incorrect code."
The compiler does do a lot of aliasing, so I don't know if this is a gcc bug or
a dmd bug. The way to track it down is to compile half of dmd with
no-strict-aliasing, the other half without, see if it still fails/succeeds.
This isolates it down to which half has the problem. Rinse, repeat, until the
offending source file is isolated.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169 --- One better, for whomever gets to this one first, add -Wstrict-aliasing and check to see if the reported problems are sufficient to fix it. gcc won't report _every_ violation, but it does report some meaningful subset of them. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 09 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169 --- Created an attachment (id=631) fix all aliasing warnings found by gcc 4.4.3 This change sets fixes all the aliasing warnings found by gcc 4.4.3 with -Wstrict-aliasing. The dmd test suite passes now, where is it didn't before unless built with -fno-strict-aliasing. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
May 15 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
15:09:04 PDT ---
http://www.dsource.org/projects/dmd/changeset/501
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 25 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169
Brad Roberts <braddr puremagic.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |REOPENED
Resolution|FIXED |
---
Looks like you missed one file's changes:
diff --git a/src/mtype.c b/src/mtype.c
--- a/src/mtype.c
+++ b/src/mtype.c
-2832,14 +2832,17 Expression *TypeBasic::defaultInit(Loc loc)
* so that uninitialised variables can be
* detected even if exceptions are disabled.
*/
- unsigned short snan[8] = { 0, 0, 0, 0xA000, 0x7FFF };
+ union {
+ unsigned short us[8];
+ long double ld;
+ } snan = {{ 0, 0, 0, 0xA000, 0x7FFF }};
/*
* Although long doubles are 10 bytes long, some
* C ABIs pad them out to 12 or even 16 bytes, so
* leave enough space in the snan array.
*/
assert(REALSIZE <= sizeof(snan));
- d_float80 fvalue = *(long double*)snan;
+ d_float80 fvalue = snan.ld;
#endif
#if LOGDEFAULTINIT
The rest of the compiler builds w/o aliasing warnings on my box from tip of svn
now.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 25 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4169
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|REOPENED |RESOLVED
Resolution| |FIXED
12:47:48 PDT ---
http://www.dsource.org/projects/dmd/changeset/502
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
May 26 2010









d-bugmail puremagic.com 