D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.

Issue 17637

Summary: Integral promotion rules not being followed
Product: D Reporter: Walter Bright <bugzilla>
Component: dmdAssignee: No Owner <nobody>
Status: RESOLVED DUPLICATE
Severity: normal CC: eyal
Priority: P1
Version: D2
Hardware: All
OS: All
See Also: https://issues.dlang.org/show_bug.cgi?id=16997
https://issues.dlang.org/show_bug.cgi?id=17633
https://issues.dlang.org/show_bug.cgi?id=5132

Description Walter Bright 2017年07月11日 21:43:27 UTC
Johan Engelen reports:
 import core.stdc.stdio;
 void main() {
 uint total = 0;
 void add(int x) { total += x; }
 ubyte popCount() { return 5; }
 add(popCount());
 add(-popCount());
 printf("%u\n", total);	// different result from C
 }
The trouble is that -popCount() negates the ubyte before promoting to int, instead of after.
Comment 1 Walter Bright 2017年07月22日 09:50:33 UTC
16997 has a more succint test case.
*** This issue has been marked as a duplicate of issue 16997 ***

AltStyle によって変換されたページ (->オリジナル) /