Commit a2c67a8d by Paolo Carlini Committed by Paolo Carlini

parser.c (cp_parser_template_declaration_after_parameters): Use…

parser.c (cp_parser_template_declaration_after_parameters): Use DECL_SOURCE_LOCATION in literal operator template errors.

/cp
2019-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

	* parser.c (cp_parser_template_declaration_after_parameters): Use
	DECL_SOURCE_LOCATION in literal operator template errors.

/testsuite
2019-05-21  Paolo Carlini  <paolo.carlini@oracle.com>

	* g++.dg/cpp0x/udlit-tmpl-arg-neg2.C: Check locations too.
	* g++.dg/cpp0x/udlit-tmpl-parms-neg.C: Likewise.

From-SVN: r271492
parent cdb42a36
2019-05-21 Paolo Carlini <paolo.carlini@oracle.com>
* parser.c (cp_parser_template_declaration_after_parameters): Use
DECL_SOURCE_LOCATION in literal operator template errors.
2019-05-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67184
PR c++/69445
* call.c (build_over_call): Devirtualize when the final overrider
......
......@@ -27895,14 +27895,16 @@ cp_parser_template_declaration_after_parameters (cp_parser* parser,
if (!ok)
{
if (cxx_dialect > cxx17)
error ("literal operator template %qD has invalid parameter list;"
" expected non-type template parameter pack %<<char...>%> "
"or single non-type parameter of class type",
decl);
error_at (DECL_SOURCE_LOCATION (decl), "literal operator "
"template %qD has invalid parameter list; expected "
"non-type template parameter pack %<<char...>%> or "
"single non-type parameter of class type",
decl);
else
error ("literal operator template %qD has invalid parameter list;"
" expected non-type template parameter pack %<<char...>%>",
decl);
error_at (DECL_SOURCE_LOCATION (decl), "literal operator "
"template %qD has invalid parameter list; expected "
"non-type template parameter pack %<<char...>%>",
decl);
}
}
......@@ -11,7 +11,7 @@ struct Meow {};
void f ()
{
decltype (Meow.purr ()) d; // { dg-error "expected primary-expression" "pr89875" { xfail c++98_only } }
decltype (Meow.purr ()) d; // { dg-error "expected primary-expression" }
(void)&d;
}
......
......@@ -2,6 +2,6 @@
// { dg-do compile { target c++11 } }
template <T, T... U> // { dg-error "'T' has not been declared" }
int operator"" _foo (); // { dg-error "has invalid parameter list" }
int operator"" _foo (); // { dg-error "5:literal operator template .int operator\"\"_foo\\(\\). has invalid parameter list" }
template <T... U> // { dg-error "'T' has not been declared" }
int operator"" _bar (); // { dg-error "has invalid parameter list" }
int operator"" _bar (); // { dg-error "5:literal operator template .int operator\"\"_bar\\(\\). has invalid parameter list" }
......@@ -3,10 +3,10 @@
class Foo { };
template<wchar_t...>
Foo operator"" _Foo(); // { dg-error "literal operator template|has invalid parameter list" }
Foo operator"" _Foo(); // { dg-error "7:literal operator template .Foo operator\"\"_Foo\\(\\). has invalid parameter list" }
template<char>
Foo operator"" _Bar(); // { dg-error "literal operator template|has invalid parameter list" }
Foo operator"" _Bar(); // { dg-error "7:literal operator template .Foo operator\"\"_Bar\\(\\). has invalid parameter list" }
template<typename... Type>
Foo operator"" _Bar(); // { dg-error "literal operator template|has invalid parameter list" }
Foo operator"" _Bar(); // { dg-error "7:literal operator template .Foo operator\"\"_Bar\\(\\). has invalid parameter list" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment