Re: PG 17.2 compilation fails with -std=c11 on mac
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Lakshmi Narayana Velayudam <dev.narayana.v@gmail.com>
Cc: pgsql-hackers@postgresql.org
Date: 2025-05-16T15:42:23Z
Lists: pgsql-hackers
Lakshmi Narayana Velayudam <dev.narayana.v@gmail.com> writes:
> When I trying to compiling postgres 17.2 with -std=c11 I am getting the
> below error on mac
> explicit_bzero.c:22:9: error: call to undeclared function 'memset_s'; ISO
> C99 and later do not support implicit function declarations
> [-Wimplicit-function-declaration]
Yeah, I can reproduce that. After some digging, I see that
the problem is explained by "man memset_s":
SYNOPSIS
#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
errno_t
memset_s(void *s, rsize_t smax, int c, rsize_t n);
We lack that #define, which results in <string.h> not supplying
the declaration. AFAICT the requirement for this is in the C11
standard, this is not just Apple doing something weird.
(I did not figure out how come the code compiles without -std=c11.)
Aside from this compilation error, we're probably failing to use
memset_s on some platforms where it's available, for lack of
the #define in our configure/meson probes. I know how to fix
that in configure, but I'm less clear on how nonstandard probes
work in meson --- any help there?
regards, tom lane
Commits
-
Make our usage of memset_s() conform strictly to the C11 standard.
- a1e0e7076585 14.19 landed
- 9bc2d37ccaab 13.22 landed
- 5355a2400e84 17.6 landed
- 253cf661c226 16.10 landed
- 12eee85e511f 18.0 landed
- 00652b3c9fb7 15.14 landed