diff options
author | Jason Merrill <jason@redhat.com> | 2014-12-25 02:28:01 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2014-12-25 02:28:01 -0500 |
commit | fdc2ae49fd456418639ebfea7d34ad7beda3c093 (patch) | |
tree | dca5cf6b66e075778a790f779f7d532c0c4b6b89 | |
parent | 17e87c1ca5476117c64c69a9777226af70dd4394 (diff) | |
download | gcc-fdc2ae49fd456418639ebfea7d34ad7beda3c093.zip gcc-fdc2ae49fd456418639ebfea7d34ad7beda3c093.tar.gz gcc-fdc2ae49fd456418639ebfea7d34ad7beda3c093.tar.bz2 |
pt.c (check_default_tmpl_args): Uses the parameter source location in the diagnostic.
* pt.c (check_default_tmpl_args): Uses the parameter source
location in the diagnostic.
(convert_template_argument): Just return if parm is error_mark_node.
From-SVN: r219067
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr31432.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr31442.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr32115.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic40.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash55.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash57.C | 2 |
8 files changed, 17 insertions, 15 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4eb8712..bd5dd49 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2014-12-25 Jason Merrill <jason@redhat.com> + * pt.c (check_default_tmpl_args): Uses the parameter source + location in the diagnostic. + (convert_template_argument): Just return if parm is error_mark_node. + PR c++/63522 * parser.c (cp_parser_type_parameter): Call check_for_bare_parameter_packs on default argument. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f5bd842..21d0d3a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -4578,13 +4578,8 @@ check_default_tmpl_args (tree decl, tree parms, bool is_primary, parameter pack, at the end of the template parameter list. */ - if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL) - error ("parameter pack %qE must be at the end of the" - " template parameter list", TREE_VALUE (parm)); - else - error ("parameter pack %qT must be at the end of the" - " template parameter list", - TREE_TYPE (TREE_VALUE (parm))); + error ("parameter pack %q+D must be at the end of the" + " template parameter list", TREE_VALUE (parm)); TREE_VALUE (TREE_VEC_ELT (inner_parms, i)) = error_mark_node; @@ -6524,6 +6519,9 @@ convert_template_argument (tree parm, tree val; int is_type, requires_type, is_tmpl_type, requires_tmpl_type; + if (parm == error_mark_node) + return error_mark_node; + if (TREE_CODE (arg) == TREE_LIST && TREE_CODE (TREE_VALUE (arg)) == OFFSET_REF) { diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31432.C b/gcc/testsuite/g++.dg/cpp0x/pr31432.C index 1f2ea50..2048077 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr31432.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr31432.C @@ -4,5 +4,5 @@ template<typename..., typename> struct A // { dg-error "parameter pack" } static int i; }; -A<int, int> a; // { dg-error "mismatch|expected|invalid type" } -A<char,int> b; // { dg-error "mismatch|expected|invalid type" } +A<int, int> a; +A<char,int> b; diff --git a/gcc/testsuite/g++.dg/cpp0x/pr31442.C b/gcc/testsuite/g++.dg/cpp0x/pr31442.C index 7fd20e7..b4c737c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr31442.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr31442.C @@ -6,4 +6,4 @@ struct B template <template <typename...> class C> B(C<int>); }; -B b = A<int>(); // { dg-error "mismatch|expected" } +B b = A<int>(); diff --git a/gcc/testsuite/g++.dg/cpp0x/pr32115.C b/gcc/testsuite/g++.dg/cpp0x/pr32115.C index 5722aa3..fafa4ee 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr32115.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr32115.C @@ -1,4 +1,4 @@ // { dg-do compile { target c++11 } } template<typename ...T, int = 0> struct A {}; // { dg-error "end of" } -A<int> a; // { dg-error "mismatch|expected|invalid" } +A<int> a; diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic40.C b/gcc/testsuite/g++.dg/cpp0x/variadic40.C index e4df9b8..e62d62c 100644 --- a/gcc/testsuite/g++.dg/cpp0x/variadic40.C +++ b/gcc/testsuite/g++.dg/cpp0x/variadic40.C @@ -1,3 +1,3 @@ // { dg-do compile { target c++11 } } -template<typename... Values, typename T> -struct backward_tuple {}; // { dg-error "end" } +template<typename... Values, typename T> // { dg-error "end" } +struct backward_tuple {}; diff --git a/gcc/testsuite/g++.dg/template/crash55.C b/gcc/testsuite/g++.dg/template/crash55.C index 7cf9f1e..9b80fd1 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 {}; -template<int> void foo(A<int>); // { dg-error "mismatch|constant|template argument" } +template<int> void foo(A<int>); // { dg-error "cast|argument" "" { target c++98_only } } diff --git a/gcc/testsuite/g++.dg/template/crash57.C b/gcc/testsuite/g++.dg/template/crash57.C index cf1c3c2..ad05e6a 100644 --- a/gcc/testsuite/g++.dg/template/crash57.C +++ b/gcc/testsuite/g++.dg/template/crash57.C @@ -7,4 +7,4 @@ template<typename> struct B template<int(> struct C; // { dg-error "token" } }; -A<char> a; // { dg-error "type/value mismatch|constant|declaration" } +A<char> a; |