| author | |
| committer | |
| log | ef7eff393912cae322fbc755536bc060c0166b94 |
| tree | a9c6d4ca180644cb85a048673c7583708d6e4b69 |
| parent | f2835c6a286c9e6bb033cbf04a2ed3463e206bf3 |
2 files changed, 29 insertions(+), 1 deletions(-)
src/Sema.zig+17| ... | ... | @@ -14014,6 +14014,23 @@ fn coerce( |
| 14014 | 14014 | const addr = try sema.coerce(block, ptr_size_ty, inst, inst_src); |
| 14015 | 14015 | return sema.coerceCompatiblePtrs(block, dest_ty, addr, inst_src); |
| 14016 | 14016 | }, |
| 14017 | .Pointer => p: { | |
| 14018 | const inst_info = inst_ty.ptrInfo().data; | |
| 14019 | if (inst_info.size == .Slice) break :p; | |
| 14020 | switch (try sema.coerceInMemoryAllowed( | |
| 14021 | block, | |
| 14022 | dest_info.pointee_type, | |
| 14023 | inst_info.pointee_type, | |
| 14024 | dest_info.mutable, | |
| 14025 | target, | |
| 14026 | dest_ty_src, | |
| 14027 | inst_src, | |
| 14028 | )) { | |
| 14029 | .ok => {}, | |
| 14030 | .no_match => break :p, | |
| 14031 | } | |
| 14032 | return sema.coerceCompatiblePtrs(block, dest_ty, inst, inst_src); | |
| 14033 | }, | |
| 14017 | 14034 | else => {}, |
| 14018 | 14035 | } |
| 14019 | 14036 | } |
test/behavior/cast.zig+12-1| ... | ... | @@ -316,7 +316,8 @@ test "cast from ?[*]T to ??[*]T" { |
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 318 | test "peer type unsigned int to signed" { |
| 319 | if (builtin.zig_backend == .stage2_x86_64 or builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | |
| 319 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | |
| 320 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 320 | 321 | |
| 321 | 322 | var w: u31 = 5; |
| 322 | 323 | var x: u8 = 7; |
| ... | ... | @@ -325,3 +326,13 @@ test "peer type unsigned int to signed" { |
| 325 | 326 | comptime try expect(@TypeOf(a) == i32); |
| 326 | 327 | try expect(a == 7); |
| 327 | 328 | } |
| 329 | ||
| 330 | test "expected [*c]const u8, found [*:0]const u8" { | |
| 331 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; | |
| 332 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; | |
| 333 | ||
| 334 | var a: [*:0]const u8 = "hello"; | |
| 335 | var b: [*c]const u8 = a; | |
| 336 | var c: [*:0]const u8 = b; | |
| 337 | try expect(std.mem.eql(u8, c[0..5], "hello")); | |
| 338 | } |