This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: C++ demangler fix


On Wed, Sep 04, 2013 at 03:29:43PM +0100, Gary Benson wrote:
> I've added the result to the demangler test suite, but I know of
> no way to check the validity of the demangled symbol other than by
> inspection (and I am no expert here!)  If anybody knows a way to
> check this then please let me know!  Otherwise, I hope this
> not-really-checked demangled version is acceptable.

Unfortunately this patch broke GCC bootstrap.
cp-demangle.c isn't used just in libiberty, where using hashtab,
xcalloc, XNEW etc. is fine, but also in libsupc++/libstdc++, where
none of that is fine.  That is why cp-demangle.c only uses e.g. realloc,
checks for allocation failures and propagates those to the caller
if they happen (see allocation_failure field).  hashtab.o isn't linked
into libstdc++ nor libsupc++, and the question is if we really do want to
link all the hashtable code into libstdc++.
How many hash table entries are there typically?  Is a hashtable required?

> diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
> index e4ce0b9..a084282 100644
> --- a/libiberty/ChangeLog
> +++ b/libiberty/ChangeLog
> @@ -1,3 +1,22 @@
> +2013-09-04  Gary Benson  <gbenson@redhat.com>
> +
> +	* cp-demangle.c: Include hashtab.h.
> +	(struct d_print_info): New field saved_scopes.
> +	(d_print_init): Initialize the above.
> +	(d_print_free): New function.
> +	(cplus_demangle_print_callback): Call the above.
> +	(struct d_saved_scope): New structure.
> +	(d_store_scope): New function.
> +	(d_free_scope) Likewise.
> +	(d_restore_scope) Likewise.
> +	(d_hash_saved_scope) Likewise.
> +	(d_equal_saved_scope) Likewise.
> +	(d_print_comp): New variable saved_scope.
> +	[DEMANGLE_COMPONENT_REFERENCE,
> +	DEMANGLE_COMPONENT_RVALUE_REFERENCE]: Capture scope the first
> +	time the component is traversed, and use the captured scope for
> +	subsequent traversals.

	Jakub


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]