Fix local variables being able to be self-assigned through initialization

This commit is contained in:
Daniel_Cortez 2019-06-28 20:52:13 +07:00
parent c9b3e44bcb
commit 5122a99e44
2 changed files with 5 additions and 0 deletions

View File

@ -2359,7 +2359,10 @@ static int declloc(int fstatic)
int ctag = tag; /* set to "tag" by default */
int explicit_init=FALSE;/* is the variable explicitly initialized? */
if (matchtoken('=')) {
sym->usage &= ~uDEFINE; /* temporarily mark the variable as undefined to prevent
* possible self-assignment through its initialization expression */
doexpr(FALSE,FALSE,FALSE,FALSE,&ctag,NULL,TRUE);
sym->usage |= uDEFINE;
explicit_init=TRUE;
} else {
ldconst(0,sPRI); /* uninitialized variable, set to zero */

View File

@ -1833,6 +1833,8 @@ static int primary(value *lval)
ldconst(0,sPRI); /* load 0 */
return FALSE; /* return 0 for labels (expression error) */
} /* if */
if ((sym->usage & uDEFINE)==0)
error_suggest(17,st,NULL,estSYMBOL,esfVARCONST); /* undefined symbol */
lval->sym=sym;
lval->ident=sym->ident;
lval->tag=sym->tag;