This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/52311] implicitly_declare_fn: valgrind problem
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Sun, 19 Feb 2012 19:48:39 +0000
- Subject: [Bug c++/52311] implicitly_declare_fn: valgrind problem
- Auto-submitted: auto-generated
- References: <bug-52311-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52311
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2012-02-19
CC| |jakub at gcc dot gnu.org,
| |jason at gcc dot gnu.org
Target Milestone|--- |4.7.0
Ever Confirmed|0 |1
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-02-19 19:48:39 UTC ---
In the
if (LAMBDA_TYPE_P (ctype)
&& (sfk == sfk_constructor
|| sfk == sfk_copy_assignment))
{
*deleted_p = true;
return;
}
case synthesized_method_walk doesn't initialize *trivial_p and *constexpr_p.
While the caller clears constexpr_p in that case:
/* Don't bother marking a deleted constructor as constexpr. */
if (deleted_p)
constexpr_p = false;
...
it doesn't clear trivial_p (nor set) and uses it in:
if (!trivial_p && type_has_trivial_fn (type, kind))
type_set_nontrivial_flag (type, kind);
So, to fix this, either synthesized_method_walk should in that case initialize
*trivial_p (either to false or true, or conditionally, depending on what is
right), or the caller should do the same (can it do it for all deleted_p types,
not just the lambda ctors/copyctors?), or the if (!trivial_p && should also
guarded with !deleted_p.
Jason?