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: Unify "constant" and "typed-constant"


conformtest.pl handles separate "constant" and "typed-constant" lines,
the latter only allowing equality tests for values.

I propose this patch to unifiy these by allowing types on "constant"
lines; as well as reducing code duplication, this means that types can
be specified along with any comparison operator for values, not just
equality (and that types may be specified for optional constants).
Tested x86_64.

2012-04-28  Joseph Myers  <joseph@codesourcery.com>

	* conform/conformtest.pl: Handle braced types on "constant" lined
	instead of handling "typed-constant".
	* conform/data/signal.h-data: Use "constant" instead of
	"typed-constant".

diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index dc3712e..0a1a093 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -385,10 +385,11 @@ while ($#headers >= 0) {
 		     "Member \"$member\" does not have the correct type.",
 		     $res, 0);
       }
-    } elsif (/^constant *([a-zA-Z0-9_]*) *(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
+    } elsif (/^constant *([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
       my($const) = $1;
-      my($op) = $2;
-      my($value) = $3;
+      my($type) = $2;
+      my($op) = $3;
+      my($value) = $4;
       my($res) = $missing;
 
       # Remember that this name is allowed.
@@ -407,55 +408,27 @@ while ($#headers >= 0) {
 			   : "Constant \"$const\" not available."), $res,
 			  $optional);
 
-      if (defined ($op) && ($res == 0 || !$optional)) {
-	# Generate a program to test for the value of this constant.
+      if (defined ($type) && ($res == 0 || !$optional)) {
+	# Test the types of the members.
 	open (TESTFILE, ">$fnamebase.c");
 	print TESTFILE "$prepend";
 	print TESTFILE "#include <$h>\n";
-	# Negate the value since 0 means ok
-	print TESTFILE "int main (void) { return !($const $op $value); }\n";
+	print TESTFILE "__typeof__ (($type) 0) a;\n";
+	print TESTFILE "extern __typeof__ ($const) a;\n";
 	close (TESTFILE);
 
-	$res = runtest ($fnamebase, "Testing for value of constant $const",
-			"Constant \"$const\" has not the right value.", $res);
+	compiletest ($fnamebase, "Testing for type of constant $const",
+		     "Constant \"$const\" does not have the correct type.",
+		     $res, 0);
       }
-    } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_-]*)?/) {
-      my($const) = $1;
-      my($type) = "$3$4";
-      my($value) = $5;
-      my($res) = $missing;
 
-      # Remember that this name is allowed.
-      push @allow, $const;
-
-      # Generate a program to test for the availability of this constant.
-      open (TESTFILE, ">$fnamebase.c");
-      print TESTFILE "$prepend";
-      print TESTFILE "#include <$h>\n";
-      print TESTFILE "__typeof__ ($const) a = $const;\n";
-      close (TESTFILE);
-
-      $res = compiletest ($fnamebase, "Testing for constant $const",
-			  "Constant \"$const\" not available.", $res, 0);
-
-      # Test the types of the members.
-      open (TESTFILE, ">$fnamebase.c");
-      print TESTFILE "$prepend";
-      print TESTFILE "#include <$h>\n";
-      print TESTFILE "__typeof__ (($type) 0) a;\n";
-      print TESTFILE "extern __typeof__ ($const) a;\n";
-      close (TESTFILE);
-
-      compiletest ($fnamebase, "Testing for type of constant $const",
-		   "Constant \"$const\" does not have the correct type.",
-		   $res, 0);
-
-      if ($value ne "") {
+      if (defined ($op) && ($res == 0 || !$optional)) {
 	# Generate a program to test for the value of this constant.
 	open (TESTFILE, ">$fnamebase.c");
 	print TESTFILE "$prepend";
 	print TESTFILE "#include <$h>\n";
-	print TESTFILE "int main (void) { return $const != $value; }\n";
+	# Negate the value since 0 means ok
+	print TESTFILE "int main (void) { return !($const $op $value); }\n";
 	close (TESTFILE);
 
 	$res = runtest ($fnamebase, "Testing for value of constant $const",
@@ -833,9 +806,7 @@ while ($#headers >= 0) {
 
       if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) {
 	push @allow, $7;
-      } elsif (/^constant *([a-zA-Z0-9_]*) *(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
-	push @allow, $1;
-      } elsif (/^typed-constant *([a-zA-Z0-9_]*) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*)?/) {
+      } elsif (/^constant *([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
 	push @allow, $1;
       } elsif (/^(type|tag) *({([^}]*)|([a-zA-Z0-9_]*))/) {
 	my($type) = "$3$4";
diff --git a/conform/data/signal.h-data b/conform/data/signal.h-data
index 18f1b9e..99468ae 100644
--- a/conform/data/signal.h-data
+++ b/conform/data/signal.h-data
@@ -1,9 +1,9 @@
-typed-constant SIG_DFL {void(*)(int)}
-typed-constant SIG_ERR {void(*)(int)}
+constant SIG_DFL {void(*)(int)}
+constant SIG_ERR {void(*)(int)}
 #if !defined ISO && !defined ISO99 && !defined ISO11 && !defined POSIX && !defined POSIX2008
-typed-constant SIG_HOLD {void(*)(int)}
+constant SIG_HOLD {void(*)(int)}
 #endif
-typed-constant SIG_IGN {void(*)(int)}
+constant SIG_IGN {void(*)(int)}
 
 type sig_atomic_t
 #if !defined ISO && !defined ISO99 && !defined ISO11

-- 
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]