// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --allow-natives-syntax function f(x) { // This used to generate two distinct stores to #undefined, violating the load // elimination invariant that there are no two store to the same const field: var obj1 = { [undefined]: 1, 'undefined': 1 }; // This one cannot be discharged statically: var obj2 = { [undefined]: x, 'undefined': 1 }; // Some more variations that exercise AllocateFastLiteral: var obj3 = { 'undefined': 1, [undefined]: x }; var obj4 = { 'undefined': x, [undefined]: 1 }; assertEquals(obj1.undefined, 1); assertEquals(obj2.undefined, 1); assertEquals(obj3.undefined, x); assertEquals(obj4.undefined, 1); } %PrepareFunctionForOptimization(f); f(1); f(1); %OptimizeFunctionOnNextCall(f); f(2); function g(x) { var obj1 = { [undefined]: 1, [undefined]: 1 }; var obj2 = { [undefined]: 1, [undefined]: x }; var obj3 = { [undefined]: x, [undefined]: 1 }; var obj4 = { [undefined]: x, [undefined]: x }; assertEquals(obj1.undefined, 1); assertEquals(obj2.undefined, x); assertEquals(obj3.undefined, 1); assertEquals(obj4.undefined, x); } %PrepareFunctionForOptimization(g); g(1); g(1); %OptimizeFunctionOnNextCall(g); g(2);