From a30624dcc08896f99e5c4431d1f20e8525934e26 Mon Sep 17 00:00:00 2001 From: johanknol Date: Wed, 21 May 2003 09:20:49 +0000 Subject: [PATCH] fixed bug #739934 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2636 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCglue.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/SDCCglue.c b/src/SDCCglue.c index 065a56a4..d8ac3a12 100644 --- a/src/SDCCglue.c +++ b/src/SDCCglue.c @@ -1073,7 +1073,7 @@ printIvalPtr (symbol * sym, sym_link * type, initList * ilist, FILE * oFile) void printIval (symbol * sym, sym_link * type, initList * ilist, FILE * oFile) { - value *val; + sym_link *itype; if (!ilist) return; @@ -1096,24 +1096,28 @@ printIval (symbol * sym, sym_link * type, initList * ilist, FILE * oFile) } // not an aggregate, ilist must be a node - if (ilist->type!=INIT_NODE && + if (ilist->type!=INIT_NODE) { // or a 1-element list - ilist->init.deep->next) { - werror (W_EXCESS_INITIALIZERS, "scalar", - sym->name, sym->lineDef); + if (ilist->init.deep->next) { + werror (W_EXCESS_INITIALIZERS, "scalar", + sym->name, sym->lineDef); + } else { + ilist=ilist->init.deep; + } } // and the type must match - val=list2val(ilist); - if (compareType(type, val->type)==0) { + itype=ilist->init.node->ftype; + + if (compareType(type, itype)==0) { // special case for literal strings - if (IS_ARRAY (val->type) && IS_CHAR (val->etype) && + if (IS_ARRAY (itype) && IS_CHAR (getSpec(type)) && // which are really code pointers IS_PTR(type) && DCL_TYPE(type)==CPOINTER) { // no sweat } else { werror (E_TYPE_MISMATCH, "assignment", " "); - printFromToType(list2val(ilist)->type, type); + printFromToType(itype, type); } } -- 2.30.2