On Wednesday, 14 January 2026 at 10:44:32 UTC, Witold Baryluk
wrote:
gcc version 15.2.1 20251211 (Red Hat 15.2.1-5) (GCC)
Fedora 42, amd64
Just trying something for a test:
```
$ gcc -E /usr/include/openssl/ssl.h > ssl.i
/usr/include/openssl/ssl.h:19:10: warning: ‘#pragma once’ in
main file [-Wpragma-once-outside-header]
19 | # pragma once
| ^~~~
$ echo 'import ssl;' > foo.d
$ gdc foo.d
/usr/include/inttypes.h:358:51: error: found ‘__nptr’ when
expecting ‘,’
358 | extern intmax_t strtoimax (const char *__restrict
__nptr,
| ^
/usr/include/inttypes.h:358:57: error: no type-specifier for
parameter
358 | extern intmax_t strtoimax (const char *__restrict
__nptr,
|
^
/usr/include/inttypes.h:359:46: error: found ‘__endptr’ when
expecting ‘,’
359 | char **__restrict __endptr,
int __base) __THROW;
| ^
/usr/include/inttypes.h:359:54: error: no type-specifier for
parameter
359 | char **__restrict __endptr,
int __base) __THROW;
| ^
/usr/include/inttypes.h:362:52: error: found ‘__nptr’ when
expecting ‘,’
362 | extern uintmax_t strtoumax (const char *__restrict
__nptr,
| ^
/usr/include/inttypes.h:362:58: error: no type-specifier for
parameter
....
```
Fail.
Can we get some better documentation how to use for more than
some toy examples?
Note to myself: Issue is with no support for `__restrict`, this
can be aliviated with defining it as a macro expanding to an
empty string.
`gcc -E -D__restrict="" /usr/include/openssl/ssl.h > ssl.i`
for example.
Also passing `-P` does help, to make error messages somehow less
confusing.
There are still some issues here and there unfortunately.
```
ssl.i:110:1: error: missing comma or semicolon after declaration
of ‘__uint16_t’, found ‘__bswap_16’ instead
110 | __bswap_16 (__uint16_t __bsx)
| ^
ssl.i:113:1: error: no type for declarator before ‘}’
113 | }
| ^
...
ssl.i:119:31: error: missing comma or semicolon after declaration
of ‘__inline’, found ‘__uint64_t’ instead
119 | __extension__ static __inline __uint64_t
...
ssl.i:339:79: error: missing comma or semicolon after declaration
of ‘strtoimax’, found ‘__asm__’ instead
339 | extern intmax_t strtoimax (const char * __nptr, char **
__endptr, int __base) __asm__ ("" "__isoc23_strtoimax")
__attribute__ ((__nothrow__ , __leaf__));
|
^
...
ssl.i:409:22: error: illegal combination of type specifiers
409 | __extension__ extern long long int atoll (const char
*__nptr)
| ^
```
This is with
gcc (Debian 15.2.0-12) 15.2.0
and
gdc 15.2.0
on Debian testing, amd64
Some of these might be addressable with a bit more macro defines,
but some like __asm__ stuff, might be tricky. These mostly do
come from standard library, so there might be a way to address it
somehow.