allocator-test: workaround inliner vs. branch reach
diff --git a/tests/allocator-test.cc b/tests/allocator-test.cc
index 8a5887d..27b78e3 100644
--- a/tests/allocator-test.cc
+++ b/tests/allocator-test.cc
@@ -57,6 +57,27 @@
 	std::vector<void *> allocations;
 
 	/**
+	 * Quick check of basic functionality before we get too carried away
+	 *
+	 * This is marked as noinline because otherwise the predict-false on the
+	 * test failures causes all of the log-message-and-fail blocks to be moved
+	 * to the end of the function and, if this is inlined, ends up with some
+	 * branches that are more than 2 KiB away from their targets.
+	 */
+	__noinline void test_preflight()
+	{
+		Timeout t{5};
+		void *volatile p = heap_allocate(&t, MALLOC_CAPABILITY, 16);
+		TEST(Capability{p}.is_valid(), "Unable to make first allocation");
+
+		int res = heap_free(MALLOC_CAPABILITY, p);
+		TEST_EQUAL(res, 0, "heap_free returned nonzero");
+		TEST(
+		  !Capability{p}.is_valid(),
+		  "Freed pointer still live; load barrier or revoker out of service?");
+	}
+
+	/**
 	 * Test the revoker by constantly allocating and freeing batches of
 	 * allocations. The total amount of allocations must greatly exceed the heap
 	 * size to force a constant stream of allocation failures and revocations.
@@ -66,8 +87,13 @@
 	 * This performance test should not fail. If it fails it's either the
 	 * allocations in one iteration exceed the total heap size, or the revoker
 	 * is buggy or too slow.
+	 *
+	 * This is marked as noinline because otherwise the predict-false on the
+	 * test failures causes all of the log-message-and-fail blocks to be moved
+	 * to the end of the function and, if this is inlined, ends up with some
+	 * branches that are more than 2 KiB away from their targets.
 	 */
-	void test_revoke()
+	__noinline void test_revoke()
 	{
 		allocations.resize(MaxAllocCount);
 		for (size_t i = 0; i < TestIterations; ++i)
@@ -655,19 +681,7 @@
 	     BigAllocSize);
 	debug_log("Heap size is {} bytes", HeapSize);
 
-	// Quick check of basic functionality before we get too carried away
-	{
-		Timeout t{5};
-		void *volatile p = heap_allocate(&t, MALLOC_CAPABILITY, 16);
-		TEST(Capability{p}.is_valid(), "Unable to make first allocation");
-
-		int res = heap_free(MALLOC_CAPABILITY, p);
-		TEST_EQUAL(res, 0, "heap_free returned nonzero");
-		TEST(
-		  !Capability{p}.is_valid(),
-		  "Freed pointer still live; load barrier or revoker out of service?");
-	}
-
+	test_preflight();
 	test_token();
 	test_hazards();