diff options
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/operator10.C | 7 |
4 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2526a43..24a4763 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2007-07-08 Paolo Carlini <pcarlini@suse.de> + + PR c++/30535 + * pt.c (unify): Never pass error_mark_node to template_decl_level. + 2007-07-07 Mark Mitchell <mark@codesourcery.com> PR c++/32232 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 06e94e7..38a4c09 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12298,6 +12298,8 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict) case TEMPLATE_TEMPLATE_PARM: case BOUND_TEMPLATE_TEMPLATE_PARM: tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0)); + if (tparm == error_mark_node) + return 1; if (TEMPLATE_TYPE_LEVEL (parm) != template_decl_level (tparm)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4f24f50..66749ec 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-07-08 Paolo Carlini <pcarlini@suse.de> + + PR c++/30535 + * g++.dg/template/operator10.C: New. + 2007-07-08 Thomas Koenig <tkoenig@gcc.gnu.org> PR libfortran/32217 diff --git a/gcc/testsuite/g++.dg/template/operator10.C b/gcc/testsuite/g++.dg/template/operator10.C new file mode 100644 index 0000000..b17f49f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/operator10.C @@ -0,0 +1,7 @@ +// PR c++/30535 + +struct A {}; + +template<A, typename T> int operator-(A, T); // { dg-error "not a valid type" } + +int i = A() - 0; // { dg-error "no match" } |