From 93cb495aa44fa947c00e7cc4706c23b85851fd01 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Fri, 31 Oct 2014 14:29:11 +0100 Subject: [PATCH] Bug 1091757 - Fix ReportUninitializedLexical to not call frameIndex() for aliased locals. r=shu --- js/src/jit-test/tests/basic/bug1091757.js | 11 +++++++++++ js/src/vm/Interpreter.cpp | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 js/src/jit-test/tests/basic/bug1091757.js diff --git a/js/src/jit-test/tests/basic/bug1091757.js b/js/src/jit-test/tests/basic/bug1091757.js new file mode 100644 index 00000000000..491f1698d52 --- /dev/null +++ b/js/src/jit-test/tests/basic/bug1091757.js @@ -0,0 +1,11 @@ +try { + (function() { + let a = 3; + let XY = XY; + return function() { return a; }; + })(); + assertEq(0, 1); +} catch(e) { + assertEq(e instanceof ReferenceError, true); + assertEq(e.message.contains("XY"), true); +} diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp index 4f76d1222d8..32d907b9333 100644 --- a/js/src/vm/Interpreter.cpp +++ b/js/src/vm/Interpreter.cpp @@ -4071,7 +4071,7 @@ js::ReportUninitializedLexical(JSContext *cx, HandleScript script, jsbytecode *p // First search for a name among body-level lets. for (BindingIter bi(script); bi; bi++) { - if (bi->kind() != Binding::ARGUMENT && bi.frameIndex() == slot) { + if (bi->kind() != Binding::ARGUMENT && !bi->aliased() && bi.frameIndex() == slot) { name = bi->name(); break; }