From 008544ecefc724ebf145c583c825b470f0f07857 Mon Sep 17 00:00:00 2001 From: Iain Buclaw Date: Wed, 27 Jan 2016 01:07:08 +0000 Subject: libiberty/ChangeLog: 2016-01-27 Iain Buclaw * d-demangle.c (dlang_type): Handle function types only in the context of seeing a pointer type symbol. * testsuite/d-demangle-expected: Update function pointer tests. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@232862 138bc75d-0d04-0410-961f-82ee72b054a4 --- libiberty/ChangeLog | 6 +++++ libiberty/d-demangle.c | 18 ++++++++------- libiberty/testsuite/d-demangle-expected | 40 ++++++++++++++++----------------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 1d2ee4ca4f5..aa1af40c50c 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,9 @@ +2016-01-27 Iain Buclaw + + * d-demangle.c (dlang_type): Handle function types only in the context + of seeing a pointer type symbol. + * testsuite/d-demangle-expected: Update function pointer tests. + 2016-01-05 Mike Frysinger * argv.c (dupargv): Change arg to char * const *. Update comment. diff --git a/libiberty/d-demangle.c b/libiberty/d-demangle.c index 3d7ccf67985..9c4d4597e8d 100644 --- a/libiberty/d-demangle.c +++ b/libiberty/d-demangle.c @@ -1,5 +1,5 @@ /* Demangler for the D programming language - Copyright 2014, 2015 Free Software Foundation, Inc. + Copyright 2014, 2015, 2016 Free Software Foundation, Inc. Written by Iain Buclaw (ibuclaw@gdcproject.org) This file is part of the libiberty library. @@ -533,6 +533,15 @@ dlang_type (string *decl, const char *mangled) } case 'P': /* pointer (T*) */ mangled++; + /* Function pointer types don't include the trailing asterisk. */ + switch (*mangled) + { + case 'F': case 'U': case 'W': + case 'V': case 'R': + mangled = dlang_function_type (decl, mangled); + string_append (decl, "function"); + return mangled; + } mangled = dlang_type (decl, mangled); string_append (decl, "*"); return mangled; @@ -564,13 +573,6 @@ dlang_type (string *decl, const char *mangled) mangled++; return dlang_parse_tuple (decl, mangled); - /* Function types */ - case 'F': case 'U': case 'W': - case 'V': case 'R': - mangled = dlang_function_type (decl, mangled); - string_append (decl, "function"); - return mangled; - /* Basic types */ case 'n': mangled++; diff --git a/libiberty/testsuite/d-demangle-expected b/libiberty/testsuite/d-demangle-expected index 2b1cc4f2b2f..11785f2c572 100644 --- a/libiberty/testsuite/d-demangle-expected +++ b/libiberty/testsuite/d-demangle-expected @@ -390,23 +390,23 @@ _D8demangle4testFDRZaZv demangle.test(extern(C++) char() delegate) # --format=dlang -_D8demangle4testFFZaZv +_D8demangle4testFPFZaZv demangle.test(char() function) # --format=dlang -_D8demangle4testFUZaZv +_D8demangle4testFPUZaZv demangle.test(extern(C) char() function) # --format=dlang -_D8demangle4testFWZaZv +_D8demangle4testFPWZaZv demangle.test(extern(Windows) char() function) # --format=dlang -_D8demangle4testFVZaZv +_D8demangle4testFPVZaZv demangle.test(extern(Pascal) char() function) # --format=dlang -_D8demangle4testFRZaZv +_D8demangle4testFPRZaZv demangle.test(extern(C++) char() function) # --format=dlang @@ -466,59 +466,59 @@ _D8demangle4testFNjNkDFNjZaZv demangle.test(return char() return delegate) # --format=dlang -_D8demangle4testFFNaZaZv +_D8demangle4testFPFNaZaZv demangle.test(char() pure function) # --format=dlang -_D8demangle4testFFNbZaZv +_D8demangle4testFPFNbZaZv demangle.test(char() nothrow function) # --format=dlang -_D8demangle4testFFNcZaZv +_D8demangle4testFPFNcZaZv demangle.test(char() ref function) # --format=dlang -_D8demangle4testFFNdZaZv +_D8demangle4testFPFNdZaZv demangle.test(char() @property function) # --format=dlang -_D8demangle4testFFNeZaZv +_D8demangle4testFPFNeZaZv demangle.test(char() @trusted function) # --format=dlang -_D8demangle4testFFNfZaZv +_D8demangle4testFPFNfZaZv demangle.test(char() @safe function) # --format=dlang -_D8demangle4testFFNiZaZv +_D8demangle4testFPFNiZaZv demangle.test(char() @nogc function) # --format=dlang -_D8demangle4testFFNaNbZaZv +_D8demangle4testFPFNaNbZaZv demangle.test(char() pure nothrow function) # --format=dlang -_D8demangle4testFFNbNaZaZv +_D8demangle4testFPFNbNaZaZv demangle.test(char() nothrow pure function) # --format=dlang -_D8demangle4testFFNdNfNaZaZv +_D8demangle4testFPFNdNfNaZaZv demangle.test(char() @property @safe pure function) # --format=dlang -_D8demangle4testFNjFZaZv +_D8demangle4testFNjPFZaZv demangle.test(char() function) # --format=dlang -_D8demangle4testFNkFZaZv +_D8demangle4testFNkPFZaZv demangle.test(return char() function) # --format=dlang -_D8demangle4testFFNjZaZv +_D8demangle4testFPFNjZaZv demangle.test(char() return function) # --format=dlang -_D8demangle4testFNjNkFNjZaZv +_D8demangle4testFNjNkPFNjZaZv demangle.test(return char() return function) # --format=dlang @@ -989,7 +989,7 @@ object.TypeInfo_Array.argTypes(out TypeInfo, out TypeInfo) # --format=dlang _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv -rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function*).tryExec(scope void() delegate) +rt.dmain2._d_run_main(int, char**, extern(C) int(char[][]) function).tryExec(scope void() delegate) # --format=dlang _D6object9Exception6__ctorMFNaNbNfAyaAyamC6object9ThrowableZC9Exception -- cgit v1.2.3