http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56243
--- Comment #7 from fabien at gcc dot gnu.org 2013-02-25 20:56:42 UTC --- (In reply to comment #6) > (In reply to comment #4) [...] > If so, this corrected test case still triggers ICE: Good point. Further reduced: struct A { virtual int String (); }; class F: public A { }; struct G { F value; }; class D { template <int> void Verify() { G x; F& name = x.value; name.String(); } }; I restarted the analysis from the beginning. My fix for c++/11750 was basically to restrict the cases where the unsafe front-end de-virtualization was done. It wouldn't help to refine that change because anyway, it would still be possible to find a testcase that shows the same ICE. My attempts to fix the problem on the constexpr side failed probably because it is correct. The problem is more related to the COMPONENT_REF 'G'. Probably because D::Verify is not instantiated yet, the field 'value' of G is still an IDENTIFIER_NODE instead of being a FIELD_DECL, which leads to a crash while calling DECL_FIELD_IS_BASE. Hence, I can only see two solutions: 1) make 'value' a FIELD_DECL before or during the fold_non_dependent_expr_sfinae call. Not sure it is simple. 2) check that the first operand of a COMPONENT_REF is actually a FIELD_DECL before calling DECL_FIELD_IS_BASE on it. Upcoming patch for the solution 2 on gcc-patch...