| Index: test/cctest/compiler/test-run-unwinding-info.cc
|
| diff --git a/test/cctest/compiler/test-run-unwinding-info.cc b/test/cctest/compiler/test-run-unwinding-info.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4536725d4fe8dcd96f9b5a327d417d42eb7ef5ff
|
| --- /dev/null
|
| +++ b/test/cctest/compiler/test-run-unwinding-info.cc
|
| @@ -0,0 +1,58 @@
|
| +// Copyright 2016 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.
|
| +
|
| +// Test enabled only on supported architectures.
|
| +#if defined(V8_TARGET_ARCH_X64) || defined(V8_TARGET_ARCH_ARM) || \
|
| + defined(V8_TARGET_ARCH_ARM64)
|
| +
|
| +#include "test/cctest/compiler/function-tester.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +namespace compiler {
|
| +
|
| +TEST(RunUnwindingInfo) {
|
| + FLAG_turbo = true;
|
| + FLAG_perf_prof_unwinding_info = true;
|
| +
|
| + FunctionTester tester(
|
| + "(function (x) {\n"
|
| + " function f(x) { return x*x; }\n"
|
| + " return x > 0 ? x+1 : f(x);\n"
|
| + "})");
|
| +
|
| + tester.Call(tester.Val(-1));
|
| +
|
| + CHECK(tester.function->code()->has_unwinding_info());
|
| +}
|
| +
|
| +// TODO(ssanfilippo) Build low-level graph and check that state is correctly
|
| +// restored in the following situation:
|
| +//
|
| +// +-----------------+
|
| +// | no frame |---+
|
| +// check that a +-----------------+ |
|
| +// a noframe state | construct frame |<--+
|
| +// is restored here --> +-----------------+ |
|
| +// | construct frame |<--+
|
| +// +-----------------+
|
| +//
|
| +// Same for <construct>/<destruct>/<destruct> (a <construct> status is restored)
|
| +
|
| +// TODO(ssanfilippo) Intentionally reach a BB with different initial states
|
| +// and check that the UnwindingInforWriter fails in debug mode:
|
| +//
|
| +// +----------------+
|
| +// +---| State A |
|
| +// | +----------------+
|
| +// | | State B != A |---+
|
| +// | +----------------+ |
|
| +// +-->| Failure here |<--+
|
| +// +----------------+
|
| +
|
| +} // namespace compiler
|
| +} // namespace internal
|
| +} // namespace v8
|
| +
|
| +#endif
|
|
|