Check function return type when promoting

This commit is contained in:
Bruce Hill 2024-05-13 14:45:49 -04:00
parent 02fe49a764
commit e6297323ba

10
types.c
View File

@ -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;