Message ID | 8b810d0c-142f-0048-1674-4a7d0ca6d956@suse.cz |
---|---|
State | New |
Headers | show |
Series | Replace one error with inform. | expand |
On Mon, 2020-01-27 at 10:57 +0100, Martin Liška wrote: > Hello. > > The patch is about splitting pair of errors into > error and inform which seems logical to me in this > situation: [...] > diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c > index 4520c995028..f9bed1ea4fb 100644 > --- a/gcc/cp/pt.c > +++ b/gcc/cp/pt.c > @@ -6149,7 +6149,7 @@ redeclare_class_template (tree type, tree parms, tree cons) > != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))) > { Please add an auto_diagnostic_group d; here, so that -fdiagnostics-format=json can nest the note below the error. OK with that change. Thanks Dave > error ("template parameter %q+#D", tmpl_parm); > - error ("redeclared here as %q#D", parm); > + inform (input_location, "redeclared here as %q#D", parm); > return false; > }
On 1/27/20 2:38 PM, David Malcolm wrote: > Please add an > auto_diagnostic_group d; > here, so that -fdiagnostics-format=json can nest the note below the > error. > > OK with that change. Sure, there's one another patch that does the for all error+inform in the function. Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Thanks, Martin
On Mon, 2020-01-27 at 16:23 +0100, Martin Liška wrote: > On 1/27/20 2:38 PM, David Malcolm wrote: > > Please add an > > auto_diagnostic_group d; > > here, so that -fdiagnostics-format=json can nest the note below the > > error. > > > > OK with that change. > > Sure, there's one another patch that does the for all error+inform > in the function. > > Patch can bootstrap on x86_64-linux-gnu and survives regression > tests. > > Ready to be installed? > Thanks, > Martin LGTM, though a nit in the ChangeLog message: "couple of" to me means 2 and the number is 4, so "several" is probably better here. [1] Thanks Dave [1] though I'm probably being overly pedantic; see https://xkcd.com/1070/
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 4520c995028..f9bed1ea4fb 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6149,7 +6149,7 @@ redeclare_class_template (tree type, tree parms, tree cons) != TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))))) { error ("template parameter %q+#D", tmpl_parm); - error ("redeclared here as %q#D", parm); + inform (input_location, "redeclared here as %q#D", parm); return false; } diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-34314.C b/gcc/testsuite/g++.dg/cpp0x/vt-34314.C index ee0ed01b8d3..b37cac53223 100644 --- a/gcc/testsuite/g++.dg/cpp0x/vt-34314.C +++ b/gcc/testsuite/g++.dg/cpp0x/vt-34314.C @@ -4,7 +4,7 @@ template<typename Fun, typename... Args> // { dg-error "template parameter" } struct call; template<typename Fun, typename Arg0> -struct call // { dg-error "redeclared here" } +struct call // { dg-message "note: redeclared here" } { template<typename Sig> struct result; @@ -21,7 +21,7 @@ template<typename Fun, int... N> // { dg-error "template parameter" } struct call2; template<typename Fun, int N> -struct call2 // { dg-error "redeclared here" } +struct call2 // { dg-message "note: redeclared here" } { template<typename Sig> struct result; @@ -37,7 +37,7 @@ template<typename Fun, template<typename> class... TT> // { dg-error "template p struct call3; template<typename Fun, template<typename> class TT> -struct call3 // { dg-error "redeclared here" } +struct call3 // { dg-message "note: redeclared here" } { template<typename Sig> struct result; diff --git a/gcc/testsuite/g++.dg/template/pr59930-2.C b/gcc/testsuite/g++.dg/template/pr59930-2.C index a7e6ea4ea9a..65ec58e23f4 100644 --- a/gcc/testsuite/g++.dg/template/pr59930-2.C +++ b/gcc/testsuite/g++.dg/template/pr59930-2.C @@ -6,7 +6,7 @@ namespace N { // Injects N::N template < T > friend class N; // { dg-error "template parameter" "" { target *-*-* } .-1 } - // { dg-error "redeclared" "" { target *-*-* } .-2 } + // { dg-message "note: redeclared" "" { target *-*-* } .-2 } }; } diff --git a/gcc/testsuite/g++.dg/template/pr92440.C b/gcc/testsuite/g++.dg/template/pr92440.C new file mode 100644 index 00000000000..20db5f10586 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr92440.C @@ -0,0 +1,10 @@ +// PR c++/92440 +// { dg-do compile } + +template <int T> // { dg-error "template parameter" } +struct S { + template <class U> + friend struct S; // { dg-message "note: redeclared here as" } +}; + +S<0> s; diff --git a/gcc/testsuite/g++.dg/template/redecl2.C b/gcc/testsuite/g++.dg/template/redecl2.C index 4dd432e6fea..31334f4f334 100644 --- a/gcc/testsuite/g++.dg/template/redecl2.C +++ b/gcc/testsuite/g++.dg/template/redecl2.C @@ -6,4 +6,4 @@ // non-type template parameter. template <int i> struct X; // { dg-error "template parameter" } -template <int* p> struct X; // { dg-error "redeclared here" } +template <int* p> struct X; // { dg-message "note: redeclared here" } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C b/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C index 4a580e17742..48517f5d1d3 100644 --- a/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C +++ b/gcc/testsuite/g++.old-deja/g++.pt/redecl1.C @@ -16,7 +16,7 @@ template <class T> // { dg-error "template parameter" } struct S3; template <int I> -struct S3; // { dg-error "redeclared here" } +struct S3; // { dg-message "note: redeclared here" } template <template <class T> class C> -struct S3; // { dg-error "redeclared here" } +struct S3; // { dg-message "note: redeclared here" }