zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit ab4ea5d3cf5a96cd596df14515521843ca4dccad (tree)
parent e624c862894ec50998aafb3026d4ed45208acd6d
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Tue, 11 Feb 2020 13:12:42 -0500

Merge pull request #4433 from LemonBoy/ohno

Trivial patchset
Diffstat:
Mlib/std/special/compiler_rt.zig | 2+-
Mlib/std/target/riscv.zig | 2--
Msrc/ir.cpp | 13+++++++++----
Mtest/stage1/behavior/atomics.zig | 4++--
Mtest/stage1/behavior/cast.zig | 13+++++++++++++
5 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/lib/std/special/compiler_rt.zig b/lib/std/special/compiler_rt.zig @@ -149,7 +149,7 @@ comptime { @export(@import("compiler_rt/clzsi2.zig").__clzsi2, .{ .name = "__clzsi2", .linkage = linkage }); - if (builtin.arch.isARM() and !is_test) { + if ((builtin.arch.isARM() or builtin.arch.isThumb()) and !is_test) { @export(@import("compiler_rt/arm.zig").__aeabi_unwind_cpp_pr0, .{ .name = "__aeabi_unwind_cpp_pr0", .linkage = linkage }); @export(@import("compiler_rt/arm.zig").__aeabi_unwind_cpp_pr1, .{ .name = "__aeabi_unwind_cpp_pr1", .linkage = linkage }); @export(@import("compiler_rt/arm.zig").__aeabi_unwind_cpp_pr2, .{ .name = "__aeabi_unwind_cpp_pr2", .linkage = linkage }); diff --git a/lib/std/target/riscv.zig b/lib/std/target/riscv.zig @@ -78,7 +78,6 @@ pub const cpu = struct { .d, .f, .m, - .relax, }), }; @@ -92,7 +91,6 @@ pub const cpu = struct { .d, .f, .m, - .relax, }), }; diff --git a/src/ir.cpp b/src/ir.cpp @@ -11873,10 +11873,15 @@ static ConstCastOnly types_match_const_cast_only(IrAnalyze *ira, ZigType *wanted } if (wanted_type->id == ZigTypeIdInt && actual_type->id == ZigTypeIdInt) { - result.id = ConstCastResultIdIntShorten; - result.data.int_shorten = heap::c_allocator.allocate_nonzero<ConstCastIntShorten>(1); - result.data.int_shorten->wanted_type = wanted_type; - result.data.int_shorten->actual_type = actual_type; + if (wanted_type->data.integral.is_signed != actual_type->data.integral.is_signed || + wanted_type->data.integral.bit_count != actual_type->data.integral.bit_count) + { + result.id = ConstCastResultIdIntShorten; + result.data.int_shorten = heap::c_allocator.allocate_nonzero<ConstCastIntShorten>(1); + result.data.int_shorten->wanted_type = wanted_type; + result.data.int_shorten->actual_type = actual_type; + return result; + } return result; } diff --git a/test/stage1/behavior/atomics.zig b/test/stage1/behavior/atomics.zig @@ -146,8 +146,8 @@ fn testAtomicStore() void { } test "atomicrmw with floats" { - if (builtin.arch == .aarch64 or builtin.arch == .arm) - return; + if (builtin.arch == .aarch64 or builtin.arch == .arm or builtin.arch == .riscv64) + return error.SkipZigTest; testAtomicRmwFloat(); } diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig @@ -782,3 +782,16 @@ test "cast between [*c]T and ?[*:0]T on fn parameter" { }; S.doTheTest(); } + +test "cast between C pointer with different but compatible types" { + const S = struct { + fn foo(arg: [*]c_ushort) u16 { + return arg[0]; + } + fn doTheTest() void { + var x = [_]u16{ 4, 2, 1, 3 }; + expect(foo(@ptrCast([*]u16, &x)) == 4); + } + }; + S.doTheTest(); +}