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?

Reply via email to