about summary refs log tree commit diff
path: root/conform
diff options
context:
space:
mode:
Diffstat (limited to 'conform')
-rw-r--r--conform/Makefile22
-rw-r--r--conform/conformtest.pl88
-rw-r--r--conform/data/fcntl.h-data7
-rw-r--r--conform/data/stropts.h-data3
-rw-r--r--conform/data/sys/ipc.h-data3
-rw-r--r--conform/data/sys/sem.h-data3
-rw-r--r--conform/data/sys/socket.h-data8
-rw-r--r--conform/data/utmpx.h-data5
8 files changed, 80 insertions, 59 deletions
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