Re: git: cd0727ec709b - main - libc: Add <stdio.h> C23 feature test macro

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 15 Aug 2026 17:23:57 UTC
On 14 Aug 2026, at 21:32, Faraz Vahedi <kfv@FreeBSD.org> wrote:
> 
> The branch main has been updated by kfv:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=cd0727ec709bb54f8f82104f6113284a15dd3464
> 
> commit cd0727ec709bb54f8f82104f6113284a15dd3464
> Author:     Faraz Vahedi <kfv@FreeBSD.org>
> AuthorDate: 2026-08-14 12:22:00 +0000
> Commit:     Faraz Vahedi <kfv@FreeBSD.org>
> CommitDate: 2026-08-14 19:31:54 +0000
> 
>    libc: Add <stdio.h> C23 feature test macro
> 
>    Define the __STDC_VERSION_STDIO_H__ feature test macro now that
>    the header fully conforms to C23.
> 
>    Reviewed by:    fuz
>    Approved by:    fuz (mentor)
>    MFC after:      1 month
>    Differential Revision: https://reviews.freebsd.org/D58842
...
> diff --git a/include/stdio.h b/include/stdio.h
> index ea016d65095d..50e3ff2d1c34 100644
> --- a/include/stdio.h
> +++ b/include/stdio.h
> @@ -32,8 +32,8 @@
>  * SUCH DAMAGE.
>  */
> 
> -#ifndef _STDIO_H_
> -#define _STDIO_H_
> +#ifndef __STDC_VERSION_STDIO_H__
> +#define __STDC_VERSION_STDIO_H__ 202311L
> 
> #include <sys/cdefs.h>
> #include <sys/_null.h>

This particular change appears to have broken the math/gmp port, which
hasn't functionally changed since 2023.

It has this construct to detect the existence of FILE:

  /* For reference, "defined(EOF)" cannot be used here.  In g++ 2.95.4,
     <iostream> defines EOF but not FILE.  */
  #if defined (FILE)                                              \
    || defined (H_STDIO)                                          \
    || defined (_H_STDIO)               /* AIX */                 \
    || defined (_STDIO_H)               /* glibc, Sun, SCO */     \
    || defined (_STDIO_H_)              /* BSD, OSF */            \
    || defined (__STDIO_H)              /* Borland */             \
    || defined (__STDIO_H__)            /* IRIX */                \
    || defined (_STDIO_INCLUDED)        /* HPUX */                \
    || defined (__dj_include_stdio_h_)  /* DJGPP */               \
    || defined (_FILE_DEFINED)          /* Microsoft */           \
    || defined (__STDIO__)              /* Apple MPW MrC */       \
    || defined (_MSL_STDIO_H)           /* Metrowerks */          \
    || defined (_STDIO_H_INCLUDED)      /* QNX4 */                \
    || defined (_ISO_STDIO_ISO_H)       /* Sun C++ */             \
    || defined (__STDIO_LOADED)         /* VMS */                 \
    || defined (_STDIO)                 /* HPE NonStop */         \
    || defined (__DEFINED_FILE)         /* musl */
  #define _GMP_H_HAVE_FILE 1
  #endif

Now that _STDIO_H_ has been removed, the detection fails and another
part of the port falls over due to an incorrect prototype.

I guess we could patch the math/gmp port with another
__STDC_VERSION_STDIO_H__ macro, but it might be good to do an exp-run to
see if there are more GNU projects which rely on the existence of the
_STDIO_H_ macro?

-Dimitry