From: johanknol Date: Fri, 24 Jan 2003 16:42:12 +0000 (+0000) Subject: fixed bug #458099 (again, but now better) X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=9df3b7ca4140682c53e39d63e8b91fe52609dca7;p=fw%2Fsdcc fixed bug #458099 (again, but now better) git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2170 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index a7440963..f16d4ca7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 2003-01-24 + * src/SDCCglue.c (emitRegularMap): fixed bug #458099 again * src/SDCCast.c (createIvalCharPtr): fixed bug #661910 2003-01-24 Bernhard Held diff --git a/src/SDCCast.c b/src/SDCCast.c index 3651b786..8ecb5709 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -966,7 +966,14 @@ createIvalCharPtr (ast * sym, sym_link * type, ast * iexpr) newAst_VALUE (valueFromLit ((float) i))), newAst_VALUE (valueFromLit (*s)))); - return decorateType (resolveSymbols (rast)); + // now we don't need iexpr's symbol anymore + { + symbol *sym=AST_SYMBOL(iexpr); + memmap *segment=SPEC_OCLS(sym->etype); + deleteSetItem(&segment->syms, sym); + } + + return decorateType(resolveSymbols (rast)); } return NULL; @@ -1226,6 +1233,10 @@ bool constExprTree (ast *cexpr) { // a function's address will never change return TRUE; } + if (IS_AST_SYM_VALUE(cexpr) && IS_ARRAY(AST_SYMBOL(cexpr)->type)) { + // an array's address will never change + return TRUE; + } if (IS_AST_SYM_VALUE(cexpr) && IN_CODESPACE(SPEC_OCLS(AST_SYMBOL(cexpr)->etype))) { // a symbol in code space will never change diff --git a/src/SDCCglue.c b/src/SDCCglue.c index 59f82998..6b100947 100644 --- a/src/SDCCglue.c +++ b/src/SDCCglue.c @@ -256,7 +256,6 @@ emitRegularMap (memmap * map, bool addPublics, bool arFlag) sprintf (newSym->rname,"__xinit_%s", sym->rname); SPEC_CONST(newSym->etype)=1; SPEC_STAT(newSym->etype)=1; - resolveIvalSym(newSym->ival); // add it to the "XINIT (CODE)" segment addSet(&xinit->syms, newSym);