https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100409
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
Hmm, doesn't quite work.
FAIL: g++.dg/cpp0x/sfinae19.C -std=c++14 (internal compiler error)
FAIL: g++.dg/cpp0x/sfinae22.C -std=c++14 (internal compiler error)
FAIL: g++.dg/cpp1y/pr61636-2.C -std=c++14 (internal compiler error)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for errors, line 79)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 80)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 82)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 83)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 84)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 85)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for warnings, line 88)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (internal compiler error)
FAIL: g++.dg/warn/noeffect4.C -std=gnu++14 (test for excess errors)
the ICE is
/home/rguenther/src/trunk/gcc/testsuite/g++.dg/cpp0x/sfinae19.C:8:30: internal
compiler error: in check_noexcept_r, at cp/except.c:1053^M
if ((code == CALL_EXPR && CALL_EXPR_FN (t))
|| code == AGGR_INIT_EXPR)
{
/* We can only use the exception specification of the called function
for determining the value of a noexcept expression; we can't use
TREE_NOTHROW, as it might have a different value in another
translation unit, creating ODR problems.
We could use TREE_NOTHROW (t) for !TREE_PUBLIC fns, though... */
tree fn = cp_get_callee (t);
if (concept_check_p (fn))
return NULL_TREE;
tree type = TREE_TYPE (fn);
gcc_assert (INDIRECT_TYPE_P (type));
where the type is likely the lang_type in:
<call_expr 0x7ffff65504d0
fn <component_ref 0x7ffff66b34e0
type <lang_type 0x7ffff66851f8 unknown type type <lang_type
0x7ffff66851f8 unknown type>
VOID
align:1 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff66851f8
pointer_to_this <lang_type 0x7ffff66851f8 unknown type>
reference_to_this <lang_type 0x7ffff66851f8 unknown type>>
whatever that exactly is, it isn't a reference or pointer type.
processing_template_decl is true in this context, but if we assume
that in this context expr_noexcept_p is true we probably miss diagnostics.
Jason, any idea?