diff options
| -rw-r--r-- | tcc.c | 5 | ||||
| -rw-r--r-- | tcctest.c | 4 |
2 files changed, 6 insertions, 3 deletions
@@ -6219,6 +6219,11 @@ static void gen_cast(CType *type) vpushi(0); gv(RC_INT); } else { + if (sbt == VT_PTR) { + /* cast from pointer to int before we apply + shift operation, which pointers don't support*/ + gen_cast(&int_type); + } gv_dup(); vpushi(31); gen_op(TOK_SAR); @@ -1154,9 +1154,7 @@ void cast_test() printf("sizeof(~(char)'a') = %d\n", sizeof(-(char)'a')); /* from pointer to integer types */ - printf("%d %d %d %d %d %d %ld %ld %lld %lld\n", - (char)p, (unsigned char)p, - (short)p, (unsigned short)p, + printf("%d %d %ld %ld %lld %lld\n", (int)p, (unsigned int)p, (long)p, (unsigned long)p, (long long)p, (unsigned long long)p); |
