diff options
author | Paolo Carlini <pcarlini@suse.de> | 2007-10-16 22:21:59 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2007-10-16 22:21:59 +0000 |
commit | bf98d3b6c0453c71f0659848e7673ebc2cc3ee0c (patch) | |
tree | 97b55cff8bc838f31c3e48ad95b51197be294f48 /gcc | |
parent | 7aa1cb97ebbf4335d60c04543b7de6e935c22148 (diff) | |
download | gcc-bf98d3b6c0453c71f0659848e7673ebc2cc3ee0c.zip gcc-bf98d3b6c0453c71f0659848e7673ebc2cc3ee0c.tar.gz gcc-bf98d3b6c0453c71f0659848e7673ebc2cc3ee0c.tar.bz2 |
re PR c++/31446 (ICE with invalid template parameter)
/cp
2007-10-16 Paolo Carlini <pcarlini@suse.de>
PR c++/31446
* pt.c (current_template_args): Do not change TREE_LIST elements
with a TREE_VALUE of error_mark_node.
/testsuite
2007-10-16 Paolo Carlini <pcarlini@suse.de>
PR c++/31446
* g++.dg/template/void11.C: New.
* g++.dg/template/void2.C: Adjust error markers.
* g++.dg/template/void10.C: Likewise.
* g++.dg/template/crash55.C: Likewise.
From-SVN: r129391
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash55.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void10.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void11.C | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/void2.C | 4 |
7 files changed, 31 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 559226b..5fd1c1b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2007-10-16 Paolo Carlini <pcarlini@suse.de> + + PR c++/31446 + * pt.c (current_template_args): Do not change TREE_LIST elements + with a TREE_VALUE of error_mark_node. + 2007-10-16 Mark Mitchell <mark@codesourcery.com> * typeck.c (cp_apply_type_quals_to_decl): Expand documentation. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index c3ce0d1..773c104 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -3136,8 +3136,8 @@ current_template_args (void) TREE_TYPE (t) = type; } } + TREE_VEC_ELT (a, i) = t; } - TREE_VEC_ELT (a, i) = t; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3535b31..34f8c08 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2007-10-16 Paolo Carlini <pcarlini@suse.de> + + PR c++/31446 + * g++.dg/template/void11.C: New. + * g++.dg/template/void2.C: Adjust error markers. + * g++.dg/template/void10.C: Likewise. + * g++.dg/template/crash55.C: Likewise. + 2007-10-16 Mark Mitchell <mark@codesourcery.com> * g++.dg/opt/const5.C: New test. diff --git a/gcc/testsuite/g++.dg/template/crash55.C b/gcc/testsuite/g++.dg/template/crash55.C index 377603d..7cf9f1e 100644 --- a/gcc/testsuite/g++.dg/template/crash55.C +++ b/gcc/testsuite/g++.dg/template/crash55.C @@ -1,6 +1,6 @@ //PR c++/27668 template<typename class T, T = T()> // { dg-error "nested-name-specifier|two or more|valid type" } -struct A {}; // { dg-error "definition|template" } +struct A {}; 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 index 56e0b6d..4904a28 100644 --- a/gcc/testsuite/g++.dg/template/void10.C +++ b/gcc/testsuite/g++.dg/template/void10.C @@ -7,4 +7,4 @@ template<void> struct A // { dg-error "not a valid type" } template<typename> struct B {}; -B<int> b; // { dg-error "template argument|invalid type" } +B<int> b; diff --git a/gcc/testsuite/g++.dg/template/void11.C b/gcc/testsuite/g++.dg/template/void11.C new file mode 100644 index 0000000..1aad7a1 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/void11.C @@ -0,0 +1,12 @@ +// PR c++/31446 + +template<void> struct A // { dg-error "valid type" } + +{ + template<int> friend void foo(); +}; + +void bar() +{ + foo<0>(); // { dg-error "not declared|primary-expression" } +} diff --git a/gcc/testsuite/g++.dg/template/void2.C b/gcc/testsuite/g++.dg/template/void2.C index 05a8186..eceb362 100644 --- a/gcc/testsuite/g++.dg/template/void2.C +++ b/gcc/testsuite/g++.dg/template/void2.C @@ -3,7 +3,7 @@ template<int> struct A { - template<void> friend class X; // { dg-error "void" } + template<void> friend class X; // { dg-error "void|valid type" } }; -A<0> a; +A<0> a; |