diff options
Diffstat (limited to 'plugins/itanium/abi.c')
-rw-r--r-- | plugins/itanium/abi.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/plugins/itanium/abi.c b/plugins/itanium/abi.c index 213d5f7..393a8d6 100644 --- a/plugins/itanium/abi.c +++ b/plugins/itanium/abi.c @@ -2194,6 +2194,7 @@ static itanium_component *itd_builtin_type(GItaniumDemangling *context) GDataType *std; /* Espace de noms */ itanium_component *vendor; /* Extension propriétaire */ GDataType *builtin; /* Type construit */ + bool status; /* Bilan de rattachement */ /** * La règle traitée ici est la suivante : @@ -2351,7 +2352,16 @@ static itanium_component *itd_builtin_type(GItaniumDemangling *context) std = g_class_enum_type_new(CEK_NAMESPACE, strdup("std")); builtin = g_class_enum_type_new(CEK_CLASS, strdup("nullptr_t")); - g_data_type_set_namespace(builtin, std, strdup("::")); + status = g_data_type_set_namespace(builtin, std, "::"); + + g_object_unref(G_OBJECT(std)); + + if (!status) + { + g_object_unref(G_OBJECT(builtin)); + result = NULL; + goto done; + } result = itd_make_type(builtin); itd_set_type(result, ICT_STD_SUBST); @@ -3438,6 +3448,7 @@ static itanium_component *itd_substitution(GItaniumDemangling *context) const itanium_std_subst_info *stdinfo; /* Raccourci de confort */ GDataType *std; /* Espace de noms */ GDataType *type; /* Type complet final */ + bool status; /* Bilan de rattachement */ /** * La règle traitée ici est la suivante : @@ -3488,7 +3499,12 @@ static itanium_component *itd_substitution(GItaniumDemangling *context) else { type = g_class_enum_type_new(CEK_CLASS, strdup(stdinfo->class)); - g_data_type_set_namespace(type, std, strdup("::")); + status = g_data_type_set_namespace(type, std, "::"); + g_object_unref(G_OBJECT(std)); + + if (!status) + break; + } result = itd_make_type(type); |