v8/test/mjsunit/regress/regress-696651.js
Andreas Haas c77622318d [runtime] Fix flattening of ConsStrings with empty first parts.
String::SlowFlatten assumed that ConsStrings with empty first parts have
flattened strings as their second part. TurboFan, however, can create
ConsStrings with empty first parts and arbitrary second parts. With
this CL we call String::Flatten on the second part of a ConsString if
the first part is empty, but only when String::Flatten would not call
String::SlowFlatten.

R=jkummerow@chromium.org

BUG=chromium:696651

Change-Id: I9acb681de1be695e1ec2f6f6d28b9e4dc4344e98
Reviewed-on: https://chromium-review.googlesource.com/448457
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
Cr-Commit-Position: refs/heads/master@{#43513}
2017-03-01 12:50:32 +00:00

23 lines
541 B
JavaScript

// Copyright 2017 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 --turbo
function get_a() { return "aaaaaaaaaaaaaa"; }
function get_b() { return "bbbbbbbbbbbbbb"; }
function get_string() {
return get_a() + get_b();
}
function prefix(s) {
return s + get_string();
}
prefix("");
prefix("");
%OptimizeFunctionOnNextCall(prefix);
var s = prefix("");
assertFalse(s === "aaaaaaaaaaaaaabbbbbbbbbbbbbc");