From a2c67a8d7a1b28cafb45db034c55cfe96cf3ee9c Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Tue, 21 May 2019 23:11:26 +0000 Subject: parser.c (cp_parser_template_declaration_after_parameters): Use DECL_SOURCE_LOCATION in literal operator template errors. /cp 2019-05-21 Paolo Carlini * parser.c (cp_parser_template_declaration_after_parameters): Use DECL_SOURCE_LOCATION in literal operator template errors. /testsuite 2019-05-21 Paolo Carlini * g++.dg/cpp0x/udlit-tmpl-arg-neg2.C: Check locations too. * g++.dg/cpp0x/udlit-tmpl-parms-neg.C: Likewise. From-SVN: r271492 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/parser.c | 16 +++++++++------- gcc/testsuite/g++.dg/cpp0x/decltype-pr66548.C | 2 +- gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg2.C | 4 ++-- gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C | 6 +++--- 5 files changed, 20 insertions(+), 13 deletions(-) (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e26cb98..970f7e8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2019-05-21 Paolo Carlini + * parser.c (cp_parser_template_declaration_after_parameters): Use + DECL_SOURCE_LOCATION in literal operator template errors. + +2019-05-21 Paolo Carlini + PR c++/67184 PR c++/69445 * call.c (build_over_call): Devirtualize when the final overrider diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 290f897..1440fdb 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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 %<%> " - "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 %<%> 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 %<%>", - decl); + error_at (DECL_SOURCE_LOCATION (decl), "literal operator " + "template %qD has invalid parameter list; expected " + "non-type template parameter pack %<%>", + decl); } } diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-pr66548.C b/gcc/testsuite/g++.dg/cpp0x/decltype-pr66548.C index f4b7caa..3f20d15 100644 --- a/gcc/testsuite/g++.dg/cpp0x/decltype-pr66548.C +++ b/gcc/testsuite/g++.dg/cpp0x/decltype-pr66548.C @@ -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; } diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg2.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg2.C index c426e0e..f2db95d 100644 --- a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg2.C +++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-arg-neg2.C @@ -2,6 +2,6 @@ // { dg-do compile { target c++11 } } template // { 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 // { 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" } diff --git a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C index f681ecf..167d871 100644 --- a/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C +++ b/gcc/testsuite/g++.dg/cpp0x/udlit-tmpl-parms-neg.C @@ -3,10 +3,10 @@ class Foo { }; template - 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 - 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 - 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" } -- cgit v1.1