Hi, Hi, in this ICE on valid, a gcc_assert fires when a GOTO_EXPR is handled by cxx_eval_constant_expression which is the translation of a "return;" on a targetm.cxx.cdtor_returns_this target (like ARM): ;; Function constexpr A::A() (null) ;; enabled by -tree-original { // predicted unlikely by goto predictor.; goto ; } :; return this; I think the right way to handle this is marking such special labels with a LABEL_DECL_CDTOR flag and using it in the returns helper function (we already use a similar strategy with LABEL_DECL_BREAK and LABEL_DECL_CONTINUE and the breaks and continues helpers). Then adjusting the ICEing gcc_assert is trivial. Tested x86_64-linux and aarch64-linux. Thanks, Paolo. //////////////////////////////////