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()