re PR java/12586 (gnu.java.net name mangling bug)

Fix for PR java/12586.
        * mangle.c (find_compression_record_match): Don't iterate through
        package namespace elements unless they all match compression_table
        entries.

From-SVN: r72779
This commit is contained in:
Bryce McKinlay 2003-10-21 23:59:46 +00:00 committed by Bryce McKinlay
parent 890c2f2b1c
commit ed2506a4dc
2 changed files with 27 additions and 29 deletions

View File

@ -1,3 +1,10 @@
2003-10-22 Bryce McKinlay <bryce@mckinlay.net.nz>
Fix for PR java/12586.
* mangle.c (find_compression_record_match): Don't iterate through
package namespace elements unless they all match compression_table
entries.
2003-10-20 Kelley Cook <kcook@gcc.gnu.org>
* Make-lang.in (info): Honor $(parsedir) and $(docobjdir).

View File

@ -287,38 +287,29 @@ find_compression_array_template_match (tree string)
static int
find_compression_record_match (tree type, tree *next_current)
{
int i, match;
int i, match = -1;
tree current, saved_current = NULL_TREE;
/* Search from the beginning for something that matches TYPE, even
partially. */
for (current = TYPE_PACKAGE_LIST (type), i = 0, match = -1; current;
current = TREE_CHAIN (current))
current = TYPE_PACKAGE_LIST (type);
for (i = 0; i < compression_next; i++)
{
int j;
for (j = i; j < compression_next; j++)
if (TREE_VEC_ELT (compression_table, j) == TREE_PURPOSE (current))
{
match = i = j;
saved_current = current;
i++;
break;
}
else if (atms && TREE_VEC_ELT (compression_table, j) == atms)
{
/* Skip over a "6JArray". */
}
else
{
/* We don't want to match an element that appears in the middle
of a package name, so skip forward to the next complete type name.
IDENTIFIER_NODEs (except for a "6JArray") are partial package
names while RECORD_TYPEs represent complete type names. */
while (j < compression_next
&& TREE_CODE (TREE_VEC_ELT (compression_table, j)) ==
IDENTIFIER_NODE)
j++;
}
tree compression_entry = TREE_VEC_ELT (compression_table, i);
if (current && compression_entry == TREE_PURPOSE (current))
{
match = i;
saved_current = current;
current = TREE_CHAIN (current);
}
else
/* We don't want to match an element that appears in the middle
of a package name, so skip forward to the next complete type name.
IDENTIFIER_NODEs (except for a "6JArray") are partial package
names while RECORD_TYPEs represent complete type names. */
while (i < compression_next
&& TREE_CODE (compression_entry) == IDENTIFIER_NODE
&& compression_entry != atms)
compression_entry = TREE_VEC_ELT (compression_table, ++i);
}
if (!next_current)