------- Additional Comments From dnovillo at redhat dot com 2005-06-01 19:38 ------- Subject: Re: [4.1 Regression] ICE in compare_values, at tree-vrp.c:301
On Wed, Jun 01, 2005 at 07:31:24PM -0000, pinskia at gcc dot gnu dot org wrote: > > ------- Additional Comments From pinskia at gcc dot gnu dot org 2005-06-01 > 19:31 ------- > Confirmed, reduced testcase: > unsigned int dsdblm_GetBlockAddress(); > void error_LocalAssert(void); > int dsdblm_CreateBlock(unsigned int address) > { > address = dsdblm_GetBlockAddress(); > if (address >= (void*)0x00020000) > error_LocalAssert(); > return address; > } > This is either a front-end bug or a fold bug. > Is this legal C? vrp15.c: In function `dsdblm_CreateBlock': vrp15.c:6: warning: comparison between pointer and integer This is very similar to what I found in the Fortran FE a few days ago. The .gimple form is already "wrong": D.1242 = dsdblm_GetBlockAddress (); address = D.1242; if (address > 131071B) We lose, or never emit, the cast to convert the constant to integer. However, the optimizers should probably not be ICEing here. I will remove the assert in compare_values, to simply refuse to do anything when pointers and non-pointers are mixed in the same predicate. Diego. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21858