It's the volatile following the asm that is not accepted.
The trouble is __GNUCLIKE_ASM is always defined because __GNUC__ is defined. Turning off __GNUC__ causes a lot of error messages like the system .h files need to be edited. __GNUCLIKE_ASM turns on use of the inline assembler.
The troublesome block of code in ieeefp.h looks like: #define __fldcw(addr) __asm __volatile("fldcw %0" : : "m" (*(addr))) #define __fldenv(addr) __asm __volatile("fldenv %0" : : "m" (*(addr))) #define __fnclex() __asm __volatile("fnclex") #define __fnstcw(addr) __asm __volatile("fnstcw %0" : "=m" (*(addr))) #define __fnstenv(addr) __asm __volatile("fnstenv %0" : "=m" (*(addr))) #define __fnstsw(addr) __asm __volatile("fnstsw %0" : "=m" (*(addr))) #define __ldmxcsr(addr) __asm __volatile("ldmxcsr %0" : : "m" (*(addr))) #define __stmxcsr(addr) __asm __volatile("stmxcsr %0" : "=m" (*(addr)))
@WalterBright created dlang/dmd pull request #15004 "fix Issue 23725 - ImportC fails to parse __asm __volatile on FreeBSD …" fixing this issue: - fix Issue 23725 - ImportC fails to parse __asm __volatile on FreeBSD stdatomic.h and fenv.h https://github.com/dlang/dmd/pull/15004
Fixed by https://github.com/dlang/dmd/pull/15012