On Wed, May 05, 2021 at 10:40:57AM +0800, Nick Gasson wrote: > Hi, > > When I build my program with the lex(1) in OpenBSD I get the following > warning: > > src/lexer.c:2415:3: warning: misleading indentation; statement is not part of > the previous 'if' > [-Wmisleading-indentation] > return yy_is_jam ? 0 : yy_current_state; > ^ > src/lexer.c:2412:2: note: previous statement is here > if ( ! yy_is_jam ) > ^ > > It comes from this section of code in the generated scanner: > > if ( ! yy_is_jam ) > *(yy_state_ptr)++ = yy_current_state; > > return yy_is_jam ? 0 : yy_current_state; > > This also happens when building lex(1) with WARNINGS=yes and possibly > other programs in base. The diff below adds a blank line to the M4 > skeleton file and changes the indentation to > > if ( ! yy_is_jam ) > *(yy_state_ptr)++ = yy_current_state; > > return yy_is_jam ? 0 : yy_current_state; > > I noticed upstream flex fixed the same problem by removing the leading > whitespace before the return which produces identical output, but I > prefer the diff below as it preserves the correct indentation in the > skeleton file. > > https://github.com/westes/flex/blob/master/src/flex.skl#L1761 >
I had the same diff in my tree a while back but decided not to commit it (or rather a version that adds braces) to avoid a conflict for the next person who updates lex. I'm ok with landing this or the upstream fix, but I'm not likely the person who will take care of said update... > > Index: usr.bin/lex/flex.skl > =================================================================== > RCS file: /cvs/src/usr.bin/lex/flex.skl,v > retrieving revision 1.17 > diff -u -p -u -p -r1.17 flex.skl > --- usr.bin/lex/flex.skl 6 Aug 2020 17:23:29 -0000 1.17 > +++ usr.bin/lex/flex.skl 5 May 2021 02:32:47 -0000 > @@ -1807,6 +1807,7 @@ m4_ifdef( [[M4_YY_USES_REJECT]], > %% [17.0] code to find the next state, and perhaps do backing up, goes here > > M4_YY_NOOP_GUTS_VAR(); > + > return yy_is_jam ? 0 : yy_current_state; > } >
