From 85049e508ba6b1502e4d074d051a188c398fabc6 Mon Sep 17 00:00:00 2001 From: Djzin Date: Sun, 12 Mar 2017 14:10:07 +0000 Subject: [PATCH] avoid recursion --- src/libcore/mem.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libcore/mem.rs b/src/libcore/mem.rs index a7c5d29c5a51..748d63362463 100644 --- a/src/libcore/mem.rs +++ b/src/libcore/mem.rs @@ -450,11 +450,14 @@ pub fn swap(x: &mut T, y: &mut T) { let x = x as *mut T as *mut u8; let y = y as *mut T as *mut u8; - // use an xor-swap as x & y are guaranteed to never alias - for i in 0..size_of::() as isize { + // can't use a for loop as the `range` impl calls `mem::swap` recursively + let mut i = 0; + while i < size_of::() as isize { + // use an xor-swap as x & y are guaranteed to never alias *x.offset(i) ^= *y.offset(i); *y.offset(i) ^= *x.offset(i); *x.offset(i) ^= *y.offset(i); + i += 1; } } }