Many changes. Started a second pass to the register allocator & true 10bit stack
[fw/sdcc] / src / SDCCast.c
index e876cc4a662f131b6ec7a48ffdb950adbf1c4cd4..52e51ba446f393514edc865b0413a1d356d6abba 100644 (file)
@@ -1095,11 +1095,16 @@ gatherAutoInit (symbol * autoChain)
          addSym (SymbolTab, newSym, newSym->rname, 0, 0, 1);
 
          /* now lift the code to main */
-         if (IS_AGGREGATE (sym->type))
+         if (IS_AGGREGATE (sym->type)) {
            work = initAggregates (sym, sym->ival, NULL);
-         else
+         } else {
+           if (getNelements(sym->type, sym->ival)>1) {
+             werror (W_EXCESS_INITIALIZERS, "scalar", 
+                     sym->name, sym->lineDef);
+           }
            work = newNode ('=', newAst_VALUE (symbolVal (newSym)),
                            list2expr (sym->ival));
+         }
 
          setAstLineno (work, sym->lineDef);
 
@@ -1118,6 +1123,10 @@ gatherAutoInit (symbol * autoChain)
          if (IS_AGGREGATE (sym->type)) {
            work = initAggregates (sym, sym->ival, NULL);
          } else {
+           if (getNelements(sym->type, sym->ival)>1) {
+             werror (W_EXCESS_INITIALIZERS, "scalar", 
+                     sym->name, sym->lineDef);
+           }
            work = newNode ('=', newAst_VALUE (symbolVal (sym)),
                            list2expr (sym->ival));
          }
@@ -2141,8 +2150,10 @@ decorateType (ast * tree)
        DCL_TYPE (p) = IPOINTER;
       else if (SPEC_SCLS (tree->left->etype) == S_EEPROM)
        DCL_TYPE (p) = EEPPOINTER;
+      else if (SPEC_OCLS(tree->left->etype))
+         DCL_TYPE (p) = PTR_TYPE(SPEC_OCLS(tree->left->etype));
       else
-       DCL_TYPE (p) = POINTER;
+         DCL_TYPE (p) = POINTER;
 
       if (IS_AST_SYM_VALUE (tree->left))
        {