diff options
author | Ludovic Courtès <ludo@gnu.org> | 2012-07-01 17:32:03 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2012-07-03 23:27:08 +0200 |
commit | 62bc1072c19e81bb0f9e42a5034e7ab8c27d3b94 (patch) | |
tree | 1a757ef16680c0c184de39aaa7ad9cc00065b139 | |
parent | a3467025d9195948dd5af2a775767bff619c7778 (diff) | |
download | guile-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.in | 21 |
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], [], |