diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-05-13 14:45:49 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-05-13 14:45:49 -0400 |
| commit | e6297323ba3c5e90201df26c62573a7a5e367df6 (patch) | |
| tree | 0219f63ff4f2f0d55d804883e98492c544601152 | |
| parent | 02fe49a7646807964d214605a478c90d82d2c8a3 (diff) | |
Check function return type when promoting
| -rw-r--r-- | types.c | 10 |
1 files changed, 9 insertions, 1 deletions
@@ -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; |
