Fixture 169

rust slices bounds

Rust · 11 functions · 2 lanes · 12 of 22 function-lanes behave identically

One lane has a function that returns a different result after decompilation: rustc-O0 (1/11).

tests/decompiler_fixtures/src/169_rust_slices_bounds.rs source
// 169_rust_slices_bounds.rs
//
// Rust slices and bounds checks.
//
// A Rust slice is a FAT POINTER (data, len) — two registers, no length stored in
// memory beside the data. Every `s[i]` therefore compiles to `cmp len, i; jae
// .panic` followed by the load, and the panic target is a cold block that calls
// `core::panicking::panic_bounds_check` and never returns. That cold block is
// the single most common thing a decompiler mis-structures: it is reachable in
// the CFG, it is `noreturn`, and it must NOT be folded into the hot path.
//
// This fixture puts three indexing styles side by side so the difference in
// emitted code is the whole point:
//   * `s[i]` — the bounds check and its cold panic block are emitted, and the
//     index is reduced modulo the length so the panic can never fire;
//   * `s.get(i)` — no panic path at all; the check becomes an `Option` and the
//     "failure" is an ordinary value;
//   * iterator forms (`iter`, `windows`, `chunks`, `zip`, `rev`, `enumerate`) —
//     the check is HOISTED OUT of the loop entirely, so the loop body has no
//     compare at all and the loop bound is the only surviving evidence.
//
// The two lanes disagree on purpose, and that disagreement is the fixture's
// second axis. At `-C opt-level=0` every check and every panic block is present
// (verified: `rust_slice_index`, `_index_pair`, `_get`, `_windows`, `_split_zip`
// all carry panic calls). At `-O` LLVM proves `i % len < len` and DELETES the
// check outright, so the same source function has a bounds check in one lane and
// none in the other. A decompiler must be right about both, and must not report
// a check the optimized binary does not contain.
//
// Exposure: every driver is `#[no_mangle] pub extern "C" fn` over plain i32/u32
// scalars and caller-owned `*const i32` / `*mut i32` buffers. Pointers are
// null-checked, lengths are clamped to the harness's 16-element buffer, indices
// are reduced modulo a proven-nonzero length, and all arithmetic is `wrapping_*`.
// No input the harness can pass can panic or read out of bounds.
//
// Deterministic: reads and writes only the caller's buffer; no address escapes.

/// Clamp a caller-supplied count to the buffer the harness guarantees.
#[inline(always)]
fn clamp_len(n: u32) -> usize {
    if n > 16 { 16 } else { n as usize }
}

/// Direct indexing. The bounds check is emitted and its panic block is present
/// in the binary; `idx % len` makes it unreachable for every input, and the
/// empty case returns before the index ever happens.
#[no_mangle]
pub extern "C" fn rust_slice_index(p: *const i32, n: u32, i: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    if len == 0 {
        return -2;
    }
    // SAFETY: caller owns >= 16 i32s at `p`; `len <= 16`.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    let idx = (i as usize) % s.len(); // provably < s.len()
    s[idx] // <-- bounds check + cold panic block, never taken
}

/// Two dependent indexes, so the compiler emits two checks and may or may not
/// merge them.
#[no_mangle]
pub extern "C" fn rust_slice_index_pair(p: *const i32, n: u32, i: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    if len == 0 {
        return -2;
    }
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    let a = (i as usize) % s.len();
    let b = (a + 1) % s.len();
    s[a].wrapping_mul(3).wrapping_add(s[b])
}

/// `get()` — the checked form with NO panic path. `i` is deliberately NOT
/// clamped: out-of-range is a legitimate input here and yields `None`.
#[no_mangle]
pub extern "C" fn rust_slice_get(p: *const i32, n: u32, i: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: caller owns >= 16 i32s at `p`; `len <= 16`.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    match s.get(i as usize) {
        Some(v) => v.wrapping_add(7),
        None => -7,
    }
}

/// `get()` on a sub-range: `get(a..b)` is `None` for an inverted or overlong
/// range, again without a panic path. Both endpoints are unclamped on purpose.
#[no_mangle]
pub extern "C" fn rust_slice_get_range(p: *const i32, n: u32, a: u32, b: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    match s.get((a as usize)..(b as usize)) {
        Some(sub) => sub.iter().fold(0i32, |acc, v| acc.wrapping_add(*v)),
        None => -9,
    }
}

/// Plain iterator: the bounds check is hoisted out and the loop body is a bare
/// load-and-add.
#[no_mangle]
pub extern "C" fn rust_slice_iter_sum(p: *const i32, n: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    s.iter().fold(0i32, |acc, v| acc.wrapping_add(*v))
}

/// `enumerate` + `rev`: the index is synthesised by the iterator rather than
/// used to address, so no check survives at all.
#[no_mangle]
pub extern "C" fn rust_slice_rev_enumerate(p: *const i32, n: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    let mut acc: i32 = 0;
    for (i, v) in s.iter().enumerate().rev() {
        acc = acc.wrapping_mul(2).wrapping_add(v.wrapping_mul(i as i32 + 1));
    }
    acc
}

/// `windows(2)`: a sliding pair. The window size is a nonzero constant, so the
/// `windows` precondition can never fail; a short slice simply yields no
/// iterations.
#[no_mangle]
pub extern "C" fn rust_slice_windows(p: *const i32, n: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    let mut acc: i32 = 0;
    for w in s.windows(2) {
        acc = acc.wrapping_add(w[1].wrapping_sub(w[0]));
    }
    acc
}

/// `chunks(3)`: an uneven trailing chunk, so the loop has a remainder path. The
/// chunk size is a nonzero constant.
#[no_mangle]
pub extern "C" fn rust_slice_chunks(p: *const i32, n: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    let mut acc: i32 = 0;
    for (ci, c) in s.chunks(3).enumerate() {
        let inner = c.iter().fold(0i32, |a, v| a.wrapping_add(*v));
        acc = acc.wrapping_add(inner.wrapping_mul(ci as i32 + 1));
    }
    acc
}

/// `split_at` + `zip`: two slices consumed in lockstep, so the loop trip count
/// is the MINIMUM of two lengths — a shape that is easy to decompile as the
/// wrong one of the two.
#[no_mangle]
pub extern "C" fn rust_slice_split_zip(p: *const i32, n: u32, at: u32) -> i32 {
    if p.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &[i32] = unsafe { core::slice::from_raw_parts(p, len) };
    // `split_at` panics if the midpoint exceeds the length; reducing modulo
    // `len + 1` keeps it in [0, len] for every input.
    let mid = (at as usize) % (s.len() + 1);
    let (a, b) = s.split_at(mid);
    let mut acc: i32 = 0;
    for (x, y) in a.iter().zip(b.iter()) {
        acc = acc.wrapping_add(x.wrapping_mul(*y));
    }
    acc.wrapping_add(a.len() as i32).wrapping_sub(b.len() as i32)
}

/// Mutable slice: `iter_mut` writes back through the same fat pointer, so the
/// effect is observable as a buffer diff.
#[no_mangle]
pub extern "C" fn rust_slice_write(out: *mut i32, n: u32, k: i32) -> i32 {
    if out.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: caller owns >= 16 i32s at `out`; `len <= 16`.
    let s: &mut [i32] = unsafe { core::slice::from_raw_parts_mut(out, len) };
    let mut acc: i32 = 0;
    for (i, slot) in s.iter_mut().enumerate() {
        let v = slot.wrapping_mul(k).wrapping_add(i as i32);
        *slot = v;
        acc = acc.wrapping_add(v);
    }
    acc
}

/// In-place reverse via `swap`: two indexes into one mutable slice, the case a
/// decompiler must not turn into an aliasing violation.
#[no_mangle]
pub extern "C" fn rust_slice_reverse(out: *mut i32, n: u32) -> i32 {
    if out.is_null() {
        return -1;
    }
    let len = clamp_len(n);
    // SAFETY: as above.
    let s: &mut [i32] = unsafe { core::slice::from_raw_parts_mut(out, len) };
    s.reverse();
    s.iter()
        .fold(0i32, |a, v| a.wrapping_mul(3).wrapping_add(*v))
}

Recovered C

Generated by glaurung decompile --style decbench at b47f6b43. baseline.json records the result after recompiling the C and calling it beside the original with seeded inputs.

rustc -O0

1/11
rust_slice_chunks fail 111 lines
// glaurung: rust_slice_chunks @ 0xa5d0
__attribute__((no_stack_protector)) unsigned int rust_slice_chunks(char * arg0, int arg1) {
    extern long _ZN110__LT_core__iter__adapters__enumerate__Enumerate_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h50cd498f479d91b6E(char *);
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long * _ZN4core4iter6traits8iterator8Iterator9enumerate17h2f5f71fd62f265a8E(long *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_6chunks17h7eb31b267b7ed765E(long *, long *);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking5panic17hf516d800ede7db8cE(const char *, int, long);
    extern long * _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h9858d5130eeb6bbaE(long *);
    extern unsigned int _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17he9766bbb21fb17b0E(long, long, int);
    long local_10;
    int local_100;
    int local_114;
    int local_118;
    int local_11c;
    long local_128;
    int local_14;
    int local_18;
    int local_1c;
    int local_20;
    int local_24;
    long local_30;
    long local_38;
    long local_40;
    long local_48;
    long local_50;
    long local_58;
    unsigned char local_b8[80];
    unsigned char local_d8[32];
    unsigned char local_f8[32];
    int local_fc;
    int var0;
    long var10;
    long var12;
    long * var15;
    long * var18;
    long var26;
    long var28;
    long var34;
    long var36;
    long var37;
    unsigned int var40;
    long var55;
    long var6;
    long var9;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_a6c7;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_a628;
    }
    local_10 = 16;
    L_a628: ;
    local_58 = local_10;
    var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
    local_50 = var6;
    local_48 = var9;
    local_fc = 0;
    var10 = 3;
    var12 = ((long (*)(long *))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_6chunks17h7eb31b267b7ed765E)((long *)(&local_b8[0]));
    var15 = _ZN4core4iter6traits8iterator8Iterator9enumerate17h2f5f71fd62f265a8E((long *)(&local_d8[0]));
    var18 = _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h9858d5130eeb6bbaE((long *)(&local_f8[0]));
    *(long *)((&local_b8[0] + 24)) = *(long *)(&local_f8[0]);
    *(long *)((&local_b8[0] + 32)) = *(long *)((&local_f8[0] + 8));
    *(long *)((&local_b8[0] + 40)) = *(long *)((&local_f8[0] + 16));
    *(long *)((&local_b8[0] + 48)) = *(long *)((&local_f8[0] + 24));
    goto L_a6d4;
    L_a6c7: ;
    local_100 = -1;
    goto L_a77e;
    L_a6d4: ;
    var26 = _ZN110__LT_core__iter__adapters__enumerate__Enumerate_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h50cd498f479d91b6E((char *)((&local_b8[0] + 56)));
    var28 = *(long *)((&local_b8[0] + 64));
    if ((((var28 == 0) ? 0 : 1) == 0)) {
        local_100 = local_fc;
        goto L_a77e;
    }
    var34 = *(long *)((&local_b8[0] + 56));
    local_128 = var34;
    local_40 = var34;
    var36 = *(long *)((&local_b8[0] + 72));
    local_38 = *(long *)((&local_b8[0] + 64));
    local_30 = var36;
    var37 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)();
    var40 = _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17he9766bbb21fb17b0E(var37, var28, 0);
    local_11c = var40;
    local_24 = var40;
    local_118 = local_fc;
    local_114 = (local_128 + 1);
    if (((long)((int)(local_128)) == 0x7fffffff)) {
        goto L_a7c0;
    }
    goto L_a78a;
    L_a77e: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_100);
    L_a78a: ;
    local_18 = local_11c;
    local_14 = local_114;
    var10 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_11c)) * (unsigned long)((unsigned int)(local_114)))));
    local_20 = local_118;
    local_1c = var10;
    local_fc = ((unsigned int)(local_118) + var10);
    goto L_a6d4;
    L_a7c0: ;
    var55 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to add with overflow"), 28, 0x5a638);
    /* asm: ud2 */
}
rust_slice_get pass 35 lines
// glaurung: rust_slice_get @ 0x9f10
unsigned int rust_slice_get(char * arg0, int arg1, long arg2) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_3get17he0f5696b69261a3dE(long, long);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    int local_14;
    int local_18;
    long local_20;
    long local_30;
    long local_38;
    long local_50;
    int var0;
    long var13;
    long var21;
    long var6;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        return (unsigned int)(-1);
    } else {
        local_38 = (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1)))) ? 16 : (unsigned int)(arg1));
        var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
        local_30 = var6;
        var13 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_3get17he0f5696b69261a3dE)();
        local_50 = var13;
        if ((((local_50 == 0) ? 0 : 1) == 0)) {
            return (unsigned int)(-7);
        } else {
            local_20 = local_50;
            var21 = (unsigned long)((unsigned int)(*(int *)(local_50)));
            local_18 = var21;
            local_14 = 7;
            return (unsigned int)((var21 + 7));
        }
    }
}
rust_slice_get_range fail 48 lines
// glaurung: rust_slice_get_range @ 0x9ff0
__attribute__((no_stack_protector)) unsigned int rust_slice_get_range(char * arg0, int arg1, long arg2, unsigned int arg3) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_3get17haff6ae0f6e8253d6E(long, long);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern unsigned int _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h3d6b46f35658b0d0E(long, long, int);
    long local_18;
    long local_20;
    long local_30;
    long local_38;
    unsigned char local_88[64];
    int var0;
    long var14;
    long var16;
    long var18;
    long var24;
    long var25;
    unsigned int var28;
    long var6;
    *(long *)((&local_88[0] + 56)) = (long)((long)arg0);
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        *(int *)((&local_88[0] + 20)) = -1;
    } else {
        local_38 = (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1)))) ? 16 : (unsigned int)(arg1));
        var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
        local_30 = var6;
        *(long *)((&local_88[0] + 40)) = (unsigned int)(arg2);
        *(long *)((&local_88[0] + 48)) = arg3;
        var14 = *(long *)((&local_88[0] + 40));
        var16 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_3get17haff6ae0f6e8253d6E)();
        *(long *)((&local_88[0] + 32)) = var14;
        *(long *)((&local_88[0] + 24)) = var16;
        var18 = *(long *)((&local_88[0] + 24));
        if ((((var18 == 0) ? 0 : 1) == 0)) {
            *(int *)((&local_88[0] + 20)) = -9;
        } else {
            var24 = *(long *)((&local_88[0] + 32));
            local_20 = *(long *)((&local_88[0] + 24));
            local_18 = var24;
            var25 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)();
            var28 = _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h3d6b46f35658b0d0E(var25, var18, 0);
            *(int *)((&local_88[0] + 20)) = var28;
        }
    }
    return (unsigned int)(*(int *)((&local_88[0] + 20)));
}
rust_slice_index fail 72 lines
// glaurung: rust_slice_index @ 0x9b90
unsigned int rust_slice_index(char * arg0, int arg1, long arg2) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(long, long, long);
    extern long _ZN4core9panicking5panic17hf516d800ede7db8cE(const char *, int, long);
    long local_10;
    long local_18;
    long local_28;
    long local_30;
    int local_44;
    long local_60;
    long local_68;
    long local_78;
    long local_80;
    int var0;
    long var18;
    long var23;
    long var29;
    long var6;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_9bf7;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_9be0;
    }
    local_10 = 16;
    L_9be0: ;
    local_60 = local_10;
    local_30 = local_10;
    if ((local_10 == 0)) {
        goto L_9c01;
    }
    goto L_9c0b;
    L_9bf7: ;
    local_44 = -1;
    goto L_9c49;
    L_9c01: ;
    local_44 = -2;
    goto L_9c49;
    L_9c0b: ;
    var6 = _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(arg0, local_60);
    local_78 = var6;
    local_28 = var6;
    local_68 = (unsigned int)(arg2);
    if ((arg2 == 0)) {
        goto L_9c7f;
    }
    goto L_9c55;
    L_9c49: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_44);
    L_9c55: ;
    var18 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(local_68)) % (unsigned long)(arg2))));
    local_80 = var18;
    local_18 = var18;
    if (((unsigned long)(var18) < (unsigned long)(arg2))) {
        goto L_9c9d;
    }
    goto L_9cb0;
    L_9c7f: ;
    var23 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to calculate the remainder with a divisor of zero/build/rustc-0KzTm9/rustc-1.75.0+dfsg0ubuntu1~bpo0/library/core/src/io/borrowed_buf.rs"), 57, 0x5a530);
    /* asm: ud2 */
    L_9c9d: ;
    local_44 = *(int *)((local_78 + local_80 * 4));
    goto L_9c49;
    L_9cb0: ;
    var29 = _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(local_80, arg2, 0x5a548);
    /* asm: ud2 */
}
rust_slice_index_pair fail 123 lines
// glaurung: rust_slice_index_pair @ 0x9cd0
unsigned int rust_slice_index_pair(char * arg0, int arg1, int * arg2) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(long, int *, long);
    extern long _ZN4core9panicking5panic17hf516d800ede7db8cE(const char *, int, long);
    long local_10;
    int local_14;
    int local_18;
    int local_1c;
    int local_20;
    long local_28;
    long local_30;
    long local_40;
    long local_48;
    int local_5c;
    long local_78;
    long local_80;
    long local_90;
    long local_98;
    long local_a0;
    long local_a8;
    int local_ac;
    int var0;
    long var18;
    long var19;
    long var23;
    long var29;
    long var36;
    long var41;
    long var47;
    long var52;
    long var57;
    long var6;
    long var61;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_9d40;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_9d26;
    }
    local_10 = 16;
    L_9d26: ;
    local_78 = local_10;
    local_48 = local_10;
    if ((local_10 == 0)) {
        goto L_9d4a;
    }
    goto L_9d54;
    L_9d40: ;
    local_5c = -1;
    goto L_9d95;
    L_9d4a: ;
    local_5c = -2;
    goto L_9d95;
    L_9d54: ;
    var6 = _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(arg0, local_78);
    local_90 = var6;
    local_40 = var6;
    local_80 = (long)((unsigned int)((long)arg2));
    if ((arg2 == 0)) {
        goto L_9dcf;
    }
    goto L_9da1;
    L_9d95: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_5c);
    L_9da1: ;
    var18 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(local_80)) % (unsigned long)((long)arg2))));
    local_a0 = var18;
    local_30 = var18;
    var19 = (var18 + 1);
    local_98 = var19;
    if (((unsigned long)(var19) < (unsigned long)(var18))) {
        goto L_9dff;
    }
    goto L_9ded;
    L_9dcf: ;
    var23 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to calculate the remainder with a divisor of zero/build/rustc-0KzTm9/rustc-1.75.0+dfsg0ubuntu1~bpo0/library/core/src/io/borrowed_buf.rs"), 57, 0x5a560);
    /* asm: ud2 */
    L_9ded: ;
    if ((arg2 == 0)) {
        goto L_9e4a;
    }
    goto L_9e1d;
    L_9dff: ;
    var29 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to add with overflow"), 28, 0x5a578);
    /* asm: ud2 */
    L_9e1d: ;
    var36 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(local_98)) % (unsigned long)((long)arg2))));
    local_a8 = var36;
    local_28 = var36;
    if (((unsigned long)(local_a0) < (unsigned long)((long)arg2))) {
        goto L_9e68;
    }
    goto L_9ea4;
    L_9e4a: ;
    var41 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to calculate the remainder with a divisor of zero/build/rustc-0KzTm9/rustc-1.75.0+dfsg0ubuntu1~bpo0/library/core/src/io/borrowed_buf.rs"), 57, 0x5a578);
    /* asm: ud2 */
    L_9e68: ;
    var47 = (unsigned long)((unsigned int)(*(int *)((local_90 + local_a0 * 4))));
    local_18 = var47;
    local_14 = 3;
    local_ac = (var47 * 3);
    if (((unsigned long)(local_a8) < (unsigned long)((long)arg2))) {
        goto L_9ec0;
    }
    goto L_9eea;
    L_9ea4: ;
    var52 = _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(local_a0, arg2, 0x5a590);
    /* asm: ud2 */
    L_9ec0: ;
    var57 = (unsigned long)((unsigned int)(*(int *)((local_90 + local_a8 * 4))));
    local_20 = local_ac;
    local_1c = var57;
    local_5c = ((unsigned int)(local_ac) + var57);
    goto L_9d95;
    L_9eea: ;
    var61 = _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(local_a8, arg2, 0x5a5a8);
    /* asm: ud2 */
}
rust_slice_iter_sum fail 30 lines
// glaurung: rust_slice_iter_sum @ 0xa130
__attribute__((no_stack_protector)) unsigned int rust_slice_iter_sum(char * arg0, int arg1) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern unsigned int _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h48598d118390b75fE(long, long, int);
    long local_18;
    long local_20;
    long local_28;
    unsigned char local_48[24];
    int var0;
    long var10;
    long var11;
    unsigned int var14;
    long var6;
    *(long *)((&local_48[0] + 16)) = (long)((long)arg0);
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        *(int *)((&local_48[0] + 12)) = -1;
    } else {
        local_28 = (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1)))) ? 16 : (unsigned int)(arg1));
        var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
        local_20 = var6;
        local_18 = var10;
        var11 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)();
        var14 = _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h48598d118390b75fE(var11, var10, 0);
        *(int *)((&local_48[0] + 12)) = var14;
    }
    return (unsigned int)(*(int *)((&local_48[0] + 12)));
}
rust_slice_rev_enumerate fail 109 lines
// glaurung: rust_slice_rev_enumerate @ 0xa1e0
__attribute__((no_stack_protector)) unsigned int rust_slice_rev_enumerate(char * arg0, int arg1) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long * _ZN4core4iter6traits8iterator8Iterator3rev17hf7fb957873980223E(long *);
    extern long * _ZN4core4iter6traits8iterator8Iterator9enumerate17h58fc4ae103a77a81E(long *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking5panic17hf516d800ede7db8cE(const char *, int, long);
    extern long * _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h01e0bf6a1b22b12fE(long *);
    extern long _ZN98__LT_core__iter__adapters__rev__Rev_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h6598a4a47eb5214aE(char *);
    long local_10;
    int local_14;
    int local_18;
    int local_1c;
    int local_20;
    int local_24;
    int local_28;
    long local_30;
    long local_38;
    long local_40;
    long local_48;
    long local_50;
    unsigned char local_a0[64];
    unsigned char local_b8[24];
    unsigned char local_d0[24];
    int local_d4;
    int local_d8;
    int local_ec;
    int local_f0;
    int local_f4;
    int var0;
    long var10;
    long var11;
    long * var14;
    long * var17;
    long * var20;
    long var25;
    long var26;
    long var27;
    long var28;
    long var36;
    long var37;
    long var51;
    long var6;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_a2c3;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_a238;
    }
    local_10 = 16;
    L_a238: ;
    local_50 = local_10;
    var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
    local_48 = var6;
    local_40 = var10;
    local_d4 = 0;
    var11 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)();
    var14 = _ZN4core4iter6traits8iterator8Iterator9enumerate17h58fc4ae103a77a81E((long *)(&local_a0[0]));
    var17 = _ZN4core4iter6traits8iterator8Iterator3rev17hf7fb957873980223E((long *)(&local_b8[0]));
    var20 = _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h01e0bf6a1b22b12fE((long *)(&local_d0[0]));
    *(long *)((&local_a0[0] + 24)) = *(long *)(&local_d0[0]);
    *(long *)((&local_a0[0] + 32)) = *(long *)((&local_d0[0] + 8));
    *(long *)((&local_a0[0] + 40)) = *(long *)((&local_d0[0] + 16));
    var25 = var26;
    var27 = var10;
    goto L_a2d0;
    L_a2c3: ;
    local_d8 = -1;
    goto L_a362;
    L_a2d0: ;
    var28 = _ZN98__LT_core__iter__adapters__rev__Rev_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h6598a4a47eb5214aE((char *)((&local_a0[0] + 24)));
    *(long *)((&local_a0[0] + 56)) = var27;
    *(long *)((&local_a0[0] + 48)) = var28;
    if ((((*(long *)((&local_a0[0] + 56)) == 0) ? 0 : 1) == 0)) {
        local_d8 = local_d4;
        goto L_a362;
    }
    var36 = *(long *)((&local_a0[0] + 48));
    local_38 = var36;
    var37 = *(long *)((&local_a0[0] + 56));
    local_30 = var37;
    local_18 = local_d4;
    local_14 = 2;
    local_f4 = ((unsigned long)((unsigned int)(local_d4)) << 1);
    local_f0 = *(int *)((var37));
    local_ec = (var36 + 1);
    if (((long)((int)(var36)) == 0x7fffffff)) {
        goto L_a3a4;
    }
    goto L_a36e;
    L_a362: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_d8);
    L_a36e: ;
    var27 = (unsigned long)((unsigned int)(local_ec));
    local_20 = local_f0;
    local_1c = local_ec;
    var25 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_f0)) * (unsigned long)((unsigned int)(local_ec)))));
    local_28 = local_f4;
    local_24 = var25;
    local_d4 = ((unsigned int)(local_f4) + var25);
    goto L_a2d0;
    L_a3a4: ;
    var51 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to add with overflow"), 28, 0x5a5c0);
    /* asm: ud2 */
}
rust_slice_reverse fail 34 lines
// glaurung: rust_slice_reverse @ 0xac70
__attribute__((no_stack_protector)) unsigned int rust_slice_reverse(char * arg0, int arg1) {
    extern int _ZN4core3ptr7mut_ptr31__LT_impl_u20__BP_mut_u20_T_GT_7is_null17ha62811f06a25601dE(char *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern void _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_7reverse17h5e61311f0ecc4768E(long);
    extern long _ZN4core5slice3raw18from_raw_parts_mut17h79ac1b088c735bd8E(char *, long);
    extern unsigned int _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h1092c30b6f2641b0E(long, long, int);
    long local_18;
    long local_20;
    long local_28;
    unsigned char local_58[40];
    int var0;
    long var10;
    long var12;
    unsigned int var15;
    long var6;
    *(long *)((&local_58[0] + 32)) = (long)((long)arg0);
    var0 = _ZN4core3ptr7mut_ptr31__LT_impl_u20__BP_mut_u20_T_GT_7is_null17ha62811f06a25601dE(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        *(int *)((&local_58[0] + 28)) = -1;
    } else {
        local_28 = (((unsigned long)(16) < (unsigned long)((unsigned long)((unsigned int)(arg1)))) ? 16 : (unsigned int)(arg1));
        var6 = ((long (*)(char *))_ZN4core5slice3raw18from_raw_parts_mut17h79ac1b088c735bd8E)(arg0);
        *(long *)(&local_58[0]) = var6;
        *(long *)((&local_58[0] + 8)) = var10;
        local_20 = var6;
        local_18 = var10;
        ((void (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_7reverse17h5e61311f0ecc4768E)();
        var12 = _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(*(long *)(&local_58[0]));
        var15 = _ZN91__LT_core__slice__iter__Iter_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4fold17h1092c30b6f2641b0E(var12, var10, 0);
        *(int *)((&local_58[0] + 28)) = var15;
    }
    return (unsigned int)(*(int *)((&local_58[0] + 28)));
}
rust_slice_split_zip fail 155 lines
// glaurung: rust_slice_split_zip @ 0xa800
__attribute__((no_stack_protector)) unsigned int rust_slice_split_zip(char * arg0, int arg1, int * arg2) {
    extern long _ZN102__LT_core__iter__adapters__zip__Zip_LT_A_C_B_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h59be56a39f607288E(char *);
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core4iter6traits8iterator8Iterator3zip17h617bd27640048d12E(long, long);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE(long);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_8split_at17hb37cd5b35d0a2782E(long *, long);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking5panic17hf516d800ede7db8cE(const char *, int, long);
    extern long _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17he33a8f975e8179b4E(void *);
    extern void * memcpy(void *, const void *, __SIZE_TYPE__);
    long local_10;
    int local_14;
    unsigned char local_170[224];
    int local_174;
    int local_18;
    long local_190;
    long local_198;
    long local_1a8;
    long local_1b0;
    long local_1b8;
    int local_1c;
    long local_1c0;
    long local_1c8;
    long local_1d0;
    int local_20;
    int local_24;
    int local_28;
    int local_2c;
    int local_30;
    long local_38;
    long local_40;
    long local_48;
    long local_50;
    long local_58;
    long local_60;
    long local_68;
    long local_78;
    long local_80;
    int var0;
    long var11;
    long var18;
    long var28;
    long var30;
    long var32;
    long var33;
    long var34;
    long var35;
    long var36;
    long var38;
    long var40;
    long var43;
    long var46;
    void * var48;
    long var51;
    long var53;
    long var55;
    long var6;
    long var63;
    int var64;
    long var68;
    long var69;
    long var70;
    long var71;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_a8b7;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_a863;
    }
    local_10 = 16;
    L_a863: ;
    local_80 = local_10;
    var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
    local_1a8 = var6;
    local_78 = var6;
    local_198 = (long)((unsigned int)((long)arg2));
    var11 = (long)(((long)arg2 + 1));
    local_190 = var11;
    if (((unsigned long)(var11) < (unsigned long)((long)arg2))) {
        goto L_a8da;
    }
    goto L_a8c4;
    L_a8b7: ;
    local_174 = -1;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_174);
    L_a8c4: ;
    if ((local_190 == 0)) {
        goto L_a9ea;
    }
    goto L_a8f8;
    L_a8da: ;
    var18 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to add with overflow"), 28, 0x5a650);
    /* asm: ud2 */
    L_a8f8: ;
    var28 = (long)arg2;
    local_68 = ((unsigned long)(((((unsigned __int128)(unsigned long)((unsigned long)((unsigned int)(0))) << 64) | (unsigned long)(local_198)) % (unsigned long)(local_190))));
    var30 = ((long (*)(long *))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_8split_at17hb37cd5b35d0a2782E)((long *)(&local_170[0]));
    var32 = *(long *)(&local_170[0]);
    var33 = *(long *)((&local_170[0] + 8));
    local_1d0 = var33;
    local_60 = var32;
    local_58 = var33;
    var34 = *(long *)((&local_170[0] + 16));
    local_1c8 = var34;
    var35 = *(long *)((&local_170[0] + 24));
    local_1c0 = var35;
    local_50 = var34;
    local_48 = var35;
    *(int *)((&local_170[0] + 36)) = 0;
    var36 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)();
    local_1b8 = var36;
    local_1b0 = var28;
    var38 = ((long (*)(long, long))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_4iter17he6b6db36190278bcE)(local_1c8, local_1c0);
    var40 = var38;
    var43 = _ZN4core4iter6traits8iterator8Iterator3zip17h617bd27640048d12E((long)((&local_170[0] + 96)), local_1b8);
    var46 = _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17he33a8f975e8179b4E((void *)((&local_170[0] + 40)));
    var48 = memcpy((void *)((&local_170[0] + 152)), (const void *)((&local_170[0] + 40)), (__SIZE_TYPE__)(56));
    goto L_aa08;
    L_a9ea: ;
    var51 = _ZN4core9panicking5panic17hf516d800ede7db8cE((const char *)("attempt to calculate the remainder with a divisor of zero/build/rustc-0KzTm9/rustc-1.75.0+dfsg0ubuntu1~bpo0/library/core/src/io/borrowed_buf.rs"), 57, 0x5a668);
    /* asm: ud2 */
    L_aa08: ;
    var53 = _ZN102__LT_core__iter__adapters__zip__Zip_LT_A_C_B_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h59be56a39f607288E((char *)((&local_170[0] + 152)));
    *(long *)((&local_170[0] + 216)) = var55;
    *(long *)((&local_170[0] + 208)) = var53;
    if ((((*(long *)((&local_170[0] + 208)) == 0) ? 0 : 1) == 0)) {
        var63 = (unsigned long)((unsigned int)(*(int *)((&local_170[0] + 36))));
        local_28 = var63;
        local_24 = local_1d0;
        var64 = (var63 + local_1d0);
        local_18 = var64;
        local_14 = local_1c0;
        local_174 = ((unsigned int)(var64) - local_1c0);
        // x86-64 epilogue: tear down frame
        return (unsigned int)(local_174);
    }
    var68 = *(long *)((&local_170[0] + 208));
    local_40 = var68;
    var69 = *(long *)((&local_170[0] + 216));
    local_38 = var69;
    var70 = (unsigned long)((unsigned int)(*(int *)((&local_170[0] + 36))));
    var71 = (unsigned long)((unsigned int)(*(int *)((var68))));
    var55 = (unsigned long)((unsigned int)(*(int *)((var69))));
    local_20 = var71;
    local_1c = var55;
    var40 = (unsigned long)((unsigned int)((var71 * var55)));
    local_30 = var70;
    local_2c = var40;
    *(int *)((&local_170[0] + 36)) = (var70 + var40);
    goto L_aa08;
}
rust_slice_windows fail 108 lines
// glaurung: rust_slice_windows @ 0xa3d0
__attribute__((no_stack_protector)) unsigned int rust_slice_windows(char * arg0, int arg1) {
    extern int _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(char *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_7windows17hbe4069620790b214E(long *, long *);
    extern long _ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE(char *, long);
    extern long _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(int, long, long);
    extern long * _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h4e00cde3d076bb91E(long *);
    extern long _ZN94__LT_core__slice__iter__Windows_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h4dc3fe9efdd75df8E(char *);
    long local_10;
    int local_14;
    int local_18;
    int local_1c;
    int local_20;
    long local_28;
    long local_30;
    long local_38;
    long local_40;
    long local_48;
    unsigned char local_98[64];
    unsigned char local_b0[24];
    int local_b4;
    int local_b8;
    int local_cc;
    long local_d8;
    long local_e0;
    int local_e4;
    int var0;
    long var10;
    long var12;
    long * var15;
    long var20;
    long var21;
    long var29;
    long var30;
    long var43;
    long var54;
    long var6;
    long var9;
    var0 = _ZN4core3ptr9const_ptr33__LT_impl_u20__BP_const_u20_T_GT_7is_null17hfa70fa28e678fb08E(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        goto L_a4a2;
    }
    if (((unsigned long)((unsigned long)((unsigned int)(arg1))) <= (unsigned long)(16))) {
        local_10 = (unsigned int)(arg1);
        goto L_a428;
    }
    local_10 = 16;
    L_a428: ;
    local_48 = local_10;
    var6 = ((long (*)(char *))_ZN4core5slice3raw14from_raw_parts17h8cadaa0b0776c70cE)(arg0);
    local_40 = var6;
    local_38 = var9;
    local_b4 = 0;
    var10 = 2;
    var12 = ((long (*)(long *))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_7windows17hbe4069620790b214E)((long *)(&local_98[0]));
    var15 = _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17h4e00cde3d076bb91E((long *)(&local_b0[0]));
    *(long *)((&local_98[0] + 24)) = *(long *)(&local_b0[0]);
    *(long *)((&local_98[0] + 32)) = *(long *)((&local_b0[0] + 8));
    *(long *)((&local_98[0] + 40)) = *(long *)((&local_b0[0] + 16));
    var20 = var9;
    goto L_a4af;
    L_a4a2: ;
    local_b8 = -1;
    goto L_a533;
    L_a4af: ;
    var21 = _ZN94__LT_core__slice__iter__Windows_LT_T_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17h4dc3fe9efdd75df8E((char *)((&local_98[0] + 24)));
    *(long *)((&local_98[0] + 56)) = var20;
    *(long *)((&local_98[0] + 48)) = var21;
    if ((((*(long *)((&local_98[0] + 48)) == 0) ? 0 : 1) == 0)) {
        local_b8 = local_b4;
        goto L_a533;
    }
    var29 = *(long *)((&local_98[0] + 48));
    local_e0 = var29;
    var30 = *(long *)((&local_98[0] + 56));
    local_d8 = var30;
    local_30 = var29;
    local_28 = var30;
    local_cc = local_b4;
    if (((unsigned long)(1) < (unsigned long)(var30))) {
        goto L_a53f;
    }
    goto L_a55e;
    L_a533: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(local_b8);
    L_a53f: ;
    local_e4 = *(int *)((local_e0 + 0x4));
    if (((unsigned long)(0) < (unsigned long)(local_d8))) {
        goto L_a57a;
    }
    goto L_a5b2;
    L_a55e: ;
    var43 = _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(1, local_d8, 0x5a5f0);
    /* asm: ud2 */
    L_a57a: ;
    var20 = (unsigned long)((unsigned int)(*(int *)(local_e0)));
    local_18 = local_e4;
    local_14 = var20;
    var10 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(local_e4)) - var20)));
    local_20 = local_cc;
    local_1c = var10;
    local_b4 = ((unsigned int)(local_cc) + var10);
    goto L_a4af;
    L_a5b2: ;
    var54 = _ZN4core9panicking18panic_bounds_check17h6879eeb39abdf99dE(0, local_d8, 0x5a608);
    /* asm: ud2 */
}
rust_slice_write fail 76 lines
// glaurung: rust_slice_write @ 0xaae0
__attribute__((no_stack_protector)) unsigned int rust_slice_write(char * arg0, unsigned int arg1, int * arg2) {
    extern long _ZN110__LT_core__iter__adapters__enumerate__Enumerate_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17hb5bad527fbae5b21E(char *);
    extern int _ZN4core3ptr7mut_ptr31__LT_impl_u20__BP_mut_u20_T_GT_7is_null17ha62811f06a25601dE(char *);
    extern long * _ZN4core4iter6traits8iterator8Iterator9enumerate17h1efe282357328b62E(long *);
    extern long _ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_8iter_mut17h55a1d4e44cb71f07E(long);
    extern long _ZN4core5slice3raw18from_raw_parts_mut17h79ac1b088c735bd8E(char *, long);
    extern long * _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17hf63284742802d432E(long *);
    int local_18;
    int local_1c;
    int local_20;
    int local_24;
    int local_28;
    int local_2c;
    long local_38;
    long local_40;
    long local_50;
    long local_58;
    unsigned char local_a8[64];
    unsigned char local_c0[24];
    unsigned char local_d8[24];
    int var0;
    long var10;
    long * var13;
    long * var16;
    long var23;
    long var24;
    long var31;
    long var32;
    long var34;
    int var35;
    long var36;
    long var6;
    var0 = _ZN4core3ptr7mut_ptr31__LT_impl_u20__BP_mut_u20_T_GT_7is_null17ha62811f06a25601dE(arg0);
    if (((unsigned long)((unsigned char)((var0 & 1))) != 0)) {
        *(int *)((&local_d8[0] + 16)) = -1;
    } else {
        local_58 = (((unsigned long)(16) < (unsigned long)(arg1)) ? 16 : arg1);
        var6 = ((long (*)(char *))_ZN4core5slice3raw18from_raw_parts_mut17h79ac1b088c735bd8E)(arg0);
        local_50 = var6;
        *(int *)((&local_d8[0] + 20)) = 0;
        var10 = ((long (*)(void))_ZN4core5slice29__LT_impl_u20__u5b_T_u5d__GT_8iter_mut17h55a1d4e44cb71f07E)();
        var13 = _ZN4core4iter6traits8iterator8Iterator9enumerate17h1efe282357328b62E((long *)(&local_a8[0]));
        var16 = _ZN63__LT_I_u20_as_u20_core__iter__traits__collect__IntoIterator_GT_9into_iter17hf63284742802d432E((long *)(&local_c0[0]));
        *(long *)((&local_a8[0] + 24)) = *(long *)(&local_c0[0]);
        *(long *)((&local_a8[0] + 32)) = *(long *)((&local_c0[0] + 8));
        *(long *)((&local_a8[0] + 40)) = *(long *)((&local_c0[0] + 16));
        var23 = (long)arg2;
        while (1) {
            var24 = _ZN110__LT_core__iter__adapters__enumerate__Enumerate_LT_I_GT__u20_as_u20_core__iter__traits__iterator__Iterator_GT_4next17hb5bad527fbae5b21E((char *)((&local_a8[0] + 24)));
            *(long *)((&local_a8[0] + 56)) = var23;
            *(long *)((&local_a8[0] + 48)) = var24;
            if ((((*(long *)((&local_a8[0] + 56)) == 0) ? 0 : 1) == 0)) {
                break;
            }
            var23 = *(long *)((&local_a8[0] + 48));
            local_40 = var23;
            var31 = *(long *)((&local_a8[0] + 56));
            local_38 = var31;
            var32 = (unsigned long)((unsigned int)(*(int *)((var31))));
            local_18 = var32;
            var34 = (unsigned long)((unsigned int)((var32 * (unsigned long)((unsigned int)((long)arg2)))));
            local_20 = var34;
            local_1c = var23;
            var35 = (var34 + var23);
            local_2c = var35;
            *(int *)((var31)) = var35;
            var36 = (unsigned long)((unsigned int)(*(int *)((&local_d8[0] + 20))));
            local_28 = var36;
            local_24 = var35;
            *(int *)((&local_d8[0] + 20)) = (var36 + (unsigned long)((unsigned int)(var35)));
        }
        *(int *)((&local_d8[0] + 16)) = *(int *)((&local_d8[0] + 20));
    }
    return (unsigned int)(*(int *)((&local_d8[0] + 16)));
}

rustc -O2

11/11
rust_slice_chunks pass 48 lines
// glaurung: rust_slice_chunks @ 0x7320
int rust_slice_chunks(char * arg0, int arg1) {
    long ret;
    int var1;
    long var10;
    long var11;
    long var12;
    long var13;
    long var14;
    long var16;
    long var19;
    int var20;
    long var21;
    int var22;
    int var25;
    long var3;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0;
    }
    var3 = (unsigned long)((unsigned int)(var1));
    var10 = var11;
    var12 = 0;
    var13 = (long)arg0;
    var14 = 0;
    do {
        var16 = (((unsigned long)(var3) < (unsigned long)(3)) ? var3 : 3);
        var10 = 0;
        var19 = 0;
        do {
            var20 = (var19 + *(int *)((var13 + var10 * 4)));
            var21 = (unsigned long)((unsigned int)(var20));
            var10 = (var10 + 1);
            var19 = (unsigned long)((unsigned int)(var20));
        } while ((var16 != var10));
        var22 = (var14 + 1);
        var25 = (var12 + (unsigned int)((var21 * var22)));
        ret = (unsigned long)((unsigned int)(var25));
        var13 = (var13 + (var16 * 4));
        var3 = (var3 - var16);
        var12 = (unsigned long)((unsigned int)(var25));
        var14 = (unsigned long)((unsigned int)(var22));
    } while ((var3 != 0));
    return ret;
}
rust_slice_get pass 12 lines
// glaurung: rust_slice_get @ 0x7070
int rust_slice_get(char * arg0, int arg1, int arg2) {
    long ret;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    ret = 0xfffffff9;
    if (((unsigned long)((unsigned long)((unsigned int)(arg2))) < (unsigned long)((unsigned long)((unsigned int)((((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16)))))) {
        ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + ((unsigned long)((unsigned int)(arg2)) * 4))))) + 7)));
    }
    return ret;
}
rust_slice_get_range pass 78 lines
// glaurung: rust_slice_get_range @ 0x70a0
unsigned int rust_slice_get_range(char * arg0, unsigned int arg1, unsigned int arg2, int arg3) {
    long ret;
    long t139;
    long var11;
    char * var12;
    long var15;
    long var17;
    long var22;
    long var23;
    long var25;
    int var26;
    int var27;
    int var28;
    int var29;
    long var31;
    int var33;
    int var34;
    int var35;
    int var36;
    if ((arg0 != 0)) {
        t139 = (((unsigned long)((unsigned long)((unsigned int)((((unsigned long)(arg1) < (unsigned long)(16)) ? arg1 : 16)))) < (unsigned long)((unsigned long)((unsigned int)(arg3)))) | ((unsigned long)((unsigned long)((unsigned int)(arg3))) < (unsigned long)(arg2)));
        var11 = (long)(((long)arg0 + ((unsigned long)(arg2) * 4)));
        var12 = (((unsigned long)((unsigned char)(t139)) == 0) ? (char *)(var11) : (char *)(0));
        ret = 0xfffffff7;
        if (((unsigned long)((unsigned char)((t139 & 255))) == 1)) {
            return ret;
        }
        ret = 0;
        if ((arg2 == (unsigned long)((unsigned int)(arg3)))) {
            return ret;
        }
        var15 = (long)((((long)arg0 + ((unsigned long)((unsigned int)(arg3)) * 4)) - var11));
        var17 = ((unsigned long)(var15) >> 2);
        if (((unsigned long)(32) <= (unsigned long)(var15))) {
            goto L_710a;
        }
        var22 = 0;
        var23 = 0;
        goto L_7158;
    }
    return 0xffffffff;
    L_710a: ;
    var25 = (var17 & -8);
    var26 = 0;
    var27 = 0;
    var28 = 0;
    var29 = 0;
    var31 = 0;
    var33 = 0;
    var34 = 0;
    var35 = 0;
    var36 = 0;
    do {
        var26 = (var26 + *(int *)((var12 + var31 * 4)));
        var27 = (var27 + *(int *)((var12 + var31 * 4 + 0x4)));
        var28 = (var28 + *(int *)((var12 + var31 * 4 + 0x8)));
        var29 = (var29 + *(int *)((var12 + var31 * 4 + 0xc)));
        ret = ((unsigned long)((unsigned int)(var27)) | (unsigned long)((unsigned int)(var26)));
        var33 = (var33 + *(int *)((var12 + var31 * 4 + 0x10)));
        var34 = (var34 + *(int *)((var12 + var31 * 4 + 0x14)));
        var35 = (var35 + *(int *)((var12 + var31 * 4 + 0x18)));
        var36 = (var36 + *(int *)((var12 + var31 * 4 + 0x1c)));
        var31 = (var31 + 8);
    } while ((var25 != var31));
    var22 = (unsigned long)((unsigned int)((((var36 + var29) + (var34 + var27)) + ((var35 + var28) + (var33 + var26)))));
    var23 = var25;
    goto L_715e;
    L_7158: ;
    var22 = (unsigned long)((unsigned int)((var22 + *(int *)((var12 + var23 * 4)))));
    var23 = (var23 + 1);
    L_715e: ;
    ret = var22;
    if ((var17 != var23)) {
        goto L_7158;
    }
    return ret;
}
rust_slice_index pass 12 lines
// glaurung: rust_slice_index @ 0x6ff0
int rust_slice_index(char * arg0, int arg1, unsigned int arg2) {
    long var1;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0xfffffffe;
    }
    return (unsigned int)(*(int *)(((long)arg0 + (((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)(arg2))) % (unsigned int)(var1)))) * 4))));
}
rust_slice_index_pair pass 18 lines
// glaurung: rust_slice_index_pair @ 0x7020
int rust_slice_index_pair(char * arg0, unsigned int arg1, unsigned int arg2) {
    int var1;
    long var10;
    long var12;
    long var9;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)(arg1) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0xfffffffe;
    }
    var9 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(arg2)) % (unsigned int)(var1))));
    var10 = (var9 + 1);
    var12 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + var9 * 4))));
    return (unsigned int)(((unsigned long)((unsigned int)((var12 + (var12 * 2)))) + *(int *)(((long)arg0 + (((var10 != (unsigned long)((unsigned int)(var1))) ? var10 : 0) * 4)))));
}
rust_slice_iter_sum pass 57 lines
// glaurung: rust_slice_iter_sum @ 0x7170
int rust_slice_iter_sum(char * arg0, int arg1) {
    long ret;
    int var1;
    int var10;
    long var13;
    long var3;
    long var34;
    int var35;
    long var37;
    long var6;
    int var7;
    int var8;
    int var9;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0;
    }
    var3 = (unsigned long)((unsigned int)(var1));
    if (((unsigned long)(4) <= (unsigned long)((unsigned long)((unsigned int)(var1))))) {
        var6 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var3)) & 28)));
        var7 = 0;
        var8 = 0;
        var9 = 0;
        var10 = 0;
        var13 = 0;
        do {
            var7 = (var7 + *(int *)(((long)arg0 + var13 * 4)));
            var8 = (var8 + *(int *)(((long)arg0 + var13 * 4 + 0x4)));
            var9 = (var9 + *(int *)(((long)arg0 + var13 * 4 + 0x8)));
            var10 = (var10 + *(int *)(((long)arg0 + var13 * 4 + 0xc)));
            ret = ((unsigned long)((unsigned int)(var8)) | (unsigned long)((unsigned int)(var7)));
            var13 = (var13 + 4);
        } while ((var6 != var13));
        var34 = (unsigned long)((unsigned int)(((var10 + var8) + (var9 + var7))));
        ret = var34;
        if ((var6 == var3)) {
            return ret;
        }
        L_71e0: ;
        do {
            var35 = (var34 + *(int *)(((long)arg0 + var6 * 4)));
            var37 = (var6 + 1);
            var34 = (unsigned long)((unsigned int)(var35));
            var6 = var37;
            ret = (unsigned long)((unsigned int)(var35));
        } while ((var3 != var37));
    } else {
        var34 = 0;
        var6 = 0;
        goto L_71e0;
    }
    return ret;
}
rust_slice_rev_enumerate pass 22 lines
// glaurung: rust_slice_rev_enumerate @ 0x71f0
int rust_slice_rev_enumerate(char * arg0, int arg1) {
    long ret;
    int var1;
    long var4;
    long var7;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0;
    }
    var4 = (((unsigned long)((unsigned int)(var1)) * 4) - 4);
    var7 = 0;
    do {
        ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((((unsigned long)(var4) >> 2) + 1) * *(int *)(((long)arg0 + var4))))) + (var7 * 2))));
        var4 = (var4 - 4);
        var7 = ret;
    } while ((var4 != -4));
    return ret;
}
rust_slice_reverse pass 103 lines
// glaurung: rust_slice_reverse @ 0x76a0
int rust_slice_reverse(char * arg0, unsigned int arg1) {
    long ret;
    int var1;
    long var2;
    long var21;
    long var23;
    long var25;
    long var28;
    long var3;
    int var30;
    int var33;
    int var36;
    int var39;
    long var40;
    long var45;
    long var47;
    long var48;
    int var50;
    long var9;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)(arg1) < (unsigned long)(16)) ? arg1 : 16);
    var2 = ret;
    var3 = (unsigned long)(arg1);
    if (((unsigned long)(2) <= (unsigned long)((unsigned long)((unsigned int)(var1))))) {
        var2 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) >> 1)));
        var9 = (long)((((long)arg0 + ((unsigned long)((unsigned int)(var1)) * 4)) - (var2 * 4)));
        var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
        *(int *)(((long)arg0)) = *(int *)((var9 + var2 * 4 - 0x4));
        *(int *)((var9 + var2 * 4 - 0x4)) = var3;
        if ((var2 != 1)) {
            var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
            *(int *)(((long)arg0 + 0x4)) = *(int *)((var9 + var2 * 4 - 0x8));
            *(int *)((var9 + var2 * 4 - 0x8)) = var3;
            if ((var2 != 2)) {
                var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x8))));
                *(int *)(((long)arg0 + 0x8)) = *(int *)((var9 + var2 * 4 - 0xc));
                *(int *)((var9 + var2 * 4 - 0xc)) = var3;
                if ((var2 != 3)) {
                    var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0xc))));
                    *(int *)(((long)arg0 + 0xc)) = *(int *)((var9 + var2 * 4 - 0x10));
                    *(int *)((var9 + var2 * 4 - 0x10)) = var3;
                    if ((var2 != 4)) {
                        var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x10))));
                        *(int *)(((long)arg0 + 0x10)) = *(int *)((var9 + var2 * 4 - 0x14));
                        *(int *)((var9 + var2 * 4 - 0x14)) = var3;
                        if ((var2 != 5)) {
                            var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x14))));
                            *(int *)(((long)arg0 + 0x14)) = *(int *)((var9 + var2 * 4 - 0x18));
                            *(int *)((var9 + var2 * 4 - 0x18)) = var3;
                            if ((var2 != 6)) {
                                var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x18))));
                                *(int *)(((long)arg0 + 0x18)) = *(int *)((var9 + var2 * 4 - 0x1c));
                                *(int *)((var9 + var2 * 4 - 0x1c)) = var3;
                                if ((var2 != 7)) {
                                    var3 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x1c))));
                                    *(int *)(((long)arg0 + 0x1c)) = *(int *)((var9 + var2 * 4 - 0x20));
                                    *(int *)((var9 + var2 * 4 - 0x20)) = var3;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    if ((var1 == 0)) {
        return 0;
    }
    var21 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var1)) & 3)));
    if (((unsigned long)(4) <= (unsigned long)((unsigned long)((unsigned int)(var1))))) {
        var23 = (unsigned long)((unsigned int)((var1 & 28)));
        var25 = 0;
        var28 = 0;
        do {
            var30 = ((unsigned int)((var28 + (var28 * 2))) + *(int *)(((long)arg0 + var25 * 4)));
            var33 = ((unsigned int)(((unsigned long)((unsigned int)(var30)) + ((unsigned long)((unsigned int)(var30)) * 2))) + *(int *)(((long)arg0 + var25 * 4 + 0x4)));
            var36 = ((unsigned int)(((unsigned long)((unsigned int)(var33)) + ((unsigned long)((unsigned int)(var33)) * 2))) + *(int *)(((long)arg0 + var25 * 4 + 0x8)));
            var39 = ((unsigned int)(((unsigned long)((unsigned int)(var36)) + ((unsigned long)((unsigned int)(var36)) * 2))) + *(int *)(((long)arg0 + var25 * 4 + 0xc)));
            ret = (unsigned long)((unsigned int)(var39));
            var25 = (var25 + 4);
            var28 = (unsigned long)((unsigned int)(var39));
            var40 = var25;
        } while ((var23 != var25));
    } else {
        ret = 0;
        var40 = 0;
    }
    if ((var21 != 0)) {
        var45 = (long)(((long)arg0 + (var40 * 4)));
        var47 = 0;
        var48 = ret;
        while ((var21 != var47)) {
            var50 = ((unsigned int)((var48 + (var48 * 2))) + *(int *)((var45 + var47 * 4)));
            ret = (unsigned long)((unsigned int)(var50));
            var47 = (var47 + 1);
            var48 = (unsigned long)((unsigned int)(var50));
        }
    }
    return ret;
}
rust_slice_split_zip pass 107 lines
// glaurung: rust_slice_split_zip @ 0x7390
static unsigned char glaurung_global_57f28[16] __attribute__((aligned(16)));
unsigned int rust_slice_split_zip(char * arg0, int arg1, unsigned int arg2) {
    extern unsigned char glaurung_global_57f28[16];
    long var0;
    int var10;
    long var11;
    long var13;
    long var14;
    long var148;
    int var149;
    long var156;
    long var17;
    long var18;
    long var19;
    int var2;
    long var24;
    long var25;
    long var26;
    long var29;
    long var32;
    long var40;
    int var42;
    int var43;
    int var44;
    int var45;
    long var46;
    int var48;
    int var49;
    long var5;
    int var50;
    int var51;
    if ((arg0 != 0)) {
        var0 = (unsigned long)(arg2);
        var2 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
        var5 = 0;
        var10 = ((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)(arg2)) % (unsigned int)((unsigned long)((unsigned int)((var2 + 1)))))));
        if (((unsigned long)((unsigned long)((unsigned int)(var2))) < (unsigned long)((unsigned long)((unsigned int)(var10))))) {
            goto L_74f6;
        }
        var11 = (unsigned long)((unsigned int)(var10));
        var13 = (unsigned long)((unsigned int)(var2));
        var14 = (long)(((long)arg0 + ((unsigned long)((unsigned int)(var10)) * 4)));
        var17 = ((unsigned long)((((long)arg0 + ((unsigned long)((unsigned int)(var2)) * 4)) - var14)) >> 2);
        var18 = (((unsigned long)((unsigned long)((unsigned int)(var10))) < (unsigned long)(var17)) ? (unsigned long)((unsigned int)(var10)) : var17);
        var19 = var5;
        if ((var18 == 0)) {
            goto L_74e7;
        }
        if (((unsigned long)(8) <= (unsigned long)(var18))) {
            goto L_73ff;
        }
        var24 = 0;
        var25 = 0;
        goto L_74d0;
    }
    var26 = 0xffffffff;
    goto L_74ee;
    L_73ff: ;
    var24 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var18)) & 56)));
    var29 = (long)((arg0 + 16));
    var32 = (var13 + 1);
    var40 = (((unsigned long)((unsigned int)(var0)) << 2) - ((((unsigned int)(((((unsigned long long)(unsigned int)((unsigned long)((unsigned int)(0))) << 32) | (unsigned int)((unsigned long)((unsigned int)(var0)))) / (unsigned int)(var32)))) * var32) << 2));
    var42 = 0;
    var43 = 0;
    var44 = 0;
    var45 = 0;
    var46 = var24;
    var48 = 0;
    var49 = 0;
    var50 = 0;
    var51 = 0;
    do {
        var42 = (var42 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + var40 - 0x10)))) * (unsigned long)((unsigned int)(*(int *)((var29 - 0x10)))))));
        var43 = (var43 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 - 0xc)))) * (unsigned long)((unsigned int)(*(int *)((var29 + var40 - 0xc)))))));
        var44 = (var44 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + var40 - 0x8)))) * (unsigned long)((unsigned int)(*(int *)((var29 - 0x8)))))));
        var45 = (var45 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 - 0x4)))) * (unsigned long)((unsigned int)(*(int *)((var29 + var40 - 0x4)))))));
        var48 = (var48 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + var40)))) * (unsigned long)((unsigned int)(*(int *)((var29)))))));
        var49 = (var49 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + 0x4)))) * (unsigned long)((unsigned int)(*(int *)((var29 + var40 + 0x4)))))));
        var50 = (var50 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + var40 + 0x8)))) * (unsigned long)((unsigned int)(*(int *)((var29 + 0x8)))))));
        var51 = (var51 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var29 + 0xc)))) * (unsigned long)((unsigned int)(*(int *)((var29 + var40 + 0xc)))))));
        var29 = (var29 + 32);
        var46 = (var46 - 8);
    } while ((var46 != 0));
    var25 = (unsigned long)((unsigned int)((((var51 + var45) + (var49 + var43)) + ((var50 + var44) + (var48 + var42)))));
    var19 = var25;
    if ((var18 == var24)) {
        goto L_74e7;
    }
    L_74d0: ;
    var148 = (var24 + 1);
    var149 = (var25 + (unsigned int)(((unsigned long)((unsigned int)(*(int *)((var14 + var24 * 4)))) * *(int *)(((long)arg0 + var24 * 4)))));
    var24 = var148;
    var25 = (unsigned long)((unsigned int)(var149));
    var19 = (unsigned long)((unsigned int)(var149));
    if ((var18 != var148)) {
        goto L_74d0;
    }
    L_74e7: ;
    var26 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var11 + var11))) - var2))) + var19)));
    L_74ee: ;
    // x86-64 epilogue: tear down frame
    return (unsigned int)(var26);
    L_74f6: ;
    var156 = ((long (*)(const char *, int, long))(*(long *)(&glaurung_global_57f28[0])))((const char *)("assertion failed: mid <= self.len()tests/decompiler_fixtures/src/169_rust_slices_bounds.rs/build/rustc-0KzTm9/rustc-1.75.0+dfsg0ubuntu1~bpo0/library/core/src/io/borrowed_buf.rsInvalid ELF section header offset/size/alignmentInvalid ELF section header entry..."), 35, 0x55690);
    /* asm: ud2 */
}
rust_slice_windows pass 112 lines
// glaurung: rust_slice_windows @ 0x7240
int rust_slice_windows(char * arg0, int arg1) {
    long ret;
    int var1;
    long var10;
    long var11;
    long var12;
    int var17;
    int var18;
    int var19;
    int var20;
    int var22;
    int var23;
    int var24;
    int var25;
    long var27;
    int var29;
    int var30;
    int var31;
    int var32;
    int var33;
    int var34;
    int var35;
    int var36;
    long var4;
    int var45;
    long var5;
    long var7;
    long var8;
    long var87;
    long var88;
    long var89;
    long var90;
    long var92;
    int var93;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    ret = 0;
    if (((unsigned long)((unsigned long)((unsigned int)(var1))) < (unsigned long)(2))) {
        return ret;
    }
    var4 = (unsigned long)((unsigned int)(var1));
    var5 = (unsigned long)((unsigned int)(*(int *)(((long)arg0))));
    var7 = 0;
    if (((unsigned long)(9) <= (unsigned long)((unsigned long)((unsigned int)(var1))))) {
        var8 = (var4 - 1);
        var10 = (var8 & -8);
        var11 = (long)(((long)arg0 + (var10 * 4)));
        var12 = (var4 - var10);
        var17 = var5;
        var18 = var5;
        var19 = var5;
        var20 = var5;
        var22 = 0;
        var23 = 0;
        var24 = 0;
        var25 = 0;
        var27 = 0;
        var29 = 0;
        var30 = 0;
        var31 = 0;
        var32 = 0;
        do {
            var33 = *(int *)(((long)arg0 + var27 * 4 + 0x4));
            var34 = *(int *)(((long)arg0 + var27 * 4 + 0x8));
            var35 = *(int *)(((long)arg0 + var27 * 4 + 0xc));
            var36 = *(int *)(((long)arg0 + var27 * 4 + 0x10));
            var45 = (var22 - var20);
            var17 = *(int *)(((long)arg0 + var27 * 4 + 0x14));
            var18 = *(int *)(((long)arg0 + var27 * 4 + 0x18));
            var19 = *(int *)(((long)arg0 + var27 * 4 + 0x1c));
            var20 = *(int *)(((long)arg0 + var27 * 4 + 0x20));
            ret = ((unsigned long)((unsigned int)(var18)) | (unsigned long)((unsigned int)(var17)));
            var22 = (var45 + var33);
            var23 = ((var23 - var33) + var34);
            var24 = ((var24 - var34) + var35);
            var25 = ((var25 - var35) + var36);
            var29 = ((var29 - var36) + var17);
            var30 = ((var30 - var17) + var18);
            var31 = ((var31 - var18) + var19);
            var32 = ((var32 - var19) + var20);
            var27 = (var27 + 8);
        } while ((var10 != var27));
        var7 = (unsigned long)((unsigned int)((((var32 + var25) + (var30 + var23)) + ((var31 + var24) + (var29 + var22)))));
        ret = var7;
        if ((var8 == var10)) {
            return ret;
        }
        var5 = (unsigned long)((unsigned int)(var20));
        var87 = var12;
        var88 = var11;
        L_72fc: ;
        var89 = (var88 + 4);
        var90 = var7;
        do {
            var92 = (unsigned long)((unsigned int)((var90 - var5)));
            var87 = (var87 - 1);
            var5 = (unsigned long)((unsigned int)(*(int *)((var89))));
            var93 = (var92 + var5);
            var90 = (unsigned long)((unsigned int)(var93));
            var89 = (var89 + 4);
            ret = (unsigned long)((unsigned int)(var93));
        } while (((unsigned long)(2) <= (unsigned long)(var87)));
    } else {
        var88 = (long)arg0;
        var87 = var4;
        goto L_72fc;
    }
    return ret;
}
rust_slice_write pass 149 lines
// glaurung: rust_slice_write @ 0x7520
int rust_slice_write(char * arg0, long arg1, int arg2) {
    long ret;
    long var1;
    int var110;
    int var111;
    int var112;
    int var113;
    long var136;
    long var140;
    long var141;
    long var142;
    char * var143;
    long var144;
    long var147;
    long var148;
    long var149;
    int var15;
    int var153;
    int var17;
    int var19;
    int var20;
    int var21;
    int var22;
    int var23;
    int var24;
    int var25;
    int var26;
    long var28;
    int var29;
    int var31;
    int var33;
    int var34;
    int var35;
    int var36;
    int var37;
    int var38;
    int var39;
    long var4;
    int var40;
    int var42;
    int var43;
    int var44;
    int var45;
    long var6;
    long var7;
    long var8;
    int var82;
    int var83;
    int var84;
    int var85;
    long var9;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((unsigned long)((unsigned long)((unsigned int)(arg1))) < (unsigned long)(16)) ? arg1 : 16);
    if (((unsigned long)((unsigned int)(var1)) == 0)) {
        return 0;
    }
    var4 = (0x3fffffffffffffff & (var1 - 1));
    var6 = 0;
    var7 = (long)arg0;
    var8 = 0;
    if (((unsigned long)(7) <= (unsigned long)(var4))) {
        var9 = (var4 + 1);
        var8 = (var9 & -8);
        var7 = (long)(((long)arg0 + (var8 * 4)));
        var15 = arg2;
        var17 = arg2;
        var19 = 0;
        var20 = 1;
        var21 = 2;
        var22 = 3;
        var23 = 0;
        var24 = 0;
        var25 = 0;
        var26 = 0;
        var28 = 0;
        var29 = arg2;
        var31 = arg2;
        var33 = 4;
        var34 = 4;
        var35 = 4;
        var36 = 4;
        var37 = 8;
        var38 = 8;
        var39 = 8;
        var40 = 8;
        var42 = 0;
        var43 = 0;
        var44 = 0;
        var45 = 0;
        do {
            var82 = (((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x10)))) * (unsigned long)((unsigned int)(var15)))) + var19) + var33);
            var83 = (((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x14)))) * (unsigned long)((unsigned int)(var29)))) + var20) + var34);
            var84 = (((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x18)))) * (unsigned long)((unsigned int)(var17)))) + var21) + var35);
            var85 = (((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x1c)))) * (unsigned long)((unsigned int)(var31)))) + var22) + var36);
            var110 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4)))) * (unsigned long)((unsigned int)(var15)))) + var19);
            var111 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x4)))) * (unsigned long)((unsigned int)(var29)))) + var20);
            var112 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0x8)))) * (unsigned long)((unsigned int)(var17)))) + var21);
            var113 = ((unsigned int)(((unsigned long)((unsigned int)(*(int *)(((long)arg0 + var28 * 4 + 0xc)))) * (unsigned long)((unsigned int)(var31)))) + var22);
            *(int *)(((long)arg0 + var28 * 4)) = var110;
            *(int *)(((long)arg0 + var28 * 4 + 0x4)) = var111;
            *(int *)(((long)arg0 + var28 * 4 + 0x8)) = var112;
            *(int *)(((long)arg0 + var28 * 4 + 0xc)) = var113;
            *(int *)(((long)arg0 + var28 * 4 + 0x10)) = var82;
            *(int *)(((long)arg0 + var28 * 4 + 0x14)) = var83;
            *(int *)(((long)arg0 + var28 * 4 + 0x18)) = var84;
            *(int *)(((long)arg0 + var28 * 4 + 0x1c)) = var85;
            var23 = (var23 + var110);
            var24 = (var24 + var111);
            var25 = (var25 + var112);
            var26 = (var26 + var113);
            ret = ((unsigned long)((unsigned int)(var24)) | (unsigned long)((unsigned int)(var23)));
            var42 = (var42 + var82);
            var43 = (var43 + var83);
            var44 = (var44 + var84);
            var45 = (var45 + var85);
            var28 = (var28 + 8);
            var19 = (var19 + var37);
            var20 = (var20 + var38);
            var21 = (var21 + var39);
            var22 = (var22 + var40);
        } while ((var8 != var28));
        var6 = (unsigned long)((unsigned int)((((var45 + var26) + (var43 + var24)) + ((var44 + var25) + (var42 + var23)))));
        ret = var6;
        if ((var9 == var8)) {
            return ret;
        }
    }
    var136 = (long)(((long)arg0 + (var1 * 4)));
    var140 = var6;
    var141 = var8;
    var142 = (unsigned long)((unsigned int)((1 - var8)));
    var143 = (char *)(var7);
    do {
        var144 = (unsigned long)((unsigned int)(var140));
        var147 = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)(*(int *)((var143)))) * arg2)));
        var148 = (unsigned long)((unsigned int)((var147 + var141)));
        *(int *)((var143)) = var148;
        var149 = (long)((var143 + 4));
        var153 = (var142 - 1);
        var143 = (char *)(var149);
        var140 = (unsigned long)((unsigned int)((var148 + (unsigned long)((unsigned int)(var140)))));
        var141 = (var141 + 1);
        var142 = (unsigned long)((unsigned int)(var153));
    } while ((var149 != var136));
    return (unsigned int)(((unsigned long)((unsigned int)((var144 + var147))) - var153));
}

← 213 fixtures