Selaa lähdekoodia

OS#17857906 - Fix assertion in Lower.cpp helperMethod != IR::HelperOP_InitElemGetter...

Paolo Severini 7 vuotta sitten
vanhempi
sitoutus
a0428dd88b
2 muutettua tiedostoa jossa 6 lisäystä ja 3 poistoa
  1. 4 3
      lib/Backend/GlobOpt.cpp
  2. 2 0
      test/es6/bug_OS16649604.js

+ 4 - 3
lib/Backend/GlobOpt.cpp

@@ -10977,9 +10977,10 @@ GlobOpt::ToTypeSpecIndex(IR::Instr * instr, IR::RegOpnd * indexOpnd, IR::IndirOp
         instr->m_opcode == Js::OpCode::InitClassMemberGetComputedName ||
         instr->m_opcode == Js::OpCode::InitClassMemberSetComputedName;
 
-    if ((indexOpnd->GetValueType().IsInt()
-        ? !IsTypeSpecPhaseOff(func)
-        : indexOpnd->GetValueType().IsLikelyInt() && DoAggressiveIntTypeSpec() && !isGetterOrSetter) // typespec is disabled for getters, setters
+    if (!isGetterOrSetter // typespec is disabled for getters, setters
+        && (indexOpnd->GetValueType().IsInt()
+            ? !IsTypeSpecPhaseOff(func)
+            : indexOpnd->GetValueType().IsLikelyInt() && DoAggressiveIntTypeSpec())
         && !GetIsAsmJSFunc()) // typespec is disabled for asmjs
     {
         StackSym *const indexVarSym = indexOpnd->m_sym;

+ 2 - 0
test/es6/bug_OS16649604.js

@@ -19,6 +19,7 @@ var tests = [
                     set [m](val) { }
                     get [r]() { return 'a'; }
                     set [s](val) { }
+                    get [1 & Math]() { return 42; }
                 }
 
                 d = {
@@ -36,6 +37,7 @@ var tests = [
             assert.areEqual('undefined', typeof ((new c())[2]), "Integer as class member setter property name");
             assert.areEqual('string', typeof ((new c())[0.5]), "Float as class member getter property name");
             assert.areEqual('undefined', typeof ((new c())['prop']), "String as class member setter property name");
+            assert.areEqual('number', typeof ((new c())[1 & Math]), "Expression as class member setter property name");
 
             assert.areEqual('number', typeof (d[1]), "Integer as getter property name");
             assert.areEqual('undefined', typeof (d[2]), "Integer as setter property name");