From: johanknol Date: Sat, 2 Mar 2002 16:56:44 +0000 (+0000) Subject: fixed bug#524708 X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=b7d2b488b4368d81ca1652ae6f153f6a501f8c37;p=fw%2Fsdcc fixed bug#524708 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1975 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/SDCCast.c b/src/SDCCast.c index b6f7cbfb..871bf904 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -2658,11 +2658,16 @@ decorateType (ast * tree) /* a left shift must be done with at least 16bits */ if ((tree->opval.op==LEFT_OP) && (getSize(LTYPE(tree))<2)) { // insert a cast - tree->left = - decorateType (newNode (CAST, - newAst_LINK(copyLinkChain(LTYPE(tree))), - tree->left)); - SPEC_NOUN(tree->left->left->ftype)=V_INT; + if (IS_AST_SYM_VALUE(tree->left)) { + tree->left = + decorateType (newNode (CAST, + newAst_LINK(copyLinkChain(LTYPE(tree))), + tree->left)); + SPEC_NOUN(tree->left->left->ftype)=V_INT; + } else { + // must be a literal, we can do it right away + SPEC_NOUN(tree->left->opval.val->type)=V_INT; + } } /* if only the right side is a literal & we are shifting more than size of the left operand then zero */