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).
// 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/11rust_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/11rust_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));
}