FWIW, after having applied trivial fixes
(http://lists.gnu.org/archive/html/bison-patches/2012-10/msg00133.html)
and the appended patch (not pushed), here at the failures I have:

4.3: 187, 328
4.4: 187, 328, 335
4.5: 274, 328, 335
4.6: 274, 328

No failure with 4.2, 4.7, 4.8, Apple Clang, and Clang 3.2.

> 187. calc.at:644: testing Calculator %define api.push-pull both %define 
> api.pure %locations ...
> ../../../tests/calc.at:644: bison -o calc.c calc.y
> ../../../tests/calc.at:644: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o calc calc.c 
> $LIBS
> stderr:
> cc1: warnings being treated as errors
> calc.c: In function 'yypush_parse':
> calc.c:1369: error: 'yylloc.last_line' may be used uninitialized in this 
> function
> calc.c:1369: error: 'yylloc.first_line' may be used uninitialized in this 
> function
> calc.c:1369: error: 'yylloc.last_column' may be used uninitialized in this 
> function
> calc.c:1369: error: 'yylloc.first_column' may be used uninitialized in this 
> function

274:
> ../../../tests/regression.at:1503: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input 
> input.c $LIBS
> stderr:
> input.c: In function 'yypush_parse':
> input.c:1718:12: error: 'yylval' may be used uninitialized in this function 
> [-Werror=uninitialized]
> cc1: all warnings being treated as errors
> stdout:
> ../../../tests/regression.at:1503: exit code was 1, expected 0


> 328. push.at:24: testing Memory Leak for Early Deletion ...
> ../../../tests/push.at:73: bison -o input.c input.y
> ../../../tests/push.at:74: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c 
> $LIBS
> stderr:
> cc1: warnings being treated as errors
> input.c: In function 'yypush_parse':
> input.c:1172: error: 'yylval' may be used uninitialized in this function
> stdout:
> ../../../tests/push.at:74: exit code was 1, expected 0
> 328. push.at:24: 328. Memory Leak for Early Deletion (push.at:24): FAILED 
> (push.at:74)

> 335. push.at:24: testing Memory Leak for Early Deletion ...
> ../../../tests/push.at:73: bison -o input.c input.y
> ../../../tests/push.at:74: $CC $CFLAGS $CPPFLAGS $LDFLAGS -o input input.c 
> $LIBS
> stderr:
> cc1: warnings being treated as errors
> input.c: In function 'yypush_parse':
> input.c:1172:9: error: 'yylval' may be used uninitialized in this function
> stdout:
> ../../../tests/push.at:74: exit code was 1, expected 0
> 335. push.at:24: 335. Memory Leak for Early Deletion (push.at:24): FAILED 
> (push.at:74)

So they are all push parsers with pure interface.  In this case,
the initialization of yylval and yylloc is not ensured by the
user, and the compiler, IMHO, cannot know.  So I would move
the initializations of yylval and yylloc to their definition.



commit 97401b7f78c3d8200e0efefb5a97f4eafeff0b87
Author: Akim Demaille <[email protected]>
Date:   Thu Oct 25 14:45:36 2012 +0200

    yacc.c: don't use _Pragma GCC diagnostic with 4.6
    
    Reported by Peter Simons.
    http://lists.gnu.org/archive/html/bug-bison/2012-10/msg00033.html
    
    * data/yacc.c (b4_declare_scanner_communication_variables): 4.7
    seems fine though.

diff --git a/THANKS b/THANKS
index b6a2b2d..ee05b56 100644
--- a/THANKS
+++ b/THANKS
@@ -87,6 +87,7 @@ Paul Hilfinger            [email protected]
 Per Allansson             [email protected]
 Peter Fales               [email protected]
 Peter Hamorsky            [email protected]
+Peter Simons              [email protected]
 Piotr Gackiewicz          [email protected]
 Quoc Peyrot               [email protected]
 R Blake                   [email protected]
diff --git a/data/yacc.c b/data/yacc.c
index faf1d78..e5a1d34 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -171,7 +171,7 @@ m4_define([b4_declare_scanner_communication_variables], [[
 int yychar;
 
 ]b4_pure_if([[
-#if defined __GNUC__ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__))
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     _Pragma ("GCC diagnostic push") \


Reply via email to