Hi! On the following testcase, we have TYPE_READONLY integer type before handling the mode attribute and transform it into a signed char type (without TYPE_READONLY), which causes ICE in the FE, because it isn't const anymore.
Fixed by making sure we have the same quals as before applying the mode attribute. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2017-02-21 Jakub Jelinek <ja...@redhat.com> PR c++/79641 * c-attribs.c (handle_mode_attribute): Use build_qualified_type to preserve quals. * c-c++-common/pr79641.c: New test. --- gcc/c-family/c-attribs.c.jj 2017-01-01 12:45:46.000000000 +0100 +++ gcc/c-family/c-attribs.c 2017-02-21 12:38:10.105547005 +0100 @@ -1430,7 +1430,7 @@ handle_mode_attribute (tree *node, tree return NULL_TREE; } - *node = typefm; + *node = build_qualified_type (typefm, TYPE_QUALS (type)); } return NULL_TREE; --- gcc/testsuite/c-c++-common/pr79641.c.jj 2017-02-21 12:43:24.246466684 +0100 +++ gcc/testsuite/c-c++-common/pr79641.c 2017-02-21 12:43:18.132546096 +0100 @@ -0,0 +1,4 @@ +/* PR c++/79641 */ +/* { dg-do compile } */ + +const int __attribute__((__mode__ (__QI__))) i = 0; Jakub