aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-07-28 21:40:57 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-07-29 11:03:12 -0700
commita7a6f38eebfa2bf6dbe4d5f9579f0b2d54593820 (patch)
tree59ca1c44c953519deff4aeb42bca40d8ab5c72eb /src/type.zig
parent1b1c70ce381cc3c76517c846eafcd3425a40ce9c (diff)
downloadzig-a7a6f38eebfa2bf6dbe4d5f9579f0b2d54593820.tar.gz
zig-a7a6f38eebfa2bf6dbe4d5f9579f0b2d54593820.zip
Sema: fix runtime safety for integer overflow with vectors
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/type.zig b/src/type.zig
index 6750ec724b..3b1b0dd59d 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -5201,10 +5201,20 @@ pub const Type = extern union {
};
}
+ // Works for vectors and vectors of integers.
+ pub fn minInt(ty: Type, arena: Allocator, target: Target) !Value {
+ const scalar = try minIntScalar(ty.scalarType(), arena, target);
+ if (ty.zigTypeTag() == .Vector) {
+ return Value.Tag.repeated.create(arena, scalar);
+ } else {
+ return scalar;
+ }
+ }
+
/// Asserts that self.zigTypeTag() == .Int.
- pub fn minInt(self: Type, arena: Allocator, target: Target) !Value {
- assert(self.zigTypeTag() == .Int);
- const info = self.intInfo(target);
+ pub fn minIntScalar(ty: Type, arena: Allocator, target: Target) !Value {
+ assert(ty.zigTypeTag() == .Int);
+ const info = ty.intInfo(target);
if (info.signedness == .unsigned) {
return Value.zero;