For a while, on the concepts branch check_noexcept_r was seeing a CALL_EXPR where the fn operand was not a pointer or reference to function, which caused trouble. Let's add an assert for that.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit 4fbc043d90cbc3820e1eeb381d709c2631b7daeb
Author: Jason Merrill <ja...@redhat.com>
Date:   Wed Aug 5 21:37:23 2015 -0400

    	* except.c (check_noexcept_r): Assert that fn is POINTER_TYPE_P.

diff --git a/gcc/cp/except.c b/gcc/cp/except.c
index 6c36646..4f06f52 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1155,7 +1155,9 @@ check_noexcept_r (tree *tp, int * /*walk_subtrees*/, void * /*data*/)
          We could use TREE_NOTHROW (t) for !TREE_PUBLIC fns, though... */
       tree fn = (code == AGGR_INIT_EXPR
 		 ? AGGR_INIT_EXPR_FN (t) : CALL_EXPR_FN (t));
-      tree type = TREE_TYPE (TREE_TYPE (fn));
+      tree type = TREE_TYPE (fn);
+      gcc_assert (POINTER_TYPE_P (type));
+      type = TREE_TYPE (type);
 
       STRIP_NOPS (fn);
       if (TREE_CODE (fn) == ADDR_EXPR)

Reply via email to