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