From 83fd36333a691050663a15c07b385bdf554bf01d Mon Sep 17 00:00:00 2001 From: Shinichiro Hamaji Date: Thu, 16 Apr 2009 02:34:59 +0900 Subject: [PATCH] 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. --- tcc.c | 5 +++++ tcctest.c | 4 +--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tcc.c b/tcc.c index 1b0db21..00fd3a0 100644 --- a/tcc.c +++ b/tcc.c @@ -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); diff --git a/tcctest.c b/tcctest.c index 8ef322e..f8b3a35 100644 --- a/tcctest.c +++ b/tcctest.c @@ -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);