My own machine is only 32-Bit-capable so I can't test out the code using "-m64".
Could you please do me a quick favour? Can you change this line of code:
printf("sizeof(long) == %u\n", sizeof(long));
After you do that, can you please compile it and run it for both m32 and m64 as you did in your previous post?
printf( "sizeof(long) == %u\n", (unsigned)sizeof(long) );
(The reason I ask is that the behaviour of your original piece of code is undefined because you specify %u to printf but then you give it an argument of type size_t).