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-all/attachments/20161022/c27b4945/attachment.sig>


More information about the svn-src-all mailing list