error: nested message type marked as exported
  --> testdata/strict_visibility.proto:7:5
   |
 6 | / export message Complete {
 7 | |     export message M {}
   | |     ^^^^^^ nested type exported here
 8 | |     export enum E { Z = 0; }
 9 | |     reserved 1 to max;
10 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nested message types cannot be marked as exported,
           even if all the field numbers of its parent are reserved

error: nested message type marked as exported
  --> testdata/strict_visibility.proto:13:5
   |
12 | / export message Complete2 {
13 | |     export message M {}
   | |     ^^^^^^ nested type exported here
14 | |     export enum E { Z = 0; }
15 | |     reserved 1 to 536870911;
16 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nested message types cannot be marked as exported,
           even if all the field numbers of its parent are reserved

error: expected exactly one reserved range
  --> testdata/strict_visibility.proto:19:5
   |
18 | / export message Split {
19 | |     export message M {}
   | |     ^^^^^^ nested type exported here
20 | |     export enum E { Z = 0; }
21 | |     reserved 1 to 5, 6 to max;
   | |              ------  -------- another here
   | |               |
   | |               one here
22 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type declare `reserved 1 to max;`, even if all of its field
           numbers are `reserved`
   = help: protoc erroneously rejects this, despite being equivalent

error: expected exactly one reserved range
  --> testdata/strict_visibility.proto:20:5
   |
18 | / export message Split {
19 | |     export message M {}
20 | |     export enum E { Z = 0; }
   | |     ^^^^^^ nested type exported here
21 | |     reserved 1 to 5, 6 to max;
   | |              ------  -------- another here
   | |               |
   | |               one here
22 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type declare `reserved 1 to max;`, even if all of its field
           numbers are `reserved`
   = help: protoc erroneously rejects this, despite being equivalent

warning: message type `buf.test.Incomplete1` does not reserve all field numbers
  --> testdata/strict_visibility.proto:25:5
   |
24 | / export message Incomplete1 {
25 | |     export message M {}
   | |     ^^^^^^ nested type exported here
26 | |     export enum E { Z = 0; }
27 | |     reserved 1 to 5;
28 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 6
   = help: protoc erroneously accepts this code due to a bug: it only checks
           that there is exactly one reserved range

warning: message type `buf.test.Incomplete1` does not reserve all field numbers
  --> testdata/strict_visibility.proto:26:5
   |
24 | / export message Incomplete1 {
25 | |     export message M {}
26 | |     export enum E { Z = 0; }
   | |     ^^^^^^ nested type exported here
27 | |     reserved 1 to 5;
28 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 6
   = help: protoc erroneously accepts this code due to a bug: it only checks
           that there is exactly one reserved range

warning: message type `buf.test.Incomplete2` does not reserve all field numbers
  --> testdata/strict_visibility.proto:31:5
   |
30 | / export message Incomplete2 {
31 | |     export message M {}
   | |     ^^^^^^ nested type exported here
32 | |     export enum E { Z = 0; }
33 | |     reserved 6 to max;
34 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 1
   = help: protoc erroneously accepts this code due to a bug: it only checks
           that there is exactly one reserved range

warning: message type `buf.test.Incomplete2` does not reserve all field numbers
  --> testdata/strict_visibility.proto:32:5
   |
30 | / export message Incomplete2 {
31 | |     export message M {}
32 | |     export enum E { Z = 0; }
   | |     ^^^^^^ nested type exported here
33 | |     reserved 6 to max;
34 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 1
   = help: protoc erroneously accepts this code due to a bug: it only checks
           that there is exactly one reserved range

error: message type `buf.test.Incomplete3` does not reserve all field numbers
  --> testdata/strict_visibility.proto:37:5
   |
36 | / export message Incomplete3 {
37 | |     export message M {}
   | |     ^^^^^^ nested type exported here
38 | |     export enum E { Z = 0; }
39 | |     reserved 1 to 5, 6 to 10;
40 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 11

error: message type `buf.test.Incomplete3` does not reserve all field numbers
  --> testdata/strict_visibility.proto:38:5
   |
36 | / export message Incomplete3 {
37 | |     export message M {}
38 | |     export enum E { Z = 0; }
   | |     ^^^^^^ nested type exported here
39 | |     reserved 1 to 5, 6 to 10;
40 | | }
   | \_- ... within this type
   |
  ::: testdata/strict_visibility.proto:4:45
   |
 4 | option features.default_symbol_visibility = STRICT;
   |                                             ------ `STRICT` specified here
   |
   = help: in strict mode, nesting an exported type within another type requires
           that that type reserve every field number (the "C++ namespace
           exception"), but this type does not reserve the field number 11

encountered 6 errors and 4 warnings
