From: Paolo Carlini <paolo.carlini@oracle.com>
To: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>
Subject: [C++ Patch] Replace a few more error + error with error + inform
Date: Fri, 19 May 2017 16:15:00 -0000 [thread overview]
Message-ID: <8407427e-d71a-e7ab-80b4-c43241044918@oracle.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 538 bytes --]
Hi,
while looking into some bugs (eg, c++/71464) I noticed a few more of
those consecutive errors, which I propose to adjust per the below
patchlet. The second case in add_method is a bit tricky because in
principle we'd really like to be more specific (eg, clang talks about
constructors which cannot be redeclared, member functions which cannot
be redeclared and many more) and avoid verbose diagnostic, but in the
below I only try to avoid emitting error + error... Tested x86_64-linux.
Thanks, Paolo.
/////////////////////
[-- Attachment #2: CL_error_inform_3 --]
[-- Type: text/plain, Size: 722 bytes --]
/cp
2017-05-19 Paolo Carlini <paolo.carlini@oracle.com>
* class.c (add_method): Change pair of errors to error + inform.
(handle_using_decl): Likewise.
/testsuite
2017-05-19 Paolo Carlini <paolo.carlini@oracle.com>
* g++.dg/cpp0x/inh-ctor3.C: Adjust for dg-message vs dg-error.
* g++.dg/diagnostic/variadic1.C: Likewise.
* g++.dg/gomp/udr-3.C: Likewise.
* g++.dg/overload/error1.C: Likewise.
* g++.dg/overload/error2.C: Likewise.
* g++.dg/template/duplicate1.C: Likewise.
* g++.old-deja/g++.benjamin/warn02.C: Likewise.
* g++.old-deja/g++.brendan/arm2.C: Likewise.
* g++.old-deja/g++.other/redecl2.C: Likewise.
* g++.old-deja/g++.other/redecl4.C: Likewise.
* g++.old-deja/g++.pt/memtemp78.C: Likewise.
[-- Attachment #3: patch_error_inform_3 --]
[-- Type: text/plain, Size: 10393 bytes --]
Index: cp/class.c
===================================================================
--- cp/class.c (revision 248245)
+++ cp/class.c (working copy)
@@ -1212,10 +1212,11 @@ add_method (tree type, tree method, bool via_using
continue;
}
error_at (DECL_SOURCE_LOCATION (method),
- "%q#D", method);
- error_at (DECL_SOURCE_LOCATION (fn),
- "conflicts with version inherited from %qT",
- basef);
+ "%q#D conflicts with version inherited from %qT",
+ method, basef);
+ inform (DECL_SOURCE_LOCATION (fn),
+ "version inherited from %qT declared here",
+ basef);
}
/* Otherwise defer to the other function. */
return false;
@@ -1233,8 +1234,10 @@ add_method (tree type, tree method, bool via_using
}
else
{
- error ("%q+#D cannot be overloaded", method);
- error ("with %q+#D", fn);
+ error_at (DECL_SOURCE_LOCATION (method),
+ "%q#D cannot be overloaded with %q#D", method, fn);
+ inform (DECL_SOURCE_LOCATION (fn),
+ "previous declaration %q#D", fn);
return false;
}
}
@@ -1366,16 +1369,21 @@ handle_using_decl (tree using_decl, tree t)
the same name already present in the current class. */;
else
{
- error ("%q+D invalid in %q#T", using_decl, t);
- error (" because of local method %q+#D with same name",
- old_value);
+ error_at (DECL_SOURCE_LOCATION (using_decl), "%qD invalid in %q#T "
+ "because of local method %q#D with same name",
+ using_decl, t, old_value);
+ inform (DECL_SOURCE_LOCATION (old_value),
+ "local method %q#D declared here", old_value);
return;
}
}
else if (!DECL_ARTIFICIAL (old_value))
{
- error ("%q+D invalid in %q#T", using_decl, t);
- error (" because of local member %q+#D with same name", old_value);
+ error_at (DECL_SOURCE_LOCATION (using_decl), "%qD invalid in %q#T "
+ "because of local member %q#D with same name",
+ using_decl, t, old_value);
+ inform (DECL_SOURCE_LOCATION (old_value),
+ "local member %q#D declared here", old_value);
return;
}
Index: testsuite/g++.dg/cpp0x/inh-ctor3.C
===================================================================
--- testsuite/g++.dg/cpp0x/inh-ctor3.C (revision 248244)
+++ testsuite/g++.dg/cpp0x/inh-ctor3.C (working copy)
@@ -8,7 +8,7 @@ struct B2 {
B2(int);
};
struct D1 : B1, B2 {
- using B1::B1; // { dg-error "inherited" }
+ using B1::B1; // { dg-message "declared" }
using B2::B2; // { dg-error "inherited" }
}; // ill-formed: attempts to declare D1(int) twice
struct D2 : B1, B2 {
Index: testsuite/g++.dg/diagnostic/variadic1.C
===================================================================
--- testsuite/g++.dg/diagnostic/variadic1.C (revision 248244)
+++ testsuite/g++.dg/diagnostic/variadic1.C (working copy)
@@ -4,6 +4,6 @@
template<int N> struct B { };
template<typename... T> struct A
{
- B<sizeof...(T)> f(); // { dg-error "sizeof\\.\\.\\." }
+ B<sizeof...(T)> f(); // { dg-message "sizeof\\.\\.\\." }
B<42> f(); // { dg-error "cannot be overloaded" }
};
Index: testsuite/g++.dg/gomp/udr-3.C
===================================================================
--- testsuite/g++.dg/gomp/udr-3.C (revision 248244)
+++ testsuite/g++.dg/gomp/udr-3.C (working copy)
@@ -77,7 +77,7 @@ namespace N2
{
struct U
{
- #pragma omp declare reduction (bar: S: omp_out.s *= omp_in.s) // { dg-error "with" }
+ #pragma omp declare reduction (bar: S: omp_out.s *= omp_in.s) // { dg-message "previous" }
#pragma omp declare reduction (bar: S: omp_out.s += omp_in.s) // { dg-error "cannot be overloaded" }
};
}
@@ -109,9 +109,9 @@ namespace N4
struct U
{
#pragma omp declare reduction (bar: T: omp_out.t += omp_in.t)
- #pragma omp declare reduction (bar: S: omp_out.s *= omp_in.s) // { dg-error "with" }
+ #pragma omp declare reduction (bar: S: omp_out.s *= omp_in.s) // { dg-message "previous" }
#pragma omp declare reduction (bar: S: omp_out.s += omp_in.s) // { dg-error "cannot be overloaded" }
- #pragma omp declare reduction (bar: long: omp_out += omp_in) // { dg-error "with" }
+ #pragma omp declare reduction (bar: long: omp_out += omp_in) // { dg-message "previous" }
#pragma omp declare reduction (bar: long int: omp_out += omp_in) // { dg-error "cannot be overloaded" }
#pragma omp declare reduction (bar: short unsigned: omp_out += omp_in)
#pragma omp declare reduction (bar: short int: omp_out += omp_in)
@@ -132,7 +132,7 @@ namespace N5
template <typename T>
struct U
{
- #pragma omp declare reduction (bar: T: omp_out.s *= omp_in.s) // { dg-error "with" }
+ #pragma omp declare reduction (bar: T: omp_out.s *= omp_in.s) // { dg-message "previous" }
#pragma omp declare reduction (bar: T: omp_out.s += omp_in.s) // { dg-error "cannot be overloaded" }
};
U<S> u;
@@ -159,9 +159,9 @@ namespace N6
{
typedef V V2;
#pragma omp declare reduction (bar: T: omp_out.t += omp_in.t)
- #pragma omp declare reduction (bar: V: omp_out.s *= omp_in.s) // { dg-error "with" }
+ #pragma omp declare reduction (bar: V: omp_out.s *= omp_in.s) // { dg-message "previous" }
#pragma omp declare reduction (bar: V2: omp_out.s += omp_in.s) // { dg-error "cannot be overloaded" }
- #pragma omp declare reduction (bar: long: omp_out += omp_in) // { dg-error "with" }
+ #pragma omp declare reduction (bar: long: omp_out += omp_in) // { dg-message "previous" }
#pragma omp declare reduction (bar: long int: omp_out += omp_in) // { dg-error "cannot be overloaded" }
#pragma omp declare reduction (bar: short unsigned: omp_out += omp_in)
#pragma omp declare reduction (bar: short int: omp_out += omp_in)
Index: testsuite/g++.dg/overload/error1.C
===================================================================
--- testsuite/g++.dg/overload/error1.C (revision 248244)
+++ testsuite/g++.dg/overload/error1.C (working copy)
@@ -2,6 +2,6 @@
struct S
{
- void f () {} // { dg-error "with" }
+ void f () {} // { dg-message "previous" }
int f () { return 0; } // { dg-error "overloaded" }
};
Index: testsuite/g++.dg/overload/error2.C
===================================================================
--- testsuite/g++.dg/overload/error2.C (revision 248244)
+++ testsuite/g++.dg/overload/error2.C (working copy)
@@ -6,6 +6,6 @@
struct A
{
- void foo(); // { dg-error "with" }
+ void foo(); // { dg-message "previous" }
virtual void foo(); // { dg-error "cannot be overloaded" }
};
Index: testsuite/g++.dg/template/duplicate1.C
===================================================================
--- testsuite/g++.dg/template/duplicate1.C (revision 248244)
+++ testsuite/g++.dg/template/duplicate1.C (working copy)
@@ -2,6 +2,6 @@
template<int> struct A
{
- ~A() {} // { dg-error "with" }
+ ~A() {} // { dg-message "previous" }
~A() {} // { dg-error "cannot be overloaded" }
};
Index: testsuite/g++.old-deja/g++.benjamin/warn02.C
===================================================================
--- testsuite/g++.old-deja/g++.benjamin/warn02.C (revision 248244)
+++ testsuite/g++.old-deja/g++.benjamin/warn02.C (working copy)
@@ -31,7 +31,7 @@ class C
class D
{
public:
- int foo2() {return b;} // { dg-error "with" }
+ int foo2() {return b;} // { dg-message "previous" }
int foo2() {return b;} // { dg-error "overloaded" }
int b;
};
@@ -39,7 +39,7 @@ class D
class E
{
public:
- int foo2(); // { dg-error "with" }
+ int foo2(); // { dg-message "previous" }
int foo2(); // { dg-error "overloaded" }
int b;
};
Index: testsuite/g++.old-deja/g++.brendan/arm2.C
===================================================================
--- testsuite/g++.old-deja/g++.brendan/arm2.C (revision 248244)
+++ testsuite/g++.old-deja/g++.brendan/arm2.C (working copy)
@@ -8,12 +8,12 @@
class X {
public:
- int foo(); // { dg-error "with" }
+ int foo(); // { dg-message "previous" }
static int foo(); // error: redeclaration// { dg-error "overloaded" } .*
};
class Y {
public:
- static int foo(); // { dg-error "with" }
+ static int foo(); // { dg-message "previous" }
int foo(); // error: redeclaration// { dg-error "overloaded" } .*
};
Index: testsuite/g++.old-deja/g++.other/redecl2.C
===================================================================
--- testsuite/g++.old-deja/g++.other/redecl2.C (revision 248244)
+++ testsuite/g++.old-deja/g++.other/redecl2.C (working copy)
@@ -1,9 +1,9 @@
// { dg-do assemble }
struct S {
- S(int); // { dg-error "with" }
+ S(int); // { dg-message "previous" }
S(int); // { dg-error "overloaded" } already declared
- ~S();// { dg-error "with" }
+ ~S();// { dg-message "previous" }
~S(); // { dg-error "overloaded" } already declared
};
Index: testsuite/g++.old-deja/g++.other/redecl4.C
===================================================================
--- testsuite/g++.old-deja/g++.other/redecl4.C (revision 248244)
+++ testsuite/g++.old-deja/g++.other/redecl4.C (working copy)
@@ -1,7 +1,7 @@
// { dg-do assemble }
int main() {
struct A {
- void f(); // { dg-error "with" } already declared
+ void f(); // { dg-message "previous" } already declared
void f(); // { dg-error "overloaded" } already declared
};
}
Index: testsuite/g++.old-deja/g++.pt/memtemp78.C
===================================================================
--- testsuite/g++.old-deja/g++.pt/memtemp78.C (revision 248244)
+++ testsuite/g++.old-deja/g++.pt/memtemp78.C (working copy)
@@ -23,7 +23,7 @@ template struct B<int>;
struct C
{
template <class U>
- void f() {} // { dg-error "with" } redeclaration
+ void f() {} // { dg-message "previous" } redeclaration
template <class U>
void f() {} // { dg-error "overloaded" } redeclaration
@@ -42,7 +42,7 @@ template struct D<int, double>;
template <class T, class U>
struct D2
{
- void f(T); // { dg-error "with" } redeclaration
+ void f(T); // { dg-message "previous" } redeclaration
void f(U); // { dg-error "overloaded" } redeclaration
};
@@ -50,7 +50,7 @@ template struct D2<int, int>;
struct E
{
- void f(); // { dg-error "with" } redeclaration
+ void f(); // { dg-message "previous" } redeclaration
void f(); // { dg-error "overloaded" } redeclaration
};
next reply other threads:[~2017-05-19 16:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-19 16:15 Paolo Carlini [this message]
2017-06-29 8:56 ` Paolo Carlini
2017-06-29 21:46 ` Jason Merrill
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8407427e-d71a-e7ab-80b4-c43241044918@oracle.com \
--to=paolo.carlini@oracle.com \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).