From 9500c4aaee6731f0f6d1aef3f1d8d9aba0c72f95 Mon Sep 17 00:00:00 2001 From: MaartenBrock Date: Sat, 5 May 2007 16:48:00 +0000 Subject: [PATCH] * src/mcs51/peep.c (): fixed bug 1712928 * 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 | 2 ++ src/mcs51/peep.c | 4 +++- support/regression/tests/bug1712928.c | 29 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 support/regression/tests/bug1712928.c diff --git a/ChangeLog b/ChangeLog index 93b3c663..19aa4f96 100644 --- 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 diff --git a/src/mcs51/peep.c b/src/mcs51/peep.c index 872dded4..ad52c518 100644 --- a/src/mcs51/peep.c +++ b/src/mcs51/peep.c @@ -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 index 00000000..083bb5a5 --- /dev/null +++ b/support/regression/tests/bug1712928.c @@ -0,0 +1,29 @@ +/* + bug1712928.c +*/ + +#include + +#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 +} -- 2.30.2