* src/pic/pcode.c (newpCodeOpBit): search SymbolTab for referenced
authortecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 11 Nov 2006 23:23:47 +0000 (23:23 +0000)
committertecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 11 Nov 2006 23:23:47 +0000 (23:23 +0000)
  bitfield symbols, fixes #1579535 (once more...).

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4471 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/pic/pcode.c

index 3c8b0e74f94d7672a1b9131b3d7ebfd6d36ccaec..f515c2dd5109d34fcf7b1928d81bf0cf2faf2743 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-11-11 Raphael Neider <rneider AT web.de>
+
+       * src/pic/pcode.c (newpCodeOpBit): search SymbolTab for referenced
+         bitfield symbols, fixes #1579535 (once more...).
+
 2006-11-09 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
 
        * support/regression/generate-cases.py,
 2006-11-09 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
 
        * support/regression/generate-cases.py,
index c37d6ff85359a323aaba0e2892a1e7fb0bdc0eba..245385a0c1cbf61e01b7a3baf9c37a238cd61955 100644 (file)
@@ -2339,6 +2339,11 @@ pCodeOp *newpCodeOpBit(char *name, int ibit, int inBitSpace)
                sym = symFindWithName(bit, name);
                if (!sym) sym = symFindWithName(sfrbit, name);
                if (!sym) sym = symFindWithName(sfr, name);
                sym = symFindWithName(bit, name);
                if (!sym) sym = symFindWithName(sfrbit, name);
                if (!sym) sym = symFindWithName(sfr, name);
+               if (!sym) sym = symFindWithName(reg, name);
+               // Hack to fix accesses to _INTCON_bits (e.g. GIE=0), see #1579535.
+               // XXX: This ignores nesting levels, but works for globals...
+               if (!sym) sym = findSym(SymbolTab, NULL, name);
+               if (!sym && name && name[0] == '_') sym = findSym(SymbolTab, NULL, &name[1]);
                if (sym) {
                        r = allocNewDirReg(sym->etype,name);
                }
                if (sym) {
                        r = allocNewDirReg(sym->etype,name);
                }