From e6297323ba3c5e90201df26c62573a7a5e367df6 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Mon, 13 May 2024 14:45:49 -0400 Subject: Check function return type when promoting --- types.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'types.c') diff --git a/types.c b/types.c index f2acb0ba..1c1f4fd5 100644 --- a/types.c +++ b/types.c @@ -279,7 +279,15 @@ bool can_promote(type_t *actual, type_t *needed) continue; return false; } - return true; + type_t *actual_ret = Match(actual, FunctionType)->ret; + if (!actual_ret) actual_ret = Type(VoidType); + type_t *needed_ret = Match(needed, FunctionType)->ret; + if (!needed_ret) needed_ret = Type(VoidType); + + return ( + (type_eq(actual_ret, needed_ret)) + || (actual_ret->tag == PointerType && needed_ret->tag == PointerType + && can_promote(actual_ret, needed_ret))); } return false; -- cgit v1.2.3