diff options
author | Marek Polacek <polacek@redhat.com> | 2019-02-01 19:58:44 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2019-02-01 19:58:44 +0000 |
commit | a53a893b4fe04ec966a4ec178ee8f394426a5dad (patch) | |
tree | c7b2750b3f0cc06cf5e61cbc27076d19f5ed4c01 | |
parent | e71ac163553c47c516d2d5e77ba5fedce6ceec47 (diff) | |
download | gcc-a53a893b4fe04ec966a4ec178ee8f394426a5dad.zip gcc-a53a893b4fe04ec966a4ec178ee8f394426a5dad.tar.gz gcc-a53a893b4fe04ec966a4ec178ee8f394426a5dad.tar.bz2 |
PR c++/88325 - ICE with invalid out-of-line template member definition.
* parser.c (cp_parser_class_name): Don't call make_typename_type
for overloads.
* g++.dg/cpp2a/typename14.C: New test.
From-SVN: r268455
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp2a/typename14.C | 25 |
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ca3618e..f0545ae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-02-01 Marek Polacek <polacek@redhat.com> + + PR c++/88325 - ICE with invalid out-of-line template member definition. + * parser.c (cp_parser_class_name): Don't call make_typename_type + for overloads. + 2019-02-01 Jakub Jelinek <jakub@redhat.com> PR c++/87175 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 91c5ff4..ffecce4 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23167,7 +23167,9 @@ cp_parser_class_name (cp_parser *parser, decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p); /* If this is a typename, create a TYPENAME_TYPE. */ - if (typename_p && decl != error_mark_node) + if (typename_p + && decl != error_mark_node + && !is_overloaded_fn (decl)) { decl = make_typename_type (scope, decl, typename_type, /*complain=*/tf_error); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cfcd4ce..1df9ba2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-02-01 Marek Polacek <polacek@redhat.com> + + PR c++/88325 - ICE with invalid out-of-line template member definition. + * g++.dg/cpp2a/typename14.C: New test. + 2019-02-01 Richard Biener <rguenther@suse.de> PR middle-end/88597 diff --git a/gcc/testsuite/g++.dg/cpp2a/typename14.C b/gcc/testsuite/g++.dg/cpp2a/typename14.C new file mode 100644 index 0000000..4750db3 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/typename14.C @@ -0,0 +1,25 @@ +// PR c++/88325 +// { dg-do compile { target c++2a } } + +template<typename> struct A +{ + template<typename> A (); +}; + +template<typename T> +template<typename U> +A<T>::A<U> () // { dg-error "partial specialization" } +{ +} + +template<typename> struct B +{ + template<typename> int foo (int); +}; + +template<typename T> +template<typename U> +B<T>::foo<int>(int) // { dg-error "partial specialization|declaration" } +{ + return 1; +} |