Possible bug or simple nuisance compiler warning
Jot Dot <[email protected]>
| Newsgroups | gmane.comp.parsers.bison.bugs |
|---|---|
| Message-ID | <[email protected]> |
While beating my head senseless trying to get my first flex/bison (c++ style) project going, I've come across this issue:
I try to catch some error tokens inside my bison rules to aid me by supplying diagnostic output.
I added a second error token into a rule to debug an issue I'm trying to figure out (which I posted in help-bison).
win_flex 2.6.4
bison (GNU Bison) 3.7.1
Now my Microsoft compiler returns with:
1>D:\data\c\FlexBisonLoader\My_Parser\parser.cpp(454,26): warning C4244: 'return': conversion from 'const short' to 'gen::Parser::state_type', possible loss of data
The following snippet of code in the generated .cpp source file:
Parser ::state_type
Parser ::yy_lr_goto_state_ (state_type yystate, int yysym)
{
int yyr = yypgoto_[yysym - YYNTOKENS] + yystate;
if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate)
return yytable_[yyr];
else
return yydefgoto_[yysym - YYNTOKENS]; <<<<<<<< Warning.
}
Now this is probably just a nuisance message that can be safely ignored, but I wanted to bring it up to your attention.
IMO the return value just needs to be cast to Parser::state_type.
Strange thing is I still have another error token left in the grammar . When I go from one to two error tokens, it gives me this warning. Remove the second one and the warning goes away. It does not matter which rule I place the second error token in.
I would have thought the warning would exist every time I put it in, not after 'n' occurrences.
Also, when I add that extra error line, my app freezes. Now, I'm 99% sure this freeze is from what I'm doing, but that 1% tells me that I've never had this compile issue, It's a bit odd, and this parser is a state engine which might be in the wrong place.. etc. I've already triggered two Microsoft bugs in this single project / endeavour, slowing me down, so now I'm getting a bit paranoid.
Due to the odd behaviour, I figure I'd run it past you just to make sure.
Sorry to be a bother. Thanks for reading this.