sync libiberty sources with gcc mainline

This commit is contained in:
Nick Clifton 2022-12-31 12:03:16 +00:00
parent 08c59458a1
commit e3a5d52075
9 changed files with 737 additions and 111 deletions

View File

@ -457,6 +457,17 @@ enum demangle_component_type
DEMANGLE_COMPONENT_MODULE_PARTITION,
DEMANGLE_COMPONENT_MODULE_ENTITY,
DEMANGLE_COMPONENT_MODULE_INIT,
DEMANGLE_COMPONENT_TEMPLATE_HEAD,
DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM,
DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM,
/* A builtin type with argument. This holds the builtin type
information. */
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE
};
/* Types which are only used internally. */
@ -543,6 +554,15 @@ struct demangle_component
const struct demangle_builtin_type_info *type;
} s_builtin;
/* For DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE. */
struct
{
/* Builtin type. */
const struct demangle_builtin_type_info *type;
short arg;
char suffix;
} s_extended_builtin;
/* For DEMANGLE_COMPONENT_SUB_STD. */
struct
{

View File

@ -1,6 +1,271 @@
2022-07-08 Nick Clifton <nickc@redhat.com>
2022-11-23 Marek Polacek <polacek@redhat.com>
* 2.39 branch created.
Revert:
2022-11-23 Marek Polacek <polacek@redhat.com>
* configure.ac: Also set shared when enable_host_pie.
* configure: Regenerate.
2022-11-23 Marek Polacek <polacek@redhat.com>
* configure.ac: Also set shared when enable_host_pie.
* configure: Regenerate.
2022-11-15 Nathan Sidwell <nathan@acm.org>
* cp-demangle.c (struct d_print_info): Rename is_lambda_arg to
lambda_tpl_parms. Augment semantics.
(d_make_comp): Add checks for new components.
(d_template_parm, d_template_head): New.
(d_lambda): Add templated lambda support.
(d_print_init): Adjust.
(d_print_lambda_parm_name): New.
(d_print_comp_inner): Support templated lambdas,
* testsuite/demangle-expected: Add testcases.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* doc/bsd.rst: New file.
* doc/conf.py: New file.
* doc/copyright.rst: New file.
* doc/extensions.rst: New file.
* doc/function-variable-and-macro-listing.rst: New file.
* doc/index.rst: New file.
* doc/indices-and-tables.rst: New file.
* doc/introduction.rst: New file.
* doc/lesser-general-public-license-2.1.rst: New file.
* doc/overview.rst: New file.
* doc/replacement-functions.rst: New file.
* doc/supplemental-functions.rst: New file.
* doc/using.rst: New file.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* Makefile.in: Support Sphinx based documentation.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* at-file.texi: Removed.
* copying-lib.texi: Removed.
* functions.texi: Removed.
* libiberty.texi: Removed.
* obstacks.texi: Removed.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* Makefile.in: Support --with-sphinx-build.
* configure.ac: Likewise.
* configure: Regenerate.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* doc/bsd.rst:
Add trailing newline.
* doc/copyright.rst:
Add trailing newline.
* doc/extensions.rst:
Add trailing newline.
* doc/function-variable-and-macro-listing.rst:
Add trailing newline.
* doc/index.rst:
Add trailing newline.
* doc/indices-and-tables.rst:
Add trailing newline.
* doc/introduction.rst:
Add trailing newline.
* doc/lesser-general-public-license-2.1.rst:
Add trailing newline.
* doc/overview.rst:
Add trailing newline.
* doc/replacement-functions.rst:
Add trailing newline.
* doc/supplemental-functions.rst:
Add trailing newline.
* doc/using.rst:
Add trailing newline.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
* doc/conf.py: Add newline at last line.
2022-11-14 Martin Liska <mliska@suse.cz>
Revert:
2022-11-14 Martin Liska <mliska@suse.cz>
PR other/107620
* configure: Regenerate.
* configure.ac: Always set sphinx-build.
2022-11-13 Martin Liska <mliska@suse.cz>
PR other/107620
* configure: Regenerate.
* configure.ac: Always set sphinx-build.
2022-11-10 Martin Liska <mliska@suse.cz>
* doc/conf.py: Add newline at last line.
2022-11-09 Martin Liska <mliska@suse.cz>
* doc/bsd.rst:
Add trailing newline.
* doc/copyright.rst:
Add trailing newline.
* doc/extensions.rst:
Add trailing newline.
* doc/function-variable-and-macro-listing.rst:
Add trailing newline.
* doc/index.rst:
Add trailing newline.
* doc/indices-and-tables.rst:
Add trailing newline.
* doc/introduction.rst:
Add trailing newline.
* doc/lesser-general-public-license-2.1.rst:
Add trailing newline.
* doc/overview.rst:
Add trailing newline.
* doc/replacement-functions.rst:
Add trailing newline.
* doc/supplemental-functions.rst:
Add trailing newline.
* doc/using.rst:
Add trailing newline.
2022-11-09 Martin Liska <mliska@suse.cz>
* Makefile.in: Support --with-sphinx-build.
* configure.ac: Likewise.
* configure: Regenerate.
2022-11-09 Martin Liska <mliska@suse.cz>
* at-file.texi: Removed.
* copying-lib.texi: Removed.
* functions.texi: Removed.
* libiberty.texi: Removed.
* obstacks.texi: Removed.
2022-11-09 Martin Liska <mliska@suse.cz>
* Makefile.in: Support Sphinx based documentation.
2022-11-09 Martin Liska <mliska@suse.cz>
* doc/bsd.rst: New file.
* doc/conf.py: New file.
* doc/copyright.rst: New file.
* doc/extensions.rst: New file.
* doc/function-variable-and-macro-listing.rst: New file.
* doc/index.rst: New file.
* doc/indices-and-tables.rst: New file.
* doc/introduction.rst: New file.
* doc/lesser-general-public-license-2.1.rst: New file.
* doc/overview.rst: New file.
* doc/replacement-functions.rst: New file.
* doc/supplemental-functions.rst: New file.
* doc/using.rst: New file.
2022-10-18 Florian Weimer <fweimer@redhat.com>
* acinclude.m4 (ac_cv_func_strncmp_works): Add missing
int return type and parameter list to the definition of main.
Include <stdlib.h> and <string.h> for prototypes.
(ac_cv_c_stack_direction): Add missing
int return type and parameter list to the definitions of
main, find_stack_direction. Include <stdlib.h> for exit
prototype.
* configure: Regenerate.
2022-10-14 Jakub Jelinek <jakub@redhat.com>
* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Increment.
* cp-demangle.c (cplus_demangle_builtin_types): Add std::bfloat16_t
entry.
(cplus_demangle_type): Demangle DF16b.
* testsuite/demangle-expected (_Z3xxxDF16b): New test.
2022-10-11 Nathan Sidwell <nathan@acm.org>
* cp-demangle.c (d_prefix): 'M' components are not
(re-)added to the substitution table.
* testsuite/demangle-expected: Add tests.
2022-10-07 Nathan Sidwell <nathan@acm.org>
* cp-demangle.c (d_print_comp_inner): Allow parameter packs
in a lambda signature.
* testsuite/demangle-expected: Add tests.
2022-09-27 Jakub Jelinek <jakub@redhat.com>
PR c++/106652
PR c++/85518
* cp-demangle.c (d_dump): Handle
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE. Don't handle
DEMANGLE_COMPONENT_FIXED_TYPE.
(d_make_extended_builtin_type): New function.
(cplus_demangle_builtin_types): Add _Float entry.
(cplus_demangle_type): For DF demangle it as _Float<N> or
_Float<N>x rather than fixed point which conflicts with it.
(d_count_templates_scopes): Handle
DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE. Just break; for
DEMANGLE_COMPONENT_FIXED_TYPE.
(d_find_pack): Handle DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
Don't handle DEMANGLE_COMPONENT_FIXED_TYPE.
(d_print_comp_inner): Likewise.
* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Bump.
* testsuite/demangle-expected: Replace _Z3xxxDFyuVb test
with _Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb. Add
_Z3xxxDF32xDF64xDF128xCDF32xVb test.
2022-09-22 Jonathan Wakely <jwakely@redhat.com>
* README: Replace gcc-bugs email address with Bugzilla URL.
2022-08-25 Martin Liska <mliska@suse.cz>
* configure: Regenerate.
2022-07-22 Martin Liska <mliska@suse.cz>
PR other/106370
* _doprnt.c: Remove continue as last stmt
in a loop.
2022-07-14 Martin Liska <mliska@suse.cz>
* functions.texi: Replace strtoul with strtoull.
2022-07-04 Nick Clifton <nickc@redhat.com>
* rust-demangle.c (demangle_const): Add a missing goto pass_return
at the end of the function.
2022-07-04 Nick Clifton <nickc@redhat.com>
* rust-demangle.c (demangle_path_maybe_open_generics): Add
recursion limit.
2022-07-01 Nick Clifton <nickc@redhat.com>
@ -1488,7 +1753,7 @@
2016-06-12 Brooks Moses <bmoses@google.com>
* cp-demangle.c (cplus_demangle_print_callback): Avoid zero-length
VLAs.
VLAs.
2016-05-31 Alan Modra <amodra@gmail.com>
@ -3065,8 +3330,8 @@
2009-08-23 H.J. Lu <hongjiu.lu@intel.com>
PR ld/10536
* Makefile.in (install-html-recursive): Removed.
PR ld/10536
* Makefile.in (install-html-recursive): Removed.
2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
@ -7500,7 +7765,7 @@ Sun Nov 28 00:59:39 1999 Philippe De Muyter <phdm@macqel.be>
* strtoul.c, strtol.c, random.c: Remove advertising clause from
BSD license, pursuant with
ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com)
@ -9884,12 +10149,12 @@ Sun Feb 27 21:50:11 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
Thu Feb 24 11:51:12 1994 David J. Mackenzie (djm@rtl.cygnus.com)
* getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code.
(_getopt_initialize): New function, broken out of _getopt_internal.
(_getopt_internal):
If long_only and the ARGV-element has the form "-f", where f is
a valid short option, don't consider it an abbreviated form of
a long option that starts with f. Otherwise there would be no
way to give the -f short option.
(_getopt_initialize): New function, broken out of _getopt_internal.
(_getopt_internal):
If long_only and the ARGV-element has the form "-f", where f is
a valid short option, don't consider it an abbreviated form of
a long option that starts with f. Otherwise there would be no
way to give the -f short option.
Thu Feb 10 14:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
@ -10109,8 +10374,8 @@ Fri Oct 22 07:53:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
Tue Oct 19 17:12:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
* Makefile.in (lneeded-list): ensure that object file names are
not duplicated, as multiple instances of the same object file in
a library causes problems on some machines
not duplicated, as multiple instances of the same object file in
a library causes problems on some machines
Mon Oct 18 21:59:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
@ -10523,10 +10788,10 @@ Wed Sep 9 12:41:48 1992 Ian Lance Taylor (ian@cygnus.com)
Thu Sep 3 13:29:39 1992 K. Richard Pixley (rich@sendai.cygnus.com)
* cplus-dem.c: (demangle_prefix): reduction in strength of strstr
as a time optimization.
as a time optimization.
* cplus-dem.c (cplus_demangle): remove strpbrk test. Appears to
be more expensive than simply demangling.
be more expensive than simply demangling.
* cplus-dem.c (cplus_match): new function.
@ -10622,7 +10887,7 @@ Wed Jun 17 18:13:58 1992 Per Bothner (bothner@rtl.cygnus.com)
Tue Jun 16 16:11:59 1992 K. Richard Pixley (rich@rtl.cygnus.com)
* getopt.c, getopt1.c: merged largely gratuitous, mostly
whitespace diffs from other prep distributions.
whitespace diffs from other prep distributions.
Mon Jun 15 12:25:46 1992 Fred Fish (fnf@cygnus.com)
@ -10712,7 +10977,7 @@ Mon Apr 20 20:49:32 1992 K. Richard Pixley (rich@cygnus.com)
* Makefile.in: do not print recursion line.
* Makefile.in: allow CFLAGS to be passed in from command line.
Removed MINUS_G. Default CFLAGS to -g.
Removed MINUS_G. Default CFLAGS to -g.
Mon Apr 20 12:57:46 1992 Per Bothner (bothner@rtl.cygnus.com)
@ -10783,8 +11048,8 @@ Thu Feb 27 22:19:39 1992 Per Bothner (bothner@cygnus.com)
Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
* Makefile.in, configure.in: removed traces of namesubdir,
-subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
copyrights to '92, changed some from Cygnus to FSF.
-subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
copyrights to '92, changed some from Cygnus to FSF.
Sat Feb 22 01:09:21 1992 Stu Grossman (grossman at cygnus.com)
@ -10869,17 +11134,17 @@ Tue Dec 10 04:14:49 1991 K. Richard Pixley (rich at rtl.cygnus.com)
Fri Dec 6 23:26:45 1991 K. Richard Pixley (rich at rtl.cygnus.com)
* Makefile.in: remove spaces following hyphens because bsd make
can't cope. added standards.text support. install using
INSTALL_DATA.
can't cope. added standards.text support. install using
INSTALL_DATA.
* configure.in: remove commontargets as it is no longer a
recognized hook.
recognized hook.
Thu Dec 5 22:46:46 1991 K. Richard Pixley (rich at rtl.cygnus.com)
* Makefile.in: idestdir and ddestdir go away. Added copyrights
and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
and mandir now keyed off datadir by default.
and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
and mandir now keyed off datadir by default.
Fri Nov 22 19:15:29 1991 John Gilmore (gnu at cygnus.com)

View File

@ -15,7 +15,7 @@ The library must be configured from the top source directory. Don't
try to run configure in this directory. Follow the configuration
instructions in ../README.
Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to
Please report bugs to https://gcc.gnu.org/bugzilla/ and send fixes to
"gcc-patches@gcc.gnu.org". Thank you.
ADDING A NEW FILE

View File

@ -55,7 +55,6 @@ Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
putc(CHAR, stream); \
ptr++; \
total_printed++; \
continue; \
} while (0)
#define PRINT_TYPE(TYPE) \

7
libiberty/configure vendored
View File

@ -5349,6 +5349,9 @@ case "${host}" in
# sets the default TLS model and affects inlining.
PICFLAG=-fPIC
;;
loongarch*-*-*)
PICFLAG=-fpic
;;
mips-sgi-irix6*)
# PIC is the default.
;;
@ -5365,7 +5368,9 @@ case "${host}" in
sh-*-linux* | sh[2346lbe]*-*-linux*)
PICFLAG=-fpic
;;
sh*-*-netbsd*)
# FIXME: Simplify to sh*-*-netbsd*?
sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
sh64-*-netbsd* | sh64l*-*-netbsd*)
PICFLAG=-fpic
;;
# Default to -fPIC unless specified otherwise.

View File

@ -347,9 +347,9 @@ struct d_print_info
/* Number of times d_print_comp was recursively called. Should not
be bigger than MAX_RECURSION_COUNT. */
int recursion;
/* Non-zero if we're printing a lambda argument. A template
parameter reference actually means 'auto'. */
int is_lambda_arg;
/* 1 more than the number of explicit template parms of a lambda. Template
parm references >= are actually 'auto'. */
int lambda_tpl_parms;
/* The current index into any template argument packs we are using
for printing, or -1 to print the whole pack. */
int pack_index;
@ -491,6 +491,10 @@ static struct demangle_component *d_local_name (struct d_info *);
static int d_discriminator (struct d_info *);
static struct demangle_component *d_template_parm (struct d_info *, int *bad);
static struct demangle_component *d_template_head (struct d_info *, int *bad);
static struct demangle_component *d_lambda (struct d_info *);
static struct demangle_component *d_unnamed_type (struct d_info *);
@ -648,6 +652,13 @@ d_dump (struct demangle_component *dc, int indent)
case DEMANGLE_COMPONENT_BUILTIN_TYPE:
printf ("builtin type %s\n", dc->u.s_builtin.type->name);
return;
case DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE:
{
char suffix[2] = { dc->u.s_extended_builtin.type->suffix, 0 };
printf ("builtin type %s%d%s\n", dc->u.s_extended_builtin.type->name,
dc->u.s_extended_builtin.type->arg, suffix);
}
return;
case DEMANGLE_COMPONENT_OPERATOR:
printf ("operator %s\n", dc->u.s_operator.op->name);
return;
@ -771,11 +782,6 @@ d_dump (struct demangle_component *dc, int indent)
case DEMANGLE_COMPONENT_PTRMEM_TYPE:
printf ("pointer to member type\n");
break;
case DEMANGLE_COMPONENT_FIXED_TYPE:
printf ("fixed-point type, accum? %d, sat? %d\n",
dc->u.s_fixed.accum, dc->u.s_fixed.sat);
d_dump (dc->u.s_fixed.length, indent + 2);
break;
case DEMANGLE_COMPONENT_ARGLIST:
printf ("argument list\n");
break;
@ -1026,6 +1032,10 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
case DEMANGLE_COMPONENT_TPARM_OBJ:
case DEMANGLE_COMPONENT_STRUCTURED_BINDING:
case DEMANGLE_COMPONENT_MODULE_INIT:
case DEMANGLE_COMPONENT_TEMPLATE_HEAD:
case DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM:
case DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM:
case DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM:
if (left == NULL)
return NULL;
break;
@ -1048,6 +1058,7 @@ d_make_comp (struct d_info *di, enum demangle_component_type type,
case DEMANGLE_COMPONENT_CONST:
case DEMANGLE_COMPONENT_ARGLIST:
case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
case DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM:
FNQUAL_COMPONENT_CASE:
break;
@ -1109,6 +1120,28 @@ d_make_builtin_type (struct d_info *di,
return p;
}
/* Add a new extended builtin type component. */
static struct demangle_component *
d_make_extended_builtin_type (struct d_info *di,
const struct demangle_builtin_type_info *type,
short arg, char suffix)
{
struct demangle_component *p;
if (type == NULL)
return NULL;
p = d_make_empty (di);
if (p != NULL)
{
p->type = DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE;
p->u.s_extended_builtin.type = type;
p->u.s_extended_builtin.arg = arg;
p->u.s_extended_builtin.suffix = suffix;
}
return p;
}
/* Add a new operator component. */
static struct demangle_component *
@ -1585,12 +1618,10 @@ d_prefix (struct d_info *di, int substable)
}
else if (peek == 'M')
{
/* Initializer scope for a lambda. We don't need to represent
this; the normal code will just treat the variable as a type
scope, which gives appropriate output. */
if (ret == NULL)
return NULL;
/* Initializer scope for a lambda. We already added it as a
substitution candidate, don't do that again. */
d_advance (di, 1);
continue;
}
else
{
@ -2464,6 +2495,8 @@ cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
/* 32 */ { NL ("char32_t"), NL ("char32_t"), D_PRINT_DEFAULT },
/* 33 */ { NL ("decltype(nullptr)"), NL ("decltype(nullptr)"),
D_PRINT_DEFAULT },
/* 34 */ { NL ("_Float"), NL ("_Float"), D_PRINT_FLOAT },
/* 35 */ { NL ("std::bfloat16_t"), NL ("std::bfloat16_t"), D_PRINT_FLOAT },
};
CP_STATIC_IF_GLIBCPP_V3
@ -2727,19 +2760,37 @@ cplus_demangle_type (struct d_info *di)
break;
case 'F':
/* Fixed point types. DF<int bits><length><fract bits><sat> */
ret = d_make_empty (di);
ret->type = DEMANGLE_COMPONENT_FIXED_TYPE;
if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di))))
/* For demangling we don't care about the bits. */
d_number (di);
ret->u.s_fixed.length = cplus_demangle_type (di);
if (ret->u.s_fixed.length == NULL)
return NULL;
d_number (di);
peek = d_next_char (di);
ret->u.s_fixed.sat = (peek == 's');
break;
/* DF<number>_ - _Float<number>.
DF<number>x - _Float<number>x
DF16b - std::bfloat16_t. */
{
int arg = d_number (di);
char buf[12];
char suffix = 0;
if (d_peek_char (di) == 'b')
{
if (arg != 16)
return NULL;
d_advance (di, 1);
ret = d_make_builtin_type (di,
&cplus_demangle_builtin_types[35]);
di->expansion += ret->u.s_builtin.type->len;
break;
}
if (d_peek_char (di) == 'x')
suffix = 'x';
if (!suffix && d_peek_char (di) != '_')
return NULL;
ret
= d_make_extended_builtin_type (di,
&cplus_demangle_builtin_types[34],
arg, suffix);
d_advance (di, 1);
sprintf (buf, "%d", arg);
di->expansion += ret->u.s_extended_builtin.type->len
+ strlen (buf) + (suffix != 0);
break;
}
case 'v':
ret = d_vector_type (di);
@ -3835,32 +3886,120 @@ d_discriminator (struct d_info *di)
return 1;
}
/* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ */
/* <template-parm> ::= Ty
::= Tn <type>
::= Tt <template-head> E
::= Tp <template-parm> */
static struct demangle_component *
d_template_parm (struct d_info *di, int *bad)
{
if (d_peek_char (di) != 'T')
return NULL;
struct demangle_component *op;
enum demangle_component_type kind;
switch (d_peek_next_char (di))
{
default:
return NULL;
case 'p': /* Pack */
d_advance (di, 2);
op = d_template_parm (di, bad);
kind = DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM;
if (!op)
{
*bad = 1;
return NULL;
}
break;
case 'y': /* Typename */
d_advance (di, 2);
op = NULL;
kind = DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM;
break;
case 'n': /* Non-Type */
d_advance (di, 2);
op = cplus_demangle_type (di);
kind = DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM;
if (!op)
{
*bad = 1;
return NULL;
}
break;
case 't': /* Template */
d_advance (di, 2);
op = d_template_head (di, bad);
kind = DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM;
if (!op || !d_check_char (di, 'E'))
{
*bad = 1;
return NULL;
}
}
return d_make_comp (di, kind, op, NULL);
}
/* <template-head> ::= <template-head>? <template-parm> */
static struct demangle_component *
d_template_head (struct d_info *di, int *bad)
{
struct demangle_component *res = NULL, **slot = &res;
struct demangle_component *op;
while ((op = d_template_parm (di, bad)))
{
*slot = op;
slot = &d_right (op);
}
/* Wrap it in a template head, to make concatenating with any parm list, and
printing simpler. */
if (res)
res = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_HEAD, res, NULL);
return res;
}
/* <closure-type-name> ::= Ul <template-head>? <lambda-sig> E [ <nonnegative number> ] _ */
static struct demangle_component *
d_lambda (struct d_info *di)
{
struct demangle_component *tl;
struct demangle_component *ret;
int num;
if (! d_check_char (di, 'U'))
return NULL;
if (! d_check_char (di, 'l'))
return NULL;
tl = d_parmlist (di);
int bad = 0;
struct demangle_component *head = d_template_head (di, &bad);
if (bad)
return NULL;
struct demangle_component *tl = d_parmlist (di);
if (tl == NULL)
return NULL;
if (head)
{
d_right (head) = tl;
tl = head;
}
if (! d_check_char (di, 'E'))
return NULL;
num = d_compact_number (di);
int num = d_compact_number (di);
if (num < 0)
return NULL;
ret = d_make_empty (di);
struct demangle_component *ret = d_make_empty (di);
if (ret)
{
ret->type = DEMANGLE_COMPONENT_LAMBDA;
@ -4202,6 +4341,7 @@ d_count_templates_scopes (struct d_print_info *dpi,
case DEMANGLE_COMPONENT_FUNCTION_PARAM:
case DEMANGLE_COMPONENT_SUB_STD:
case DEMANGLE_COMPONENT_BUILTIN_TYPE:
case DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE:
case DEMANGLE_COMPONENT_OPERATOR:
case DEMANGLE_COMPONENT_CHARACTER:
case DEMANGLE_COMPONENT_NUMBER:
@ -4210,6 +4350,12 @@ d_count_templates_scopes (struct d_print_info *dpi,
case DEMANGLE_COMPONENT_MODULE_NAME:
case DEMANGLE_COMPONENT_MODULE_PARTITION:
case DEMANGLE_COMPONENT_MODULE_INIT:
case DEMANGLE_COMPONENT_FIXED_TYPE:
case DEMANGLE_COMPONENT_TEMPLATE_HEAD:
case DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM:
case DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM:
case DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM:
case DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM:
break;
case DEMANGLE_COMPONENT_TEMPLATE:
@ -4309,10 +4455,6 @@ d_count_templates_scopes (struct d_print_info *dpi,
d_count_templates_scopes (dpi, dc->u.s_extended_operator.name);
break;
case DEMANGLE_COMPONENT_FIXED_TYPE:
d_count_templates_scopes (dpi, dc->u.s_fixed.length);
break;
case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
case DEMANGLE_COMPONENT_MODULE_ENTITY:
@ -4344,7 +4486,7 @@ d_print_init (struct d_print_info *dpi, demangle_callbackref callback,
dpi->demangle_failure = 0;
dpi->recursion = 0;
dpi->is_lambda_arg = 0;
dpi->lambda_tpl_parms = 0;
dpi->component_stack = NULL;
@ -4580,11 +4722,11 @@ d_find_pack (struct d_print_info *dpi,
case DEMANGLE_COMPONENT_TAGGED_NAME:
case DEMANGLE_COMPONENT_OPERATOR:
case DEMANGLE_COMPONENT_BUILTIN_TYPE:
case DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE:
case DEMANGLE_COMPONENT_SUB_STD:
case DEMANGLE_COMPONENT_CHARACTER:
case DEMANGLE_COMPONENT_FUNCTION_PARAM:
case DEMANGLE_COMPONENT_UNNAMED_TYPE:
case DEMANGLE_COMPONENT_FIXED_TYPE:
case DEMANGLE_COMPONENT_DEFAULT_ARG:
case DEMANGLE_COMPONENT_NUMBER:
return NULL;
@ -4841,6 +4983,33 @@ d_maybe_print_designated_init (struct d_print_info *dpi, int options,
return 1;
}
static void
d_print_lambda_parm_name (struct d_print_info *dpi, int type, unsigned index)
{
const char *str;
switch (type)
{
default:
dpi->demangle_failure = 1;
str = "";
break;
case DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM:
str = "$T";
break;
case DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM:
str = "$N";
break;
case DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM:
str = "$TT";
break;
}
d_append_string (dpi, str);
d_append_num (dpi, index);
}
/* Subroutine to handle components. */
static void
@ -5095,7 +5264,21 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
}
case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
if (dpi->is_lambda_arg)
if (dpi->lambda_tpl_parms > dc->u.s_number.number + 1)
{
const struct demangle_component *a
= d_left (dpi->templates->template_decl);
unsigned c;
for (c = dc->u.s_number.number; a && c; c--)
a = d_right (a);
if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM)
a = d_left (a);
if (!a)
dpi->demangle_failure = 1;
else
d_print_lambda_parm_name (dpi, a->type, dc->u.s_number.number);
}
else if (dpi->lambda_tpl_parms)
{
/* Show the template parm index, as that's how g++ displays
these, and future proofs us against potential
@ -5276,7 +5459,7 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
{
/* Handle reference smashing: & + && = &. */
struct demangle_component *sub = d_left (dc);
if (!dpi->is_lambda_arg
if (!dpi->lambda_tpl_parms
&& sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
{
struct d_saved_scope *scope = d_get_saved_scope (dpi, sub);
@ -5387,6 +5570,14 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
dc->u.s_builtin.type->java_len);
return;
case DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE:
d_append_buffer (dpi, dc->u.s_extended_builtin.type->name,
dc->u.s_extended_builtin.type->len);
d_append_num (dpi, dc->u.s_extended_builtin.arg);
if (dc->u.s_extended_builtin.suffix)
d_append_buffer (dpi, &dc->u.s_extended_builtin.suffix, 1);
return;
case DEMANGLE_COMPONENT_VENDOR_TYPE:
d_print_comp (dpi, options, d_left (dc));
return;
@ -5525,22 +5716,6 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
return;
}
case DEMANGLE_COMPONENT_FIXED_TYPE:
if (dc->u.s_fixed.sat)
d_append_string (dpi, "_Sat ");
/* Don't print "int _Accum". */
if (dc->u.s_fixed.length->u.s_builtin.type
!= &cplus_demangle_builtin_types['i'-'a'])
{
d_print_comp (dpi, options, dc->u.s_fixed.length);
d_append_char (dpi, ' ');
}
if (dc->u.s_fixed.accum)
d_append_string (dpi, "_Accum");
else
d_append_string (dpi, "_Fract");
return;
case DEMANGLE_COMPONENT_ARGLIST:
case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
if (d_left (dc) != NULL)
@ -5908,9 +6083,10 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
case DEMANGLE_COMPONENT_PACK_EXPANSION:
{
int len;
int i;
struct demangle_component *a = d_find_pack (dpi, d_left (dc));
struct demangle_component *a = NULL;
if (!dpi->lambda_tpl_parms)
a = d_find_pack (dpi, d_left (dc));
if (a == NULL)
{
/* d_find_pack won't find anything if the only packs involved
@ -5918,17 +6094,20 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
case, just print the pattern and "...". */
d_print_subexpr (dpi, options, d_left (dc));
d_append_string (dpi, "...");
return;
}
len = d_pack_length (a);
dc = d_left (dc);
for (i = 0; i < len; ++i)
else
{
dpi->pack_index = i;
d_print_comp (dpi, options, dc);
if (i < len-1)
d_append_string (dpi, ", ");
int len = d_pack_length (a);
int i;
dc = d_left (dc);
for (i = 0; i < len; ++i)
{
if (i)
d_append_string (dpi, ", ");
dpi->pack_index = i;
d_print_comp (dpi, options, dc);
}
}
}
return;
@ -5958,15 +6137,50 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
return;
case DEMANGLE_COMPONENT_LAMBDA:
d_append_string (dpi, "{lambda(");
/* Generic lambda auto parms are mangled as the template type
parm they are. */
dpi->is_lambda_arg++;
d_print_comp (dpi, options, dc->u.s_unary_num.sub);
dpi->is_lambda_arg--;
d_append_string (dpi, ")#");
d_append_num (dpi, dc->u.s_unary_num.num + 1);
d_append_char (dpi, '}');
{
d_append_string (dpi, "{lambda");
struct demangle_component *parms = dc->u.s_unary_num.sub;
struct d_print_template dpt;
/* Generic lambda auto parms are mangled as the (synthedic) template
type parm they are. We need to tell the printer that (a) we're in
a lambda, and (b) the number of synthetic parms. */
int saved_tpl_parms = dpi->lambda_tpl_parms;
dpi->lambda_tpl_parms = 0;
/* Hang any lambda head as-if template args. */
dpt.template_decl = NULL;
dpt.next = dpi->templates;
dpi->templates = &dpt;
if (parms && parms->type == DEMANGLE_COMPONENT_TEMPLATE_HEAD)
{
dpt.template_decl = parms;
d_append_char (dpi, '<');
struct demangle_component *parm;
for (parm = d_left (parms); parm; parm = d_right (parm))
{
if (dpi->lambda_tpl_parms++)
d_append_string (dpi, ", ");
d_print_comp (dpi, options, parm);
d_append_char (dpi, ' ');
if (parm->type == DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM)
parm = d_left (parm);
d_print_lambda_parm_name (dpi, parm->type,
dpi->lambda_tpl_parms - 1);
}
d_append_char (dpi, '>');
parms = d_right (parms);
}
dpi->lambda_tpl_parms++;
d_append_char (dpi, '(');
d_print_comp (dpi, options, parms);
dpi->lambda_tpl_parms = saved_tpl_parms;
dpi->templates = dpt.next;
d_append_string (dpi, ")#");
d_append_num (dpi, dc->u.s_unary_num.num + 1);
d_append_char (dpi, '}');
}
return;
case DEMANGLE_COMPONENT_UNNAMED_TYPE:
@ -5982,6 +6196,40 @@ d_print_comp_inner (struct d_print_info *dpi, int options,
d_append_char (dpi, ']');
return;
case DEMANGLE_COMPONENT_TEMPLATE_HEAD:
{
d_append_char (dpi, '<');
int count = 0;
struct demangle_component *parm;
for (parm = d_left (dc); parm; parm = d_right (parm))
{
if (count++)
d_append_string (dpi, ", ");
d_print_comp (dpi, options, parm);
}
d_append_char (dpi, '>');
}
return;
case DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM:
d_append_string (dpi, "typename");
return;
case DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM:
d_print_comp (dpi, options, d_left (dc));
return;
case DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM:
d_append_string (dpi, "template");
d_print_comp (dpi, options, d_left (dc));
d_append_string (dpi, " class");
return;
case DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM:
d_print_comp (dpi, options, d_left (dc));
d_append_string (dpi, "...");
return;
default:
d_print_error (dpi);
return;

View File

@ -180,7 +180,7 @@ d_advance (struct d_info *di, int i)
extern const struct demangle_operator_info cplus_demangle_operators[];
#endif
#define D_BUILTIN_TYPE_COUNT (34)
#define D_BUILTIN_TYPE_COUNT (36)
CP_STATIC_IF_GLIBCPP_V3
const struct demangle_builtin_type_info

View File

@ -1747,7 +1747,7 @@ that the converted value is unsigned.
@c strtoll.c:33
@deftypefn Supplemental {long long int} strtoll (const char *@var{string}, @
char **@var{endptr}, int @var{base})
@deftypefnx Supplemental {unsigned long long int} strtoul (@
@deftypefnx Supplemental {unsigned long long int} strtoull (@
const char *@var{string}, char **@var{endptr}, int @var{base})
The @code{strtoll} function converts the string in @var{string} to a

View File

@ -1242,8 +1242,16 @@ _ZNSt9_Any_data9_M_accessIPZ4postISt8functionIFvvEEEvOT_EUlvE_EERS5_v
post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*& std::_Any_data::_M_access<post<std::function<void ()> >(post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*&&)::{lambda()#1}*>()
#
--format=auto --no-params
_Z3xxxDFyuVb
xxx(unsigned long long _Fract, bool volatile)
_Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb
xxx(_Float16, _Float32, _Float64, _Float128, _Float16 _Complex, bool volatile)
xxx
--format=auto --no-params
_Z3xxxDF32xDF64xDF128xCDF32xVb
xxx(_Float32x, _Float64x, _Float128x, _Float32x _Complex, bool volatile)
xxx
--format=auto --no-params
_Z3xxxDF16b
xxx(std::bfloat16_t)
xxx
# https://sourceware.org/bugzilla/show_bug.cgi?id=16817
--format=auto --no-params
@ -1570,3 +1578,84 @@ initializer for module Foo.Bar
_ZGIW3FooWP3BarW3Baz
initializer for module Foo:Bar.Baz
_ZZ2L1vENKUlDpT_E_clIJiPiEEEvS0_
void L1()::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
_ZZ2L1vENKUlDpT_E_clIJiPiEEEDaS0_
auto L1()::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
_Z7captureIN4gvarMUlvE_EE7WrapperIT_EOS3_
Wrapper<gvar::{lambda()#1}> capture<gvar::{lambda()#1}>(gvar::{lambda()#1}&&)
_ZNK2L2MUlT_T0_E_clIifEEvS_S0_
void L2::{lambda(auto:1, auto:2)#1}::operator()<int, float>(L2, int) const
_ZNK1C1fMUlT_E_clIMS_iEEDaS1_
auto C::f::{lambda(auto:1)#1}::operator()<int C::*>(int C::*) const
_ZNK2L2MUlT_T0_E_clIifEEvS0_S1_
void L2::{lambda(auto:1, auto:2)#1}::operator()<int, float>(int, float) const
_ZNK1B2L3MUlT_T0_E_clIjdEEvS1_S2_
void B::L3::{lambda(auto:1, auto:2)#1}::operator()<unsigned int, double>(unsigned int, double) const
_Z3fooIN1qMUlvE_ENS0_UlvE0_EEiOT_OT0_
int foo<q::{lambda()#1}, q::{lambda()#2}>(q::{lambda()#1}&&, q::{lambda()#2}&&)
_ZNK2L1MUlDpT_E_clIJiPiEEEvS1_
void L1::{lambda((auto:1)...)#1}::operator()<int, int*>(int, int*) const
_ZZN1XIfLj0EE2FnEvENKUlTyfT_E_clIiEEDafS1_
auto X<float, 0u>::Fn()::{lambda<typename $T0>(float, $T0)#1}::operator()<int>(float, int) const
_ZZN1XIfLj0EE2FnEvENKUlTyT_E_clIiEEDaS1_
auto X<float, 0u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
_ZZN1XIfLj1EE2FnEvENKUlTyfT_E_clIiEEDafS1_
auto X<float, 1u>::Fn()::{lambda<typename $T0>(float, $T0)#1}::operator()<int>(float, int) const
_ZZN1XIfLj1EE2FnEvENKUlTyT_E_clIiEEDaS1_
auto X<float, 1u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
_ZZN1XIiLj0EE2FnEvENKUlTyiT_E_clIiEEDaiS1_
auto X<int, 0u>::Fn()::{lambda<typename $T0>(int, $T0)#1}::operator()<int>(int, int) const
_ZZN1XIiLj0EE2FnEvENKUlTyT_E_clIiEEDaS1_
auto X<int, 0u>::Fn()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
_ZNK10l_tpl_autoMUlTyT_T0_E_clIiiEEDaS0_S1_
auto l_tpl_auto::{lambda<typename $T0>($T0, auto:2)#1}::operator()<int, int>(int, int) const
_ZNK12l_tpl_nt_aryMUlTniRAT__iE_clILi2EEEDaS1_
auto l_tpl_nt_ary::{lambda<int $N0>(int (&) [$N0])#1}::operator()<2>(int (&) [2]) const
_ZNK13l_tpl_nt_autoMUlTnDavE_clILi0EEEDav
auto l_tpl_nt_auto::{lambda<auto $N0>()#1}::operator()<0>() const
_ZNK9l_tpl_tplMUlTtTyTnjER3TPLIT_EE_clI1UEEDaS3_
auto l_tpl_tpl::{lambda<template<typename, unsigned int> class $TT0>(TPL<$TT0>&)#1}::operator()<U>(TPL<U>&) const
_ZNK13l_tpl_tpl_tplMUlTtTtTyTnjEER6TPLTPLIT_EE_clI3TPLEEDaS3_
auto l_tpl_tpl_tpl::{lambda<template<template<typename, unsigned int> class> class $TT0>(TPLTPL<$TT0>&)#1}::operator()<TPL>(TPLTPL<TPL>&) const
_ZNK5l_varMUlTpTyDpT_E_clIJiiiEEEDaS1_
auto l_var::{lambda<typename... $T0>(($T0)...)#1}::operator()<int, int, int>(int, int, int) const
_ZNK6l_var2MUlTpTniDpRAT__iE_clIJLi2ELi2EEEEDaS2_
auto l_var2::{lambda<int... $N0>((int (&) [$N0])...)#1}::operator()<2, 2>(int (&) [2], int (&) [2]) const
_ZNK6l_var3MUlTtTpTniETpTniRT_IJXspT0_EEEE_clI1XJLi1ELi2ELi3EEEEDaS2_
auto l_var3::{lambda<template<int...> class $TT0, int... $N1>($TT0<($N1)...>&)#1}::operator()<X, 1, 2, 3>(X<1, 2, 3>&) const
_ZNK6l_var4MUlTpTtTyTnjER1YIJDpT_EEE_clIJ1US7_EEEDaS4_
auto l_var4::{lambda<template<typename, unsigned int> class... $TT0>(Y<($TT0)...>&)#1}::operator()<U, U>(Y<U, U>&) const
_ZZ2FnILi1EEvvENKUlTyT_E_clIiEEDaS0_
auto Fn<1>()::{lambda<typename $T0>($T0)#1}::operator()<int>(int) const
_ZZ1fvENKUlTyP1XIT_EPS_IiEE_clIcEEDaS2_S4_
auto f()::{lambda<typename $T0>(X<$T0>*, X<int>*)#1}::operator()<char>(X<char>*, X<int>*) const
_ZZN1XIiE1FEvENKUliE_clEi
X<int>::F()::{lambda(int)#1}::operator()(int) const