digitalmars.D.bugs - [Issue 13992] New: CTFE produces strange error with += operator on
- via Digitalmars-d-bugs (42/42) Jan 16 2015 https://issues.dlang.org/show_bug.cgi?id=13992
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