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)
|
enum_def.vals.vec[prevsize - 1]->value >= ev.value)
|
||||||
return Error("enum values must be specified in ascending order");
|
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('[')) {
|
if (opts.proto_mode && Is('[')) {
|
||||||
NEXT();
|
NEXT();
|
||||||
// ignore attributes on enums.
|
// ignore attributes on enums.
|
||||||
|
|
|
@ -1010,6 +1010,7 @@ void ErrorTest() {
|
||||||
TestError("enum X:float {}", "underlying");
|
TestError("enum X:float {}", "underlying");
|
||||||
TestError("enum X:byte { Y, Y }", "value already");
|
TestError("enum X:byte { Y, Y }", "value already");
|
||||||
TestError("enum X:byte { Y=2, Z=1 }", "ascending");
|
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("enum X:byte (bit_flags) { Y=8 }", "bit flag out");
|
||||||
TestError("table X { Y:int; } table X {", "datatype already");
|
TestError("table X { Y:int; } table X {", "datatype already");
|
||||||
TestError("struct X (force_align: 7) { Y:int; }", "force_align");
|
TestError("struct X (force_align: 7) { Y:int; }", "force_align");
|
||||||
|
|
Loading…
Reference in New Issue