There were two dead stores found by the llvm analyzer (the value is overwritten before it is read). I've also marked functions calling done() __dead to avoid false positives.
There are two more warnings from the analyzer but I'm fairly certain that they are false positives. - todd Index: closure.c =================================================================== RCS file: /home/cvs/openbsd/src/usr.bin/yacc/closure.c,v retrieving revision 1.13 diff -u -r1.13 closure.c --- closure.c 13 Mar 2014 01:18:22 -0000 1.13 +++ closure.c 1 Dec 2014 16:47:57 -0000 @@ -105,8 +105,6 @@ } } } - - vrow += varsetsize; rrow += rulesetsize; } Index: defs.h =================================================================== RCS file: /home/cvs/openbsd/src/usr.bin/yacc/defs.h,v retrieving revision 1.17 diff -u -r1.17 defs.h --- defs.h 8 Mar 2014 01:05:39 -0000 1.17 +++ defs.h 1 Dec 2014 16:47:57 -0000 @@ -306,42 +306,42 @@ extern void closure(short *, int); extern void finalize_closure(void); -extern void fatal(char *); +extern __dead void fatal(char *); extern void reflexive_transitive_closure(unsigned *, int); -extern void done(int); +extern __dead void done(int); -extern void no_space(void); -extern void open_error(char *); -extern void open_write_error(char *); -extern void unexpected_EOF(void); +extern __dead void no_space(void); +extern __dead void open_error(char *); +extern __dead void open_write_error(char *); +extern __dead void unexpected_EOF(void); extern void print_pos(char *, char *); -extern void syntax_error(int, char *, char *); -extern void unterminated_comment(int, char *, char *); -extern void unterminated_string(int, char *, char *); -extern void unterminated_text(int, char *, char *); -extern void unterminated_union(int, char *, char *); -extern void over_unionized(char *); -extern void illegal_tag(int, char *, char *); -extern void illegal_character(char *); -extern void used_reserved(char *); -extern void tokenized_start(char *); +extern __dead void syntax_error(int, char *, char *); +extern __dead void unterminated_comment(int, char *, char *); +extern __dead void unterminated_string(int, char *, char *); +extern __dead void unterminated_text(int, char *, char *); +extern __dead void unterminated_union(int, char *, char *); +extern __dead void over_unionized(char *); +extern __dead void illegal_tag(int, char *, char *); +extern __dead void illegal_character(char *); +extern __dead void used_reserved(char *); +extern __dead void tokenized_start(char *); extern void retyped_warning(char *); extern void reprec_warning(char *); extern void revalued_warning(char *); -extern void terminal_start(char *); +extern __dead void terminal_start(char *); extern void restarted_warning(void); -extern void no_grammar(void); -extern void terminal_lhs(int); +extern __dead void no_grammar(void); +extern __dead void terminal_lhs(int); extern void prec_redeclared(void); -extern void unterminated_action(int, char *, char *); +extern __dead void unterminated_action(int, char *, char *); extern void dollar_warning(int, int); -extern void dollar_error(int, char *, char *); -extern void untyped_lhs(void); -extern void untyped_rhs(int, char *); -extern void unknown_rhs(int); +extern __dead void dollar_error(int, char *, char *); +extern __dead void untyped_lhs(void); +extern __dead void untyped_rhs(int, char *); +extern __dead void unknown_rhs(int); extern void default_action_warning(void); -extern void undefined_goal(char *); +extern __dead void undefined_goal(char *); extern void undefined_symbol_warning(char *); extern void lalr(void); Index: reader.c =================================================================== RCS file: /home/cvs/openbsd/src/usr.bin/yacc/reader.c,v retrieving revision 1.29 diff -u -r1.29 reader.c --- reader.c 9 Oct 2014 03:02:18 -0000 1.29 +++ reader.c 1 Dec 2014 16:49:31 -0000 @@ -928,7 +928,6 @@ c = nextc(); if (c == EOF) unexpected_EOF(); - value = UNDEFINED; if (isdigit(c)) { value = get_number(); if (bp->value != UNDEFINED && value != bp->value)