aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-12-25 02:28:01 -0500
committerJason Merrill <jason@gcc.gnu.org>2014-12-25 02:28:01 -0500
commitfdc2ae49fd456418639ebfea7d34ad7beda3c093 (patch)
treedca5cf6b66e075778a790f779f7d532c0c4b6b89 /gcc
parent17e87c1ca5476117c64c69a9777226af70dd4394 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/pt.c12
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31432.C4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr31442.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr32115.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/variadic40.C4
-rw-r--r--gcc/testsuite/g++.dg/template/crash55.C2
-rw-r--r--gcc/testsuite/g++.dg/template/crash57.C2
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;