[Issue 19402] New: bitshift with long shift amount results in int instead of long

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Nov 15 09:46:31 UTC 2018


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 at puremagic.com
          Reporter: dkorpel at 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.

--


More information about the Digitalmars-d-bugs mailing list