[Issue 4323] New: std.demangle incorrectly handles template floating point numbers

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Jun 15 11:38:05 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4323

           Summary: std.demangle incorrectly handles template floating
                    point numbers
           Product: D
           Version: D1 & D2
          Platform: Other
        OS/Version: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody at puremagic.com
        ReportedBy: doob at me.com


--- Comment #0 from Jacob Carlborg <doob at me.com> 2010-06-15 11:38:04 PDT ---
According to the ABI spec the mangled form of template floating point numbers
looks like this:

Value:
    e HexFloat

HexFloat:
    N HexDigits P Exponent
    HexDigits P Exponent

But std.demnalge doesn't seem to handle the exponent, it doesn't handle the
'P'. The unittests that test this are also incorrect. The first one looks like
this:

mangled form:
_D4test58__T9factorialVde67666666666666860140VG5aa5_68656c6c6fVPvnZ9factorialf

demangled form:
float test.factorial!(double 4.2, char[5] \"hello\"c, void* null).factorial

As far as I can see the mangled form doesn't follow the spec or what dmd
produces.

module test;

float factorial (T...) ()
{
    return float.init;
}

void main ()
{
    factorial!(4.2, "hello", null);
}

Compiling the above code and running the "nm" command on the resulting binary
shows that "factorial" with the above given values is mangled as:
_D4test57__T9factorialVde8666666666666667PN1VAyaa5_68656c6c6fVPvnZ9factorialFZf

After all the 6s the is a 7 and then a P. In the std.demangle unittest the P is
missing, also at the end of the mangled name is a Z which is missing in the
unittest.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list