Ed Schouten <e...@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
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to