Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Changeset 489

Show
Ignore:
Timestamp:
01/08/11 20:48:18 (14 years ago)
Author:
Don Clugston
Message:

Fixed inadvertent change to the unwinding for 'goto' and return statements in functions with exception handling. Disturbingly, there's nothing in the test suite which tests this.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/rt/deh.d

    r485 r489  
    701701        pop EBX; 
    702702        pop ECX; 
    703703        mov ESP,EBP; 
    704704        pop EBP; 
    705705        ret; 
    706706    } 
    707707} 
    708708 
    709709/*********************************** 
    710710 * external version of the unwinder 
     711 * This is used for 'goto' or 'return', to run any finally blocks 
     712 * which were skipped. 
    711713 */ 
    712714extern(C) 
    713715void _d_local_unwind2() 
    714716{ 
    715717    asm 
    716718    { 
    717719        naked; 
    718         jmp     _d_local_unwind; 
    719     } 
     720        jmp     _d_localUnwindForGoto; 
     721    } 
     722
     723 
     724extern(C) 
     725void _d_localUnwindForGoto(DHandlerTable *handler_table, 
     726        DEstablisherFrame *frame, int stop_index) 
     727
     728    _d_local_unwind(handler_table, frame, stop_index, &searchCollisionExceptionHandler); 
    720729} 
    721730 
    722731/*********************************** 
    723732 * The frame handler, this is called for each frame that has been registered 
    724733 * in the OS except_list. 
    725734 * Input: 
    726735 *      EAX     the handler table for the frame 
    727736 */ 
    728737 
    729738extern(C)