diff options
author | lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-26 17:41:18 +0000 |
---|---|---|
committer | lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-26 17:41:18 +0000 |
commit | 21bd02a96f8322e5a61ad27630d09e46b6f0936d (patch) | |
tree | 17042b9752adae54363119249db31c45d318974e /gcc/testsuite/g++.dg/template | |
parent | d4c6e41d6a8da15b0babc4035c2477535dbc1827 (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.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void10.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void3.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void4.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void7.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void8.C | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void9.C | 4 |
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" } |