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:
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();
+}