diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-04-19 13:57:23 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-04-19 13:57:23 +0200 |
commit | 7296c0c537870eea056011c019cfe8ee92ef4a00 (patch) | |
tree | a432e261665f348a9c862dea83bdbc6a2103063e /gcc | |
parent | c280b7ee5c5dfcc1b4ae2c0389987b7b67ec8cf8 (diff) | |
download | gcc-7296c0c537870eea056011c019cfe8ee92ef4a00.zip gcc-7296c0c537870eea056011c019cfe8ee92ef4a00.tar.gz gcc-7296c0c537870eea056011c019cfe8ee92ef4a00.tar.bz2 |
re PR c++/90138 (ICE on invalid in contains_struct_check())
PR c++/90138
* pt.c (process_template_parm): Set decl to pushdecl result. If
!is_non_type, also set parm to that.
* g++.dg/template/pr90138.C: New test.
From-SVN: r270456
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/pr90138.C | 5 |
4 files changed, 15 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b35d875..db9a3a8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2019-04-19 Jakub Jelinek <jakub@redhat.com> + PR c++/90138 + * pt.c (process_template_parm): Set decl to pushdecl result. If + !is_non_type, also set parm to that. + PR c/89888 * decl.c (struct cp_switch): Remove outside_range_p member. (push_switch): Don't clear it. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3a11eaa..842dacf 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4433,7 +4433,9 @@ process_template_parm (tree list, location_t parm_loc, tree parm, process_template_parm could fail. */ tree reqs = finish_shorthand_constraint (parm, constr); - pushdecl (decl); + decl = pushdecl (decl); + if (!is_non_type) + parm = decl; /* Build the parameter node linking the parameter declaration, its default argument (if any), and its constraints (if any). */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a5e5af5..0b5c343 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2019-04-19 Jakub Jelinek <jakub@redhat.com> + PR c++/90138 + * g++.dg/template/pr90138.C: New test. + PR c/89888 * c-c++-common/pr89888.c: New test. * g++.dg/torture/pr40335.C: Change dg-bogus into dg-warning. diff --git a/gcc/testsuite/g++.dg/template/pr90138.C b/gcc/testsuite/g++.dg/template/pr90138.C new file mode 100644 index 0000000..473b73d --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr90138.C @@ -0,0 +1,5 @@ +// PR c++/90138 + +template <, typename T, typename typename, typename T> // { dg-error "expected" } +struct S; // { dg-error "no default" } +// { dg-error "two or more" "" { target *-*-* } .-2 } |