these macros are used to indicate that the implementation uses, respectively, utf-16 and utf-32 encoding for char16_t and char32_t. --- include/stdc-predef.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/stdc-predef.h b/include/stdc-predef.h index f8cd4b89..af1a2799 100644 --- a/include/stdc-predef.h +++ b/include/stdc-predef.h @@ -7,4 +7,7 @@ #define __STDC_IEC_559__ 1 #endif +#define __STDC_UTF_16__ 1 +#define __STDC_UTF_32__ 1 + #endif -- 2.31.1
GCC source code does contain a function to pre-include the <stdc-predef.h> header for glibc targets, but even so glibc still includes it in their own <features.h> header. furthermore, even if GCC implemented this for musl targets, it is still necessary for other compilers or previous versions of GCC. --- include/features.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/features.h b/include/features.h index 85cfb72a..f3d53cbe 100644 --- a/include/features.h +++ b/include/features.h @@ -1,6 +1,8 @@ #ifndef _FEATURES_H #define _FEATURES_H +#include <stdc-predef.h> + #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) #define _GNU_SOURCE 1 #endif -- 2.31.1
On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote:
> GCC source code does contain a function to pre-include the
> <stdc-predef.h> header for glibc targets, but even so glibc still
> includes it in their own <features.h> header. furthermore, even if GCC
> implemented this for musl targets, it is still necessary for other
> compilers or previous versions of GCC.
> ---
> include/features.h | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/include/features.h b/include/features.h
> index 85cfb72a..f3d53cbe 100644
> --- a/include/features.h
> +++ b/include/features.h
> @@ -1,6 +1,8 @@
> #ifndef _FEATURES_H
> #define _FEATURES_H
>
> +#include <stdc-predef.h>
> +
> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE)
> #define _GNU_SOURCE 1
> #endif
> --
> 2.31.1
I've hesitated to do this because features.h is not consistently
included from all standard headers (only if it's needed), and the
result would be inconsistent exposure of these macros. (Also
inconsistent if they're checked before any standard headers are
included, which is unfixable.) I think it makes more sense to just add
"-include stdc-predef.h" to the compiler specfile or equivalent if it
doesn't auto-include it, so that you get behavior that actually
matches the spec.
Rich
Em 16/04/2021 11:26, Rich Felker escreveu: > On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote: >> GCC source code does contain a function to pre-include the >> <stdc-predef.h> header for glibc targets, but even so glibc still I seem to have been mistaken about the feature being glibc specific; using echo "" | cc -xc - -E it seems the file does end up being included automatically. However, when using clang instead of gcc, it isn't included automatically. I don't know if this is something that clang ought to fix, is there some sort of standard about <stdc-predef.h>? Michael Forney's cproc compiler doesn't seem to touch it either. >> includes it in their own <features.h> header. furthermore, even if GCC >> implemented this for musl targets, it is still necessary for other >> compilers or previous versions of GCC. >> --- >> include/features.h | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/include/features.h b/include/features.h >> index 85cfb72a..f3d53cbe 100644 >> --- a/include/features.h >> +++ b/include/features.h >> @@ -1,6 +1,8 @@ >> #ifndef _FEATURES_H >> #define _FEATURES_H >> >> +#include <stdc-predef.h> >> + >> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) >> #define _GNU_SOURCE 1 >> #endif >> -- >> 2.31.1 > > I've hesitated to do this because features.h is not consistently > included from all standard headers (only if it's needed), and the > result would be inconsistent exposure of these macros. (Also > inconsistent if they're checked before any standard headers are > included, which is unfixable.) I think it makes more sense to just add > "-include stdc-predef.h" to the compiler specfile or equivalent if it > doesn't auto-include it, so that you get behavior that actually > matches the spec. Do you know if clang can use the specfile? That would make it worth it adding the entry, since GCC has the expected behavior already. > > Rich >
On Fri, Apr 16, 2021 at 02:57:21PM -0300, Érico Nogueira wrote: > Em 16/04/2021 11:26, Rich Felker escreveu: > >On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote: > >>GCC source code does contain a function to pre-include the > >><stdc-predef.h> header for glibc targets, but even so glibc still > > I seem to have been mistaken about the feature being glibc specific; using > > echo "" | cc -xc - -E > > it seems the file does end up being included automatically. > > However, when using clang instead of gcc, it isn't included > automatically. I don't know if this is something that clang ought to > fix, is there some sort of standard about <stdc-predef.h>? Michael > Forney's cproc compiler doesn't seem to touch it either. It's not a standard, but given that it's established I don't see any reasonable argument for other compilers not to just do the same. You can always fix them manually with CC="clang -include stdc-predef.h" or similar though. > >>includes it in their own <features.h> header. furthermore, even if GCC > >>implemented this for musl targets, it is still necessary for other > >>compilers or previous versions of GCC. > >>--- > >> include/features.h | 2 ++ > >> 1 file changed, 2 insertions(+) > >> > >>diff --git a/include/features.h b/include/features.h > >>index 85cfb72a..f3d53cbe 100644 > >>--- a/include/features.h > >>+++ b/include/features.h > >>@@ -1,6 +1,8 @@ > >> #ifndef _FEATURES_H > >> #define _FEATURES_H > >>+#include <stdc-predef.h> > >>+ > >> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) > >> #define _GNU_SOURCE 1 > >> #endif > >>-- > >>2.31.1 > > > >I've hesitated to do this because features.h is not consistently > >included from all standard headers (only if it's needed), and the > >result would be inconsistent exposure of these macros. (Also > >inconsistent if they're checked before any standard headers are > >included, which is unfixable.) I think it makes more sense to just add > >"-include stdc-predef.h" to the compiler specfile or equivalent if it > >doesn't auto-include it, so that you get behavior that actually > >matches the spec. > > Do you know if clang can use the specfile? That would make it worth > it adding the entry, since GCC has the expected behavior already. No; specfiles are highly tied to GCC's compiler driver architecture. clang might have some other equivalent mechanism though. Rich
[-- Attachment #1: Type: text/plain, Size: 2911 bytes --] Ugh, I thought Clang had added support for this years ago. But it looks like the change (https://reviews.llvm.org/D34158) never actually made it in; it ran into some test failures after being committed and was reverted, and then never reapplied. :( On Fri, Apr 16, 2021 at 2:51 PM Rich Felker <dalias@libc.org> wrote: > On Fri, Apr 16, 2021 at 02:57:21PM -0300, Érico Nogueira wrote: > > Em 16/04/2021 11:26, Rich Felker escreveu: > > >On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote: > > >>GCC source code does contain a function to pre-include the > > >><stdc-predef.h> header for glibc targets, but even so glibc still > > > > I seem to have been mistaken about the feature being glibc specific; > using > > > > echo "" | cc -xc - -E > > > > it seems the file does end up being included automatically. > > > > However, when using clang instead of gcc, it isn't included > > automatically. I don't know if this is something that clang ought to > > fix, is there some sort of standard about <stdc-predef.h>? Michael > > Forney's cproc compiler doesn't seem to touch it either. > > It's not a standard, but given that it's established I don't see any > reasonable argument for other compilers not to just do the same. You > can always fix them manually with CC="clang -include stdc-predef.h" or > similar though. > > > >>includes it in their own <features.h> header. furthermore, even if GCC > > >>implemented this for musl targets, it is still necessary for other > > >>compilers or previous versions of GCC. > > >>--- > > >> include/features.h | 2 ++ > > >> 1 file changed, 2 insertions(+) > > >> > > >>diff --git a/include/features.h b/include/features.h > > >>index 85cfb72a..f3d53cbe 100644 > > >>--- a/include/features.h > > >>+++ b/include/features.h > > >>@@ -1,6 +1,8 @@ > > >> #ifndef _FEATURES_H > > >> #define _FEATURES_H > > >>+#include <stdc-predef.h> > > >>+ > > >> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) > > >> #define _GNU_SOURCE 1 > > >> #endif > > >>-- > > >>2.31.1 > > > > > >I've hesitated to do this because features.h is not consistently > > >included from all standard headers (only if it's needed), and the > > >result would be inconsistent exposure of these macros. (Also > > >inconsistent if they're checked before any standard headers are > > >included, which is unfixable.) I think it makes more sense to just add > > >"-include stdc-predef.h" to the compiler specfile or equivalent if it > > >doesn't auto-include it, so that you get behavior that actually > > >matches the spec. > > > > Do you know if clang can use the specfile? That would make it worth > > it adding the entry, since GCC has the expected behavior already. > > No; specfiles are highly tied to GCC's compiler driver architecture. > clang might have some other equivalent mechanism though. > > Rich > [-- Attachment #2: Type: text/html, Size: 3813 bytes --]
On Fri, Apr 16, 2021 at 06:12:52PM -0400, James Y Knight wrote: > Ugh, I thought Clang had added support for this years ago. But it looks > like the change (https://reviews.llvm.org/D34158) never actually made it > in; it ran into some test failures after being committed and was > reverted, and then never reapplied. :( The story of LLVM.. Random junk getting committed and kept, actually important and correct changes getting reverted because of bogus tests. Rich > On Fri, Apr 16, 2021 at 2:51 PM Rich Felker <dalias@libc.org> wrote: > > > On Fri, Apr 16, 2021 at 02:57:21PM -0300, Érico Nogueira wrote: > > > Em 16/04/2021 11:26, Rich Felker escreveu: > > > >On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote: > > > >>GCC source code does contain a function to pre-include the > > > >><stdc-predef.h> header for glibc targets, but even so glibc still > > > > > > I seem to have been mistaken about the feature being glibc specific; > > using > > > > > > echo "" | cc -xc - -E > > > > > > it seems the file does end up being included automatically. > > > > > > However, when using clang instead of gcc, it isn't included > > > automatically. I don't know if this is something that clang ought to > > > fix, is there some sort of standard about <stdc-predef.h>? Michael > > > Forney's cproc compiler doesn't seem to touch it either. > > > > It's not a standard, but given that it's established I don't see any > > reasonable argument for other compilers not to just do the same. You > > can always fix them manually with CC="clang -include stdc-predef.h" or > > similar though. > > > > > >>includes it in their own <features.h> header. furthermore, even if GCC > > > >>implemented this for musl targets, it is still necessary for other > > > >>compilers or previous versions of GCC. > > > >>--- > > > >> include/features.h | 2 ++ > > > >> 1 file changed, 2 insertions(+) > > > >> > > > >>diff --git a/include/features.h b/include/features.h > > > >>index 85cfb72a..f3d53cbe 100644 > > > >>--- a/include/features.h > > > >>+++ b/include/features.h > > > >>@@ -1,6 +1,8 @@ > > > >> #ifndef _FEATURES_H > > > >> #define _FEATURES_H > > > >>+#include <stdc-predef.h> > > > >>+ > > > >> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) > > > >> #define _GNU_SOURCE 1 > > > >> #endif > > > >>-- > > > >>2.31.1 > > > > > > > >I've hesitated to do this because features.h is not consistently > > > >included from all standard headers (only if it's needed), and the > > > >result would be inconsistent exposure of these macros. (Also > > > >inconsistent if they're checked before any standard headers are > > > >included, which is unfixable.) I think it makes more sense to just add > > > >"-include stdc-predef.h" to the compiler specfile or equivalent if it > > > >doesn't auto-include it, so that you get behavior that actually > > > >matches the spec. > > > > > > Do you know if clang can use the specfile? That would make it worth > > > it adding the entry, since GCC has the expected behavior already. > > > > No; specfiles are highly tied to GCC's compiler driver architecture. > > clang might have some other equivalent mechanism though. > > > > Rich > >
[-- Attachment #1: Type: text/plain, Size: 3523 bytes --] Super unnecessary snarkiness. On Fri, Apr 16, 2021, 8:00 PM Rich Felker <dalias@libc.org> wrote: > On Fri, Apr 16, 2021 at 06:12:52PM -0400, James Y Knight wrote: > > Ugh, I thought Clang had added support for this years ago. But it looks > > like the change (https://reviews.llvm.org/D34158) never actually made it > > in; it ran into some test failures after being committed and was > > reverted, and then never reapplied. :( > > The story of LLVM.. Random junk getting committed and kept, actually > important and correct changes getting reverted because of bogus tests. > > Rich > > > On Fri, Apr 16, 2021 at 2:51 PM Rich Felker <dalias@libc.org> wrote: > > > > > On Fri, Apr 16, 2021 at 02:57:21PM -0300, Érico Nogueira wrote: > > > > Em 16/04/2021 11:26, Rich Felker escreveu: > > > > >On Thu, Apr 15, 2021 at 09:35:21PM -0300, Érico Nogueira wrote: > > > > >>GCC source code does contain a function to pre-include the > > > > >><stdc-predef.h> header for glibc targets, but even so glibc still > > > > > > > > I seem to have been mistaken about the feature being glibc specific; > > > using > > > > > > > > echo "" | cc -xc - -E > > > > > > > > it seems the file does end up being included automatically. > > > > > > > > However, when using clang instead of gcc, it isn't included > > > > automatically. I don't know if this is something that clang ought to > > > > fix, is there some sort of standard about <stdc-predef.h>? Michael > > > > Forney's cproc compiler doesn't seem to touch it either. > > > > > > It's not a standard, but given that it's established I don't see any > > > reasonable argument for other compilers not to just do the same. You > > > can always fix them manually with CC="clang -include stdc-predef.h" or > > > similar though. > > > > > > > >>includes it in their own <features.h> header. furthermore, even if > GCC > > > > >>implemented this for musl targets, it is still necessary for other > > > > >>compilers or previous versions of GCC. > > > > >>--- > > > > >> include/features.h | 2 ++ > > > > >> 1 file changed, 2 insertions(+) > > > > >> > > > > >>diff --git a/include/features.h b/include/features.h > > > > >>index 85cfb72a..f3d53cbe 100644 > > > > >>--- a/include/features.h > > > > >>+++ b/include/features.h > > > > >>@@ -1,6 +1,8 @@ > > > > >> #ifndef _FEATURES_H > > > > >> #define _FEATURES_H > > > > >>+#include <stdc-predef.h> > > > > >>+ > > > > >> #if defined(_ALL_SOURCE) && !defined(_GNU_SOURCE) > > > > >> #define _GNU_SOURCE 1 > > > > >> #endif > > > > >>-- > > > > >>2.31.1 > > > > > > > > > >I've hesitated to do this because features.h is not consistently > > > > >included from all standard headers (only if it's needed), and the > > > > >result would be inconsistent exposure of these macros. (Also > > > > >inconsistent if they're checked before any standard headers are > > > > >included, which is unfixable.) I think it makes more sense to just > add > > > > >"-include stdc-predef.h" to the compiler specfile or equivalent if > it > > > > >doesn't auto-include it, so that you get behavior that actually > > > > >matches the spec. > > > > > > > > Do you know if clang can use the specfile? That would make it worth > > > > it adding the entry, since GCC has the expected behavior already. > > > > > > No; specfiles are highly tied to GCC's compiler driver architecture. > > > clang might have some other equivalent mechanism though. > > > > > > Rich > > > > [-- Attachment #2: Type: text/html, Size: 4906 bytes --]