mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
merge from gcc
libiberty/ PR debug/49408 * cp-demangle.c (d_print_comp): Suppress argument list for function references by the '&' unary operator. Keep also already processed variant without the argument list. Suppress argument list types for function call used in an expression. * testsuite/demangle-expected: Fix excessive argument list types in `test for typed function in decltype'. New testcase for no argument list types printed. 3 new testcases for function references by the '&' unary operator..
This commit is contained in:
@ -1,3 +1,15 @@
|
|||||||
|
2011-07-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
PR debug/49408
|
||||||
|
* cp-demangle.c (d_print_comp): Suppress argument list for function
|
||||||
|
references by the '&' unary operator. Keep also already processed
|
||||||
|
variant without the argument list. Suppress argument list types for
|
||||||
|
function call used in an expression.
|
||||||
|
* testsuite/demangle-expected: Fix excessive argument list types in
|
||||||
|
`test for typed function in decltype'. New testcase for no argument
|
||||||
|
list types printed. 3 new testcases for function references by the
|
||||||
|
'&' unary operator..
|
||||||
|
|
||||||
2011-06-20 Jason Merrill <jason@redhat.com>
|
2011-06-20 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/37089
|
PR c++/37089
|
||||||
|
@ -4139,7 +4139,46 @@ d_print_comp (struct d_print_info *dpi, int options,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case DEMANGLE_COMPONENT_UNARY:
|
case DEMANGLE_COMPONENT_UNARY:
|
||||||
if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
|
if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
|
||||||
|
&& d_left (dc)->u.s_operator.op->len == 1
|
||||||
|
&& d_left (dc)->u.s_operator.op->name[0] == '&'
|
||||||
|
&& d_right (dc)->type == DEMANGLE_COMPONENT_TYPED_NAME
|
||||||
|
&& d_left (d_right (dc))->type == DEMANGLE_COMPONENT_QUAL_NAME
|
||||||
|
&& d_right (d_right (dc))->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
|
||||||
|
{
|
||||||
|
/* Address of a function (therefore in an expression context) must
|
||||||
|
have its argument list suppressed.
|
||||||
|
|
||||||
|
unary operator ... dc
|
||||||
|
operator & ... d_left (dc)
|
||||||
|
typed name ... d_right (dc)
|
||||||
|
qualified name ... d_left (d_right (dc))
|
||||||
|
<names>
|
||||||
|
function type ... d_right (d_right (dc))
|
||||||
|
argument list
|
||||||
|
<arguments> */
|
||||||
|
|
||||||
|
d_print_expr_op (dpi, options, d_left (dc));
|
||||||
|
d_print_comp (dpi, options, d_left (d_right (dc)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
|
||||||
|
&& d_left (dc)->u.s_operator.op->len == 1
|
||||||
|
&& d_left (dc)->u.s_operator.op->name[0] == '&'
|
||||||
|
&& d_right (dc)->type == DEMANGLE_COMPONENT_QUAL_NAME)
|
||||||
|
{
|
||||||
|
/* Keep also already processed variant without the argument list.
|
||||||
|
|
||||||
|
unary operator ... dc
|
||||||
|
operator & ... d_left (dc)
|
||||||
|
qualified name ... d_right (dc)
|
||||||
|
<names> */
|
||||||
|
|
||||||
|
d_print_expr_op (dpi, options, d_left (dc));
|
||||||
|
d_print_comp (dpi, options, d_right (dc));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
|
||||||
d_print_expr_op (dpi, options, d_left (dc));
|
d_print_expr_op (dpi, options, d_left (dc));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4165,7 +4204,21 @@ d_print_comp (struct d_print_info *dpi, int options,
|
|||||||
&& d_left (dc)->u.s_operator.op->name[0] == '>')
|
&& d_left (dc)->u.s_operator.op->name[0] == '>')
|
||||||
d_append_char (dpi, '(');
|
d_append_char (dpi, '(');
|
||||||
|
|
||||||
d_print_subexpr (dpi, options, d_left (d_right (dc)));
|
if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") == 0
|
||||||
|
&& d_left (d_right (dc))->type == DEMANGLE_COMPONENT_TYPED_NAME)
|
||||||
|
{
|
||||||
|
/* Function call used in an expression should not have printed types
|
||||||
|
of the function arguments. Values of the function arguments still
|
||||||
|
get printed below. */
|
||||||
|
|
||||||
|
const struct demangle_component *func = d_left (d_right (dc));
|
||||||
|
|
||||||
|
if (d_right (func)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
|
||||||
|
d_print_error (dpi);
|
||||||
|
d_print_subexpr (dpi, options, d_left (func));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
d_print_subexpr (dpi, options, d_left (d_right (dc)));
|
||||||
if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
|
if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
|
||||||
{
|
{
|
||||||
d_append_char (dpi, '[');
|
d_append_char (dpi, '[');
|
||||||
|
@ -3920,7 +3920,11 @@ decltype (({parm#1}.(g<double>))()) h<A<int>, double>(A<int>, double)
|
|||||||
# test for typed function in decltype
|
# test for typed function in decltype
|
||||||
--format=gnu-v3
|
--format=gnu-v3
|
||||||
_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_
|
_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_
|
||||||
decltype ({parm#1}+((x())())) A<int>::j<int>(int)
|
decltype ({parm#1}+(x())) A<int>::j<int>(int)
|
||||||
|
# typed function in decltype with an argument list
|
||||||
|
--format=gnu-v3
|
||||||
|
_Z1tIlEDTplcvT_Li5EclL_Z1qsELi6EEEv
|
||||||
|
decltype (((long)(5))+(q(6))) t<long>()
|
||||||
# test for expansion of function parameter pack
|
# test for expansion of function parameter pack
|
||||||
--format=gnu-v3
|
--format=gnu-v3
|
||||||
_Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_
|
_Z1gIIidEEDTclL_Z1fEspplfp_Li1EEEDpT_
|
||||||
@ -3990,6 +3994,18 @@ outer(short (*)(int), long)
|
|||||||
_Z6outer2IsEPFilES1_
|
_Z6outer2IsEPFilES1_
|
||||||
outer2<short>(int (*)(long))
|
outer2<short>(int (*)(long))
|
||||||
#
|
#
|
||||||
|
--format=gnu-v3 --no-params
|
||||||
|
_ZN1KIXadL_ZN1S1mEiEEE1fEv
|
||||||
|
K<&S::m>::f()
|
||||||
|
K<&S::m>::f
|
||||||
|
--format=gnu-v3
|
||||||
|
_ZN1KILi1EXadL_ZN1S1mEiEEE1fEv
|
||||||
|
K<1, &S::m>::f()
|
||||||
|
# Here the `(int)' argument list of `S::m' is already removed.
|
||||||
|
--format=gnu-v3
|
||||||
|
_ZN1KILi1EXadL_ZN1S1mEEEE1fEv
|
||||||
|
K<1, &S::m>::f()
|
||||||
|
#
|
||||||
# Ada (GNAT) tests.
|
# Ada (GNAT) tests.
|
||||||
#
|
#
|
||||||
# Simple test.
|
# Simple test.
|
||||||
|
Reference in New Issue
Block a user