phobos's circle CI runs a busted version of DMD

Paul Backus snarwin at gmail.com
Wed Jan 11 20:55:33 UTC 2023


On Wednesday, 11 January 2023 at 13:51:43 UTC, jmh530 wrote:
> The problem is the combination with assignment, which is what 
> makes it seem like a bug. According to [1], "the right operand 
> is implicitly converted to the type of the left operand, and 
> assigned to it."
>
> [1] 
> https://dlang.org/spec/expression.html#simple_assignment_expressions

The relevant section of the spec here is the one about 
"Assignment Operator Expressions" [2], which states that

> For arguments of built-in types, assignment operator 
> expressions such as
>
>     a op= b
>
> are semantically equivalent to:
>
>     a = cast(typeof(a))(a op b)

If we rewrite deadalnix's example using this equivalence, we get 
the following code:

     ushort ee = 1028;
     ee = cast(ushort)(ee << 5U);
     ee = cast(ushort)(ee >> 5U);
     writeln(ee);

...which prints 1028. So the behavior of the original example is 
unambiguously a violation of the language spec.

[2] 
https://dlang.org/spec/expression.html#assignment_operator_expressions


More information about the Digitalmars-d mailing list