[cleanup] Templatize the EnableFlagScope

The EnableFlagScope is useful also for non-boolean flags. With the
template we can use if for example in the wasm fuzzers to reduce the
maximum memory size of a wasm module.

In addition I put the EnableFlagScope into the v8::internal namespace,
and I fixed a small typo.

BUG=v8:6474
R=clemensh@chromium.org

Change-Id: Iae5d5c058c334cd0f9e09d20adfd229fc2d6c585
Reviewed-on: https://chromium-review.googlesource.com/531005
Commit-Queue: Andreas Haas <ahaas@chromium.org>
Reviewed-by: Clemens Hammacher <clemensh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#45862}
This commit is contained in:
Andreas Haas 2017-06-12 15:32:13 +02:00 committed by Commit Bot
parent 2e59227006
commit 9240b556c2
4 changed files with 24 additions and 20 deletions

View File

@ -5,20 +5,26 @@
#ifndef V8_TEST_COMMON_FLAG_UTILS_H
#define V8_TEST_COMMON_FLAG_UTILS_H
class EnableFlagScope {
namespace v8 {
namespace internal {
template <typename T>
class FlagScope {
public:
EnableFlagScope(bool* flag, bool new_value = true)
: flag_(flag), previous_value_(flag) {
FlagScope(T* flag, T new_value) : flag_(flag), previous_value_(*flag) {
*flag = new_value;
}
~EnableFlagScope() { *flag_ = previous_value_; }
~FlagScope() { *flag_ = previous_value_; }
private:
bool* flag_;
bool previous_value_;
T* flag_;
T previous_value_;
};
#define EXPERIMENTAL_FLAG_SCOPE(flag) \
EnableFlagScope __flag_scope_##__LINE__(&FLAG_experimental_wasm_##flag)
FlagScope<bool> __scope_##__LINE__(&FLAG_experimental_wasm_##flag, true)
} // namespace internal
} // namespace v8
#endif // V8_TEST_COMMON_FLAG_UTILS_H

View File

@ -13,14 +13,15 @@
#include "src/objects-inl.h"
#include "src/objects.h"
#include "src/wasm/wasm-module.h"
#include "test/common/wasm/flag-utils.h"
#include "test/common/wasm/wasm-module-runner.h"
#include "test/fuzzer/fuzzer-support.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
unsigned int max_mem_flag_value = v8::internal::FLAG_wasm_max_mem_pages;
unsigned int max_table_flag_value = v8::internal::FLAG_wasm_max_table_size;
v8::internal::FLAG_wasm_max_mem_pages = 32;
v8::internal::FLAG_wasm_max_table_size = 100;
v8::internal::FlagScope<uint32_t> max_mem_flag_scope(
&v8::internal::FLAG_wasm_max_mem_pages, 32);
v8::internal::FlagScope<uint32_t> max_table_size_scope(
&v8::internal::FLAG_wasm_max_table_size, 100);
v8_fuzzer::FuzzerSupport* support = v8_fuzzer::FuzzerSupport::Get();
v8::Isolate* isolate = support->GetIsolate();
v8::internal::Isolate* i_isolate =
@ -38,7 +39,5 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
v8::internal::wasm::testing::SetupIsolateForWasmModule(i_isolate);
v8::internal::wasm::testing::CompileAndRunAsmWasmModule(i_isolate, data,
data + size);
v8::internal::FLAG_wasm_max_mem_pages = max_mem_flag_value;
v8::internal::FLAG_wasm_max_table_size = max_table_flag_value;
return 0;
}

View File

@ -13,14 +13,15 @@
#include "src/objects-inl.h"
#include "src/objects.h"
#include "src/wasm/wasm-module.h"
#include "test/common/wasm/flag-utils.h"
#include "test/common/wasm/wasm-module-runner.h"
#include "test/fuzzer/fuzzer-support.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
unsigned int max_mem_flag_value = v8::internal::FLAG_wasm_max_mem_pages;
unsigned int max_table_flag_value = v8::internal::FLAG_wasm_max_table_size;
v8::internal::FLAG_wasm_max_mem_pages = 32;
v8::internal::FLAG_wasm_max_table_size = 100;
v8::internal::FlagScope<uint32_t> max_mem_flag_scope(
&v8::internal::FLAG_wasm_max_mem_pages, 32);
v8::internal::FlagScope<uint32_t> max_table_size_scope(
&v8::internal::FLAG_wasm_max_table_size, 100);
v8_fuzzer::FuzzerSupport* support = v8_fuzzer::FuzzerSupport::Get();
v8::Isolate* isolate = support->GetIsolate();
v8::internal::Isolate* i_isolate =
@ -38,7 +39,5 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
v8::internal::wasm::testing::SetupIsolateForWasmModule(i_isolate);
v8::internal::wasm::testing::CompileAndRunWasmModule(i_isolate, data,
data + size);
v8::internal::FLAG_wasm_max_mem_pages = max_mem_flag_value;
v8::internal::FLAG_wasm_max_table_size = max_table_flag_value;
return 0;
}

View File

@ -835,7 +835,7 @@ TEST_F(WasmSignatureDecodeTest, TooManyParams) {
TEST_F(WasmSignatureDecodeTest, TooManyReturns) {
for (int i = 0; i < 2; i++) {
EnableFlagScope flag_scope(&FLAG_experimental_wasm_mv, i != 0);
FlagScope<bool> flag_scope(&FLAG_experimental_wasm_mv, i != 0);
const int max_return_count = static_cast<int>(
FLAG_experimental_wasm_mv ? kV8MaxWasmFunctionMultiReturns
: kV8MaxWasmFunctionReturns);