Open Bug 708862 Opened 13 years ago Updated 2 years ago

Several tests fail with "InternalError:too much recursion" in debug builds on Mac

Categories

(Core :: JavaScript Engine, defect)

Other Branch
All
macOS
defect

Tracking

()

People

(Reporter: jorendorff, Unassigned)

References

Details

All these tests pass in opt builds, and nobody seems to have any trouble with them on Linux.


$ g++ -v
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/src/configure --disable-checking --enable-werror --prefix=/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.1~22/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)

$ python tests/jstests.py -so ./d-objdir/js js1_5/Regress/regress-96526-003.js
/Users/jorendorff/dev/mi/js/src/d-objdir/js -f shell.js -f js1_5/shell.js -f js1_5/Regress/shell.js -f ./js1_5/Regress/regress-96526-003.js
    rc = 3, run time = 0.050431
too much recursion
REGRESSIONS
    js1_5/Regress/regress-96526-003.js
FAIL

$ python tests/jstests.py -so ./d-objdir/js js1_8/genexps/regress-380237-01.js
/Users/jorendorff/dev/mi/js/src/d-objdir/js -f shell.js -f js1_8/shell.js -f js1_8/genexps/shell.js -f ./js1_8/genexps/regress-380237-01.js
    rc = 3, run time = 2.929350
BUGNUMBER: 380237
STATUS: Generator expressions - sudoku
4 8 3 |9 2 1 |6 5 7 
9 6 7 |3 4 5 |8 2 1 
2 5 1 |8 7 6 |4 9 3 
------+------+------
5 4 8 |1 3 2 |9 7 6 
7 2 9 |5 6 4 |1 3 8 
1 3 6 |7 9 8 |2 4 5 
------+------+------
3 7 2 |6 8 9 |5 1 4 
8 1 4 |2 5 3 |7 6 9 
6 9 5 |4 1 7 |3 8 2 


./js1_8/genexps/regress-380237-01.js:178: InternalError: too much recursion
REGRESSIONS
    js1_8/genexps/regress-380237-01.js
FAIL

$ python jit-test/jit_test.py -so ./d-objdir/js basic/bug529130.js
/Users/jorendorff/dev/mi/js/src/d-objdir/shell/js -m -e "const platform='darwin'; const libdir='/Users/jorendorff/dev/mi/js/src/jit-test/lib/';" -f /Users/jorendorff/dev/mi/js/src/jit-test/lib/prolog.js -f /Users/jorendorff/dev/mi/js/src/jit-test/tests/basic/bug529130.js
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
1,2,3,4,5,6,7,8,9
/Users/jorendorff/dev/mi/js/src/jit-test/tests/basic/bug529130.js:11: InternalError: too much recursion
Exit code: 3
The stack frame for js_Interpret is something like 15K large, and local variables only account for a small fraction of that. I sent 25MB of dwarfdump output to jimb and he says it must be a GCC bug.

It seems unlikely that we are going to get that fixed. But I will leave this bug open since there are other ways to fix this issue (weaken the tests; disable them on mac; tinker with js_Interpret until we're not triggering the bug anymore; increase the stack size; etc.)
Since this is (likely) a bug in the old GCC version used on Mac OSX, are there any plans to move Mac builds over to Clang? There's a big meta-bug about getting builds working on Clang, but I couldn't find anything about switching over to it.
I've seen these tests fail due to too much recursion on Linux64 as well.  I don't remember if this is with gcc 4.6 or with clang 3.0; might be both.
(Linux64 debug)
I get the "too much recursion" error with Clang 3.0 on OS X (64-bit), but not with g++-4.2 (g++ without LLVM). The default "g++" on OS X uses LLVM nowadays, so this looks like an LLVM problem.
The workaround is to configure with 

    CC=gcc-apple-4.2 CXX=g++-apple-4.2 ../configure ...
Assignee: general → nobody
Severity: normal → S3
You need to log in before you can comment on or make changes to this bug.