triggers an error for issue #129
cond ? array1 : array2 Triggers an array if the size of array1 and array2 do not match.
This commit is contained in:
parent
687d1ff017
commit
9e4a2b283f
@ -1063,6 +1063,7 @@ static int hier13(value *lval)
|
|||||||
int flab2=getlabel();
|
int flab2=getlabel();
|
||||||
value lval2={0};
|
value lval2={0};
|
||||||
int array1,array2;
|
int array1,array2;
|
||||||
|
int asize1 = -1, asize2 = -1; /* -1 indicates that the value is not an array */
|
||||||
|
|
||||||
if (lvalue) {
|
if (lvalue) {
|
||||||
rvalue(lval);
|
rvalue(lval);
|
||||||
@ -1118,6 +1119,17 @@ static int hier13(value *lval)
|
|||||||
error(33,ptr); /* array must be indexed */
|
error(33,ptr); /* array must be indexed */
|
||||||
} /* if */
|
} /* if */
|
||||||
/* ??? if both are arrays, should check dimensions */
|
/* ??? if both are arrays, should check dimensions */
|
||||||
|
if (lval->ident == iARRAY)
|
||||||
|
asize1 = (lval->sym == NULL) ? (lval->constval > 0 ? lval->constval : -lval->constval) : lval->sym->dim.array.length;
|
||||||
|
if (lval->ident == iREFARRAY)
|
||||||
|
asize1 = lval->sym->dim.array.length;
|
||||||
|
if (lval2.ident == iARRAY)
|
||||||
|
asize2 = (lval2.sym == NULL) ? (lval2.constval > 0 ? lval2.constval : -lval2.constval) : lval2.sym->dim.array.length;
|
||||||
|
if (lval2.ident == iREFARRAY)
|
||||||
|
asize2 = lval2.sym->dim.array.length;
|
||||||
|
if (asize1 != -1 && asize2 != -1)
|
||||||
|
if (asize1 != asize2)
|
||||||
|
error(47);
|
||||||
if (!matchtag(lval->tag,lval2.tag,FALSE))
|
if (!matchtag(lval->tag,lval2.tag,FALSE))
|
||||||
error(213); /* tagname mismatch ('true' and 'false' expressions) */
|
error(213); /* tagname mismatch ('true' and 'false' expressions) */
|
||||||
setlabel(flab2);
|
setlabel(flab2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user