From 0b23c07a94352d4f7677bcd82ed0d83ce56a2e7f Mon Sep 17 00:00:00 2001 From: johanknol Date: Wed, 2 Apr 2003 14:14:20 +0000 Subject: [PATCH] detect missing return values git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2463 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- src/SDCCopt.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/SDCCopt.c b/src/SDCCopt.c index d9183695..1d390a69 100644 --- a/src/SDCCopt.c +++ b/src/SDCCopt.c @@ -886,6 +886,21 @@ eBBlockFromiCode (iCode * ic) } + // this is a good place to check missing return values + if (currFunc) { + if (!IS_VOID(currFunc->type->next)) { + eBBlock *bp; + // make sure all predecessors of the last block end in a return + for (bp=setFirstItem(ebbs[saveCount-1]->predList); + bp; + bp=setNextItem(ebbs[saveCount-1]->predList)) { + if (bp->ech->op != RETURN) { + werror (E_VOID_FUNC, currFunc->name); + } + } + } + } + /* sort it back by block number */ qsort (ebbs, saveCount, sizeof (eBBlock *), bbNumCompare); @@ -916,6 +931,8 @@ eBBlockFromiCode (iCode * ic) /* throw away blocks */ setToNull ((void **) &graphEdges); ebbs = NULL; + + currFunc=NULL; return NULL; } -- 2.30.2