diff options
author | Luís Ferreira <contact@lsferreira.net> | 2021-10-17 18:34:25 -0400 |
---|---|---|
committer | Jeff Law <jeffreyalaw@gmail.com> | 2021-10-17 18:38:10 -0400 |
commit | fb5b0778586674c31f69d866038a5b5bd9a151ee (patch) | |
tree | 2a960d1b5288ab32a24394734fec8a465d53fb33 /libiberty | |
parent | 5d4d64faa71a6389bfb76bfb3334b63360cf62c0 (diff) | |
download | gcc-fb5b0778586674c31f69d866038a5b5bd9a151ee.zip gcc-fb5b0778586674c31f69d866038a5b5bd9a151ee.tar.gz gcc-fb5b0778586674c31f69d866038a5b5bd9a151ee.tar.bz2 |
[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.c | 14 | ||||
-rw-r--r-- | libiberty/testsuite/d-demangle-expected | 8 |
2 files changed, 18 insertions, 4 deletions
diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 880f2ec..6c7ac5a 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 e1b296f..47b059c 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 |