// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library conformance;

struct PaddingBetweenFieldsInt8Int16 {
    int8 a;
    int16 b;
};

struct PaddingBetweenFieldsInt8Int32 {
    int8 a;
    int32 b;
};

struct PaddingBetweenFieldsInt8Int64 {
    int8 a;
    int64 b;
};

struct PaddingBetweenFieldsInt16Int32 {
    int16 a;
    int32 b;
};

struct PaddingBetweenFieldsInt16Int64 {
    int16 a;
    int64 b;
};

struct PaddingBetweenFieldsInt32Int64 {
    int32 a;
    int64 b;
};

struct Struct1Byte {
    int8 a;
};

struct Struct2Byte {
    int16 a;
};

struct Struct3Byte {
    int16 a;
    int8 b;
};

struct Struct4Byte {
    int32 a;
};

struct Struct5Byte {
    int32 a;
    int8 b;
};

struct Struct6Byte {
    int32 a;
    int16 b;
};

struct Struct7Byte {
    int32 a;
    int16 b;
    int8 c;
};

struct Struct8Byte {
    int64 a;
};

struct PaddingEndOfInlineObject1Byte {
    Struct1Byte a;
};

struct PaddingEndOfInlineObject2Byte {
    Struct2Byte a;
};

struct PaddingEndOfInlineObject3Byte {
    Struct3Byte a;
};

struct PaddingEndOfInlineObject4Byte {
    Struct4Byte a;
};

struct PaddingEndOfInlineObject5Byte {
    Struct5Byte a;
};

struct PaddingEndOfInlineObject6Byte {
    Struct6Byte a;
};

struct PaddingEndOfInlineObject7Byte {
    Struct7Byte a;
};

struct PaddingEndOfInlineObjectBeforeNextObject1Byte {
    Struct8Byte? out_of_line;
    Struct1Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject2Byte {
    Struct8Byte? out_of_line;
    Struct2Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject3Byte {
    Struct8Byte? out_of_line;
    Struct3Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject4Byte {
    Struct8Byte? out_of_line;
    Struct4Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject5Byte {
    Struct8Byte? out_of_line;
    Struct5Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject6Byte {
    Struct8Byte? out_of_line;
    Struct6Byte in_line;
};

struct PaddingEndOfInlineObjectBeforeNextObject7Byte {
    Struct8Byte? out_of_line;
    Struct7Byte in_line;
};

struct PaddingEndOfOutOfLineObject1Byte {
    Struct1Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject2Byte {
    Struct2Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject3Byte {
    Struct3Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject4Byte {
    Struct4Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject5Byte {
    Struct5Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject6Byte {
    Struct6Byte? out_of_line;
};

struct PaddingEndOfOutOfLineObject7Byte {
    Struct7Byte? out_of_line;
};

struct PaddingInBetweenOutOfLineObjects1Byte {
    Struct1Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects2Byte {
    Struct2Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects3Byte {
    Struct3Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects4Byte {
    Struct4Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects5Byte {
    Struct5Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects6Byte {
    Struct6Byte? first;
    Struct8Byte? second;
};

struct PaddingInBetweenOutOfLineObjects7Byte {
    Struct7Byte? first;
    Struct8Byte? second;
};

// In case unions use a different out-of-line implementation than structs,
// spot check padding.
union PaddedUnion {
    1: int8 field;
};

struct PaddedUnionStruct {
    PaddedUnion u;
};

// In case tables use a different out-of-line implementation than structs,
// spot check padding.
table PaddedTable {
    1: int8 field;
};

struct PaddedTableStruct {
    PaddedTable t;
};
