From f2ea48d4b2b1682a5673389d2b7c4fbdaca71535 Mon Sep 17 00:00:00 2001 From: epetrich Date: Wed, 20 Jun 2007 05:37:10 +0000 Subject: [PATCH] * src/SDCCast.c (inlineFindMaxBlockno, createFunction): fixed bug 1731741 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4857 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- ChangeLog | 4 ++++ src/SDCCast.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/ChangeLog b/ChangeLog index 772a6ab3..d3e45e7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-06-20 Erik Petrich + * src/SDCCast.c (inlineFindMaxBlockno, createFunction): fixed + bug 1731741 + 2007-06-18 Borut Razem * src/SDCCmain.c: removed option -C since SDCC compiler doesn't know diff --git a/src/SDCCast.c b/src/SDCCast.c index 0e49a717..f1847f2f 100644 --- a/src/SDCCast.c +++ b/src/SDCCast.c @@ -6151,6 +6151,32 @@ inlineFindParm (ast * parms, int index) return inlineFindParmRecurse (parms, &index); } +/*-----------------------------------------------------------------*/ +/* inlineFindMaxBlockno - find maximum block number in an ast tree */ +/*-----------------------------------------------------------------*/ +static int +inlineFindMaxBlockno (ast * tree, int maxBlockno) +{ + int tempBlockno; + + if (!tree) + return maxBlockno; + + tempBlockno = inlineFindMaxBlockno (tree->left, maxBlockno); + if (tempBlockno > maxBlockno) + maxBlockno = tempBlockno; + + tempBlockno = inlineFindMaxBlockno (tree->right, maxBlockno); + if (tempBlockno > maxBlockno) + maxBlockno = tempBlockno; + + if (tree->block > maxBlockno) + maxBlockno = tree->block; + return maxBlockno; +} + + + /*-----------------------------------------------------------------*/ /* expandInlineFuncs - replace calls to inline functions with the */ @@ -6329,6 +6355,7 @@ createFunction (symbol * name, ast * body) int stack = 0; sym_link *fetype; iCode *piCode = NULL; + int savedBlockno; if (getenv("SDCC_DEBUG_FUNCTION_POINTERS")) fprintf (stderr, "SDCCast.c:createFunction(%s)\n", name->name); @@ -6385,7 +6412,10 @@ createFunction (symbol * name, ast * body) reentrant++; inlineState.count = 0; + savedBlockno = currBlockno; + currBlockno = inlineFindMaxBlockno (body, 0); expandInlineFuncs (body, NULL); + currBlockno = savedBlockno; if (FUNC_ISINLINE (name->type)) name->funcTree = copyAst (body); -- 2.30.2