Fixed compiler choosing whether to emit stradjust.pri on dynamic arrays based on uninitialized memory (bug 3810, r=fyren,pred, a12=blocking).
This commit is contained in:
parent
5096aef6e7
commit
bf8c57c669
@ -2303,12 +2303,13 @@ static int declloc(int fstatic)
|
|||||||
if (matchtoken(']')) {
|
if (matchtoken(']')) {
|
||||||
idxtag[numdim] = 0;
|
idxtag[numdim] = 0;
|
||||||
dim[numdim] = 0;
|
dim[numdim] = 0;
|
||||||
numdim++;
|
numdim++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
dim_ident = doexpr2(TRUE,FALSE,FALSE,FALSE,&idxtag[numdim],&dim_sym,0,&dim_val);
|
dim_ident = doexpr2(TRUE,FALSE,FALSE,FALSE,&idxtag[numdim],&dim_sym,0,&dim_val);
|
||||||
if (dim_ident == iVARIABLE || dim_ident == iEXPRESSION || dim_ident == iARRAYCELL) {
|
if (dim_ident == iVARIABLE || dim_ident == iEXPRESSION || dim_ident == iARRAYCELL) {
|
||||||
all_constant = 0;
|
all_constant = 0;
|
||||||
|
dim[numdim] = 0;
|
||||||
} else if (dim_ident == iCONSTEXPR) {
|
} else if (dim_ident == iCONSTEXPR) {
|
||||||
dim[numdim] = dim_val.constval;
|
dim[numdim] = dim_val.constval;
|
||||||
/* :TODO: :URGENT: Make sure this still works */
|
/* :TODO: :URGENT: Make sure this still works */
|
||||||
@ -2323,7 +2324,7 @@ static int declloc(int fstatic)
|
|||||||
error(29); /* invalid expression, assumed 0 */
|
error(29); /* invalid expression, assumed 0 */
|
||||||
}
|
}
|
||||||
numdim++;
|
numdim++;
|
||||||
needtoken(']');
|
needtoken(']');
|
||||||
} while (matchtoken('['));
|
} while (matchtoken('['));
|
||||||
if (all_constant) {
|
if (all_constant) {
|
||||||
/* Change the last dimension to be based on chars instead if we have a string */
|
/* Change the last dimension to be based on chars instead if we have a string */
|
||||||
@ -2335,7 +2336,7 @@ static int declloc(int fstatic)
|
|||||||
ident = iARRAY;
|
ident = iARRAY;
|
||||||
stgdel(_index, _code);
|
stgdel(_index, _code);
|
||||||
} else {
|
} else {
|
||||||
if (tag == pc_tag_string && numdim && dim[numdim-1]) {
|
if (tag == pc_tag_string && numdim) {
|
||||||
stradjust(sPRI);
|
stradjust(sPRI);
|
||||||
}
|
}
|
||||||
pushreg(sPRI);
|
pushreg(sPRI);
|
||||||
|
Loading…
Reference in New Issue
Block a user