diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-07-28 21:40:57 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-07-29 11:03:12 -0700 |
| commit | a7a6f38eebfa2bf6dbe4d5f9579f0b2d54593820 (patch) | |
| tree | 59ca1c44c953519deff4aeb42bca40d8ab5c72eb /src/type.zig | |
| parent | 1b1c70ce381cc3c76517c846eafcd3425a40ce9c (diff) | |
| download | zig-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.zig | 16 |
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; |
