From a6939def6fa629a646743fd305f04451a9686839 Mon Sep 17 00:00:00 2001 From: Michael Beck Date: Mon, 14 Nov 2005 10:19:07 +0000 Subject: [PATCH] check calling conventions for method types in equal_typoe() and smaller_type() [r6916] --- ir/tr/type.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/ir/tr/type.c b/ir/tr/type.c index 0edcb4e6f..1ba1dda14 100644 --- a/ir/tr/type.c +++ b/ir/tr/type.c @@ -550,6 +550,8 @@ int equal_type(type *typ1, type *typ2) { if (get_method_variadicity(typ1) != get_method_variadicity(typ2)) return 0; if (get_method_n_ress(typ1) != get_method_n_ress(typ2)) return 0; + if (get_method_calling_convention(typ1) != + get_method_calling_convention(typ2)) return 0; if (get_method_variadicity(typ1) == variadicity_non_variadic) { n_param1 = get_method_n_params(typ1); @@ -564,7 +566,7 @@ int equal_type(type *typ1, type *typ2) { for (i = 0; i < n_param1; i++) { if (!equal_type(get_method_param_type(typ1, i), get_method_param_type(typ2, i))) - return 0; + return 0; } for (i = 0; i < get_method_n_ress(typ1); i++) { if (!equal_type(get_method_res_type(typ1, i), get_method_res_type(typ2, i))) @@ -652,10 +654,25 @@ int smaller_type (type *st, type *lt) { } } break; case tpo_method: { + int n_param1, n_param2; + /** FIXME: is this still 1? */ if (get_method_variadicity(st) != get_method_variadicity(lt)) return 0; - if (get_method_n_params(st) != get_method_n_params(lt)) return 0; if (get_method_n_ress(st) != get_method_n_ress(lt)) return 0; + if (get_method_calling_convention(st) != + get_method_calling_convention(lt)) return 0; + + if (get_method_variadicity(st) == variadicity_non_variadic) { + n_param1 = get_method_n_params(st); + n_param2 = get_method_n_params(lt); + } + else { + n_param1 = get_method_first_variadic_param_index(st); + n_param2 = get_method_first_variadic_param_index(lt); + } + + if (n_param1 != n_param2) return 0; + for (i = 0; i < get_method_n_params(st); i++) { if (!smaller_type(get_method_param_type(st, i), get_method_param_type(lt, i))) return 0; -- 2.20.1