Index: src/wasm/ast-decoder.cc |
diff --git a/src/wasm/ast-decoder.cc b/src/wasm/ast-decoder.cc |
index ffb815771a7c5061a94e15b5925d2c3a9810d4e6..ccce0213054e15d91fb3678526b3cc9e5da45d4b 100644 |
--- a/src/wasm/ast-decoder.cc |
+++ b/src/wasm/ast-decoder.cc |
@@ -394,8 +394,8 @@ class LR_WasmDecoder : public Decoder { |
error("expected #tableswitch <cases> <table>, fell off end"); |
break; |
} |
- uint16_t case_count = *reinterpret_cast<const uint16_t*>(pc_ + 1); |
- uint16_t table_count = *reinterpret_cast<const uint16_t*>(pc_ + 3); |
+ uint16_t case_count = ReadUnalignedUInt16(pc_ + 1); |
+ uint16_t table_count = ReadUnalignedUInt16(pc_ + 3); |
len = 5 + table_count * 2; |
if (table_count == 0) { |
@@ -412,8 +412,8 @@ class LR_WasmDecoder : public Decoder { |
// Verify table. |
for (int i = 0; i < table_count; i++) { |
- uint16_t target = |
- *reinterpret_cast<const uint16_t*>(pc_ + 5 + i * 2); |
+ uint16_t target = ReadUnalignedUInt16(pc_ + 5 + i * 2); |
+ |
if (target >= 0x8000) { |
size_t depth = target - 0x8000; |
if (depth > blocks_.size()) { |
@@ -805,7 +805,7 @@ class LR_WasmDecoder : public Decoder { |
break; |
} |
case kExprTableSwitch: { |
- uint16_t table_count = *reinterpret_cast<const uint16_t*>(p->pc() + 3); |
+ uint16_t table_count = ReadUnalignedUInt16(p->pc() + 3); |
if (table_count == 1) { |
// Degenerate switch with only a default target. |
if (p->index == 1) { |
@@ -830,7 +830,7 @@ class LR_WasmDecoder : public Decoder { |
TFNode* sw = BUILD(Switch, table_count, p->last()->node); |
// Allocate environments for each case. |
- uint16_t case_count = *reinterpret_cast<const uint16_t*>(p->pc() + 1); |
+ uint16_t case_count = ReadUnalignedUInt16(p->pc() + 1); |
SsaEnv** case_envs = zone_->NewArray<SsaEnv*>(case_count); |
for (int i = 0; i < case_count; i++) { |
case_envs[i] = UnreachableEnv(); |
@@ -846,7 +846,7 @@ class LR_WasmDecoder : public Decoder { |
const uint16_t* table = |
reinterpret_cast<const uint16_t*>(p->pc() + 5); |
for (int i = 0; i < table_count; i++) { |
- uint16_t target = table[i]; |
+ uint16_t target = ReadUnalignedUInt16(table + i); |
SsaEnv* env = Split(copy); |
env->control = (i == table_count - 1) ? BUILD(IfDefault, sw) |
: BUILD(IfValue, i, sw); |
@@ -1307,7 +1307,7 @@ class LR_WasmDecoder : public Decoder { |
error(pc, msg); |
return -1; |
} |
- return *reinterpret_cast<const V*>(pc + 1); |
+ return ReadUnalignedValue<V>(pc + 1); |
} |
int EnvironmentCount() { |
@@ -1502,7 +1502,7 @@ int OpcodeLength(const byte* pc) { |
return 1 + length; |
} |
case kExprTableSwitch: { |
- uint16_t table_count = *reinterpret_cast<const uint16_t*>(pc + 3); |
+ uint16_t table_count = ReadUnalignedUInt16(pc + 3); |
return 5 + table_count * 2; |
} |