modernc.org/cc@v1.0.1/v2/testdata/bug/5.c (about) 1 #include <assert.h> 2 #include <stdint.h> 3 4 #if defined(__PTRDIFF_TYPE__) 5 #define SQLITE_INT_TO_PTR1(X) ((void*)(__PTRDIFF_TYPE__)(X)) 6 #define SQLITE_PTR_TO_INT1(X) ((int)(__PTRDIFF_TYPE__)(X)) 7 #endif 8 9 #define SQLITE_INT_TO_PTR2(X) ((void*)&((char*)0)[X]) 10 #define SQLITE_PTR_TO_INT2(X) ((int)(((char*)X)-(char*)0)) 11 12 #define SQLITE_INT_TO_PTR3(X) ((void*)(intptr_t)(X)) 13 #define SQLITE_PTR_TO_INT3(X) ((int)(intptr_t)(X)) 14 15 #define SQLITE_INT_TO_PTR4(X) ((void*)(X)) 16 #define SQLITE_PTR_TO_INT4(X) ((int)(X)) 17 18 void foo(char *p, char *q) { 19 int i, j = 42; 20 char **z = &q; 21 22 assert(p); 23 assert(q); 24 assert(z); 25 p = 0; 26 q = 0; 27 z = 0; 28 assert(!p); 29 assert(!q); 30 assert(!z); 31 32 #if defined(SQLITE_INT_TO_PTR1) 33 p = 0; 34 i = 0; 35 p = SQLITE_INT_TO_PTR1(314); 36 i = SQLITE_PTR_TO_INT1(p); 37 assert(i == 314); 38 p = SQLITE_INT_TO_PTR1(j); 39 i = SQLITE_PTR_TO_INT1(p); 40 assert(i == 42); 41 q = 0; 42 i = 0; 43 q = SQLITE_INT_TO_PTR1(314); 44 i = SQLITE_PTR_TO_INT1(q); 45 assert(i == 314); 46 q = SQLITE_INT_TO_PTR1(j); 47 i = SQLITE_PTR_TO_INT1(q); 48 assert(i == 42); 49 #endif 50 51 p = 0; 52 i = 0; 53 p = SQLITE_INT_TO_PTR2(314); 54 i = SQLITE_PTR_TO_INT2(p); 55 assert(i == 314); 56 p = SQLITE_INT_TO_PTR2(j); 57 i = SQLITE_PTR_TO_INT2(p); 58 assert(i == 42); 59 q = 0; 60 i = 0; 61 q = SQLITE_INT_TO_PTR2(314); 62 i = SQLITE_PTR_TO_INT2(q); 63 assert(i == 314); 64 q = SQLITE_INT_TO_PTR2(j); 65 i = SQLITE_PTR_TO_INT2(q); 66 assert(i == 42); 67 68 p = 0; 69 i = 0; 70 p = SQLITE_INT_TO_PTR3(314); 71 i = SQLITE_PTR_TO_INT3(p); 72 assert(i == 314); 73 p = SQLITE_INT_TO_PTR3(j); 74 i = SQLITE_PTR_TO_INT3(p); 75 assert(i == 42); 76 q = 0; 77 i = 0; 78 q = SQLITE_INT_TO_PTR3(314); 79 i = SQLITE_PTR_TO_INT3(q); 80 assert(i == 314); 81 q = SQLITE_INT_TO_PTR3(j); 82 i = SQLITE_PTR_TO_INT3(q); 83 assert(i == 42); 84 85 p = 0; 86 i = 0; 87 p = SQLITE_INT_TO_PTR4(314); 88 i = SQLITE_PTR_TO_INT4(p); 89 assert(i == 314); 90 p = SQLITE_INT_TO_PTR4(j); 91 i = SQLITE_PTR_TO_INT4(p); 92 assert(i == 42); 93 q = 0; 94 i = 0; 95 q = SQLITE_INT_TO_PTR4(314); 96 i = SQLITE_PTR_TO_INT4(q); 97 assert(i == 314); 98 q = SQLITE_INT_TO_PTR4(j); 99 i = SQLITE_PTR_TO_INT4(q); 100 assert(i == 42); 101 } 102 103 int main() { 104 int i, j = 42; 105 char c; 106 char *p = &c, *q = &c; 107 char **z = &q; 108 109 foo(p, q); 110 111 assert(p); 112 assert(q); 113 assert(z); 114 p = 0; 115 q = 0; 116 z = 0; 117 assert(!p); 118 assert(!q); 119 assert(!z); 120 121 #if defined(SQLITE_INT_TO_PTR1) 122 p = 0; 123 i = 0; 124 p = SQLITE_INT_TO_PTR1(314); 125 i = SQLITE_PTR_TO_INT1(p); 126 assert(i == 314); 127 p = SQLITE_INT_TO_PTR1(j); 128 i = SQLITE_PTR_TO_INT1(p); 129 assert(i == 42); 130 q = 0; 131 i = 0; 132 q = SQLITE_INT_TO_PTR1(314); 133 i = SQLITE_PTR_TO_INT1(q); 134 assert(i == 314); 135 q = SQLITE_INT_TO_PTR1(j); 136 i = SQLITE_PTR_TO_INT1(q); 137 assert(i == 42); 138 #endif 139 140 p = 0; 141 i = 0; 142 p = SQLITE_INT_TO_PTR2(314); 143 i = SQLITE_PTR_TO_INT2(p); 144 assert(i == 314); 145 p = SQLITE_INT_TO_PTR2(j); 146 i = SQLITE_PTR_TO_INT2(p); 147 assert(i == 42); 148 q = 0; 149 i = 0; 150 q = SQLITE_INT_TO_PTR2(314); 151 i = SQLITE_PTR_TO_INT2(q); 152 assert(i == 314); 153 q = SQLITE_INT_TO_PTR2(j); 154 i = SQLITE_PTR_TO_INT2(q); 155 assert(i == 42); 156 157 p = 0; 158 i = 0; 159 p = SQLITE_INT_TO_PTR3(314); 160 i = SQLITE_PTR_TO_INT3(p); 161 assert(i == 314); 162 p = SQLITE_INT_TO_PTR3(j); 163 i = SQLITE_PTR_TO_INT3(p); 164 assert(i == 42); 165 q = 0; 166 i = 0; 167 q = SQLITE_INT_TO_PTR3(314); 168 i = SQLITE_PTR_TO_INT3(q); 169 assert(i == 314); 170 q = SQLITE_INT_TO_PTR3(j); 171 i = SQLITE_PTR_TO_INT3(q); 172 assert(i == 42); 173 174 p = 0; 175 i = 0; 176 p = SQLITE_INT_TO_PTR4(314); 177 i = SQLITE_PTR_TO_INT4(p); 178 assert(i == 314); 179 p = SQLITE_INT_TO_PTR4(j); 180 i = SQLITE_PTR_TO_INT4(p); 181 assert(i == 42); 182 q = 0; 183 i = 0; 184 q = SQLITE_INT_TO_PTR4(314); 185 i = SQLITE_PTR_TO_INT4(q); 186 assert(i == 314); 187 q = SQLITE_INT_TO_PTR4(j); 188 i = SQLITE_PTR_TO_INT4(q); 189 assert(i == 42); 190 }