re PR c/39464 (Attribute may_alias causes invalid warning)
authorJakub Jelinek <jakub@gcc.gnu.org>
Thu, 20 Dec 2012 10:40:26 +0000 (11:40 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 20 Dec 2012 10:40:26 +0000 (11:40 +0100)
PR c/39464
* 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.

From-SVN: r194630

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;
+}