* src/SDCCicode.h,
[fw/sdcc] / src / pic / ralloc.c
index 7266470d807428f67e2970f7407a1c7e76b6dd71..25c3036959085bdb26ba599793c41aa4e873da9a 100644 (file)
@@ -2726,24 +2726,22 @@ regTypeNum ()
                        in "data" space */
                        
                        if (bitVectnBitsOn (sym->defs) == 1 &&
-                               (ic = hTabItemWithKey (iCodehTab,
-                               bitVectFirstBit (sym->defs))) &&
-                               POINTER_GET (ic) &&
-                               !sym->noSpilLoc &&
-                               !IS_BITVAR (sym->etype)) {
-                               
-                               
-                               debugLog ("  %d - \n", __LINE__);
+                           (ic = hTabItemWithKey (iCodehTab,
+                                                  bitVectFirstBit (sym->defs))) &&
+                           POINTER_GET (ic) &&
+                           !IS_BITVAR (sym->etype) &&
+                           (aggrToPtrDclType (operandType (IC_LEFT (ic)), FALSE) == POINTER)) {
+
+                               if (ptrPseudoSymSafe (sym, ic)) {
+
+                                       debugLog ("  %d - \n", __LINE__);
                                
-                               /* if remat in data space */
-                               if (OP_SYMBOL (IC_LEFT (ic))->remat &&
-                                       DCL_TYPE (aggrToPtr (sym->type, FALSE)) == POINTER) {
-                                       
                                        /* create a psuedo symbol & force a spil */
                                        //X symbol *psym = newSymbol (rematStr (OP_SYMBOL (IC_LEFT (ic))), 1);
                                        symbol *psym = rematStr (OP_SYMBOL (IC_LEFT (ic)));
                                        psym->type = sym->type;
                                        psym->etype = sym->etype;
+                                       psym->psbase = ptrBaseRematSym (OP_SYMBOL (IC_LEFT (ic)));
                                        strcpy (psym->rname, psym->name);
                                        sym->isspilt = 1;
                                        sym->usl.spillLoc = psym;