summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2012-07-01 17:32:03 +0200
committerLudovic Courtès <ludo@gnu.org>2012-07-03 23:27:08 +0200
commit62bc1072c19e81bb0f9e42a5034e7ab8c27d3b94 (patch)
tree1a757ef16680c0c184de39aaa7ad9cc00065b139
parenta3467025d9195948dd5af2a775767bff619c7778 (diff)
downloadguile-62bc1072c19e81bb0f9e42a5034e7ab8c27d3b94.tar.gz
Fix stack growth direction check.
Backport of 236f901b0e2b18093421e2e440cf80d00fb98757 from `stable-2.0'. Fixes <http://bugs.gnu.org/11845>. Reported by Cyprien Nicolas <c.nicolas@gmail.com>. * configure.in: Pull stack growth direction check from upstream Autoconf. See http://lists.gnu.org/archive/html/bug-autoconf/2011-06/msg00035.html for a discussion.
-rw-r--r--configure.in21
1 files changed, 9 insertions, 12 deletions
diff --git a/configure.in b/configure.in
index f0588417f..682e31f51 100644
--- a/configure.in
+++ b/configure.in
@@ -1244,23 +1244,20 @@ SCM_I_GSC_STACK_GROWS_UP=0
AC_RUN_IFELSE([AC_LANG_SOURCE(
[AC_INCLUDES_DEFAULT
int
-find_stack_direction ()
+find_stack_direction (int *addr, int depth)
{
- static char *addr = 0;
- auto char dummy;
- if (addr == 0)
- {
- addr = &dummy;
- return find_stack_direction ();
- }
- else
- return (&dummy > addr) ? 1 : -1;
+ int dir, dummy = 0;
+ if (! addr)
+ addr = &dummy;
+ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+ dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+ return dir + dummy;
}
int
-main ()
+main (int argc, char **argv)
{
- return find_stack_direction () < 0;
+ return find_stack_direction (0, argc + !argv + 20) < 0;
}])],
[SCM_I_GSC_STACK_GROWS_UP=1],
[],