www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 13992] New: CTFE produces strange error with += operator on

https://issues.dlang.org/show_bug.cgi?id=13992

          Issue ID: 13992
           Summary: CTFE produces strange error with += operator on
                    integer type
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: regression
          Priority: P1
         Component: DMD
          Assignee: nobody puremagic.com
          Reporter: hsteoh quickfur.ath.cx

Code:
------
void addListener() {
        void delegate() tmp;
        enum typehash = hashOf(tmp.mangleof.ptr, tmp.mangleof.length);
        //hash_t typehash = hashOf(tmp.mangleof.ptr, tmp.mangleof.length);
}

 trusted hashOf( const void* buf, size_t len, hash_t seed = 0 )
{
        auto data = cast(const (ubyte)*) buf;
        auto hash = seed;
        data += 2 ;  // <---- this is line 11
        hash += *data;
        return hash;
}
------

Tested compiler: dmd git HEAD.

Compiler output:
------
eventloop.d(11): Error: integral constant must be scalar type, not const(void)
------

Note that if the "enum typehash" line is commented out and the following line
uncommented, it works fine. This suggests that it's a CTFE issue. Both the
"data += 2" and "hash += *data" lines are necessary; deleting either one makes
the error message go away.

This code is reduced from a larger failing codebase that used to compile fine
with earlier versions of dmd.

--
Jan 16 2015