Skip to content

Commit

Permalink
Fix build with gcc12
Browse files Browse the repository at this point in the history
- A number of erroneous flags have been added to BUILD.gn
- wasm-init-expr.cc is creating an 8 byte buffer witch may be
  much smaller than max size_t output. We also need to make room
  for the `f` character and the terminating null character
- inspector_protocol currently generates the following error
   ```
   error: loop variable ‘json_in’ of type ‘const std::string&’ {aka
   ‘const std::__cxx11::basic_string<char>&’} binds to a temporary
   constructed from type ‘const char* const’
   ```

Change-Id: I1139899b2664e47d01ebc44f2e972fc4c0ec212d
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5331756
Reviewed-by: Matthias Liedtke <mliedtke@chromium.org>
Commit-Queue: Milad Farazmand <mfarazma@redhat.com>
Reviewed-by: Toon Verwaest <verwaest@chromium.org>
Cr-Commit-Position: refs/heads/main@{#92615}
  • Loading branch information
miladfarca authored and V8 LUCI CQ committed Feb 29, 2024
1 parent d672ed2 commit c4be0a9
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 23 deletions.
14 changes: 14 additions & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -1699,6 +1699,20 @@ config("toolchain") {
# Fix build with older versions of GCC
# Ported from v8 bazel: https://crrev.com/c/3368869
"-Wno-stringop-overflow",

# Fix a number of bogus errors with gcc12
# TODO(miladfarca): re-evaluate for future gcc upgrades
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111499
"-Wno-stringop-overread",

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104336
"-Wno-restrict",

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105523
"-Wno-array-bounds",

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108517
"-Wno-nonnull",
]
}

Expand Down
2 changes: 2 additions & 0 deletions src/d8/d8.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3972,7 +3972,9 @@ V8_NOINLINE void FuzzerMonitor::UseAfterFree() {
// Use-after-free caught by ASAN.
std::vector<bool>* storage = new std::vector<bool>(3);
delete storage;
#if defined(__clang__)
USE(storage->at(1));
#endif
}

V8_NOINLINE void FuzzerMonitor::UseOfUninitializedValue() {
Expand Down
9 changes: 6 additions & 3 deletions src/wasm/function-compiler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ WasmCompilationResult WasmCompilationUnit::ExecuteFunctionCompilation(
case ExecutionTier::kNone:
UNREACHABLE();

case ExecutionTier::kLiftoff:
case ExecutionTier::kLiftoff: {
// The --wasm-tier-mask-for-testing flag can force functions to be
// compiled with TurboFan, and the --wasm-debug-mask-for-testing can force
// them to be compiled for debugging, see documentation.
Expand Down Expand Up @@ -150,8 +150,8 @@ WasmCompilationResult WasmCompilationUnit::ExecuteFunctionCompilation(
// TODO(wasm): We could actually stop or remove the tiering unit for this
// function to avoid compiling it twice with TurboFan.
V8_FALLTHROUGH;

case ExecutionTier::kTurbofan:
}
case ExecutionTier::kTurbofan: {
compiler::WasmCompilationData data(func_body);
data.func_index = func_index_;
data.wire_bytes_storage = wire_bytes_storage;
Expand All @@ -171,6 +171,9 @@ WasmCompilationResult WasmCompilationUnit::ExecuteFunctionCompilation(
detected);
result.for_debugging = for_debugging_;
break;
}
default:
UNREACHABLE();
}

DCHECK(result.succeeded());
Expand Down
2 changes: 1 addition & 1 deletion test/fuzzer/wasm-init-expr.cc
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ void FuzzIt(base::Vector<const uint8_t> data) {
module_object->native_module()->module()->num_declared_functions);

for (size_t i = 0; i < expression_count; ++i) {
char buffer[8];
char buffer[22];
snprintf(buffer, sizeof buffer, "f%zu", i);
// Execute corresponding function.
auto function = Handle<WasmExportedFunction>::cast(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ TEST_F(ControlFlowTest, LoopPeelingSingleInputPhi) {
auto test = CreateFromGraph(1, [](auto& Asm) {
Block* loop = __ NewLoopHeader();
Block *loop_body = __ NewBlock(), *outside = __ NewBlock();
OpIndex cond = Asm.GetParameter(0);
__ Goto(loop);
__ Bind(loop);
OpIndex cst = __ Word32Constant(42);
Expand Down
20 changes: 11 additions & 9 deletions third_party/inspector_protocol/crdtp/dispatch_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -169,10 +169,11 @@ TEST(DispatchableTest, MessageWithUnknownProperty) {
}

TEST(DispatchableTest, DuplicateMapKey) {
for (const std::string& json :
{"{\"id\":42,\"id\":42}", "{\"params\":null,\"params\":null}",
"{\"method\":\"foo\",\"method\":\"foo\"}",
"{\"sessionId\":\"42\",\"sessionId\":\"42\"}"}) {
const std::array<std::string, 4> jsons = {
{"{\"id\":42,\"id\":42}", "{\"params\":null,\"params\":null}",
"{\"method\":\"foo\",\"method\":\"foo\"}",
"{\"sessionId\":\"42\",\"sessionId\":\"42\"}"}};
for (const std::string& json : jsons) {
SCOPED_TRACE("json = " + json);
std::vector<uint8_t> cbor;
ASSERT_TRUE(json::ConvertJSONToCBOR(SpanFrom(json), &cbor).ok());
Expand All @@ -185,11 +186,12 @@ TEST(DispatchableTest, DuplicateMapKey) {
}

TEST(DispatchableTest, ValidMessageParsesOK_NoParams) {
for (const std::string& json :
{"{\"id\":42,\"method\":\"Foo.executeBar\",\"sessionId\":"
"\"f421ssvaz4\"}",
"{\"id\":42,\"method\":\"Foo.executeBar\",\"sessionId\":\"f421ssvaz4\","
"\"params\":null}"}) {
const std::array<std::string, 2> jsons = {
{"{\"id\":42,\"method\":\"Foo.executeBar\",\"sessionId\":"
"\"f421ssvaz4\"}",
"{\"id\":42,\"method\":\"Foo.executeBar\",\"sessionId\":\"f421ssvaz4\","
"\"params\":null}"}};
for (const std::string& json : jsons) {
SCOPED_TRACE("json = " + json);
std::vector<uint8_t> cbor;
ASSERT_TRUE(json::ConvertJSONToCBOR(SpanFrom(json), &cbor).ok());
Expand Down
19 changes: 10 additions & 9 deletions third_party/inspector_protocol/crdtp/json_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -704,15 +704,16 @@ using ContainerTestTypes = ::testing::Types<std::vector<uint8_t>, std::string>;
TYPED_TEST_SUITE(ConvertJSONToCBORTest, ContainerTestTypes);

TYPED_TEST(ConvertJSONToCBORTest, RoundTripValidJson) {
for (const std::string& json_in : {
"{\"msg\":\"Hello, world.\",\"lst\":[1,2,3]}",
"3.1415",
"false",
"true",
"\"Hello, world.\"",
"[1,2,3]",
"[]",
}) {
const std::array<std::string, 7> jsons = {{
"{\"msg\":\"Hello, world.\",\"lst\":[1,2,3]}",
"3.1415",
"false",
"true",
"\"Hello, world.\"",
"[1,2,3]",
"[]",
}};
for (const std::string& json_in : jsons) {
SCOPED_TRACE(json_in);
TypeParam json(json_in.begin(), json_in.end());
std::vector<uint8_t> cbor;
Expand Down

0 comments on commit c4be0a9

Please sign in to comment.