[antlr-interest] lots of warnings C runtime in antlr 3.0.1

Jim Idle jimi at temporal-wave.com
Sat Aug 25 10:26:49 PDT 2007


I usually do compile with -wall, however I did not have time to do this
for 3.0.1, however most, if not all of these are innocuous. I have
changed some types from signed to unsigned or vice versa and so some
things like the examples need a tweak or too (where I type U
automatically I think).

The unused parameters for recognizer probably require that the relevant
pragmas be used. The use of -wall with the generated code is a 'goal'
(it is good for W4 in VS2005 for instance), but not something I am
absolutely requiring of myself just yet as things are still changing.

JIm

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Holger Schurig
> Sent: Friday, August 24, 2007 3:39 AM
> To: antlr-interest at antlr.org
> Subject: [antlr-interest] lots of warnings C runtime in antlr 3.0.1
> 
> Hi Jim !
> 
> Did you ever compile your code with -Wall -Wextra ?  I get a huge
> number of warnings in this case, some probably hinting to real
> problems.
> 
> You can do this by calling make like this
> 
> $ make CFLAGS="-Wall -Wextra -O2"
> 
> 
> After this, we'll see a ton of "warning: unused parameter
'recognizer'"
> errors. A way to get rid of them would be to define
> 
>    #define ANTLR3_UNUSED(var) (void)var;
> 
> in antrl3defs.h and then using ANTRL3_UNUSED(recognizer) in the bodies
> of functions that don't use this variable. Of course you could also
use
> __attribute__((unused)) with GCC compilers ...
> 
> 
> 
> Another class of warnings are this:
> 
> 
> src/antlr3baserecognizer.c: In function 'memoize':
> src/antlr3baserecognizer.c:1592: warning: signed and unsigned type in
> conditional expression
> 
> src/antlr3baserecognizer.c:1392: warning: 'freeList' defined but not
> used
> 
> src/antlr3bitset.c: In function 'antlr3BitsetList':
> src/antlr3bitset.c:190: warning: dereferencing type-punned pointer
will
> break strict-aliasing rules
> 
> src/antlr3commontreenodestream.c:558: warning: 'rewindLast' defined
but
> not used
> 
> src/antlr3cyclicdfa.c: In function 'antlr3dfapredict':
> src/antlr3cyclicdfa.c:138: warning: comparison between signed and
> unsigned
> 
> src/antlr3filestream.c:38: warning: statement with no effect
> 
> src/antlr3inputstream.c:23: warning: 'antlr3InputFileName' declared
> 'static' but never defined
> 
> src/antlr3lexer.c:21: warning: 'matchs_ucase' declared 'static' but
> never defined
> src/antlr3lexer.c:22: warning: 'matchc_ucase' declared 'static' but
> never defined
> src/antlr3lexer.c:23: warning: 'setUpperCompare' declared 'static' but
> never defined
> 
> src/antlr3string.c:297: warning: 'stringInitUTF8' defined but not used
> 
> src/antlr3tokenstream.c:119: warning: 'freeEofTOken' defined but not
> used
> 
> src/antlr3treeparser.c:13: warning: 'displayRecognitionError' declared
> 'static' but never defined
> src/antlr3treeparser.c:14: warning: 'recover' declared 'static' but
> never defined
> 
> src/antlr3rewritestreams.c:423: warning: suggest parentheses around &&
> within ||
> 
> 
> 
> Also, antlr3-constructed code has warnings:
> 
> axelLexer.c: In function 'mCHAR_VALUE':
> axelLexer.c:20634: warning: comparison of unsigned expression >= 0 is
> always true
> axelLexer.c: In function 'mSTRING_VALUE':
> axelLexer.c:20716: warning: comparison of unsigned expression >= 0 is
> always true
> axelLexer.c: In function 'mEND_COMMENT':
> axelLexer.c:21059: warning: comparison of unsigned expression >= 0 is
> always true
> axelLexer.c: In function 'mLINE_COMMENT':
> axelLexer.c:21150: warning: comparison of unsigned expression >= 0 is
> always true
> 
> At axelLexer.c, line 20634, antlr3 made this code:
> 
>         // axel.g:453:8: (~ '\"' )
>         // axel.g:453:9: ~ '\"'
>         {
>             if ( ((LA(1) >= 0x0000) && (LA(1) <= '!')) || ((LA(1) >=
> '#') && (LA(1) <= 0xFFFE)) )
>             {
>                 CONSUME();
> 
>             }
> 
> axelParser.c:451: warning: missing initializer
> axelParser.c:451: warning: (near initialization for
> 'FOLLOW_stmt_in_prog52.clone')
> axelParser.c:454: warning: missing initializer
> axelParser.c:454: warning: (near initialization for
> 'FOLLOW_LINE_COMMENT_in_prog59.clone')
> axelParser.c:457: warning: missing initializer
> axelParser.c:457: warning: (near initialization for
> 'FOLLOW_EOL_in_prog70.clone')
> 
> At axelParser.c, line 451, antrl3 made this code:
> 
> /** Bitset defining follow set for error recovery in rule state:
> FOLLOW_stmt_in_prog52  */
> static  ANTLR3_BITWORD FOLLOW_stmt_in_prog52_bits[]     = {
> ANTLR3_UINT64_LIT(0x0000000000000020) };
> static  ANTLR3_BITSET FOLLOW_stmt_in_prog52     = {
> FOLLOW_stmt_in_prog52_bits, 1       };
> 
> so I guess GCC 4.1.2 complains that not all fields of the bitset
struct
> are set.


More information about the antlr-interest mailing list