Opened 8 years ago
Closed 7 years ago
#27 closed defect (fixed)
Thunks are not generated for polymorphic-to-monomorphic function casts.
Reported by: | pabuhr | Owned by: | |
---|---|---|---|
Priority: | major | Component: | cfa-cc |
Version: | 1.0 | Keywords: | |
Cc: |
Description
Thunks are not generated for polymorphic-to-monomorphic function casts, e.g.
forall(otype T) T f(T); void g() { (int (*)(int))f; // casts, doesn't convert int (*h)(int) = f; // casts incorrectly, doesn't convert either }
Aaron: I suspect this needs to be fixed with a change to the GenPoly::box pass
There is a bug there, but it exposes deeper issues in the resolution pass;
essentially, cfa-cc seems to have no concept of a compiler-generated implicit
conversion (it punts to GCC whenever one is needed that exists in C), and it doesn't
keep the right information in the correct places for an easy fix for this bug. I'd
suggest resolving this one WONTFIX.
Change History (3)
comment:1 Changed 8 years ago by
comment:2 Changed 7 years ago by
While working on related bugs and cleanup, I actually managed to get this one working without too much trouble by moving the inferred parameters from ApplicationExpr
to the Expression
base class. Then it was just a matter of calling the right functions in the right places.
comment:3 Changed 7 years ago by
Owner: | set to Rob Schluntz <rschlunt@…> |
---|---|
Resolution: | → fixed |
Status: | new → closed |
In bb666f6:
I beat my head off this one for three weeks when I started on Cforall, and eventually gave up, for the reasons you mention.
I'd defer resolution on this one until the new resolver is in, and we've clarified what "user-defined conversions" look like in Cforall (or even if they exist).