aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/template
diff options
context:
space:
mode:
authorlmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 17:41:18 +0000
committerlmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4>2006-08-26 17:41:18 +0000
commit21bd02a96f8322e5a61ad27630d09e46b6f0936d (patch)
tree17042b9752adae54363119249db31c45d318974e /gcc/testsuite/g++.dg/template
parentd4c6e41d6a8da15b0babc4035c2477535dbc1827 (diff)
PR c++/28736
PR c++/28737 PR c++/28738 * pt.c (process_template_parm): Store invalid template parameters as a TREE_LIST with a TREE_VALUE of error_mark_node. (push_inline_template_parms_recursive): Check for template parameters having a TREE_VALUE of error_mark_node rather than check the parameter itself. (mangle_class_name_for_template): Likewise. (comp_template_parms): When comparing the individual template parameters, return 1 if either is error_mark_node. (current_template_args): Robustify. (redeclare_class_template): Likewise. * g++.dg/template/void10.C: New test. * g++.dg/template/void8.C: New test. * g++.dg/template/void9.C: New test. * g++.dg/template/void3.C: Adjust error markers. * g++.dg/template/void4.C: Likewise. * g++.dg/template/crash55.C: Likewise. * g++.dg/template/void7.C: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116473 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/template')
-rw-r--r--gcc/testsuite/g++.dg/template/crash55.C2
-rw-r--r--gcc/testsuite/g++.dg/template/void10.C10
-rw-r--r--gcc/testsuite/g++.dg/template/void3.C2
-rw-r--r--gcc/testsuite/g++.dg/template/void4.C2
-rw-r--r--gcc/testsuite/g++.dg/template/void7.C2
-rw-r--r--gcc/testsuite/g++.dg/template/void8.C7
-rw-r--r--gcc/testsuite/g++.dg/template/void9.C4
7 files changed, 25 insertions, 4 deletions
diff --git a/gcc/testsuite/g++.dg/template/crash55.C b/gcc/testsuite/g++.dg/template/crash55.C
index 7e15b66ee75..0e3fe4c3a59 100644
--- a/gcc/testsuite/g++.dg/template/crash55.C
+++ b/gcc/testsuite/g++.dg/template/crash55.C
@@ -3,4 +3,4 @@
template<typename class T, T = T()> // { dg-error "nested-name-specifier|two or more|valid type" }
struct A {}; // { dg-error "definition"
-template<int> void foo(A<int>); // { dg-error "mismatch|constant" }
+template<int> void foo(A<int>); // { dg-error "mismatch|constant|template argument" }
diff --git a/gcc/testsuite/g++.dg/template/void10.C b/gcc/testsuite/g++.dg/template/void10.C
new file mode 100644
index 00000000000..56e0b6d2e5b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/void10.C
@@ -0,0 +1,10 @@
+//PR c++/28736
+
+template<void> struct A // { dg-error "not a valid type" }
+{
+ template<typename> friend struct B;
+};
+
+template<typename> struct B {};
+
+B<int> b; // { dg-error "template argument|invalid type" }
diff --git a/gcc/testsuite/g++.dg/template/void3.C b/gcc/testsuite/g++.dg/template/void3.C
index 6526a2a47be..bb59934ffe4 100644
--- a/gcc/testsuite/g++.dg/template/void3.C
+++ b/gcc/testsuite/g++.dg/template/void3.C
@@ -1,5 +1,5 @@
//PR c++/28637
template<void> struct A {}; // { dg-error "not a valid type" }
-A<0> a;
+A<0> a; // { dg-error "type" }
diff --git a/gcc/testsuite/g++.dg/template/void4.C b/gcc/testsuite/g++.dg/template/void4.C
index 7d264fbf10b..fe30b2e3736 100644
--- a/gcc/testsuite/g++.dg/template/void4.C
+++ b/gcc/testsuite/g++.dg/template/void4.C
@@ -4,4 +4,4 @@ template<void> struct A; // { dg-error "not a valid type" }
template<template<int> class> struct B {};
-B<A> b;
+B<A> b; // { dg-error "template|invalid type" }
diff --git a/gcc/testsuite/g++.dg/template/void7.C b/gcc/testsuite/g++.dg/template/void7.C
index 2c464b3a055..95d87a20732 100644
--- a/gcc/testsuite/g++.dg/template/void7.C
+++ b/gcc/testsuite/g++.dg/template/void7.C
@@ -5,4 +5,4 @@ template<void> struct A // { dg-error "not a valid type" }
static int i;
};
-A<0> a;
+A<0> a; // { dg-error "invalid type|not a valid type" }
diff --git a/gcc/testsuite/g++.dg/template/void8.C b/gcc/testsuite/g++.dg/template/void8.C
new file mode 100644
index 00000000000..e45c91c044c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/void8.C
@@ -0,0 +1,7 @@
+//PR c++/28737
+
+template<void> struct A; // { dg-error "not a valid type" }
+
+template<typename> struct B;
+
+template<void N> struct B<A<N> > {}; // { dg-error "not a valid type|declared|invalid" }
diff --git a/gcc/testsuite/g++.dg/template/void9.C b/gcc/testsuite/g++.dg/template/void9.C
new file mode 100644
index 00000000000..bb2ed66ff38
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/void9.C
@@ -0,0 +1,4 @@
+//PR c++/28738
+
+template<int,void> struct A {}; // { dg-error "not a valid type" }
+template<int N> struct A<N,0> {}; // { dg-error "not a valid type" }