fixed the remainder of bug #485513
[fw/sdcc] / src / SDCCglue.c
index bb4e41b695da5fc509ade3d08e9e0f6fcdf38703..e0d0619a6eea9029e4ba5bc6e0fc9eae79ebf34d 100644 (file)
@@ -259,12 +259,20 @@ emitRegularMap (memmap * map, bool addPublics, bool arFlag)
                            decorateType (resolveSymbols (list2expr (sym->ival))));
          }
          codeOutFile = statsg->oFile;
-         allocInfo = 0;
-         
-         // set ival's lineno to where the symbol was defined
-         if (ival) ival->lineno=sym->lineDef;
-         eBBlockFromiCode (iCodeFromAst (ival));
-         allocInfo = 1;
+
+         if (ival) {
+           // set ival's lineno to where the symbol was defined
+           lineno=ival->lineno=sym->lineDef;
+           
+           // check if this is a constant expression
+           if (constExprTree(ival->right)) {
+             allocInfo = 0;
+             eBBlockFromiCode (iCodeFromAst (ival));
+             allocInfo = 1;
+           } else {
+             werror (E_CONST_EXPECTED, "found expression");
+           }
+         }
        }         
 
        /* if the ival is a symbol assigned to an aggregate,
@@ -559,7 +567,11 @@ printIvalType (symbol *sym, sym_link * type, initList * ilist, FILE * oFile)
          werror (W_EXCESS_INITIALIZERS, "scalar", sym->name, sym->lineDef);
        }
 
-       val = list2val (ilist);
+       if (!(val = list2val (ilist))) {
+         // assuming a warning has been thrown
+         val=constVal("0");
+       }
+
        if (val->type != type) {
          val = valCastLiteral(type, floatFromVal(val));
        }