# HG changeset patch # User John W. Eaton # Date 1381785130 14400 # Node ID 0c5f50706ba344387fb6b1fe789ae03f90ef175e # Parent b4783277bd115f9f95c16a5d17b271f7e1f09612 attempt to catch possible memory leaks in parser cleanup * oct-parse.in.yy: Explicitly list all semantic types in %destructor declarations. Use wildcard to detect unhandled cases. diff -r b4783277bd11 -r 0c5f50706ba3 libinterp/parse-tree/oct-parse.in.yy --- a/libinterp/parse-tree/oct-parse.in.yy Mon Oct 14 22:27:07 2013 +0200 +++ b/libinterp/parse-tree/oct-parse.in.yy Mon Oct 14 17:12:10 2013 -0400 @@ -301,9 +301,47 @@ // How to clean up if there is a parse error. We handle deleting tokens // and comments seperately and separators are just characters. The // remaining items are dynamically allocated parse tree objects that -// must be deleted. -%destructor { } <> -%destructor { delete $$; } <*> +// must be deleted. Use the wildcard case (<*>) to detect unhandled +// cases (for example, a new semantic type is added but not handled +// here). + +%destructor { } +%destructor { } +%destructor { } +%destructor { } +%destructor { } <> + +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } +%destructor { delete $$; } + +%destructor { + warning_with_id + ("Octave:parser-destructor", + "possible memory leak in cleanup following parse error"); + } <*> // Where to start. %start input