pr20963.C   [plain text]


/* { dg-do compile } */
/* { dg-options "-O2" } */

/* This was causing PRE to insert the value of the ADDR variable, to 
   remove the invariant cast but in doing so, it was creating a 
   non-invariant expression out of the invariant one, causing a later 
   failure in PRE.  */ 
struct sMCB { 
  unsigned char type; 
}; 
 
extern void foo (void); 
unsigned char mem_readb(char *pt) __attribute__((nothrow)); 
 
void DOS_FreeProcessMemory(unsigned short pspseg) { 
        while (1) { 
                if (pspseg) 
                        foo (); 
                char *addr = (char*)(&((sMCB*)0)->type); 
                if (mem_readb(addr)==0x5a) break; 
        } 
};