This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Add stardard definition on conform processing
- From: Adhemerval Zanella <azanella at linux dot vnet dot ibm dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Tue, 18 Mar 2014 12:27:02 -0300
- Subject: [PATCH] Add stardard definition on conform processing
- Authentication-results: sourceware.org; auth=none
Hi all,
This patch adds the -std=c99 option when preprocessing the data files
from the conform testcases. It fixes an issue where the compiler may
split the 'macro bool' defition from stdbool.h-data in two lines and
thus breaking the conform check.
I found this issue by debugging an unexpected failure for stdbool
while using GCC 4.8. By issuing:
$ gcc -m64 -E -P -DISO99 -x c conform/data/stdbool.h-data
macro
bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
The 'macro bool' is splitting in two lines. Talking with Joseph, it might
be a compiler issue with the altivec bool definition and thus contended
to PPC only (I haven't see it on x86_64). I'll open a GCC defect for
it.
Adding the -std=c99 fixes the macro processing. The 'c99' is uses because
the data files uses '//' comments.
To compare if any data files shows any different output while being processed
with -std=c99 (which is not expected), I used to following script:
---
#!/bin/bash
DATAFOLDER=$1
TMPDIR=`mktemp -d`
CC=gcc
CPPFLAGS="-m64 -E -P -x c"
STD="ISO ISO99 ISO11 POSIX XPG3 XPG4 UNIX98 XOPEN2K POSIX2008 XOPEN2K8"
for datafile in `find $DATAFOLDER -iname *-data`; do
for std in $STD; do
$CC -D$std $CPPFLAGS $datafile > $TMPDIR/default.out
$CC -D$std -std=c99 $CPPFLAGS $datafile > $TMPDIR/default-ansi.out
echo "$datafile | $std"
diff -u $TMPDIR/default.out $TMPDIR/default-ansi.out
done
done
---
On x86_64 I saw no difference, while on PPC64 I noted:
conform/data/stdbool.h-data | ISO99
--- /tmp/tmp.83hkqw56gU/default.out 2014-03-18 10:24:13.568094420 -0500
+++ /tmp/tmp.83hkqw56gU/default-ansi.out 2014-03-18 10:24:13.568094420 -0500
@@ -1,5 +1,4 @@
-macro
- bool
+macro bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
conform/data/stdbool.h-data | ISO11
--- /tmp/tmp.83hkqw56gU/default.out 2014-03-18 10:24:13.578094445 -0500
+++ /tmp/tmp.83hkqw56gU/default-ansi.out 2014-03-18 10:24:13.578094445 -0500
@@ -1,5 +1,4 @@
-macro
- bool
+macro bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
conform/data/stdbool.h-data | XOPEN2K
--- /tmp/tmp.83hkqw56gU/default.out 2014-03-18 10:24:13.628094563 -0500
+++ /tmp/tmp.83hkqw56gU/default-ansi.out 2014-03-18 10:24:13.638094587 -0500
@@ -1,5 +1,4 @@
-macro
- bool
+macro bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
conform/data/stdbool.h-data | POSIX2008
--- /tmp/tmp.83hkqw56gU/default.out 2014-03-18 10:24:13.638094587 -0500
+++ /tmp/tmp.83hkqw56gU/default-ansi.out 2014-03-18 10:24:13.648094611 -0500
@@ -1,5 +1,4 @@
-macro
- bool
+macro bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
conform/data/stdbool.h-data | XOPEN2K8
--- /tmp/tmp.83hkqw56gU/default.out 2014-03-18 10:24:13.658094635 -0500
+++ /tmp/tmp.83hkqw56gU/default-ansi.out 2014-03-18 10:24:13.658094635 -0500
@@ -1,5 +1,4 @@
-macro
- bool
+macro bool
macro-int-constant true {int} == 1
macro-int-constant false {int} == 0
macro-int-constant __bool_true_false_are_defined {int} == 1
Other files shows no difference.
--
2014-03-18 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
* conform/conformtest.pl: Add standard definition when calling C
preprocessor on data files.
(checknamespace): Remove unused variable.
---
diff --git a/conform/conformtest.pl b/conform/conformtest.pl
index 085fbb8..c8c1d2a 100644
--- a/conform/conformtest.pl
+++ b/conform/conformtest.pl
@@ -264,7 +264,6 @@ sub checknamespace {
close (TESTFILE);
undef %errors;
- $nknown = 0;
open (CONTENT, "$CC $CFLAGS_namespace -E $fnamebase.c -P -Wp,-dN | sed -e '/^# [1-9]/d' -e '/^[[:space:]]*\$/d' |");
loop: while (<CONTENT>) {
chop;
@@ -324,7 +323,7 @@ while ($#headers >= 0) {
printf ("Testing <$h>\n");
printf ("----------" . "-" x length ($h) . "\n");
- open (CONTROL, "$CC -E -D$standard -x c data/$h-data |");
+ open (CONTROL, "$CC -E -D$standard -std=c99 -x c data/$h-data |");
control: while (<CONTROL>) {
chop;
next control if (/^#/);