www.digitalmars.com         C & C++   DMDScript  

D.gnu - [Issue 1098] New: symbol collision in d/dmd/expression.c between math.h and port.h

reply d-bugmail puremagic.com writes:

           Summary: symbol collision in d/dmd/expression.c between math.h
                    and port.h
           Product: DGCC aka GDC
           Version: 0.23
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: glue layer
        AssignedTo: dvdfrdmn users.sf.net
        ReportedBy: mpb.mail gmail.com

d/dmd/expression.c includes math.h and port.h in that order.

math.h defines macros for:


port.h then declares a struct with:

    static int isnan(double);
    static int isfinite(double);
    static int isinfinity(double);
    static int signbit(double);

The macros collide with the names in the struct declaration, causing a fatal
compile time error.

A kludge (that seems to work) is to change expression.c to include port.h
*before* math.h.

A clean long term solution is either:

a) make sure no file ever includes both math.h and port.h (this is probably
impractical) or...

b) rename the offending names in port.h (and everywhere that refers to them)

I am not sure if this bug should be fixed in DGCC or upstream in the DMD
compiler sources.



Apr 05 2007
parent d-bugmail puremagic.com writes:

bugzilla digitalmars.com changed:

           What    |Removed                     |Added
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED

------- Comment #1 from bugzilla digitalmars.com  2007-04-20 13:19 -------
Fixed DMD 1.013

Apr 20 2007