-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
correctness_indexing_access_undef is failing on WASM for months now.
The executor throws this error:
Error: Func::Call failed: out of bounds memory access: access at 4295037360+1 >= max value 131072
I validated that this error comes from the second test in that test file.
Final IR, just before the crash:
assert(reinterpret<uint64>((struct halide_buffer_t *)input.buffer) != (uint64)0, halide_error_buffer_argument_is_null("input"))
assert(reinterpret<uint64>((struct halide_buffer_t *)h$1.buffer) != (uint64)0, halide_error_buffer_argument_is_null("h$1"))
let h$1 = (void *)_halide_buffer_get_host((struct halide_buffer_t *)h$1.buffer)
let h$1.type = (uint32)_halide_buffer_get_type((struct halide_buffer_t *)h$1.buffer)
let h$1.device_dirty = (uint1)_halide_buffer_get_device_dirty((struct halide_buffer_t *)h$1.buffer)
let h$1.dimensions = _halide_buffer_get_dimensions((struct halide_buffer_t *)h$1.buffer)
let h$1.min.0 = _halide_buffer_get_min((struct halide_buffer_t *)h$1.buffer, 0)
let h$1.extent.0 = _halide_buffer_get_extent((struct halide_buffer_t *)h$1.buffer, 0)
let h$1.stride.0 = _halide_buffer_get_stride((struct halide_buffer_t *)h$1.buffer, 0)
let input = (void *)_halide_buffer_get_host((struct halide_buffer_t *)input.buffer)
let input.type = (uint32)_halide_buffer_get_type((struct halide_buffer_t *)input.buffer)
let input.device_dirty = (uint1)_halide_buffer_get_device_dirty((struct halide_buffer_t *)input.buffer)
let input.dimensions = _halide_buffer_get_dimensions((struct halide_buffer_t *)input.buffer)
let input.min.0 = _halide_buffer_get_min((struct halide_buffer_t *)input.buffer, 0)
let input.extent.0 = _halide_buffer_get_extent((struct halide_buffer_t *)input.buffer, 0)
let input.stride.0 = _halide_buffer_get_stride((struct halide_buffer_t *)input.buffer, 0)
let h$1.extent.0.required = min(min(h$1.extent.0, 8) + (((h$1.extent.0 + -1)/8)*8), h$1.extent.0)
if ((uint1)_halide_buffer_is_bounds_query((struct halide_buffer_t *)h$1.buffer)) {
(struct halide_buffer_t *)_halide_buffer_init((struct halide_buffer_t *)h$1.buffer, (struct halide_dimension_t *)_halide_buffer_get_shape((struct halide_buffer_t *)h$1.buffer), reinterpret<(void *)>((uint64)0), (uint64)0, reinterpret<(struct halide_device_interface_t *)>((uint64)0), 1, 8, 1, (struct halide_dimension_t *)make_struct(h$1.min.0, h$1.extent.0.required, 1, 0), (uint64)0)
}
if ((uint1)_halide_buffer_is_bounds_query((struct halide_buffer_t *)input.buffer)) {
(struct halide_buffer_t *)_halide_buffer_init((struct halide_buffer_t *)input.buffer, (struct halide_dimension_t *)_halide_buffer_get_shape((struct halide_buffer_t *)input.buffer), reinterpret<(void *)>((uint64)0), (uint64)0, reinterpret<(struct halide_device_interface_t *)>((uint64)0), 1, 8, 1, (struct halide_dimension_t *)make_struct(0, 1024, 1, 0), (uint64)0)
}
if (!((uint1)_halide_buffer_is_bounds_query((struct halide_buffer_t *)h$1.buffer) || (uint1)_halide_buffer_is_bounds_query((struct halide_buffer_t *)input.buffer))) {
assert(h$1.type == (uint32)67585, halide_error_bad_type("Output buffer h$1", h$1.type, (uint32)67585))
assert(h$1.dimensions == 1, halide_error_bad_dimensions("Output buffer h$1", h$1.dimensions, 1))
assert(input.type == (uint32)67585, halide_error_bad_type("Input buffer input", input.type, (uint32)67585))
assert(input.dimensions == 1, halide_error_bad_dimensions("Input buffer input", input.dimensions, 1))
assert(h$1.extent.0.required <= h$1.extent.0, halide_error_access_out_of_bounds("Output buffer h$1", 0, h$1.min.0, (h$1.extent.0.required + h$1.min.0) + -1, h$1.min.0, (h$1.extent.0 + h$1.min.0) + -1))
assert(0 <= h$1.extent.0, halide_error_buffer_extents_negative("Output buffer h$1", 0, h$1.extent.0))
assert((input.min.0 <= 0) && (1024 <= (input.extent.0 + input.min.0)), halide_error_access_out_of_bounds("Input buffer input", 0, 0, 1023, input.min.0, (input.extent.0 + input.min.0) + -1))
assert(0 <= input.extent.0, halide_error_buffer_extents_negative("Input buffer input", 0, input.extent.0))
assert(h$1.stride.0 == 1, halide_error_constraint_violated("h$1.stride.0", h$1.stride.0, "1", 1))
assert(input.stride.0 == 1, halide_error_constraint_violated("input.stride.0", input.stride.0, "1", 1))
assert(input.min.0 == 0, halide_error_constraint_violated("input.min.0", input.min.0, "0", 0))
assert(input.extent.0 == 1024, halide_error_constraint_violated("input.extent.0", input.extent.0, "1024", 1024))
assert((uint64)abs(int64(h$1.extent.0)) <= (uint64)2147483647, halide_error_buffer_allocation_too_large("h$1", (uint64)abs(int64(h$1.extent.0)), (uint64)2147483647))
assert(!h$1.device_dirty, halide_error_device_dirty_with_no_device_support("Output buffer h$1"))
assert(!input.device_dirty, halide_error_device_dirty_with_no_device_support("Input buffer input"))
assert(h$1 != reinterpret<(void *)>((uint64)0), halide_error_host_is_null("Output buffer h$1"))
assert(input != reinterpret<(void *)>((uint64)0), halide_error_host_is_null("Input buffer input"))
allocate f$1[int32 * ((((h$1.extent.0 + 7)/8)*8) + 1016)]
produce f$1 {
for (f$1.s0.x.rebased, 0, h$1.extent.0) {
f$1[f$1.s0.x.rebased] = max(min(12345234/(f$1.s0.x.rebased + h$1.min.0), 1023), 0) + -1234567890
}
}
produce h$1 {
consume f$1 {
let t76 = h$1.extent.0/8
for (h$1.s0.x.x, 0, t76) {
allocate g$1[uint8 * 1024]
produce g$1 {
let t77 = h$1.s0.x.x*8
for (g$1.s0.x.rebased, 0, 1024) {
g$1[g$1.s0.x.rebased] = input[max(min(f$1[g$1.s0.x.rebased + t77], -1234566867), -1234567890) + 1234567890]
}
}
consume g$1 {
h$1[ramp(h$1.s0.x.x*8, 1, 8) aligned(8, 0)] = g$1[ramp(0, 1, 8)]
}
free g$1
}
if ((h$1.extent.0 % 8) != 0) {
allocate g$1[uint8 * 1024]
produce g$1 {
let t78 = (h$1.extent.0/8)*8
for (g$1.s0.x.rebased, 0, 1024) {
g$1[g$1.s0.x.rebased] = input[max(min(f$1[g$1.s0.x.rebased + t78], -1234566867), -1234567890) + 1234567890]
}
}
consume g$1 {
predicate (int8x8(ramp(0, 1, 8)) <= x8((int8)saturating_cast(saturating_sub(h$1.extent.0 + h$1.min.0, (((h$1.extent.0/8)*8) + h$1.min.0) + 1))))
h$1[ramp((h$1.extent.0/8)*8, 1, 8) aligned(8, 0)] = g$1[ramp(0, 1, 8)] if (int8x8(ramp(0, 1, 8)) <= x8((int8)saturating_cast(saturating_sub(h$1.extent.0 + h$1.min.0, (((h$1.extent.0/8)*8) + h$1.min.0) + 1))))
}
free g$1
}
free f$1
}
}
}Metadata
Metadata
Assignees
Labels
No labels