blob: 913427f617e171d5f92f18ebb47e1326fdc23552 [file]
#include "wasm.h"
#include "gtest/gtest.h"
using namespace wasm;
// Verify that Expression and its derived classes maintain their expected sizes
// on linux64 (specifically avoiding regressions in tail-padding reuse and field
// ordering).
TEST(SizesTest, ExpressionSizes) {
#if !defined(__linux__) || !defined(__x86_64__)
GTEST_SKIP() << "This test's numbers are for linux64";
#else
EXPECT_EQ(sizeof(Expression), 16u);
EXPECT_EQ(sizeof(Block), 56u);
EXPECT_EQ(sizeof(If), 40u);
EXPECT_EQ(sizeof(Loop), 32u);
EXPECT_EQ(sizeof(Break), 40u);
EXPECT_EQ(sizeof(Switch), 72u);
EXPECT_EQ(sizeof(Call), 56u);
EXPECT_EQ(sizeof(CallIndirect), 72u);
EXPECT_EQ(sizeof(LocalGet), 16u);
EXPECT_EQ(sizeof(LocalSet), 24u);
EXPECT_EQ(sizeof(GlobalGet), 24u);
EXPECT_EQ(sizeof(GlobalSet), 32u);
EXPECT_EQ(sizeof(Load), 48u);
EXPECT_EQ(sizeof(Store), 64u);
EXPECT_EQ(sizeof(Const), 40u);
EXPECT_EQ(sizeof(Unary), 24u);
EXPECT_EQ(sizeof(Binary), 32u);
EXPECT_EQ(sizeof(Select), 40u);
EXPECT_EQ(sizeof(Drop), 24u);
EXPECT_EQ(sizeof(Return), 24u);
EXPECT_EQ(sizeof(MemorySize), 24u);
EXPECT_EQ(sizeof(MemoryGrow), 32u);
EXPECT_EQ(sizeof(Nop), 16u);
EXPECT_EQ(sizeof(Unreachable), 16u);
EXPECT_EQ(sizeof(AtomicRMW), 56u);
EXPECT_EQ(sizeof(AtomicCmpxchg), 56u);
EXPECT_EQ(sizeof(AtomicWait), 64u);
EXPECT_EQ(sizeof(AtomicNotify), 48u);
EXPECT_EQ(sizeof(AtomicFence), 16u);
EXPECT_EQ(sizeof(Pause), 16u);
EXPECT_EQ(sizeof(SIMDExtract), 24u);
EXPECT_EQ(sizeof(SIMDReplace), 32u);
EXPECT_EQ(sizeof(SIMDShuffle), 48u);
EXPECT_EQ(sizeof(SIMDTernary), 40u);
EXPECT_EQ(sizeof(SIMDShift), 32u);
EXPECT_EQ(sizeof(SIMDLoad), 48u);
EXPECT_EQ(sizeof(SIMDLoadStoreLane), 64u);
EXPECT_EQ(sizeof(MemoryInit), 56u);
EXPECT_EQ(sizeof(DataDrop), 24u);
EXPECT_EQ(sizeof(MemoryCopy), 56u);
EXPECT_EQ(sizeof(MemoryFill), 48u);
EXPECT_EQ(sizeof(Pop), 16u);
EXPECT_EQ(sizeof(RefNull), 16u);
EXPECT_EQ(sizeof(RefIsNull), 24u);
EXPECT_EQ(sizeof(RefFunc), 24u);
EXPECT_EQ(sizeof(RefEq), 32u);
EXPECT_EQ(sizeof(TableGet), 32u);
EXPECT_EQ(sizeof(TableSet), 40u);
EXPECT_EQ(sizeof(TableSize), 24u);
EXPECT_EQ(sizeof(TableGrow), 40u);
EXPECT_EQ(sizeof(TableFill), 48u);
EXPECT_EQ(sizeof(TableCopy), 56u);
EXPECT_EQ(sizeof(TableInit), 56u);
EXPECT_EQ(sizeof(ElemDrop), 24u);
EXPECT_EQ(sizeof(Try), 104u);
EXPECT_EQ(sizeof(TryTable), 152u);
EXPECT_EQ(sizeof(Throw), 56u);
EXPECT_EQ(sizeof(Rethrow), 24u);
EXPECT_EQ(sizeof(ThrowRef), 24u);
EXPECT_EQ(sizeof(TupleMake), 48u);
EXPECT_EQ(sizeof(TupleExtract), 24u);
EXPECT_EQ(sizeof(RefI31), 24u);
EXPECT_EQ(sizeof(I31Get), 24u);
EXPECT_EQ(sizeof(CallRef), 56u);
EXPECT_EQ(sizeof(RefTest), 32u);
EXPECT_EQ(sizeof(RefCast), 32u);
EXPECT_EQ(sizeof(RefGetDesc), 24u);
EXPECT_EQ(sizeof(BrOn), 48u);
EXPECT_EQ(sizeof(StructNew), 56u);
EXPECT_EQ(sizeof(StructGet), 24u);
EXPECT_EQ(sizeof(StructSet), 32u);
EXPECT_EQ(sizeof(StructRMW), 40u);
EXPECT_EQ(sizeof(StructCmpxchg), 40u);
EXPECT_EQ(sizeof(ArrayNew), 32u);
EXPECT_EQ(sizeof(ArrayNewData), 40u);
EXPECT_EQ(sizeof(ArrayNewElem), 40u);
EXPECT_EQ(sizeof(ArrayNewFixed), 48u);
EXPECT_EQ(sizeof(ArrayGet), 32u);
EXPECT_EQ(sizeof(ArraySet), 40u);
EXPECT_EQ(sizeof(ArrayLoad), 48u);
EXPECT_EQ(sizeof(ArrayStore), 56u);
EXPECT_EQ(sizeof(ArrayLen), 24u);
EXPECT_EQ(sizeof(ArrayCopy), 56u);
EXPECT_EQ(sizeof(ArrayFill), 48u);
EXPECT_EQ(sizeof(ArrayInitData), 56u);
EXPECT_EQ(sizeof(ArrayInitElem), 56u);
EXPECT_EQ(sizeof(ArrayRMW), 40u);
EXPECT_EQ(sizeof(ArrayCmpxchg), 48u);
EXPECT_EQ(sizeof(RefAs), 24u);
EXPECT_EQ(sizeof(StringNew), 40u);
EXPECT_EQ(sizeof(StringConst), 24u);
EXPECT_EQ(sizeof(StringMeasure), 24u);
EXPECT_EQ(sizeof(StringEncode), 40u);
EXPECT_EQ(sizeof(StringConcat), 32u);
EXPECT_EQ(sizeof(StringEq), 32u);
EXPECT_EQ(sizeof(StringTest), 24u);
EXPECT_EQ(sizeof(StringWTF16Get), 32u);
EXPECT_EQ(sizeof(StringSliceWTF), 40u);
EXPECT_EQ(sizeof(ContNew), 24u);
EXPECT_EQ(sizeof(ContBind), 56u);
EXPECT_EQ(sizeof(Suspend), 56u);
EXPECT_EQ(sizeof(Resume), 152u);
EXPECT_EQ(sizeof(ResumeThrow), 160u);
EXPECT_EQ(sizeof(StackSwitch), 64u);
EXPECT_EQ(sizeof(StructWait), 56u);
EXPECT_EQ(sizeof(WideIntAddSub), 48u);
EXPECT_EQ(sizeof(WideIntMul), 32u);
EXPECT_EQ(sizeof(WaitqueueNew), 16u);
EXPECT_EQ(sizeof(WaitqueueNotify), 32u);
EXPECT_EQ(sizeof(Publish), 24u);
#endif
}