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)