On 6/23/05, F.W.A. van Leeuwen <[EMAIL PROTECTED]> wrote:
> While cross-compiling sqlite3.2.1, my Blackfin C compiler gives the
> following warning:
> 
> ".\src\pager.c", line 1342: cc0111: {D} warning: statement is unreachable
>     assert( rc==SQLITE_OK );
> 
> The context is:
> 
> <begin code snippet>
>   /* This loop terminates either when the readJournalHdr() call returns
>   ** SQLITE_DONE or an IO error occurs. */
>   while( 1 ){
> 
>     // CODE OMITTED WITH NO break;
> 
>     /* rc = sqlite3OsSeek(&pPager->jfd, JOURNAL_HDR_SZ(pPager)); */
>     if( rc!=SQLITE_OK ) goto end_playback;
> 
>     /* Copy original pages out of the journal and back into the database
> file.
>     */
>     for(i=0; i<nRec; i++){
>       rc = pager_playback_one_page(pPager, &pPager->jfd, 1);
>       if( rc!=SQLITE_OK ){
>         if( rc==SQLITE_DONE ){
>           rc = SQLITE_OK;
>           pPager->journalOff = szJ;
>           break;
>         }else{
>           goto end_playback;
>         }
>       }
>     }
>   }
> 
>   /* Pages that have been written to the journal but never synced
>   ** where not restored by the loop above.  We have to restore those
>   ** pages by reading them back from the original database.
>   */
>   assert( rc==SQLITE_OK );
>   pager_reload_cache(pPager);
> 
> end_playback:
> <end code snippet>
> 
> I think the compiler is right. I am not familiar with the sqlite3 source
> code, but the break at line 1330 breaks the for() loop at line 1324, NOT
> the while() loop at line 1281.  Is that as it is intended, or is it a
> potential bug?

The for loop can terminate after i>=nRec. I'm not sure that's possible
in practice
or not though.

Reply via email to