Commit 2a4e06bcb3
Changed files (27)
test
behavior
cases
compile_errors
src/Sema/arith.zig
@@ -0,0 +1,1609 @@
+//! This file encapsules all arithmetic operations on comptime-known integers, floats, and vectors.
+//!
+//! It is only used in cases where both operands are comptime-known; a single comptime-known operand
+//! is handled directly by `Sema.zig`.
+//!
+//! Functions starting with `int`, `comptimeInt`, or `float` are low-level primitives which operate
+//! on defined scalar values; generally speaking, they are at the bottom of this file and non-`pub`.
+
+/// Asserts that `ty` is a scalar integer type, and that `prev_val` is of type `ty`.
+/// Returns a value one greater than `prev_val`. If this would overflow `ty,` then the
+/// return value has `overflow` set, and `val` is instead a `comptime_int`.
+pub fn incrementDefinedInt(
+ sema: *Sema,
+ ty: Type,
+ prev_val: Value,
+) CompileError!struct { overflow: bool, val: Value } {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ assert(prev_val.typeOf(zcu).toIntern() == ty.toIntern());
+ assert(!prev_val.isUndef(zcu));
+ const res = try intAdd(sema, prev_val, try pt.intValue(ty, 1), ty);
+ return .{ .overflow = res.overflow, .val = res.val };
+}
+
+/// `val` is of type `ty`.
+/// `ty` is a float, comptime_float, or vector thereof.
+pub fn negateFloat(
+ sema: *Sema,
+ ty: Type,
+ val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ if (val.isUndef(zcu)) return val;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const scalar_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+ const result_elems = try sema.arena.alloc(InternPool.Index, len);
+ for (result_elems, 0..) |*result_elem, elem_idx| {
+ const elem = try val.elemValue(pt, elem_idx);
+ if (elem.isUndef(zcu)) {
+ result_elem.* = elem.toIntern();
+ } else {
+ result_elem.* = (try floatNeg(sema, elem, scalar_ty)).toIntern();
+ }
+ }
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = result_elems },
+ } });
+ return .fromInterned(result_val);
+ },
+ .float, .comptime_float => return floatNeg(sema, val, ty),
+ else => unreachable,
+ }
+}
+
+/// Wraps on integers, but accepts floats.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, float, comptime_int, or comptime_float; *not* a vector.
+pub fn addMaybeWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value {
+ const zcu = sema.pt.zcu;
+ if (lhs.isUndef(zcu)) return lhs;
+ if (lhs.isUndef(zcu)) return rhs;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return (try intAddWithOverflow(sema, lhs, rhs, ty)).wrapped_result,
+ .float, .comptime_float => return floatAdd(sema, lhs, rhs, ty),
+ else => unreachable,
+ }
+}
+
+/// Wraps on integers, but accepts floats.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, float, comptime_int, or comptime_float; *not* a vector.
+pub fn subMaybeWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value {
+ const zcu = sema.pt.zcu;
+ if (lhs.isUndef(zcu)) return lhs;
+ if (lhs.isUndef(zcu)) return rhs;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return (try intSubWithOverflow(sema, lhs, rhs, ty)).wrapped_result,
+ .float, .comptime_float => return floatSub(sema, lhs, rhs, ty),
+ else => unreachable,
+ }
+}
+
+/// Wraps on integers, but accepts floats.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, float, comptime_int, or comptime_float; *not* a vector.
+pub fn mulMaybeWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value {
+ const zcu = sema.pt.zcu;
+ if (lhs.isUndef(zcu)) return lhs;
+ if (lhs.isUndef(zcu)) return rhs;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return (try intMulWithOverflow(sema, lhs, rhs, ty)).wrapped_result,
+ .float, .comptime_float => return floatMul(sema, lhs, rhs, ty),
+ else => unreachable,
+ }
+}
+
+/// `lhs` and `rhs` are of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn addWithOverflow(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return addWithOverflowScalar(sema, ty, lhs, rhs),
+ .vector => {
+ const scalar_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+ switch (scalar_ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ const overflow_bits = try sema.arena.alloc(InternPool.Index, len);
+ const wrapped_results = try sema.arena.alloc(InternPool.Index, len);
+ for (overflow_bits, wrapped_results, 0..) |*ob, *wr, elem_idx| {
+ const lhs_elem = try lhs.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs.elemValue(pt, elem_idx);
+ const elem_result = try addWithOverflowScalar(sema, scalar_ty, lhs_elem, rhs_elem);
+ ob.* = elem_result.overflow_bit.toIntern();
+ wr.* = elem_result.wrapped_result.toIntern();
+ }
+ return .{
+ .overflow_bit = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{ .len = len, .child = .u1_type })).toIntern(),
+ .storage = .{ .elems = overflow_bits },
+ } })),
+ .wrapped_result = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = wrapped_results },
+ } })),
+ };
+ },
+ else => unreachable,
+ }
+}
+fn addWithOverflowScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return .{
+ .overflow_bit = try pt.undefValue(.u1),
+ .wrapped_result = try pt.undefValue(ty),
+ };
+ return intAddWithOverflow(sema, lhs, rhs, ty);
+}
+
+/// `lhs` and `rhs` are of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn subWithOverflow(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return subWithOverflowScalar(sema, ty, lhs, rhs),
+ .vector => {
+ const scalar_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+ switch (scalar_ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ const overflow_bits = try sema.arena.alloc(InternPool.Index, len);
+ const wrapped_results = try sema.arena.alloc(InternPool.Index, len);
+ for (overflow_bits, wrapped_results, 0..) |*ob, *wr, elem_idx| {
+ const lhs_elem = try lhs.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs.elemValue(pt, elem_idx);
+ const elem_result = try subWithOverflowScalar(sema, scalar_ty, lhs_elem, rhs_elem);
+ ob.* = elem_result.overflow_bit.toIntern();
+ wr.* = elem_result.wrapped_result.toIntern();
+ }
+ return .{
+ .overflow_bit = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{ .len = len, .child = .u1_type })).toIntern(),
+ .storage = .{ .elems = overflow_bits },
+ } })),
+ .wrapped_result = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = wrapped_results },
+ } })),
+ };
+ },
+ else => unreachable,
+ }
+}
+fn subWithOverflowScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return .{
+ .overflow_bit = try pt.undefValue(.u1),
+ .wrapped_result = try pt.undefValue(ty),
+ };
+ return intSubWithOverflow(sema, lhs, rhs, ty);
+}
+
+/// `lhs` and `rhs` are of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn mulWithOverflow(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => return mulWithOverflowScalar(sema, ty, lhs, rhs),
+ .vector => {
+ const scalar_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+ switch (scalar_ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ const overflow_bits = try sema.arena.alloc(InternPool.Index, len);
+ const wrapped_results = try sema.arena.alloc(InternPool.Index, len);
+ for (overflow_bits, wrapped_results, 0..) |*ob, *wr, elem_idx| {
+ const lhs_elem = try lhs.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs.elemValue(pt, elem_idx);
+ const elem_result = try mulWithOverflowScalar(sema, scalar_ty, lhs_elem, rhs_elem);
+ ob.* = elem_result.overflow_bit.toIntern();
+ wr.* = elem_result.wrapped_result.toIntern();
+ }
+ return .{
+ .overflow_bit = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{ .len = len, .child = .u1_type })).toIntern(),
+ .storage = .{ .elems = overflow_bits },
+ } })),
+ .wrapped_result = .fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = wrapped_results },
+ } })),
+ };
+ },
+ else => unreachable,
+ }
+}
+fn mulWithOverflowScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs: Value,
+ rhs: Value,
+) CompileError!Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return .{
+ .overflow_bit = try pt.undefValue(.u1),
+ .wrapped_result = try pt.undefValue(ty),
+ };
+ return intMulWithOverflow(sema, lhs, rhs, ty);
+}
+
+/// Applies the `+` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, float, comptime_int, comptime_float, or vector.
+pub fn add(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try addScalar(sema, block, elem_ty, lhs_elem, rhs_elem, src, lhs_src, rhs_src, elem_idx)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return addScalar(sema, block, ty, lhs_val, rhs_val, src, lhs_src, rhs_src, null),
+ }
+}
+fn addScalar(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ vec_idx: ?usize,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_int = switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
+
+ if (is_int) {
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ const res = try intAdd(sema, lhs_val, rhs_val, ty);
+ if (res.overflow) return sema.failWithIntegerOverflow(block, src, ty, res.val, vec_idx);
+ return res.val;
+ } else {
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ return floatAdd(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+/// Applies the `+%` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn addWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try addWrapScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return addWrapScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn addWrapScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ return (try addWithOverflowScalar(sema, ty, lhs_val, rhs_val)).wrapped_result;
+}
+
+/// Applies the `+|` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn addSat(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try addSatScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return addSatScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn addSatScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_comptime_int = switch (ty.zigTypeTag(zcu)) {
+ .int => false,
+ .comptime_int => true,
+ else => unreachable,
+ };
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ if (is_comptime_int) {
+ const res = try intAdd(sema, lhs_val, rhs_val, ty);
+ assert(!res.overflow);
+ return res.val;
+ } else {
+ return intAddSat(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+/// Applies the `-` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, float, comptime_int, comptime_float, or vector.
+pub fn sub(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try subScalar(sema, block, elem_ty, lhs_elem, rhs_elem, src, lhs_src, rhs_src, elem_idx)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return subScalar(sema, block, ty, lhs_val, rhs_val, src, lhs_src, rhs_src, null),
+ }
+}
+fn subScalar(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ vec_idx: ?usize,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_int = switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
+
+ if (is_int) {
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ const res = try intSub(sema, lhs_val, rhs_val, ty);
+ if (res.overflow) return sema.failWithIntegerOverflow(block, src, ty, res.val, vec_idx);
+ return res.val;
+ } else {
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ return floatSub(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+/// Applies the `-%` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn subWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try subWrapScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return subWrapScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn subWrapScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ const result = try intSubWithOverflow(sema, lhs_val, rhs_val, ty);
+ return result.wrapped_result;
+}
+
+/// Applies the `-|` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn subSat(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try subSatScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return subSatScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn subSatScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_comptime_int = switch (ty.zigTypeTag(zcu)) {
+ .int => false,
+ .comptime_int => true,
+ else => unreachable,
+ };
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ if (is_comptime_int) {
+ const res = try intSub(sema, lhs_val, rhs_val, ty);
+ assert(!res.overflow);
+ return res.val;
+ } else {
+ return intSubSat(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+/// Applies the `*` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are fully-resolved values of type `ty`.
+/// `ty` is an int, float, comptime_int, comptime_float, or vector.
+pub fn mul(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try mulScalar(sema, block, elem_ty, lhs_elem, rhs_elem, src, lhs_src, rhs_src, elem_idx)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return mulScalar(sema, block, ty, lhs_val, rhs_val, src, lhs_src, rhs_src, null),
+ }
+}
+fn mulScalar(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ vec_idx: ?usize,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_int = switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
+
+ if (is_int) {
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ const res = try intMul(sema, lhs_val, rhs_val, ty);
+ if (res.overflow) return sema.failWithIntegerOverflow(block, src, ty, res.val, vec_idx);
+ return res.val;
+ } else {
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ return floatMul(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+/// Applies the `*%` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn mulWrap(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try mulWrapScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return mulWrapScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn mulWrapScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => {},
+ else => unreachable,
+ }
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ const result = try intMulWithOverflow(sema, lhs_val, rhs_val, ty);
+ return result.wrapped_result;
+}
+
+/// Applies the `*|` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are both of type `ty`.
+/// `ty` is an int, comptime_int, or vector thereof.
+pub fn mulSat(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try mulSatScalar(sema, elem_ty, lhs_elem, rhs_elem)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return mulSatScalar(sema, ty, lhs_val, rhs_val),
+ }
+}
+fn mulSatScalar(
+ sema: *Sema,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_comptime_int = switch (ty.zigTypeTag(zcu)) {
+ .int => false,
+ .comptime_int => true,
+ else => unreachable,
+ };
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ if (is_comptime_int) {
+ const res = try intMul(sema, lhs_val, rhs_val, ty);
+ assert(!res.overflow);
+ return res.val;
+ } else {
+ return intMulSat(sema, lhs_val, rhs_val, ty);
+ }
+}
+
+pub const DivOp = enum { div, div_trunc, div_floor, div_exact };
+
+/// Applies the `/` operator to comptime-known values.
+/// `lhs_val` and `rhs_val` are fully-resolved values of type `ty`.
+/// `ty` is an int, float, comptime_int, comptime_float, or vector.
+pub fn div(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ op: DivOp,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try divScalar(sema, block, elem_ty, lhs_elem, rhs_elem, src, lhs_src, rhs_src, op, elem_idx)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return divScalar(sema, block, ty, lhs_val, rhs_val, src, lhs_src, rhs_src, op, null),
+ }
+}
+fn divScalar(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ src: LazySrcLoc,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ op: DivOp,
+ vec_idx: ?usize,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_int = switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
+
+ if (is_int) {
+ if (rhs_val.eqlScalarNum(.zero_comptime_int, zcu)) return sema.failWithDivideByZero(block, rhs_src);
+
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+
+ switch (op) {
+ .div, .div_trunc => {
+ const res = try intDivTrunc(sema, lhs_val, rhs_val, ty);
+ if (res.overflow) return sema.failWithIntegerOverflow(block, src, ty, res.val, vec_idx);
+ return res.val;
+ },
+ .div_floor => {
+ const res = try intDivFloor(sema, lhs_val, rhs_val, ty);
+ if (res.overflow) return sema.failWithIntegerOverflow(block, src, ty, res.val, vec_idx);
+ return res.val;
+ },
+ .div_exact => switch (try intDivExact(sema, lhs_val, rhs_val, ty)) {
+ .remainder => return sema.fail(block, src, "exact division produced remainder", .{}),
+ .overflow => |val| return sema.failWithIntegerOverflow(block, src, ty, val, vec_idx),
+ .success => |val| return val,
+ },
+ }
+ } else {
+ const allow_div_zero = switch (op) {
+ .div, .div_trunc, .div_floor => ty.toIntern() != .comptime_float_type and block.float_mode == .strict,
+ .div_exact => false,
+ };
+ if (!allow_div_zero) {
+ if (rhs_val.eqlScalarNum(.zero_comptime_int, zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+
+ const can_exhibit_ib = !allow_div_zero or op == .div_exact;
+ if (can_exhibit_ib) {
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ } else {
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ }
+
+ switch (op) {
+ .div => return floatDiv(sema, lhs_val, rhs_val, ty),
+ .div_trunc => return floatDivTrunc(sema, lhs_val, rhs_val, ty),
+ .div_floor => return floatDivFloor(sema, lhs_val, rhs_val, ty),
+ .div_exact => {
+ if (!floatDivIsExact(sema, lhs_val, rhs_val, ty)) {
+ return sema.fail(block, src, "exact division produced remainder", .{});
+ }
+ return floatDivTrunc(sema, lhs_val, rhs_val, ty);
+ },
+ }
+ }
+}
+
+pub const ModRemOp = enum { mod, rem };
+
+/// Applies `@mod` or `@rem` to comptime-known values.
+/// `lhs_val` and `rhs_val` are fully-resolved values of type `ty`.
+/// `ty` is an int, float, comptime_int, comptime_float, or vector.
+pub fn modRem(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ op: ModRemOp,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.zigTypeTag(zcu)) {
+ .vector => {
+ const elem_ty = ty.childType(zcu);
+ const len = ty.vectorLen(zcu);
+
+ const elem_vals = try sema.arena.alloc(InternPool.Index, len);
+ for (elem_vals, 0..) |*result_elem, elem_idx| {
+ const lhs_elem = try lhs_val.elemValue(pt, elem_idx);
+ const rhs_elem = try rhs_val.elemValue(pt, elem_idx);
+ result_elem.* = (try modRemScalar(sema, block, elem_ty, lhs_elem, rhs_elem, lhs_src, rhs_src, op, elem_idx)).toIntern();
+ }
+
+ const result_val = try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = elem_vals },
+ } });
+ return .fromInterned(result_val);
+ },
+ else => return modRemScalar(sema, block, ty, lhs_val, rhs_val, lhs_src, rhs_src, op, null),
+ }
+}
+fn modRemScalar(
+ sema: *Sema,
+ block: *Block,
+ ty: Type,
+ lhs_val: Value,
+ rhs_val: Value,
+ lhs_src: LazySrcLoc,
+ rhs_src: LazySrcLoc,
+ op: ModRemOp,
+ vec_idx: ?usize,
+) CompileError!Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const is_int = switch (ty.zigTypeTag(zcu)) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
+
+ _ = vec_idx; // TODO: use this in the "use of undefined" error
+
+ const allow_div_zero = !is_int and block.float_mode == .strict;
+ if (allow_div_zero) {
+ if (lhs_val.isUndef(zcu)) return lhs_val;
+ if (rhs_val.isUndef(zcu)) return rhs_val;
+ } else {
+ if (lhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ if (rhs_val.isUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.eqlScalarNum(.zero_comptime_int, zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+
+ if (is_int) {
+ switch (op) {
+ .mod => return intMod(sema, lhs_val, rhs_val, ty),
+ .rem => return intRem(sema, lhs_val, rhs_val, ty),
+ }
+ } else {
+ switch (op) {
+ .mod => return floatMod(sema, lhs_val, rhs_val, ty),
+ .rem => return floatRem(sema, lhs_val, rhs_val, ty),
+ }
+ }
+}
+
+/// If the value overflowed the type, returns a comptime_int instead.
+/// Only supports scalars.
+fn intAdd(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !struct { overflow: bool, val: Value } {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{ .overflow = false, .val = try comptimeIntAdd(sema, lhs, rhs) },
+ else => {
+ const res = try intAddWithOverflowInner(sema, lhs, rhs, ty);
+ return switch (res.overflow_bit.toUnsignedInt(zcu)) {
+ 0 => .{ .overflow = false, .val = res.wrapped_result },
+ 1 => .{ .overflow = true, .val = try comptimeIntAdd(sema, lhs, rhs) },
+ else => unreachable,
+ };
+ },
+ }
+}
+/// Add two integers, returning a `comptime_int` regardless of the input types.
+fn comptimeIntAdd(sema: *Sema, lhs: Value, rhs: Value) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ @max(lhs_bigint.limbs.len, rhs_bigint.limbs.len) + 1,
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.add(lhs_bigint, rhs_bigint);
+ return pt.intValue_big(.comptime_int, result_bigint.toConst());
+}
+fn intAddWithOverflow(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{
+ .overflow_bit = try sema.pt.intValue(.u1, 0),
+ .wrapped_result = try comptimeIntAdd(sema, lhs, rhs),
+ },
+ else => return intAddWithOverflowInner(sema, lhs, rhs, ty),
+ }
+}
+/// Like `intAddWithOverflow`, but asserts that `ty` is not `Type.comptime_int`.
+fn intAddWithOverflowInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ assert(ty.toIntern() != .comptime_int_type);
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
+ const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(info.bits),
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ const overflowed = result_bigint.addWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits);
+ return .{
+ .overflow_bit = try pt.intValue(.u1, @intFromBool(overflowed)),
+ .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
+ };
+}
+fn intAddSat(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(info.bits),
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.addSat(lhs_bigint, rhs_bigint, info.signedness, info.bits);
+ return pt.intValue_big(ty, result_bigint.toConst());
+}
+
+/// If the value overflowed the type, returns a comptime_int instead.
+/// Only supports scalars.
+fn intSub(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !struct { overflow: bool, val: Value } {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{ .overflow = false, .val = try comptimeIntSub(sema, lhs, rhs) },
+ else => {
+ const res = try intSubWithOverflowInner(sema, lhs, rhs, ty);
+ return switch (res.overflow_bit.toUnsignedInt(zcu)) {
+ 0 => .{ .overflow = false, .val = res.wrapped_result },
+ 1 => .{ .overflow = true, .val = try comptimeIntSub(sema, lhs, rhs) },
+ else => unreachable,
+ };
+ },
+ }
+}
+/// Subtract two integers, returning a `comptime_int` regardless of the input types.
+fn comptimeIntSub(sema: *Sema, lhs: Value, rhs: Value) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ @max(lhs_bigint.limbs.len, rhs_bigint.limbs.len) + 1,
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.sub(lhs_bigint, rhs_bigint);
+ return pt.intValue_big(.comptime_int, result_bigint.toConst());
+}
+fn intSubWithOverflow(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{
+ .overflow_bit = try sema.pt.intValue(.u1, 0),
+ .wrapped_result = try comptimeIntSub(sema, lhs, rhs),
+ },
+ else => return intSubWithOverflowInner(sema, lhs, rhs, ty),
+ }
+}
+/// Like `intSubWithOverflow`, but asserts that `ty` is not `Type.comptime_int`.
+fn intSubWithOverflowInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ assert(ty.toIntern() != .comptime_int_type);
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
+ const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(info.bits),
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ const overflowed = result_bigint.subWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits);
+ return .{
+ .overflow_bit = try pt.intValue(.u1, @intFromBool(overflowed)),
+ .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
+ };
+}
+fn intSubSat(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(info.bits),
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.subSat(lhs_bigint, rhs_bigint, info.signedness, info.bits);
+ return pt.intValue_big(ty, result_bigint.toConst());
+}
+
+/// If the value overflowed the type, returns a comptime_int instead.
+/// Only supports scalars.
+fn intMul(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !struct { overflow: bool, val: Value } {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{ .overflow = false, .val = try comptimeIntMul(sema, lhs, rhs) },
+ else => {
+ const res = try intMulWithOverflowInner(sema, lhs, rhs, ty);
+ return switch (res.overflow_bit.toUnsignedInt(zcu)) {
+ 0 => .{ .overflow = false, .val = res.wrapped_result },
+ 1 => .{ .overflow = true, .val = try comptimeIntMul(sema, lhs, rhs) },
+ else => unreachable,
+ };
+ },
+ }
+}
+/// Multiply two integers, returning a `comptime_int` regardless of the input types.
+fn comptimeIntMul(sema: *Sema, lhs: Value, rhs: Value) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len + rhs_bigint.limbs.len,
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ const limbs_buffer = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcMulLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len, 1),
+ );
+ result_bigint.mul(lhs_bigint, rhs_bigint, limbs_buffer, sema.arena);
+ return pt.intValue_big(.comptime_int, result_bigint.toConst());
+}
+fn intMulWithOverflow(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ switch (ty.toIntern()) {
+ .comptime_int_type => return .{
+ .overflow_bit = try sema.pt.intValue(.u1, 0),
+ .wrapped_result = try comptimeIntMul(sema, lhs, rhs),
+ },
+ else => return intMulWithOverflowInner(sema, lhs, rhs, ty),
+ }
+}
+/// Like `intMulWithOverflow`, but asserts that `ty` is not `Type.comptime_int`.
+fn intMulWithOverflowInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value.OverflowArithmeticResult {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
+ const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len + rhs_bigint.limbs.len,
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.mulNoAlias(lhs_bigint, rhs_bigint, sema.arena);
+ const overflowed = !result_bigint.toConst().fitsInTwosComp(info.signedness, info.bits);
+ if (overflowed) result_bigint.truncate(result_bigint.toConst(), info.signedness, info.bits);
+ return .{
+ .overflow_bit = try pt.intValue(.u1, @intFromBool(overflowed)),
+ .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
+ };
+}
+fn intMulSat(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len + rhs_bigint.limbs.len,
+ );
+ var result_bigint: BigIntMutable = .{ .limbs = limbs, .positive = undefined, .len = undefined };
+ result_bigint.mulNoAlias(lhs_bigint, rhs_bigint, sema.arena);
+ result_bigint.saturate(result_bigint.toConst(), info.signedness, info.bits);
+ return pt.intValue_big(ty, result_bigint.toConst());
+}
+fn intDivTrunc(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !struct { overflow: bool, val: Value } {
+ const result = intDivTruncInner(sema, lhs, rhs, ty) catch |err| switch (err) {
+ error.Overflow => {
+ const result = intDivTruncInner(sema, lhs, rhs, .comptime_int) catch |err1| switch (err1) {
+ error.Overflow => unreachable,
+ else => |e| return e,
+ };
+ return .{ .overflow = true, .val = result };
+ },
+ else => |e| return e,
+ };
+ return .{ .overflow = false, .val = result };
+}
+fn intDivTruncInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs_q = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len,
+ );
+ const limbs_r = try sema.arena.alloc(
+ std.math.big.Limb,
+ rhs_bigint.limbs.len,
+ );
+ const limbs_buf = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
+ );
+ var result_q: BigIntMutable = .{ .limbs = limbs_q, .positive = undefined, .len = undefined };
+ var result_r: BigIntMutable = .{ .limbs = limbs_r, .positive = undefined, .len = undefined };
+ result_q.divTrunc(&result_r, lhs_bigint, rhs_bigint, limbs_buf);
+ if (ty.toIntern() != .comptime_int_type) {
+ const info = ty.intInfo(zcu);
+ if (!result_q.toConst().fitsInTwosComp(info.signedness, info.bits)) {
+ return error.Overflow;
+ }
+ }
+ return pt.intValue_big(ty, result_q.toConst());
+}
+fn intDivExact(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !union(enum) {
+ remainder,
+ overflow: Value,
+ success: Value,
+} {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs_q = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len,
+ );
+ const limbs_r = try sema.arena.alloc(
+ std.math.big.Limb,
+ rhs_bigint.limbs.len,
+ );
+ const limbs_buf = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
+ );
+ var result_q: BigIntMutable = .{ .limbs = limbs_q, .positive = undefined, .len = undefined };
+ var result_r: BigIntMutable = .{ .limbs = limbs_r, .positive = undefined, .len = undefined };
+ result_q.divTrunc(&result_r, lhs_bigint, rhs_bigint, limbs_buf);
+ if (!result_r.toConst().eqlZero()) {
+ return .remainder;
+ }
+ if (ty.toIntern() != .comptime_int_type) {
+ const info = ty.intInfo(zcu);
+ if (!result_q.toConst().fitsInTwosComp(info.signedness, info.bits)) {
+ return .{ .overflow = try pt.intValue_big(.comptime_int, result_q.toConst()) };
+ }
+ }
+ return .{ .success = try pt.intValue_big(ty, result_q.toConst()) };
+}
+fn intDivFloor(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !struct { overflow: bool, val: Value } {
+ const result = intDivFloorInner(sema, lhs, rhs, ty) catch |err| switch (err) {
+ error.Overflow => {
+ const result = intDivFloorInner(sema, lhs, rhs, .comptime_int) catch |err1| switch (err1) {
+ error.Overflow => unreachable,
+ else => |e| return e,
+ };
+ return .{ .overflow = true, .val = result };
+ },
+ else => |e| return e,
+ };
+ return .{ .overflow = false, .val = result };
+}
+fn intDivFloorInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs_q = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len,
+ );
+ const limbs_r = try sema.arena.alloc(
+ std.math.big.Limb,
+ rhs_bigint.limbs.len,
+ );
+ const limbs_buf = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
+ );
+ var result_q: BigIntMutable = .{ .limbs = limbs_q, .positive = undefined, .len = undefined };
+ var result_r: BigIntMutable = .{ .limbs = limbs_r, .positive = undefined, .len = undefined };
+ result_q.divFloor(&result_r, lhs_bigint, rhs_bigint, limbs_buf);
+ if (ty.toIntern() != .comptime_int_type) {
+ const info = ty.intInfo(zcu);
+ if (!result_q.toConst().fitsInTwosComp(info.signedness, info.bits)) {
+ return error.Overflow;
+ }
+ }
+ return pt.intValue_big(ty, result_q.toConst());
+}
+fn intMod(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs_q = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len,
+ );
+ const limbs_r = try sema.arena.alloc(
+ std.math.big.Limb,
+ rhs_bigint.limbs.len,
+ );
+ const limbs_buf = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
+ );
+ var result_q: BigIntMutable = .{ .limbs = limbs_q, .positive = undefined, .len = undefined };
+ var result_r: BigIntMutable = .{ .limbs = limbs_r, .positive = undefined, .len = undefined };
+ result_q.divFloor(&result_r, lhs_bigint, rhs_bigint, limbs_buf);
+ return pt.intValue_big(ty, result_r.toConst());
+}
+fn intRem(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ var lhs_space: Value.BigIntSpace = undefined;
+ var rhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
+ const limbs_q = try sema.arena.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len,
+ );
+ const limbs_r = try sema.arena.alloc(
+ std.math.big.Limb,
+ rhs_bigint.limbs.len,
+ );
+ const limbs_buf = try sema.arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
+ );
+ var result_q: BigIntMutable = .{ .limbs = limbs_q, .positive = undefined, .len = undefined };
+ var result_r: BigIntMutable = .{ .limbs = limbs_r, .positive = undefined, .len = undefined };
+ result_q.divTrunc(&result_r, lhs_bigint, rhs_bigint, limbs_buf);
+ return pt.intValue_big(ty, result_r.toConst());
+}
+
+fn floatAdd(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = lhs.toFloat(f16, zcu) + rhs.toFloat(f16, zcu) },
+ 32 => .{ .f32 = lhs.toFloat(f32, zcu) + rhs.toFloat(f32, zcu) },
+ 64 => .{ .f64 = lhs.toFloat(f64, zcu) + rhs.toFloat(f64, zcu) },
+ 80 => .{ .f80 = lhs.toFloat(f80, zcu) + rhs.toFloat(f80, zcu) },
+ 128 => .{ .f128 = lhs.toFloat(f128, zcu) + rhs.toFloat(f128, zcu) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatSub(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = lhs.toFloat(f16, zcu) - rhs.toFloat(f16, zcu) },
+ 32 => .{ .f32 = lhs.toFloat(f32, zcu) - rhs.toFloat(f32, zcu) },
+ 64 => .{ .f64 = lhs.toFloat(f64, zcu) - rhs.toFloat(f64, zcu) },
+ 80 => .{ .f80 = lhs.toFloat(f80, zcu) - rhs.toFloat(f80, zcu) },
+ 128 => .{ .f128 = lhs.toFloat(f128, zcu) - rhs.toFloat(f128, zcu) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatMul(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = lhs.toFloat(f16, zcu) * rhs.toFloat(f16, zcu) },
+ 32 => .{ .f32 = lhs.toFloat(f32, zcu) * rhs.toFloat(f32, zcu) },
+ 64 => .{ .f64 = lhs.toFloat(f64, zcu) * rhs.toFloat(f64, zcu) },
+ 80 => .{ .f80 = lhs.toFloat(f80, zcu) * rhs.toFloat(f80, zcu) },
+ 128 => .{ .f128 = lhs.toFloat(f128, zcu) * rhs.toFloat(f128, zcu) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatDiv(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = lhs.toFloat(f16, zcu) / rhs.toFloat(f16, zcu) },
+ 32 => .{ .f32 = lhs.toFloat(f32, zcu) / rhs.toFloat(f32, zcu) },
+ 64 => .{ .f64 = lhs.toFloat(f64, zcu) / rhs.toFloat(f64, zcu) },
+ 80 => .{ .f80 = lhs.toFloat(f80, zcu) / rhs.toFloat(f80, zcu) },
+ 128 => .{ .f128 = lhs.toFloat(f128, zcu) / rhs.toFloat(f128, zcu) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatDivTrunc(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = @divTrunc(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
+ 32 => .{ .f32 = @divTrunc(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
+ 64 => .{ .f64 = @divTrunc(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
+ 80 => .{ .f80 = @divTrunc(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
+ 128 => .{ .f128 = @divTrunc(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatDivFloor(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = @divFloor(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
+ 32 => .{ .f32 = @divFloor(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
+ 64 => .{ .f64 = @divFloor(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
+ 80 => .{ .f80 = @divFloor(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
+ 128 => .{ .f128 = @divFloor(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatDivIsExact(sema: *Sema, lhs: Value, rhs: Value, ty: Type) bool {
+ const zcu = sema.pt.zcu;
+ const target = zcu.getTarget();
+ return switch (ty.floatBits(target)) {
+ 16 => @mod(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) == 0,
+ 32 => @mod(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) == 0,
+ 64 => @mod(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) == 0,
+ 80 => @mod(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) == 0,
+ 128 => @mod(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) == 0,
+ else => unreachable,
+ };
+}
+fn floatNeg(sema: *Sema, val: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = -val.toFloat(f16, zcu) },
+ 32 => .{ .f32 = -val.toFloat(f32, zcu) },
+ 64 => .{ .f64 = -val.toFloat(f64, zcu) },
+ 80 => .{ .f80 = -val.toFloat(f80, zcu) },
+ 128 => .{ .f128 = -val.toFloat(f128, zcu) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatMod(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = @mod(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
+ 32 => .{ .f32 = @mod(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
+ 64 => .{ .f64 = @mod(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
+ 80 => .{ .f80 = @mod(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
+ 128 => .{ .f128 = @mod(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+fn floatRem(sema: *Sema, lhs: Value, rhs: Value, ty: Type) !Value {
+ const pt = sema.pt;
+ const zcu = pt.zcu;
+ const target = zcu.getTarget();
+ const storage: InternPool.Key.Float.Storage = switch (ty.floatBits(target)) {
+ 16 => .{ .f16 = @rem(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
+ 32 => .{ .f32 = @rem(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
+ 64 => .{ .f64 = @rem(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
+ 80 => .{ .f80 = @rem(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
+ 128 => .{ .f128 = @rem(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
+ else => unreachable,
+ };
+ return .fromInterned(try pt.intern(.{ .float = .{
+ .ty = ty.toIntern(),
+ .storage = storage,
+ } }));
+}
+
+const Sema = @import("../Sema.zig");
+const Block = Sema.Block;
+const InternPool = @import("../InternPool.zig");
+const Type = @import("../Type.zig");
+const Value = @import("../Value.zig");
+const Zcu = @import("../Zcu.zig");
+const CompileError = Zcu.CompileError;
+const LazySrcLoc = Zcu.LazySrcLoc;
+
+const std = @import("std");
+const assert = std.debug.assert;
+const Allocator = std.mem.Allocator;
+const BigIntMutable = std.math.big.int.Mutable;
src/Sema.zig
@@ -188,6 +188,7 @@ const AnalUnit = InternPool.AnalUnit;
const ComptimeAllocIndex = InternPool.ComptimeAllocIndex;
const Cache = std.Build.Cache;
const LowerZon = @import("Sema/LowerZon.zig");
+const arith = @import("Sema/arith.zig");
pub const default_branch_quota = 1000;
pub const default_reference_trace_len = 2;
@@ -2325,11 +2326,11 @@ fn failWithNeededComptime(sema: *Sema, block: *Block, src: LazySrcLoc, reason: ?
return sema.failWithOwnedErrorMsg(fail_block, msg);
}
-fn failWithUseOfUndef(sema: *Sema, block: *Block, src: LazySrcLoc) CompileError {
+pub fn failWithUseOfUndef(sema: *Sema, block: *Block, src: LazySrcLoc) CompileError {
return sema.fail(block, src, "use of undefined value here causes undefined behavior", .{});
}
-fn failWithDivideByZero(sema: *Sema, block: *Block, src: LazySrcLoc) CompileError {
+pub fn failWithDivideByZero(sema: *Sema, block: *Block, src: LazySrcLoc) CompileError {
return sema.fail(block, src, "division by zero here causes undefined behavior", .{});
}
@@ -2391,22 +2392,15 @@ fn failWithErrorSetCodeMissing(
});
}
-fn failWithIntegerOverflow(sema: *Sema, block: *Block, src: LazySrcLoc, int_ty: Type, val: Value, vector_index: usize) CompileError {
+pub fn failWithIntegerOverflow(sema: *Sema, block: *Block, src: LazySrcLoc, int_ty: Type, val: Value, vector_index: ?usize) CompileError {
const pt = sema.pt;
- const zcu = pt.zcu;
- if (int_ty.zigTypeTag(zcu) == .vector) {
- const msg = msg: {
- const msg = try sema.errMsg(src, "overflow of vector type '{}' with value '{}'", .{
- int_ty.fmt(pt), val.fmtValueSema(pt, sema),
- });
- errdefer msg.destroy(sema.gpa);
- try sema.errNote(src, msg, "when computing vector element at index '{d}'", .{vector_index});
- break :msg msg;
- };
- return sema.failWithOwnedErrorMsg(block, msg);
- }
- return sema.fail(block, src, "overflow of integer type '{}' with value '{}'", .{
- int_ty.fmt(pt), val.fmtValueSema(pt, sema),
+ return sema.failWithOwnedErrorMsg(block, msg: {
+ const msg = try sema.errMsg(src, "overflow of integer type '{}' with value '{}'", .{
+ int_ty.fmt(pt), val.fmtValueSema(pt, sema),
+ });
+ errdefer msg.destroy(sema.gpa);
+ if (vector_index) |i| try sema.errNote(src, msg, "when computing vector element at index '{d}'", .{i});
+ break :msg msg;
});
}
@@ -10327,7 +10321,9 @@ fn intCast(
.storage = .{ .repeated_elem = one_scalar.toIntern() },
} })) else one_scalar;
const range_minus_one = try dest_max_val.shl(one, unsigned_operand_ty, sema.arena, pt);
- break :range_val try sema.intAdd(range_minus_one, one, unsigned_operand_ty, undefined);
+ const result = try arith.addWithOverflow(sema, unsigned_operand_ty, range_minus_one, one);
+ assert(result.overflow_bit.compareAllWithZero(.eq, zcu));
+ break :range_val result.wrapped_result;
} else try pt.getCoerced(dest_max_val, unsigned_operand_ty);
const dest_range = Air.internedToRef(dest_range_val.toIntern());
@@ -12723,10 +12719,9 @@ fn analyzeSwitchRuntimeBlock(
while (item.compareScalar(.lte, item_last, operand_ty, zcu)) : ({
// Previous validation has resolved any possible lazy values.
- item = sema.intAddScalar(item, try pt.intValue(operand_ty, 1), operand_ty) catch |err| switch (err) {
- error.Overflow => unreachable,
- else => |e| return e,
- };
+ const result = try arith.incrementDefinedInt(sema, operand_ty, item);
+ assert(!result.overflow);
+ item = result.val;
}) {
cases_len += 1;
@@ -14183,8 +14178,8 @@ fn zirShl(
// TODO coerce rhs if air_tag is not shl_sat
const rhs_is_comptime_int = try sema.checkIntType(block, rhs_src, scalar_rhs_ty);
- const maybe_lhs_val = try sema.resolveValueIntable(lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(rhs);
if (maybe_rhs_val) |rhs_val| {
if (rhs_val.isUndef(zcu)) {
@@ -14359,8 +14354,8 @@ fn zirShr(
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
const scalar_ty = lhs_ty.scalarType(zcu);
- const maybe_lhs_val = try sema.resolveValueIntable(lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(rhs);
const runtime_src = if (maybe_rhs_val) |rhs_val| rs: {
if (rhs_val.isUndef(zcu)) {
@@ -14511,8 +14506,8 @@ fn zirBitwise(
const runtime_src = runtime: {
// TODO: ask the linker what kind of relocations are available, and
// in some cases emit a Value that means "this decl's address AND'd with this operand".
- if (try sema.resolveValueIntable(casted_lhs)) |lhs_val| {
- if (try sema.resolveValueIntable(casted_rhs)) |rhs_val| {
+ if (try sema.resolveValueResolveLazy(casted_lhs)) |lhs_val| {
+ if (try sema.resolveValueResolveLazy(casted_rhs)) |rhs_val| {
const result_val = switch (air_tag) {
.bit_and => try lhs_val.bitwiseAnd(rhs_val, resolved_type, sema.arena, pt),
.bit_or => try lhs_val.bitwiseOr(rhs_val, resolved_type, sema.arena, pt),
@@ -15289,8 +15284,8 @@ fn zirNegate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
if (rhs_scalar_ty.isAnyFloat()) {
// We handle float negation here to ensure negative zero is represented in the bits.
if (try sema.resolveValue(rhs)) |rhs_val| {
- if (rhs_val.isUndef(zcu)) return pt.undefRef(rhs_ty);
- return Air.internedToRef((try rhs_val.floatNeg(rhs_ty, sema.arena, pt)).toIntern());
+ const result = try arith.negateFloat(sema, rhs_ty, rhs_val);
+ return Air.internedToRef(result.toIntern());
}
try sema.requireRuntimeBlock(block, src, null);
return block.addUnOp(if (block.float_mode == .optimized) .neg_optimized else .neg, rhs);
@@ -15359,24 +15354,22 @@ fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
const casted_rhs = try sema.coerce(block, resolved_type, rhs, rhs_src);
const lhs_scalar_ty = lhs_ty.scalarType(zcu);
- const rhs_scalar_ty = rhs_ty.scalarType(zcu);
const scalar_tag = resolved_type.scalarType(zcu).zigTypeTag(zcu);
const is_int = scalar_tag == .int or scalar_tag == .comptime_int;
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .div);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
if ((lhs_ty.zigTypeTag(zcu) == .comptime_float and rhs_ty.zigTypeTag(zcu) == .comptime_int) or
(lhs_ty.zigTypeTag(zcu) == .comptime_int and rhs_ty.zigTypeTag(zcu) == .comptime_float))
@@ -15399,92 +15392,38 @@ fn zirDiv(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
// TODO: emit compile error when .div is used on integers and there would be an
// ambiguous result between div_floor and div_trunc.
- // For integers:
- // If the lhs is zero, then zero is returned regardless of rhs.
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined:
- // * if lhs type is signed:
- // * if rhs is comptime-known and not -1, result is undefined
- // * if rhs is -1 or runtime-known, compile error because there is a
- // possible value (-min_int / -1) for which division would be
- // illegal behavior.
- // * if lhs type is unsigned, undef is returned regardless of rhs.
+ // The rules here are like those in `analyzeArithmetic`:
//
- // For floats:
- // If the rhs is zero:
- // * comptime_float: compile error for division by zero.
- // * other float type:
- // * if the lhs is zero: QNaN
- // * otherwise: +Inf or -Inf depending on lhs sign
- // If the rhs is undefined:
- // * comptime_float: compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // * other float type: result is undefined
- // If the lhs is undefined, result is undefined.
- switch (scalar_tag) {
- .int, .comptime_int, .comptime_float => {
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(resolved_type.scalarType(zcu), 0.0),
- .comptime_int, .int => try pt.intValue(resolved_type.scalarType(zcu), 0),
- else => unreachable,
- };
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- // TODO: if the RHS is one, return the LHS directly
- }
- },
- else => {},
- }
+ // * If both operands are comptime-known, call the corresponding function in `arith`.
+ // Inputs which would be IB at runtime are compile errors.
+ //
+ // * Otherwise, if one operand is comptime-known `undefined`, we either trigger a compile error
+ // or return `undefined`, depending on whether this operator can trigger IB.
+ //
+ // * No other comptime operand determines a comptime result, so remaining cases are runtime ops.
- const runtime_src = rs: {
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (lhs_scalar_ty.isSignedInt(zcu) and rhs_scalar_ty.isSignedInt(zcu)) {
- if (maybe_rhs_val) |rhs_val| {
- if (try sema.compareAll(rhs_val, .neq, try pt.intValue(resolved_type, -1), resolved_type)) {
- return pt.undefRef(resolved_type);
- }
- }
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- return pt.undefRef(resolved_type);
- }
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- var overflow_idx: ?usize = null;
- const res = try lhs_val.intDiv(rhs_val, resolved_type, &overflow_idx, sema.arena, pt);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, res, vec_idx);
- }
- return Air.internedToRef(res.toIntern());
- } else {
- return Air.internedToRef((try lhs_val.floatDiv(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else {
- break :rs rhs_src;
- }
+ if (maybe_lhs_val) |lhs_val| {
+ if (maybe_rhs_val) |rhs_val| {
+ const result = try arith.div(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src, .div);
+ return Air.internedToRef(result.toIntern());
+ }
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
} else {
- break :rs lhs_src;
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
}
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivIntOverflowSafety(block, src, resolved_type, lhs_scalar_ty, maybe_lhs_val, maybe_rhs_val, casted_lhs, casted_rhs, is_int);
@@ -15525,9 +15464,8 @@ fn zirDivExact(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
@@ -15540,75 +15478,21 @@ fn zirDivExact(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .div_exact);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // If the lhs is zero, then zero is returned regardless of rhs.
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, compile error because there is a possible
- // value for which the division would result in a remainder.
- // TODO: emit runtime safety for if there is a remainder
- // TODO: emit runtime safety for division by zero
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, compile error because there is a possible
- // value for which the division would result in a remainder.
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- } else {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(resolved_type.scalarType(zcu), 0.0),
- .comptime_int, .int => try pt.intValue(resolved_type.scalarType(zcu), 0),
- else => unreachable,
- };
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- }
- }
+ // Because `@divExact` can trigger Illegal Behavior, undefined operands trigger Illegal Behavior.
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- // TODO: if the RHS is one, return the LHS directly
+ const result = try arith.div(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src, .div_exact);
+ return Air.internedToRef(result.toIntern());
}
- if (maybe_lhs_val) |lhs_val| {
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- const modulus_val = try lhs_val.intMod(rhs_val, resolved_type, sema.arena, pt);
- if (!(modulus_val.compareAllWithZero(.eq, zcu))) {
- return sema.fail(block, src, "exact division produced remainder", .{});
- }
- var overflow_idx: ?usize = null;
- const res = try lhs_val.intDiv(rhs_val, resolved_type, &overflow_idx, sema.arena, pt);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, res, vec_idx);
- }
- return Air.internedToRef(res.toIntern());
- } else {
- const modulus_val = try lhs_val.floatMod(rhs_val, resolved_type, sema.arena, pt);
- if (!(modulus_val.compareAllWithZero(.eq, zcu))) {
- return sema.fail(block, src, "exact division produced remainder", .{});
- }
- return Air.internedToRef((try lhs_val.floatDiv(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs rhs_src;
- } else break :rs lhs_src;
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
// Depending on whether safety is enabled, we will have a slightly different strategy
// here. The `div_exact` AIR instruction causes undefined behavior if a remainder
@@ -15691,91 +15575,45 @@ fn zirDivFloor(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
const casted_rhs = try sema.coerce(block, resolved_type, rhs, rhs_src);
const lhs_scalar_ty = lhs_ty.scalarType(zcu);
- const rhs_scalar_ty = rhs_ty.scalarType(zcu);
const scalar_tag = resolved_type.scalarType(zcu).zigTypeTag(zcu);
const is_int = scalar_tag == .int or scalar_tag == .comptime_int;
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .div_floor);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // If the lhs is zero, then zero is returned regardless of rhs.
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined:
- // * if lhs type is signed:
- // * if rhs is comptime-known and not -1, result is undefined
- // * if rhs is -1 or runtime-known, compile error because there is a
- // possible value (-min_int / -1) for which division would be
- // illegal behavior.
- // * if lhs type is unsigned, undef is returned regardless of rhs.
- // TODO: emit runtime safety for division by zero
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, result is undefined.
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(resolved_type.scalarType(zcu), 0.0),
- .comptime_int, .int => try pt.intValue(resolved_type.scalarType(zcu), 0),
- else => unreachable,
- };
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- }
- }
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- // TODO: if the RHS is one, return the LHS directly
+ const result = try arith.div(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src, .div_floor);
+ return Air.internedToRef(result.toIntern());
}
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (lhs_scalar_ty.isSignedInt(zcu) and rhs_scalar_ty.isSignedInt(zcu)) {
- if (maybe_rhs_val) |rhs_val| {
- if (try sema.compareAll(rhs_val, .neq, try pt.intValue(resolved_type, -1), resolved_type)) {
- return pt.undefRef(resolved_type);
- }
- }
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- return pt.undefRef(resolved_type);
- }
-
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- return Air.internedToRef((try lhs_val.intDivFloor(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- } else {
- return Air.internedToRef((try lhs_val.floatDivFloor(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs rhs_src;
- } else break :rs lhs_src;
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivIntOverflowSafety(block, src, resolved_type, lhs_scalar_ty, maybe_lhs_val, maybe_rhs_val, casted_lhs, casted_rhs, is_int);
@@ -15802,95 +15640,45 @@ fn zirDivTrunc(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
const casted_rhs = try sema.coerce(block, resolved_type, rhs, rhs_src);
const lhs_scalar_ty = lhs_ty.scalarType(zcu);
- const rhs_scalar_ty = rhs_ty.scalarType(zcu);
const scalar_tag = resolved_type.scalarType(zcu).zigTypeTag(zcu);
const is_int = scalar_tag == .int or scalar_tag == .comptime_int;
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .div_trunc);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // If the lhs is zero, then zero is returned regardless of rhs.
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined:
- // * if lhs type is signed:
- // * if rhs is comptime-known and not -1, result is undefined
- // * if rhs is -1 or runtime-known, compile error because there is a
- // possible value (-min_int / -1) for which division would be
- // illegal behavior.
- // * if lhs type is unsigned, undef is returned regardless of rhs.
- // TODO: emit runtime safety for division by zero
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, result is undefined.
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(resolved_type.scalarType(zcu), 0.0),
- .comptime_int, .int => try pt.intValue(resolved_type.scalarType(zcu), 0),
- else => unreachable,
- };
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- }
- }
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
+ const result = try arith.div(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src, .div_trunc);
+ return Air.internedToRef(result.toIntern());
}
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (lhs_scalar_ty.isSignedInt(zcu) and rhs_scalar_ty.isSignedInt(zcu)) {
- if (maybe_rhs_val) |rhs_val| {
- if (try sema.compareAll(rhs_val, .neq, try pt.intValue(resolved_type, -1), resolved_type)) {
- return pt.undefRef(resolved_type);
- }
- }
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- return pt.undefRef(resolved_type);
- }
-
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- var overflow_idx: ?usize = null;
- const res = try lhs_val.intDiv(rhs_val, resolved_type, &overflow_idx, sema.arena, pt);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, res, vec_idx);
- }
- return Air.internedToRef(res.toIntern());
- } else {
- return Air.internedToRef((try lhs_val.floatDivTrunc(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs rhs_src;
- } else break :rs lhs_src;
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivIntOverflowSafety(block, src, resolved_type, lhs_scalar_ty, maybe_lhs_val, maybe_rhs_val, casted_lhs, casted_rhs, is_int);
@@ -15939,46 +15727,81 @@ fn addDivIntOverflowSafety(
if (try rhs_val.compareAll(.neq, neg_one, resolved_type, pt)) return;
}
- var ok: Air.Inst.Ref = .none;
if (resolved_type.zigTypeTag(zcu) == .vector) {
- if (maybe_lhs_val == null) {
+ const vec_len = resolved_type.vectorLen(zcu);
+
+ // This is a bool vector whose elements are true if the LHS element does NOT equal `min_int`.
+ const lhs_ok: Air.Inst.Ref = if (maybe_lhs_val) |lhs_val| ok: {
+ // The operand is comptime-known; intern a constant bool vector for the potentially unsafe elements.
+ const min_int_scalar = try min_int.elemValue(pt, 0);
+ const elems_ok = try sema.arena.alloc(InternPool.Index, vec_len);
+ for (elems_ok, 0..) |*elem_ok, elem_idx| {
+ const elem_val = try lhs_val.elemValue(pt, elem_idx);
+ elem_ok.* = if (elem_val.eqlScalarNum(min_int_scalar, zcu)) .bool_false else .bool_true;
+ }
+ break :ok Air.internedToRef(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{
+ .len = vec_len,
+ .child = .bool_type,
+ })).toIntern(),
+ .storage = .{ .elems = elems_ok },
+ } }));
+ } else ok: {
+ // The operand isn't comptime-known; add a runtime comparison.
const min_int_ref = Air.internedToRef(min_int.toIntern());
- ok = try block.addCmpVector(casted_lhs, min_int_ref, .neq);
- }
- if (maybe_rhs_val == null) {
+ break :ok try block.addCmpVector(casted_lhs, min_int_ref, .neq);
+ };
+
+ // This is a bool vector whose elements are true if the RHS element does NOT equal -1.
+ const rhs_ok: Air.Inst.Ref = if (maybe_rhs_val) |rhs_val| ok: {
+ // The operand is comptime-known; intern a constant bool vector for the potentially unsafe elements.
+ const elems_ok = try sema.arena.alloc(InternPool.Index, vec_len);
+ for (elems_ok, 0..) |*elem_ok, elem_idx| {
+ const elem_val = try rhs_val.elemValue(pt, elem_idx);
+ elem_ok.* = if (elem_val.eqlScalarNum(neg_one_scalar, zcu)) .bool_false else .bool_true;
+ }
+ break :ok Air.internedToRef(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{
+ .len = vec_len,
+ .child = .bool_type,
+ })).toIntern(),
+ .storage = .{ .elems = elems_ok },
+ } }));
+ } else ok: {
+ // The operand isn't comptime-known; add a runtime comparison.
const neg_one_ref = Air.internedToRef(neg_one.toIntern());
- const rhs_ok = try block.addCmpVector(casted_rhs, neg_one_ref, .neq);
- if (ok == .none) {
- ok = rhs_ok;
- } else {
- ok = try block.addBinOp(.bool_or, ok, rhs_ok);
- }
- }
- assert(ok != .none);
- ok = try block.addInst(.{
+ break :ok try block.addCmpVector(casted_rhs, neg_one_ref, .neq);
+ };
+
+ const ok = try block.addInst(.{
.tag = .reduce,
.data = .{ .reduce = .{
- .operand = ok,
+ .operand = try block.addBinOp(.bool_or, lhs_ok, rhs_ok),
.operation = .And,
} },
});
+ try sema.addSafetyCheck(block, src, ok, .integer_overflow);
} else {
- if (maybe_lhs_val == null) {
+ const lhs_ok: Air.Inst.Ref = if (maybe_lhs_val == null) ok: {
const min_int_ref = Air.internedToRef(min_int.toIntern());
- ok = try block.addBinOp(.cmp_neq, casted_lhs, min_int_ref);
- }
- if (maybe_rhs_val == null) {
+ break :ok try block.addBinOp(.cmp_neq, casted_lhs, min_int_ref);
+ } else .none; // means false
+ const rhs_ok: Air.Inst.Ref = if (maybe_rhs_val == null) ok: {
const neg_one_ref = Air.internedToRef(neg_one.toIntern());
- const rhs_ok = try block.addBinOp(.cmp_neq, casted_rhs, neg_one_ref);
- if (ok == .none) {
- ok = rhs_ok;
- } else {
- ok = try block.addBinOp(.bool_or, ok, rhs_ok);
- }
- }
- assert(ok != .none);
+ break :ok try block.addBinOp(.cmp_neq, casted_rhs, neg_one_ref);
+ } else .none; // means false
+
+ const ok = if (lhs_ok != .none and rhs_ok != .none)
+ try block.addBinOp(.bool_or, lhs_ok, rhs_ok)
+ else if (lhs_ok != .none)
+ lhs_ok
+ else if (rhs_ok != .none)
+ rhs_ok
+ else
+ unreachable;
+
+ try sema.addSafetyCheck(block, src, ok, .integer_overflow);
}
- try sema.addSafetyCheck(block, src, ok, .integer_overflow);
}
fn addDivByZeroSafety(
@@ -16046,13 +15869,10 @@ fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
- const is_vector = resolved_type.zigTypeTag(zcu) == .vector;
-
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
const casted_rhs = try sema.coerce(block, resolved_type, rhs, rhs_src);
@@ -16064,96 +15884,66 @@ fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .mod_rem);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // Either operand being undef is a compile error because there exists
- // a possible value (TODO what is it?) that would invoke illegal behavior.
- // TODO: can lhs undef be handled better?
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, result is undefined.
- //
- // For either one: if the result would be different between @mod and @rem,
- // then emit a compile error saying you have to pick one.
- if (is_int) {
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, lhs_src);
- }
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(resolved_type.scalarType(zcu), 0.0),
- .comptime_int, .int => try pt.intValue(resolved_type.scalarType(zcu), 0),
- else => unreachable,
- };
- const zero_val = if (is_vector) Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = resolved_type.toIntern(),
- .storage = .{ .repeated_elem = scalar_zero.toIntern() },
- } })) else scalar_zero;
- return Air.internedToRef(zero_val.toIntern());
- }
- } else if (lhs_scalar_ty.isSignedInt(zcu)) {
- return sema.failWithModRemNegative(block, lhs_src, lhs_ty, rhs_ty);
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.gte, pt))) {
- return sema.failWithModRemNegative(block, rhs_src, lhs_ty, rhs_ty);
- }
- if (maybe_lhs_val) |lhs_val| {
- const rem_result = try sema.intRem(resolved_type, lhs_val, rhs_val);
- // If this answer could possibly be different by doing `intMod`,
- // we must emit a compile error. Otherwise, it's OK.
- if (!(try lhs_val.compareAllWithZeroSema(.gte, pt)) and
- !(try rem_result.compareAllWithZeroSema(.eq, pt)))
- {
- return sema.failWithModRemNegative(block, lhs_src, lhs_ty, rhs_ty);
- }
- return Air.internedToRef(rem_result.toIntern());
- }
- break :rs lhs_src;
- } else if (rhs_scalar_ty.isSignedInt(zcu)) {
- return sema.failWithModRemNegative(block, rhs_src, lhs_ty, rhs_ty);
- } else {
- break :rs rhs_src;
- }
- }
- // float operands
+ const lhs_maybe_negative = a: {
+ if (lhs_scalar_ty.isUnsignedInt(zcu)) break :a false;
+ const lhs_val = maybe_lhs_val orelse break :a true;
+ if (lhs_val.compareAllWithZero(.gte, zcu)) break :a false;
+ break :a true;
+ };
+ const rhs_maybe_negative = a: {
+ if (rhs_scalar_ty.isUnsignedInt(zcu)) break :a false;
+ const rhs_val = maybe_rhs_val orelse break :a true;
+ if (rhs_val.compareAllWithZero(.gte, zcu)) break :a false;
+ break :a true;
+ };
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.gte, pt))) {
- return sema.failWithModRemNegative(block, rhs_src, lhs_ty, rhs_ty);
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu) or !(try lhs_val.compareAllWithZeroSema(.gte, pt))) {
- return sema.failWithModRemNegative(block, lhs_src, lhs_ty, rhs_ty);
+ const result = try arith.modRem(sema, block, resolved_type, lhs_val, rhs_val, lhs_src, rhs_src, .rem);
+ if (lhs_maybe_negative or rhs_maybe_negative) {
+ if (!result.compareAllWithZero(.eq, zcu)) {
+ // Non-zero result means ambiguity between mod and rem
+ return sema.failWithModRemNegative(block, src: {
+ if (lhs_maybe_negative) break :src lhs_src;
+ if (rhs_maybe_negative) break :src rhs_src;
+ unreachable;
+ }, lhs_ty, rhs_ty);
}
- return Air.internedToRef((try lhs_val.floatRem(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- } else {
- return sema.failWithModRemNegative(block, lhs_src, lhs_ty, rhs_ty);
}
- } else {
- return sema.failWithModRemNegative(block, rhs_src, lhs_ty, rhs_ty);
+ return Air.internedToRef(result.toIntern());
}
- };
+ }
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ // Result not comptime-known, so floats and signed integers are illegal due to mod/rem ambiguity
+ if (lhs_maybe_negative or rhs_maybe_negative) {
+ return sema.failWithModRemNegative(block, src: {
+ if (lhs_maybe_negative) break :src lhs_src;
+ if (rhs_maybe_negative) break :src rhs_src;
+ unreachable;
+ }, lhs_ty, rhs_ty);
+ }
+
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
+
+ if (maybe_lhs_val) |lhs_val| {
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivByZeroSafety(block, src, resolved_type, maybe_rhs_val, casted_rhs, is_int);
@@ -16163,58 +15953,6 @@ fn zirModRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
return block.addBinOp(air_tag, casted_lhs, casted_rhs);
}
-fn intRem(
- sema: *Sema,
- ty: Type,
- lhs: Value,
- rhs: Value,
-) CompileError!Value {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const result_data = try sema.arena.alloc(InternPool.Index, ty.vectorLen(zcu));
- const scalar_ty = ty.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try sema.intRemScalar(lhs_elem, rhs_elem, scalar_ty)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return sema.intRemScalar(lhs, rhs, ty);
-}
-
-fn intRemScalar(sema: *Sema, lhs: Value, rhs: Value, scalar_ty: Type) CompileError!Value {
- const pt = sema.pt;
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
- const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
- const limbs_q = try sema.arena.alloc(
- math.big.Limb,
- lhs_bigint.limbs.len,
- );
- const limbs_r = try sema.arena.alloc(
- math.big.Limb,
- // TODO: consider reworking Sema to re-use Values rather than
- // always producing new Value objects.
- rhs_bigint.limbs.len,
- );
- const limbs_buffer = try sema.arena.alloc(
- math.big.Limb,
- math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
- );
- var result_q = math.big.int.Mutable{ .limbs = limbs_q, .positive = undefined, .len = undefined };
- var result_r = math.big.int.Mutable{ .limbs = limbs_r, .positive = undefined, .len = undefined };
- result_q.divTrunc(&result_r, lhs_bigint, rhs_bigint, limbs_buffer);
- return pt.intValue_big(scalar_ty, result_r.toConst());
-}
-
fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Inst.Ref {
const pt = sema.pt;
const zcu = pt.zcu;
@@ -16232,9 +15970,8 @@ fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
@@ -16246,62 +15983,31 @@ fn zirMod(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .mod);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // Either operand being undef is a compile error because there exists
- // a possible value (TODO what is it?) that would invoke illegal behavior.
- // TODO: can lhs zero be handled better?
- // TODO: can lhs undef be handled better?
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, result is undefined.
- if (is_int) {
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, lhs_src);
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- if (maybe_lhs_val) |lhs_val| {
- return Air.internedToRef((try lhs_val.intMod(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- break :rs lhs_src;
- } else {
- break :rs rhs_src;
- }
- }
- // float operands
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
+ const result = try arith.modRem(sema, block, resolved_type, lhs_val, rhs_val, lhs_src, rhs_src, .mod);
+ return Air.internedToRef(result.toIntern());
}
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (maybe_rhs_val) |rhs_val| {
- return Air.internedToRef((try lhs_val.floatMod(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- } else break :rs rhs_src;
- } else break :rs lhs_src;
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivByZeroSafety(block, src, resolved_type, maybe_rhs_val, casted_rhs, is_int);
@@ -16328,9 +16034,8 @@ fn zirRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
try sema.checkVectorizableBinaryOperands(block, src, lhs_ty, rhs_ty, lhs_src, rhs_src);
try sema.checkInvalidPtrIntArithmetic(block, src, lhs_ty);
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
@@ -16342,62 +16047,31 @@ fn zirRem(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.Ins
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, .rem);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- const runtime_src = rs: {
- // For integers:
- // Either operand being undef is a compile error because there exists
- // a possible value (TODO what is it?) that would invoke illegal behavior.
- // TODO: can lhs zero be handled better?
- // TODO: can lhs undef be handled better?
- //
- // For floats:
- // If the rhs is zero, compile error for division by zero.
- // If the rhs is undefined, compile error because there is a possible
- // value (zero) for which the division would be illegal behavior.
- // If the lhs is undefined, result is undefined.
- if (is_int) {
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, lhs_src);
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
- if (maybe_lhs_val) |lhs_val| {
- return Air.internedToRef((try sema.intRem(resolved_type, lhs_val, rhs_val)).toIntern());
- }
- break :rs lhs_src;
- } else {
- break :rs rhs_src;
- }
- }
- // float operands
+ const allow_div_zero = !is_int and
+ resolved_type.toIntern() != .comptime_float_type and
+ block.float_mode == .strict;
+
+ if (maybe_lhs_val) |lhs_val| {
if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return sema.failWithUseOfUndef(block, rhs_src);
- }
- if (!(try rhs_val.compareAllWithZeroSema(.neq, pt))) {
- return sema.failWithDivideByZero(block, rhs_src);
- }
+ const result = try arith.modRem(sema, block, resolved_type, lhs_val, rhs_val, lhs_src, rhs_src, .rem);
+ return Air.internedToRef(result.toIntern());
}
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (maybe_rhs_val) |rhs_val| {
- return Air.internedToRef((try lhs_val.floatRem(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- } else break :rs rhs_src;
- } else break :rs lhs_src;
- };
-
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (allow_div_zero) {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ } else if (maybe_rhs_val) |rhs_val| {
+ if (allow_div_zero) {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ } else {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ if (rhs_val.anyScalarIsZero(zcu)) return sema.failWithDivideByZero(block, rhs_src);
+ }
+ }
if (block.wantSafety()) {
try sema.addDivByZeroSafety(block, src, resolved_type, maybe_rhs_val, casted_rhs, is_int);
@@ -16486,7 +16160,7 @@ fn zirOverflowArithmetic(
break :result .{ .overflow_bit = Value.undef, .wrapped = Value.undef };
}
- const result = try sema.intAddWithOverflow(lhs_val, rhs_val, dest_ty);
+ const result = try arith.addWithOverflow(sema, dest_ty, lhs_val, rhs_val);
break :result .{ .overflow_bit = result.overflow_bit, .wrapped = result.wrapped_result };
}
}
@@ -16504,7 +16178,7 @@ fn zirOverflowArithmetic(
break :result .{ .overflow_bit = Value.undef, .wrapped = Value.undef };
}
- const result = try sema.intSubWithOverflow(lhs_val, rhs_val, dest_ty);
+ const result = try arith.subWithOverflow(sema, dest_ty, lhs_val, rhs_val);
break :result .{ .overflow_bit = result.overflow_bit, .wrapped = result.wrapped_result };
}
}
@@ -16540,7 +16214,7 @@ fn zirOverflowArithmetic(
break :result .{ .overflow_bit = Value.undef, .wrapped = Value.undef };
}
- const result = try lhs_val.intMulWithOverflow(rhs_val, dest_ty, sema.arena, pt);
+ const result = try arith.mulWithOverflow(sema, dest_ty, lhs_val, rhs_val);
break :result .{ .overflow_bit = result.overflow_bit, .wrapped = result.wrapped_result };
}
}
@@ -16741,9 +16415,8 @@ fn analyzeArithmetic(
}
}
- const instructions = &[_]Air.Inst.Ref{ lhs, rhs };
- const resolved_type = try sema.resolvePeerTypes(block, src, instructions, .{
- .override = &[_]?LazySrcLoc{ lhs_src, rhs_src },
+ const resolved_type = try sema.resolvePeerTypes(block, src, &.{ lhs, rhs }, .{
+ .override = &.{ lhs_src, rhs_src },
});
const casted_lhs = try sema.coerce(block, resolved_type, lhs, lhs_src);
@@ -16752,407 +16425,74 @@ fn analyzeArithmetic(
const scalar_type = resolved_type.scalarType(zcu);
const scalar_tag = scalar_type.zigTypeTag(zcu);
- const is_int = scalar_tag == .int or scalar_tag == .comptime_int;
-
try sema.checkArithmeticOp(block, src, scalar_tag, lhs_zig_ty_tag, rhs_zig_ty_tag, zir_tag);
- const maybe_lhs_val = try sema.resolveValueIntable(casted_lhs);
- const maybe_rhs_val = try sema.resolveValueIntable(casted_rhs);
- const runtime_src: LazySrcLoc, const air_tag: Air.Inst.Tag, const air_tag_safe: Air.Inst.Tag = rs: {
- switch (zir_tag) {
- .add, .add_unsafe => {
- // For integers:intAddSat
- // If either of the operands are zero, then the other operand is
- // returned, even if it is undefined.
- // If either of the operands are undefined, it's a compile error
- // because there is a possible value for which the addition would
- // overflow (max_int), causing illegal behavior.
- // For floats: either operand being undef makes the result undef.
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu) and (try lhs_val.compareAllWithZeroSema(.eq, pt))) {
- return casted_rhs;
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, rhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- }
- const air_tag: Air.Inst.Tag = if (block.float_mode == .optimized) .add_optimized else .add;
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, lhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- var overflow_idx: ?usize = null;
- const sum = try sema.intAdd(lhs_val, rhs_val, resolved_type, &overflow_idx);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, sum, vec_idx);
- }
- return Air.internedToRef(sum.toIntern());
- } else {
- return Air.internedToRef((try Value.floatAdd(lhs_val, rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs .{ rhs_src, air_tag, .add_safe };
- } else break :rs .{ lhs_src, air_tag, .add_safe };
- },
- .addwrap => {
- // Integers only; floats are checked above.
- // If either of the operands are zero, the other operand is returned.
- // If either of the operands are undefined, the result is undefined.
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu) and (try lhs_val.compareAllWithZeroSema(.eq, pt))) {
- return casted_rhs;
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- if (maybe_lhs_val) |lhs_val| {
- return Air.internedToRef((try sema.numberAddWrapScalar(lhs_val, rhs_val, resolved_type)).toIntern());
- } else break :rs .{ lhs_src, .add_wrap, .add_wrap };
- } else break :rs .{ rhs_src, .add_wrap, .add_wrap };
- },
- .add_sat => {
- // Integers only; floats are checked above.
- // If either of the operands are zero, then the other operand is returned.
- // If either of the operands are undefined, the result is undefined.
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu) and (try lhs_val.compareAllWithZeroSema(.eq, pt))) {
- return casted_rhs;
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
-
- const val = if (scalar_tag == .comptime_int)
- try sema.intAdd(lhs_val, rhs_val, resolved_type, undefined)
- else
- try lhs_val.intAddSat(rhs_val, resolved_type, sema.arena, pt);
+ // The rules we'll implement below are as follows:
+ //
+ // * If both operands are comptime-known, we call the corresponding function in `arith` to get
+ // the comptime-known result. Inputs which would be IB at runtime are compile errors.
+ //
+ // * Otherwise, if one operand is comptime-known `undefined`, we trigger a compile error if this
+ // operator can ever possibly trigger IB, or otherwise return comptime-known `undefined`.
+ //
+ // * No other comptime operand detemines a comptime result; e.g. `0 * x` isn't always `0` because
+ // of `undefined`. Therefore, the remaining cases all become runtime operations.
- return Air.internedToRef(val.toIntern());
- } else break :rs .{
- lhs_src,
- .add_sat,
- .add_sat,
- };
- } else break :rs .{
- rhs_src,
- .add_sat,
- .add_sat,
- };
- },
- .sub => {
- // For integers:
- // If the rhs is zero, then the other operand is
- // returned, even if it is undefined.
- // If either of the operands are undefined, it's a compile error
- // because there is a possible value for which the subtraction would
- // overflow, causing illegal behavior.
- // For floats: either operand being undef makes the result undef.
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, rhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- }
- const air_tag: Air.Inst.Tag = if (block.float_mode == .optimized) .sub_optimized else .sub;
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, lhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (is_int) {
- var overflow_idx: ?usize = null;
- const diff = try sema.intSub(lhs_val, rhs_val, resolved_type, &overflow_idx);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, diff, vec_idx);
- }
- return Air.internedToRef(diff.toIntern());
- } else {
- return Air.internedToRef((try Value.floatSub(lhs_val, rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs .{ rhs_src, air_tag, .sub_safe };
- } else break :rs .{ lhs_src, air_tag, .sub_safe };
- },
- .subwrap => {
- // Integers only; floats are checked above.
- // If the RHS is zero, then the LHS is returned, even if it is undefined.
- // If either of the operands are undefined, the result is undefined.
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (maybe_rhs_val) |rhs_val| {
- return Air.internedToRef((try sema.numberSubWrapScalar(lhs_val, rhs_val, resolved_type)).toIntern());
- } else break :rs .{ rhs_src, .sub_wrap, .sub_wrap };
- } else break :rs .{ lhs_src, .sub_wrap, .sub_wrap };
- },
- .sub_sat => {
- // Integers only; floats are checked above.
- // If the RHS is zero, then the LHS is returned, even if it is undefined.
- // If either of the operands are undefined, the result is undefined.
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- return casted_lhs;
- }
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (maybe_rhs_val) |rhs_val| {
- const val = if (scalar_tag == .comptime_int)
- try sema.intSub(lhs_val, rhs_val, resolved_type, undefined)
- else
- try lhs_val.intSubSat(rhs_val, resolved_type, sema.arena, pt);
-
- return Air.internedToRef(val.toIntern());
- } else break :rs .{ rhs_src, .sub_sat, .sub_sat };
- } else break :rs .{ lhs_src, .sub_sat, .sub_sat };
- },
- .mul => {
- // For integers:
- // If either of the operands are zero, the result is zero.
- // If either of the operands are one, the result is the other
- // operand, even if it is undefined.
- // If either of the operands are undefined, it's a compile error
- // because there is a possible value for which the addition would
- // overflow (max_int), causing illegal behavior.
- //
- // For floats:
- // If either of the operands are undefined, the result is undefined.
- // If either of the operands are inf, and the other operand is zero,
- // the result is nan.
- // If either of the operands are nan, the result is nan.
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 0.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 0),
- else => unreachable,
- };
- const scalar_one = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 1.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 1),
- else => unreachable,
- };
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (lhs_val.isNan(zcu)) {
- return Air.internedToRef(lhs_val.toIntern());
- }
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) lz: {
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isNan(zcu)) {
- return Air.internedToRef(rhs_val.toIntern());
- }
- if (rhs_val.isInf(zcu)) {
- return Air.internedToRef((try pt.floatValue(resolved_type, std.math.nan(f128))).toIntern());
- }
- } else if (resolved_type.isAnyFloat()) {
- break :lz;
- }
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(lhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_rhs;
- }
- }
- }
- const air_tag: Air.Inst.Tag = if (block.float_mode == .optimized) .mul_optimized else .mul;
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, rhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (rhs_val.isNan(zcu)) {
- return Air.internedToRef(rhs_val.toIntern());
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) rz: {
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isInf(zcu)) {
- return Air.internedToRef((try pt.floatValue(resolved_type, std.math.nan(f128))).toIntern());
- }
- } else if (resolved_type.isAnyFloat()) {
- break :rz;
- }
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(rhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_lhs;
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- if (is_int) {
- return sema.failWithUseOfUndef(block, lhs_src);
- } else {
- return pt.undefRef(resolved_type);
- }
- }
- if (is_int) {
- var overflow_idx: ?usize = null;
- const product = try lhs_val.intMul(rhs_val, resolved_type, &overflow_idx, sema.arena, pt);
- if (overflow_idx) |vec_idx| {
- return sema.failWithIntegerOverflow(block, src, resolved_type, product, vec_idx);
- }
- return Air.internedToRef(product.toIntern());
- } else {
- return Air.internedToRef((try lhs_val.floatMul(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- }
- } else break :rs .{ lhs_src, air_tag, .mul_safe };
- } else break :rs .{ rhs_src, air_tag, .mul_safe };
- },
- .mulwrap => {
- // Integers only; floats are handled above.
- // If either of the operands are zero, result is zero.
- // If either of the operands are one, result is the other operand.
- // If either of the operands are undefined, result is undefined.
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 0.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 0),
- else => unreachable,
- };
- const scalar_one = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 1.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 1),
- else => unreachable,
- };
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(lhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_rhs;
- }
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(rhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_lhs;
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- return Air.internedToRef((try lhs_val.numberMulWrap(rhs_val, resolved_type, sema.arena, pt)).toIntern());
- } else break :rs .{ lhs_src, .mul_wrap, .mul_wrap };
- } else break :rs .{ rhs_src, .mul_wrap, .mul_wrap };
- },
- .mul_sat => {
- // Integers only; floats are checked above.
- // If either of the operands are zero, result is zero.
- // If either of the operands are one, result is the other operand.
- // If either of the operands are undefined, result is undefined.
- const scalar_zero = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 0.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 0),
- else => unreachable,
- };
- const scalar_one = switch (scalar_tag) {
- .comptime_float, .float => try pt.floatValue(scalar_type, 1.0),
- .comptime_int, .int => try pt.intValue(scalar_type, 1),
- else => unreachable,
- };
- if (maybe_lhs_val) |lhs_val| {
- if (!lhs_val.isUndef(zcu)) {
- if (try lhs_val.compareAllWithZeroSema(.eq, pt)) {
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(lhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_rhs;
- }
- }
- }
- if (maybe_rhs_val) |rhs_val| {
- if (rhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
- if (try rhs_val.compareAllWithZeroSema(.eq, pt)) {
- const zero_val = try sema.splat(resolved_type, scalar_zero);
- return Air.internedToRef(zero_val.toIntern());
- }
- if (try sema.compareAll(rhs_val, .eq, try sema.splat(resolved_type, scalar_one), resolved_type)) {
- return casted_lhs;
- }
- if (maybe_lhs_val) |lhs_val| {
- if (lhs_val.isUndef(zcu)) {
- return pt.undefRef(resolved_type);
- }
+ const is_int = switch (scalar_tag) {
+ .int, .comptime_int => true,
+ .float, .comptime_float => false,
+ else => unreachable,
+ };
- const val = if (scalar_tag == .comptime_int)
- try lhs_val.intMul(rhs_val, resolved_type, undefined, sema.arena, pt)
- else
- try lhs_val.intMulSat(rhs_val, resolved_type, sema.arena, pt);
+ const maybe_lhs_val = try sema.resolveValueResolveLazy(casted_lhs);
+ const maybe_rhs_val = try sema.resolveValueResolveLazy(casted_rhs);
- return Air.internedToRef(val.toIntern());
- } else break :rs .{ lhs_src, .mul_sat, .mul_sat };
- } else break :rs .{ rhs_src, .mul_sat, .mul_sat };
- },
- else => unreachable,
+ if (maybe_lhs_val) |lhs_val| {
+ if (maybe_rhs_val) |rhs_val| {
+ const result_val = switch (zir_tag) {
+ .add, .add_unsafe => try arith.add(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src),
+ .addwrap => try arith.addWrap(sema, resolved_type, lhs_val, rhs_val),
+ .add_sat => try arith.addSat(sema, resolved_type, lhs_val, rhs_val),
+ .sub => try arith.sub(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src),
+ .subwrap => try arith.subWrap(sema, resolved_type, lhs_val, rhs_val),
+ .sub_sat => try arith.subSat(sema, resolved_type, lhs_val, rhs_val),
+ .mul => try arith.mul(sema, block, resolved_type, lhs_val, rhs_val, src, lhs_src, rhs_src),
+ .mulwrap => try arith.mulWrap(sema, resolved_type, lhs_val, rhs_val),
+ .mul_sat => try arith.mulSat(sema, resolved_type, lhs_val, rhs_val),
+ else => unreachable,
+ };
+ return Air.internedToRef(result_val.toIntern());
}
+ }
+
+ const air_tag: Air.Inst.Tag, const air_tag_safe: Air.Inst.Tag, const allow_undef: bool = switch (zir_tag) {
+ .add, .add_unsafe => .{ if (block.float_mode == .optimized) .add_optimized else .add, .add_safe, !is_int },
+ .addwrap => .{ .add_wrap, .add_wrap, true },
+ .add_sat => .{ .add_sat, .add_sat, true },
+ .sub => .{ if (block.float_mode == .optimized) .sub_optimized else .sub, .sub_safe, !is_int },
+ .subwrap => .{ .sub_wrap, .sub_wrap, true },
+ .sub_sat => .{ .sub_sat, .sub_sat, true },
+ .mul => .{ if (block.float_mode == .optimized) .mul_optimized else .mul, .mul_safe, !is_int },
+ .mulwrap => .{ .mul_wrap, .mul_wrap, true },
+ .mul_sat => .{ .mul_sat, .mul_sat, true },
+ else => unreachable,
};
- try sema.requireRuntimeBlock(block, src, runtime_src);
+ if (allow_undef) {
+ if (maybe_lhs_val) |lhs_val| {
+ if (lhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ }
+ if (maybe_rhs_val) |rhs_val| {
+ if (rhs_val.isUndefDeep(zcu)) return pt.undefRef(resolved_type);
+ }
+ } else {
+ if (maybe_lhs_val) |lhs_val| {
+ if (lhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, lhs_src);
+ }
+ if (maybe_rhs_val) |rhs_val| {
+ if (rhs_val.anyScalarIsUndef(zcu)) return sema.failWithUseOfUndef(block, rhs_src);
+ }
+ }
if (block.wantSafety() and want_safety and scalar_tag == .int) {
if (zcu.backendSupportsFeature(.safety_checked_instructions)) {
@@ -24124,7 +23464,7 @@ fn zirTruncate(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Ai
}
}
- if (try sema.resolveValueIntable(operand)) |val| {
+ if (try sema.resolveValueResolveLazy(operand)) |val| {
if (val.isUndef(zcu)) return pt.undefRef(dest_ty);
if (!dest_is_vector) {
return Air.internedToRef((try pt.getCoerced(
@@ -25087,8 +24427,8 @@ fn zirReduce(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.
.Xor => accum = try accum.bitwiseXor(elem_val, scalar_ty, sema.arena, pt),
.Min => accum = accum.numberMin(elem_val, zcu),
.Max => accum = accum.numberMax(elem_val, zcu),
- .Add => accum = try sema.numberAddWrapScalar(accum, elem_val, scalar_ty),
- .Mul => accum = try accum.numberMulWrap(elem_val, scalar_ty, sema.arena, pt),
+ .Add => accum = try arith.addMaybeWrap(sema, scalar_ty, accum, elem_val),
+ .Mul => accum = try arith.mulMaybeWrap(sema, scalar_ty, accum, elem_val),
}
}
return Air.internedToRef(accum.toIntern());
@@ -25485,14 +24825,14 @@ fn zirAtomicRmw(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
const new_val = switch (op) {
// zig fmt: off
.Xchg => operand_val,
- .Add => try sema.numberAddWrapScalar(stored_val, operand_val, elem_ty),
- .Sub => try sema.numberSubWrapScalar(stored_val, operand_val, elem_ty),
- .And => try stored_val.bitwiseAnd (operand_val, elem_ty, sema.arena, pt ),
- .Nand => try stored_val.bitwiseNand (operand_val, elem_ty, sema.arena, pt ),
- .Or => try stored_val.bitwiseOr (operand_val, elem_ty, sema.arena, pt ),
- .Xor => try stored_val.bitwiseXor (operand_val, elem_ty, sema.arena, pt ),
- .Max => stored_val.numberMax (operand_val, zcu),
- .Min => stored_val.numberMin (operand_val, zcu),
+ .Add => try arith.addMaybeWrap(sema, elem_ty, stored_val, operand_val),
+ .Sub => try arith.subMaybeWrap(sema, elem_ty, stored_val, operand_val),
+ .And => try stored_val.bitwiseAnd (operand_val, elem_ty, sema.arena, pt ),
+ .Nand => try stored_val.bitwiseNand (operand_val, elem_ty, sema.arena, pt ),
+ .Or => try stored_val.bitwiseOr (operand_val, elem_ty, sema.arena, pt ),
+ .Xor => try stored_val.bitwiseXor (operand_val, elem_ty, sema.arena, pt ),
+ .Max => stored_val.numberMax (operand_val, zcu),
+ .Min => stored_val.numberMin (operand_val, zcu),
// zig fmt: on
};
try sema.storePtrVal(block, src, ptr_val, new_val, elem_ty);
@@ -31437,16 +30777,12 @@ fn storePtr2(
};
const maybe_operand_val = try sema.resolveValue(operand);
- const runtime_src = if (try sema.resolveDefinedValue(block, ptr_src, ptr)) |ptr_val| rs: {
- const operand_val = maybe_operand_val orelse {
- try sema.checkPtrIsNotComptimeMutable(block, ptr_val, ptr_src, operand_src);
- break :rs operand_src;
- };
- if (sema.isComptimeMutablePtr(ptr_val)) {
- try sema.storePtrVal(block, src, ptr_val, operand_val, elem_ty);
- return;
- } else break :rs ptr_src;
- } else ptr_src;
+ const runtime_src = rs: {
+ const ptr_val = try sema.resolveDefinedValue(block, ptr_src, ptr) orelse break :rs ptr_src;
+ if (!sema.isComptimeMutablePtr(ptr_val)) break :rs ptr_src;
+ const operand_val = maybe_operand_val orelse return sema.fail(block, ptr_src, "cannot store runtime value in compile time variable", .{});
+ return sema.storePtrVal(block, src, ptr_val, operand_val, elem_ty);
+ };
// We're performing the store at runtime; as such, we need to make sure the pointee type
// is not comptime-only. We can hit this case with a `@ptrFromInt` pointer.
@@ -36719,13 +36055,19 @@ fn unionFields(
break :blk val;
} else blk: {
- const val = if (last_tag_val) |val|
- try sema.intAdd(val, Value.one_comptime_int, int_tag_ty, undefined)
- else
- try pt.intValue(int_tag_ty, 0);
- last_tag_val = val;
-
- break :blk val;
+ if (last_tag_val) |last_tag| {
+ const result = try arith.incrementDefinedInt(sema, int_tag_ty, last_tag);
+ if (result.overflow) return sema.fail(
+ &block_scope,
+ value_src,
+ "enumeration value '{}' too large for type '{}'",
+ .{ result.val.fmtValueSema(pt, sema), int_tag_ty.fmt(pt) },
+ );
+ last_tag_val = result.val;
+ } else {
+ last_tag_val = try pt.intValue(int_tag_ty, 0);
+ }
+ break :blk last_tag_val.?;
};
const gop = enum_field_vals.getOrPutAssumeCapacity(enum_tag_val.toIntern());
if (gop.found_existing) {
@@ -37532,260 +36874,6 @@ fn structFieldIndex(
return sema.failWithBadStructFieldAccess(block, struct_ty, struct_type, field_src, field_name);
}
-/// If the value overflowed the type, returns a comptime_int (or vector thereof) instead, setting
-/// overflow_idx to the vector index the overflow was at (or 0 for a scalar).
-fn intAdd(sema: *Sema, lhs: Value, rhs: Value, ty: Type, overflow_idx: *?usize) !Value {
- const pt = sema.pt;
- var overflow: usize = undefined;
- return sema.intAddInner(lhs, rhs, ty, &overflow) catch |err| switch (err) {
- error.Overflow => {
- const is_vec = ty.isVector(pt.zcu);
- overflow_idx.* = if (is_vec) overflow else 0;
- const safe_ty = if (is_vec) try pt.vectorType(.{
- .len = ty.vectorLen(pt.zcu),
- .child = .comptime_int_type,
- }) else Type.comptime_int;
- return sema.intAddInner(lhs, rhs, safe_ty, undefined) catch |err1| switch (err1) {
- error.Overflow => unreachable,
- else => |e| return e,
- };
- },
- else => |e| return e,
- };
-}
-
-fn intAddInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type, overflow_idx: *usize) !Value {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const result_data = try sema.arena.alloc(InternPool.Index, ty.vectorLen(zcu));
- const scalar_ty = ty.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const val = sema.intAddScalar(lhs_elem, rhs_elem, scalar_ty) catch |err| switch (err) {
- error.Overflow => {
- overflow_idx.* = i;
- return error.Overflow;
- },
- else => |e| return e,
- };
- scalar.* = val.toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return sema.intAddScalar(lhs, rhs, ty);
-}
-
-fn intAddScalar(sema: *Sema, lhs: Value, rhs: Value, scalar_ty: Type) !Value {
- const pt = sema.pt;
- if (scalar_ty.toIntern() != .comptime_int_type) {
- const res = try sema.intAddWithOverflowScalar(lhs, rhs, scalar_ty);
- if (res.overflow_bit.compareAllWithZero(.neq, pt.zcu)) return error.Overflow;
- return res.wrapped_result;
- }
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
- const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
- const limbs = try sema.arena.alloc(
- std.math.big.Limb,
- @max(lhs_bigint.limbs.len, rhs_bigint.limbs.len) + 1,
- );
- var result_bigint = std.math.big.int.Mutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- result_bigint.add(lhs_bigint, rhs_bigint);
- return pt.intValue_big(scalar_ty, result_bigint.toConst());
-}
-
-/// Supports both floats and ints; handles undefined.
-fn numberAddWrapScalar(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return pt.undefValue(ty);
-
- if (ty.zigTypeTag(zcu) == .comptime_int) {
- return sema.intAdd(lhs, rhs, ty, undefined);
- }
-
- if (ty.isAnyFloat()) {
- return Value.floatAdd(lhs, rhs, ty, sema.arena, pt);
- }
-
- const overflow_result = try sema.intAddWithOverflow(lhs, rhs, ty);
- return overflow_result.wrapped_result;
-}
-
-/// If the value overflowed the type, returns a comptime_int (or vector thereof) instead, setting
-/// overflow_idx to the vector index the overflow was at (or 0 for a scalar).
-fn intSub(sema: *Sema, lhs: Value, rhs: Value, ty: Type, overflow_idx: *?usize) !Value {
- const pt = sema.pt;
- var overflow: usize = undefined;
- return sema.intSubInner(lhs, rhs, ty, &overflow) catch |err| switch (err) {
- error.Overflow => {
- const is_vec = ty.isVector(pt.zcu);
- overflow_idx.* = if (is_vec) overflow else 0;
- const safe_ty = if (is_vec) try pt.vectorType(.{
- .len = ty.vectorLen(pt.zcu),
- .child = .comptime_int_type,
- }) else Type.comptime_int;
- return sema.intSubInner(lhs, rhs, safe_ty, undefined) catch |err1| switch (err1) {
- error.Overflow => unreachable,
- else => |e| return e,
- };
- },
- else => |e| return e,
- };
-}
-
-fn intSubInner(sema: *Sema, lhs: Value, rhs: Value, ty: Type, overflow_idx: *usize) !Value {
- const pt = sema.pt;
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try sema.arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const val = sema.intSubScalar(lhs_elem, rhs_elem, scalar_ty) catch |err| switch (err) {
- error.Overflow => {
- overflow_idx.* = i;
- return error.Overflow;
- },
- else => |e| return e,
- };
- scalar.* = val.toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return sema.intSubScalar(lhs, rhs, ty);
-}
-
-fn intSubScalar(sema: *Sema, lhs: Value, rhs: Value, scalar_ty: Type) !Value {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (scalar_ty.toIntern() != .comptime_int_type) {
- const res = try sema.intSubWithOverflowScalar(lhs, rhs, scalar_ty);
- if (res.overflow_bit.compareAllWithZero(.neq, zcu)) return error.Overflow;
- return res.wrapped_result;
- }
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
- const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
- const limbs = try sema.arena.alloc(
- std.math.big.Limb,
- @max(lhs_bigint.limbs.len, rhs_bigint.limbs.len) + 1,
- );
- var result_bigint = std.math.big.int.Mutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- result_bigint.sub(lhs_bigint, rhs_bigint);
- return pt.intValue_big(scalar_ty, result_bigint.toConst());
-}
-
-/// Supports both floats and ints; handles undefined.
-fn numberSubWrapScalar(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return pt.undefValue(ty);
-
- if (ty.zigTypeTag(zcu) == .comptime_int) {
- return sema.intSub(lhs, rhs, ty, undefined);
- }
-
- if (ty.isAnyFloat()) {
- return Value.floatSub(lhs, rhs, ty, sema.arena, pt);
- }
-
- const overflow_result = try sema.intSubWithOverflow(lhs, rhs, ty);
- return overflow_result.wrapped_result;
-}
-
-fn intSubWithOverflow(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value.OverflowArithmeticResult {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const vec_len = ty.vectorLen(zcu);
- const overflowed_data = try sema.arena.alloc(InternPool.Index, vec_len);
- const result_data = try sema.arena.alloc(InternPool.Index, vec_len);
- const scalar_ty = ty.scalarType(zcu);
- for (overflowed_data, result_data, 0..) |*of, *scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const of_math_result = try sema.intSubWithOverflowScalar(lhs_elem, rhs_elem, scalar_ty);
- of.* = of_math_result.overflow_bit.toIntern();
- scalar.* = of_math_result.wrapped_result.toIntern();
- }
- return Value.OverflowArithmeticResult{
- .overflow_bit = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = (try pt.vectorType(.{ .len = vec_len, .child = .u1_type })).toIntern(),
- .storage = .{ .elems = overflowed_data },
- } })),
- .wrapped_result = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } })),
- };
- }
- return sema.intSubWithOverflowScalar(lhs, rhs, ty);
-}
-
-fn intSubWithOverflowScalar(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value.OverflowArithmeticResult {
- const pt = sema.pt;
- const zcu = pt.zcu;
- const info = ty.intInfo(zcu);
-
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) {
- return .{
- .overflow_bit = try pt.undefValue(Type.u1),
- .wrapped_result = try pt.undefValue(ty),
- };
- }
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
- const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
- const limbs = try sema.arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(info.bits),
- );
- var result_bigint = std.math.big.int.Mutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- const overflowed = result_bigint.subWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits);
- const wrapped_result = try pt.intValue_big(ty, result_bigint.toConst());
- return Value.OverflowArithmeticResult{
- .overflow_bit = try pt.intValue(Type.u1, @intFromBool(overflowed)),
- .wrapped_result = wrapped_result,
- };
-}
-
const IntFromFloatMode = enum { exact, truncate };
fn intFromFloat(
@@ -37982,74 +37070,6 @@ fn enumHasInt(sema: *Sema, ty: Type, int: Value) CompileError!bool {
return enum_type.tagValueIndex(&zcu.intern_pool, int_coerced.toIntern()) != null;
}
-fn intAddWithOverflow(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value.OverflowArithmeticResult {
- const pt = sema.pt;
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const vec_len = ty.vectorLen(zcu);
- const overflowed_data = try sema.arena.alloc(InternPool.Index, vec_len);
- const result_data = try sema.arena.alloc(InternPool.Index, vec_len);
- const scalar_ty = ty.scalarType(zcu);
- for (overflowed_data, result_data, 0..) |*of, *scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const of_math_result = try sema.intAddWithOverflowScalar(lhs_elem, rhs_elem, scalar_ty);
- of.* = of_math_result.overflow_bit.toIntern();
- scalar.* = of_math_result.wrapped_result.toIntern();
- }
- return Value.OverflowArithmeticResult{
- .overflow_bit = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = (try pt.vectorType(.{ .len = vec_len, .child = .u1_type })).toIntern(),
- .storage = .{ .elems = overflowed_data },
- } })),
- .wrapped_result = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } })),
- };
- }
- return sema.intAddWithOverflowScalar(lhs, rhs, ty);
-}
-
-fn intAddWithOverflowScalar(
- sema: *Sema,
- lhs: Value,
- rhs: Value,
- ty: Type,
-) !Value.OverflowArithmeticResult {
- const pt = sema.pt;
- const zcu = pt.zcu;
- const info = ty.intInfo(zcu);
-
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) {
- return .{
- .overflow_bit = try pt.undefValue(Type.u1),
- .wrapped_result = try pt.undefValue(ty),
- };
- }
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = try lhs.toBigIntSema(&lhs_space, pt);
- const rhs_bigint = try rhs.toBigIntSema(&rhs_space, pt);
- const limbs = try sema.arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(info.bits),
- );
- var result_bigint = std.math.big.int.Mutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- const overflowed = result_bigint.addWrap(lhs_bigint, rhs_bigint, info.signedness, info.bits);
- const result = try pt.intValue_big(ty, result_bigint.toConst());
- return Value.OverflowArithmeticResult{
- .overflow_bit = try pt.intValue(Type.u1, @intFromBool(overflowed)),
- .wrapped_result = result,
- };
-}
-
/// Asserts the values are comparable. Both operands have type `ty`.
/// For vectors, returns true if the comparison is true for ALL elements.
///
@@ -38736,12 +37756,13 @@ fn resolveDeclaredEnumInner(
}
break :overflow false;
} else if (any_values) overflow: {
- var overflow: ?usize = null;
- last_tag_val = if (last_tag_val) |val|
- try sema.intAdd(val, try pt.intValue(int_tag_ty, 1), int_tag_ty, &overflow)
- else
- try pt.intValue(int_tag_ty, 0);
- if (overflow != null) break :overflow true;
+ if (last_tag_val) |last_tag| {
+ const result = try arith.incrementDefinedInt(sema, int_tag_ty, last_tag);
+ last_tag_val = result.val;
+ if (result.overflow) break :overflow true;
+ } else {
+ last_tag_val = try pt.intValue(int_tag_ty, 0);
+ }
if (wip_ty.nextField(ip, field_name, last_tag_val.?.toIntern())) |conflict| {
assert(conflict.kind == .value); // AstGen validated names are unique
const other_field_src: LazySrcLoc = .{
src/Value.zig
@@ -895,7 +895,7 @@ pub fn readFromPackedMemory(
}
/// Asserts that the value is a float or an integer.
-pub fn toFloat(val: Value, comptime T: type, zcu: *Zcu) T {
+pub fn toFloat(val: Value, comptime T: type, zcu: *const Zcu) T {
return switch (zcu.intern_pool.indexToKey(val.toIntern())) {
.int => |int| switch (int.storage) {
.big_int => |big_int| big_int.toFloat(T),
@@ -1415,17 +1415,63 @@ pub fn unionValue(val: Value, zcu: *Zcu) Value {
};
}
-pub fn isUndef(val: Value, zcu: *Zcu) bool {
+pub fn isUndef(val: Value, zcu: *const Zcu) bool {
return zcu.intern_pool.isUndef(val.toIntern());
}
/// TODO: check for cases such as array that is not marked undef but all the element
/// values are marked undef, or struct that is not marked undef but all fields are marked
/// undef, etc.
-pub fn isUndefDeep(val: Value, zcu: *Zcu) bool {
+pub fn isUndefDeep(val: Value, zcu: *const Zcu) bool {
return val.isUndef(zcu);
}
+/// `val` must have a numeric or vector type.
+/// Returns whether `val` is undefined or contains any undefined elements.
+pub fn anyScalarIsUndef(val: Value, zcu: *const Zcu) bool {
+ switch (zcu.intern_pool.indexToKey(val.toIntern())) {
+ .undef => return true,
+ .int, .float => return false,
+ .aggregate => |agg| {
+ assert(Type.fromInterned(agg.ty).zigTypeTag(zcu) == .vector);
+ for (agg.storage.values()) |elem_val| {
+ if (Value.fromInterned(elem_val).isUndef(zcu)) return true;
+ }
+ return false;
+ },
+ else => unreachable,
+ }
+}
+
+/// `val` must have a numeric or vector type.
+/// Returns whether `val` contains any elements equal to zero.
+/// Asserts that `val` is not `undefined`, nor a vector containing any `undefined` elements.
+pub fn anyScalarIsZero(val: Value, zcu: *Zcu) bool {
+ assert(!val.anyScalarIsUndef(zcu));
+
+ switch (zcu.intern_pool.indexToKey(val.toIntern())) {
+ .int, .float => return val.eqlScalarNum(.zero_comptime_int, zcu),
+ .aggregate => |agg| {
+ assert(Type.fromInterned(agg.ty).zigTypeTag(zcu) == .vector);
+ switch (agg.storage) {
+ .bytes => |str| {
+ const len = Type.fromInterned(agg.ty).vectorLen(zcu);
+ const slice = str.toSlice(len, &zcu.intern_pool);
+ return std.mem.indexOfScalar(u8, slice, 0) != null;
+ },
+ .elems => |elems| {
+ for (elems) |elem| {
+ if (Value.fromInterned(elem).isUndef(zcu)) return true;
+ }
+ return false;
+ },
+ .repeated_elem => |elem| return Value.fromInterned(elem).isUndef(zcu),
+ }
+ },
+ else => unreachable,
+ }
+}
+
/// Asserts the value is not undefined and not unreachable.
/// C pointers with an integer value of 0 are also considered null.
pub fn isNull(val: Value, zcu: *Zcu) bool {
@@ -1572,295 +1618,6 @@ pub const OverflowArithmeticResult = struct {
wrapped_result: Value,
};
-/// Supports (vectors of) integers only; asserts neither operand is undefined.
-pub fn intAddSat(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try intAddSatScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intAddSatScalar(lhs, rhs, ty, arena, pt);
-}
-
-/// Supports integers only; asserts neither operand is undefined.
-pub fn intAddSatScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- assert(!lhs.isUndef(zcu));
- assert(!rhs.isUndef(zcu));
-
- const info = ty.intInfo(zcu);
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs = try arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(info.bits),
- );
- var result_bigint = BigIntMutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- result_bigint.addSat(lhs_bigint, rhs_bigint, info.signedness, info.bits);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
-/// Supports (vectors of) integers only; asserts neither operand is undefined.
-pub fn intSubSat(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try intSubSatScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intSubSatScalar(lhs, rhs, ty, arena, pt);
-}
-
-/// Supports integers only; asserts neither operand is undefined.
-pub fn intSubSatScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
-
- assert(!lhs.isUndef(zcu));
- assert(!rhs.isUndef(zcu));
-
- const info = ty.intInfo(zcu);
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs = try arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(info.bits),
- );
- var result_bigint = BigIntMutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- result_bigint.subSat(lhs_bigint, rhs_bigint, info.signedness, info.bits);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
-pub fn intMulWithOverflow(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !OverflowArithmeticResult {
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const vec_len = ty.vectorLen(zcu);
- const overflowed_data = try arena.alloc(InternPool.Index, vec_len);
- const result_data = try arena.alloc(InternPool.Index, vec_len);
- const scalar_ty = ty.scalarType(zcu);
- for (overflowed_data, result_data, 0..) |*of, *scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const of_math_result = try intMulWithOverflowScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt);
- of.* = of_math_result.overflow_bit.toIntern();
- scalar.* = of_math_result.wrapped_result.toIntern();
- }
- return OverflowArithmeticResult{
- .overflow_bit = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = (try pt.vectorType(.{ .len = vec_len, .child = .u1_type })).toIntern(),
- .storage = .{ .elems = overflowed_data },
- } })),
- .wrapped_result = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } })),
- };
- }
- return intMulWithOverflowScalar(lhs, rhs, ty, arena, pt);
-}
-
-pub fn intMulWithOverflowScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !OverflowArithmeticResult {
- const zcu = pt.zcu;
- const info = ty.intInfo(zcu);
-
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) {
- return .{
- .overflow_bit = try pt.undefValue(Type.u1),
- .wrapped_result = try pt.undefValue(ty),
- };
- }
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs = try arena.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len + rhs_bigint.limbs.len,
- );
- var result_bigint = BigIntMutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- const limbs_buffer = try arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcMulLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len, 1),
- );
- result_bigint.mul(lhs_bigint, rhs_bigint, limbs_buffer, arena);
-
- const overflowed = !result_bigint.toConst().fitsInTwosComp(info.signedness, info.bits);
- if (overflowed) {
- result_bigint.truncate(result_bigint.toConst(), info.signedness, info.bits);
- }
-
- return OverflowArithmeticResult{
- .overflow_bit = try pt.intValue(Type.u1, @intFromBool(overflowed)),
- .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
- };
-}
-
-/// Supports both (vectors of) floats and ints; handles undefined scalars.
-pub fn numberMulWrap(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(zcu));
- const scalar_ty = ty.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try numberMulWrapScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return numberMulWrapScalar(lhs, rhs, ty, arena, pt);
-}
-
-/// Supports both floats and ints; handles undefined.
-pub fn numberMulWrapScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return Value.undef;
-
- if (ty.zigTypeTag(zcu) == .comptime_int) {
- return intMul(lhs, rhs, ty, undefined, arena, pt);
- }
-
- if (ty.isAnyFloat()) {
- return floatMul(lhs, rhs, ty, arena, pt);
- }
-
- const overflow_result = try intMulWithOverflow(lhs, rhs, ty, arena, pt);
- return overflow_result.wrapped_result;
-}
-
-/// Supports (vectors of) integers only; asserts neither operand is undefined.
-pub fn intMulSat(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try intMulSatScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intMulSatScalar(lhs, rhs, ty, arena, pt);
-}
-
-/// Supports (vectors of) integers only; asserts neither operand is undefined.
-pub fn intMulSatScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
-
- assert(!lhs.isUndef(zcu));
- assert(!rhs.isUndef(zcu));
-
- const info = ty.intInfo(zcu);
-
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs = try arena.alloc(
- std.math.big.Limb,
- @max(
- // For the saturate
- std.math.big.int.calcTwosCompLimbCount(info.bits),
- lhs_bigint.limbs.len + rhs_bigint.limbs.len,
- ),
- );
- var result_bigint = BigIntMutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- const limbs_buffer = try arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcMulLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len, 1),
- );
- result_bigint.mul(lhs_bigint, rhs_bigint, limbs_buffer, arena);
- result_bigint.saturate(result_bigint.toConst(), info.signedness, info.bits);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
/// Supports both floats and ints; handles undefined.
pub fn numberMax(lhs: Value, rhs: Value, zcu: *Zcu) Value {
if (lhs.isUndef(zcu) or rhs.isUndef(zcu)) return undef;
@@ -2126,143 +1883,6 @@ pub fn bitwiseXorScalar(lhs: Value, rhs: Value, ty: Type, arena: Allocator, pt:
return pt.intValue_big(ty, result_bigint.toConst());
}
-/// If the value overflowed the type, returns a comptime_int (or vector thereof) instead, setting
-/// overflow_idx to the vector index the overflow was at (or 0 for a scalar).
-pub fn intDiv(lhs: Value, rhs: Value, ty: Type, overflow_idx: *?usize, allocator: Allocator, pt: Zcu.PerThread) !Value {
- var overflow: usize = undefined;
- return intDivInner(lhs, rhs, ty, &overflow, allocator, pt) catch |err| switch (err) {
- error.Overflow => {
- const is_vec = ty.isVector(pt.zcu);
- overflow_idx.* = if (is_vec) overflow else 0;
- const safe_ty = if (is_vec) try pt.vectorType(.{
- .len = ty.vectorLen(pt.zcu),
- .child = .comptime_int_type,
- }) else Type.comptime_int;
- return intDivInner(lhs, rhs, safe_ty, undefined, allocator, pt) catch |err1| switch (err1) {
- error.Overflow => unreachable,
- else => |e| return e,
- };
- },
- else => |e| return e,
- };
-}
-
-fn intDivInner(lhs: Value, rhs: Value, ty: Type, overflow_idx: *usize, allocator: Allocator, pt: Zcu.PerThread) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const val = intDivScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt) catch |err| switch (err) {
- error.Overflow => {
- overflow_idx.* = i;
- return error.Overflow;
- },
- else => |e| return e,
- };
- scalar.* = val.toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intDivScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn intDivScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- const zcu = pt.zcu;
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs_q = try allocator.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len,
- );
- const limbs_r = try allocator.alloc(
- std.math.big.Limb,
- rhs_bigint.limbs.len,
- );
- const limbs_buffer = try allocator.alloc(
- std.math.big.Limb,
- std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
- );
- var result_q = BigIntMutable{ .limbs = limbs_q, .positive = undefined, .len = undefined };
- var result_r = BigIntMutable{ .limbs = limbs_r, .positive = undefined, .len = undefined };
- result_q.divTrunc(&result_r, lhs_bigint, rhs_bigint, limbs_buffer);
- if (ty.toIntern() != .comptime_int_type) {
- const info = ty.intInfo(pt.zcu);
- if (!result_q.toConst().fitsInTwosComp(info.signedness, info.bits)) {
- return error.Overflow;
- }
- }
- return pt.intValue_big(ty, result_q.toConst());
-}
-
-pub fn intDivFloor(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try intDivFloorScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intDivFloorScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn intDivFloorScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- const zcu = pt.zcu;
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs_q = try allocator.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len,
- );
- const limbs_r = try allocator.alloc(
- std.math.big.Limb,
- rhs_bigint.limbs.len,
- );
- const limbs_buffer = try allocator.alloc(
- std.math.big.Limb,
- std.math.big.int.calcDivLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len),
- );
- var result_q = BigIntMutable{ .limbs = limbs_q, .positive = undefined, .len = undefined };
- var result_r = BigIntMutable{ .limbs = limbs_r, .positive = undefined, .len = undefined };
- result_q.divFloor(&result_r, lhs_bigint, rhs_bigint, limbs_buffer);
- return pt.intValue_big(ty, result_q.toConst());
-}
-
-pub fn intMod(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try intModScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intModScalar(lhs, rhs, ty, allocator, pt);
-}
-
pub fn intModScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
// TODO is this a performance issue? maybe we should try the operation without
// resorting to BigInt first.
@@ -2386,80 +2006,6 @@ pub fn floatModScalar(lhs: Value, rhs: Value, float_type: Type, pt: Zcu.PerThrea
} }));
}
-/// If the value overflowed the type, returns a comptime_int (or vector thereof) instead, setting
-/// overflow_idx to the vector index the overflow was at (or 0 for a scalar).
-pub fn intMul(lhs: Value, rhs: Value, ty: Type, overflow_idx: *?usize, allocator: Allocator, pt: Zcu.PerThread) !Value {
- const zcu = pt.zcu;
- var overflow: usize = undefined;
- return intMulInner(lhs, rhs, ty, &overflow, allocator, pt) catch |err| switch (err) {
- error.Overflow => {
- const is_vec = ty.isVector(zcu);
- overflow_idx.* = if (is_vec) overflow else 0;
- const safe_ty = if (is_vec) try pt.vectorType(.{
- .len = ty.vectorLen(zcu),
- .child = .comptime_int_type,
- }) else Type.comptime_int;
- return intMulInner(lhs, rhs, safe_ty, undefined, allocator, pt) catch |err1| switch (err1) {
- error.Overflow => unreachable,
- else => |e| return e,
- };
- },
- else => |e| return e,
- };
-}
-
-fn intMulInner(lhs: Value, rhs: Value, ty: Type, overflow_idx: *usize, allocator: Allocator, pt: Zcu.PerThread) !Value {
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(zcu));
- const scalar_ty = ty.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const val = intMulScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt) catch |err| switch (err) {
- error.Overflow => {
- overflow_idx.* = i;
- return error.Overflow;
- },
- else => |e| return e,
- };
- scalar.* = val.toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return intMulScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn intMulScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- const zcu = pt.zcu;
- if (ty.toIntern() != .comptime_int_type) {
- const res = try intMulWithOverflowScalar(lhs, rhs, ty, allocator, pt);
- if (res.overflow_bit.compareAllWithZero(.neq, zcu)) return error.Overflow;
- return res.wrapped_result;
- }
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- var lhs_space: Value.BigIntSpace = undefined;
- var rhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const rhs_bigint = rhs.toBigInt(&rhs_space, zcu);
- const limbs = try allocator.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len + rhs_bigint.limbs.len,
- );
- var result_bigint = BigIntMutable{ .limbs = limbs, .positive = undefined, .len = undefined };
- const limbs_buffer = try allocator.alloc(
- std.math.big.Limb,
- std.math.big.int.calcMulLimbsBufferLen(lhs_bigint.limbs.len, rhs_bigint.limbs.len, 1),
- );
- defer allocator.free(limbs_buffer);
- result_bigint.mul(lhs_bigint, rhs_bigint, limbs_buffer, allocator);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
pub fn intTrunc(val: Value, ty: Type, allocator: Allocator, signedness: std.builtin.Signedness, bits: u16, pt: Zcu.PerThread) !Value {
const zcu = pt.zcu;
if (ty.zigTypeTag(zcu) == .vector) {
@@ -2528,561 +2074,249 @@ pub fn intTruncScalar(
result_bigint.truncate(val_bigint, signedness, bits);
return pt.intValue_big(ty, result_bigint.toConst());
}
-
-pub fn shl(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- const zcu = pt.zcu;
- if (ty.zigTypeTag(zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(zcu));
- const scalar_ty = ty.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try shlScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return shlScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn shlScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- const zcu = pt.zcu;
- var lhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
- const limbs = try allocator.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len + (shift / (@sizeOf(std.math.big.Limb) * 8)) + 1,
- );
- var result_bigint = BigIntMutable{
- .limbs = limbs,
- .positive = undefined,
- .len = undefined,
- };
- result_bigint.shiftLeft(lhs_bigint, shift);
- if (ty.toIntern() != .comptime_int_type) {
- const int_info = ty.intInfo(zcu);
- result_bigint.truncate(result_bigint.toConst(), int_info.signedness, int_info.bits);
- }
-
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
-pub fn shlWithOverflow(
- lhs: Value,
- rhs: Value,
- ty: Type,
- allocator: Allocator,
- pt: Zcu.PerThread,
-) !OverflowArithmeticResult {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const vec_len = ty.vectorLen(pt.zcu);
- const overflowed_data = try allocator.alloc(InternPool.Index, vec_len);
- const result_data = try allocator.alloc(InternPool.Index, vec_len);
- const scalar_ty = ty.scalarType(pt.zcu);
- for (overflowed_data, result_data, 0..) |*of, *scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- const of_math_result = try shlWithOverflowScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt);
- of.* = of_math_result.overflow_bit.toIntern();
- scalar.* = of_math_result.wrapped_result.toIntern();
- }
- return OverflowArithmeticResult{
- .overflow_bit = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = (try pt.vectorType(.{ .len = vec_len, .child = .u1_type })).toIntern(),
- .storage = .{ .elems = overflowed_data },
- } })),
- .wrapped_result = Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } })),
- };
- }
- return shlWithOverflowScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn shlWithOverflowScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- allocator: Allocator,
- pt: Zcu.PerThread,
-) !OverflowArithmeticResult {
- const zcu = pt.zcu;
- const info = ty.intInfo(zcu);
- var lhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
- const limbs = try allocator.alloc(
- std.math.big.Limb,
- lhs_bigint.limbs.len + (shift / (@sizeOf(std.math.big.Limb) * 8)) + 1,
- );
- var result_bigint = BigIntMutable{
- .limbs = limbs,
- .positive = undefined,
- .len = undefined,
- };
- result_bigint.shiftLeft(lhs_bigint, shift);
- const overflowed = !result_bigint.toConst().fitsInTwosComp(info.signedness, info.bits);
- if (overflowed) {
- result_bigint.truncate(result_bigint.toConst(), info.signedness, info.bits);
- }
- return OverflowArithmeticResult{
- .overflow_bit = try pt.intValue(Type.u1, @intFromBool(overflowed)),
- .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
- };
-}
-
-pub fn shlSat(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try shlSatScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return shlSatScalar(lhs, rhs, ty, arena, pt);
-}
-
-pub fn shlSatScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- const zcu = pt.zcu;
- const info = ty.intInfo(zcu);
-
- var lhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
- const limbs = try arena.alloc(
- std.math.big.Limb,
- std.math.big.int.calcTwosCompLimbCount(info.bits) + 1,
- );
- var result_bigint = BigIntMutable{
- .limbs = limbs,
- .positive = undefined,
- .len = undefined,
- };
- result_bigint.shiftLeftSat(lhs_bigint, shift, info.signedness, info.bits);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
-pub fn shlTrunc(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try shlTruncScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return shlTruncScalar(lhs, rhs, ty, arena, pt);
-}
-
-pub fn shlTruncScalar(
- lhs: Value,
- rhs: Value,
- ty: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const shifted = try lhs.shl(rhs, ty, arena, pt);
- const int_info = ty.intInfo(pt.zcu);
- const truncated = try shifted.intTrunc(ty, arena, int_info.signedness, int_info.bits, pt);
- return truncated;
-}
-
-pub fn shr(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- if (ty.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
- const scalar_ty = ty.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try shrScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = ty.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return shrScalar(lhs, rhs, ty, allocator, pt);
-}
-
-pub fn shrScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
- // TODO is this a performance issue? maybe we should try the operation without
- // resorting to BigInt first.
- const zcu = pt.zcu;
- var lhs_space: Value.BigIntSpace = undefined;
- const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
- const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
-
- const result_limbs = lhs_bigint.limbs.len -| (shift / (@sizeOf(std.math.big.Limb) * 8));
- if (result_limbs == 0) {
- // The shift is enough to remove all the bits from the number, which means the
- // result is 0 or -1 depending on the sign.
- if (lhs_bigint.positive) {
- return pt.intValue(ty, 0);
- } else {
- return pt.intValue(ty, -1);
- }
- }
-
- const limbs = try allocator.alloc(
- std.math.big.Limb,
- result_limbs,
- );
- var result_bigint = BigIntMutable{
- .limbs = limbs,
- .positive = undefined,
- .len = undefined,
- };
- result_bigint.shiftRight(lhs_bigint, shift);
- return pt.intValue_big(ty, result_bigint.toConst());
-}
-
-pub fn floatNeg(
- val: Value,
- float_type: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- if (float_type.zigTypeTag(zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(zcu));
- const scalar_ty = float_type.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const elem_val = try val.elemValue(pt, i);
- scalar.* = (try floatNegScalar(elem_val, scalar_ty, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return floatNegScalar(val, float_type, pt);
-}
-
-pub fn floatNegScalar(val: Value, float_type: Type, pt: Zcu.PerThread) !Value {
- const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = -val.toFloat(f16, zcu) },
- 32 => .{ .f32 = -val.toFloat(f32, zcu) },
- 64 => .{ .f64 = -val.toFloat(f64, zcu) },
- 80 => .{ .f80 = -val.toFloat(f80, zcu) },
- 128 => .{ .f128 = -val.toFloat(f128, zcu) },
- else => unreachable,
- };
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
-}
-
-pub fn floatAdd(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- if (float_type.zigTypeTag(zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(zcu));
- const scalar_ty = float_type.scalarType(zcu);
- for (result_data, 0..) |*scalar, i| {
- const lhs_elem = try lhs.elemValue(pt, i);
- const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatAddScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
- }
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
- }
- return floatAddScalar(lhs, rhs, float_type, pt);
-}
-
-pub fn floatAddScalar(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = lhs.toFloat(f16, zcu) + rhs.toFloat(f16, zcu) },
- 32 => .{ .f32 = lhs.toFloat(f32, zcu) + rhs.toFloat(f32, zcu) },
- 64 => .{ .f64 = lhs.toFloat(f64, zcu) + rhs.toFloat(f64, zcu) },
- 80 => .{ .f80 = lhs.toFloat(f80, zcu) + rhs.toFloat(f80, zcu) },
- 128 => .{ .f128 = lhs.toFloat(f128, zcu) + rhs.toFloat(f128, zcu) },
- else => unreachable,
- };
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
-}
-
-pub fn floatSub(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
+
+pub fn shl(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
const zcu = pt.zcu;
- if (float_type.zigTypeTag(zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(zcu));
- const scalar_ty = float_type.scalarType(zcu);
+ if (ty.zigTypeTag(zcu) == .vector) {
+ const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(zcu));
+ const scalar_ty = ty.scalarType(zcu);
for (result_data, 0..) |*scalar, i| {
const lhs_elem = try lhs.elemValue(pt, i);
const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatSubScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
+ scalar.* = (try shlScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
}
return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
+ .ty = ty.toIntern(),
.storage = .{ .elems = result_data },
} }));
}
- return floatSubScalar(lhs, rhs, float_type, pt);
+ return shlScalar(lhs, rhs, ty, allocator, pt);
}
-pub fn floatSubScalar(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- pt: Zcu.PerThread,
-) !Value {
+pub fn shlScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = lhs.toFloat(f16, zcu) - rhs.toFloat(f16, zcu) },
- 32 => .{ .f32 = lhs.toFloat(f32, zcu) - rhs.toFloat(f32, zcu) },
- 64 => .{ .f64 = lhs.toFloat(f64, zcu) - rhs.toFloat(f64, zcu) },
- 80 => .{ .f80 = lhs.toFloat(f80, zcu) - rhs.toFloat(f80, zcu) },
- 128 => .{ .f128 = lhs.toFloat(f128, zcu) - rhs.toFloat(f128, zcu) },
- else => unreachable,
+ var lhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
+ const limbs = try allocator.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len + (shift / (@sizeOf(std.math.big.Limb) * 8)) + 1,
+ );
+ var result_bigint = BigIntMutable{
+ .limbs = limbs,
+ .positive = undefined,
+ .len = undefined,
};
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
+ result_bigint.shiftLeft(lhs_bigint, shift);
+ if (ty.toIntern() != .comptime_int_type) {
+ const int_info = ty.intInfo(zcu);
+ result_bigint.truncate(result_bigint.toConst(), int_info.signedness, int_info.bits);
+ }
+
+ return pt.intValue_big(ty, result_bigint.toConst());
}
-pub fn floatDiv(
+pub fn shlWithOverflow(
lhs: Value,
rhs: Value,
- float_type: Type,
- arena: Allocator,
+ ty: Type,
+ allocator: Allocator,
pt: Zcu.PerThread,
-) !Value {
- if (float_type.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(pt.zcu));
- const scalar_ty = float_type.scalarType(pt.zcu);
- for (result_data, 0..) |*scalar, i| {
+) !OverflowArithmeticResult {
+ if (ty.zigTypeTag(pt.zcu) == .vector) {
+ const vec_len = ty.vectorLen(pt.zcu);
+ const overflowed_data = try allocator.alloc(InternPool.Index, vec_len);
+ const result_data = try allocator.alloc(InternPool.Index, vec_len);
+ const scalar_ty = ty.scalarType(pt.zcu);
+ for (overflowed_data, result_data, 0..) |*of, *scalar, i| {
const lhs_elem = try lhs.elemValue(pt, i);
const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatDivScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
+ const of_math_result = try shlWithOverflowScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt);
+ of.* = of_math_result.overflow_bit.toIntern();
+ scalar.* = of_math_result.wrapped_result.toIntern();
}
- return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
- .storage = .{ .elems = result_data },
- } }));
+ return OverflowArithmeticResult{
+ .overflow_bit = Value.fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = (try pt.vectorType(.{ .len = vec_len, .child = .u1_type })).toIntern(),
+ .storage = .{ .elems = overflowed_data },
+ } })),
+ .wrapped_result = Value.fromInterned(try pt.intern(.{ .aggregate = .{
+ .ty = ty.toIntern(),
+ .storage = .{ .elems = result_data },
+ } })),
+ };
}
- return floatDivScalar(lhs, rhs, float_type, pt);
+ return shlWithOverflowScalar(lhs, rhs, ty, allocator, pt);
}
-pub fn floatDivScalar(
+pub fn shlWithOverflowScalar(
lhs: Value,
rhs: Value,
- float_type: Type,
+ ty: Type,
+ allocator: Allocator,
pt: Zcu.PerThread,
-) !Value {
+) !OverflowArithmeticResult {
const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = lhs.toFloat(f16, zcu) / rhs.toFloat(f16, zcu) },
- 32 => .{ .f32 = lhs.toFloat(f32, zcu) / rhs.toFloat(f32, zcu) },
- 64 => .{ .f64 = lhs.toFloat(f64, zcu) / rhs.toFloat(f64, zcu) },
- 80 => .{ .f80 = lhs.toFloat(f80, zcu) / rhs.toFloat(f80, zcu) },
- 128 => .{ .f128 = lhs.toFloat(f128, zcu) / rhs.toFloat(f128, zcu) },
- else => unreachable,
+ const info = ty.intInfo(zcu);
+ var lhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
+ const limbs = try allocator.alloc(
+ std.math.big.Limb,
+ lhs_bigint.limbs.len + (shift / (@sizeOf(std.math.big.Limb) * 8)) + 1,
+ );
+ var result_bigint = BigIntMutable{
+ .limbs = limbs,
+ .positive = undefined,
+ .len = undefined,
+ };
+ result_bigint.shiftLeft(lhs_bigint, shift);
+ const overflowed = !result_bigint.toConst().fitsInTwosComp(info.signedness, info.bits);
+ if (overflowed) {
+ result_bigint.truncate(result_bigint.toConst(), info.signedness, info.bits);
+ }
+ return OverflowArithmeticResult{
+ .overflow_bit = try pt.intValue(Type.u1, @intFromBool(overflowed)),
+ .wrapped_result = try pt.intValue_big(ty, result_bigint.toConst()),
};
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
}
-pub fn floatDivFloor(
+pub fn shlSat(
lhs: Value,
rhs: Value,
- float_type: Type,
+ ty: Type,
arena: Allocator,
pt: Zcu.PerThread,
) !Value {
- if (float_type.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(pt.zcu));
- const scalar_ty = float_type.scalarType(pt.zcu);
+ if (ty.zigTypeTag(pt.zcu) == .vector) {
+ const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
+ const scalar_ty = ty.scalarType(pt.zcu);
for (result_data, 0..) |*scalar, i| {
const lhs_elem = try lhs.elemValue(pt, i);
const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatDivFloorScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
+ scalar.* = (try shlSatScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
}
return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
+ .ty = ty.toIntern(),
.storage = .{ .elems = result_data },
} }));
}
- return floatDivFloorScalar(lhs, rhs, float_type, pt);
+ return shlSatScalar(lhs, rhs, ty, arena, pt);
}
-pub fn floatDivFloorScalar(
+pub fn shlSatScalar(
lhs: Value,
rhs: Value,
- float_type: Type,
+ ty: Type,
+ arena: Allocator,
pt: Zcu.PerThread,
) !Value {
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = @divFloor(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
- 32 => .{ .f32 = @divFloor(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
- 64 => .{ .f64 = @divFloor(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
- 80 => .{ .f80 = @divFloor(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
- 128 => .{ .f128 = @divFloor(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
- else => unreachable,
+ const info = ty.intInfo(zcu);
+
+ var lhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
+ const limbs = try arena.alloc(
+ std.math.big.Limb,
+ std.math.big.int.calcTwosCompLimbCount(info.bits) + 1,
+ );
+ var result_bigint = BigIntMutable{
+ .limbs = limbs,
+ .positive = undefined,
+ .len = undefined,
};
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
+ result_bigint.shiftLeftSat(lhs_bigint, shift, info.signedness, info.bits);
+ return pt.intValue_big(ty, result_bigint.toConst());
}
-pub fn floatDivTrunc(
+pub fn shlTrunc(
lhs: Value,
rhs: Value,
- float_type: Type,
+ ty: Type,
arena: Allocator,
pt: Zcu.PerThread,
) !Value {
- if (float_type.zigTypeTag(pt.zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(pt.zcu));
- const scalar_ty = float_type.scalarType(pt.zcu);
+ if (ty.zigTypeTag(pt.zcu) == .vector) {
+ const result_data = try arena.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
+ const scalar_ty = ty.scalarType(pt.zcu);
for (result_data, 0..) |*scalar, i| {
const lhs_elem = try lhs.elemValue(pt, i);
const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatDivTruncScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
+ scalar.* = (try shlTruncScalar(lhs_elem, rhs_elem, scalar_ty, arena, pt)).toIntern();
}
return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
+ .ty = ty.toIntern(),
.storage = .{ .elems = result_data },
} }));
}
- return floatDivTruncScalar(lhs, rhs, float_type, pt);
+ return shlTruncScalar(lhs, rhs, ty, arena, pt);
}
-pub fn floatDivTruncScalar(
+pub fn shlTruncScalar(
lhs: Value,
rhs: Value,
- float_type: Type,
+ ty: Type,
+ arena: Allocator,
pt: Zcu.PerThread,
) !Value {
- const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = @divTrunc(lhs.toFloat(f16, zcu), rhs.toFloat(f16, zcu)) },
- 32 => .{ .f32 = @divTrunc(lhs.toFloat(f32, zcu), rhs.toFloat(f32, zcu)) },
- 64 => .{ .f64 = @divTrunc(lhs.toFloat(f64, zcu), rhs.toFloat(f64, zcu)) },
- 80 => .{ .f80 = @divTrunc(lhs.toFloat(f80, zcu), rhs.toFloat(f80, zcu)) },
- 128 => .{ .f128 = @divTrunc(lhs.toFloat(f128, zcu), rhs.toFloat(f128, zcu)) },
- else => unreachable,
- };
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
+ const shifted = try lhs.shl(rhs, ty, arena, pt);
+ const int_info = ty.intInfo(pt.zcu);
+ const truncated = try shifted.intTrunc(ty, arena, int_info.signedness, int_info.bits, pt);
+ return truncated;
}
-pub fn floatMul(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- arena: Allocator,
- pt: Zcu.PerThread,
-) !Value {
- const zcu = pt.zcu;
- if (float_type.zigTypeTag(zcu) == .vector) {
- const result_data = try arena.alloc(InternPool.Index, float_type.vectorLen(zcu));
- const scalar_ty = float_type.scalarType(zcu);
+pub fn shr(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
+ if (ty.zigTypeTag(pt.zcu) == .vector) {
+ const result_data = try allocator.alloc(InternPool.Index, ty.vectorLen(pt.zcu));
+ const scalar_ty = ty.scalarType(pt.zcu);
for (result_data, 0..) |*scalar, i| {
const lhs_elem = try lhs.elemValue(pt, i);
const rhs_elem = try rhs.elemValue(pt, i);
- scalar.* = (try floatMulScalar(lhs_elem, rhs_elem, scalar_ty, pt)).toIntern();
+ scalar.* = (try shrScalar(lhs_elem, rhs_elem, scalar_ty, allocator, pt)).toIntern();
}
return Value.fromInterned(try pt.intern(.{ .aggregate = .{
- .ty = float_type.toIntern(),
+ .ty = ty.toIntern(),
.storage = .{ .elems = result_data },
} }));
}
- return floatMulScalar(lhs, rhs, float_type, pt);
+ return shrScalar(lhs, rhs, ty, allocator, pt);
}
-pub fn floatMulScalar(
- lhs: Value,
- rhs: Value,
- float_type: Type,
- pt: Zcu.PerThread,
-) !Value {
+pub fn shrScalar(lhs: Value, rhs: Value, ty: Type, allocator: Allocator, pt: Zcu.PerThread) !Value {
+ // TODO is this a performance issue? maybe we should try the operation without
+ // resorting to BigInt first.
const zcu = pt.zcu;
- const target = zcu.getTarget();
- const storage: InternPool.Key.Float.Storage = switch (float_type.floatBits(target)) {
- 16 => .{ .f16 = lhs.toFloat(f16, zcu) * rhs.toFloat(f16, zcu) },
- 32 => .{ .f32 = lhs.toFloat(f32, zcu) * rhs.toFloat(f32, zcu) },
- 64 => .{ .f64 = lhs.toFloat(f64, zcu) * rhs.toFloat(f64, zcu) },
- 80 => .{ .f80 = lhs.toFloat(f80, zcu) * rhs.toFloat(f80, zcu) },
- 128 => .{ .f128 = lhs.toFloat(f128, zcu) * rhs.toFloat(f128, zcu) },
- else => unreachable,
+ var lhs_space: Value.BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_space, zcu);
+ const shift: usize = @intCast(rhs.toUnsignedInt(zcu));
+
+ const result_limbs = lhs_bigint.limbs.len -| (shift / (@sizeOf(std.math.big.Limb) * 8));
+ if (result_limbs == 0) {
+ // The shift is enough to remove all the bits from the number, which means the
+ // result is 0 or -1 depending on the sign.
+ if (lhs_bigint.positive) {
+ return pt.intValue(ty, 0);
+ } else {
+ return pt.intValue(ty, -1);
+ }
+ }
+
+ const limbs = try allocator.alloc(
+ std.math.big.Limb,
+ result_limbs,
+ );
+ var result_bigint = BigIntMutable{
+ .limbs = limbs,
+ .positive = undefined,
+ .len = undefined,
};
- return Value.fromInterned(try pt.intern(.{ .float = .{
- .ty = float_type.toIntern(),
- .storage = storage,
- } }));
+ result_bigint.shiftRight(lhs_bigint, shift);
+ return pt.intValue_big(ty, result_bigint.toConst());
}
pub fn sqrt(val: Value, float_type: Type, arena: Allocator, pt: Zcu.PerThread) !Value {
@@ -4805,3 +4039,29 @@ pub fn doPointersOverlap(ptr_val_a: Value, ptr_val_b: Value, elem_count: u64, zc
return bytes_diff < need_bytes_diff;
}
}
+
+/// `lhs` and `rhs` are both scalar numeric values (int or float).
+/// Supports comparisons between heterogeneous types.
+/// If `lhs` or `rhs` is undef, returns `false`.
+pub fn eqlScalarNum(lhs: Value, rhs: Value, zcu: *Zcu) bool {
+ if (lhs.isUndef(zcu)) return false;
+ if (rhs.isUndef(zcu)) return false;
+
+ if (lhs.isFloat(zcu) or rhs.isFloat(zcu)) {
+ const lhs_f128 = lhs.toFloat(f128, zcu);
+ const rhs_f128 = rhs.toFloat(f128, zcu);
+ return lhs_f128 == rhs_f128;
+ }
+
+ if (lhs.getUnsignedInt(zcu)) |lhs_u64| {
+ if (rhs.getUnsignedInt(zcu)) |rhs_u64| {
+ return lhs_u64 == rhs_u64;
+ }
+ }
+
+ var lhs_bigint_space: BigIntSpace = undefined;
+ var rhs_bigint_space: BigIntSpace = undefined;
+ const lhs_bigint = lhs.toBigInt(&lhs_bigint_space, zcu);
+ const rhs_bigint = rhs.toBigInt(&rhs_bigint_space, zcu);
+ return lhs_bigint.eql(rhs_bigint);
+}
src/Zcu.zig
@@ -1716,9 +1716,25 @@ pub const SrcLoc = struct {
const node = node_off.toAbsolute(src_loc.base_node);
switch (tree.nodeTag(node)) {
- .assign => {
- return tree.nodeToSpan(tree.nodeData(node).node_and_node[0]);
- },
+ .assign,
+ .assign_mul,
+ .assign_div,
+ .assign_mod,
+ .assign_add,
+ .assign_sub,
+ .assign_shl,
+ .assign_shl_sat,
+ .assign_shr,
+ .assign_bit_and,
+ .assign_bit_xor,
+ .assign_bit_or,
+ .assign_mul_wrap,
+ .assign_add_wrap,
+ .assign_sub_wrap,
+ .assign_mul_sat,
+ .assign_add_sat,
+ .assign_sub_sat,
+ => return tree.nodeToSpan(tree.nodeData(node).node_and_node[0]),
else => return tree.nodeToSpan(node),
}
},
@@ -1727,9 +1743,25 @@ pub const SrcLoc = struct {
const node = node_off.toAbsolute(src_loc.base_node);
switch (tree.nodeTag(node)) {
- .assign => {
- return tree.nodeToSpan(tree.nodeData(node).node_and_node[1]);
- },
+ .assign,
+ .assign_mul,
+ .assign_div,
+ .assign_mod,
+ .assign_add,
+ .assign_sub,
+ .assign_shl,
+ .assign_shl_sat,
+ .assign_shr,
+ .assign_bit_and,
+ .assign_bit_xor,
+ .assign_bit_or,
+ .assign_mul_wrap,
+ .assign_add_wrap,
+ .assign_sub_wrap,
+ .assign_mul_sat,
+ .assign_add_sat,
+ .assign_sub_sat,
+ => return tree.nodeToSpan(tree.nodeData(node).node_and_node[1]),
else => return tree.nodeToSpan(node),
}
},
@@ -2209,9 +2241,9 @@ pub const LazySrcLoc = struct {
node_offset_field_default: Ast.Node.Offset,
/// The source location points to the type of an array or struct initializer.
node_offset_init_ty: Ast.Node.Offset,
- /// The source location points to the LHS of an assignment.
+ /// The source location points to the LHS of an assignment (or assign-op, e.g. `+=`).
node_offset_store_ptr: Ast.Node.Offset,
- /// The source location points to the RHS of an assignment.
+ /// The source location points to the RHS of an assignment (or assign-op, e.g. `+=`).
node_offset_store_operand: Ast.Node.Offset,
/// The source location points to the operand of a `return` statement, or
/// the `return` itself if there is no explicit operand.
test/behavior/x86_64/math.zig
@@ -21685,20 +21685,7 @@ test mulUnsafe {
}
inline fn multiply(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(lhs * rhs) {
- if (@inComptime() and @typeInfo(Type) == .vector) {
- // workaround https://github.com/ziglang/zig/issues/22743
- // TODO: return @select(Scalar(Type), boolAnd(lhs == lhs, rhs == rhs), lhs * rhs, lhs + rhs);
- // workaround https://github.com/ziglang/zig/issues/22744
- var res: Type = undefined;
- for (0..@typeInfo(Type).vector.len) |i| res[i] = lhs[i] * rhs[i];
- return res;
- }
- // workaround https://github.com/ziglang/zig/issues/22745
- // TODO: return lhs * rhs;
- var rt_lhs = lhs;
- var rt_rhs = rhs;
- _ = .{ &rt_lhs, &rt_rhs };
- return rt_lhs * rt_rhs;
+ return lhs * rhs;
}
test multiply {
const test_multiply = binary(multiply, .{});
@@ -21715,24 +21702,8 @@ test divide {
try test_divide.testFloatVectors();
}
-inline fn divTrunc(comptime Type: type, lhs: Type, rhs: Type) Type {
- switch (@typeInfo(Scalar(Type))) {
- else => @compileError(@typeName(Type)),
- .int => return @divTrunc(lhs, rhs),
- .float => {
- if (@inComptime()) {
- // workaround https://github.com/ziglang/zig/issues/22748
- return @trunc(lhs / rhs);
- }
- // workaround https://github.com/ziglang/zig/issues/22748
- // workaround https://github.com/ziglang/zig/issues/22749
- // TODO: return @divTrunc(lhs, rhs);
- var rt_lhs = lhs;
- var rt_rhs = rhs;
- _ = .{ &rt_lhs, &rt_rhs };
- return @divTrunc(rt_lhs, rt_rhs);
- },
- }
+inline fn divTrunc(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(@divTrunc(lhs, rhs)) {
+ return @divTrunc(lhs, rhs);
}
test divTrunc {
const test_div_trunc = binary(divTrunc, .{ .compare = .approx_int });
@@ -21742,24 +21713,8 @@ test divTrunc {
try test_div_trunc.testFloatVectors();
}
-inline fn divFloor(comptime Type: type, lhs: Type, rhs: Type) Type {
- switch (@typeInfo(Scalar(Type))) {
- else => @compileError(@typeName(Type)),
- .int => return @divFloor(lhs, rhs),
- .float => {
- if (@inComptime()) {
- // workaround https://github.com/ziglang/zig/issues/22748
- return @floor(lhs / rhs);
- }
- // workaround https://github.com/ziglang/zig/issues/22748
- // workaround https://github.com/ziglang/zig/issues/22749
- // TODO: return @divFloor(lhs, rhs);
- var rt_lhs = lhs;
- var rt_rhs = rhs;
- _ = .{ &rt_lhs, &rt_rhs };
- return @divFloor(rt_lhs, rt_rhs);
- },
- }
+inline fn divFloor(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(@divFloor(lhs, rhs)) {
+ return @divFloor(lhs, rhs);
}
test divFloor {
const test_div_floor = binary(divFloor, .{ .compare = .approx_int });
@@ -21767,31 +21722,8 @@ test divFloor {
try test_div_floor.testFloatVectors();
}
-// workaround https://github.com/ziglang/zig/issues/22748
-// TODO: @TypeOf(@rem(lhs, rhs))
-inline fn rem(comptime Type: type, lhs: Type, rhs: Type) Type {
- switch (@typeInfo(Scalar(Type))) {
- else => @compileError(@typeName(Type)),
- .int => return @rem(lhs, rhs),
- .float => {
- if (@inComptime()) {
- // workaround https://github.com/ziglang/zig/issues/22748
- switch (@typeInfo(Type)) {
- else => return if (rhs != 0) @rem(lhs, rhs) else nan(Type),
- .vector => |info| {
- var res: Type = undefined;
- inline for (0..info.len) |i| res[i] = if (rhs[i] != 0) @rem(lhs[i], rhs[i]) else nan(Scalar(Type));
- return res;
- },
- }
- }
- // workaround https://github.com/ziglang/zig/issues/22748
- // TODO: return @rem(lhs, rhs);
- var rt_rhs = rhs;
- _ = &rt_rhs;
- return @rem(lhs, rt_rhs);
- },
- }
+inline fn rem(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(@rem(lhs, rhs)) {
+ return @rem(lhs, rhs);
}
test rem {
const test_rem = binary(rem, .{});
@@ -21801,25 +21733,16 @@ test rem {
try test_rem.testFloatVectors();
}
-inline fn mod(comptime Type: type, lhs: Type, rhs: Type) Type {
+inline fn mod(comptime Type: type, lhs: Type, rhs: Type) @TypeOf(@mod(lhs, rhs)) {
+ // workaround llvm backend bugs
if (@inComptime()) {
const scalarMod = struct {
fn scalarMod(scalar_lhs: Scalar(Type), scalar_rhs: Scalar(Type)) Scalar(Type) {
- // workaround https://github.com/ziglang/zig/issues/22748
- if (scalar_rhs == 0) return nan(Scalar(Type));
const scalar_rem = @rem(scalar_lhs, scalar_rhs);
return if (scalar_rem == 0 or math.signbit(scalar_rem) == math.signbit(scalar_rhs)) scalar_rem else scalar_rem + scalar_rhs;
}
}.scalarMod;
- // workaround https://github.com/ziglang/zig/issues/22748
switch (@typeInfo(Type)) {
- // workaround llvm backend bugs
- // TODO: else => return if (rhs != 0) @mod(lhs, rhs) else nan(Type),
- // TODO: .vector => |info| {
- // TODO: var res: Type = undefined;
- // TODO: inline for (0..info.len) |i| res[i] = if (rhs[i] != 0) @mod(lhs[i], rhs[i]) else nan(Scalar(Type));
- // TODO: return res;
- // TODO: },
else => return scalarMod(lhs, rhs),
.vector => |info| {
var res: Type = undefined;
@@ -21828,11 +21751,7 @@ inline fn mod(comptime Type: type, lhs: Type, rhs: Type) Type {
},
}
}
- // workaround https://github.com/ziglang/zig/issues/22748
- // TODO: return @mod(lhs, rhs);
- var rt_rhs = rhs;
- _ = &rt_rhs;
- return @mod(lhs, rt_rhs);
+ return @mod(lhs, rhs);
}
test mod {
const test_mod = binary(mod, .{});
test/behavior/floatop.zig
@@ -1696,10 +1696,6 @@ test "comptime fixed-width float non-zero divided by zero produces signed Inf" {
}
}
-test "comptime_float zero divided by zero produces zero" {
- try expect((0.0 / 0.0) == 0.0);
-}
-
test "comptime float compared with runtime int" {
const f = 10.0;
var i: usize = 0;
test/behavior/math.zig
@@ -1265,12 +1265,6 @@ test "allow signed integer division/remainder when values are comptime-known and
try expect(5 % 3 == 2);
try expect(-6 % 3 == 0);
-
- var undef: i32 = undefined;
- _ = &undef;
- if (0 % undef != 0) {
- @compileError("0 as numerator should return comptime zero independent of denominator");
- }
}
test "quad hex float literal parsing accurate" {
@@ -1861,3 +1855,134 @@ test "runtime int comparison to inf is comptime-known" {
comptime S.doTheTest(f64, 123);
comptime S.doTheTest(f128, 123);
}
+
+test "float divide by zero" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
+
+ const S = struct {
+ fn doTheTest(comptime F: type, zero: F, one: F) !void {
+ try expect(math.isPositiveInf(@divTrunc(one, zero)));
+ try expect(math.isPositiveInf(@divFloor(one, zero)));
+
+ try expect(math.isNan(@rem(one, zero)));
+ try expect(math.isNan(@mod(one, zero)));
+ }
+ };
+
+ try S.doTheTest(f16, 0, 1);
+ comptime S.doTheTest(f16, 0, 1) catch unreachable;
+
+ try S.doTheTest(f32, 0, 1);
+ comptime S.doTheTest(f32, 0, 1) catch unreachable;
+
+ try S.doTheTest(f64, 0, 1);
+ comptime S.doTheTest(f64, 0, 1) catch unreachable;
+
+ try S.doTheTest(f80, 0, 1);
+ comptime S.doTheTest(f80, 0, 1) catch unreachable;
+
+ try S.doTheTest(f128, 0, 1);
+ comptime S.doTheTest(f128, 0, 1) catch unreachable;
+}
+
+test "partially-runtime integer vector division would be illegal if vector elements were reordered" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+
+ var lhs: @Vector(2, i8) = .{ -128, 5 };
+ const rhs: @Vector(2, i8) = .{ 1, -1 };
+
+ const expected: @Vector(2, i8) = .{ -128, -5 };
+
+ lhs = lhs; // suppress error
+
+ const trunc = @divTrunc(lhs, rhs);
+ try expect(trunc[0] == expected[0]);
+ try expect(trunc[1] == expected[1]);
+
+ const floor = @divFloor(lhs, rhs);
+ try expect(floor[0] == expected[0]);
+ try expect(floor[1] == expected[1]);
+
+ const exact = @divExact(lhs, rhs);
+ try expect(exact[0] == expected[0]);
+ try expect(exact[1] == expected[1]);
+}
+
+test "float vector division of comptime zero by runtime nan is nan" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf and builtin.target.ofmt != .macho) return error.SkipZigTest;
+
+ const ct_zero: @Vector(1, f32) = .{0};
+ var rt_nan: @Vector(1, f32) = .{math.nan(f32)};
+
+ rt_nan = rt_nan; // suppress error
+
+ try expect(math.isNan((@divTrunc(ct_zero, rt_nan))[0]));
+ try expect(math.isNan((@divFloor(ct_zero, rt_nan))[0]));
+ try expect(math.isNan((ct_zero / rt_nan)[0]));
+}
+
+test "float vector multiplication of comptime zero by runtime nan is nan" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+
+ const ct_zero: @Vector(1, f32) = .{0};
+ var rt_nan: @Vector(1, f32) = .{math.nan(f32)};
+
+ rt_nan = rt_nan; // suppress error
+
+ try expect(math.isNan((ct_zero * rt_nan)[0]));
+ try expect(math.isNan((rt_nan * ct_zero)[0]));
+}
+
+test "comptime float vector division of zero by nan is nan" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+
+ const ct_zero: @Vector(1, f32) = .{0};
+ const ct_nan: @Vector(1, f32) = .{math.nan(f32)};
+
+ comptime assert(math.isNan((@divTrunc(ct_zero, ct_nan))[0]));
+ comptime assert(math.isNan((@divFloor(ct_zero, ct_nan))[0]));
+ comptime assert(math.isNan((ct_zero / ct_nan)[0]));
+}
+
+test "comptime float vector multiplication of zero by nan is nan" {
+ if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest;
+ if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
+
+ const ct_zero: @Vector(1, f32) = .{0};
+ const ct_nan: @Vector(1, f32) = .{math.nan(f32)};
+
+ comptime assert(math.isNan((ct_zero * ct_nan)[0]));
+ comptime assert(math.isNan((ct_nan * ct_zero)[0]));
+}
test/behavior/vector.zig
@@ -1316,6 +1316,8 @@ test "zero multiplicand" {
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_riscv64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
const zeros = @Vector(2, u32){ 0.0, 0.0 };
var ones = @Vector(2, u32){ 1.0, 1.0 };
test/cases/compile_errors/add_assign_on_undefined_value.zig
@@ -4,7 +4,5 @@ comptime {
}
// error
-// backend=stage2
-// target=native
//
-// :3:10: error: use of undefined value here causes undefined behavior
+// :3:5: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/add_on_undefined_value.zig
@@ -1,24 +0,0 @@
-comptime {
- const undef: i64 = undefined;
- const not_undef: i64 = 32;
-
- // If either of the operands are zero, then the other operand is returned.
- @compileLog(undef + 0);
- @compileLog(not_undef + 0);
- @compileLog(0 + undef);
- @compileLog(0 + not_undef);
-
- _ = undef + undef;
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :11:17: error: use of undefined value here causes undefined behavior
-//
-// Compile Log Output:
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, 32)
test/cases/compile_errors/assign_to_constant_destructure.zig
@@ -9,7 +9,5 @@ export fn a() void {
}
// error
-// backend=stage2
-// target=native
//
-// :8:7: error: cannot assign to constant
+// :8:5: error: cannot assign to constant
test/cases/compile_errors/assign_to_constant_variable.zig
@@ -72,24 +72,22 @@ export fn entry18() void {
}
// error
-// backend=stage2
-// target=native
//
// :3:5: error: cannot assign to constant
-// :7:7: error: cannot assign to constant
-// :11:7: error: cannot assign to constant
-// :15:7: error: cannot assign to constant
-// :19:7: error: cannot assign to constant
-// :23:7: error: cannot assign to constant
-// :27:7: error: cannot assign to constant
-// :31:7: error: cannot assign to constant
-// :35:7: error: cannot assign to constant
-// :39:7: error: cannot assign to constant
-// :43:7: error: cannot assign to constant
-// :47:7: error: cannot assign to constant
-// :51:7: error: cannot assign to constant
-// :55:7: error: cannot assign to constant
-// :59:7: error: cannot assign to constant
-// :63:7: error: cannot assign to constant
-// :67:7: error: cannot assign to constant
-// :71:7: error: cannot assign to constant
+// :7:5: error: cannot assign to constant
+// :11:5: error: cannot assign to constant
+// :15:5: error: cannot assign to constant
+// :19:5: error: cannot assign to constant
+// :23:5: error: cannot assign to constant
+// :27:5: error: cannot assign to constant
+// :31:5: error: cannot assign to constant
+// :35:5: error: cannot assign to constant
+// :39:5: error: cannot assign to constant
+// :43:5: error: cannot assign to constant
+// :47:5: error: cannot assign to constant
+// :51:5: error: cannot assign to constant
+// :55:5: error: cannot assign to constant
+// :59:5: error: cannot assign to constant
+// :63:5: error: cannot assign to constant
+// :67:5: error: cannot assign to constant
+// :71:5: error: cannot assign to constant
test/cases/compile_errors/comptime_vector_overflow_shows_the_index.zig
@@ -6,8 +6,6 @@ comptime {
}
// error
-// backend=stage2
-// target=native
//
-// :4:15: error: overflow of vector type '@Vector(4, u8)' with value '.{ 6, 8, 256, 12 }'
+// :4:15: error: overflow of integer type 'u8' with value '256'
// :4:15: note: when computing vector element at index '2'
test/cases/compile_errors/div_assign_on_undefined_value.zig
@@ -4,7 +4,5 @@ comptime {
}
// error
-// backend=stage2
-// target=native
//
-// :3:10: error: use of undefined value here causes undefined behavior
+// :3:5: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/div_on_undefined_value.zig
@@ -1,11 +0,0 @@
-comptime {
- var a: i64 = undefined;
- _ = a / a;
- _ = &a;
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :3:13: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/mult_assign_on_undefined_value.zig
@@ -4,7 +4,5 @@ comptime {
}
// error
-// backend=stage2
-// target=native
//
-// :3:10: error: use of undefined value here causes undefined behavior
+// :3:5: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/mult_on_undefined_value.zig
@@ -1,38 +0,0 @@
-comptime {
- const undef: i64 = undefined;
- const not_undef: i64 = 32;
-
- // If either of the operands are zero, the result is zero.
- @compileLog(undef * 0);
- @compileLog(not_undef * 0);
- @compileLog(0 * undef);
- @compileLog(0 * not_undef);
-
- // If either of the operands are one, the result is the other
- // operand, even if it is undefined.
- @compileLog(undef * 1);
- @compileLog(not_undef * 1);
- @compileLog(1 * undef);
- @compileLog(1 * not_undef);
-
- // If either of the operands are undefined, it's a compile error
- // because there is a possible value for which the addition would
- // overflow (max_int), causing illegal behavior.
- _ = undef * undef;
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :21:17: error: use of undefined value here causes undefined behavior
-//
-// Compile Log Output:
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, 32)
test/cases/compile_errors/mult_sat_on_undefined_value.zig
@@ -1,38 +0,0 @@
-comptime {
- const undef: i64 = undefined;
- const not_undef: i64 = 32;
-
- // If either of the operands are zero, the result is zero.
- @compileLog(undef *| 0);
- @compileLog(not_undef *| 0);
- @compileLog(0 *| undef);
- @compileLog(0 *| not_undef);
-
- // If either of the operands are one, result is the other operand.
- @compileLog(undef *| 1);
- @compileLog(not_undef *| 1);
- @compileLog(1 *| undef);
- @compileLog(1 *| not_undef);
-
- // If either of the operands are undefined, result is undefined.
- @compileLog(undef *| 2);
- @compileLog(2 *| undef);
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :6:5: error: found compile log statement
-//
-// Compile Log Output:
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, undefined)
test/cases/compile_errors/mult_wrap_on_undefined_value.zig
@@ -1,38 +0,0 @@
-comptime {
- const undef: i64 = undefined;
- const not_undef: i64 = 32;
-
- // If either of the operands are zero, the result is zero.
- @compileLog(undef *% 0);
- @compileLog(not_undef *% 0);
- @compileLog(0 *% undef);
- @compileLog(0 *% not_undef);
-
- // If either of the operands are one, result is the other operand.
- @compileLog(undef *% 1);
- @compileLog(not_undef *% 1);
- @compileLog(1 *% undef);
- @compileLog(1 *% not_undef);
-
- // If either of the operands are undefined, result is undefined.
- @compileLog(undef *% 2);
- @compileLog(2 *% undef);
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :6:5: error: found compile log statement
-//
-// Compile Log Output:
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, 0)
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, 32)
-// @as(i64, undefined)
-// @as(i64, undefined)
test/cases/compile_errors/non-pure_function_returns_type.zig
@@ -18,8 +18,6 @@ export fn function_with_return_type_type() void {
}
// error
-// backend=stage2
-// target=native
//
// :3:7: error: unable to evaluate comptime expression
// :3:5: note: operation is runtime due to this operand
test/cases/compile_errors/signed_integer_remainder_division.zig
@@ -3,7 +3,5 @@ export fn foo(a: i32, b: i32) i32 {
}
// error
-// backend=stage2
-// target=native
//
// :2:12: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod
test/cases/compile_errors/specify_enum_tag_type_that_is_too_small.zig
@@ -6,12 +6,21 @@ const Small = enum(u2) {
Five,
};
-export fn entry() void {
- _ = Small.One;
+const SmallUnion = union(enum(u2)) {
+ one = 1,
+ two,
+ three,
+ four,
+};
+
+comptime {
+ _ = Small;
+}
+comptime {
+ _ = SmallUnion;
}
// error
-// backend=stage2
-// target=native
//
// :6:5: error: enumeration value '4' too large for type 'u2'
+// :13:5: error: enumeration value '4' too large for type 'u2'
test/cases/compile_errors/sub_assign_on_undefined_value.zig
@@ -4,7 +4,5 @@ comptime {
}
// error
-// backend=stage2
-// target=native
//
-// :3:10: error: use of undefined value here causes undefined behavior
+// :3:5: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/sub_on_undefined_value.zig
@@ -1,20 +0,0 @@
-comptime {
- const undef: i64 = undefined;
- const not_undef: i64 = 32;
-
- // If the rhs is zero, then the other operand is returned, even if it is undefined.
- @compileLog(undef - 0);
- @compileLog(not_undef - 0);
-
- _ = undef - undef;
-}
-
-// error
-// backend=stage2
-// target=native
-//
-// :9:17: error: use of undefined value here causes undefined behavior
-//
-// Compile Log Output:
-// @as(i64, undefined)
-// @as(i64, 32)
test/cases/compile_errors/unable_to_evaluate_expr_inside_cimport.zig
@@ -1,5 +1,5 @@
const c = @cImport({
- _ = 1 + foo;
+ if (foo == 0) {}
});
extern var foo: i32;
export fn entry() void {
@@ -7,9 +7,7 @@ export fn entry() void {
}
// error
-// backend=stage2
-// target=native
//
-// :2:11: error: unable to evaluate comptime expression
-// :2:13: note: operation is runtime due to this operand
+// :2:13: error: unable to evaluate comptime expression
+// :2:9: note: operation is runtime due to this operand
// :1:11: note: operand to '@cImport' is evaluated at comptime
test/cases/compile_errors/undef_arith_is_illegal.zig
@@ -0,0 +1,6885 @@
+//! For arithmetic operations which can trigger Illegal Behavior, this test evaluates those
+//! operations with undefined operands (or partially-undefined vector operands), and ensures that a
+//! compile error is emitted as expected.
+
+comptime {
+ // Total expected errors:
+ // 29*22*6 + 26*22*5 = 6688
+
+ testType(u8);
+ testType(i8);
+ testType(u32);
+ testType(i32);
+ testType(u500);
+ testType(i500);
+
+ testType(f16);
+ testType(f32);
+ testType(f64);
+ testType(f80);
+ testType(f128);
+}
+
+fn testType(comptime Scalar: type) void {
+ testInner(Scalar, undefined, 1);
+ testInner(Scalar, undefined, undefined);
+ testInner(@Vector(2, Scalar), undefined, undefined);
+ testInner(@Vector(2, Scalar), undefined, .{ 1, 2 });
+ testInner(@Vector(2, Scalar), undefined, .{ 1, undefined });
+ testInner(@Vector(2, Scalar), undefined, .{ undefined, 2 });
+ testInner(@Vector(2, Scalar), undefined, .{ undefined, undefined });
+ testInner(@Vector(2, Scalar), .{ 1, undefined }, undefined);
+ testInner(@Vector(2, Scalar), .{ 1, undefined }, .{ 1, 2 });
+ testInner(@Vector(2, Scalar), .{ 1, undefined }, .{ 1, undefined });
+ testInner(@Vector(2, Scalar), .{ 1, undefined }, .{ undefined, 2 });
+ testInner(@Vector(2, Scalar), .{ 1, undefined }, .{ undefined, undefined });
+ testInner(@Vector(2, Scalar), .{ undefined, 2 }, undefined);
+ testInner(@Vector(2, Scalar), .{ undefined, 2 }, .{ 1, 2 });
+ testInner(@Vector(2, Scalar), .{ undefined, 2 }, .{ 1, undefined });
+ testInner(@Vector(2, Scalar), .{ undefined, 2 }, .{ undefined, 2 });
+ testInner(@Vector(2, Scalar), .{ undefined, 2 }, .{ undefined, undefined });
+ testInner(@Vector(2, Scalar), .{ undefined, undefined }, undefined);
+ testInner(@Vector(2, Scalar), .{ undefined, undefined }, .{ 1, 2 });
+ testInner(@Vector(2, Scalar), .{ undefined, undefined }, .{ 1, undefined });
+ testInner(@Vector(2, Scalar), .{ undefined, undefined }, .{ undefined, 2 });
+ testInner(@Vector(2, Scalar), .{ undefined, undefined }, .{ undefined, undefined });
+}
+
+/// At the time of writing, this is expected to trigger:
+/// * 26 errors if `T` is a float (or vector of floats)
+/// * 29 errors if `T` is an int (or vector of ints)
+fn testInner(comptime T: type, comptime u: T, comptime maybe_defined: T) void {
+ const Scalar = switch (@typeInfo(T)) {
+ .float, .int => T,
+ .vector => |v| v.child,
+ else => unreachable,
+ };
+
+ const mode: std.builtin.FloatMode = switch (@typeInfo(Scalar)) {
+ .float => .optimized,
+ .int => .strict, // it shouldn't matter
+ else => unreachable,
+ };
+
+ _ = struct {
+ const a: T = maybe_defined;
+ var b: T = maybe_defined;
+
+ // undef LHS, comptime-known LHS
+ comptime {
+ @setFloatMode(mode);
+ _ = u / a;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divFloor(u, a);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divTrunc(u, a);
+ }
+ comptime {
+ // Don't need to set float mode, because this can be IB anyway
+ _ = @divExact(u, a);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = u % a;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @mod(u, a);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @rem(u, a);
+ }
+
+ // undef LHS, runtime-known LHS
+ comptime {
+ @setFloatMode(mode);
+ _ = u / b;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divFloor(u, b);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divTrunc(u, b);
+ }
+ comptime {
+ // Don't need to set float mode, because this can be IB anyway
+ _ = @divExact(u, b);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @mod(u, b);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @rem(u, b);
+ }
+
+ // undef RHS, comptime-known LHS
+ comptime {
+ @setFloatMode(mode);
+ _ = a / u;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divFloor(a, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divTrunc(a, u);
+ }
+ comptime {
+ // Don't need to set float mode, because this can be IB anyway
+ _ = @divExact(a, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = a % u;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @mod(a, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @rem(a, u);
+ }
+
+ // undef RHS, runtime-known LHS
+ comptime {
+ @setFloatMode(mode);
+ _ = b / u;
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divFloor(b, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @divTrunc(b, u);
+ }
+ comptime {
+ // Don't need to set float mode, because this can be IB anyway
+ _ = @divExact(b, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @mod(b, u);
+ }
+ comptime {
+ @setFloatMode(mode);
+ _ = @rem(b, u);
+ }
+
+ // The following tests should only fail for integer types.
+
+ comptime {
+ _ = u + a;
+ }
+ comptime {
+ _ = u - a;
+ }
+ comptime {
+ _ = u * a;
+ }
+ };
+}
+
+const std = @import("std");
+
+// error
+//
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:17: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :71:21: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:27: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :75:30: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:27: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :79:30: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:27: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :83:30: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:17: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :87:21: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:22: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :91:25: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:22: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :95:25: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :101:17: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :105:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :109:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :113:27: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :117:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :121:22: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:17: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :127:21: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:27: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :131:30: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:27: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :135:30: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:27: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :139:30: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:17: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :143:21: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:22: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :147:25: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:22: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :151:25: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :157:21: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :161:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :165:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :169:30: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :173:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :177:25: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:17: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :183:21: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:17: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :186:21: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:17: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
+// :189:21: error: use of undefined value here causes undefined behavior
test/cases/compile_errors/undef_arith_returns_undef.zig
@@ -0,0 +1,2047 @@
+//! For arithmetic operations which cannot trigger Illegal Behavior, this test evaluates those
+//! operations with undefined operands (or partially-undefined vector operands), and then uses
+//! `@compileLog` to validate the results are as expected in terms of comptime-known undefined.
+
+export fn entry() void {
+ testInt(u8);
+ testInt(i8);
+ testInt(u32);
+ testInt(i32);
+ testInt(u500);
+ testInt(i500);
+
+ testFloat(f16);
+ testFloat(f32);
+ testFloat(f64);
+ testFloat(f80);
+ testFloat(f128);
+}
+
+fn testInt(comptime Int: type) void {
+ testIntWithValue(Int, 3); // all comptime-known
+ testIntWithValue(Int, struct {
+ var rt: Int = 0;
+ }.rt); // partially runtime-known
+}
+
+fn testFloat(comptime Float: type) void {
+ testFloatWithValue(Float, 3.0); // all comptime-known
+ testFloatWithValue(Float, struct {
+ var rt: Float = 0.0;
+ }.rt); // partially runtime-known
+}
+
+inline fn testIntWithValue(comptime Int: type, x: Int) void {
+ const V = @Vector(2, Int);
+ const u: Int = undefined;
+
+ // Wrapping addition
+
+ @compileLog(x +% u); // undef
+ @compileLog(u +% x); // undef
+
+ @compileLog(V{ x, u } +% V{ x, x }); // { 6, undef }
+ @compileLog(V{ u, x } +% V{ x, x }); // { undef, 6 }
+ @compileLog(V{ u, u } +% V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } +% V{ x, u }); // { 6, undef }
+ @compileLog(V{ x, u } +% V{ x, u }); // { 6, undef }
+ @compileLog(V{ u, x } +% V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } +% V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } +% V{ u, x }); // { undef, 6 }
+ @compileLog(V{ x, u } +% V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } +% V{ u, x }); // { undef, 6 }
+ @compileLog(V{ u, u } +% V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } +% V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } +% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } +% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } +% V{ u, u }); // { undef, undef }
+
+ // Saturating addition
+
+ @compileLog(x +| u); // undef
+ @compileLog(u +| x); // undef
+
+ @compileLog(V{ x, u } +| V{ x, x }); // { 6, undef }
+ @compileLog(V{ u, x } +| V{ x, x }); // { undef, 6 }
+ @compileLog(V{ u, u } +| V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } +| V{ x, u }); // { 6, undef }
+ @compileLog(V{ x, u } +| V{ x, u }); // { 6, undef }
+ @compileLog(V{ u, x } +| V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } +| V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } +| V{ u, x }); // { undef, 6 }
+ @compileLog(V{ x, u } +| V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } +| V{ u, x }); // { undef, 6 }
+ @compileLog(V{ u, u } +| V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } +| V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } +| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } +| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } +| V{ u, u }); // { undef, undef }
+
+ // Wrapping subtraction
+
+ @compileLog(x -% u); // undef
+ @compileLog(u -% x); // undef
+
+ @compileLog(V{ x, u } -% V{ x, x }); // { 0, undef }
+ @compileLog(V{ u, x } -% V{ x, x }); // { undef, 0 }
+ @compileLog(V{ u, u } -% V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } -% V{ x, u }); // { 0, undef }
+ @compileLog(V{ x, u } -% V{ x, u }); // { 0, undef }
+ @compileLog(V{ u, x } -% V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } -% V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } -% V{ u, x }); // { undef, 0 }
+ @compileLog(V{ x, u } -% V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } -% V{ u, x }); // { undef, 0 }
+ @compileLog(V{ u, u } -% V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } -% V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } -% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } -% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } -% V{ u, u }); // { undef, undef }
+
+ // Saturating subtraction
+
+ @compileLog(x -| u); // undef
+ @compileLog(u -| x); // undef
+
+ @compileLog(V{ x, u } -| V{ x, x }); // { 0, undef }
+ @compileLog(V{ u, x } -| V{ x, x }); // { undef, 0 }
+ @compileLog(V{ u, u } -| V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } -| V{ x, u }); // { 0, undef }
+ @compileLog(V{ x, u } -| V{ x, u }); // { 0, undef }
+ @compileLog(V{ u, x } -| V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } -| V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } -| V{ u, x }); // { undef, 0 }
+ @compileLog(V{ x, u } -| V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } -| V{ u, x }); // { undef, 0 }
+ @compileLog(V{ u, u } -| V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } -| V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } -| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } -| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } -| V{ u, u }); // { undef, undef }
+
+ // Wrapping multiplication
+
+ @compileLog(x *% u); // undef
+ @compileLog(u *% x); // undef
+
+ @compileLog(V{ x, u } *% V{ x, x }); // { 9, undef }
+ @compileLog(V{ u, x } *% V{ x, x }); // { undef, 9 }
+ @compileLog(V{ u, u } *% V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } *% V{ x, u }); // { 9, undef }
+ @compileLog(V{ x, u } *% V{ x, u }); // { 9, undef }
+ @compileLog(V{ u, x } *% V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } *% V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } *% V{ u, x }); // { undef, 9 }
+ @compileLog(V{ x, u } *% V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } *% V{ u, x }); // { undef, 9 }
+ @compileLog(V{ u, u } *% V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } *% V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } *% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } *% V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } *% V{ u, u }); // { undef, undef }
+
+ // Saturating multiplication
+
+ @compileLog(x *| u); // undef
+ @compileLog(u *| x); // undef
+
+ @compileLog(V{ x, u } *| V{ x, x }); // { 9, undef }
+ @compileLog(V{ u, x } *| V{ x, x }); // { undef, 9 }
+ @compileLog(V{ u, u } *| V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } *| V{ x, u }); // { 9, undef }
+ @compileLog(V{ x, u } *| V{ x, u }); // { 9, undef }
+ @compileLog(V{ u, x } *| V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } *| V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } *| V{ u, x }); // { undef, 9 }
+ @compileLog(V{ x, u } *| V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } *| V{ u, x }); // { undef, 9 }
+ @compileLog(V{ u, u } *| V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } *| V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } *| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } *| V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } *| V{ u, u }); // { undef, undef }
+}
+
+inline fn testFloatWithValue(comptime Float: type, x: Float) void {
+ const V = @Vector(2, Float);
+ const u: Float = undefined;
+
+ // Addition
+
+ @compileLog(x + u); // undef
+ @compileLog(u + x); // undef
+
+ @compileLog(V{ x, u } + V{ x, x }); // { 6, undef }
+ @compileLog(V{ u, x } + V{ x, x }); // { undef, 6 }
+ @compileLog(V{ u, u } + V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } + V{ x, u }); // { 6, undef }
+ @compileLog(V{ x, u } + V{ x, u }); // { 6, undef }
+ @compileLog(V{ u, x } + V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } + V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } + V{ u, x }); // { undef, 6 }
+ @compileLog(V{ x, u } + V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } + V{ u, x }); // { undef, 6 }
+ @compileLog(V{ u, u } + V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } + V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } + V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } + V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } + V{ u, u }); // { undef, undef }
+
+ // Subtraction
+
+ @compileLog(x - u); // undef
+ @compileLog(u - x); // undef
+
+ @compileLog(V{ x, u } - V{ x, x }); // { 0, undef }
+ @compileLog(V{ u, x } - V{ x, x }); // { undef, 0 }
+ @compileLog(V{ u, u } - V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } - V{ x, u }); // { 0, undef }
+ @compileLog(V{ x, u } - V{ x, u }); // { 0, undef }
+ @compileLog(V{ u, x } - V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } - V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } - V{ u, x }); // { undef, 0 }
+ @compileLog(V{ x, u } - V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } - V{ u, x }); // { undef, 0 }
+ @compileLog(V{ u, u } - V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } - V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } - V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } - V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } - V{ u, u }); // { undef, undef }
+
+ // Multiplication
+
+ @compileLog(x * u); // undef
+ @compileLog(u * x); // undef
+
+ @compileLog(V{ x, u } * V{ x, x }); // { 9, undef }
+ @compileLog(V{ u, x } * V{ x, x }); // { undef, 9 }
+ @compileLog(V{ u, u } * V{ x, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } * V{ x, u }); // { 9, undef }
+ @compileLog(V{ x, u } * V{ x, u }); // { 9, undef }
+ @compileLog(V{ u, x } * V{ x, u }); // { undef, undef }
+ @compileLog(V{ u, u } * V{ x, u }); // { undef, undef }
+
+ @compileLog(V{ x, x } * V{ u, x }); // { undef, 9 }
+ @compileLog(V{ x, u } * V{ u, x }); // { undef, undef }
+ @compileLog(V{ u, x } * V{ u, x }); // { undef, 9 }
+ @compileLog(V{ u, u } * V{ u, x }); // { undef, undef }
+
+ @compileLog(V{ x, x } * V{ u, u }); // { undef, undef }
+ @compileLog(V{ x, u } * V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, x } * V{ u, u }); // { undef, undef }
+ @compileLog(V{ u, u } * V{ u, u }); // { undef, undef }
+
+ // Negation
+
+ @compileLog(-u); // undef
+ @compileLog(-V{ x, u }); // { -3, undef }
+ @compileLog(-V{ u, x }); // { undef, -3 }
+ @compileLog(-V{ u, u }); // { undef, undef }
+}
+
+// error
+//
+// :40:5: error: found compile log statement
+// :40:5: note: also here (5 times)
+// :189:5: note: also here (5 times)
+//
+// Compile Log Output:
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ 6, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 6 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ 0, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 0 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ 9, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, 9 })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(u8, undefined)
+// @as(u8, undefined)
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), [runtime value])
+// @as(@Vector(2, u8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ 6, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 6 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ 0, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 0 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ 9, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, 9 })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(i8, undefined)
+// @as(i8, undefined)
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), [runtime value])
+// @as(@Vector(2, i8), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ 6, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 6 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ 0, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 0 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ 9, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, 9 })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(u32, undefined)
+// @as(u32, undefined)
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), [runtime value])
+// @as(@Vector(2, u32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ 6, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 6 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ 0, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 0 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ 9, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, 9 })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(i32, undefined)
+// @as(i32, undefined)
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), [runtime value])
+// @as(@Vector(2, i32), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ 6, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 6 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ 0, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 0 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ 9, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, 9 })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(u500, undefined)
+// @as(u500, undefined)
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), [runtime value])
+// @as(@Vector(2, u500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ 6, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 6 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ 0, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 0 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ 9, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, 9 })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(i500, undefined)
+// @as(i500, undefined)
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), [runtime value])
+// @as(@Vector(2, i500), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), .{ 6, undefined })
+// @as(@Vector(2, f16), .{ undefined, 6 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ 6, undefined })
+// @as(@Vector(2, f16), .{ 6, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 6 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 6 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), .{ 0, undefined })
+// @as(@Vector(2, f16), .{ undefined, 0 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ 0, undefined })
+// @as(@Vector(2, f16), .{ 0, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 0 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 0 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), .{ 9, undefined })
+// @as(@Vector(2, f16), .{ undefined, 9 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ 9, undefined })
+// @as(@Vector(2, f16), .{ 9, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 9 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, 9 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(@Vector(2, f16), .{ -3, undefined })
+// @as(@Vector(2, f16), .{ undefined, -3 })
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(f16, undefined)
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f16, undefined)
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), [runtime value])
+// @as(@Vector(2, f16), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), .{ 6, undefined })
+// @as(@Vector(2, f32), .{ undefined, 6 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ 6, undefined })
+// @as(@Vector(2, f32), .{ 6, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 6 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 6 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), .{ 0, undefined })
+// @as(@Vector(2, f32), .{ undefined, 0 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ 0, undefined })
+// @as(@Vector(2, f32), .{ 0, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 0 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 0 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), .{ 9, undefined })
+// @as(@Vector(2, f32), .{ undefined, 9 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ 9, undefined })
+// @as(@Vector(2, f32), .{ 9, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 9 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, 9 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(@Vector(2, f32), .{ -3, undefined })
+// @as(@Vector(2, f32), .{ undefined, -3 })
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(f32, undefined)
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f32, undefined)
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), [runtime value])
+// @as(@Vector(2, f32), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), .{ 6, undefined })
+// @as(@Vector(2, f64), .{ undefined, 6 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ 6, undefined })
+// @as(@Vector(2, f64), .{ 6, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 6 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 6 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), .{ 0, undefined })
+// @as(@Vector(2, f64), .{ undefined, 0 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ 0, undefined })
+// @as(@Vector(2, f64), .{ 0, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 0 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 0 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), .{ 9, undefined })
+// @as(@Vector(2, f64), .{ undefined, 9 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ 9, undefined })
+// @as(@Vector(2, f64), .{ 9, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 9 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, 9 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(@Vector(2, f64), .{ -3, undefined })
+// @as(@Vector(2, f64), .{ undefined, -3 })
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(f64, undefined)
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f64, undefined)
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), [runtime value])
+// @as(@Vector(2, f64), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), .{ 6, undefined })
+// @as(@Vector(2, f80), .{ undefined, 6 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ 6, undefined })
+// @as(@Vector(2, f80), .{ 6, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 6 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 6 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), .{ 0, undefined })
+// @as(@Vector(2, f80), .{ undefined, 0 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ 0, undefined })
+// @as(@Vector(2, f80), .{ 0, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 0 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 0 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), .{ 9, undefined })
+// @as(@Vector(2, f80), .{ undefined, 9 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ 9, undefined })
+// @as(@Vector(2, f80), .{ 9, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 9 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, 9 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(@Vector(2, f80), .{ -3, undefined })
+// @as(@Vector(2, f80), .{ undefined, -3 })
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(f80, undefined)
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f80, undefined)
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), [runtime value])
+// @as(@Vector(2, f80), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), .{ 6, undefined })
+// @as(@Vector(2, f128), .{ undefined, 6 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ 6, undefined })
+// @as(@Vector(2, f128), .{ 6, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 6 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 6 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), .{ 0, undefined })
+// @as(@Vector(2, f128), .{ undefined, 0 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ 0, undefined })
+// @as(@Vector(2, f128), .{ 0, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 0 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 0 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), .{ 9, undefined })
+// @as(@Vector(2, f128), .{ undefined, 9 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ 9, undefined })
+// @as(@Vector(2, f128), .{ 9, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 9 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, 9 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(@Vector(2, f128), .{ -3, undefined })
+// @as(@Vector(2, f128), .{ undefined, -3 })
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(f128, undefined)
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), .{ undefined, undefined })
+// @as(f128, undefined)
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), [runtime value])
+// @as(@Vector(2, f128), .{ undefined, undefined })