Index: src/wasm/ast-decoder.h |
diff --git a/src/wasm/ast-decoder.h b/src/wasm/ast-decoder.h |
index c4f6c1679a0bfb89d6d1b9c9c9197305e25aeca2..cab20b40daa91b21e82b85a07c359ebfa8144daf 100644 |
--- a/src/wasm/ast-decoder.h |
+++ b/src/wasm/ast-decoder.h |
@@ -5,6 +5,8 @@ |
#ifndef V8_WASM_AST_DECODER_H_ |
#define V8_WASM_AST_DECODER_H_ |
+#include "src/base/bits.h" |
+#include "src/machine-type.h" |
#include "src/signature.h" |
#include "src/wasm/decoder.h" |
#include "src/wasm/wasm-opcodes.h" |
@@ -183,10 +185,17 @@ struct MemoryAccessOperand { |
uint32_t alignment; |
uint32_t offset; |
unsigned length; |
- inline MemoryAccessOperand(Decoder* decoder, const byte* pc) { |
+ inline MemoryAccessOperand(Decoder* decoder, const byte* pc, |
titzer
2016/08/26 08:24:17
Why not just pass the maximum alignment size here?
ahaas
2016/09/01 17:18:29
Done.
|
+ MachineType type) { |
unsigned alignment_length; |
alignment = |
decoder->checked_read_u32v(pc, 1, &alignment_length, "alignment"); |
+ if (type != MachineType::None() && |
+ ElementSizeLog2Of(type.representation()) < |
+ static_cast<int>(alignment)) { |
+ decoder->error(pc, |
+ "alignment must be less or equal to natural alignment"); |
+ } |
unsigned offset_length; |
offset = decoder->checked_read_u32v(pc, 1 + alignment_length, |
&offset_length, "offset"); |