diff --git a/src/libcore/iter.rs b/src/libcore/iter.rs
index abf50250dc2ef..bd24cd4609e4b 100644
--- a/src/libcore/iter.rs
+++ b/src/libcore/iter.rs
@@ -1559,7 +1559,12 @@ impl Iterator for Chain where
#[inline]
fn last(self) -> Option {
match self.state {
- ChainState::Both => self.b.last().or(self.a.last()),
+ ChainState::Both => {
+ // Must exhaust a before b.
+ let a_last = self.a.last();
+ let b_last = self.b.last();
+ b_last.or(a_last)
+ },
ChainState::Front => self.a.last(),
ChainState::Back => self.b.last()
}