public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-5979] [PATCH] stddef.h: add support for musl typedef macro guards
@ 2021-12-14 23:09 Jeff Law
  0 siblings, 0 replies; only message in thread
From: Jeff Law @ 2021-12-14 23:09 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:85a438fc78dd12249ca854a3e5c577fefeb1a5cd

commit r12-5979-g85a438fc78dd12249ca854a3e5c577fefeb1a5cd
Author: Sören Tempel <soeren@soeren-tempel.net>
Date:   Tue Dec 14 18:07:47 2021 -0500

    [PATCH] stddef.h: add support for musl typedef macro guards
    
    The stddef.h header checks/sets various hardcoded toolchain/os specific
    macro guards to prevent redefining types such as ptrdiff_t, wchar_t, or
    size_t. However, without this patch, the file does not check/set the
    typedef macro guards for musl libc. This causes types such as size_t to
    be defined twice for files which include both musl's stdlib.h as well as
    GCC's ginclude/stddef.h. This is, for example, the case for
    libgo/sysinfo.c. If libgo/sysinfo.c has multiple typedefs for size_t
    this confuses -fdump-go-spec and causes size_t not to be included in the
    generated type definitions thereby causing a gcc-go compilation failure
    on Alpine Linux Edge (which uses musl libc) with the following error:
    
            sysinfo.go:7765:13: error: use of undefined type '_size_t'
             7765 | type Size_t _size_t
                  |             ^
            libcall_posix.go:49:35: error: non-integer len argument in make
               49 |                 b := make([]byte, len)
                  |
    
    This commit fixes this issue by ensuring that ptrdiff_t, wchar_t, and size_t
    are only defined once in the pre-processed libgo/sysinfo.c file by enhancing
    gcc/ginclude/stddef.h with musl-specific typedef macro guards.
    
    gcc/ChangeLog:
    
            * ginclude/stddef.h (__DEFINED_ptrdiff_t): Add support for musl
            libc typedef macro guard.
            (__DEFINED_size_t): Ditto.
            (__DEFINED_wchar_t): Ditto.

Diff:
---
 gcc/ginclude/stddef.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/gcc/ginclude/stddef.h b/gcc/ginclude/stddef.h
index 66619fe43b1..50d710a5ab9 100644
--- a/gcc/ginclude/stddef.h
+++ b/gcc/ginclude/stddef.h
@@ -128,6 +128,7 @@ _TYPE_wchar_t;
 #ifndef ___int_ptrdiff_t_h
 #ifndef _GCC_PTRDIFF_T
 #ifndef _PTRDIFF_T_DECLARED /* DragonFly */
+#ifndef __DEFINED_ptrdiff_t /* musl libc */
 #define _PTRDIFF_T
 #define _T_PTRDIFF_
 #define _T_PTRDIFF
@@ -137,10 +138,12 @@ _TYPE_wchar_t;
 #define ___int_ptrdiff_t_h
 #define _GCC_PTRDIFF_T
 #define _PTRDIFF_T_DECLARED
+#define __DEFINED_ptrdiff_t
 #ifndef __PTRDIFF_TYPE__
 #define __PTRDIFF_TYPE__ long int
 #endif
 typedef __PTRDIFF_TYPE__ ptrdiff_t;
+#endif /* __DEFINED_ptrdiff_t */
 #endif /* _PTRDIFF_T_DECLARED */
 #endif /* _GCC_PTRDIFF_T */
 #endif /* ___int_ptrdiff_t_h */
@@ -174,6 +177,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
 #ifndef _SIZE_T_DEFINED
 #ifndef _BSD_SIZE_T_DEFINED_	/* Darwin */
 #ifndef _SIZE_T_DECLARED	/* FreeBSD 5 */
+#ifndef __DEFINED_size_t	/* musl libc */
 #ifndef ___int_size_t_h
 #ifndef _GCC_SIZE_T
 #ifndef _SIZET_
@@ -191,6 +195,7 @@ typedef __PTRDIFF_TYPE__ ptrdiff_t;
 #define _SIZE_T_DEFINED
 #define _BSD_SIZE_T_DEFINED_	/* Darwin */
 #define _SIZE_T_DECLARED	/* FreeBSD 5 */
+#define __DEFINED_size_t	/* musl libc */
 #define ___int_size_t_h
 #define _GCC_SIZE_T
 #define _SIZET_
@@ -215,6 +220,7 @@ typedef long ssize_t;
 #endif /* _SIZET_ */
 #endif /* _GCC_SIZE_T */
 #endif /* ___int_size_t_h */
+#endif /* __DEFINED_size_t */
 #endif /* _SIZE_T_DECLARED */
 #endif /* _BSD_SIZE_T_DEFINED_ */
 #endif /* _SIZE_T_DEFINED */
@@ -251,6 +257,7 @@ typedef long ssize_t;
 #ifndef _BSD_WCHAR_T_DEFINED_    /* Darwin */
 #ifndef _BSD_RUNE_T_DEFINED_	/* Darwin */
 #ifndef _WCHAR_T_DECLARED /* FreeBSD 5 */
+#ifndef __DEFINED_wchar_t /* musl libc */
 #ifndef _WCHAR_T_DEFINED_
 #ifndef _WCHAR_T_DEFINED
 #ifndef _WCHAR_T_H
@@ -272,6 +279,7 @@ typedef long ssize_t;
 #define __INT_WCHAR_T_H
 #define _GCC_WCHAR_T
 #define _WCHAR_T_DECLARED
+#define __DEFINED_wchar_t
 
 /* On BSD/386 1.1, at least, machine/ansi.h defines _BSD_WCHAR_T_
    instead of _WCHAR_T_, and _BSD_RUNE_T_ (which, unlike the other
@@ -326,6 +334,7 @@ typedef __WCHAR_TYPE__ wchar_t;
 #endif
 #endif
 #endif
+#endif /* __DEFINED_wchar_t */
 #endif /* _WCHAR_T_DECLARED */
 #endif /* _BSD_RUNE_T_DEFINED_ */
 #endif


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-14 23:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-14 23:09 [gcc r12-5979] [PATCH] stddef.h: add support for musl typedef macro guards Jeff Law

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).