diff options
-rw-r--r-- | ChangeLog | 43 | ||||
-rw-r--r-- | conform/Makefile | 22 | ||||
-rw-r--r-- | conform/conformtest.pl | 88 | ||||
-rw-r--r-- | conform/data/fcntl.h-data | 7 | ||||
-rw-r--r-- | conform/data/stropts.h-data | 3 | ||||
-rw-r--r-- | conform/data/sys/ipc.h-data | 3 | ||||
-rw-r--r-- | conform/data/sys/sem.h-data | 3 | ||||
-rw-r--r-- | conform/data/sys/socket.h-data | 8 | ||||
-rw-r--r-- | conform/data/utmpx.h-data | 5 |
9 files changed, 123 insertions, 59 deletions
diff --git a/ChangeLog b/ChangeLog index c308efbf36..65adbd1afa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,46 @@ +2015-06-19 Joseph Myers <joseph@codesourcery.com> + + * conform/conformtest.pl ($xerrors): New variable. + (note_error): New function. + (compiletest): New argument $xfail. Use not_error. + (runtest): Likewise. + (top level): Handle xfail- lines. Update calls to compiletest and + runtest. Handle xfail- and optional- in headers listed with + allow-header. + * conform/data/fcntl.h-data (O_TTY_INIT): Use xfail-. + (O_EXEC): Likewise. + (O_SEARCH): Likewise. + * conform/data/stropts.h-data (ioctl): Likewise. + * conform/data/sys/ipc.h-data (ipc_perm.mode): Likewise. + * conform/data/sys/sem.h-data (semid_ds.sem_nsems): Likewise. + * conform/data/sys/socket.h-data (msghdr.msg_iovlen): Likewise. + (msghdr.msg_controllen): Likewise. + (cmsghdr.cmsg_len): Likewise. + * conform/data/utmpx.h-data (utmpx.ut_tv): Likewise. + * conform/Makefile (test-xfail-XPG3/sys/ipc.h/conform): Remove + variable. + (test-xfail-XPG3/sys/sem.h/conform): Likewise. + (test-xfail-XPG4/stropts.h/conform): Likewise. + (test-xfail-XPG4/sys/ipc.h/conform): Likewise. + (test-xfail-XPG4/sys/sem.h/conform): Likewise. + (test-xfail-XPG4/sys/socket.h/conform): Likewise. + (test-xfail-UNIX98/stropts.h/conform): Likewise. + (test-xfail-UNIX98/sys/ipc.h/conform): Likewise. + (test-xfail-UNIX98/sys/sem.h/conform): Likewise. + (test-xfail-UNIX98/sys/socket.h/conform): Likewise. + (test-xfail-XOPEN2K/stropts.h/conform): Likewise. + (test-xfail-XOPEN2K/sys/ipc.h/conform): Likewise. + (test-xfail-XOPEN2K/sys/sem.h/conform): Likewise. + (test-xfail-XOPEN2K/sys/socket.h/conform): Likewise. + (test-xfail-XOPEN2K/utmpx.h/conform): Likewise. + (test-xfail-POSIX2008/fcntl.h/conform): Likewise. + (test-xfail-POSIX2008/stropts.h/conform): Likewise. + (test-xfail-XOPEN2K8/fcntl.h/conform): Likewise. + (test-xfail-XOPEN2K8/stropts.h/conform): Likewise. + (test-xfail-XOPEN2K8/sys/ipc.h/conform): Likewise. + (test-xfail-XOPEN2K8/sys/sem.h/conform): Likewise. + (test-xfail-XOPEN2K8/sys/socket.h/conform): Likewise. + 2015-06-19 Andrew Senkevich <andrew.senkevich@intel.com> * sysdeps/ieee754/ldbl-opt/s_sin.c (__DECL_SIMD_sincos_disable, diff --git a/conform/Makefile b/conform/Makefile index 4acafa3713..5db58375e7 100644 --- a/conform/Makefile +++ b/conform/Makefile @@ -178,8 +178,6 @@ test-xfail-XPG3/signal.h/conform = yes test-xfail-XPG3/stdio.h/conform = yes test-xfail-XPG3/stdlib.h/conform = yes test-xfail-XPG3/string.h/conform = yes -test-xfail-XPG3/sys/ipc.h/conform = yes -test-xfail-XPG3/sys/sem.h/conform = yes test-xfail-XPG3/sys/stat.h/conform = yes test-xfail-XPG3/sys/types.h/conform = yes test-xfail-XPG3/sys/wait.h/conform = yes @@ -194,10 +192,6 @@ test-xfail-XPG4/netinet/in.h/conform = yes test-xfail-XPG4/signal.h/conform = yes test-xfail-XPG4/stdio.h/conform = yes test-xfail-XPG4/stdlib.h/conform = yes -test-xfail-XPG4/stropts.h/conform = yes -test-xfail-XPG4/sys/ipc.h/conform = yes -test-xfail-XPG4/sys/sem.h/conform = yes -test-xfail-XPG4/sys/socket.h/conform = yes test-xfail-XPG4/sys/stat.h/conform = yes test-xfail-XPG4/sys/time.h/conform = yes test-xfail-XPG4/sys/types.h/conform = yes @@ -215,10 +209,6 @@ test-xfail-UNIX98/netinet/in.h/conform = yes test-xfail-UNIX98/signal.h/conform = yes test-xfail-UNIX98/stdio.h/conform = yes test-xfail-UNIX98/stdlib.h/conform = yes -test-xfail-UNIX98/stropts.h/conform = yes -test-xfail-UNIX98/sys/ipc.h/conform = yes -test-xfail-UNIX98/sys/sem.h/conform = yes -test-xfail-UNIX98/sys/socket.h/conform = yes test-xfail-UNIX98/sys/time.h/conform = yes test-xfail-UNIX98/sys/wait.h/conform = yes test-xfail-UNIX98/ucontext.h/conform = yes @@ -233,33 +223,21 @@ test-xfail-XOPEN2K/semaphore.h/conform = yes test-xfail-XOPEN2K/signal.h/conform = yes test-xfail-XOPEN2K/stdarg.h/conform = yes test-xfail-XOPEN2K/stdio.h/conform = yes -test-xfail-XOPEN2K/stropts.h/conform = yes -test-xfail-XOPEN2K/sys/ipc.h/conform = yes -test-xfail-XOPEN2K/sys/sem.h/conform = yes -test-xfail-XOPEN2K/sys/socket.h/conform = yes test-xfail-XOPEN2K/sys/wait.h/conform = yes test-xfail-XOPEN2K/termios.h/conform = yes test-xfail-XOPEN2K/tgmath.h/conform = yes test-xfail-XOPEN2K/ucontext.h/conform = yes -test-xfail-XOPEN2K/utmpx.h/conform = yes test-xfail-POSIX2008/arpa/inet.h/conform = yes -test-xfail-POSIX2008/fcntl.h/conform = yes test-xfail-POSIX2008/netdb.h/conform = yes test-xfail-POSIX2008/netinet/in.h/conform = yes test-xfail-POSIX2008/signal.h/conform = yes -test-xfail-POSIX2008/stropts.h/conform = yes test-xfail-POSIX2008/sys/socket.h/conform = yes test-xfail-POSIX2008/sys/wait.h/conform = yes -test-xfail-XOPEN2K8/fcntl.h/conform = yes test-xfail-XOPEN2K8/limits.h/conform = yes test-xfail-XOPEN2K8/math.h/conform = yes test-xfail-XOPEN2K8/signal.h/conform = yes test-xfail-XOPEN2K8/stdio.h/conform = yes -test-xfail-XOPEN2K8/stropts.h/conform = yes -test-xfail-XOPEN2K8/sys/ipc.h/conform = yes test-xfail-XOPEN2K8/sys/select.h/conform = yes -test-xfail-XOPEN2K8/sys/sem.h/conform = yes -test-xfail-XOPEN2K8/sys/socket.h/conform = yes test-xfail-XOPEN2K8/sys/time.h/conform = yes test-xfail-XOPEN2K8/sys/wait.h/conform = yes test-xfail-XOPEN2K8/termios.h/conform = yes diff --git a/conform/conformtest.pl b/conform/conformtest.pl index 8d61016bbd..a8a27f5d2a 100644 --- a/conform/conformtest.pl +++ b/conform/conformtest.pl @@ -75,6 +75,17 @@ $verbose = 1; $total = 0; $skipped = 0; $errors = 0; +$xerrors = 0; + +sub note_error { + my($xfail) = @_; + if ($xfail) { + $xerrors++; + printf ("Ignoring this failure.\n"); + } else { + $errors++; + } +} sub poorfnmatch { @@ -107,7 +118,7 @@ sub poorfnmatch { sub compiletest { - my($fnamebase, $msg, $errmsg, $skip, $optional) = @_; + my($fnamebase, $msg, $errmsg, $skip, $optional, $xfail) = @_; my($result) = $skip; my($printlog) = 0; @@ -129,7 +140,7 @@ sub compiletest printf (" $errmsg Compiler message:\n"); $printlog = 1; } - ++$errors; + note_error($xfail); $result = 1; } } else { @@ -159,7 +170,7 @@ sub compiletest sub runtest { - my($fnamebase, $msg, $errmsg, $skip) = @_; + my($fnamebase, $msg, $errmsg, $skip, $xfail) = @_; my($result) = $skip; my($printlog) = 0; @@ -177,7 +188,7 @@ sub runtest printf (" $errmsg Compiler message:\n"); $printlog = 1; } - ++$errors; + note_error($xfail); $result = 1; } else { # Now run the program. If the exit code is not zero something is wrong. @@ -191,7 +202,7 @@ sub runtest } } else { printf (" FAIL\n"); - ++$errors; + note_error($xfail); $printlog = 1; unlink "$fnamebase.out"; rename "$fnamebase.out2", "$fnamebase.out"; @@ -328,11 +339,16 @@ while ($#headers >= 0) { close (TESTFILE); $missing = compiletest ($fnamebase, "Checking whether <$h> is available", - "Header <$h> not available", 0, 0); + "Header <$h> not available", 0, 0, 0); printf ("\n"); last control if ($missing); } + my($xfail) = 0; + if (/^xfail-/) { + s/^xfail-//; + $xfail = 1; + } my($optional) = 0; if (/^optional-/) { s/^optional-//; @@ -364,7 +380,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE." : "Member \"$member\" not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing != 0 || !$optional) { # Test the types of the members. @@ -378,7 +394,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type of member $member", "Member \"$member\" does not have the correct type.", - $res, 0); + $res, 0, $xfail); } } elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_\\'-]*))?/) { my($symbol_type) = $1; @@ -407,7 +423,7 @@ while ($#headers >= 0) { ($optional ? "NOT PRESENT" : "Macro \"$symbol\" is not available."), $res, - $optional); + $optional, $xfail); } if ($symbol_type =~ /constant/) { @@ -422,7 +438,7 @@ while ($#headers >= 0) { ($optional ? "NOT PRESENT" : "Constant \"$symbol\" not available."), $res, - $optional); + $optional, $xfail); } $res = $res || $mres || $cres; @@ -461,7 +477,7 @@ while ($#headers >= 0) { close (TESTFILE); runtest ($fnamebase, "Testing for #if usability of symbol $symbol", - "Symbol \"$symbol\" not usable in #if.", $res); + "Symbol \"$symbol\" not usable in #if.", $res, $xfail); } if (defined ($type) && ($res == 0 || !$optional)) { @@ -480,7 +496,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type of symbol $symbol", "Symbol \"$symbol\" does not have the correct type.", - $res, 0); + $res, 0, $xfail); } if (defined ($op) && ($res == 0 || !$optional)) { @@ -493,7 +509,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of symbol $symbol", - "Symbol \"$symbol\" has not the right value.", $res); + "Symbol \"$symbol\" has not the right value.", $res, + $xfail); } } elsif (/^symbol *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) { my($symbol) = $1; @@ -513,7 +530,7 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Testing for symbol $symbol", - "Symbol \"$symbol\" not available.", $res, 0); + "Symbol \"$symbol\" not available.", $res, 0, $xfail); if ($value ne "") { # Generate a program to test for the value of this constant. @@ -524,7 +541,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of symbol $symbol", - "Symbol \"$symbol\" has not the right value.", $res); + "Symbol \"$symbol\" has not the right value.", $res, + $xfail); } } elsif (/^type *({([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; @@ -554,7 +572,8 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type $type", ($optional ? "NOT AVAILABLE" - : "Type \"$type\" not available."), $missing, $optional); + : "Type \"$type\" not available."), $missing, $optional, + $xfail); } elsif (/^tag *({([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; @@ -575,7 +594,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Testing for type $type", - "Type \"$type\" not available.", $missing, 0); + "Type \"$type\" not available.", $missing, 0, $xfail); } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; @@ -597,7 +616,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE" : "Function \"$fname\" is not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing == 1 || !$optional) { # Generate a program to test for the type of this function. @@ -610,7 +629,8 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of function $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, + $xfail); } } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; @@ -633,7 +653,7 @@ while ($#headers >= 0) { ($optional ? "NOT AVAILABLE" : "Function \"$fname\" is not available."), $res, - $optional); + $optional, $xfail); if ($res == 0 || $missing != 0 || !$optional) { # Generate a program to test for the type of this function. @@ -646,7 +666,8 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of function $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, + $xfail); } } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) *(.*)/) { my($type) = "$2$3"; @@ -667,7 +688,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Test availability of variable $vname", - "Variable \"$vname\" is not available.", $res, 0); + "Variable \"$vname\" is not available.", $res, 0, + $xfail); # Generate a program to test for the type of this function. open (TESTFILE, ">$fnamebase.c"); @@ -678,7 +700,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of variable $fname", - "Variable \"$vname\" has incorrect type.", $res, 0); + "Variable \"$vname\" has incorrect type.", $res, 0, $xfail); } elsif (/^macro-function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; @@ -698,7 +720,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = compiletest ($fnamebase, "Test availability of macro $fname", - "Function \"$fname\" is not available.", $res, 0); + "Function \"$fname\" is not available.", $res, 0, + $xfail); # Generate a program to test for the type of this function. open (TESTFILE, ">$fnamebase.c"); @@ -711,7 +734,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test for type of macro $fname", - "Function \"$fname\" has incorrect type.", $res, 0); + "Function \"$fname\" has incorrect type.", $res, 0, $xfail); } elsif (/^macro-str *([^ ]*) *(\".*\")/) { # The above regex doesn't handle a \" in a string. my($macro) = "$1"; @@ -731,7 +754,7 @@ while ($#headers >= 0) { close (TESTFILE); compiletest ($fnamebase, "Test availability of macro $macro", - "Macro \"$macro\" is not available.", $missing, 0); + "Macro \"$macro\" is not available.", $missing, 0, $xfail); # Generate a program to test for the value of this macro. open (TESTFILE, ">$fnamebase.c"); @@ -743,7 +766,8 @@ while ($#headers >= 0) { close (TESTFILE); $res = runtest ($fnamebase, "Testing for value of macro $macro", - "Macro \"$macro\" has not the right value.", $res); + "Macro \"$macro\" has not the right value.", $res, + $xfail); } elsif (/^allow-header *(.*)/) { my($pattern) = $1; if ($seenheader{$pattern} != 1) { @@ -774,6 +798,8 @@ while ($#headers >= 0) { next acontrol if (/^#/); next acontrol if (/^[ ]*$/); + s/^xfail-//; + s/^optional-//; if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) { push @allow, $7; } elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) { @@ -838,6 +864,14 @@ if ($errors > 0 && $percent < 1.0) { printf ("%3d%%)\n", $percent); } +printf (" Number of xfailed tests : %4d (", $xerrors); +$percent = ($xerrors * 100) / $total; +if ($xerrors > 0 && $percent < 1.0) { + printf (" <1%%)\n"); +} else { + printf ("%3d%%)\n", $percent); +} + printf (" Number of skipped tests : %4d (", $skipped); $percent = ($skipped * 100) / $total; if ($skipped > 0 && $percent < 1.0) { diff --git a/conform/data/fcntl.h-data b/conform/data/fcntl.h-data index efe134e448..1971d4a742 100644 --- a/conform/data/fcntl.h-data +++ b/conform/data/fcntl.h-data @@ -113,10 +113,11 @@ function int posix_fallocate (int, off_t, off_t) #endif #if defined XOPEN2K8 || defined POSIX2008 -constant O_TTY_INIT +// Bug 18228: O_TTY_INIT, O_EXEC, O_SEARCH missing. +xfail-constant O_TTY_INIT constant O_CLOEXEC -constant O_EXEC -constant O_SEARCH +xfail-constant O_EXEC +xfail-constant O_SEARCH constant O_DIRECTORY constant O_NOFOLLOW constant F_DUPFD_CLOEXEC diff --git a/conform/data/stropts.h-data b/conform/data/stropts.h-data index 6849fecc87..e43dac8c9e 100644 --- a/conform/data/stropts.h-data +++ b/conform/data/stropts.h-data @@ -115,7 +115,8 @@ macro MOREDATA function int isastream (int) function int getmsg (int, struct strbuf*, struct strbuf*, int*) function int getpmsg (int, struct strbuf*, struct strbuf*, int*, int*) -function int ioctl (int, int, ...) +// Bug 14362: wrong type for ioctl. +xfail-function int ioctl (int, int, ...) function int putmsg (int, const struct strbuf*, const struct strbuf*, int) function int putpmsg (int, const struct strbuf*, const struct strbuf*, int, int) function int fattach (int, const char*) diff --git a/conform/data/sys/ipc.h-data b/conform/data/sys/ipc.h-data index 8f06d2ba0a..70dc3f6fe6 100644 --- a/conform/data/sys/ipc.h-data +++ b/conform/data/sys/ipc.h-data @@ -5,7 +5,8 @@ element {struct ipc_perm} uid_t uid element {struct ipc_perm} gid_t gid element {struct ipc_perm} uid_t cuid element {struct ipc_perm} gid_t cgid -element {struct ipc_perm} mode_t mode +// Bug 18231: wrong type for mode member. +xfail-element {struct ipc_perm} mode_t mode type uid_t type gid_t diff --git a/conform/data/sys/sem.h-data b/conform/data/sys/sem.h-data index 61eecf2951..a36ab1bd91 100644 --- a/conform/data/sys/sem.h-data +++ b/conform/data/sys/sem.h-data @@ -12,7 +12,8 @@ constant SETALL type {struct semid_ds} element {struct semid_ds} {struct ipc_perm} sem_perm -element {struct semid_ds} {unsigned short int} sem_nsems +// Bug 18232: wrong type for sem_nsems member. +xfail-element {struct semid_ds} {unsigned short int} sem_nsems element {struct semid_ds} time_t sem_otime element {struct semid_ds} time_t sem_ctime diff --git a/conform/data/sys/socket.h-data b/conform/data/sys/socket.h-data index 3a6cf7c673..442d4d288a 100644 --- a/conform/data/sys/socket.h-data +++ b/conform/data/sys/socket.h-data @@ -22,9 +22,10 @@ type {struct msghdr} element {struct msghdr} {void*} msg_name element {struct msghdr} socklen_t msg_namelen element {struct msghdr} {struct iovec*} msg_iov -element {struct msghdr} int msg_iovlen +// Bug 16919: wrong type for msg_iovlen and msg_controllen members. +xfail-element {struct msghdr} int msg_iovlen element {struct msghdr} {void*} msg_control -element {struct msghdr} socklen_t msg_controllen +xfail-element {struct msghdr} socklen_t msg_controllen element {struct msghdr} int msg_flags type {struct iovec} @@ -34,7 +35,8 @@ element {struct iovec} size_t iov_len type {struct cmsghdr} -element {struct cmsghdr} socklen_t cmsg_len +// Bug 16919: wrong type for cmsg_len member. +xfail-element {struct cmsghdr} socklen_t cmsg_len element {struct cmsghdr} int cmsg_level element {struct cmsghdr} int cmsg_type diff --git a/conform/data/utmpx.h-data b/conform/data/utmpx.h-data index b8a0062321..80641ff8f0 100644 --- a/conform/data/utmpx.h-data +++ b/conform/data/utmpx.h-data @@ -6,7 +6,10 @@ element {struct utmpx} char ut_id [] element {struct utmpx} char ut_line [] element {struct utmpx} pid_t ut_pid element {struct utmpx} {short int} ut_type -element {struct utmpx} {struct timeval} ut_tv +// Layout chosen to be compatible on 32-bit and 64-bit bi-arch +// systems, which is incompatible with the standard type (see bug +// 18235). +xfail-element {struct utmpx} {struct timeval} ut_tv type pid_t |