diff options
author | ibuclaw <ibuclaw@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-16 16:49:57 +0000 |
---|---|---|
committer | ibuclaw <ibuclaw@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-05-16 16:49:57 +0000 |
commit | ba24f8c5d2643786b0452bfd6050ae09e04f2272 (patch) | |
tree | 610a5aec9fdc36bdbcaa4dd117b7afab0f73e88b /libiberty | |
parent | 7b3c2ca8f43a981d7752dc3a2cc834f89af1e9b6 (diff) | |
download | gcc-ba24f8c5d2643786b0452bfd6050ae09e04f2272.tar.gz |
libiberty/ChangeLog:
2015-05-16 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_attributes): Handle return attributes, ignoring
return parameters in the mangled string. Return NULL if have encountered
an unknown attribute.
(dlang_function_args): Handle return parameters in the mangled string.
* testsuite/d-demangle-expected: Add coverage tests for functions with
return parameters and return attributes.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@223244 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libiberty')
-rw-r--r-- | libiberty/ChangeLog | 9 | ||||
-rw-r--r-- | libiberty/d-demangle.c | 15 | ||||
-rw-r--r-- | libiberty/testsuite/d-demangle-expected | 40 |
3 files changed, 64 insertions, 0 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 37425c8df81..609c5e85863 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,5 +1,14 @@ 2015-05-16 Iain Buclaw <ibuclaw@gdcproject.org> + * d-demangle.c (dlang_attributes): Handle return attributes, ignoring + return parameters in the mangled string. Return NULL if have encountered + an unknown attribute. + (dlang_function_args): Handle return parameters in the mangled string. + * testsuite/d-demangle-expected: Add coverage tests for functions with + return parameters and return attributes. + +2015-05-16 Iain Buclaw <ibuclaw@gdcproject.org> + * d-demangle.c (dlang_identifier): Check encoded length of identifier to verify strncmp matches entire string. * testsuite/d-demangle-expected: Fix wrong test for postblit symbol. diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 011e62bc662..8104a345e1d 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -292,8 +292,10 @@ dlang_attributes (string *decl, const char *mangled) continue; case 'g': case 'h': + case 'k': /* inout parameter is represented as 'Ng'. vector parameter is represented as 'Nh'. + return paramenter is represented as 'Nk'. If we see this, then we know we're really in the parameter list. Rewind and break. */ mangled--; @@ -302,6 +304,13 @@ dlang_attributes (string *decl, const char *mangled) mangled++; string_append (decl, "@nogc "); continue; + case 'j': /* return */ + mangled++; + string_append (decl, "return "); + continue; + + default: /* unknown attribute */ + return NULL; } break; } @@ -391,6 +400,12 @@ dlang_function_args (string *decl, const char *mangled) string_append (decl, "scope "); } + if (mangled[0] == 'N' && mangled[1] == 'k') /* return(T) */ + { + mangled += 2; + string_append (decl, "return "); + } + switch (*mangled) { case 'J': /* out(T) */ diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index b0b9ca0b49d..5dd0678a01b 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -314,6 +314,14 @@ _D8demangle4testFMaZv demangle.test(scope char) # --format=dlang +_D8demangle4testFNjaZv +demangle.test(char) +# +--format=dlang +_D8demangle4testFNkaZv +demangle.test(return char) +# +--format=dlang _D8demangle4testFaXv demangle.test(char...) # @@ -434,6 +442,22 @@ _D8demangle4testFDFNdNfNaZaZv demangle.test(char() @property @safe pure delegate) # --format=dlang +_D8demangle4testFNjDFZaZv +demangle.test(char() delegate) +# +--format=dlang +_D8demangle4testFNkDFZaZv +demangle.test(return char() delegate) +# +--format=dlang +_D8demangle4testFDFNjZaZv +demangle.test(char() return delegate) +# +--format=dlang +_D8demangle4testFNjNkDFNjZaZv +demangle.test(return char() return delegate) +# +--format=dlang _D8demangle4testFFNaZaZv demangle.test(char() pure function) # @@ -474,6 +498,22 @@ _D8demangle4testFFNdNfNaZaZv demangle.test(char() @property @safe pure function) # --format=dlang +_D8demangle4testFNjFZaZv +demangle.test(char() function) +# +--format=dlang +_D8demangle4testFNkFZaZv +demangle.test(return char() function) +# +--format=dlang +_D8demangle4testFFNjZaZv +demangle.test(char() return function) +# +--format=dlang +_D8demangle4testFNjNkFNjZaZv +demangle.test(return char() return function) +# +--format=dlang _D8demangle4test6__initZ demangle.test.init$ # |