aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-02-11 19:21:59 -0500
committerAndrew Kelley <andrew@ziglang.org>2019-02-11 19:21:59 -0500
commit069fc1a26990b3946cf788b4ebe5edefca5a3bfd (patch)
treebc9c44ef542d629ad3d2cb15c085ea7c4827a830 /src
parent57a7ab0d330416f15c0288004b67101c1c3e9629 (diff)
downloadzig-069fc1a26990b3946cf788b4ebe5edefca5a3bfd.tar.gz
zig-069fc1a26990b3946cf788b4ebe5edefca5a3bfd.zip
peer type resolution with C pointers
See #1059
Diffstat (limited to 'src')
-rw-r--r--src/ir.cpp18
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;
}