int ret;
if (name) {
- ret = unlink (name);
+ ret = remove (name);
assert(ret == 0);
Safe_free (name);
}
sym->rname, equ,
SPEC_ADDR (sym->etype));
}
- else {
- int size = getSize (sym->type) + sym->flexArrayLength;
- if (size==0) {
- werrorfl (sym->fileDef, sym->lineDef, E_UNKNOWN_SIZE, sym->name);
- }
- /* allocate space */
- if (options.debug) {
- fprintf (map->oFile, "==.\n");
+ else
+ {
+ int size = getSize (sym->type) + sym->flexArrayLength;
+ if (size==0) {
+ werrorfl (sym->fileDef, sym->lineDef, E_UNKNOWN_SIZE, sym->name);
+ }
+ /* allocate space */
+ if (options.debug) {
+ fprintf (map->oFile, "==.\n");
+ }
+ if (IS_STATIC (sym->etype) || sym->level)
+ tfprintf (map->oFile, "!slabeldef\n", sym->rname);
+ else
+ tfprintf (map->oFile, "!labeldef\n", sym->rname);
+ tfprintf (map->oFile, "\t!ds\n",
+ (unsigned int) size & 0xffff);
}
- if (IS_STATIC (sym->etype))
- tfprintf (map->oFile, "!slabeldef\n", sym->rname);
- else
- tfprintf (map->oFile, "!labeldef\n", sym->rname);
- tfprintf (map->oFile, "\t!ds\n",
- (unsigned int) size & 0xffff);
- }
}
}
if (IS_AST_OP (expr) && expr->opval.op == '&') {
/* address of symbol */
if (IS_AST_SYM_VALUE (expr->left)) {
- val = copyValue (AST_VALUE (expr->left));
+ val = AST_VALUE (expr->left);
val->type = newLink (DECLARATOR);
if (SPEC_SCLS (expr->left->etype) == S_CODE) {
DCL_TYPE (val->type) = CPOINTER;
iloop = ilist->init.deep;
}
- for (; sflds; sflds = sflds->next, iloop = (iloop ? iloop->next : NULL)) {
- if (IS_BITFIELD(sflds->type)) {
- printIvalBitFields(&sflds,&iloop,oFile);
- } else {
- printIval (sym, sflds->type, iloop, oFile);
+ if (SPEC_STRUCT (type)->type == UNION) {
+ printIval (sym, sflds->type, iloop, oFile);
+ iloop = iloop->next;
+ } else {
+ for (; sflds; sflds = sflds->next, iloop = (iloop ? iloop->next : NULL)) {
+ if (IS_BITFIELD(sflds->type)) {
+ printIvalBitFields(&sflds,&iloop,oFile);
+ } else {
+ printIval (sym, sflds->type, iloop, oFile);
+ }
}
}
if (iloop) {
printIvalArray (symbol * sym, sym_link * type, initList * ilist,
FILE * oFile)
{
+ value *val;
initList *iloop;
unsigned int size = 0;
/* array of characters can be init */
/* by a string */
if (IS_CHAR (type->next)) {
- if (!IS_LITERAL(list2val(ilist)->etype)) {
+ val = list2val(ilist);
+ if (!val) {
+ werrorfl (ilist->filename, ilist->lineno, E_INIT_STRUCT, sym->name);
+ return;
+ }
+ if (!IS_LITERAL(val->etype)) {
werrorfl (ilist->filename, ilist->lineno, E_CONST_EXPECTED);
return;
}
if (IS_EXTERN (sym->etype))
continue;
- /* if it is not static add it to the public
- table */
+ /* if it is not static add it to the public table */
if (!IS_STATIC (sym->etype))
{
addSetHead (&publics, sym);
if (mainf && IFFUNC_HASBODY(mainf->type))
{
-
/* entry point @ start of HOME */
fprintf (asmFile, "__sdcc_program_startup:\n");