AllTypes testcase: add test for integer_size option.
diff --git a/tests/alltypes/alltypes.options b/tests/alltypes/alltypes.options
index 5d9f81e..ee57bc0 100644
--- a/tests/alltypes/alltypes.options
+++ b/tests/alltypes/alltypes.options
@@ -2,4 +2,6 @@
 * max_count:5
 *.*fbytes fixed_length:true max_size:4
 *.*farray fixed_count:true max_count:5
+IntSizes.*int8 int_size:IS_8
+IntSizes.*int16 int_size:IS_16
 DescriptorSize8 descriptorsize:DS_8
diff --git a/tests/alltypes/alltypes.proto b/tests/alltypes/alltypes.proto
index de0e26a..df15d40 100644
--- a/tests/alltypes/alltypes.proto
+++ b/tests/alltypes/alltypes.proto
@@ -30,6 +30,15 @@
     required int32      largetag   = 65535 [default = 0];
 }
 
+message IntSizes {
+    required int32  req_int8 =   1 ;
+    required uint32 req_uint8 =  2 ;
+    required sint32 req_sint8 =  3 ;
+    required int32  req_int16 =  4 ;
+    required uint32 req_uint16 = 5 ;
+    required sint32 req_sint16 = 6 ;
+}
+
 message DescriptorSize8 {
     required int32 first = 1;
     required int32 second = 22222;
@@ -119,6 +128,9 @@
         EmptyMessage oneof_msg2 = 61;
     }
     
+    // Check support for custom integer sizes
+    required IntSizes req_intsizes = 96;
+
     // Check support for 8-word descriptors
     required DescriptorSize8 req_ds8 = 97;
 
diff --git a/tests/alltypes/decode_alltypes.c b/tests/alltypes/decode_alltypes.c
index d74170d..1c49080 100644
--- a/tests/alltypes/decode_alltypes.c
+++ b/tests/alltypes/decode_alltypes.c
@@ -101,6 +101,13 @@
 
         TEST(alltypes.req_ds8.first == 9991);
         TEST(alltypes.req_ds8.second == 9992);
+
+        TEST(alltypes.req_intsizes.req_int8 == -128);
+        TEST(alltypes.req_intsizes.req_uint8 == 255);
+        TEST(alltypes.req_intsizes.req_sint8 == -128);
+        TEST(alltypes.req_intsizes.req_int16 == -32768);
+        TEST(alltypes.req_intsizes.req_uint16 == 65535);
+        TEST(alltypes.req_intsizes.req_sint16 == -32768);
     }
     
     if (mode == 0)
diff --git a/tests/alltypes/encode_alltypes.c b/tests/alltypes/encode_alltypes.c
index 02ad7b8..00d2615 100644
--- a/tests/alltypes/encode_alltypes.c
+++ b/tests/alltypes/encode_alltypes.c
@@ -92,6 +92,13 @@
 
         alltypes.req_ds8.first = 9991;
         alltypes.req_ds8.second = 9992;
+
+        alltypes.req_intsizes.req_int8 = -128;
+        alltypes.req_intsizes.req_uint8 = 255;
+        alltypes.req_intsizes.req_sint8 = -128;
+        alltypes.req_intsizes.req_int16 = -32768;
+        alltypes.req_intsizes.req_uint16 = 65535;
+        alltypes.req_intsizes.req_sint16 = -32768;
     }
     
     if (mode == 1)
diff --git a/tests/alltypes_callback/encode_alltypes_callback.c b/tests/alltypes_callback/encode_alltypes_callback.c
index 66a644d..8f00b77 100644
--- a/tests/alltypes_callback/encode_alltypes_callback.c
+++ b/tests/alltypes_callback/encode_alltypes_callback.c
@@ -204,6 +204,14 @@
            pb_encode_submessage(stream, DescriptorSize8_fields, &ds8);
 }
 
+static bool write_intsizes(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
+{
+    IntSizes intsizes = {-128, 255, -128, -32768, 65535, -32768};
+
+    return pb_encode_tag_for_field(stream, field) &&
+           pb_encode_submessage(stream, IntSizes_fields, &intsizes);
+}
+
 static bool write_repeated_emptymsg(pb_ostream_t *stream, const pb_field_t *field, void * const *arg)
 {
     EmptyMessage emptymsg = {0};
@@ -376,6 +384,8 @@
     
     alltypes.req_ds8.funcs.encode = &write_ds8;
 
+    alltypes.req_intsizes.funcs.encode = &write_intsizes;
+
     /* Bind callbacks for optional fields */
     if (mode != 0)
     {
diff --git a/tests/alltypes_pointer/alltypes.options b/tests/alltypes_pointer/alltypes.options
index ca1587e..eca839c 100644
--- a/tests/alltypes_pointer/alltypes.options
+++ b/tests/alltypes_pointer/alltypes.options
@@ -2,5 +2,7 @@
 * type:FT_POINTER
 *.*fbytes fixed_length:true max_size:4
 *.*farray fixed_count:true max_count:5
+IntSizes.*int8 int_size:IS_8
+IntSizes.*int16 int_size:IS_16
 DescriptorSize8 descriptorsize:DS_8
 
diff --git a/tests/alltypes_pointer/decode_alltypes_pointer.c b/tests/alltypes_pointer/decode_alltypes_pointer.c
index 7acb6a5..d2492e2 100644
--- a/tests/alltypes_pointer/decode_alltypes_pointer.c
+++ b/tests/alltypes_pointer/decode_alltypes_pointer.c
@@ -156,6 +156,14 @@
     TEST(alltypes.req_ds8->first && *alltypes.req_ds8->first == 9991);
     TEST(alltypes.req_ds8->first && *alltypes.req_ds8->second == 9992);
     
+    TEST(alltypes.req_intsizes);
+    TEST(*alltypes.req_intsizes->req_int8 == -128);
+    TEST(*alltypes.req_intsizes->req_uint8 == 255);
+    TEST(*alltypes.req_intsizes->req_sint8 == -128);
+    TEST(*alltypes.req_intsizes->req_int16 == -32768);
+    TEST(*alltypes.req_intsizes->req_uint16 == 65535);
+    TEST(*alltypes.req_intsizes->req_sint16 == -32768);
+
     TEST(alltypes.end && *alltypes.end == 1099);
 
     pb_release(AllTypes_fields, &alltypes);
diff --git a/tests/alltypes_pointer/encode_alltypes_pointer.c b/tests/alltypes_pointer/encode_alltypes_pointer.c
index 8cb44ee..ed780de 100644
--- a/tests/alltypes_pointer/encode_alltypes_pointer.c
+++ b/tests/alltypes_pointer/encode_alltypes_pointer.c
@@ -115,6 +115,16 @@
     static int32_t second = 9992;
     DescriptorSize8 req_ds8 = {&first, &second};
 
+    /* Values for IntSizes message. */
+    static int8_t req_int8 = -128;
+    static uint8_t req_uint8 = 255;
+    static int8_t req_sint8 = -128;
+    static int16_t req_int16 = -32768;
+    static uint16_t req_uint16 = 65535;
+    static int16_t req_sint16 = -32768;
+    IntSizes req_intsizes = {&req_int8, &req_uint8, &req_sint8,
+                             &req_int16, &req_uint16, &req_sint16};
+
     /* Initialize the message struct with pointers to the fields. */
     AllTypes alltypes = {0};
 
@@ -139,6 +149,7 @@
     alltypes.req_fbytes        = &req_fbytes;
     alltypes.req_limits        = &req_limits;
     alltypes.req_ds8           = &req_ds8;
+    alltypes.req_intsizes      = &req_intsizes;
     
     alltypes.rep_int32_count    = 5; alltypes.rep_int32     = rep_int32;
     alltypes.rep_int64_count    = 5; alltypes.rep_int64     = rep_int64;
diff --git a/tests/common_unittests/common_unittests.c b/tests/common_unittests/common_unittests.c
index 2fb1f9f..faa8173 100644
--- a/tests/common_unittests/common_unittests.c
+++ b/tests/common_unittests/common_unittests.c
@@ -91,21 +91,25 @@
         TEST(iter.required_field_index == 19)
         TEST(iter.submessage_index == 7)
 
-        TEST(pb_field_iter_next(&iter) && iter.tag == 97 && iter.pData == &msg.req_ds8 && !iter.pSize)
+        TEST(pb_field_iter_next(&iter) && iter.tag == 96 && iter.pData == &msg.req_intsizes && !iter.pSize)
         TEST(iter.required_field_index == 19)
         TEST(iter.submessage_index == 8)
 
-        TEST(pb_field_iter_next(&iter) && iter.tag == 98 && iter.pData == &msg.req_limits && !iter.pSize)
+        TEST(pb_field_iter_next(&iter) && iter.tag == 97 && iter.pData == &msg.req_ds8 && !iter.pSize)
         TEST(iter.required_field_index == 20)
         TEST(iter.submessage_index == 9)
 
-        TEST(pb_field_iter_next(&iter) && iter.tag == 200 && iter.pData == &msg.extensions && !iter.pSize)
+        TEST(pb_field_iter_next(&iter) && iter.tag == 98 && iter.pData == &msg.req_limits && !iter.pSize)
         TEST(iter.required_field_index == 21)
         TEST(iter.submessage_index == 10)
 
+        TEST(pb_field_iter_next(&iter) && iter.tag == 200 && iter.pData == &msg.extensions && !iter.pSize)
+        TEST(iter.required_field_index == 22)
+        TEST(iter.submessage_index == 11)
+
         TEST(pb_field_iter_next(&iter) && iter.tag == 999 && iter.pData == &msg.end && !iter.pSize)
-        TEST(iter.required_field_index == 21)
-        TEST(iter.submessage_index == 10)
+        TEST(iter.required_field_index == 22)
+        TEST(iter.submessage_index == 11)
 
         TEST(!pb_field_iter_next(&iter))
 
diff --git a/tests/field_size_16/alltypes.proto b/tests/field_size_16/alltypes.proto
index bd88108..c094421 100644
--- a/tests/field_size_16/alltypes.proto
+++ b/tests/field_size_16/alltypes.proto
@@ -29,6 +29,15 @@
     required int32      largetag   = 65535 [default = 0];
 }
 
+message IntSizes {
+    required int32  req_int8 =   1 ;
+    required uint32 req_uint8 =  2 ;
+    required sint32 req_sint8 =  3 ;
+    required int32  req_int16 =  4 ;
+    required uint32 req_uint16 = 5 ;
+    required sint32 req_sint16 = 6 ;
+}
+
 message DescriptorSize8 {
     required int32 first = 1;
     required int32 second = 22222;
@@ -118,6 +127,9 @@
         EmptyMessage oneof_msg2 = 10061;
     }
 
+    // Check support for custom integer sizes
+    required IntSizes req_intsizes = 96;
+
     // Check support for 8-word descriptors
     required DescriptorSize8 req_ds8 = 97;
 
diff --git a/tests/field_size_32/alltypes.proto b/tests/field_size_32/alltypes.proto
index e114301..536fc2a 100644
--- a/tests/field_size_32/alltypes.proto
+++ b/tests/field_size_32/alltypes.proto
@@ -29,6 +29,15 @@
     required int32      largetag   = 65535 [default = 0];
 }
 
+message IntSizes {
+    required int32  req_int8 =   1 ;
+    required uint32 req_uint8 =  2 ;
+    required sint32 req_sint8 =  3 ;
+    required int32  req_int16 =  4 ;
+    required uint32 req_uint16 = 5 ;
+    required sint32 req_sint16 = 6 ;
+}
+
 message DescriptorSize8 {
     required int32 first = 1;
     required int32 second = 22222;
@@ -118,6 +127,9 @@
         EmptyMessage oneof_msg2 = 10061;
     }
 
+    // Check support for custom integer sizes
+    required IntSizes req_intsizes = 96;
+
     // Check support for 8-word descriptors
     required DescriptorSize8 req_ds8 = 97;
 
diff --git a/tests/fuzztest/alltypes_pointer.options b/tests/fuzztest/alltypes_pointer.options
index 4ee5c52..0b633fc 100644
--- a/tests/fuzztest/alltypes_pointer.options
+++ b/tests/fuzztest/alltypes_pointer.options
@@ -3,3 +3,5 @@
 *.*fbytes fixed_length:true max_size:4
 *.*farray fixed_count:true max_count:5
 *.DescriptorSize8 descriptorsize:DS_8
+*.IntSizes.*int8 int_size:IS_8
+*.IntSizes.*int16 int_size:IS_16
diff --git a/tests/fuzztest/alltypes_static.options b/tests/fuzztest/alltypes_static.options
index c16bfd5..923da64 100644
--- a/tests/fuzztest/alltypes_static.options
+++ b/tests/fuzztest/alltypes_static.options
@@ -3,3 +3,5 @@
 *.*fbytes fixed_length:true max_size:4
 *.*farray fixed_count:true max_count:5
 *.DescriptorSize8 descriptorsize:DS_8
+*.IntSizes.*int8 int_size:IS_8
+*.IntSizes.*int16 int_size:IS_16