merge from gcc
This commit is contained in:
parent
3cac54d216
commit
6a44904e97
@ -1,5 +1,6 @@
|
|||||||
2010-09-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
2010-06-27 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||||
|
|
||||||
|
PR bootstrap/44621
|
||||||
* configure: Regenerate.
|
* configure: Regenerate.
|
||||||
|
|
||||||
2010-04-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
2010-04-02 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2010-09-22 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
|
* cplus-dem.c (ada_demangle): Add comments.
|
||||||
|
Handle stream and controlled type operations.
|
||||||
|
Decoding of some uppercase letters moved before separators.
|
||||||
|
* testsuite/demangle-expected: Add tests.
|
||||||
|
|
||||||
2010-09-10 James Lyon <jameslyon0@googlemail.com>
|
2010-09-10 James Lyon <jameslyon0@googlemail.com>
|
||||||
|
|
||||||
http://sourceware.org/bugzilla/show_bug.cgi?id=11572
|
http://sourceware.org/bugzilla/show_bug.cgi?id=11572
|
||||||
@ -5,32 +12,6 @@
|
|||||||
DEMANGLE_COMPONENT_LAMBDA.
|
DEMANGLE_COMPONENT_LAMBDA.
|
||||||
* testsuite/demangle-expected: Add regression test.
|
* testsuite/demangle-expected: Add regression test.
|
||||||
|
|
||||||
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
|
|
||||||
index d2d15e9..39c8cc0 100644
|
|
||||||
--- a/libiberty/cp-demangle.c
|
|
||||||
+++ b/libiberty/cp-demangle.c
|
|
||||||
@@ -3480,6 +3480,7 @@ d_find_pack (struct d_print_info *dpi,
|
|
||||||
case DEMANGLE_COMPONENT_PACK_EXPANSION:
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
+ case DEMANGLE_COMPONENT_LAMBDA:
|
|
||||||
case DEMANGLE_COMPONENT_NAME:
|
|
||||||
case DEMANGLE_COMPONENT_OPERATOR:
|
|
||||||
case DEMANGLE_COMPONENT_BUILTIN_TYPE:
|
|
||||||
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
|
|
||||||
index 15a0fe7..0085564 100644
|
|
||||||
--- a/libiberty/testsuite/demangle-expected
|
|
||||||
+++ b/libiberty/testsuite/demangle-expected
|
|
||||||
@@ -4052,3 +4052,8 @@ prot.lock.update
|
|
||||||
--format=gnu-v3
|
|
||||||
DFA
|
|
||||||
DFA
|
|
||||||
+#
|
|
||||||
+# http://sourceware.org/bugzilla/show_bug.cgi?id=11572
|
|
||||||
+--format=auto
|
|
||||||
+_ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_
|
|
||||||
+Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&&&)...)
|
|
||||||
|
|
||||||
2010-09-08 Tristan Gingold <gingold@adacore.com>
|
2010-09-08 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
PR 44001
|
PR 44001
|
||||||
|
@ -895,18 +895,20 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
/* Most of the demangling will trivially remove chars. Operator names
|
/* Most of the demangling will trivially remove chars. Operator names
|
||||||
may add one char but because they are always preceeded by '__' which is
|
may add one char but because they are always preceeded by '__' which is
|
||||||
replaced by '.', they eventually never expand the size. '___elabs' and
|
replaced by '.', they eventually never expand the size.
|
||||||
'___elabb' add only 2 chars, but they occur only once. */
|
A few special names such as '___elabs' add a few chars (at most 7), but
|
||||||
len0 = strlen (mangled) + 2 + 1;
|
they occur only once. */
|
||||||
|
len0 = strlen (mangled) + 7 + 1;
|
||||||
demangled = XNEWVEC (char, len0);
|
demangled = XNEWVEC (char, len0);
|
||||||
|
|
||||||
d = demangled;
|
d = demangled;
|
||||||
p = mangled;
|
p = mangled;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
/* Convert name, which is always lower-case. */
|
/* An entity names is expected. */
|
||||||
if (ISLOWER (*p))
|
if (ISLOWER (*p))
|
||||||
{
|
{
|
||||||
|
/* An identifier, which is always lower case. */
|
||||||
do
|
do
|
||||||
*d++ = *p++;
|
*d++ = *p++;
|
||||||
while (ISLOWER(*p) || ISDIGIT (*p)
|
while (ISLOWER(*p) || ISDIGIT (*p)
|
||||||
@ -914,6 +916,7 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
}
|
}
|
||||||
else if (p[0] == 'O')
|
else if (p[0] == 'O')
|
||||||
{
|
{
|
||||||
|
/* An operator name. */
|
||||||
static const char * const operators[][2] =
|
static const char * const operators[][2] =
|
||||||
{{"Oabs", "abs"}, {"Oand", "and"}, {"Omod", "mod"},
|
{{"Oabs", "abs"}, {"Oand", "and"}, {"Omod", "mod"},
|
||||||
{"Onot", "not"}, {"Oor", "or"}, {"Orem", "rem"},
|
{"Onot", "not"}, {"Oor", "or"}, {"Orem", "rem"},
|
||||||
@ -924,22 +927,22 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
{"Oexpon", "**"}, {NULL, NULL}};
|
{"Oexpon", "**"}, {NULL, NULL}};
|
||||||
int k;
|
int k;
|
||||||
|
|
||||||
for (k = 0; operators[k][0]; k++)
|
for (k = 0; operators[k][0] != NULL; k++)
|
||||||
{
|
{
|
||||||
int l = strlen (operators[k][0]);
|
size_t slen = strlen (operators[k][0]);
|
||||||
if (!strncmp (p, operators[k][0], l))
|
if (strncmp (p, operators[k][0], slen) == 0)
|
||||||
{
|
{
|
||||||
p += l;
|
p += slen;
|
||||||
l = strlen (operators[k][1]);
|
slen = strlen (operators[k][1]);
|
||||||
*d++ = '"';
|
*d++ = '"';
|
||||||
memcpy (d, operators[k][1], l);
|
memcpy (d, operators[k][1], slen);
|
||||||
d += l;
|
d += slen;
|
||||||
*d++ = '"';
|
*d++ = '"';
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Operator not found. */
|
/* Operator not found. */
|
||||||
if (!operators[k][0])
|
if (operators[k][0] == NULL)
|
||||||
goto unknown;
|
goto unknown;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -948,6 +951,92 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
goto unknown;
|
goto unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The name can be directly followed by some uppercase letters. */
|
||||||
|
if (p[0] == 'T' && p[1] == 'K')
|
||||||
|
{
|
||||||
|
/* Task stuff. */
|
||||||
|
if (p[2] == 'B' && p[3] == 0)
|
||||||
|
{
|
||||||
|
/* Subprogram for task body. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (p[2] == '_' && p[3] == '_')
|
||||||
|
{
|
||||||
|
/* Inner declarations in a task. */
|
||||||
|
p += 4;
|
||||||
|
*d++ = '.';
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
goto unknown;
|
||||||
|
}
|
||||||
|
if (p[0] == 'E' && p[1] == 0)
|
||||||
|
{
|
||||||
|
/* Exception name. */
|
||||||
|
goto unknown;
|
||||||
|
}
|
||||||
|
if ((p[0] == 'P' || p[0] == 'N') && p[1] == 0)
|
||||||
|
{
|
||||||
|
/* Protected type subprogram. */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((*p == 'N' || *p == 'S') && p[1] == 0)
|
||||||
|
{
|
||||||
|
/* Enumerated type name table. */
|
||||||
|
goto unknown;
|
||||||
|
}
|
||||||
|
if (p[0] == 'X')
|
||||||
|
{
|
||||||
|
/* Body nested. */
|
||||||
|
p++;
|
||||||
|
while (p[0] == 'n' || p[0] == 'b')
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
if (p[0] == 'S' && p[1] != 0 && (p[2] == '_' || p[2] == 0))
|
||||||
|
{
|
||||||
|
/* Stream operations. */
|
||||||
|
const char *name;
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case 'R':
|
||||||
|
name = "'Read";
|
||||||
|
break;
|
||||||
|
case 'W':
|
||||||
|
name = "'Write";
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
name = "'Input";
|
||||||
|
break;
|
||||||
|
case 'O':
|
||||||
|
name = "'Output";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto unknown;
|
||||||
|
}
|
||||||
|
p += 2;
|
||||||
|
strcpy (d, name);
|
||||||
|
d += strlen (name);
|
||||||
|
}
|
||||||
|
else if (p[0] == 'D')
|
||||||
|
{
|
||||||
|
/* Controlled type operation. */
|
||||||
|
const char *name;
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case 'F':
|
||||||
|
name = ".Finalize";
|
||||||
|
break;
|
||||||
|
case 'A':
|
||||||
|
name = ".Adjust";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto unknown;
|
||||||
|
}
|
||||||
|
strcpy (d, name);
|
||||||
|
d += strlen (name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (p[0] == '_')
|
if (p[0] == '_')
|
||||||
{
|
{
|
||||||
/* Separator. */
|
/* Separator. */
|
||||||
@ -955,24 +1044,49 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
{
|
{
|
||||||
/* Standard separator. Handled first. */
|
/* Standard separator. Handled first. */
|
||||||
p += 2;
|
p += 2;
|
||||||
|
|
||||||
if (ISDIGIT (*p))
|
if (ISDIGIT (*p))
|
||||||
{
|
{
|
||||||
/* Overloading. */
|
/* Overloading number. */
|
||||||
do
|
do
|
||||||
p++;
|
p++;
|
||||||
while (ISDIGIT (*p) || (p[0] == '_' && ISDIGIT (p[1])));
|
while (ISDIGIT (*p) || (p[0] == '_' && ISDIGIT (p[1])));
|
||||||
|
if (*p == 'X')
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
while (p[0] == 'n' || p[0] == 'b')
|
||||||
|
p++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (*p == '_' && !strcmp (p + 1, "elabb"))
|
else if (p[0] == '_' && p[1] != '_')
|
||||||
{
|
{
|
||||||
memcpy (d, "'Elab_Body", 10);
|
/* Special names. */
|
||||||
d += 10;
|
static const char * const special[][2] = {
|
||||||
break;
|
{ "_elabb", "'Elab_Body" },
|
||||||
}
|
{ "_elabs", "'Elab_Spec" },
|
||||||
else if (*p == '_' && !strcmp (p + 1, "elabs"))
|
{ "_size", "'Size" },
|
||||||
{
|
{ "_alignment", "'Alignment" },
|
||||||
memcpy (d, "'Elab_Spec", 10);
|
{ "_assign", ".\":=\"" },
|
||||||
d += 10;
|
{ NULL, NULL }
|
||||||
break;
|
};
|
||||||
|
int k;
|
||||||
|
|
||||||
|
for (k = 0; special[k][0] != NULL; k++)
|
||||||
|
{
|
||||||
|
size_t slen = strlen (special[k][0]);
|
||||||
|
if (strncmp (p, special[k][0], slen) == 0)
|
||||||
|
{
|
||||||
|
p += slen;
|
||||||
|
slen = strlen (special[k][1]);
|
||||||
|
memcpy (d, special[k][1], slen);
|
||||||
|
d += slen;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (special[k][0] != NULL)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
goto unknown;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -995,46 +1109,6 @@ ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
|
|||||||
goto unknown;
|
goto unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p[0] == 'T' && p[1] == 'K')
|
|
||||||
{
|
|
||||||
if (p[2] == 'B' && p[3] == 0)
|
|
||||||
{
|
|
||||||
/* Subprogram for task body. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (p[2] == '_' && p[3] == '_')
|
|
||||||
{
|
|
||||||
/* Inner declarations in a task. */
|
|
||||||
p += 4;
|
|
||||||
*d++ = '.';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
goto unknown;
|
|
||||||
}
|
|
||||||
if ((p[0] == 'P' || p[0] == 'N') && p[1] == 0)
|
|
||||||
{
|
|
||||||
/* Protected type subprogram. */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (p[0] == 'E' && p[1] == 0)
|
|
||||||
{
|
|
||||||
/* Exception name. */
|
|
||||||
goto unknown;
|
|
||||||
}
|
|
||||||
if (*p == 'N' || *p == 'S')
|
|
||||||
{
|
|
||||||
/* Enumerated type name table. */
|
|
||||||
goto unknown;
|
|
||||||
}
|
|
||||||
if (p[0] == 'X')
|
|
||||||
{
|
|
||||||
/* Body nested. */
|
|
||||||
if (p[1] == 'n' || p[1] == 'b')
|
|
||||||
p += 2;
|
|
||||||
else if (p[1] == 0)
|
|
||||||
p++;
|
|
||||||
}
|
|
||||||
if (p[0] == '.' && ISDIGIT (p[1]))
|
if (p[0] == '.' && ISDIGIT (p[1]))
|
||||||
{
|
{
|
||||||
/* Nested subprogram. */
|
/* Nested subprogram. */
|
||||||
|
@ -4047,6 +4047,36 @@ prot.lock.update
|
|||||||
--format=gnat
|
--format=gnat
|
||||||
prot__lock__update_E6s
|
prot__lock__update_E6s
|
||||||
prot.lock.update
|
prot.lock.update
|
||||||
|
# Controlled types
|
||||||
|
--format=gnat
|
||||||
|
gnat__sockets__sockets_library_controllerDF__2
|
||||||
|
gnat.sockets.sockets_library_controller.Finalize
|
||||||
|
--format=gnat
|
||||||
|
system__partition_interface__racw_stub_typeDA
|
||||||
|
system.partition_interface.racw_stub_type.Adjust
|
||||||
|
# Stream operations
|
||||||
|
--format=gnat
|
||||||
|
gnat__wide_wide_string_split__slice_setSR__2
|
||||||
|
gnat.wide_wide_string_split.slice_set'Read
|
||||||
|
--format=gnat
|
||||||
|
ada__real_time__timing_events__events__listSW__2Xnn
|
||||||
|
ada.real_time.timing_events.events.list'Write
|
||||||
|
--format=gnat
|
||||||
|
system__finalization_root__root_controlledSI
|
||||||
|
system.finalization_root.root_controlled'Input
|
||||||
|
--format=gnat
|
||||||
|
ada__finalization__limited_controlledSO__2
|
||||||
|
ada.finalization.limited_controlled'Output
|
||||||
|
# Tagged types
|
||||||
|
--format=gnat
|
||||||
|
ada__synchronous_task_control___size__2
|
||||||
|
ada.synchronous_task_control'Size
|
||||||
|
--format=gnat
|
||||||
|
ada__real_time__timing_events__events___alignment__2Xnn
|
||||||
|
ada.real_time.timing_events.events'Alignment
|
||||||
|
--format=gnat
|
||||||
|
system__finalization_root___assign__2
|
||||||
|
system.finalization_root.":="
|
||||||
#
|
#
|
||||||
# Used to crash the demangler.
|
# Used to crash the demangler.
|
||||||
--format=gnu-v3
|
--format=gnu-v3
|
||||||
|
Loading…
Reference in New Issue
Block a user