As a general ROT I always use explicit casts.

On 21/07/2013, at 4:24 AM, Charles Mills <charl...@mcn.org> wrote:

> Cross-posted to IBM-MAIN and MVS-OE.
> 
> I have the following code fragment in an inline function, compiled by the
> IBM XLC compiler as C++:
> 
> unsigned long long valueToTest;
> unsigned int testWord;
> testWord = valueToTest >> 32;
> 
> It *appears* to me (from somewhat circumstantial evidence in a much more
> complex big picture) when valueToTest has a value of 0x0034000000000000 then
> 
> - If I compile Opt(0),NoInline then testWord gets the value I expect,
> 0x00340000; but
> - If I compile Opt(2),Inline then testWord gets a value of 0.
> 
> Questions: 
> 
> 1. Does that seem plausible? That the code would work as intended
> Opt(0),NoInline but that with Opt(2),Inline the compiler would (I am
> guessing here) first cast valueToTest to an int of 0, then shift it right
> 32, and then assign it to testWord?
> 
> 2. What should I code to avoid that? I guess I could shift valueToTest first
> (I don't need it again) and then in a separate statement assign it to
> testWord. Is that the "proper" coding technique?
> 
> It's fairly involved to test the whole thing so I took the liberty of
> imposing on you folks rather than just trying stuff. Thanks much.
> 
> Charles 
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to