diff options
Diffstat (limited to 'plugins/itanium/abi.c')
-rw-r--r-- | plugins/itanium/abi.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/plugins/itanium/abi.c b/plugins/itanium/abi.c index 3f6f713..fa661dc 100644 --- a/plugins/itanium/abi.c +++ b/plugins/itanium/abi.c @@ -1826,6 +1826,7 @@ static itanium_component *itd_type(GItaniumDemangling *context) GDataType *builtin; /* Type construit */ itd_state saved; /* Position d'analyse courante */ itanium_component *targs; /* Composant 'template-args' */ + ItaniumComponentType comp_type; /* Type de composant final */ /** * La règle traitée ici est la suivante : @@ -2102,10 +2103,25 @@ static itanium_component *itd_type(GItaniumDemangling *context) * function and operator names other than extern "C" functions. * * On saute donc éventuelleement certains résultats. + * + * Par ailleurs, il existe quelques restrictions à propos des qualificatifs : + * + * For purposes of substitution, given a CV-qualified type, the base + * type is substitutible, and the type with all the C, V, and r qualifiers + * plus any vendor extended types in the same order-insensitive set is + * substitutible; any type with a subset of those qualifiers is not. + * + * Le code courant englobe tous les qualificatifs, donc il n'y a pas de + * mesure particulière à prendre ici. */ - if (itd_get_component_type(result) != ICT_TYPE) + comp_type = itd_get_component_type(result); + + if (comp_type != ICT_TYPE + && (comp_type != ICT_FUNCTION_TYPE || itd_is_external_function(result))) + { g_itanium_demangling_add_substitution(context, result); + } } |