$ cat test2.c
####
#include
#define __STDC_LIMIT_MACROS
#include
#include
#define ALIGN_BITS (sizeof (void *) >> __UINT64_C (1))
#define BIT_BITS __UINT64_C (3)
#define BYTE_BITS __UINT64_C (14)
#define SLOT_BITS (sizeof (void *) * 8) - (ALIGN_BITS + BIT_BITS + BYTE_BITS)
#define BYTES_PER_SLOT __UINT64_C (1) << BYTE_BITS
#define TRACKING_SLOTS 8192
int check_new (uintptr_t p)
{
ptrdiff_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS));
ptrdiff_t byte = ( p >> (ALIGN_BITS + BIT_BITS)) & __UINT64_C (0x00003fff);
ptrdiff_t bit = ( p >> ALIGN_BITS) & __UINT64_C (0x00000007);
ptrdiff_t nop = p & __UINT64_C (0x3 );
printf ("address: %p slot: %p byte: %4x bit: %4x nop:%x\n",
p, slot, byte, bit, nop);
return 1;
} /* check_new */
int main (int argc, char *argv[])
{
uintptr_t p;
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29))
check_new (p);
return (1);
} /* main */
####
$ gcc -dumpversion
4.2.4
$ gcc -o test2 test2.c
test2.c: In function 'main':
test2.c:29: warning: left shift count >= width of type
ld: Unsatisfied symbol "__UINT64_C" in file /tmp/ccAAXIbg.o
1 errors.
$ gcc -mlp64 -fno-strict-aliasing -pipe -fPIC -o test2 test2.c
test2.c: In function 'main':
test2.c:29: warning: left shift count >= width of type
ld: Unsatisfied symbol "__UINT64_C" in file /tmp/ccvHbmFn.o
1 errors.
####
$ gcc -dumpversion
3.4.6
$ gcc -fno-strict-aliasing -pipe -fPIC -o test2 test2.c
test2.c:3:20: stdint.h: No such file or directory
test2.c: In function `main':
test2.c:29: warning: left shift count >= width of type
$
####
$ cc -Ae -z +Z +w +DD64 -o test2 test2.c
"test2.c", line 15: warning #2223-D: function "__UINT64_C" declared implicitly
ptrdiff_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS));
^
"test2.c", line 15: remark #4242-D: no prototype or definition in scope for
call to "__UINT64_C"
ptrdiff_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS));
^
"test2.c", line 21: warning #2181-D: argument is incompatible with
corresponding format string conversion
p, slot, byte, bit, nop);
^
"test2.c", line 21: warning #2181-D: argument is incompatible with
corresponding format string conversion
p, slot, byte, bit, nop);
^
"test2.c", line 21: warning #2181-D: argument is incompatible with
corresponding format string conversion
p, slot, byte, bit, nop);
^
"test2.c", line 21: warning #2181-D: argument is incompatible with
corresponding format string conversion
p, slot, byte, bit, nop);
^
"test2.c", line 21: warning #2181-D: argument is incompatible with
corresponding format string conversion
p, slot, byte, bit, nop);
^
"test2.c", line 25: warning #2951-D: return type of function "main" must be
"int"
void main (int argc, char *argv[])
^
"test2.c", line 29: warning #2223-D: function "__UINT64_C" declared implicitly
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
"test2.c", line 29: remark #4272-D: conversion from "int" to "uintptr_t" may
lose sign
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
"test2.c", line 29: warning #2063-D: shift count is too large
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
"test2.c", line 29: remark #4248-D: comparison of unsigned integer with a
signed integer
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
"test2.c", line 15: remark #4298-D: addition result could be truncated before
cast to bigger sized type
ptrdiff_t slot = ( p >> (BYTE_BITS + BIT_BITS + ALIGN_BITS));
^
"test2.c", line 29: remark #4249-D: value could be truncated before cast to
bigger sized type
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
"test2.c", line 29: remark #4249-D: value could be truncated before cast to
bigger sized type
for (p = __UINT64_C (123456); p < (__UINT64_C (1) << 34); p += (__UINT64_C (+1) << 29)) {
^
ld: Unsatisfied symbol "__UINT64_C" in file test2.o