This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

conformtest: Clean up / correct / expand C99 and C11 expectations


I've now finished reviewing conformtest expectations for all C90 / C99
/ C11 headers provided by glibc or GCC.  This patch provides the
remaining updates to describe the requirements of those standards on
those headers.  (stdatomic.h and threads.h are not yet provided and I
haven't written expectations files for them.)

Tested x86_64; results for ISO / ISO99 / ISO11 / POSIX remain clean
(with GCC 4.7).

Notes:

* To avoid a lot of duplication, #include is used in expectations
  files where one header is specified as including another header.
  This requires a conformtest.pl change to preprocess allow-header
  data files the same way as the file for the header being tested for
  conformance, naming the file on the $CC -E line rather than
  preprocessing from stdin, so that the #included files can be found
  in that case.

* complex.h needed "allow" entries added for all the names listed in
  future library directions as reserved as possible future library
  functions and so permitted in the header.  (The only functions from
  this list that we provide at present are clog10 / clog10f / clog10l,
  and in accordance with our usual practice in glibc we only in fact
  declare those if _GNU_SOURCE, but the standard permits these names
  and the conformtest files allow such names in such cases.)

* Requirements for stdint.h / inttypes.h are complicated, with various
  types / macros being optional in ISO C but required by POSIX (or
  POSIX + XSI in some cases).  Rather than reflecting those details,
  the expectations just show those types / macros as required (as was
  already the case for those macros and types that were already
  listed, and as also applies e.g. with POSIX having stronger
  requirements in type ranges, shown in limits.h, than ISO C).

* Some requirements such as WINT_MIN <= -127 were wrong and so are
  removed.  Promotion rules meant that WINT_MIN <= -127 tests passed
  despite wint_t being an unsigned type (because the comparison was
  against (unsigned)-127).

* The tests for the types of some macros in stdint.h need to use the
  (documented) GCC-provided macros such as __SIZE_TYPE__ because
  stdint.h doesn't provide the relevant types (and ISO C doesn't allow
  it to do so; it's POSIX that has general permission to define *_t).
  In the case of __SIG_ATOMIC_TYPE__ this may result in test failures
  with GCC 4.4 - I think this is OK, and note ISO11 gets failures
  anyway for any GCC version before 4.7 since they don't provide all
  the features needed for the headers.

* The tgmath.h tests weren't previously enabled for ISO99 or ISO11 at
  all, only XOPEN2K || defined POSIX2008.

2012-11-07  Joseph Myers  <joseph@codesourcery.com>

	* conform/conformtest.pl: Preprocess allow-header data with -x c
	instead of from stdin.
	(@headers): Add stdalign.h, stdbool.h and stdnoreturn.h.
	* conform/data/complex.h-data [C99-based standards] (cerf): Allow.
	[C99-based standards] (cerfc): Likewise.
	[C99-based standards] (cexp2): Likewise.
	[C99-based standards] (cexpm1): Likewise.
	[C99-based standards] (clog10): Likewise.
	[C99-based standards] (clog1p): Likewise.
	[C99-based standards] (clog2): Likewise.
	[C99-based standards] (clgamma): Likewise.
	[C99-based standards] (ctgamma): Likewise.
	[C99-based standards] (cerff): Likewise.
	[C99-based standards] (cerfcf): Likewise.
	[C99-based standards] (cexp2f): Likewise.
	[C99-based standards] (cexpm1f): Likewise.
	[C99-based standards] (clog10f): Likewise.
	[C99-based standards] (clog1pf): Likewise.
	[C99-based standards] (clog2f): Likewise.
	[C99-based standards] (clgammaf): Likewise.
	[C99-based standards] (ctgammaf): Likewise.
	[C99-based standards] (cerfl): Likewise.
	[C99-based standards] (cerfcl): Likewise.
	[C99-based standards] (cexp2l): Likewise.
	[C99-based standards] (cexpm1l): Likewise.
	[C99-based standards] (clog10l): Likewise.
	[C99-based standards] (clog1pl): Likewise.
	[C99-based standards] (clog2l): Likewise.
	[C99-based standards] (clgammal): Likewise.
	[C99-based standards] (ctgammal): Likewise.
	* conform/data/inttypes.h-data [C99-based standards]: Include
	stdint.h-data.  Remove all expectations for stdint.h contents.
	[C99-based standards] (PRI*): Do not allow.
	[C99-based standards] (SCN*): Likewise.
	[C99-based standards] (*_t): Likewise.
	[C99-based-standards] (PRId8): Expect macro.
	[C99-based-standards] (PRIi8): Likewise.
	[C99-based-standards] (PRIo8): Likewise.
	[C99-based-standards] (PRIu8): Likewise.
	[C99-based-standards] (PRIx8): Likewise.
	[C99-based-standards] (PRIX8): Likewise.
	[C99-based-standards] (SCNd8): Likewise.
	[C99-based-standards] (SCNi8): Likewise.
	[C99-based-standards] (SCNo8): Likewise.
	[C99-based-standards] (SCNu8): Likewise.
	[C99-based-standards] (SCNx8): Likewise.
	[C99-based-standards] (PRIdLEAST8): Likewise.
	[C99-based-standards] (PRIiLEAST8): Likewise.
	[C99-based-standards] (PRIoLEAST8): Likewise.
	[C99-based-standards] (PRIuLEAST8): Likewise.
	[C99-based-standards] (PRIxLEAST8): Likewise.
	[C99-based-standards] (PRIXLEAST8): Likewise.
	[C99-based-standards] (SCNdLEAST8): Likewise.
	[C99-based-standards] (SCNiLEAST8): Likewise.
	[C99-based-standards] (SCNoLEAST8): Likewise.
	[C99-based-standards] (SCNuLEAST8): Likewise.
	[C99-based-standards] (SCNxLEAST8): Likewise.
	[C99-based-standards] (PRIdFAST8): Likewise.
	[C99-based-standards] (PRIiFAST8): Likewise.
	[C99-based-standards] (PRIoFAST8): Likewise.
	[C99-based-standards] (PRIuFAST8): Likewise.
	[C99-based-standards] (PRIxFAST8): Likewise.
	[C99-based-standards] (PRIXFAST8): Likewise.
	[C99-based-standards] (SCNdFAST8): Likewise.
	[C99-based-standards] (SCNiFAST8): Likewise.
	[C99-based-standards] (SCNoFAST8): Likewise.
	[C99-based-standards] (SCNuFAST8): Likewise.
	[C99-based-standards] (SCNxFAST8): Likewise.
	[C99-based-standards] (PRId16): Likewise.
	[C99-based-standards] (PRIi16): Likewise.
	[C99-based-standards] (PRIo16): Likewise.
	[C99-based-standards] (PRIu16): Likewise.
	[C99-based-standards] (PRIx16): Likewise.
	[C99-based-standards] (PRIX16): Likewise.
	[C99-based-standards] (SCNd16): Likewise.
	[C99-based-standards] (SCNi16): Likewise.
	[C99-based-standards] (SCNo16): Likewise.
	[C99-based-standards] (SCNu16): Likewise.
	[C99-based-standards] (SCNx16): Likewise.
	[C99-based-standards] (PRIdLEAST16): Likewise.
	[C99-based-standards] (PRIiLEAST16): Likewise.
	[C99-based-standards] (PRIoLEAST16): Likewise.
	[C99-based-standards] (PRIuLEAST16): Likewise.
	[C99-based-standards] (PRIxLEAST16): Likewise.
	[C99-based-standards] (PRIXLEAST16): Likewise.
	[C99-based-standards] (SCNdLEAST16): Likewise.
	[C99-based-standards] (SCNiLEAST16): Likewise.
	[C99-based-standards] (SCNoLEAST16): Likewise.
	[C99-based-standards] (SCNuLEAST16): Likewise.
	[C99-based-standards] (SCNxLEAST16): Likewise.
	[C99-based-standards] (PRIdFAST16): Likewise.
	[C99-based-standards] (PRIiFAST16): Likewise.
	[C99-based-standards] (PRIoFAST16): Likewise.
	[C99-based-standards] (PRIuFAST16): Likewise.
	[C99-based-standards] (PRIxFAST16): Likewise.
	[C99-based-standards] (PRIXFAST16): Likewise.
	[C99-based-standards] (SCNdFAST16): Likewise.
	[C99-based-standards] (SCNiFAST16): Likewise.
	[C99-based-standards] (SCNoFAST16): Likewise.
	[C99-based-standards] (SCNuFAST16): Likewise.
	[C99-based-standards] (SCNxFAST16): Likewise.
	[C99-based-standards] (PRId32): Likewise.
	[C99-based-standards] (PRIi32): Likewise.
	[C99-based-standards] (PRIo32): Likewise.
	[C99-based-standards] (PRIu32): Likewise.
	[C99-based-standards] (PRIx32): Likewise.
	[C99-based-standards] (PRIX32): Likewise.
	[C99-based-standards] (SCNd32): Likewise.
	[C99-based-standards] (SCNi32): Likewise.
	[C99-based-standards] (SCNo32): Likewise.
	[C99-based-standards] (SCNu32): Likewise.
	[C99-based-standards] (SCNx32): Likewise.
	[C99-based-standards] (PRIdLEAST32): Likewise.
	[C99-based-standards] (PRIiLEAST32): Likewise.
	[C99-based-standards] (PRIoLEAST32): Likewise.
	[C99-based-standards] (PRIuLEAST32): Likewise.
	[C99-based-standards] (PRIxLEAST32): Likewise.
	[C99-based-standards] (PRIXLEAST32): Likewise.
	[C99-based-standards] (SCNdLEAST32): Likewise.
	[C99-based-standards] (SCNiLEAST32): Likewise.
	[C99-based-standards] (SCNoLEAST32): Likewise.
	[C99-based-standards] (SCNuLEAST32): Likewise.
	[C99-based-standards] (SCNxLEAST32): Likewise.
	[C99-based-standards] (PRIdFAST32): Likewise.
	[C99-based-standards] (PRIiFAST32): Likewise.
	[C99-based-standards] (PRIoFAST32): Likewise.
	[C99-based-standards] (PRIuFAST32): Likewise.
	[C99-based-standards] (PRIxFAST32): Likewise.
	[C99-based-standards] (PRIXFAST32): Likewise.
	[C99-based-standards] (SCNdFAST32): Likewise.
	[C99-based-standards] (SCNiFAST32): Likewise.
	[C99-based-standards] (SCNoFAST32): Likewise.
	[C99-based-standards] (SCNuFAST32): Likewise.
	[C99-based-standards] (SCNxFAST32): Likewise.
	[C99-based-standards] (PRId64): Likewise.
	[C99-based-standards] (PRIi64): Likewise.
	[C99-based-standards] (PRIo64): Likewise.
	[C99-based-standards] (PRIu64): Likewise.
	[C99-based-standards] (PRIx64): Likewise.
	[C99-based-standards] (PRIX64): Likewise.
	[C99-based-standards] (SCNd64): Likewise.
	[C99-based-standards] (SCNi64): Likewise.
	[C99-based-standards] (SCNo64): Likewise.
	[C99-based-standards] (SCNu64): Likewise.
	[C99-based-standards] (SCNx64): Likewise.
	[C99-based-standards] (PRIdLEAST64): Likewise.
	[C99-based-standards] (PRIiLEAST64): Likewise.
	[C99-based-standards] (PRIoLEAST64): Likewise.
	[C99-based-standards] (PRIuLEAST64): Likewise.
	[C99-based-standards] (PRIxLEAST64): Likewise.
	[C99-based-standards] (PRIXLEAST64): Likewise.
	[C99-based-standards] (SCNdLEAST64): Likewise.
	[C99-based-standards] (SCNiLEAST64): Likewise.
	[C99-based-standards] (SCNoLEAST64): Likewise.
	[C99-based-standards] (SCNuLEAST64): Likewise.
	[C99-based-standards] (SCNxLEAST64): Likewise.
	[C99-based-standards] (PRIdFAST64): Likewise.
	[C99-based-standards] (PRIiFAST64): Likewise.
	[C99-based-standards] (PRIoFAST64): Likewise.
	[C99-based-standards] (PRIuFAST64): Likewise.
	[C99-based-standards] (PRIxFAST64): Likewise.
	[C99-based-standards] (PRIXFAST64): Likewise.
	[C99-based-standards] (SCNdFAST64): Likewise.
	[C99-based-standards] (SCNiFAST64): Likewise.
	[C99-based-standards] (SCNoFAST64): Likewise.
	[C99-based-standards] (SCNuFAST64): Likewise.
	[C99-based-standards] (SCNxFAST64): Likewise.
	[C99-based-standards] (PRIdMAX): Likewise.
	[C99-based-standards] (PRIiMAX): Likewise.
	[C99-based-standards] (PRIoMAX): Likewise.
	[C99-based-standards] (PRIuMAX): Likewise.
	[C99-based-standards] (PRIxMAX): Likewise.
	[C99-based-standards] (PRIXMAX): Likewise.
	[C99-based-standards] (SCNdMAX): Likewise.
	[C99-based-standards] (SCNiMAX): Likewise.
	[C99-based-standards] (SCNoMAX): Likewise.
	[C99-based-standards] (SCNuMAX): Likewise.
	[C99-based-standards] (SCNxMAX): Likewise.
	[C99-based-standards] (PRIdPTR): Likewise.
	[C99-based-standards] (PRIiPTR): Likewise.
	[C99-based-standards] (PRIoPTR): Likewise.
	[C99-based-standards] (PRIuPTR): Likewise.
	[C99-based-standards] (PRIxPTR): Likewise.
	[C99-based-standards] (PRIXPTR): Likewise.
	[C99-based-standards] (SCNdPTR): Likewise.
	[C99-based-standards] (SCNiPTR): Likewise.
	[C99-based-standards] (SCNoPTR): Likewise.
	[C99-based-standards] (SCNuPTR): Likewise.
	[C99-based-standards] (SCNxPTR): Likewise.
	* conform/data/iso646.h-data [ISO C standards] (*_t): Do not
	allow.
	* conform/data/stdint.h-data: Update comments to clarify
	requirements.
	[C99-based standards] (INT8_MIN): Use macro-int-constant.  Specify
	type.
	[C99-based standards] (INT8_MAX): Likewise.
	[C99-based standards] (INT16_MIN): Likewise.
	[C99-based standards] (INT16_MAX): Likewise.
	[C99-based standards] (INT32_MIN): Likewise.
	[C99-based standards] (INT32_MAX): Likewise.
	[C99-based standards] (INT64_MIN): Likewise.
	[C99-based standards] (INT64_MAX): Likewise.
	[C99-based standards] (UINT8_MAX): Likewise.
	[C99-based standards] (UINT16_MAX): Likewise.
	[C99-based standards] (UINT32_MAX): Likewise.
	[C99-based standards] (UINT64_MAX): Likewise.
	[C99-based standards] (INT_LEAST8_MIN): Likewise.
	[C99-based standards] (INT_LEAST8_MAX): Likewise.
	[C99-based standards] (INT_LEAST16_MIN): Likewise.
	[C99-based standards] (INT_LEAST16_MAX): Likewise.
	[C99-based standards] (INT_LEAST32_MIN): Likewise.
	[C99-based standards] (INT_LEAST32_MAX): Likewise.
	[C99-based standards] (INT_LEAST64_MIN): Likewise.
	[C99-based standards] (INT_LEAST64_MAX): Likewise.
	[C99-based standards] (UINT_LEAST8_MAX): Likewise.
	[C99-based standards] (UINT_LEAST16_MAX): Likewise.
	[C99-based standards] (UINT_LEAST32_MAX): Likewise.
	[C99-based standards] (UINT_LEAST64_MAX): Likewise.
	[C99-based standards] (INT_FAST8_MIN): Likewise.
	[C99-based standards] (INT_FAST8_MAX): Likewise.
	[C99-based standards] (INT_FAST16_MIN): Likewise.
	[C99-based standards] (INT_FAST16_MAX): Likewise.
	[C99-based standards] (INT_FAST32_MIN): Likewise.
	[C99-based standards] (INT_FAST32_MAX): Likewise.
	[C99-based standards] (INT_FAST64_MIN): Likewise.
	[C99-based standards] (INT_FAST64_MAX): Likewise.
	[C99-based standards] (UINT_FAST8_MAX): Likewise.
	[C99-based standards] (UINT_FAST16_MAX): Likewise.
	[C99-based standards] (UINT_FAST32_MAX): Likewise.
	[C99-based standards] (UINT_FAST64_MAX): Likewise.
	[C99-based standards] (INTPTR_MIN): Likewise.
	[C99-based standards] (INTPTR_MAX): Likewise.
	[C99-based standards] (UINTPTR_MAX): Likewise.
	[C99-based standards] (INTMAX_MIN): Likewise.
	[C99-based standards] (INTMAX_MAX): Likewise.
	[C99-based standards] (UINTMAX_MAX): Likewise.
	[C99-based standards] (PTRDIFF_MIN): Likewise.
	[C99-based standards] (PTRDIFF_MAX): Likewise.
	[C99-based standards] (SIG_ATOMIC_MAX): Likewise.
	[C99-based standards] (SIZE_MAX): Likewise.
	[C99-based standards] (WCHAR_MAX): Likewise.
	[C99-based standards] (WINT_MAX): Likewise.
	[C99-based standards] (SIG_ATOMIC_MIN): Likewise.  Do not specify
	constraint on value.
	[C99-based standards] (WCHAR_MIN): Likewise.
	[C99-based standards] (WINT_MIN): Likewise.
	[C99-based standards] (*_t): Allow.
	* conform/data/tgmath.h-data [XOPEN2K || POSIX2008]: Change
	condition to [!ISO && !POSIX && !XPG3 && !XPG4 && !UNIX98].
	Include math.h-data and complex.h-data.  Remove all expectations
	of math.h and complex.h contents.
	* conform/data/uchar.h-data [ISO11] (c16rtomb): Remove stray "16"
	at end of line.
	* conform/data/wchar.h-data [!ISO && !POSIX && !XPG3 && !XPG4]
	(struct tm): Expect tag.
	[C99-based-standards] (wcstof): Expect function.
	[C99-based-standards] (wcstold): Likewise.
	[C99-based-standards] (wcstoll): Likewise.
	[C99-based-standards] (wcstoull): Likewise.
	[!ISO && !POSIX && !XPG3 && !XPG4] (WCHAR_MIN): Use
	macro-int-constant.  Specify type.
	[!ISO && !POSIX && !XPG3 && !XPG4] (WCHAR_MAX): Likewise.  Specify
	constraint on value.
	[!ISO && !POSIX && !XPG3 && !XPG4] (WEOF): Use macro-constant.
	Specify type.
	[!ISO && !POSIX && !XPG3 && !XPG4] (NULL): Use macro-constant.
	Specify value.
	[ISO C standards]: Do not allow headers.
	[!ISO && !POSIX && !XPG3 && !XPG4] (wcs*): Change to
	wcs[abcdefghijklmnopqrstuvwxyz]*.
	[ISO C standards] (*_t): Do not allow.
	* conform/data/wctype.h-data [C99-based standards] (iswblank):
	Expect function.
	[XOPEN2K8 || POSIX2008] (iswblank_l): Likewise.
	[!ISO && !POSIX && !XPG3 && !XPG4] (WEOF): Use macro-constant.
	Specify type.
	[ISO C standards]: Do not allow headers.
	[!ISO && !POSIX && !XPG3 && !XPG4] (is*): Change to
	is[abcdefghijklmnopqrstuvwxyz]*.
	[!ISO && !POSIX && !XPG3 && !XPG4] (to*): Change to
	to[abcdefghijklmnopqrstuvwxyz]*.
	[ISO C standards] (*_t): Do not allow.
	* conform/data/stdalign.h-data: New file.
	* conform/data/stdbool.h-data: Likewise.
	* conform/data/stdnoreturn.h-data: Likewise.

diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index af21941..ec2e9c3 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -20,16 +20,16 @@ if (@headers == ()) {
 	      "sys/stat.h", "sys/socket.h", "sys/shm.h", "sys/sem.h",
 	      "sys/select.h", "sys/resource.h", "sys/msg.h", "sys/mman.h",
 	      "sys/ipc.h", "syslog.h", "stropts.h", "strings.h", "string.h",
-	      "stdlib.h", "stdio.h", "stdint.h", "stddef.h", "stdarg.h",
-	      "spawn.h", "signal.h", "setjmp.h", "semaphore.h", "search.h",
-	      "sched.h", "regex.h", "pwd.h", "pthread.h", "poll.h",
-	      "nl_types.h", "netinet/tcp.h", "netinet/in.h", "net/if.h",
-	      "netdb.h", "ndbm.h", "mqueue.h", "monetary.h", "math.h",
-	      "locale.h", "libgen.h", "limits.h", "langinfo.h", "iso646.h",
-	      "inttypes.h", "iconv.h", "grp.h", "glob.h", "ftw.h", "fnmatch.h",
-	      "fmtmsg.h", "float.h", "fenv.h", "fcntl.h", "errno.h", "dlfcn.h",
-	      "dirent.h", "ctype.h", "cpio.h", "complex.h", "assert.h",
-	      "arpa/inet.h", "aio.h");
+	      "stdnoreturn.h", "stdlib.h", "stdio.h", "stdint.h", "stddef.h",
+	      "stdbool.h", "stdarg.h", "stdalign.h", "spawn.h", "signal.h",
+	      "setjmp.h", "semaphore.h", "search.h", "sched.h", "regex.h",
+	      "pwd.h", "pthread.h", "poll.h", "nl_types.h", "netinet/tcp.h",
+	      "netinet/in.h", "net/if.h", "netdb.h", "ndbm.h", "mqueue.h",
+	      "monetary.h", "math.h", "locale.h", "libgen.h", "limits.h",
+	      "langinfo.h", "iso646.h", "inttypes.h", "iconv.h", "grp.h",
+	      "glob.h", "ftw.h", "fnmatch.h", "fmtmsg.h", "float.h", "fenv.h",
+	      "fcntl.h", "errno.h", "dlfcn.h", "dirent.h", "ctype.h", "cpio.h",
+	      "complex.h", "assert.h", "arpa/inet.h", "aio.h");
 }
 
 $CFLAGS{"ISO"} = "-ansi";
@@ -777,7 +777,7 @@ while ($#headers >= 0) {
   while ($#allowheader >= 0) {
     my($ah) = pop @allowheader;
 
-    open (ALLOW, "$CC -E -D$standard - < data/$ah-data |");
+    open (ALLOW, "$CC -E -D$standard -x c data/$ah-data |");
     acontrol: while (<ALLOW>) {
       chop;
       next acontrol if (/^#/);
diff --git a/conform/data/complex.h-data b/conform/data/complex.h-data
index 8abfb50..7de888f 100644
--- a/conform/data/complex.h-data
+++ b/conform/data/complex.h-data
@@ -79,4 +79,35 @@ macro-function {double complex} CMPLX (double, double)
 macro-function {float complex} CMPLXF (float, float)
 macro-function {long double complex} CMPLXL (long double, long double)
 # endif
+
+allow cerf
+allow cerfc
+allow cexp2
+allow cexpm1
+allow clog10
+allow clog1p
+allow clog2
+allow clgamma
+allow ctgamma
+
+allow cerff
+allow cerfcf
+allow cexp2f
+allow cexpm1f
+allow clog10f
+allow clog1pf
+allow clog2f
+allow clgammaf
+allow ctgammaf
+
+allow cerfl
+allow cerfcl
+allow cexp2l
+allow cexpm1l
+allow clog10l
+allow clog1pl
+allow clog2l
+allow clgammal
+allow ctgammal
+
 #endif
diff --git a/conform/data/inttypes.h-data b/conform/data/inttypes.h-data
index 5ef54f6..8c076df 100644
--- a/conform/data/inttypes.h-data
+++ b/conform/data/inttypes.h-data
@@ -1,14 +1,5 @@
 #if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
-type int8_t
-type int16_t
-type int32_t
-type int64_t
-type uint8_t
-type uint16_t
-type uint32_t
-type uint64_t
-type intptr_t
-type uintptr_t
+#include "stdint.h-data"
 
 type imaxdiv_t
 element imaxdiv_t intmax_t rem
@@ -21,125 +12,166 @@ function uintmax_t strtoumax (const char*, char**, int)
 function intmax_t wcstoimax (const __gwchar_t*, __gwchar_t**, int)
 function uintmax_t wcstoumax (const __gwchar_t*, __gwchar_t**, int)
 
-allow PRI*
-allow SCN*
-allow *_t
+macro PRId8
+macro PRIi8
+macro PRIo8
+macro PRIu8
+macro PRIx8
+macro PRIX8
+macro SCNd8
+macro SCNi8
+macro SCNo8
+macro SCNu8
+macro SCNx8
+macro PRIdLEAST8
+macro PRIiLEAST8
+macro PRIoLEAST8
+macro PRIuLEAST8
+macro PRIxLEAST8
+macro PRIXLEAST8
+macro SCNdLEAST8
+macro SCNiLEAST8
+macro SCNoLEAST8
+macro SCNuLEAST8
+macro SCNxLEAST8
+macro PRIdFAST8
+macro PRIiFAST8
+macro PRIoFAST8
+macro PRIuFAST8
+macro PRIxFAST8
+macro PRIXFAST8
+macro SCNdFAST8
+macro SCNiFAST8
+macro SCNoFAST8
+macro SCNuFAST8
+macro SCNxFAST8
+
+macro PRId16
+macro PRIi16
+macro PRIo16
+macro PRIu16
+macro PRIx16
+macro PRIX16
+macro SCNd16
+macro SCNi16
+macro SCNo16
+macro SCNu16
+macro SCNx16
+macro PRIdLEAST16
+macro PRIiLEAST16
+macro PRIoLEAST16
+macro PRIuLEAST16
+macro PRIxLEAST16
+macro PRIXLEAST16
+macro SCNdLEAST16
+macro SCNiLEAST16
+macro SCNoLEAST16
+macro SCNuLEAST16
+macro SCNxLEAST16
+macro PRIdFAST16
+macro PRIiFAST16
+macro PRIoFAST16
+macro PRIuFAST16
+macro PRIxFAST16
+macro PRIXFAST16
+macro SCNdFAST16
+macro SCNiFAST16
+macro SCNoFAST16
+macro SCNuFAST16
+macro SCNxFAST16
+
+macro PRId32
+macro PRIi32
+macro PRIo32
+macro PRIu32
+macro PRIx32
+macro PRIX32
+macro SCNd32
+macro SCNi32
+macro SCNo32
+macro SCNu32
+macro SCNx32
+macro PRIdLEAST32
+macro PRIiLEAST32
+macro PRIoLEAST32
+macro PRIuLEAST32
+macro PRIxLEAST32
+macro PRIXLEAST32
+macro SCNdLEAST32
+macro SCNiLEAST32
+macro SCNoLEAST32
+macro SCNuLEAST32
+macro SCNxLEAST32
+macro PRIdFAST32
+macro PRIiFAST32
+macro PRIoFAST32
+macro PRIuFAST32
+macro PRIxFAST32
+macro PRIXFAST32
+macro SCNdFAST32
+macro SCNiFAST32
+macro SCNoFAST32
+macro SCNuFAST32
+macro SCNxFAST32
+
+macro PRId64
+macro PRIi64
+macro PRIo64
+macro PRIu64
+macro PRIx64
+macro PRIX64
+macro SCNd64
+macro SCNi64
+macro SCNo64
+macro SCNu64
+macro SCNx64
+macro PRIdLEAST64
+macro PRIiLEAST64
+macro PRIoLEAST64
+macro PRIuLEAST64
+macro PRIxLEAST64
+macro PRIXLEAST64
+macro SCNdLEAST64
+macro SCNiLEAST64
+macro SCNoLEAST64
+macro SCNuLEAST64
+macro SCNxLEAST64
+macro PRIdFAST64
+macro PRIiFAST64
+macro PRIoFAST64
+macro PRIuFAST64
+macro PRIxFAST64
+macro PRIXFAST64
+macro SCNdFAST64
+macro SCNiFAST64
+macro SCNoFAST64
+macro SCNuFAST64
+macro SCNxFAST64
+
+macro PRIdMAX
+macro PRIiMAX
+macro PRIoMAX
+macro PRIuMAX
+macro PRIxMAX
+macro PRIXMAX
+macro SCNdMAX
+macro SCNiMAX
+macro SCNoMAX
+macro SCNuMAX
+macro SCNxMAX
+
+macro PRIdPTR
+macro PRIiPTR
+macro PRIoPTR
+macro PRIuPTR
+macro PRIxPTR
+macro PRIXPTR
+macro SCNdPTR
+macro SCNiPTR
+macro SCNoPTR
+macro SCNuPTR
+macro SCNxPTR
 
-// Now the content of <stdint.h>.  Update this whenever <stdint.h> changed.
-type int8_t
-type int16_t
-type int32_t
-type int64_t
-type uint8_t
-type uint16_t
-type uint32_t
-type uint64_t
-
-type int_least8_t
-type int_least16_t
-type int_least32_t
-type int_least64_t
-type uint_least8_t
-type uint_least16_t
-type uint_least32_t
-type uint_least64_t
-
-type int_fast8_t
-type int_fast16_t
-type int_fast32_t
-type int_fast64_t
-type uint_fast8_t
-type uint_fast16_t
-type uint_fast32_t
-type uint_fast64_t
-
-type intptr_t
-type uintptr_t
-
-type intmax_t
-type uintmax_t
-
-constant INT8_MIN == -128
-constant INT8_MAX == 127
-constant INT16_MIN == -32768
-constant INT16_MAX == 32767
-constant INT32_MIN == -2147483647-1
-constant INT32_MAX == 2147483647
-constant INT64_MIN == -9223372036854775807LL-1
-constant INT64_MAX == 9223372036854775807LL
-
-constant UINT8_MAX == 255
-constant UINT16_MAX == 65535
-constant UINT32_MAX == 4294967295U
-constant UINT64_MAX == 18446744073709551615ULL
-
-constant INT_LEAST8_MIN <= -128
-constant INT_LEAST8_MAX >= 127
-constant INT_LEAST16_MIN <= -32768
-constant INT_LEAST16_MAX >= 32767
-constant INT_LEAST32_MIN <= -2147483647-1
-constant INT_LEAST32_MAX >= 2147483647
-constant INT_LEAST64_MIN <= -9223372036854775807LL-1
-constant INT_LEAST64_MAX >= 9223372036854775807LL
-
-constant UINT_LEAST8_MAX >= 255
-constant UINT_LEAST16_MAX >= 65535
-constant UINT_LEAST32_MAX >= 4294967295U
-constant UINT_LEAST64_MAX >= 18446744073709551615ULL
-
-constant INT_FAST8_MIN <= -128
-constant INT_FAST8_MAX >= 127
-constant INT_FAST16_MIN <= -32768
-constant INT_FAST16_MAX >= 32767
-constant INT_FAST32_MIN <= -2147483647-1
-constant INT_FAST32_MAX >= 2147483647
-constant INT_FAST64_MIN <= -9223372036854775807LL-1
-constant INT_FAST64_MAX >= 9223372036854775807LL
-
-constant UINT_FAST8_MAX >= 255
-constant UINT_FAST16_MAX >= 65535
-constant UINT_FAST32_MAX >= 4294967295U
-constant UINT_FAST64_MAX >= 18446744073709551615ULL
-
-constant INTPTR_MIN <= -32768
-constant INTPTR_MAX >= 32767
-
-constant UINTPTR_MAX >= 65535
-
-constant INTMAX_MIN <= -9223372036854775807LL-1
-constant INTMAX_MAX >= 9223372036854775807LL
-
-constant UINTMAX_MAX >= 18446744073709551615ULL
-
-constant PTRDIFF_MIN <= -65535
-constant PTRDIFF_MAX >= 65535
-
-constant SIG_ATOMIC_MIN <= -127
-constant SIG_ATOMIC_MAX >= 127
-
-constant SIZE_MAX >= 65535
-
-constant WCHAR_MIN <= -127
-constant WCHAR_MAX >= 127
-
-constant WINT_MIN <= -127
-constant WINT_MAX >= 127
-
-macro INT8_C
-macro INT16_C
-macro INT32_C
-macro INT64_C
-macro UINT8_C
-macro UINT16_C
-macro UINT32_C
-macro UINT64_C
-macro INTMAX_C
-macro UINTMAX_C
-
-// The following expressions are not entirely correct but the current
-// poorfnmatch implementation doesn't grok the right form.
-allow INT*
-allow UINT*
 allow PRI[Xa-z]*
 allow SCN[Xa-z]*
 #endif
diff --git a/conform/data/iso646.h-data b/conform/data/iso646.h-data
index 7ac7d09..d4afaa5 100644
--- a/conform/data/iso646.h-data
+++ b/conform/data/iso646.h-data
@@ -11,5 +11,7 @@ macro or_eq
 macro xor
 macro xor_eq
 
+#if !defined ISO && !defined ISO99 && !defined ISO11
 allow *_t
 #endif
+#endif
diff --git a/conform/data/stdalign.h-data b/conform/data/stdalign.h-data
new file mode 100644
index 0000000..edc2310
--- /dev/null
+++ b/conform/data/stdalign.h-data
@@ -0,0 +1,6 @@
+#if defined ISO11
+macro alignas
+macro alignof
+macro-int-constant __alignas_is_defined {int} == 1
+macro-int-constant __alignof_is_defined {int} == 1
+#endif
diff --git a/conform/data/stdbool.h-data b/conform/data/stdbool.h-data
new file mode 100644
index 0000000..9ef218c
--- /dev/null
+++ b/conform/data/stdbool.h-data
@@ -0,0 +1,10 @@
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
+macro bool
+macro-int-constant true {int} == 1
+macro-int-constant false {int} == 0
+macro-int-constant __bool_true_false_are_defined {int} == 1
+
+#if !defined ISO && !defined ISO99 && !defined ISO11
+allow *_t
+#endif
+#endif
diff --git a/conform/data/stdint.h-data b/conform/data/stdint.h-data
index 99bdf22..f668951 100644
--- a/conform/data/stdint.h-data
+++ b/conform/data/stdint.h-data
@@ -1,4 +1,5 @@
 #if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
+// The requirements for some types and corresponding macros are from POSIX.
 type int8_t
 type int16_t
 type int32_t
@@ -32,71 +33,71 @@ type uintptr_t
 type intmax_t
 type uintmax_t
 
-constant INT8_MIN == -128
-constant INT8_MAX == 127
-constant INT16_MIN == -32768
-constant INT16_MAX == 32767
-constant INT32_MIN == -2147483647-1
-constant INT32_MAX == 2147483647
-constant INT64_MIN == -9223372036854775807LL-1
-constant INT64_MAX == 9223372036854775807LL
+macro-int-constant INT8_MIN {promoted:int8_t} == -128
+macro-int-constant INT8_MAX {promoted:int8_t} == 127
+macro-int-constant INT16_MIN {promoted:int16_t} == -32768
+macro-int-constant INT16_MAX {promoted:int16_t} == 32767
+macro-int-constant INT32_MIN {promoted:int32_t} == -2147483647-1
+macro-int-constant INT32_MAX {promoted:int32_t} == 2147483647
+macro-int-constant INT64_MIN {promoted:int64_t} == -9223372036854775807LL-1
+macro-int-constant INT64_MAX {promoted:int64_t} == 9223372036854775807LL
 
-constant UINT8_MAX == 255
-constant UINT16_MAX == 65535
-constant UINT32_MAX == 4294967295U
-constant UINT64_MAX == 18446744073709551615ULL
+macro-int-constant UINT8_MAX {promoted:uint8_t} == 255
+macro-int-constant UINT16_MAX {promoted:uint16_t} == 65535
+macro-int-constant UINT32_MAX {promoted:uint32_t} == 4294967295U
+macro-int-constant UINT64_MAX {promoted:uint64_t} == 18446744073709551615ULL
 
-constant INT_LEAST8_MIN <= -128
-constant INT_LEAST8_MAX >= 127
-constant INT_LEAST16_MIN <= -32768
-constant INT_LEAST16_MAX >= 32767
-constant INT_LEAST32_MIN <= -2147483647-1
-constant INT_LEAST32_MAX >= 2147483647
-constant INT_LEAST64_MIN <= -9223372036854775807LL-1
-constant INT_LEAST64_MAX >= 9223372036854775807LL
+macro-int-constant INT_LEAST8_MIN {promoted:int_least8_t} <= -128
+macro-int-constant INT_LEAST8_MAX {promoted:int_least8_t} >= 127
+macro-int-constant INT_LEAST16_MIN {promoted:int_least16_t} <= -32768
+macro-int-constant INT_LEAST16_MAX {promoted:int_least16_t} >= 32767
+macro-int-constant INT_LEAST32_MIN {promoted:int_least32_t} <= -2147483647-1
+macro-int-constant INT_LEAST32_MAX {promoted:int_least32_t} >= 2147483647
+macro-int-constant INT_LEAST64_MIN {promoted:int_least64_t} <= -9223372036854775807LL-1
+macro-int-constant INT_LEAST64_MAX {promoted:int_least64_t} >= 9223372036854775807LL
 
-constant UINT_LEAST8_MAX >= 255
-constant UINT_LEAST16_MAX >= 65535
-constant UINT_LEAST32_MAX >= 4294967295U
-constant UINT_LEAST64_MAX >= 18446744073709551615ULL
+macro-int-constant UINT_LEAST8_MAX {promoted:uint_least8_t} >= 255
+macro-int-constant UINT_LEAST16_MAX {promoted:uint_least16_t} >= 65535
+macro-int-constant UINT_LEAST32_MAX {promoted:uint_least32_t} >= 4294967295U
+macro-int-constant UINT_LEAST64_MAX {promoted:uint_least64_t} >= 18446744073709551615ULL
 
-constant INT_FAST8_MIN <= -128
-constant INT_FAST8_MAX >= 127
-constant INT_FAST16_MIN <= -32768
-constant INT_FAST16_MAX >= 32767
-constant INT_FAST32_MIN <= -2147483647-1
-constant INT_FAST32_MAX >= 2147483647
-constant INT_FAST64_MIN <= -9223372036854775807LL-1
-constant INT_FAST64_MAX >= 9223372036854775807LL
+macro-int-constant INT_FAST8_MIN {promoted:int_fast8_t} <= -128
+macro-int-constant INT_FAST8_MAX {promoted:int_fast8_t} >= 127
+macro-int-constant INT_FAST16_MIN {promoted:int_fast16_t} <= -32768
+macro-int-constant INT_FAST16_MAX {promoted:int_fast16_t} >= 32767
+macro-int-constant INT_FAST32_MIN {promoted:int_fast32_t} <= -2147483647-1
+macro-int-constant INT_FAST32_MAX {promoted:int_fast32_t} >= 2147483647
+macro-int-constant INT_FAST64_MIN {promoted:int_fast64_t} <= -9223372036854775807LL-1
+macro-int-constant INT_FAST64_MAX {promoted:int_fast64_t} >= 9223372036854775807LL
 
-constant UINT_FAST8_MAX >= 255
-constant UINT_FAST16_MAX >= 65535
-constant UINT_FAST32_MAX >= 4294967295U
-constant UINT_FAST64_MAX >= 18446744073709551615ULL
+macro-int-constant UINT_FAST8_MAX {promoted:uint_fast8_t} >= 255
+macro-int-constant UINT_FAST16_MAX {promoted:uint_fast16_t} >= 65535
+macro-int-constant UINT_FAST32_MAX {promoted:uint_fast32_t} >= 4294967295U
+macro-int-constant UINT_FAST64_MAX {promoted:uint_fast64_t} >= 18446744073709551615ULL
 
-constant INTPTR_MIN <= -32768
-constant INTPTR_MAX >= 32767
+macro-int-constant INTPTR_MIN {promoted:intptr_t} <= -32768
+macro-int-constant INTPTR_MAX {promoted:intptr_t} >= 32767
 
-constant UINTPTR_MAX >= 65535
+macro-int-constant UINTPTR_MAX {promoted:uintptr_t} >= 65535
 
-constant INTMAX_MIN <= -9223372036854775807LL-1
-constant INTMAX_MAX >= 9223372036854775807LL
+macro-int-constant INTMAX_MIN {promoted:intmax_t} <= -9223372036854775807LL-1
+macro-int-constant INTMAX_MAX {promoted:intmax_t} >= 9223372036854775807LL
 
-constant UINTMAX_MAX >= 18446744073709551615ULL
+macro-int-constant UINTMAX_MAX {promoted:uintmax_t} >= 18446744073709551615ULL
 
-constant PTRDIFF_MIN <= -65535
-constant PTRDIFF_MAX >= 65535
+macro-int-constant PTRDIFF_MIN {promoted:__PTRDIFF_TYPE__} <= -65535
+macro-int-constant PTRDIFF_MAX {promoted:__PTRDIFF_TYPE__} >= 65535
 
-constant SIG_ATOMIC_MIN <= -127
-constant SIG_ATOMIC_MAX >= 127
+macro-int-constant SIG_ATOMIC_MIN {promoted:__SIG_ATOMIC_TYPE__}
+macro-int-constant SIG_ATOMIC_MAX {promoted:__SIG_ATOMIC_TYPE__} >= 127
 
-constant SIZE_MAX >= 65535
+macro-int-constant SIZE_MAX {promoted:__SIZE_TYPE__} >= 65535
 
-constant WCHAR_MIN <= -127
-constant WCHAR_MAX >= 127
+macro-int-constant WCHAR_MIN {promoted:__WCHAR_TYPE__}
+macro-int-constant WCHAR_MAX {promoted:__WCHAR_TYPE__} >= 127
 
-constant WINT_MIN <= -127
-constant WINT_MAX >= 127
+macro-int-constant WINT_MIN {promoted:__WINT_TYPE__}
+macro-int-constant WINT_MAX {promoted:__WINT_TYPE__} >= 127
 
 macro INT8_C
 macro INT16_C
@@ -110,7 +111,9 @@ macro INTMAX_C
 macro UINTMAX_C
 
 // The following expressions are not entirely correct but the current
-// fnamtch implementation doesn't grok the right form.
+// poorfnmatch implementation doesn't grok the right forms (INT*_MAX,
+// INT*_MIN, INT*_C, UINT*_MAX, UINT*_MIN, UINT*_C, int*_t, uint*_t).
 allow INT*
 allow UINT*
+allow *_t
 #endif
diff --git a/conform/data/stdnoreturn.h-data b/conform/data/stdnoreturn.h-data
new file mode 100644
index 0000000..77b9a58
--- /dev/null
+++ b/conform/data/stdnoreturn.h-data
@@ -0,0 +1,3 @@
+#if defined ISO11
+macro noreturn
+#endif
diff --git a/conform/data/tgmath.h-data b/conform/data/tgmath.h-data
index ce4f301..5f72502 100644
--- a/conform/data/tgmath.h-data
+++ b/conform/data/tgmath.h-data
@@ -1,364 +1,7 @@
-#if defined XOPEN2K || defined POSIX2008
-// <math.h>
-macro fpclassify
-macro isfinite
-macro isinf
-macro isnan
-macro isnormal
-macro signbit
-macro isgreater
-macro isgreaterequal
-macro isless
-macro islessequal
-macro islessgreater
-macro isunordered
+#if !defined ISO && !defined POSIX && !defined XPG3 && !defined XPG4 && !defined UNIX98
+#include "math.h-data"
+#include "complex.h-data"
 
-#ifndef POSIX2008
-constant M_E
-constant M_LOG2E
-constant M_LOG10E
-constant M_LN2
-constant M_LN10
-constant M_PI
-constant M_PI_2
-constant M_PI_4
-constant M_1_PI
-constant M_2_PI
-constant M_2_SQRTPI
-constant M_SQRT2
-constant M_SQRT1_2
-
-constant MAXFLOAT
-#endif
-constant HUGE_VAL
-constant HUGE_VALF
-constant HUGE_VALL
-constant INFINITY
-constant NAN
-
-macro FP_INFINITE
-macro FP_NAN
-macro FP_NORMAL
-macro FP_SUBNORMAL
-macro FP_ZERO
-
-optional-macro FP_FAST_FMA
-optional-macro FP_FAST_FMAF
-optional-macro FP_FAST_FMAL
-
-constant FP_ILOGB0
-constant FP_ILOGBNAN
-
-macro MATH_ERRNO == 1
-macro MATH_ERREXCEPT == 2
-
-macro math_errhandling
-
-function double acos (double)
-function double asin (double)
-function double atan (double)
-function double atan2 (double, double)
-function double ceil (double)
-function double copysign (double, double)
-function double cos (double)
-function double cosh (double)
-function double exp (double)
-function double exp2 (double)
-function double fabs (double)
-function double floor (double)
-function double fmod (double, double)
-function double frexp (double, int*)
-function double ldexp (double, int)
-function double log (double)
-function double log10 (double)
-function double log2 (double)
-function double modf (double, double*)
-function double pow (double, double)
-function double sin (double)
-function double sinh (double)
-function double sqrt (double)
-function double tan (double)
-function double tanh (double)
-function double erf (double)
-function double erfc (double)
-#if defined XPG3 || defined XPG4 || defined UNIX98
-function double gamma (double)
-#endif
-function double hypot (double, double)
-#if !defined POSIX && !defined POSIX2008
-function double j0 (double)
-function double j1 (double)
-function double jn (int, double)
-#endif
-function double lgamma (double)
-function double tgamma (double)
-#if !defined POSIX && !defined POSIX2008
-function double y0 (double)
-function double y1 (double)
-function double yn (int, double)
-#endif
-function double acosh (double)
-function double asinh (double)
-function double atanh (double)
-function double cbrt (double)
-function double expm1 (double)
-function int ilogb (double)
-function double log1p (double)
-function double logb (double)
-function double nextafter (double, double)
-function double nexttoward (double, long double)
-function double nearbyint (double)
-function double remainder (double, double)
-function double rint (double)
-function double round (double)
-function double trunc (double)
-function long lrint (double)
-function {long long} llrint (double)
-function long lround (double)
-function {long long} llround (double)
-function double remquo (double, double, int*)
-#if defined XPG3 && defined XPG4 && defined UNIX98 && defined XOPEN2K
-function double scalb (double, double)
-#endif
-function double scalbn (double, int)
-function double scalbln (double, long)
-function double fdim (double, double)
-function double fmax (double, double)
-function double fmin (double, double)
-function double fma (double, double, double)
-function double nan (const char*)
-
-// variable signgam
-allow signgam
-
-function float acosf (float)
-function float asinf (float)
-function float atanf (float)
-function float atan2f (float, float)
-function float ceilf (float)
-function float copysignf (float, float)
-function float cosf (float)
-function float coshf (float)
-function float expf (float)
-function float exp2f (float)
-function float fabsf (float)
-function float floorf (float)
-function float fmodf (float, float)
-function float frexpf (float, int*)
-function float ldexpf (float, int)
-function float logf (float)
-function float log10f (float)
-function float log2f (float)
-function float modff (float, float*)
-function float powf (float, float)
-function float sinf (float)
-function float sinhf (float)
-function float sqrtf (float)
-function float tanf (float)
-function float tanhf (float)
-function float erff (float)
-function float erfcf (float)
-#if defined XPG3 || defined XPG4 || defined UNIX98
-function float gammaf (float)
-#endif
-function float hypotf (float, float)
-#if !defined POSIX && !defined POSIX2008
-function float j0f (float)
-function float j1f (float)
-function float jnf (int, float)
-#endif
-function float lgammaf (float)
-function float tgammaf (float)
-#if !defined POSIX && !defined POSIX2008
-function float y0f (float)
-function float y1f (float)
-function float ynf (int, float)
-#endif
-function float acoshf (float)
-function float asinhf (float)
-function float atanhf (float)
-function float cbrtf (float)
-function float expm1f (float)
-function int ilogbf (float)
-function float log1pf (float)
-function float logbf (float)
-function float nextafterf (float, float)
-function float nexttowardf (float, long double)
-function float nearbyintf (float)
-function float remainderf (float, float)
-function float rintf (float)
-function float roundf (float)
-function float truncf (float)
-function long lrintf (float)
-function {long long} llrintf (float)
-function long lroundf (float)
-function {long long} llroundf (float)
-function float remquof (float, float, int*)
-#if defined XPG3 && defined XPG4 && defined UNIX98 && defined XOPEN2K
-function float scalbf (float, float)
-#endif
-function float scalbnf (float, int)
-function float scalblnf (float, long)
-function float fdimf (float, float)
-function float fmaxf (float, float)
-function float fminf (float, float)
-function float fmaf (float, float, float)
-function float nanf (const char*)
-
-function {long double} acosl (long double)
-function {long double} asinl (long double)
-function {long double} atanl (long double)
-function {long double} atan2l (long double, long double)
-function {long double} ceill (long double)
-function {long double} copysignl (long double, long double)
-function {long double} cosl (long double)
-function {long double} coshl (long double)
-function {long double} expl (long double)
-function {long double} exp2l (long double)
-function {long double} fabsl (long double)
-function {long double} floorl (long double)
-function {long double} fmodl (long double, long double)
-function {long double} frexpl (long double, int*)
-function {long double} ldexpl (long double, int)
-function {long double} logl (long double)
-function {long double} log10l (long double)
-function {long double} log2l (long double)
-function {long double} modfl (long double, long double*)
-function {long double} powl (long double, long double)
-function {long double} sinl (long double)
-function {long double} sinhl (long double)
-function {long double} sqrtl (long double)
-function {long double} tanl (long double)
-function {long double} tanhl (long double)
-function {long double} erfl (long double)
-function {long double} erfcl (long double)
-#if defined XPG3 || defined XPG4 || defined UNIX98
-function {long double} gammal (long double)
-#endif
-function {long double} hypotl (long double, long double)
-#if !defined POSIX && !defined POSIX2008
-function {long double} j0l (long double)
-function {long double} j1l (long double)
-function {long double} jnl (int, long double)
-#endif
-function {long double} lgammal (long double)
-function {long double} tgammal (long double)
-#if !defined POSIX && !defined POSIX2008
-function {long double} y0l (long double)
-function {long double} y1l (long double)
-function {long double} ynl (int, long double)
-#endif
-function {long double} acoshl (long double)
-function {long double} asinhl (long double)
-function {long double} atanhl (long double)
-function {long double} cbrtl (long double)
-function {long double} expm1l (long double)
-function int ilogbl (long double)
-function {long double} log1pl (long double)
-function {long double} logbl (long double)
-function {long double} nextafterl (long double, long double)
-function {long double} nexttowardl (long double, long double)
-function {long double} nearbyintl (long double)
-function {long double} remainderl (long double, long double)
-function {long double} rintl (long double)
-function {long double} roundl (long double)
-function {long double} truncl (long double)
-function long lrintl (long double)
-function {long long} llrintl (long double)
-function long lroundl (long double)
-function {long long} llroundl (long double)
-function {long double} remquol (long double, long double, int*)
-#if defined XPG3 && defined XPG4 && defined UNIX98 && defined XOPEN2K
-function {long double} scalbl (long double, long double)
-#endif
-function {long double} scalbnl (long double, int)
-function {long double} scalblnl (long double, long)
-function {long double} fdiml (long double, long double)
-function {long double} fmaxl (long double, long double)
-function {long double} fminl (long double, long double)
-function {long double} fmal (long double, long double, long double)
-function {long double} nanl (const char*)
-
-allow *_t
-allow FP_*
-
-// <complex.h>
-macro complex
-macro _Complex_I
-optional-macro imaginary
-optional-macro _Imaginary_I
-macro I
-
-function double cabs (double complex)
-function {double complex} cacos (double complex)
-function {double complex} cacosh (double complex)
-function double carg (double complex)
-function {double complex} casin (double complex)
-function {double complex} casinh (double complex)
-function {double complex} catan (double complex)
-function {double complex} catanh (double complex)
-function {double complex} ccos (double complex)
-function {double complex} ccosh (double complex)
-function {double complex} cexp (double complex)
-function double cimag (double complex)
-function {double complex} clog (double complex)
-function {double complex} conj (double complex)
-function {double complex} cpow (double complex, double complex)
-function {double complex} cproj (double complex)
-function double creal (double complex)
-function {double complex} csin (double complex)
-function {double complex} csinh (double complex)
-function {double complex} csqrt (double complex)
-function {double complex} ctan (double complex)
-function {double complex} ctanh (double complex)
-
-function float cabsf (float complex)
-function {float complex} cacosf (float complex)
-function {float complex} cacoshf (float complex)
-function float cargf (float complex)
-function {float complex} casinf (float complex)
-function {float complex} casinhf (float complex)
-function {float complex} catanf (float complex)
-function {float complex} catanhf (float complex)
-function {float complex} ccosf (float complex)
-function {float complex} ccoshf (float complex)
-function {float complex} cexpf (float complex)
-function float cimagf (float complex)
-function {float complex} clogf (float complex)
-function {float complex} conjf (float complex)
-function {float complex} cpowf (float complex, float complex)
-function {float complex} cprojf (float complex)
-function float crealf (float complex)
-function {float complex} csinf (float complex)
-function {float complex} csinhf (float complex)
-function {float complex} csqrtf (float complex)
-function {float complex} ctanf (float complex)
-function {float complex} ctanhf (float complex)
-
-function {long double} cabsl (long double complex)
-function {long double complex} cacosl (long double complex)
-function {long double complex} cacoshl (long double complex)
-function {long double} cargl (long double complex)
-function {long double complex} casinhl (long double complex)
-function {long double complex} casinl (long double complex)
-function {long double complex} catanhl (long double complex)
-function {long double complex} catanl (long double complex)
-function {long double complex} ccoshl (long double complex)
-function {long double complex} ccosl (long double complex)
-function {long double complex} cexpl (long double complex)
-function {long double} cimagl (long double complex)
-function {long double complex} clogl (long double complex)
-function {long double complex} conjl (long double complex)
-function {long double complex} cpowl (long double complex, long double complex)
-function {long double complex} cprojl (long double complex)
-function {long double} creall (long double complex)
-function {long double complex} csinhl (long double complex)
-function {long double complex} csinl (long double complex)
-function {long double complex} csqrtl (long double complex)
-function {long double complex} ctanhl (long double complex)
-function {long double complex} ctanl (long double complex)
-
-// <tgmath.h>
 macro acos
 macro asin
 macro atan
diff --git a/conform/data/uchar.h-data b/conform/data/uchar.h-data
index 487d755..ef27617 100644
--- a/conform/data/uchar.h-data
+++ b/conform/data/uchar.h-data
@@ -5,7 +5,7 @@ type char16_t
 type char32_t
 
 function size_t mbrtoc16 (char16_t *, const char *, size_t, mbstate_t *)
-function size_t c16rtomb (char *, char16_t, mbstate_t *)16
+function size_t c16rtomb (char *, char16_t, mbstate_t *)
 function size_t mbrtoc32 (char32_t *, const char *, size_t, mbstate_t *)
 function size_t c32rtomb (char *, char32_t, mbstate_t *)
 
diff --git a/conform/data/wchar.h-data b/conform/data/wchar.h-data
index fdb68d0..805cbe6 100644
--- a/conform/data/wchar.h-data
+++ b/conform/data/wchar.h-data
@@ -14,6 +14,7 @@ type size_t
 # if defined XOPEN2K8 || defined POSIX2008
 type locale_t
 # endif
+tag {struct tm}
 
 function wint_t btowc (int)
 function int fwprintf (FILE*, const wchar_t*, ...)
@@ -104,9 +105,19 @@ function size_t wcsrtombs (char*, const wchar_t**, size_t, mbstate_t*)
 function size_t wcsspn (const wchar_t*, const wchar_t*)
 function {wchar_t*} wcsstr (const wchar_t*, const wchar_t*)
 function double wcstod (const wchar_t*, wchar_t**)
+# ifndef UNIX98
+function float wcstof (const wchar_t*, wchar_t**)
+function {long double} wcstold (const wchar_t*, wchar_t**)
+# endif
 function {wchar_t*} wcstok (wchar_t*, const wchar_t*, wchar_t**)
 function {long int} wcstol (const wchar_t*, wchar_t**, int)
+# ifndef UNIX98
+function {long long int} wcstoll (const wchar_t*, wchar_t**, int)
+# endif
 function {unsigned long int} wcstoul (const wchar_t*, wchar_t**, int)
+# ifndef UNIX98
+function {unsigned long long int} wcstoull (const wchar_t*, wchar_t**, int)
+# endif
 # if defined UNIX98 || defined XOPEN2K
 function {wchar_t*} wcswcs (const wchar_t*, const wchar_t*)
 # endif
@@ -130,11 +141,12 @@ function {wchar_t*} wmemset (wchar_t*, wchar_t, size_t)
 function int wprintf (const wchar_t*, ...)
 function int wscanf (const wchar_t*, ...)
 
-macro WCHAR_MAX
-macro WCHAR_MIN
-macro WEOF
-macro NULL
+macro-int-constant WCHAR_MIN {promoted:wchar_t}
+macro-int-constant WCHAR_MAX {promoted:wchar_t} >= 127
+macro-constant WEOF {wint_t}
+macro-constant NULL == 0
 
+#if !defined ISO && !defined ISO99 && !defined ISO11
 allow-header ctype.h
 allow-header stdio.h
 allow-header stdarg.h
@@ -142,7 +154,10 @@ allow-header stdlib.h
 allow-header string.h
 allow-header stddef.h
 allow-header time.h
+#endif
 
-allow wcs*
+allow wcs[abcdefghijklmnopqrstuvwxyz]*
+#if !defined ISO && !defined ISO99 && !defined ISO11
 allow *_t
 #endif
+#endif
diff --git a/conform/data/wctype.h-data b/conform/data/wctype.h-data
index cbd1dac..91638e6 100644
--- a/conform/data/wctype.h-data
+++ b/conform/data/wctype.h-data
@@ -8,6 +8,9 @@ type locale_t
 
 function int iswalnum (wint_t)
 function int iswalpha (wint_t)
+# ifndef UNIX98
+function int iswblank (wint_t)
+# endif
 function int iswcntrl (wint_t)
 function int iswdigit (wint_t)
 function int iswgraph (wint_t)
@@ -26,6 +29,7 @@ function wctype_t wctype (const char*)
 # if defined XOPEN2K8 || defined POSIX2008
 function int iswalnum_l (wint_t, locale_t)
 function int iswalpha_l (wint_t, locale_t)
+function int iswblank_l (wint_t, locale_t)
 function int iswcntrl_l (wint_t, locale_t)
 function int iswdigit_l (wint_t, locale_t)
 function int iswgraph_l (wint_t, locale_t)
@@ -43,8 +47,9 @@ function wctrans_t wctrans_l (const char*, locale_t)
 function wctype_t wctype_l (const char*, locale_t)
 # endif
 
-macro WEOF
+macro-constant WEOF {wint_t}
 
+#if !defined ISO && !defined ISO99 && !defined ISO11
 allow-header ctype.h
 allow-header stdio.h
 allow-header stdarg.h
@@ -53,8 +58,11 @@ allow-header string.h
 allow-header stddef.h
 allow-header time.h
 allow-header wchar.h
+#endif
 
-allow is*
-allow to*
+allow is[abcdefghijklmnopqrstuvwxyz]*
+allow to[abcdefghijklmnopqrstuvwxyz]*
+#if !defined ISO && !defined ISO99 && !defined ISO11
 allow *_t
 #endif
+#endif

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]