You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[CIR][IR] Relax get_member verifier for incomplete types (#269)
This is a suggestion to relax the existing verification even more than
we did it in PR #257.
Here we also skip verification if a field on the given index is also of
incomplete type - and we can not compare it with the result type of the
operation.
Now the next code fails with type mismatch error:
```
typedef struct Node {
struct Node* next;
} NodeStru;
void foo(NodeStru* a) {
a->next = 0;
}
```
because the result type is kind of full and the type of field is not
(for the reasons discussed in #256).
Basically, the problem is in the `GetMemberOp` result type generated as
following (via `CIRGenTypes::convertType`)
`!cir.ptr<!cir.struct<struct "Node" {!cir.ptr<!cir.struct<struct "Node"
incomplete #cir.record.decl.ast>>} #cir.record.decl.ast>>`
where the field type at index differs from the record type - compare
with
`!cir.ptr<!cir.struct<struct "Node" incomplete #cir.record.decl.ast>>`
We just slightly relax the previous solution in #257 - and the
compilation won't fail in the case of recursive types.
Well, if there are some other thoughts?
0 commit comments