Fix local variables being able to be self-assigned through initialization
This commit is contained in:
parent
c9b3e44bcb
commit
5122a99e44
@ -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 */
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user