GDC doesn't catch this ambiguity
Mike
none at none.com
Fri Jan 10 17:13:09 PST 2014
On Saturday, 11 January 2014 at 00:45:20 UTC, Mike wrote:
> In the following code:
>
> module trace;
>
> private nothrow pure void SendCommand(in int command, in void*
> message)
> {
> asm
> {
> "mov r0, %[cmd];
> mov r1, %[msg];
> bkpt #0xAB"
> :
> : [cmd] "r" command, [msg] "r" message
> : "r0", "r1";
> };
> }
>
> private static nothrow pure void SendMessage(in void* ptr, in
> uint length)
> {
> // Create semihosting message message
> uint[3] message =
> [
> 2, // stderr
> cast(uint)ptr, // ptr to string
> length // size of string
> ];
>
> // Send semihosting command
> SendCommand(0x05, &message);
> }
>
> struct Trace
> {
> static nothrow pure void Write(in string text)
> {
> SendMessage(text.ptr, text.length);
> }
>
> static nothrow pure void Write(uint value)
> {
> char[32] buffer;
>
> char* p = buffer.ptr + 31;
> do
> {
> p--;
> *p = '0' + (value % 10);
> value /= 10;
> } while(value > 0);
>
> SendMessage(p, (buffer.ptr + 31) - p);
> }
>
> static nothrow pure void Write(A...)(A a)
> {
> foreach(t; a)
> {
> Write(t);
> }
> }
>
> static nothrow pure void WriteLine(A...)(A a)
> {
> foreach(t; a)
> {
> Write(t);
> }
> Write("\r\n");
> }
> }
>
> GDC doesn't catch the ambiguity between...
> static nothrow pure void Write(A...)(A a)
> and
> static nothrow pure void Write(in string text)
> ... but LDC does.
>
> Who's right?
LDC
the LLVM D compiler (0.12.1):
based on DMD v2.063.2 and LLVM 3.3
GDC
arm-none-eabi-gdc (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
Also, is there a way to know which version of DMD GDC is based on?
More information about the D.gnu
mailing list