betterC and noboundscheck
Joakim
dlang at joakim.fea.st
Wed Nov 22 16:57:10 UTC 2017
On Wednesday, 22 November 2017 at 15:10:40 UTC, Oleg B wrote:
> Hello. I try compile simple example:
>
> import core.stdc.stdio;
> import std.algorithm : min;
>
> extern (C) void main()
> {
> char[256] buf;
> buf[] = '\0';
>
> auto str = "hello world";
> auto ln = min(buf.length, str.length);
> buf[0..ln] = str[0..ln];
> printf("%s\n", buf.ptr);
> }
>
> rdmd -betterC bettercarray2.d
>
> and get error:
>
> /tmp/.rdmd-1000/rdmd-bettercarray2.d-435C14EC3DAF09FFABF8ED6919B624C1/objs/bettercarray2.o: In function `main':
> bettercarray2.d:(.text.main[main]+0xbc): undefined reference to
> `_d_arraycopy'
> collect2: error: ld returned 1 exit status
> Error: linker exited with status 1
>
> If I understand correctly _d_arraycopy is part of druntime and
> it check bounds of array access.
>
> If I add -noboundscheck flag all works fine.
>
> dmd version is 2.076.1
>
> Why -betterC flag not 'include' -noboundscheck flag?
> It's bug or in some cases it's useful?
betterC is a new feature that's still being worked on and still
has holes in it:
https://github.com/dlang/dmd/pull/7151
I suggest you open an issue for it on bugzilla, as this sounds
like either a hole or at least something that should be
documented better:
https://issues.dlang.org
More information about the Digitalmars-d-learn
mailing list