[Demangle PATCH] Some pre-fix cleanups
https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00983.html * cp-demangle.c (is_fnqual_component_type): Reimplement using FNQUAL_COMPONENT_CASE. (d_encoding): Hold bare_function_type in local var. (d_local_name): Build name in both cases and build result once. Collapse switch-if to single conditional. * testsuite/demangle-expected: Realign blank lines with tests. From-SVN: r252802
This commit is contained in:
parent
897da3034c
commit
9d89efebaa
|
@ -1,3 +1,12 @@
|
||||||
|
2017-09-15 Nathan Sidwell <nathan@acm.org>
|
||||||
|
|
||||||
|
* cp-demangle.c (is_fnqual_component_type): Reimplement using
|
||||||
|
FNQUAL_COMPONENT_CASE.
|
||||||
|
(d_encoding): Hold bare_function_type in local var.
|
||||||
|
(d_local_name): Build name in both cases and build result once.
|
||||||
|
Collapse switch-if to single conditional.
|
||||||
|
* testsuite/demangle-expected: Realign blank lines with tests.
|
||||||
|
|
||||||
2017-09-12 Jiong Wang <jiong.wang@arm.com>
|
2017-09-12 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
* dwarfnames.c (DW_CFA_DUP): New define.
|
* dwarfnames.c (DW_CFA_DUP): New define.
|
||||||
|
|
|
@ -568,22 +568,6 @@ static int d_demangle_callback (const char *, int,
|
||||||
demangle_callbackref, void *);
|
demangle_callbackref, void *);
|
||||||
static char *d_demangle (const char *, int, size_t *);
|
static char *d_demangle (const char *, int, size_t *);
|
||||||
|
|
||||||
/* True iff TYPE is a demangling component representing a
|
|
||||||
function-type-qualifier. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
is_fnqual_component_type (enum demangle_component_type type)
|
|
||||||
{
|
|
||||||
return (type == DEMANGLE_COMPONENT_RESTRICT_THIS
|
|
||||||
|| type == DEMANGLE_COMPONENT_VOLATILE_THIS
|
|
||||||
|| type == DEMANGLE_COMPONENT_CONST_THIS
|
|
||||||
|| type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
|
|
||||||
|| type == DEMANGLE_COMPONENT_TRANSACTION_SAFE
|
|
||||||
|| type == DEMANGLE_COMPONENT_NOEXCEPT
|
|
||||||
|| type == DEMANGLE_COMPONENT_THROW_SPEC
|
|
||||||
|| type == DEMANGLE_COMPONENT_REFERENCE_THIS);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define FNQUAL_COMPONENT_CASE \
|
#define FNQUAL_COMPONENT_CASE \
|
||||||
case DEMANGLE_COMPONENT_RESTRICT_THIS: \
|
case DEMANGLE_COMPONENT_RESTRICT_THIS: \
|
||||||
case DEMANGLE_COMPONENT_VOLATILE_THIS: \
|
case DEMANGLE_COMPONENT_VOLATILE_THIS: \
|
||||||
|
@ -594,6 +578,23 @@ is_fnqual_component_type (enum demangle_component_type type)
|
||||||
case DEMANGLE_COMPONENT_NOEXCEPT: \
|
case DEMANGLE_COMPONENT_NOEXCEPT: \
|
||||||
case DEMANGLE_COMPONENT_THROW_SPEC
|
case DEMANGLE_COMPONENT_THROW_SPEC
|
||||||
|
|
||||||
|
/* True iff TYPE is a demangling component representing a
|
||||||
|
function-type-qualifier. */
|
||||||
|
|
||||||
|
static int
|
||||||
|
is_fnqual_component_type (enum demangle_component_type type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
FNQUAL_COMPONENT_CASE:
|
||||||
|
return 1;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef CP_DEMANGLE_DEBUG
|
#ifdef CP_DEMANGLE_DEBUG
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1305,7 +1306,7 @@ d_encoding (struct d_info *di, int top_level)
|
||||||
return d_special_name (di);
|
return d_special_name (di);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct demangle_component *dc;
|
struct demangle_component *dc, *dcr;
|
||||||
|
|
||||||
dc = d_name (di);
|
dc = d_name (di);
|
||||||
|
|
||||||
|
@ -1327,8 +1328,6 @@ d_encoding (struct d_info *di, int top_level)
|
||||||
which is local to a function. */
|
which is local to a function. */
|
||||||
if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
|
if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
|
||||||
{
|
{
|
||||||
struct demangle_component *dcr;
|
|
||||||
|
|
||||||
dcr = d_right (dc);
|
dcr = d_right (dc);
|
||||||
while (is_fnqual_component_type (dcr->type))
|
while (is_fnqual_component_type (dcr->type))
|
||||||
dcr = d_left (dcr);
|
dcr = d_left (dcr);
|
||||||
|
@ -1341,8 +1340,8 @@ d_encoding (struct d_info *di, int top_level)
|
||||||
peek = d_peek_char (di);
|
peek = d_peek_char (di);
|
||||||
if (dc == NULL || peek == '\0' || peek == 'E')
|
if (dc == NULL || peek == '\0' || peek == 'E')
|
||||||
return dc;
|
return dc;
|
||||||
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
|
dcr = d_bare_function_type (di, has_return_type (dc));
|
||||||
d_bare_function_type (di, has_return_type (dc)));
|
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, dcr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3571,6 +3570,7 @@ static struct demangle_component *
|
||||||
d_local_name (struct d_info *di)
|
d_local_name (struct d_info *di)
|
||||||
{
|
{
|
||||||
struct demangle_component *function;
|
struct demangle_component *function;
|
||||||
|
struct demangle_component *name;
|
||||||
|
|
||||||
if (! d_check_char (di, 'Z'))
|
if (! d_check_char (di, 'Z'))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -3585,13 +3585,10 @@ d_local_name (struct d_info *di)
|
||||||
d_advance (di, 1);
|
d_advance (di, 1);
|
||||||
if (! d_discriminator (di))
|
if (! d_discriminator (di))
|
||||||
return NULL;
|
return NULL;
|
||||||
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
|
name = d_make_name (di, "string literal", sizeof "string literal" - 1);
|
||||||
d_make_name (di, "string literal",
|
|
||||||
sizeof "string literal" - 1));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct demangle_component *name;
|
|
||||||
int num = -1;
|
int num = -1;
|
||||||
|
|
||||||
if (d_peek_char (di) == 'd')
|
if (d_peek_char (di) == 'd')
|
||||||
|
@ -3604,21 +3601,19 @@ d_local_name (struct d_info *di)
|
||||||
}
|
}
|
||||||
|
|
||||||
name = d_name (di);
|
name = d_name (di);
|
||||||
if (name)
|
if (name
|
||||||
switch (name->type)
|
|
||||||
{
|
|
||||||
/* Lambdas and unnamed types have internal discriminators. */
|
/* Lambdas and unnamed types have internal discriminators. */
|
||||||
case DEMANGLE_COMPONENT_LAMBDA:
|
&& name->type != DEMANGLE_COMPONENT_LAMBDA
|
||||||
case DEMANGLE_COMPONENT_UNNAMED_TYPE:
|
&& name->type != DEMANGLE_COMPONENT_UNNAMED_TYPE
|
||||||
break;
|
/* Otherwise read and ignore an optional discriminator. */
|
||||||
default:
|
&& ! d_discriminator (di))
|
||||||
if (! d_discriminator (di))
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
|
||||||
if (num >= 0)
|
if (num >= 0)
|
||||||
name = d_make_default_arg (di, num, name);
|
name = d_make_default_arg (di, num, name);
|
||||||
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* <discriminator> ::= _ <number> # when number < 10
|
/* <discriminator> ::= _ <number> # when number < 10
|
||||||
|
|
|
@ -4720,18 +4720,19 @@ _ZdvMMMMMMMMMMMMMrrrrA_DTdvfp_fp_Eededilfdfdfdfd
|
||||||
|
|
||||||
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
||||||
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
_Z1MA_aMMMMA_MMA_MMMMMMMMSt1MS_o11T0000000000t2M0oooozoooo
|
||||||
|
|
||||||
#
|
#
|
||||||
# demangler/80513 Test for overflow in d_number
|
# demangler/80513 Test for overflow in d_number
|
||||||
_Z4294967297x
|
|
||||||
_Z4294967297x
|
|
||||||
|
|
||||||
|
_Z4294967297x
|
||||||
|
_Z4294967297x
|
||||||
#
|
#
|
||||||
# demangler/80513 Test for bogus characters after __thunk_
|
# demangler/80513 Test for bogus characters after __thunk_
|
||||||
__thunk_16a_$_1x
|
|
||||||
__thunk_16a_$_1x
|
|
||||||
|
|
||||||
|
__thunk_16a_$_1x
|
||||||
|
__thunk_16a_$_1x
|
||||||
#
|
#
|
||||||
# demangler/80513 Test for overflow in consume_count
|
# demangler/80513 Test for overflow in consume_count
|
||||||
|
|
||||||
__thunk_4294967297__$_1x
|
__thunk_4294967297__$_1x
|
||||||
__thunk_4294967297__$_1x
|
__thunk_4294967297__$_1x
|
||||||
|
#
|
||||||
|
|
Loading…
Reference in New Issue