aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-08-26 19:35:13 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-08-26 19:35:13 +0000
commitb207d6e26f1d7f038d0a6d7360e7208cdd97989b (patch)
tree42404833ca3e44c8e6e3cbdf5ee9323a72f203e1
parentb84f46516bc9e5293d8bc9333b5e8f494e223ff2 (diff)
downloadgcc-b207d6e26f1d7f038d0a6d7360e7208cdd97989b.zip
gcc-b207d6e26f1d7f038d0a6d7360e7208cdd97989b.tar.gz
gcc-b207d6e26f1d7f038d0a6d7360e7208cdd97989b.tar.bz2
re PR c++/19004 (ICE in uses_template_parms at cp/pt.c:4860)
PR c++/19004 * pt.c (uses_template_parms): Handle IDENTIFIER_NODE. (type_dependent_expression_p): Allow BASELINKs whose associated functions are simply a FUNCTION_DECL. PR c++/19004 * g++.dg/template/nontype13.C: New test. From-SVN: r103531
-rw-r--r--gcc/cp/ChangeLog10
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/template/nontype13.C29
4 files changed, 40 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 485cccd..4c2c72e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2005-08-26 Mark Mitchell <mark@codesourcery.com>
+ PR c++/19004
+ * pt.c (uses_template_parms): Handle IDENTIFIER_NODE.
+ (type_dependent_expression_p): Allow BASELINKs whose associated
+ functions are simply a FUNCTION_DECL.
+
PR c++/23491
* cp-tree.h (build_vec_init): Adjust prototype.
* init.c (perform_member_init): Adjust call to build_vec_init.
@@ -9,11 +14,6 @@
default initialization of vector elements when set.
* typeck.c (build_modify_expr): Adjust call to build_vec_init.
- PR c++/19004
- * pt.c (uses_template_parms): Handle IDENTIFIER_NODE.
- (type_dependent_expression_p): Allow BASELINKs whose associated
- functions are simply a FUNCTION_DECL.
-
2005-08-25 Nathan Sidwell <nathan@codesourcery.com>
PR c++/20817
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 71ac318..386dc2f 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -4956,6 +4956,7 @@ uses_template_parms (tree t)
|| TREE_CODE (t) == TEMPLATE_PARM_INDEX
|| TREE_CODE (t) == OVERLOAD
|| TREE_CODE (t) == BASELINK
+ || TREE_CODE (t) == IDENTIFIER_NODE
|| CONSTANT_CLASS_P (t))
dependent_p = (type_dependent_expression_p (t)
|| value_dependent_expression_p (t));
@@ -12356,7 +12357,8 @@ type_dependent_expression_p (tree expression)
return true;
expression = TREE_OPERAND (expression, 0);
}
- gcc_assert (TREE_CODE (expression) == OVERLOAD);
+ gcc_assert (TREE_CODE (expression) == OVERLOAD
+ || TREE_CODE (expression) == FUNCTION_DECL);
while (expression)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cb31b6a..24179e1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2005-08-26 Mark Mitchell <mark@codesourcery.com>
+ PR c++/19004
+ * g++.dg/template/nontype13.C: New test.
+
PR c++/23491
* g++.dg/init/new14.C: New test.
* g++.dg/expr/anew1.C: Do not XFAIL.
diff --git a/gcc/testsuite/g++.dg/template/nontype13.C b/gcc/testsuite/g++.dg/template/nontype13.C
new file mode 100644
index 0000000..5ff697a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/nontype13.C
@@ -0,0 +1,29 @@
+// PR c++/19004
+
+template<typename T>
+struct Dummy
+{
+ void evil()
+ {
+ this->template tester<true>();
+ }
+
+ template<bool B>
+ void tester()
+ {
+ bar<evil>()(); // { dg-error "argument" }
+ }
+ template<bool B>
+ struct bar
+ {
+ void operator()()
+ { }
+ };
+};
+
+int main()
+{
+ Dummy<int> d;
+ d.tester<true> (); // { dg-error "instantiated" }
+}
+