aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-18 11:07:13 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-03-18 11:07:13 -0400
commitb3f1cee49f3f9c59cfb7e05a7dc7a2b6e480305a (patch)
tree2cdc99775a855a529401c9947349a1d7e912f61d /gcc
parente6baef836f11dd7273c258a41cbfc44f462e3828 (diff)
downloadgcc-b3f1cee49f3f9c59cfb7e05a7dc7a2b6e480305a.zip
gcc-b3f1cee49f3f9c59cfb7e05a7dc7a2b6e480305a.tar.gz
gcc-b3f1cee49f3f9c59cfb7e05a7dc7a2b6e480305a.tar.bz2
re PR c++/48162 (447.dealII in SPEC CPU 2006 failed to build)
PR c++/48162 * semantics.c (finish_call_expr): Allow TARGET_EXPR for now. From-SVN: r171148
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/semantics.c3
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/template/fn-ptr1.C5
4 files changed, 13 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9578f1a..e187dee 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2011-03-18 Jason Merrill <jason@redhat.com>
+ PR c++/48162
+ * semantics.c (finish_call_expr): Allow TARGET_EXPR for now.
+
PR c++/48118
* call.c (build_over_call): Don't skip ck_rvalue.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index b6d1008..41ab858 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2155,6 +2155,9 @@ finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
if (TREE_CODE (result) == INDIRECT_REF)
result = TREE_OPERAND (result, 0);
gcc_assert (TREE_CODE (result) == CALL_EXPR
+ /* FIXME cp_build_function_call_vec should avoid argument
+ and return transformations like build_over_call does. */
+ || TREE_CODE (result) == TARGET_EXPR
|| TREE_CODE (fn) == PSEUDO_DTOR_EXPR
|| errorcount);
result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b0f4f53..c362faf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2011-03-18 Jason Merrill <jason@redhat.com>
+ * g++.dg/template/fn-ptr1.C: New.
+
* g++.dg/overload/volatile1.C: New.
* g++.dg/opt/pr23372.C: New.
diff --git a/gcc/testsuite/g++.dg/template/fn-ptr1.C b/gcc/testsuite/g++.dg/template/fn-ptr1.C
new file mode 100644
index 0000000..c0e7d98
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/fn-ptr1.C
@@ -0,0 +1,5 @@
+// PR c++/48162
+
+struct A { };
+A (*f)();
+template <class T> void g() { f(); }