Sync libiberty with GCC.

libiberty/ChangeLog:
	* d-demangle.c (dlang_call_convention): Handle extern Objective-C
	function calling convention.
	(dlang_call_convention_p): Likewise.
	(dlang_type): Likewise.
	* testsuite/d-demangle-expected: Add coverage tests.

	* d-demangle.c (dlang_function_args): Append ',' for variadic functions
	only if parameters were seen before the elipsis symbol.
	* testsuite/d-demangle-expected: Add coverage test for parameter-less
	variadic functions.

	* 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.
This commit is contained in:
Iain Buclaw 2016-01-28 21:44:42 +01:00
parent 56e374a6bc
commit 9d98de835c
3 changed files with 71 additions and 30 deletions

View file

@ -1,3 +1,24 @@
2016-01-27 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_call_convention): Handle extern Objective-C
function calling convention.
(dlang_call_convention_p): Likewise.
(dlang_type): Likewise.
* testsuite/d-demangle-expected: Add coverage tests.
2016-01-27 Iain Buclaw <ibuclaw@gdcproject.org>
* d-demangle.c (dlang_function_args): Append ',' for variadic functions
only if parameters were seen before the elipsis symbol.
* testsuite/d-demangle-expected: Add coverage test for parameter-less
variadic functions.
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> 2016-01-05 Mike Frysinger <vapier@gentoo.org>
* argv.c (dupargv): Change arg to char * const *. Update comment. * argv.c (dupargv): Change arg to char * const *. Update comment.

View file

@ -1,5 +1,5 @@
/* Demangler for the D programming language /* 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) Written by Iain Buclaw (ibuclaw@gdcproject.org)
This file is part of the libiberty library. This file is part of the libiberty library.
@ -223,6 +223,10 @@ dlang_call_convention (string *decl, const char *mangled)
mangled++; mangled++;
string_append (decl, "extern(C++) "); string_append (decl, "extern(C++) ");
break; break;
case 'Y': /* (Objective-C) */
mangled++;
string_append (decl, "extern(Objective-C) ");
break;
default: default:
return NULL; return NULL;
} }
@ -399,7 +403,9 @@ dlang_function_args (string *decl, const char *mangled)
return mangled; return mangled;
case 'Y': /* (variadic T t, ...) style. */ case 'Y': /* (variadic T t, ...) style. */
mangled++; mangled++;
string_append (decl, ", ..."); if (n != 0)
string_append (decl, ", ");
string_append (decl, "...");
return mangled; return mangled;
case 'Z': /* Normal function. */ case 'Z': /* Normal function. */
mangled++; mangled++;
@ -533,6 +539,15 @@ dlang_type (string *decl, const char *mangled)
} }
case 'P': /* pointer (T*) */ case 'P': /* pointer (T*) */
mangled++; mangled++;
/* Function pointer types don't include the trailing asterisk. */
switch (*mangled)
{
case 'F': case 'U': case 'W':
case 'V': case 'R': case 'Y':
mangled = dlang_function_type (decl, mangled);
string_append (decl, "function");
return mangled;
}
mangled = dlang_type (decl, mangled); mangled = dlang_type (decl, mangled);
string_append (decl, "*"); string_append (decl, "*");
return mangled; return mangled;
@ -564,13 +579,6 @@ dlang_type (string *decl, const char *mangled)
mangled++; mangled++;
return dlang_parse_tuple (decl, 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 */ /* Basic types */
case 'n': case 'n':
mangled++; mangled++;
@ -1334,7 +1342,7 @@ dlang_call_convention_p (const char *mangled)
switch (*mangled) switch (*mangled)
{ {
case 'F': case 'U': case 'V': case 'F': case 'U': case 'V':
case 'W': case 'R': case 'W': case 'R': case 'Y':
return 1; return 1;
default: default:

View file

@ -342,6 +342,10 @@ _D8demangle4testFaaYv
demangle.test(char, char, ...) demangle.test(char, char, ...)
# #
--format=dlang --format=dlang
_D8demangle4testFYv
demangle.test(...)
#
--format=dlang
_D8demangle4testFaaZv _D8demangle4testFaaZv
demangle.test(char, char) demangle.test(char, char)
# #
@ -390,26 +394,34 @@ _D8demangle4testFDRZaZv
demangle.test(extern(C++) char() delegate) demangle.test(extern(C++) char() delegate)
# #
--format=dlang --format=dlang
_D8demangle4testFFZaZv _D8demangle4testFDYZaZv
demangle.test(extern(Objective-C) char() delegate)
#
--format=dlang
_D8demangle4testFPFZaZv
demangle.test(char() function) demangle.test(char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFUZaZv _D8demangle4testFPUZaZv
demangle.test(extern(C) char() function) demangle.test(extern(C) char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFWZaZv _D8demangle4testFPWZaZv
demangle.test(extern(Windows) char() function) demangle.test(extern(Windows) char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFVZaZv _D8demangle4testFPVZaZv
demangle.test(extern(Pascal) char() function) demangle.test(extern(Pascal) char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFRZaZv _D8demangle4testFPRZaZv
demangle.test(extern(C++) char() function) demangle.test(extern(C++) char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFPYZaZv
demangle.test(extern(Objective-C) char() function)
#
--format=dlang
_D8demangle4testFDFNaZaZv _D8demangle4testFDFNaZaZv
demangle.test(char() pure delegate) demangle.test(char() pure delegate)
# #
@ -466,59 +478,59 @@ _D8demangle4testFNjNkDFNjZaZv
demangle.test(return char() return delegate) demangle.test(return char() return delegate)
# #
--format=dlang --format=dlang
_D8demangle4testFFNaZaZv _D8demangle4testFPFNaZaZv
demangle.test(char() pure function) demangle.test(char() pure function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNbZaZv _D8demangle4testFPFNbZaZv
demangle.test(char() nothrow function) demangle.test(char() nothrow function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNcZaZv _D8demangle4testFPFNcZaZv
demangle.test(char() ref function) demangle.test(char() ref function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNdZaZv _D8demangle4testFPFNdZaZv
demangle.test(char() @property function) demangle.test(char() @property function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNeZaZv _D8demangle4testFPFNeZaZv
demangle.test(char() @trusted function) demangle.test(char() @trusted function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNfZaZv _D8demangle4testFPFNfZaZv
demangle.test(char() @safe function) demangle.test(char() @safe function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNiZaZv _D8demangle4testFPFNiZaZv
demangle.test(char() @nogc function) demangle.test(char() @nogc function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNaNbZaZv _D8demangle4testFPFNaNbZaZv
demangle.test(char() pure nothrow function) demangle.test(char() pure nothrow function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNbNaZaZv _D8demangle4testFPFNbNaZaZv
demangle.test(char() nothrow pure function) demangle.test(char() nothrow pure function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNdNfNaZaZv _D8demangle4testFPFNdNfNaZaZv
demangle.test(char() @property @safe pure function) demangle.test(char() @property @safe pure function)
# #
--format=dlang --format=dlang
_D8demangle4testFNjFZaZv _D8demangle4testFNjPFZaZv
demangle.test(char() function) demangle.test(char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFNkFZaZv _D8demangle4testFNkPFZaZv
demangle.test(return char() function) demangle.test(return char() function)
# #
--format=dlang --format=dlang
_D8demangle4testFFNjZaZv _D8demangle4testFPFNjZaZv
demangle.test(char() return function) demangle.test(char() return function)
# #
--format=dlang --format=dlang
_D8demangle4testFNjNkFNjZaZv _D8demangle4testFNjNkPFNjZaZv
demangle.test(return char() return function) demangle.test(return char() return function)
# #
--format=dlang --format=dlang
@ -989,7 +1001,7 @@ object.TypeInfo_Array.argTypes(out TypeInfo, out TypeInfo)
# #
--format=dlang --format=dlang
_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv _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 --format=dlang
_D6object9Exception6__ctorMFNaNbNfAyaAyamC6object9ThrowableZC9Exception _D6object9Exception6__ctorMFNaNbNfAyaAyamC6object9ThrowableZC9Exception