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

Changeset 226

Show
Ignore:
Timestamp:
10/29/09 19:20:19 (15 years ago)
Author:
walter
Message:

bugzilla 3269

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/e2ir.c

    r221 r226  
    268268        ep->Ety = tyret; 
    269269        e = ep; 
    270270        if (op == OPscale) 
    271271        { 
    272272        elem *et = e->E1; 
    273273        e->E1 = el_una(OPs32_d, TYdouble, e->E2); 
    274274        e->E1 = el_una(OPd_ld, TYldouble, e->E1); 
    275275        e->E2 = et; 
    276276        } 
    277277        else if (op == OPyl2x || op == OPyl2xp1) 
    278278        { 
    279279        elem *et = e->E1; 
    280280        e->E1 = e->E2; 
    281281        e->E2 = et; 
    282282        } 
    283283    } 
    284284    else 
    285285        e = el_una(op,tyret,ep); 
    286286    } 
    287287    else if (ep) 
    288     e = el_bin(tf->ispure ? OPcallns : OPcall,tyret,ec,ep); 
     288    e = el_bin((tf->ispure && tf->isnothrow) ? OPcallns : OPcall,tyret,ec,ep); 
    289289    else 
    290     e = el_una(tf->ispure ? OPucallns : OPucall,tyret,ec); 
     290    e = el_una((tf->ispure && tf->isnothrow) ? OPucallns : OPucall,tyret,ec); 
    291291 
    292292    if (retmethod == RETstack) 
    293293    { 
    294294    e->Ety = TYnptr; 
    295295    e = el_una(OPind, tyret, e); 
    296296    } 
    297297 
    298298#if DMDV2 
    299299    if (tf->isref) 
    300300    { 
    301301    e->Ety = TYnptr; 
    302302    e = el_una(OPind, tyret, e); 
    303303    } 
    304304#endif 
    305305 
    306306    if (tybasic(tyret) == TYstruct) 
    307307    { 
    308308    e->Enumbytes = tret->size(); 
    309309    } 
    310310    e = el_combine(eside, e);