DMD different compiler behaviour on Linux and Windows

Patrick Schluter Patrick.Schluter at bbox.fr
Thu Apr 25 20:26:19 UTC 2019


On Thursday, 25 April 2019 at 20:18:28 UTC, Zans wrote:
> import std.stdio;
>
> void main()
> {
>     char[] mychars;
>     mychars ~= 'a';
>     long index = 0L;
>     writeln(mychars[index]);
> }
>
> Why would the code above compile perfectly on Linux (Ubuntu 
> 16.04), however it would produce the following error on Windows 
> 10:
>
> source\app.d(8,21): Error: cannot implicitly convert expression 
> index of type long to uint
>
> On both operating systems DMD version is 2.085.0.

The issue here is not Windows vs Linux but 32 bits vs 64 bits.
On 32 bits architectures size_t is defined as uint, long being 64 
bits long, conversion from long to uint is a truncating cast 
which are not allowed implicitely in D.
It is unfortunate that the D compiler on Windows is still 
delivered by default as a 32 bits binary and generating 32 bits 
code. I think the next release will start to deliver the compiler 
as 64 bits binary and generating 64 bits code.



More information about the Digitalmars-d-learn mailing list