svn commit: r320240 - head/include
Jan Beich
jbeich at FreeBSD.org
Tue Jun 27 05:02:13 UTC 2017
Ed Schouten <ed at FreeBSD.org> writes:
> Author: ed
> Date: Thu Jun 22 18:39:52 2017
> New Revision: 320240
> URL: https://svnweb.freebsd.org/changeset/base/320240
>
> Log:
> Use __ISO_C_VISIBLE, as opposed to testing __STDC_VERSION__.
>
> FreeBSD's C library uses __STDC_VERSION__ to determine whether the
> compiler provides language features specific to a certain version of the
> C standard. __ISO_C_VISIBLE is used to specify which library features
> need to be exposed.
>
> max_align_t currently uses __STDC_VERSION__, even though it should be
> using __ISO_C_VISIBLE to remain consistent with the rest of the headers
> in include/.
>
> Reviewed by: dim
> MFC after: 1 month
> Differential Revision: https://reviews.freebsd.org/D11303
>
> Modified:
> head/include/stddef.h
>
> Modified: head/include/stddef.h
> ==============================================================================
> --- head/include/stddef.h Thu Jun 22 17:10:34 2017 (r320239)
> +++ head/include/stddef.h Thu Jun 22 18:39:52 2017 (r320240)
> @@ -62,7 +62,7 @@ typedef ___wchar_t wchar_t;
> #endif
> #endif
>
> -#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L
> +#if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
> #ifndef __CLANG_MAX_ALIGN_T_DEFINED
> typedef __max_align_t max_align_t;
> #define __CLANG_MAX_ALIGN_T_DEFINED
max_align_t is now exposed even without -std=c11.
#+begin_src c
$ cat a.c
#include <stddef.h>
/*
* a type with the most strict alignment requirements
*/
union max_align
{
char c;
short s;
long l;
int i;
float f;
double d;
void * v;
void (*q)(void);
};
typedef union max_align max_align_t;
int main(int argc, char *argv[])
{
return 0;
}
$ cc -std=gnu89 a.c
a.c:18:14: error: typedef redefinition with different types ('void' vs '__max_align_t')
typedef void max_align_t;
^
/usr/include/stddef.h:67:23: note: previous definition is here
typedef __max_align_t max_align_t;
^
1 error generated.
#+end_src c
thus regressing some ports e.g.,
#+begin_src c
cc -o Unified_c_media_libnestegg_src0.o -c ... -std=gnu99 ... Unified_c_media_libnestegg_src0.c
In file included from obj-i386-unknown-freebsd12.0/media/libnestegg/src/Unified_c_media_libnestegg_src0.c:2:
In file included from media/libnestegg/src/halloc.c:19:
media/libnestegg/src/align.h:42:25: error: typedef redefinition with different types ('union max_align' vs '__max_align_t')
typedef union max_align max_align_t;
^
/usr/include/stddef.h:67:23: note: previous definition is here
typedef __max_align_t max_align_t;
^
1 error generated.
#+end_src c
https://lists.freebsd.org/pipermail/freebsd-pkg-fallout/Week-of-Mon-20170626/493679.html
More information about the svn-src-all
mailing list