summaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
authorLuís Ferreira <contact@lsferreira.net>2021-10-17 18:34:25 -0400
committerJeff Law <jeffreyalaw@gmail.com>2021-10-17 18:38:10 -0400
commitfb5b0778586674c31f69d866038a5b5bd9a151ee (patch)
tree2a960d1b5288ab32a24394734fec8a465d53fb33 /libiberty
parent5d4d64faa71a6389bfb76bfb3334b63360cf62c0 (diff)
[PATCH] d-demangle: properly skip anonymous symbols
libiberty/ PR d/102618 * d-demangle.c (dlang_parse_qualified): Handle anonymous symbols correctly. * testsuite/d-demangle-expected: New tests to cover anonymous symbols.
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/d-demangle.c14
-rw-r--r--libiberty/testsuite/d-demangle-expected8
2 files changed, 18 insertions, 4 deletions
diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c
index 880f2ec85a4..6c7ac5a14fd 100644
--- a/libiberty/d-demangle.c
+++ b/libiberty/d-demangle.c
@@ -1650,13 +1650,19 @@ dlang_parse_qualified (string *decl, const char *mangled,
size_t n = 0;
do
{
+ /* Skip over anonymous symbols. */
+ if (*mangled == '0')
+ {
+ do
+ mangled++;
+ while (*mangled == '0');
+
+ continue;
+ }
+
if (n++)
string_append (decl, ".");
- /* Skip over anonymous symbols. */
- while (*mangled == '0')
- mangled++;
-
mangled = dlang_identifier (decl, mangled, info);
/* Consume the encoded arguments. However if this is not followed by the
diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected
index e1b296ff0b0..47b059c4298 100644
--- a/libiberty/testsuite/d-demangle-expected
+++ b/libiberty/testsuite/d-demangle-expected
@@ -1462,3 +1462,11 @@ mod.func().nested!(int).nested()
--format=dlang
_D6mangle__T8fun21753VSQv6S21753S1f_DQBj10__lambda71MFNaNbNiNfZvZQCbQp
mangle.fun21753!(mangle.S21753(mangle.__lambda71())).fun21753
+#
+--format=dlang
+_D8demangle9anonymous0Z
+demangle.anonymous
+#
+--format=dlang
+_D8demangle9anonymous03fooZ
+demangle.anonymous.foo