[Bug 297601] lang/gcc15: fix build after base d08296c7ab0d

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 16 Aug 2026 20:15:43 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297601

            Bug ID: 297601
           Summary: lang/gcc15: fix build after base d08296c7ab0d
           Product: Ports & Packages
           Version: Latest
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: Individual Port(s)
          Assignee: salvadore@freebsd.org
          Reporter: dim@FreeBSD.org
             Flags: maintainer-feedback?(salvadore@freebsd.org)
          Assignee: salvadore@freebsd.org

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.

-- 
You are receiving this mail because:
You are the assignee for the bug.