lang/gcc15: fix build after base d08296c7ab0d
After base d08296c7ab0d7bb259bf7b8cdf9ffb819c1929ab ("libc: Implement
qualifier-preserving standard library functions"), lang/gcc15 fails to
build with errors like:
/wrkdirs/usr/ports/lang/gcc15/work/gcc-15.2.0/libgomp/affinity-fmt.c: In function 'gomp_display_affinity':
/wrkdirs/usr/ports/lang/gcc15/work/gcc-15.2.0/libgomp/affinity-fmt.c:330:25: error: initialization discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
330 | char *q = strchr (p + 1, '}');
| ^~~~~~and:
In file included from /wrkdirs/usr/ports/lang/gcc15/work/.build/gcc/include-fixed/stdio.h:52,
from cp-demangle.c:109:
/wrkdirs/usr/ports/lang/gcc15/work/gcc-15.2.0/libstdc++-v3/../include/libiberty.h:225:14: error: expected identifier or '(' before '_Generic'
225 | extern void *memrchr(const void *, int, size_t);
| ^~~~~~~The former is because strchr with a 'const char *' input now returns a
'const char*'. This is easily fixed by making 'q' a 'const char *' too.
The latter is because memrchr is now a macro, similar to the other
functions in <string.h>, and libiberty.h attempts to incorrectly
redeclare it.
This is because cp-demangle.c includes libiberty.h, but does not include
the config.h generated for libiberty.h, instead using the config.h
generated for libstdc++.
The problem is really with the way upstream creates its config.h
headers: they should either make libiberty.h automatically include its
own config.h file, or rename that one to libiberty-config.h, so it can
be included at the same time as the libstdc++ config.h header.
The easiest way to fix it is to add a '!defined(FreeBSD)'
conditional to the #if statement that attempts to declare the
incompatible memrchr.
Approved by: salvadore (maintainer)
PR: 297601
MFH: 2026Q3