Fix misfiring of error 308 by calculating type sizes when not already calculated.

This commit is contained in:
David Brown 2016-11-15 22:59:43 +00:00
parent c12aae020d
commit 65db905f0b
6 changed files with 11 additions and 0 deletions

View file

@ -2172,6 +2172,8 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, INT8 fctno)
if (((x->class == 8 || x->class == 9) || __IN(f, 0x0501, 32)) || x->typ->comp == 3) {
OPB_err(126);
}
OPT_TypSize(x->typ);
OPT_TypSize(p->typ);
if ((x->class != 7 && x->typ->size < p->typ->size)) {
OPB_err(-308);
}

View file

@ -2172,6 +2172,8 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, INT8 fctno)
if (((x->class == 8 || x->class == 9) || __IN(f, 0x0501, 32)) || x->typ->comp == 3) {
OPB_err(126);
}
OPT_TypSize(x->typ);
OPT_TypSize(p->typ);
if ((x->class != 7 && x->typ->size < p->typ->size)) {
OPB_err(-308);
}

View file

@ -2172,6 +2172,8 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, INT8 fctno)
if (((x->class == 8 || x->class == 9) || __IN(f, 0x0501, 32)) || x->typ->comp == 3) {
OPB_err(126);
}
OPT_TypSize(x->typ);
OPT_TypSize(p->typ);
if ((x->class != 7 && x->typ->size < p->typ->size)) {
OPB_err(-308);
}

View file

@ -2172,6 +2172,8 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, INT8 fctno)
if (((x->class == 8 || x->class == 9) || __IN(f, 0x0501, 32)) || x->typ->comp == 3) {
OPB_err(126);
}
OPT_TypSize(x->typ);
OPT_TypSize(p->typ);
if ((x->class != 7 && x->typ->size < p->typ->size)) {
OPB_err(-308);
}

View file

@ -2172,6 +2172,8 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, INT8 fctno)
if (((x->class == 8 || x->class == 9) || __IN(f, 0x0501, 32)) || x->typ->comp == 3) {
OPB_err(126);
}
OPT_TypSize(x->typ);
OPT_TypSize(p->typ);
if ((x->class != 7 && x->typ->size < p->typ->size)) {
OPB_err(-308);
}

View file

@ -1226,6 +1226,7 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
err(126)
END;
(* Warn if the result type includes memory past the end of the source variable *)
OPT.TypSize(x.typ); OPT.TypSize(p.typ);
IF (x.class # OPT.Nconst) & (x.typ.size < p.typ.size) THEN err(-308) END;
IF (x.class = OPT.Nconst) & (x.typ.form = OPT.Int) & (p.typ.form = OPT.Int) THEN