about summary refs log tree commit diff
path: root/conform
diff options
context:
space:
mode:
Diffstat (limited to 'conform')
-rw-r--r--conform/conformtest.pl39
-rw-r--r--conform/data/complex.h-data76
-rw-r--r--conform/data/sys/utsname.h-data10
-rw-r--r--conform/data/termios.h-data2
-rw-r--r--conform/data/tgmath.h-data398
-rw-r--r--conform/data/time.h-data4
-rw-r--r--conform/data/wchar.h-data7
7 files changed, 509 insertions, 27 deletions
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index f7c5368c3d..371a04efe1 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -12,21 +12,21 @@ GetOptions ('headers=s' => \@headers, 'dialect=s' => \$dialect);
 if (@headers == ()) {
   @headers = ("wordexp.h", "wctype.h", "wchar.h", "varargs.h", "utmpx.h",
 	      "utime.h", "unistd.h", "ulimit.h", "ucontext.h", "time.h",
-	      "termios.h", "tar.h", "sys/wait.h", "sys/utsname.h", "sys/un.h",
-	      "sys/uio.h", "sys/types.h", "sys/times.h", "sys/timeb.h",
-	      "sys/time.h", "sys/statvfs.h", "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", "fcntl.h",
-	      "errno.h", "dlfcn.h", "dirent.h", "ctype.h", "cpio.h",
-	      "assert.h", "arpa/inet.h", "aio.h");
+	      "tgmath.h", "termios.h", "tar.h", "sys/wait.h", "sys/utsname.h",
+	      "sys/un.h", "sys/uio.h", "sys/types.h", "sys/times.h",
+	      "sys/timeb.h", "sys/time.h", "sys/statvfs.h", "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",
+	      "fcntl.h", "errno.h", "dlfcn.h", "dirent.h", "ctype.h", "cpio.h",
+	      "complex.h", "assert.h", "arpa/inet.h", "aio.h");
 }
 
 if ($dialect ne "ISO" && $dialect ne "POSIX" && $dialect ne "XPG3"
@@ -56,6 +56,7 @@ $CFLAGS{"XOPEN2K"} = "-I. '-D__attribute__(x)=' -D_XOPEN_SOURCE=600";
 $mustprepend{'regex.h'} = "#include <sys/types.h>\n";
 $mustprepend{'sched.h'} = "#include <sys/types.h>\n";
 $mustprepend{'signal.h'} = "#include <pthread.h>\n";
+$mustprepend{'wchar.h'} = "#include <stdarg.h>\n";
 $mustprepend{'wordexp.h'} = "#include <stddef.h>\n";
 
 # Make a hash table from this information.
@@ -807,9 +808,10 @@ while ($#headers >= 0) {
 
       compiletest ($fnamebase, "Test for type of function $fname",
 		   "Function \"$fname\" has incorrect type.", $res, 0);
-    } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*)/) {
+    } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) *(.*)/) {
       my($type) = "$2$3";
       my($vname) = "$4";
+      my($rest) = "$5";
       my($res) = $missing;
 
       # Remember that this name is allowed.
@@ -820,7 +822,8 @@ while ($#headers >= 0) {
       print TESTFILE "$prepend";
       print TESTFILE "#include <$h>\n";
       # print TESTFILE "#undef $fname\n";
-      print TESTFILE "$type *foobarbaz = &$vname;\n";
+      print TESTFILE "typedef $type xyzzy$rest;\n";
+      print TESTFILE "$xyzzy *foobarbaz = &$vname;\n";
       close (TESTFILE);
 
       $res = compiletest ($fnamebase, "Test availability of variable $vname",
@@ -831,7 +834,7 @@ while ($#headers >= 0) {
       print TESTFILE "$prepend";
       print TESTFILE "#include <$h>\n";
       # print TESTFILE "#undef $fname\n";
-      print TESTFILE "extern $type $vname;\n";
+      print TESTFILE "extern $type $vname$rest;\n";
       close (TESTFILE);
 
       compiletest ($fnamebase, "Test for type of variable $fname",
diff --git a/conform/data/complex.h-data b/conform/data/complex.h-data
new file mode 100644
index 0000000000..5c5eedd181
--- /dev/null
+++ b/conform/data/complex.h-data
@@ -0,0 +1,76 @@
+#ifdef XOPEN2K
+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)
+#endif
diff --git a/conform/data/sys/utsname.h-data b/conform/data/sys/utsname.h-data
index 9f7d4fd91e..680b666b1d 100644
--- a/conform/data/sys/utsname.h-data
+++ b/conform/data/sys/utsname.h-data
@@ -1,11 +1,11 @@
 #ifndef ISO
 type {struct utsname}
 
-element {struct utsname} char sysname [1]
-element {struct utsname} char nodename [1]
-element {struct utsname} char release [1]
-element {struct utsname} char version [1]
-element {struct utsname} char machine [1]
+element {struct utsname} char sysname []
+element {struct utsname} char nodename []
+element {struct utsname} char release []
+element {struct utsname} char version []
+element {struct utsname} char machine []
 
 function int uname (struct utsname *)
 #endif
diff --git a/conform/data/termios.h-data b/conform/data/termios.h-data
index 07351b459d..d867d4cd6b 100644
--- a/conform/data/termios.h-data
+++ b/conform/data/termios.h-data
@@ -130,7 +130,7 @@ function int tcflush (int, int)
 function int tcgetattr (int, struct termios*)
 function pid_t tcgetsid (int)
 function int tcsendbreak (int, int)
-function int tcsetattr (int, int, struct termios*)
+function int tcsetattr (int, int, const struct termios*)
 
 allow CBAUD
 allow DEFECHO
diff --git a/conform/data/tgmath.h-data b/conform/data/tgmath.h-data
new file mode 100644
index 0000000000..2a6bd0cd9a
--- /dev/null
+++ b/conform/data/tgmath.h-data
@@ -0,0 +1,398 @@
+#ifdef XOPEN2K
+// <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
+
+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
+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
+
+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)
+function double gamma (double)
+function double hypot (double, double)
+function double j0 (double)
+function double j1 (double)
+function double jn (int, double)
+function double lgamma (double)
+function double tgamma (double)
+function double y0 (double)
+function double y1 (double)
+function double yn (int, double)
+function int isnan (double)
+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*)
+function double scalb (double, double)
+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)
+function float gammaf (float)
+function float hypotf (float, float)
+function float j0f (float)
+function float j1f (float)
+function float jnf (int, float)
+function float lgammaf (float)
+function float tgammaf (float)
+function float y0f (float)
+function float y1f (float)
+function float ynf (int, float)
+function int isnanf (float)
+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*)
+function float scalbf (float, float)
+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)
+function {long double} gammal (long double)
+function {long double} hypotl (long double, long double)
+function {long double} j0l (long double)
+function {long double} j1l (long double)
+function {long double} jnl (int, long double)
+function {long double} lgammal (long double)
+function {long double} tgammal (long double)
+function {long double} y0l (long double)
+function {long double} y1l (long double)
+function {long double} ynl (int, long double)
+function int isnanl (long double)
+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*)
+function {long double} scalbl (long double, long double)
+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
+macro acosh
+macro asinh
+macro atanh
+macro cos
+macro sin
+macro tan
+macro cosh
+macro sinh
+macro tanh
+macro exp
+macro pow
+macro sqrt
+macro fabs
+
+macro atan2
+macro cbrt
+macro ceil
+macro copysign
+macro erf
+macro erfc
+macro exp2
+macro expm1
+macro fdim
+macro floor
+macro fma
+macro fmax
+macro fmin
+macro fmod
+macro frexp
+macro hypot
+macro ilogb
+macro ldexp
+macro lgamma
+macro llrint
+macro llround
+macro log10
+macro log1p
+macro log2
+macro logb
+macro lrint
+macro lround
+macro nearbyint
+macro nextafter
+macro nexttoward
+macro remainder
+macro remquo
+macro rint
+macro round
+macro scalbn
+macro scalbln
+macro tgamma
+macro trunc
+
+macro carg
+macro cimag
+macro conj
+macro cproj
+macro creal
+#endif
diff --git a/conform/data/time.h-data b/conform/data/time.h-data
index e0b91f3085..f503165fae 100644
--- a/conform/data/time.h-data
+++ b/conform/data/time.h-data
@@ -11,7 +11,9 @@ element {struct tm} int tm_yday
 element {struct tm} int tm_isdst
 
 constant NULL
+#ifndef XOPEN2K
 constant CLK_TCK
+#endif
 constant CLOCKS_PER_SEC
 constant CLOCK_PROCESS_CPUTIME_ID
 constant CLOCK_THREAD_CPUTIME_ID
@@ -68,7 +70,7 @@ function void tzset (void)
 
 variable int daylight
 variable {long int} timezone
-// variable {char*} tzname []
+variable {char*} tzname [2]
 
 allow tm_*
 allow clock_*
diff --git a/conform/data/wchar.h-data b/conform/data/wchar.h-data
index 49f85c5210..7c1589506a 100644
--- a/conform/data/wchar.h-data
+++ b/conform/data/wchar.h-data
@@ -31,7 +31,7 @@ function wint_t getwc (FILE*)
 function wint_t getwchar (void)
 function int mbsinit (const mbstate_t*)
 function size_t mbrlen (const char*, size_t, mbstate_t*)
-function size_t mbrtowc (wchar_t*, const char*, size_t, mbstate_*)
+function size_t mbrtowc (wchar_t*, const char*, size_t, mbstate_t*)
 function size_t mbsrtowcs (wchar_t*, const char**, size_t, mbstate_t*)
 function wint_t putwc (wchar_t, FILE*)
 function wint_t putwchar (wchar_t)
@@ -40,9 +40,12 @@ function int swscanf (const wchar_t*, const wchar_t*, ...)
 function wint_t towlower (wint_t)
 function wint_t towupper (wint_t)
 function wint_t ungetwc (wint_t, FILE*)
-function int vfwprintf (FILE, const wchar_t*, va_list)
+function int vfwprintf (FILE*, const wchar_t*, va_list)
+function int vfwscanf (FILE*, const wchar_t*, va_list)
 function int vwprintf (const wchar_t*, va_list)
+function int vwscanf (const wchar_t*, va_list)
 function int vswprintf (wchar_t*, size_t, const wchar_t*, va_list)
+function int vswscanf (const wchar_t*, const wchar_t*, va_list)
 function size_t wcrtomb (char*, wchar_t, mbstate_t*)
 function {wchar_t*} wcscat (wchar_t*, const wchar_t*)
 function {wchar_t*} wcschr (const wchar_t*, wchar_t)