diff --git a/js/src/jit-test/tests/basic/bug625399.js b/js/src/jit-test/tests/basic/bug625399.js new file mode 100644 index 000000000000..e45cf21d8d83 --- /dev/null +++ b/js/src/jit-test/tests/basic/bug625399.js @@ -0,0 +1,7 @@ +function a(bb) { + "use strict"; + return; + this.d = function() { bb; }; +} +for (var i = 0; i <= RUNLOOP; i++) + a(); diff --git a/js/src/jstracer.cpp b/js/src/jstracer.cpp index dfc985bff26e..7b196cffa774 100644 --- a/js/src/jstracer.cpp +++ b/js/src/jstracer.cpp @@ -16348,6 +16348,11 @@ TraceRecorder::record_JSOP_UNBRAND() JS_REQUIRES_STACK AbortableRecordingStatus TraceRecorder::record_JSOP_UNBRANDTHIS() { + /* In case of primitive this, do nothing. */ + JSStackFrame *fp = cx->fp(); + if (fp->fun()->inStrictMode() && !fp->thisValue().isObject()) + return ARECORD_CONTINUE; + LIns* this_ins; RecordingStatus status = getThis(this_ins); if (status != RECORD_CONTINUE)