Hello, The macro flex_die(), defined in flexdef.h, never returns. Instead it does FLEX_EXIT() which longjmp()s back to flex_main() before exiting. The following patch removes some dead code, as statements after flex_die() are never reached. Does this look OK?
- Michael Index: tables.c =================================================================== RCS file: /cvs/src/usr.bin/lex/tables.c,v retrieving revision 1.4 diff -u -p -u -r1.4 tables.c --- tables.c 17 Aug 2017 19:27:09 -0000 1.4 +++ tables.c 30 Oct 2019 12:32:59 -0000 @@ -221,34 +221,26 @@ int yytbl_data_fwrite (struct yytbl_writ default: flex_die (_("invalid td_flags detected")); } - if (rv < 0) { + if (rv < 0) flex_die (_("error while writing tables")); - return -1; - } bwritten += rv; } /* Sanity check */ - if (bwritten != (int) (12 + total_len * YYTDFLAGS2BYTES (td->td_flags))) { + if (bwritten != (int) (12 + total_len * YYTDFLAGS2BYTES (td->td_flags))) flex_die (_("insanity detected")); - return -1; - } /* add padding */ - if ((rv = yytbl_write_pad64 (wr)) < 0) { + if ((rv = yytbl_write_pad64 (wr)) < 0) flex_die (_("pad64 failed")); - return -1; - } bwritten += rv; /* Now go back and update the th_hsize member */ if (fgetpos (wr->out, &pos) != 0 || fsetpos (wr->out, &(wr->th_ssize_pos)) != 0 || yytbl_write32 (wr, wr->total_written) < 0 - || fsetpos (wr->out, &pos)) { + || fsetpos (wr->out, &pos)) flex_die (_("get|set|fwrite32 failed")); - return -1; - } else /* Don't count the int we just wrote. */ wr->total_written -= sizeof (flex_int32_t); @@ -346,7 +338,6 @@ static flex_int32_t yytbl_data_geti (con return ((flex_int32_t *) (tbl->td_data))[i]; default: flex_die (_("invalid td_flags detected")); - break; } return 0; } @@ -374,7 +365,6 @@ static void yytbl_data_seti (const struc break; default: flex_die (_("invalid td_flags detected")); - break; } } @@ -433,10 +423,8 @@ void yytbl_data_compress (struct yytbl_d /* No change in this table needed. */ return; - if (newsz > (int) YYTDFLAGS2BYTES (tbl->td_flags)) { + if (newsz > (int) YYTDFLAGS2BYTES (tbl->td_flags)) flex_die (_("detected negative compression")); - return; - } total_len = yytbl_calc_total_len (tbl); newtbl.td_data = calloc (total_len, newsz);