// Copyright 2015 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 --expose-gc var inner = new Array(); inner.a = { x: 1 }; inner[0] = 1.5; inner.b = { x: 2 }; assertTrue(%HasDoubleElements(inner)); function foo(o) { return o.field.a.x; }; %PrepareFunctionForOptimization(foo); var outer = {}; outer.field = inner; foo(outer); foo(outer); foo(outer); %OptimizeFunctionOnNextCall(foo); foo(outer); // Generalize representation of field "a" of inner object. var v = { get x() { return 0x7fffffff; } }; inner.a = v; gc(); var boom = foo(outer); print(boom); assertEquals(0x7fffffff, boom);