Added error message for union values out of range.
Change-Id: I481afcde6a554d1cad519ff95acac7f38a7f4ee5 Tested: on Linux.
This commit is contained in:
parent
cfbab31fb1
commit
9d01bfaea3
|
@ -1340,6 +1340,10 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
|
|||
enum_def.vals.vec[prevsize - 1]->value >= ev.value)
|
||||
return Error("enum values must be specified in ascending order");
|
||||
}
|
||||
if (is_union) {
|
||||
if (ev.value < 0 || ev.value >= 256)
|
||||
return Error("union enum value must fit in a ubyte");
|
||||
}
|
||||
if (opts.proto_mode && Is('[')) {
|
||||
NEXT();
|
||||
// ignore attributes on enums.
|
||||
|
|
|
@ -1010,6 +1010,7 @@ void ErrorTest() {
|
|||
TestError("enum X:float {}", "underlying");
|
||||
TestError("enum X:byte { Y, Y }", "value already");
|
||||
TestError("enum X:byte { Y=2, Z=1 }", "ascending");
|
||||
TestError("union X { Y = 256 }", "must fit");
|
||||
TestError("enum X:byte (bit_flags) { Y=8 }", "bit flag out");
|
||||
TestError("table X { Y:int; } table X {", "datatype already");
|
||||
TestError("struct X (force_align: 7) { Y:int; }", "force_align");
|
||||
|
|
Loading…
Reference in New Issue