From 02c9034eb214248646be46cb344b7a6e7b67f661 Mon Sep 17 00:00:00 2001 From: "hp.com!davidm" Date: Tue, 3 May 2005 09:13:17 +0000 Subject: [PATCH] Tweak such that GCC v4 doesn't optimize it to the point where the test fails (it managed to unravel the recursion in f1). (Logical change 1.290) --- tests/Gperf-simple.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/tests/Gperf-simple.c b/tests/Gperf-simple.c index 7c2cc996..239ad26a 100644 --- a/tests/Gperf-simple.c +++ b/tests/Gperf-simple.c @@ -53,7 +53,7 @@ gettime (void) return tv.tv_sec + 1e-6*tv.tv_usec; } -static int +static int __attribute__((noinline)) measure_unwind (int maxlevel, double *step) { double stop, start; @@ -79,15 +79,17 @@ measure_unwind (int maxlevel, double *step) stop = gettime (); if (level <= maxlevel) - panic ("Unwound only %d levels, expected at least %d levels", + panic ("Unwound only %d levels, expected at least %d levels\n", level, maxlevel); *step = (stop - start) / (double) level; return 0; } -static int -f1 (int level, int maxlevel, double *step) +static int f1 (int, int, double *); + +static int __attribute__((noinline)) +g1 (int level, int maxlevel, double *step) { if (level == maxlevel) return measure_unwind (maxlevel, step); @@ -96,6 +98,16 @@ f1 (int level, int maxlevel, double *step) return f1 (level + 1, maxlevel, step) + level; } +static int __attribute__((noinline)) +f1 (int level, int maxlevel, double *step) +{ + if (level == maxlevel) + return measure_unwind (maxlevel, step); + else + /* defeat last-call/sibcall optimization */ + return g1 (level + 1, maxlevel, step) + level; +} + static void doit (const char *label) {