On 2013-04-21, Paul Sokolovsky <pmis...@gmail.com> wrote:

> It's all nice and good. But there's difference between "undefined",
> "any value" and "weird".

No, there isn't.  "Undefined" means _exactly_ that: you might get any
value -- no matter how "wierd" you think it.

> Because "too many bits" shifts may be undefined in C standard, but
> shifts by arbitrary number of bits are very well defined in
> arithmetic - and by very definition of (unsigned) shift, any value
> shifted by more bits than available in its representation is 0.

That's not what the C standard says.

> That's logical, that's what users know, that's what they expect from
> compiler,

They're wrong to expect that.  If the standard says the result is
undefined, then expecting anything in particular is wrong.

> So, msp430-gcc just masks out higher bits of shift count, and in this
> case leaves original value intact. Which turns term ((1 << BITS) -
> 1), which is common to do BITS-modular arithmetic, and would be
> expected to just optimize out in case of a full type, into an
> expression killer with infinite loops, etc. ensuing.

If you write incorrect code, you oughtn't be surprised when it behaves
incorrectly.

-- 
Grant Edwards               grant.b.edwards        Yow! Will this never-ending
                                  at               series of PLEASURABLE
                              gmail.com            EVENTS never cease?


------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Mspgcc-users mailing list
Mspgcc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mspgcc-users

Reply via email to