From owner-svn-src-head@FreeBSD.ORG Wed Dec 14 09:09:37 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C58C11065676; Wed, 14 Dec 2011 09:09:37 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B478F8FC1A; Wed, 14 Dec 2011 09:09:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBE99bvH090648; Wed, 14 Dec 2011 09:09:37 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBE99bS3090646; Wed, 14 Dec 2011 09:09:37 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <201112140909.pBE99bS3090646@svn.freebsd.org> From: Ed Schouten Date: Wed, 14 Dec 2011 09:09:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r228495 - head/sys/sys X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Dec 2011 09:09:37 -0000 Author: ed Date: Wed Dec 14 09:09:37 2011 New Revision: 228495 URL: http://svn.freebsd.org/changeset/base/228495 Log: Slightly alter the C1X definitions in in cdefs.h: - Add _Alignas(). Unfortunately this macro is only partially functional. The C1X standard will allow both an integer and a type name to be passed to this macro, while this macro only allows an integer. To be portable, one must use _Alignas(_Alignof(double)) to use type names. - Don't do _Static_assert() when __COUNTER__ is not supported. We'd better keep this implementation robust and allow it to be used in header files, without mysteriously breaking older compilers. Modified: head/sys/sys/cdefs.h Modified: head/sys/sys/cdefs.h ============================================================================== --- head/sys/sys/cdefs.h Wed Dec 14 08:52:27 2011 (r228494) +++ head/sys/sys/cdefs.h Wed Dec 14 09:09:37 2011 (r228495) @@ -222,6 +222,7 @@ * Keywords added in C1X. */ #if defined(__cplusplus) && __cplusplus >= 201103L +#define _Alignas(e) alignas(e) #define _Alignof(e) alignof(e) #define _Noreturn [[noreturn]] #define _Static_assert(e, s) static_assert(e, s) @@ -231,21 +232,23 @@ #else /* Not supported. Implement them manually. */ #ifdef __GNUC__ +#define _Alignas(e) __attribute__((__aligned__(e))) #define _Alignof(e) __alignof__(e) #define _Noreturn __attribute__((__noreturn__)) #define _Thread_local __thread #else +#define _Alignas(e) #define _Alignof(e) __offsetof(struct { char __a; e __b; }, __b) #define _Noreturn #define _Thread_local #endif #ifdef __COUNTER__ #define _Static_assert(e, s) __Static_assert(e, __COUNTER__) -#else -#define _Static_assert(e, s) __Static_assert(e, __LINE__) -#endif #define __Static_assert(e, c) ___Static_assert(e, c) #define ___Static_assert(e, c) typedef char __assert ## c[(e) ? 1 : -1] +#else +#define _Static_assert(e, s) +#endif #endif #if __GNUC_PREREQ__(2, 96)