diff options
| author | Shinichiro Hamaji <shinichiro.hamaji _at_ gmail.com> | 2009-04-16 02:34:59 +0900 |
|---|---|---|
| committer | grischka <grischka> | 2009-04-18 15:08:01 +0200 |
| commit | 83fd36333a691050663a15c07b385bdf554bf01d (patch) | |
| tree | 062bf6d4eb06e488b05439ca2040a178b15d3a27 | |
| parent | be43c8e0ed22faa6c89c6e551f2a07512673d60d (diff) | |
| download | tinycc-83fd36333a691050663a15c07b385bdf554bf01d.tar.gz tinycc-83fd36333a691050663a15c07b385bdf554bf01d.tar.bz2 | |
Fixes for issues I've just found/introduced to x86 TCC.
- Cast from pointer to long long makes TCC output an error. Use cast to int before we apply shift operation for a pointer value.
- Removed test cases for casts from pointer to char/short because they produce warning.
| -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); |
