On Thursday, 22 December 2022 at 21:18:04 UTC, Walter Bright wrote:
>On 12/22/2022 2:21 AM, Iain Buclaw wrote:
>Which no one will ever use. :-)
They were very useful for the ImportC test suite.
It's still a DMD folly. GDC has been able to compile C files since day 0 (19 years ago?) as it delegates foreign sources to the other compilers it was built with - the reverse also works, GCC can compile D sources because it uses the same mechanism. So you could say that C and C++ have been capable of compiling D sources since 2019. ;-)
$ gccgo -fno-druntime compiler/test/runnable/bcraii.d -o go-bcraii
$ ./go-bcraii
S.this()
S.~this()
inside
None of these tests where dmd pretends to be a C compiler even work outside of dmd.
$ gdc compiler/test/compilable/cimport.c
compiler/test/compilable/cimport.c:3:1: error: unknown type name ‘__import’
3 | __import core.stdc.stdarg;
| ^~~~~~~~
compiler/test/compilable/cimport.c:3:14: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
3 | __import core.stdc.stdarg;
| ^
compiler/test/compilable/cimport.c:4:1: error: unknown type name ‘__import’
4 | __import imports.impcimport;
| ^~~~~~~~
compiler/test/compilable/cimport.c:4:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token
4 | __import imports.impcimport;
| ^
compiler/test/compilable/cimport.c: In function ‘foo’:
compiler/test/compilable/cimport.c:8:5: error: unknown type name ‘va_list’
8 | va_list x;
| ^~~~~~~
compiler/test/compilable/cimport.c:1:1: note: ‘va_list’ is defined in header ‘<stdarg.h>’; did you forget to ‘#include <stdarg.h>’?
+++ |+#include <stdarg.h>
1 | // https://issues.dlang.org/show_bug.cgi?id=22666
compiler/test/compilable/cimport.c:9:16: error: ‘A’ undeclared (first use in this function)
9 | return 1 + A;
| ^
compiler/test/compilable/cimport.c:9:16: note: each undeclared identifier is reported only once for each function it appears in
DMD becoming a C compiler is a side-effect of importC, but just because you can doesn't mean you should.