re PR c/48517 (ICE in build_unary_op, at c-typeck.c:3786)
authorJakub Jelinek <jakub@gcc.gnu.org>
Tue, 12 Apr 2011 06:43:12 +0000 (08:43 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 12 Apr 2011 06:43:12 +0000 (08:43 +0200)
PR c/48517
* c-typeck.c (store_init_value): Set TREE_TYPE (decl) to
qualified type.

* gcc.c-torture/compile/pr48517.c: New test.

From-SVN: r172299

gcc/c-typeck.c
gcc/testsuite/gcc.c-torture/compile/pr48517.c [new file with mode: 0644]

index c386f56c775eab982bfe08ff6d960fd5a3d77604..15b77550dc3ab55bcdb60e83ba2f1775684b2a34 100644 (file)
@@ -5773,11 +5773,13 @@ store_init_value (location_t init_loc, tree decl, tree init, tree origtype)
              /* For int foo[] = (int [3]){1}; we need to set array size
                 now since later on array initializer will be just the
                 brace enclosed list of the compound literal.  */
+             tree etype = strip_array_types (TREE_TYPE (decl));
              type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
-             TREE_TYPE (decl) = type;
              TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl));
              layout_type (type);
              layout_decl (cldecl, 0);
+             TREE_TYPE (decl)
+               = c_build_qualified_type (type, TYPE_QUALS (etype));
            }
        }
     }
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr48517.c b/gcc/testsuite/gcc.c-torture/compile/pr48517.c
new file mode 100644 (file)
index 0000000..30b3ecb
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR c/48517 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void bar (const unsigned short *);
+
+void
+foo (void)
+{
+  static const unsigned short array[] = (const unsigned short []) { 0x0D2B };
+  const unsigned short *ptr = array;
+  bar (ptr);
+}