* src/mcs51/peep.c (): fixed bug 1712928
authorMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 5 May 2007 16:48:00 +0000 (16:48 +0000)
committerMaartenBrock <MaartenBrock@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sat, 5 May 2007 16:48:00 +0000 (16:48 +0000)
* support/regression/tests/bug1712928.c: new, added

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

ChangeLog
src/mcs51/peep.c
support/regression/tests/bug1712928.c [new file with mode: 0644]

index 93b3c663554dd4fdd5e7fabf84f3a2f5de003589..19aa4f96f8d121eafce51867aa8ade7ba5caf0cc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,8 @@
        * src/z80/peeph-z80.def,
        * src/z80/peeph.def: whole set of new rules by Philipp Krause with some
          modifications, see patch 1700823
+       * src/mcs51/peep.c (): fixed bug 1712928
+       * support/regression/tests/bug1712928.c: new, added
 
 2007-05-05 Borut Razem <borut.razem AT siol.net>
 
index 872dded4c587274b8ad5e31274e45c073aaad6cb..ad52c518e46b959fdd5d1a114eff8779363f050f 100644 (file)
@@ -216,7 +216,7 @@ isFunc (const lineNode *pl)
 
 /*-----------------------------------------------------------------*/
 /* isCallerSaveFunc - returns TRUE if it's a 'normal' function     */
-/* call and it's a 'caller save' (not 'callee save')               */
+/* call and it's a 'caller save' (not 'callee save' or 'naked')    */
 /*-----------------------------------------------------------------*/
 static bool
 isCallerSaveFunc (const lineNode *pl)
@@ -225,6 +225,8 @@ isCallerSaveFunc (const lineNode *pl)
     return FALSE;
   if (FUNC_CALLEESAVES(OP_SYM_TYPE(IC_LEFT(pl->ic))))
     return FALSE;
+  if (FUNC_ISNAKED(OP_SYM_TYPE(IC_LEFT(pl->ic))))
+    return FALSE;
   return TRUE;
 }
 
diff --git a/support/regression/tests/bug1712928.c b/support/regression/tests/bug1712928.c
new file mode 100644 (file)
index 0000000..083bb5a
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+   bug1712928.c
+*/
+
+#include <testfwk.h>
+
+#if defined (SDCC_mcs51)
+unsigned char NakedFunc(void) __naked
+{
+       __asm
+       mov     dpl,#0x01
+       ret
+       __endasm;
+}
+#endif
+
+void
+testBug(void)
+{
+#if defined (SDCC_mcs51)
+       unsigned char hsum, sum;
+
+       hsum = NakedFunc();
+       sum = NakedFunc();
+       sum += hsum;
+
+       ASSERT(sum == 2);
+#endif
+}