This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] PR libstdc++/85843 fix "should be explicitly initialized" warnings
- From: Jason Merrill <jason at redhat dot com>
- To: Jonathan Wakely <jwakely at redhat dot com>
- Cc: "libstdc++" <libstdc++ at gcc dot gnu dot org>, gcc-patches List <gcc-patches at gcc dot gnu dot org>
- Date: Sun, 20 May 2018 23:52:20 -0400
- Subject: Re: [PATCH] PR libstdc++/85843 fix "should be explicitly initialized" warnings
- References: <20180520235002.GA30361@redhat.com>
On Sun, May 20, 2018 at 7:50 PM, Jonathan Wakely <jwakely@redhat.com> wrote:
> PR libstdc++/85843
> * src/c++11/cow-stdexcept.cc (logic_error, runtime_error): Explicitly
> initialize base class to avoid warnings.
And this patch fixes the warning to treat defaulted constructors the
same as implicitly-declared constructors.
Tested x86_64-pc-linux-gnu, applying to trunk.
commit b4bb335521d3993cc3fac3295d0461c376d52907
Author: Jason Merrill <jason@redhat.com>
Date: Sun May 20 22:26:04 2018 -0400
PR libstdc++/85843 - warning in logic_error copy constructor.
* class.c (type_has_user_nondefault_constructor): Check for a
user-provided ctor, not user-declared.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 4960b4b5593..a9a0fa92727 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4884,7 +4884,7 @@ default_ctor_p (tree fn)
&& sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
}
-/* Returns true iff class T has a user-defined constructor that can be called
+/* Returns true iff class T has a user-provided constructor that can be called
with more than zero arguments. */
bool
@@ -4896,7 +4896,7 @@ type_has_user_nondefault_constructor (tree t)
for (ovl_iterator iter (CLASSTYPE_CONSTRUCTORS (t)); iter; ++iter)
{
tree fn = *iter;
- if (!DECL_ARTIFICIAL (fn)
+ if (user_provided_p (fn)
&& (TREE_CODE (fn) == TEMPLATE_DECL
|| (skip_artificial_parms_for (fn, DECL_ARGUMENTS (fn))
!= NULL_TREE)))
diff --git a/gcc/testsuite/g++.dg/warn/Wextra-4.C b/gcc/testsuite/g++.dg/warn/Wextra-4.C
new file mode 100644
index 00000000000..5c33c271154
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wextra-4.C
@@ -0,0 +1,15 @@
+// PR libstdc++/85843
+// { dg-do compile { target c++11 } }
+// { dg-additional-options -Wextra }
+
+struct A
+{
+ A();
+ A(const A&) = default;
+};
+
+struct B : A
+{
+ B(): A() { }
+ B(const B&) { }
+};