This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] tile: Fix up corner cases with signed relocations


On Mon, Sep 08, 2014 at 03:34:18PM +0000, Joseph S. Myers wrote:
> On Mon, 8 Sep 2014, Rich Felker wrote:
> 
> > > In any case, the GNU C language defines signed shifts (as long as the 
> > > shift amount is >= 0 and < width of type), although it may still be useful 
> > > to avoid the cases that are outside what ISO C defines.
> > 
> > I don't think this is true. For example, in many versions of GCC, this
> > is (rightfully!) an infinite loop:
> > 
> > 	int i;
> > 	for (i=1; i>0; i<<=1);
> 
> That would be a bug (I fixed such a bug ten years ago, PR 7284); please 
> report it if present in trunk.  Signed shifts are documented in 
> implement-c.texi; C90 makes some things implementation-defined even when 
> C99/C11 make them undefined.

OK, yet another reason to avoid << operator: GCC intentionally fails
to optimize it right. Thankfully *(1<<y) solves that too.

As for versions where the above loop condition gets optimized out, I
don't recall which ones, but I do recall seeing it (broken configure
scripts checking the range of time_t going into an infinite loop) in
the past 3 or 4 years. But it's very possible that the users who
experienced it were using a much older version of GCC such as 3.4,
4.2, or 4.4.

Rich


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]