mirror of
https://sourceware.org/git/glibc.git
synced 2025-01-08 18:30:18 +00:00
conformtest: Support testing macro usability in #if.
This commit is contained in:
parent
ee74b9cbbd
commit
661f8cf03b
@ -1,5 +1,8 @@
|
||||
2012-05-01 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* conform/conformtest.pl: Handle "macro-int-constant" and test for
|
||||
usability of symbols in #if.
|
||||
|
||||
* conform/conformtest.pl: If macro or constant types start
|
||||
"promoted:", expect the symbol to be of the following type
|
||||
promoted by the integer promotions.
|
||||
|
@ -385,7 +385,7 @@ while ($#headers >= 0) {
|
||||
"Member \"$member\" does not have the correct type.",
|
||||
$res, 0);
|
||||
}
|
||||
} elsif (/^(macro|constant|macro-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
|
||||
} elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
|
||||
my($symbol_type) = $1;
|
||||
my($symbol) = $2;
|
||||
my($type) = $3;
|
||||
@ -432,6 +432,43 @@ while ($#headers >= 0) {
|
||||
|
||||
$res = $res || $mres || $cres;
|
||||
|
||||
if ($symbol_type eq "macro-int-constant" && ($res == 0 || !$optional)) {
|
||||
# Test that the symbol is usable in #if.
|
||||
open (TESTFILE, ">$fnamebase.c");
|
||||
print TESTFILE "$prepend";
|
||||
print TESTFILE "#include <$h>\n";
|
||||
print TESTFILE "#if $symbol < 0\n";
|
||||
print TESTFILE "# define conformtest_negative 1\n";
|
||||
my($s) = "0";
|
||||
for (my $i = 0; $i < 63; $i++) {
|
||||
print TESTFILE "# if $symbol & (1LL << $i)\n";
|
||||
print TESTFILE "# define conformtest_bit_$i 0LL\n";
|
||||
print TESTFILE "# else\n";
|
||||
print TESTFILE "# define conformtest_bit_$i (1LL << $i)\n";
|
||||
print TESTFILE "# endif\n";
|
||||
$s .= "|conformtest_bit_$i";
|
||||
}
|
||||
print TESTFILE "# define conformtest_value ~($s)\n";
|
||||
print TESTFILE "#else\n";
|
||||
print TESTFILE "# define conformtest_negative 0\n";
|
||||
$s = "0";
|
||||
for (my $i = 0; $i < 64; $i++) {
|
||||
print TESTFILE "# if $symbol & (1ULL << $i)\n";
|
||||
print TESTFILE "# define conformtest_bit_$i (1ULL << $i)\n";
|
||||
print TESTFILE "# else\n";
|
||||
print TESTFILE "# define conformtest_bit_$i 0ULL\n";
|
||||
print TESTFILE "# endif\n";
|
||||
$s .= "|conformtest_bit_$i";
|
||||
}
|
||||
print TESTFILE "# define conformtest_value ($s)\n";
|
||||
print TESTFILE "#endif\n";
|
||||
print TESTFILE "int main (void) { return !((($symbol < 0) == conformtest_negative) && ($symbol == conformtest_value)); }\n";
|
||||
close (TESTFILE);
|
||||
|
||||
runtest ($fnamebase, "Testing for #if usability of symbol $symbol",
|
||||
"Symbol \"$symbol\" not usable in #if.", $res);
|
||||
}
|
||||
|
||||
if (defined ($type) && ($res == 0 || !$optional)) {
|
||||
# Test the type of the symbol.
|
||||
open (TESTFILE, ">$fnamebase.c");
|
||||
@ -744,7 +781,7 @@ while ($#headers >= 0) {
|
||||
|
||||
if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) {
|
||||
push @allow, $7;
|
||||
} elsif (/^(macro|constant|macro-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
|
||||
} elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) {
|
||||
push @allow, $1;
|
||||
} elsif (/^(type|tag) *({([^}]*)|([a-zA-Z0-9_]*))/) {
|
||||
my($type) = "$3$4";
|
||||
|
Loading…
Reference in New Issue
Block a user