svn commit: r307756 - in head: include sys/sys
Brooks Davis
brooks at freebsd.org
Sat Oct 22 00:06:44 UTC 2016
On Fri, Oct 21, 2016 at 11:50:02PM +0000, John Baldwin wrote:
> Author: jhb
> Date: Fri Oct 21 23:50:02 2016
> New Revision: 307756
> URL: https://svnweb.freebsd.org/changeset/base/307756
>
> Log:
> Define max_align_t for C11.
>
> libc++'s stddef.h includes an existing definition of max_align_t for
> C++11, but it is only defined for C++, not for C. In addition, GCC and
> clang both define an alternate version of max_align_t that uses a
> union of multiple types rather than a plain long double as in libc++.
> This adds a __max_align_t to <sys/_types.h> that matches the GCC and
> clang definition that is mapped to max_align_t in <stddef.h>.
>
> PR: 210890
> Reviewed by: dim
> MFC after: 1 month
> Differential Revision: https://reviews.freebsd.org/D8194
>
> Modified:
> head/include/stddef.h
> head/sys/sys/_types.h
>
> Modified: head/include/stddef.h
> ==============================================================================
> --- head/include/stddef.h Fri Oct 21 21:55:50 2016 (r307755)
> +++ head/include/stddef.h Fri Oct 21 23:50:02 2016 (r307756)
> @@ -62,6 +62,14 @@ typedef ___wchar_t wchar_t;
> #endif
> #endif
>
> +#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
> +#ifndef __CLANG_MAX_ALIGN_T_DEFINED
> +typedef __max_align_t max_align_t;
> +#define __CLANG_MAX_ALIGN_T_DEFINED
> +#define __GCC_MAX_ALIGN_T
> +#endif
> +#endif
> +
> #define offsetof(type, member) __offsetof(type, member)
>
> #endif /* _STDDEF_H_ */
>
> Modified: head/sys/sys/_types.h
> ==============================================================================
> --- head/sys/sys/_types.h Fri Oct 21 21:55:50 2016 (r307755)
> +++ head/sys/sys/_types.h Fri Oct 21 23:50:02 2016 (r307756)
> @@ -100,6 +100,11 @@ typedef __uint_least32_t __char32_t;
> #define _CHAR32_T_DECLARED
> #endif
>
> +typedef struct {
Should this be union per the commit message?
Ideally I'd add a void * as well since that will support systems like
CHERI where pointers are the largest type.
-- Brooks
> + long long __max_align1 __aligned(_Alignof(long long));
> + long double __max_align2 __aligned(_Alignof(long double));
> +} __max_align_t;
> +
> typedef __uint32_t __dev_t; /* device number */
>
> typedef __uint32_t __fixpt_t; /* fixed point number */
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 455 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-head/attachments/20161022/c27b4945/attachment.sig>
More information about the svn-src-head
mailing list