PR c/39464
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Dec 2012 10:40:26 +0000 (10:40 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 20 Dec 2012 10:40:26 +0000 (10:40 +0000)
* c-typeck.c (convert_for_assignment): For -Wpointer-sign
warning require that both c_common_unsigned_type as well as
c_common_signed_type is the same for both mvl and mvr types.

* gcc.dg/pr39464.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@194630 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/gcc.dg/pr39464.c [new file with mode: 0644]

diff --git a/gcc/testsuite/gcc.dg/pr39464.c b/gcc/testsuite/gcc.dg/pr39464.c
new file mode 100644 (file)
index 0000000..cd74540
--- /dev/null
@@ -0,0 +1,19 @@
+/* PR c/39464 */
+/* { dg-do compile } */
+/* { dg-options "-Wall" } */
+
+typedef int T __attribute__((may_alias));
+typedef unsigned int U __attribute__((may_alias));
+
+void
+foo (void *p)
+{
+  T *a = (int *) p;            /* { dg-warning "initialization from incompatible pointer type" } */
+  int *b = (T *) p;            /* { dg-warning "initialization from incompatible pointer type" } */
+  U *c = (unsigned int *) p;   /* { dg-warning "initialization from incompatible pointer type" } */
+  unsigned int *d = (U *) p;   /* { dg-warning "initialization from incompatible pointer type" } */
+  (void) a;
+  (void) b;
+  (void) c;
+  (void) d;
+}