static struct cdecl *do_parse(const char *str, int english_mode)
{
+ struct cdecl *decl = NULL;
YY_BUFFER_STATE state;
yyscan_t scanner;
- struct cdecl *decl;
#if YYDEBUG
extern int cdecl__yydebug;
return NULL;
state = cdecl__yy_scan_string(str, scanner);
- if (cdecl__yyparse(scanner, &decl) != 0)
+ if (cdecl__yyparse(scanner, &decl) != 0) {
+ /*
+ * If the input consists of a complete, valid declaration
+ * followed by some garbage, that parsed declaration will
+ * be output by the parser and we need to free it here.
+ */
+ cdecl__free(decl);
decl = NULL;
+ }
cdecl__yy_delete_buffer(state, scanner);
cdecl__yylex_destroy(scanner);