fixed bug #475821
[fw/sdcc] / src / SDCCast.c
index 2cc429de7c11f1f68b4bfc367e218e7d74aa9eab..99e4bef7f7683784d112cbbfc2550d5b1c9cb255 100644 (file)
@@ -259,6 +259,9 @@ copyAst (ast * src)
   dest->level = src->level;
   dest->funcName = src->funcName;
 
+  if (src->ftype)
+    dest->etype = getSpec (dest->ftype = copyLinkChain (src->ftype));
+
   /* if this is a leaf */
   /* if value */
   if (src->type == EX_VALUE)
@@ -279,9 +282,6 @@ copyAst (ast * src)
   /* if this is a node that has special values */
   copyAstValues (dest, src);
 
-  if (src->ftype)
-    dest->etype = getSpec (dest->ftype = copyLinkChain (src->ftype));
-
   dest->trueLabel = copySymbol (src->trueLabel);
   dest->falseLabel = copySymbol (src->falseLabel);
   dest->left = copyAst (src->left);
@@ -739,12 +739,7 @@ processParms (ast * func,
   /* the parameter type must be at least castable */
   if (compareType (defParm->type, actParm->ftype) == 0) {
     werror (E_INCOMPAT_TYPES);
-    fprintf (stderr, "type --> '");
-    printTypeChain (actParm->ftype, stderr);
-    fprintf (stderr, "' ");
-    fprintf (stderr, "assigned to type --> '");
-    printTypeChain (defParm->type, stderr);
-    fprintf (stderr, "'\n");
+    printFromToType (actParm->ftype, defParm->type);
     return 1;
   }
 
@@ -791,6 +786,7 @@ ast *
 createIvalStruct (ast * sym, sym_link * type, initList * ilist)
 {
   ast *rast = NULL;
+  ast *lAst;
   symbol *sflds;
   initList *iloop;
 
@@ -805,8 +801,6 @@ createIvalStruct (ast * sym, sym_link * type, initList * ilist)
 
   for (; sflds; sflds = sflds->next, iloop = (iloop ? iloop->next : NULL))
     {
-      ast *lAst;
-
       /* if we have come to end */
       if (!iloop)
        break;
@@ -2133,7 +2127,7 @@ decorateType (ast * tree)
       /* if bit field then error */
       if (IS_BITVAR (tree->left->etype))
        {
-         werror (E_ILLEGAL_ADDR, "addrress of bit variable");
+         werror (E_ILLEGAL_ADDR, "address of bit variable");
          goto errorTreeReturn;
        }
 
@@ -2149,7 +2143,13 @@ decorateType (ast * tree)
          goto errorTreeReturn;
        }
 
-      if (LRVAL (tree))
+      if (IS_LITERAL(LTYPE(tree)))
+       {
+         werror (E_ILLEGAL_ADDR, "address of literal");
+         goto errorTreeReturn;
+       }
+
+     if (LRVAL (tree))
        {
          werror (E_LVALUE_REQUIRED, "address of");
          goto errorTreeReturn;
@@ -3052,12 +3052,7 @@ decorateType (ast * tree)
       if (IS_VOID (LTYPE (tree)))
        {
          werror (E_CAST_ZERO);
-         fprintf (stderr, "type --> '");
-         printTypeChain (RTYPE (tree), stderr);
-         fprintf (stderr, "' ");
-         fprintf (stderr, "assigned to type --> '");
-         printTypeChain (LTYPE (tree), stderr);
-         fprintf (stderr, "'\n");
+         printFromToType(RTYPE(tree), LTYPE(tree));
        }
 
       TETYPE (tree) = getSpec (TTYPE (tree) =
@@ -3117,11 +3112,7 @@ decorateType (ast * tree)
       if (compareType (currFunc->type->next, RTYPE (tree)) == 0)
        {
          werror (W_RETURN_MISMATCH);
-         fprintf (stderr, "from type '");
-         printTypeChain (RTYPE(tree), stderr);
-         fprintf (stderr, "' to type '");
-         printTypeChain (currFunc->type->next, stderr);
-         fprintf (stderr, "'\n");
+         printFromToType (RTYPE(tree), currFunc->type->next);
          goto errorTreeReturn;
        }