* src/pic/pcode.c (register_reassign): do not crash on recursive code
authortecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 1 Dec 2006 08:49:18 +0000 (08:49 +0000)
committertecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 1 Dec 2006 08:49:18 +0000 (08:49 +0000)
  but emit warning (recursion is not supported for pic14)

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

ChangeLog
src/pic/pcode.c

index 6403125f07578b52cb77afbeedf8b2f4efa988f8..0068839535d0201c5de21ecbbb1ad04f560b0dae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-01 Raphael Neider <rneider AT web.de>
+
+       * src/pic/pcode.c (register_reassign): do not crash on recursive code
+         but emit warning (recursion is not supported for pic14)
+
 2006-11-30 Frieder Ferlemann <Frieder.Ferlemann AT web.de>
 
        * src/mcs51/peeph.def: added 101.a,b (moves to int/long xdata)
index 100a5f76f036b310cd3081ec8bbd5c17efb9f2f1..fa1d6eefa50d9c1467d16ec491a5846f34d5240a 100644 (file)
@@ -5272,6 +5272,17 @@ static unsigned register_reassign(pBlock *pb, unsigned idx)
        pc = setFirstItem(pb->function_entries);
        if(!pc)
                return idx;
+
+       if (pb->visited) {
+           static int output = 0;
+           if (output < 3) {
+               pc = findNextpCode(pb->pcHead, PC_FUNCTION);
+               fprintf(stderr, "WARNING: Recursive code (%s) probably won't work, check the .asm file.\n",
+                       pc ? PCF(pc)->fname : "unknown function");
+               output++;
+           }
+           return idx;
+       }
        
        pb->visited = 1;