diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-02-11 19:21:59 -0500 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-02-11 19:21:59 -0500 |
| commit | 069fc1a26990b3946cf788b4ebe5edefca5a3bfd (patch) | |
| tree | bc9c44ef542d629ad3d2cb15c085ea7c4827a830 /src/ir.cpp | |
| parent | 57a7ab0d330416f15c0288004b67101c1c3e9629 (diff) | |
| download | zig-069fc1a26990b3946cf788b4ebe5edefca5a3bfd.tar.gz zig-069fc1a26990b3946cf788b4ebe5edefca5a3bfd.zip | |
peer type resolution with C pointers
See #1059
Diffstat (limited to 'src/ir.cpp')
| -rw-r--r-- | src/ir.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp index 5ec397b0b2..91c8503234 100644 --- a/src/ir.cpp +++ b/src/ir.cpp @@ -9275,6 +9275,24 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT continue; } + if (prev_type->id == ZigTypeIdPointer && cur_type->id == ZigTypeIdPointer) { + if (prev_type->data.pointer.ptr_len == PtrLenC && + types_match_const_cast_only(ira, prev_type->data.pointer.child_type, + cur_type->data.pointer.child_type, source_node, + !prev_type->data.pointer.is_const).id == ConstCastResultIdOk) + { + continue; + } + if (cur_type->data.pointer.ptr_len == PtrLenC && + types_match_const_cast_only(ira, cur_type->data.pointer.child_type, + prev_type->data.pointer.child_type, source_node, + !cur_type->data.pointer.is_const).id == ConstCastResultIdOk) + { + prev_inst = cur_inst; + continue; + } + } + if (types_match_const_cast_only(ira, prev_type, cur_type, source_node, false).id == ConstCastResultIdOk) { continue; } |
