[Issue 18926] New: Template-related intpromote deprecation message spam
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu May 31 11:25:57 UTC 2018
https://issues.dlang.org/show_bug.cgi?id=18926
Issue ID: 18926
Summary: Template-related intpromote deprecation message spam
Product: D
Version: D2
Hardware: x86_64
URL: http://dlang.org/
OS: Mac OS X
Status: NEW
Severity: normal
Priority: P3
Component: dmd
Assignee: nobody at puremagic.com
Reporter: meapineapple at gmail.com
I downloaded a newer version of DMD and when I went to compile some code, I got
a LOT of intpromote deprecation errors. Many of them repeated for the same
line, and in one case it was repeated 300+ times for a single line of code.
This is probably because this particular function gets a lot of different
template parameters when running unit tests.
/Users/pineapple/Dropbox/Projects/mach.d/mach/math/bits/inject.d(112):
Deprecation: integral promotion not done for -cast(ubyte)bit, use
'-transition=intpromote' switch or -cast(int)(cast(ubyte)bit)
This was the function causing the error, due to `-(cast(ubyte) bit)`
/// Inject bit into a value where the bit offset is known at compile time.
/// When the `assumezero` template argument is true, the operation is able
/// to be optimized by assuming the targeted bits are all initialized to 0.
auto injectbit(uint offset, bool assumezero = false, T)(
T value, in bool bit
) if(
offset < T.sizeof * 8
){
enum byteoffset = offset / 8;
enum bitoffset = offset % 8;
T target = value;
auto ptr = cast(ubyte*) &target + byteoffset;
static if(assumezero){
*ptr |= cast(ubyte) bit << bitoffset;
}else{
*ptr ^= (-(cast(ubyte) bit) ^ *ptr) & (1 << bitoffset);
}
return target;
}
--
More information about the Digitalmars-d-bugs
mailing list