March 06, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2710

           Summary: dmd2/src/druntime/src/../import/std/intrinsic.di misses
                    pure and nothrow in signatures
           Product: D
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: baryluk@smp.if.uj.edu.pl


When compiling druntime with dmd2, gc/bacis/gcbits.d calls std.intrinsic.btr, which signatures is in ../import/std/intrinsic.di compiler don't emit proper code.

Considering that file src/dmd/toir.c have on line 380 signature 9intrinsic3btrFNbPkkZi and that inspecting object file of gcbits.o I concluded that D compiler isn't emiting proper code because intrinsic.di had missing "nothrow and pure" keywords in few places.

Druntime compiles (because there can be unresolved symbls), but then compiling
phobos' unittest fails (because it links against everything and fails to find
9intrinsic3btrFPkkZi (which is for DMD1, and defined nowhere).

Solution, edit ../import/std/intrinsic.di and ensure there are this signatures (as in phobos sources).

nothrow:

pure nothrow int bsf( uint v );
pure nothrow int bsr( uint v );
pure nothrow int bt( const uint* p, uint bitnum );
pure uint bswap( uint v );


I also concluded that intrinsic.di wasn't generated automatically from phobos'
sources (-H switch), because dmd is generating proper (and much more compacted)
version of code. This is rationall because there is no source files for it
(intrinsic.d in phobos contains only declarations, but proper ones).


-- 

March 06, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2710


baryluk@smp.if.uj.edu.pl changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED
            Summary|dmd2/src/druntime/src/../imp|dmd2/src/druntime/src/../imp
                   |ort/std/intrinsic.di misses |ort/std/intrinsic.di misses
                   |pure and nothrow in         |pure and nothrow in
                   |signatures                  |signatures




------- Comment #1 from baryluk@smp.if.uj.edu.pl  2009-03-06 10:56 -------
Ok, I think druntime version r107 solved this problem.


--