* src/SDCCast.c (inlineFindMaxBlockno, createFunction): fixed
authorepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 20 Jun 2007 05:37:10 +0000 (05:37 +0000)
committerepetrich <epetrich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 20 Jun 2007 05:37:10 +0000 (05:37 +0000)
  bug 1731741

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

ChangeLog
src/SDCCast.c

index 772a6ab3b07ba09dd18d0a217fcb856dc936d217..d3e45e7c3fd0feb5f6c3a19b9f7072febb5d9481 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-06-20 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
+       * src/SDCCast.c (inlineFindMaxBlockno, createFunction): fixed
+         bug 1731741
+
 2007-06-18 Borut Razem <borut.razem AT siol.net>
 
        * src/SDCCmain.c: removed option -C since SDCC compiler doesn't know
index 0e49a71724635789fc75ae6e63b930b7f2d08297..f1847f2ffb7d8bd8d34c4d2b4adb0d356318b5da 100644 (file)
@@ -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);