Okay. What do you think of the union approach?

Charles

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
Behalf Of David Crayford
Sent: Saturday, July 20, 2013 6:07 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: [MVS-OE] Looking for help with an obscure C integer problem

Your casting a uint64_t to a uint64_t which is pointless. You should cast to
the return value (uint32_t).

I've just tried your example and I can't recreate the problem, with or
without casts and compiled with both OPT and NOOPT.

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

int main( int argc, char **argv )
{
   uint64_t n = 0x0034000000000000LLU;
   uint32_t b = n >> 32;
   uint32_t c = static_cast<uint32_t>(n >> 32);
   printf( "%08X %08X\n", b, c );
}

I can only assume that the optimizer is throwing away valueToTest for some
arcane reason. I've seen this happen with convoluted code with lots of
pointers to pointers etc.
Try qualifying valueToTest with volatile, which should disable optimizations
on that variable.

----------------------------------------------------------------------
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