From 1b6997d0692e743066dfc40e7ab4b65f8ed2e7fd Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Tue, 1 Apr 2014 22:07:37 -0700 Subject: [PATCH] test: avoid infinite loop in out-of-stack.rs This fixes #13238. It avoids an infinite loop when compiling the tests with `-g`. Without this change, the debuginfo on `black_box` prevents the method from being inlined, which allows llvm to convert `silent_recurse` into a tail-call. This then loops forever instead of consuming all the stack like it is supposed to. This patch forces inlining `black_box`, which triggers the right error. --- src/test/run-pass/out-of-stack.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/run-pass/out-of-stack.rs b/src/test/run-pass/out-of-stack.rs index d1daa1e365e..71fde866703 100644 --- a/src/test/run-pass/out-of-stack.rs +++ b/src/test/run-pass/out-of-stack.rs @@ -17,6 +17,9 @@ use std::os; use std::str; // lifted from the test module +// Inlining to avoid llvm turning the recursive functions into tail calls, +// which doesn't consume stack. +#[inline(always)] pub fn black_box(dummy: T) { unsafe { asm!("" : : "r"(&dummy)) } } fn silent_recurse() {