diff options
author | Mark Mitchell <mark@codesourcery.com> | 2005-08-26 19:35:13 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-08-26 19:35:13 +0000 |
commit | b207d6e26f1d7f038d0a6d7360e7208cdd97989b (patch) | |
tree | 42404833ca3e44c8e6e3cbdf5ee9323a72f203e1 /gcc | |
parent | b84f46516bc9e5293d8bc9333b5e8f494e223ff2 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/nontype13.C | 29 |
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" } +} + |