src/SDCCast.c (decorateType): fixed bug #902362
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 23 Feb 2004 07:57:04 +0000 (07:57 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 23 Feb 2004 07:57:04 +0000 (07:57 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3228 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCast.c

index 9d0411702d3c58ff2708723c7aa1142e62a99867..313cfb6aceebbeaa92a5ff98fd6a5992813504a5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2004-02-23 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCast.c (decorateType): fixed bug #902362
+
 2004-02-21 Bernhard Held <bernhard AT bernhardheld.de>
 
        * device/include/Makefile.in (install): fixed by replacing spaces
index 57435e5df0065e77319e9d74a61903a76d414705..3b422b8f1e0cf48c5c65d53421fa09d8a5f274b4 100644 (file)
@@ -2287,7 +2287,10 @@ decorateType (ast * tree, RESULT_TYPE resultType)
        upon tree->opval.op, if resultType can be propagated */
     resultTypeProp = resultTypePropagate (tree, resultType);
 
-    dtl = decorateType (tree->left, resultTypeProp);
+    if (tree->opval.op == '?')
+      dtl = decorateType (tree->left, RESULT_TYPE_NONE);
+    else
+      dtl = decorateType (tree->left, resultTypeProp);
 
     /* if an array node, we may need to swap branches */
     if (tree->opval.op == '[')
@@ -2791,7 +2794,8 @@ decorateType (ast * tree, RESULT_TYPE resultType)
        {
          tree->type = EX_VALUE;
          tree->opval.val = valDiv (valFromType (LETYPE (tree)),
-                                   valFromType (RETYPE (tree)));
+                                   valFromType (RETYPE (tree)),
+                              resultType == RESULT_TYPE_CHAR ? FALSE : TRUE);
          tree->right = tree->left = NULL;
          TETYPE (tree) = getSpec (TTYPE (tree) =
                                   tree->opval.val->type);
@@ -2946,7 +2950,8 @@ decorateType (ast * tree, RESULT_TYPE resultType)
        {
          tree->type = EX_VALUE;
          tree->opval.val = valMult (valFromType (LETYPE (tree)),
-                                    valFromType (RETYPE (tree)));
+                                    valFromType (RETYPE (tree)),
+                              resultType == RESULT_TYPE_CHAR ? FALSE : TRUE);
          tree->right = tree->left = NULL;
          TETYPE (tree) = getSpec (TTYPE (tree) =
                                   tree->opval.val->type);