Fix warnings: syntax.c: get_id_list(): Double free: FP.

Problem    : Double free @ 5213.
Diagnostic : False positive.
Rationale  : Suggested error path contains two consecutive invocations
             of `ends_excmd(*p)` having different results, which is not
             possible. First invocation is before the while loop. Second
             invocation is the while loop condition itsef.
Resolution : Refactor while loop into do-while loop. That removes the
             impossible path from analysis, and, in addition, is a bit
             more efficient.
Fix warnings: undo.c: u_blockfree(): Use after free: FP.

Problem    : Use-after-free @ 2686.
Diagnostic : False positive.
Rationale  : Suggested error path is taking false branch
             `uhp->uh_next.pth != NULL` @ 2506, which cannot happen when
             `uhp == buf->b_u_oldhead`.
Resolution : Assert `uhp != buf->b_u_oldhead` when taking that branch.
Fix warnings: charset.c: win_lbr_chartabsize(): Dead assignment: HI.

Problem    : Dead assignment @ 1037.
Diagnostic : Harmless issue.
Rationale  : `tab_corr` is in effect not used after signaled point.
             Previous code using it after that point was removed at
             24ebb018e28187c61900b1616e4f79fec9d70878.
Resolution : Remove dead assignment. As only one usage remains, remove
             variable and inline the only usage.