summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoribuclaw <ibuclaw@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-27 01:07:08 +0000
committeribuclaw <ibuclaw@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-27 01:07:08 +0000
commit27b6cda280675c682d182a929b731b934a48a506 (patch)
tree25cd92bdd1255813a46e54925466a36b26173cb4
parentf8aafc4093be3b549e4975e4d4342d7e64fa15e4 (diff)
downloadgcc-27b6cda280675c682d182a929b731b934a48a506.tar.gz
libiberty/ChangeLog:
2016-01-27 Iain Buclaw <ibuclaw@gdcproject.org> * 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: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232862 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--libiberty/ChangeLog6
-rw-r--r--libiberty/d-demangle.c18
-rw-r--r--libiberty/testsuite/d-demangle-expected40
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 <ibuclaw@gdcproject.org>
+
+ * 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 <vapier@gentoo.org>
* 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