[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-07-15 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #23 from Jonathan Wakely redi at gcc dot gnu.org 2012-07-15 
15:07:25 UTC ---
(In reply to comment #22)
 Can one of you please add a note to gcc-4.7/changes.html to reflect
 the ABI changes between 4.7.1 and 4.7.2?  Thanks.

Done: http://gcc.gnu.org/ml/gcc-patches/2012-07/msg00584.html


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-07-13 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|ASSIGNED|RESOLVED
 Resolution||FIXED

--- Comment #17 from paolo at gcc dot gnu.org paolo at gcc dot gnu.org 
2012-07-13 09:00:05 UTC ---
Author: paolo
Date: Fri Jul 13 08:59:58 2012
New Revision: 189456

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=189456
Log:
2012-07-13  Paolo Carlini  paolo.carl...@oracle.com

PR libstdc++/53657
* include/bits/stl_pair.h (pair::pair(pair)): Declare defaulted,
per C++11.
* include/bits/stl_map.h (map::insert(_Pair), map::insert
(const_iterator, _Pair)): Constrain with std::is_constructible,
per LWG2005.
* include/bits/stl_multimap.h (multimap::insert(_Pair),
multimap::insert(const_iterator, _Pair)): Likewise.
* include/bits/hashtable_policy.h (_Insert::insert(_Pair),
_Insert::insert(const_iterator, _Pair)): Likewise.
* include/debug/unordered_map: Adjust.
* include/debug/map.h: Likewise.
* include/debug/multimap.h: Likewise.
* include/profile/unordered_map: Likewise.
* include/profile/map.h: Likewise.
* include/profile/multimap.h: Likewise.


Modified:
trunk/libstdc++-v3/ChangeLog
trunk/libstdc++-v3/include/bits/hashtable_policy.h
trunk/libstdc++-v3/include/bits/stl_map.h
trunk/libstdc++-v3/include/bits/stl_multimap.h
trunk/libstdc++-v3/include/bits/stl_pair.h
trunk/libstdc++-v3/include/debug/map.h
trunk/libstdc++-v3/include/debug/multimap.h
trunk/libstdc++-v3/include/debug/unordered_map
trunk/libstdc++-v3/include/profile/map.h
trunk/libstdc++-v3/include/profile/multimap.h
trunk/libstdc++-v3/include/profile/unordered_map

--- Comment #18 from paolo at gcc dot gnu.org paolo at gcc dot gnu.org 
2012-07-13 09:00:24 UTC ---
Author: paolo
Date: Fri Jul 13 09:00:18 2012
New Revision: 189457

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=189457
Log:
2012-07-13  Paolo Carlini  paolo.carl...@oracle.com

PR libstdc++/53657
* include/bits/stl_pair.h (pair::pair(pair)): Declare defaulted,
per C++11.
* include/bits/stl_map.h (map::insert(_Pair), map::insert
(const_iterator, _Pair)): Constrain with std::is_constructible,
per LWG2005.
* include/bits/stl_multimap.h (multimap::insert(_Pair),
multimap::insert(const_iterator, _Pair)): Likewise.
* include/bits/hashtable.h (_Hashtable::insert(_Pair),
_Hashtable::insert(const_iterator, _Pair)): Likewise.
* include/debug/unordered_map: Adjust.
* include/debug/map.h: Likewise.
* include/debug/multimap.h: Likewise.
* include/profile/unordered_map: Likewise.
* include/profile/map.h: Likewise.
* include/profile/multimap.h: Likewise.


Modified:
branches/gcc-4_7-branch/libstdc++-v3/ChangeLog
branches/gcc-4_7-branch/libstdc++-v3/include/bits/hashtable.h
branches/gcc-4_7-branch/libstdc++-v3/include/bits/stl_map.h
branches/gcc-4_7-branch/libstdc++-v3/include/bits/stl_multimap.h
branches/gcc-4_7-branch/libstdc++-v3/include/bits/stl_pair.h
branches/gcc-4_7-branch/libstdc++-v3/include/debug/map.h
branches/gcc-4_7-branch/libstdc++-v3/include/debug/multimap.h
branches/gcc-4_7-branch/libstdc++-v3/include/debug/unordered_map
branches/gcc-4_7-branch/libstdc++-v3/include/profile/map.h
branches/gcc-4_7-branch/libstdc++-v3/include/profile/multimap.h
branches/gcc-4_7-branch/libstdc++-v3/include/profile/unordered_map

--- Comment #19 from Paolo Carlini paolo.carlini at oracle dot com 2012-07-13 
09:04:33 UTC ---
Fixed mainline and 4.7.2.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-07-13 Thread bkoz at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Benjamin Kosnik bkoz at gcc dot gnu.org changed:

   What|Removed |Added

 CC||bkoz at gcc dot gnu.org

--- Comment #20 from Benjamin Kosnik bkoz at gcc dot gnu.org 2012-07-13 
12:38:03 UTC ---

Thanks Paolo and Jonathan and Jason, this looks ready to go from an ABI
standpoint for 4.7.2.

Paolo, do we need to add any of the testcases in this PR to track regressions
here? Or at least make this less fragile as FE/lib changes going forward?


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-07-13 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #21 from Paolo Carlini paolo.carlini at oracle dot com 2012-07-13 
12:43:31 UTC ---
I think that if something regresses we immediately see regressions in the v3
testsuite (Comment 5 is distilled from it).


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-07-13 Thread rguenther at suse dot de
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #22 from rguenther at suse dot de rguenther at suse dot de 
2012-07-13 12:53:51 UTC ---
On Fri, 13 Jul 2012, paolo.carlini at oracle dot com wrote:

 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657
 
 --- Comment #21 from Paolo Carlini paolo.carlini at oracle dot com 
 2012-07-13 12:43:31 UTC ---
 I think that if something regresses we immediately see regressions in the v3
 testsuite (Comment 5 is distilled from it).

Can one of you please add a note to gcc-4.7/changes.html to reflect
the ABI changes between 4.7.1 and 4.7.2?  Thanks.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 CC||jwakely.gcc at gmail dot
   ||com

--- Comment #9 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-20 
15:04:11 UTC ---
If I do the straightforward change (pair(pair) defaulted + insert(_Pair)
using is_constructible), there are problems in the testsuite for situations
well exemplified by 23_containers/unordered_map/insert/map_range.cc (many
instances in the exception/ testcases too and elsewhere, but hidden below a lot
of templates, grrr): the defaulted pair move constructor is implicitly deleted
and the testcase doesn't compile. Is that expected and the testcase defective?
Maybe yes. We have things like:

  typedef std::pairconst std::string, int Pair;

  Pair A = Pair(red, 5);

if I remove the const from Pair it works.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread daniel.kruegler at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #10 from Daniel Krügler daniel.kruegler at googlemail dot com 
2012-06-20 15:10:16 UTC ---
(In reply to comment #9)
Yes, this is to be expected, because gcc currently does not implement

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1402

I think fixing that issue depends on that DR (Sorry, I forgot to mention that
in my private communication to you).


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #11 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-20 
15:15:46 UTC ---
Ah, thanks Daniel. Thus I guess we should do this change and then also
implement core/1402 ASAP, because otherwise in many circumstances the users
would not be that happy. Are you willing to open a GCC Bugzilla with Jason too
in CC about core/1402 and referring to this one?


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #12 from Jonathan Wakely redi at gcc dot gnu.org 2012-06-20 
15:20:29 UTC ---
Possibly a front end bug, not sure.

Here's a reduced form that G++ rejects, Clang accepts:

templatetypename T
struct pair
{
constexpr pair(const pair) = default;
pair(pair) = default;

pair() : t() { }

T t;
};

struct string {
string(const string) { }
string(string) = default;
string() = default;
};

int main()
{
typedef pairconst string P;
P p[] = { P(), P() };
}


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #13 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-20 
15:23:06 UTC ---
By the way, the more I look into this issue the more I come to the conclusion
that making sure pair(pair) is defaulted (which has ABI implications) means
doing quite a number of non-trivial changes both in lib and front-end beyond
the letter of C++11. I vaguely knew that for a while, guys...

To good news is that defaulting + insert(Pair) using is_constructible + DR
1402 in the front-end should lead to a clean library testsuite, I don't see any
other issues when regression testing the first 2 items.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #14 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-20 
15:26:06 UTC ---
Thanks for the no-include testcase Jon. Thus are we talking about the core
defect mentioned by Daniel? Should move this discussion to a C++ issue.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread daniel.kruegler at googlemail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #14 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-20 
15:26:06 UTC ---
Thanks for the no-include testcase Jon. Thus are we talking about the core
defect mentioned by Daniel? Should move this discussion to a C++ issue.

--- Comment #15 from Daniel Krügler daniel.kruegler at googlemail dot com 
2012-06-20 15:26:52 UTC ---
(In reply to comment #11)
 Are you willing to open a GCC Bugzilla with Jason too
 in CC about core/1402 and referring to this one?

Yes, I do that this evening.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-20 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

--- Comment #16 from Jonathan Wakely redi at gcc dot gnu.org 2012-06-20 
15:30:39 UTC ---
(In reply to comment #14)
 Thanks for the no-include testcase Jon. Thus are we talking about the core
 defect mentioned by Daniel? Should move this discussion to a C++ issue.

Yes, same issue, I'd just written it before I saw the replies and got a mid-air
collision, so I hit submit only my new comment.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-19 Thread paolo.carlini at oracle dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Paolo Carlini paolo.carlini at oracle dot com changed:

   What|Removed |Added

 Status|NEW |ASSIGNED
 CC|jason at gcc dot gnu.org,   |
   |paolo.carlini at oracle dot |
   |com |
 AssignedTo|unassigned at gcc dot   |paolo.carlini at oracle dot
   |gnu.org |com

--- Comment #8 from Paolo Carlini paolo.carlini at oracle dot com 2012-06-19 
09:30:00 UTC ---
Ah, great, Daniel pointed out in private mail that the latest update of LWG
2005 indeed specifies is_constructible as I seemed to remember:

  http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2005


[Bug libstdc++/53657] [4.7/4.8 Regression][C++11] pair(pair) move constructor is non-trivial

2012-06-14 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Richard Guenther rguenth at gcc dot gnu.org changed:

   What|Removed |Added

  Known to work||4.5.1, 4.6.0
   Target Milestone|--- |4.7.2
Summary|[C++11] pair(pair) move   |[4.7/4.8 Regression][C++11]
   |constructor is non-trivial  |pair(pair) move
   ||constructor is non-trivial
  Known to fail||4.5.0

--- Comment #4 from Richard Guenther rguenth at gcc dot gnu.org 2012-06-14 
09:39:58 UTC ---
Thanks.


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-14 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

  Known to work||4.5.1, 4.6.1
   Target Milestone|--- |4.7.2
Summary|[C++11] pair(pair) move   |[4.7/4.8 Regression]
   |constructor is non-trivial  |[C++11] pair(pair) move
   ||constructor is non-trivial
  Known to fail||4.5.0


[Bug libstdc++/53657] [4.7/4.8 Regression] [C++11] pair(pair) move constructor is non-trivial

2012-06-14 Thread redi at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53657

Jonathan Wakely redi at gcc dot gnu.org changed:

   What|Removed |Added

 CC||org.gnu.gcc.bugtracker at
   ||sotecware dot net

--- Comment #7 from Jonathan Wakely redi at gcc dot gnu.org 2012-06-14 
13:15:30 UTC ---
*** Bug 53455 has been marked as a duplicate of this bug. ***