http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52283
--- Comment #5 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2012-02-16 17:54:03 UTC --- On Thu, 16 Feb 2012, manu at gcc dot gnu.org wrote: > What is the problem with stripping the nops *before giving the error* and if > it > still fails, give an error? NOPs are used to represent an intermediate expression that folded to an integer constant but is not an integer constant expression and cannot appear in one, as well as to carry TREE_NO_WARNING. So you need to be careful about where you strip them to avoid making something into an integer constant expression that should not be one; don't strip them too early. I think it would be OK to have a c_fully_fold_no_nop (which removes any TREE_NO_WARNING nop from the return from c_fully_fold) that is used in the relevant places (set_init_index, do_case, check_bitfield_type_and_width, build_enumerator at least) which have the pedwarn-if-pedantic logic for things folding to an integer constant where an integer constant expression is required.