Changeset 380

Show
Ignore:
Timestamp:
02/12/10 04:35:06 (2 years ago)
Author:
walter
Message:

bugzilla 3736 corrupted struct returned by function with optimizations (-O)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/dmd-1.x/src/backend/blockopt.c

    r288 r380  
    11// Copyright (C) 1986-1997 by Symantec 
    2 // Copyright (C) 2000-2009 by Digital Mars 
     2// Copyright (C) 2000-2010 by Digital Mars 
    33// All Rights Reserved 
    44// http://www.digitalmars.com 
     
    738738 
    739739            if (PARSER) 
    740             {   type *t; 
    741  
    742             t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 
     740            { 
     741            type *t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 
    743742            e = el_bint(OPcolon2,t,b2->Belem,b3->Belem); 
    744743            b->Belem = el_bint(OPcond,t,b->Belem,e); 
    745744            } 
    746745            else 
    747             {   tym_t ty; 
    748  
     746            { 
    749747            if (EOP(b3->Belem)) 
    750748                continue; 
    751             ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 
     749            tym_t ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 
    752750            e = el_bin(OPcolon2,ty,b2->Belem,b3->Belem); 
    753751            b->Belem = el_bin(OPcond,ty,b->Belem,e); 
    754752            } 
    755753            b->BC = bc2; 
     754            b->Belem->Enumbytes = b2->Belem->Enumbytes; 
    756755            b2->Belem = NULL; 
    757756            b3->Belem = NULL; 
     
    794793                    b2->Belem,b3->Belem); 
    795794                e = el_bin(OPcond,e->Ety,b->Belem,e); 
     795                e->Enumbytes = b2->Belem->Enumbytes; 
    796796                } 
    797797                else 
  • branches/dmd-1.x/src/backend/cgelem.c

    r289 r380  
    11// Copyright (C) 1985-1998 by Symantec 
    2 // Copyright (C) 2000-2009 by Digital Mars 
     2// Copyright (C) 2000-2010 by Digital Mars 
    33// All Rights Reserved 
    44// http://www.digitalmars.com 
     
    43754375      { // Convert ((a,b) op c) to (a,(b op c)) 
    43764376        e1->Ety = e->Ety; 
     4377        e1->Enumbytes = e->Enumbytes; 
    43774378        e->E1 = e1->E2; 
    43784379        e1->E2 = e; 
  • trunk/src/backend/blockopt.c

    r288 r380  
    11// Copyright (C) 1986-1997 by Symantec 
    2 // Copyright (C) 2000-2009 by Digital Mars 
     2// Copyright (C) 2000-2010 by Digital Mars 
    33// All Rights Reserved 
    44// http://www.digitalmars.com 
     
    738738 
    739739            if (PARSER) 
    740             {   type *t; 
    741  
    742             t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 
     740            { 
     741            type *t = (bc2 == BCretexp) ? b2->Belem->ET : tsvoid; 
    743742            e = el_bint(OPcolon2,t,b2->Belem,b3->Belem); 
    744743            b->Belem = el_bint(OPcond,t,b->Belem,e); 
    745744            } 
    746745            else 
    747             {   tym_t ty; 
    748  
     746            { 
    749747            if (EOP(b3->Belem)) 
    750748                continue; 
    751             ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 
     749            tym_t ty = (bc2 == BCretexp) ? b2->Belem->Ety : TYvoid; 
    752750            e = el_bin(OPcolon2,ty,b2->Belem,b3->Belem); 
    753751            b->Belem = el_bin(OPcond,ty,b->Belem,e); 
    754752            } 
    755753            b->BC = bc2; 
     754            b->Belem->Enumbytes = b2->Belem->Enumbytes; 
    756755            b2->Belem = NULL; 
    757756            b3->Belem = NULL; 
     
    794793                    b2->Belem,b3->Belem); 
    795794                e = el_bin(OPcond,e->Ety,b->Belem,e); 
     795                e->Enumbytes = b2->Belem->Enumbytes; 
    796796                } 
    797797                else 
  • trunk/src/backend/cgelem.c

    r289 r380  
    11// Copyright (C) 1985-1998 by Symantec 
    2 // Copyright (C) 2000-2009 by Digital Mars 
     2// Copyright (C) 2000-2010 by Digital Mars 
    33// All Rights Reserved 
    44// http://www.digitalmars.com 
     
    43754375      { // Convert ((a,b) op c) to (a,(b op c)) 
    43764376        e1->Ety = e->Ety; 
     4377        e1->Enumbytes = e->Enumbytes; 
    43774378        e->E1 = e1->E2; 
    43784379        e1->E2 = e;