Sync libiberty sources with GCC.

PR demangler/70909
	PR demangler/67264
	* cp-demangle.c: Fix endless recursion. Pass
	struct demangle_component as non const.
	(d_make_empty): Initialize variable.
	(d_print_comp_inner): Limit recursion.
	(d_print_comp): Decrement variable.
	* cp-demint.c (cplus_demangle_fill_component): Initialize
	variable.
	(cplus_demangle_fill_builtin_type): Likewise.
	(cplus_demangle_fill_operator): Likewise.
	* testsuite/demangle-expected: Add tests.
This commit is contained in:
Nick Clifton 2017-03-13 17:49:32 +00:00
parent 5ef2d51bd6
commit c793cac124
6 changed files with 99 additions and 27 deletions

View file

@ -494,6 +494,11 @@ struct demangle_component
/* The type of this component. */
enum demangle_component_type type;
/* Guard against recursive component printing.
Initialize to zero. Private to d_print_comp.
All other fields are final after initialization. */
int d_printing;
union
{
/* For DEMANGLE_COMPONENT_NAME. */
@ -688,7 +693,7 @@ cplus_demangle_v3_components (const char *mangled, int options, void **mem);
extern char *
cplus_demangle_print (int options,
const struct demangle_component *tree,
struct demangle_component *tree,
int estimated_length,
size_t *p_allocated_size);
@ -708,7 +713,7 @@ cplus_demangle_print (int options,
extern int
cplus_demangle_print_callback (int options,
const struct demangle_component *tree,
struct demangle_component *tree,
demangle_callbackref callback, void *opaque);
#ifdef __cplusplus