Post by John Darrington
In lib/error.c the function void error (int status, int errnum, const char *message, ...)
has a va_start but no corresponding va_end.
This will leak memory.
The call to va_end occurs inside the 'error_tail' function, which 'error' invokes
It is surely a POSIX violation, because POSIX  says
"Each invocation of the va_start() and va_copy() macros shall be matched by a
corresponding invocation of the va_end() macro in the same function."
However, I don't think that it will "leak memory", because
- If va_start was to allocate memory, it would have to provide an error code.
But no, va_start always returns successfully.
- The GCC implementation of __builtin_va_end expands to empty. 
 gcc-7.1.0 source code:
/* Expand EXP, a call to __builtin_va_end. */
expand_builtin_va_end (tree exp)
tree valist = CALL_EXPR_ARG (exp, 0);
/* Evaluate for side effects, if needed. I hate macros that don't
do that. */
if (TREE_SIDE_EFFECTS (valist))
expand_expr (valist, const0_rtx, VOIDmode, EXPAND_NORMAL);