diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index 6c11ba3d2809..a2c1c3102940 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -2468,6 +2468,14 @@ EmitSwitch(JSContext *cx, BytecodeEmitter *bce, ParseNode *pn) switchOp = JSOP_CONDSWITCH; continue; } + if (constVal.isString()) { + JSAtom *atom = js_AtomizeString(cx, constVal.toString()); + if (!atom) { + ok = JS_FALSE; + goto release; + } + constVal.setString(atom); + } constPropagated = JS_TRUE; break; } diff --git a/js/src/jit-test/tests/basic/testBug752205.js b/js/src/jit-test/tests/basic/testBug752205.js new file mode 100644 index 000000000000..edf734855198 --- /dev/null +++ b/js/src/jit-test/tests/basic/testBug752205.js @@ -0,0 +1,6 @@ +var x = "one"; +var y = "two"; +const a = x + y; +var hit = false; +eval('switch("onetwo") { case a: hit = true; };'); +assertEq(hit, true);