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  }