diff --git a/tccgen.c b/tccgen.c index fb192500..1e7e60ad 100644 --- a/tccgen.c +++ b/tccgen.c @@ -2983,6 +2983,7 @@ redo: if (op != '-') tcc_error("cannot use pointers here"); vpush_type_size(pointed_type(&vtop[-1].type), &align); + vtop->type.t &= ~VT_UNSIGNED; vrott(3); gen_opic(op); vtop->type.t = VT_PTRDIFF_T; diff --git a/tests/tcctest.c b/tests/tcctest.c index f03a940a..c48f7778 100644 --- a/tests/tcctest.c +++ b/tests/tcctest.c @@ -885,7 +885,7 @@ int tab4[10]; void expr_ptr_test() { - int *p, *q; + int arr[10], *p, *q; int i = -1; p = tab4; @@ -938,6 +938,9 @@ void expr_ptr_test() i = ((long)p) >> 32; printf("largeptr: %p %d\n", p, i); #endif + p = &arr[0]; + q = p + 3; + printf ("%d\n", (int)((p - q) / 3)); } void expr_cmp_test()