Message ID | 20110411195238.GA17079@tyan-ft48-01.lab.bos.redhat.com |
---|---|
State | New |
Headers | show |
On Mon, 11 Apr 2011, Jakub Jelinek wrote: > 2011-04-11 Jakub Jelinek <jakub@redhat.com> > > PR c/48517 > * c-typeck.c (store_init_value): Set TREE_TYPE (decl) to > qualified type. > > * gcc.dg/pr48517.c: New test. OK, though I think the test would go better in gcc.c-torture/compile since it requires no special options and does not test for any diagnostics.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 04/11/11 13:52, Jakub Jelinek wrote: > Hi! > > On the following testcase build_unary_op ICEs, because > the element type of the array variable (which is TREE_READONLY) > unexpectedly is not TYPE_READONLY. > The problem seems to come from store_init_value, which replaces > the type of the variable with build_distinct_type_copy (TYPE_MAIN_VARIANT (type)); > on which it sets TYPE_DOMAIN. The following patch restores the > quals back. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/4.6? > > 2011-04-11 Jakub Jelinek <jakub@redhat.com> > > PR c/48517 > * c-typeck.c (store_init_value): Set TREE_TYPE (decl) to > qualified type. > > * gcc.dg/pr48517.c: New test. OK. jeff -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJNpHQcAAoJEBRtltQi2kC7G00H/0YVn3lAw5tf3wDfTwBK8G1U Jpy7iroBBgkBb/X+DSG1PRbWmxy7hsbsQvqsNI5iYVq/nbSxl7BFPxP1RxOqo07G AbFtnLlgOuAG2XfhuN/oUc4SwiU23JyX8zBhYXZEHqho6oFDTIxUOMh4+LYM92ll vPZoHprQZkS3/HsQu6BzZoEyf8mmUh5D2DMU6X3kW4Lb3d1+URdcq6xIzTXRMjga 79ZRyL/WozaTjdtw9dr1mIqhlLs2V6bOydItRl41xQTALkq52iqIYT/3+YvYuiLR z4MGT4gGO4JmE6a9K+jVVxjjtMrgiJP20l9C2/UjWiqSyuaJAHcxMrakX46gB0Q= =4Uv+ -----END PGP SIGNATURE-----
--- gcc/c-typeck.c.jj 2011-03-31 08:51:03.000000000 +0200 +++ gcc/c-typeck.c 2011-04-11 15:19:25.000000000 +0200 @@ -5773,11 +5773,13 @@ store_init_value (location_t init_loc, t /* 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)); } } } --- gcc/testsuite/gcc.dg/pr48517.c.jj 2011-04-11 15:21:59.000000000 +0200 +++ gcc/testsuite/gcc.dg/pr48517.c 2011-04-11 15:21:16.000000000 +0200 @@ -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); +}