digitalmars.D.bugs - [Issue 19402] New: bitshift with long shift amount results in int
- d-bugmail puremagic.com (38/38) Nov 15 2018 https://issues.dlang.org/show_bug.cgi?id=19402
https://issues.dlang.org/show_bug.cgi?id=19402 Issue ID: 19402 Summary: bitshift with long shift amount results in int instead of long Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: dkorpel live.nl https://dlang.org/spec/expression.html#shift_expressions "If the operands are of integral types, they undergo the Usual Arithmetic Conversions, and then are brought to a common type using the Usual Arithmetic Conversions." https://dlang.org/spec/type.html#usual-arithmetic-conversions "If both are signed or both are unsigned, the smaller type is converted to the larger." Yet: ``` long x = 1L; auto a = 1 << x; ``` Compiles to: (-vcg-ast) ``` long x = 1L; int a = 1 << cast(int)x; ``` I expected this: ``` long x = 1L; long a = 1L << x; ``` Which caused a nasty bug in my program. --
Nov 15 2018