| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib/target-supports.exp (check_effective_target_c++11): Now
means C++11 and up.
(check_effective_target_c++11_only): New.
(check_effective_target_c++11_down): New.
(check_effective_target_c++1y): New.
(check_effective_target_c++1y_only): New.
(check_effective_target_c++98_only): Rename from
check_effective_target_c++98.
* g++.dg/*: Use { target c++11 } instead of -std=c++11.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208416 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
|
|
| |
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203939 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
DR 1082
* class.c (type_has_user_declared_move_constructor): New.
(type_has_user_declared_move_assign): New.
(add_implicitly_declared_members): Add lazy copy ops
even if there's a move.
* method.c (lazily_declare_fn): Delete implicit copies
if there's a move.
(maybe_explain_implicit_delete): Explain this. Use inform rather
than error.
* cp-tree.h: Declare new fns.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180159 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
gcc/cp/
* class.c (add_implicitly_declared_members): A class with no
explicitly declared copy or move constructor gets both declared
implicitly, and similarly for operator=.
(check_bases): A type with no copy ctor does not inhibit
a const copy ctor in a derived class.
(check_field_decl): Likewise.
(check_bases_and_members): A nonexistent copy ctor/op= is non-trivial.
* tree.c (type_has_nontrivial_copy_init): Adjust semantics.
(trivially_copyable_p): Likewise.
* call.c (convert_like_real): Use type_has_nontrivial_copy_init.
* class.c (finish_struct_bits): Likewise.
* tree.c (build_target_expr_with_type): Likewise.
* typeck2.c (store_init_value): Likewise.
libstdc++-v3/
* include/bits/unordered_map.h: Explicitly default copy constructors.
* include/bits/unordered_set.h: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161582 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
|
|
|
|
| |
* call.c (build_over_call): Don't do bitwise copy for move ctor.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159508 138bc75d-0d04-0410-961f-82ee72b054a4
|
|
===================================================================
--- testsuite/g++.dg/cpp0x/pr33996.C (revision 0)
+++ testsuite/g++.dg/cpp0x/pr33996.C (revision 0)
@@ -0,0 +1,52 @@
+// { dg-options "-std=c++0x" }
+
+#define BUG
+struct type
+{
+ type() { }
+ type(const type&) { }
+
+private:
+ type(type&&);
+};
+
+template<typename _Tp>
+ struct identity
+ {
+ typedef _Tp type;
+ };
+
+template<typename _Tp>
+ inline _Tp&&
+ forward(typename identity<_Tp>::type&& __t)
+ { return __t; }
+
+struct vec
+{
+ template<typename _Args>
+ void
+ bar(_Args&& __args)
+#ifdef BUG
+ ;
+#else
+ {
+ type(forward<_Args>(__args));
+ }
+#endif
+};
+
+#ifdef BUG
+template<typename _Args>
+ void
+ vec::bar(_Args&& __args)
+ {
+ type(forward<_Args>(__args));
+ }
+#endif
+
+int main()
+{
+ vec v;
+ type c;
+ v.bar(c);
+}
Index: testsuite/g++.dg/cpp0x/rv-trivial-bug.C
===================================================================
--- testsuite/g++.dg/cpp0x/rv-trivial-bug.C (revision 0)
+++ testsuite/g++.dg/cpp0x/rv-trivial-bug.C (revision 0)
@@ -0,0 +1,33 @@
+// { dg-do "run" }
+// { dg-options "-std=c++0x" }
+// PR c++/33235
+#include <cassert>
+
+int move_construct = 0;
+int move_assign = 0;
+
+struct base2
+{
+ base2() {}
+ base2(base2&&) {++move_construct;}
+ base2& operator=(base2&&) {++move_assign; return *this;}
+};
+
+int test2()
+{
+ base2 b;
+ base2 b2(b);
+ assert(move_construct == 0);
+ base2 b3(static_cast<base2&&>(b));
+ assert(move_construct == 1);
+ b = b2;
+ assert(move_assign == 0);
+ b = static_cast<base2&&>(b2);
+ assert(move_assign == 1);
+}
+
+int main()
+{
+ test2();
+ return 0;
+}
Index: testsuite/g++.dg/cpp0x/pr33930.C
===================================================================
--- testsuite/g++.dg/cpp0x/pr33930.C (revision 0)
+++ testsuite/g++.dg/cpp0x/pr33930.C (revision 0)
@@ -0,0 +1,10 @@
+// { dg-options "-std=c++0x" }
+typedef const int* type;
+
+float& foo( const type& ggg );
+int& foo( type&& ggg );
+
+void bar( int* someptr )
+{
+ int& x = foo( someptr );
+}
Index: cp/typeck.c
===================================================================
--- cp/typeck.c (revision 129899)
+++ cp/typeck.c (working copy)
@@ -620,7 +620,7 @@ merge_types (tree t1, tree t2)
if (code1 == POINTER_TYPE)
t1 = build_pointer_type (target);
else
- t1 = build_reference_type (target);
+ t1 = cp_build_reference_type (target, TYPE_REF_IS_RVALUE (t1));
t1 = build_type_attribute_variant (t1, attributes);
t1 = cp_build_qualified_type (t1, quals);
Index: cp/call.c
===================================================================
--- cp/call.c (revision 129899)
+++ cp/call.c (working copy)
@@ -5076,7 +5076,8 @@ build_over_call (struct z_candidate *can
return build_target_expr_with_type (arg, DECL_CONTEXT (fn));
}
else if (TREE_CODE (arg) == TARGET_EXPR
- || TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)))
+ || (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))
+ && !move_fn_p (fn)))
{
tree to = stabilize_reference
(build_indirect_ref (TREE_VALUE (args), 0));
@@ -6118,7 +6119,11 @@ compare_ics (conversion *ics1, conversio
if (ics1->kind == ck_qual
&& ics2->kind == ck_qual
&& same_type_p (from_type1, from_type2))
- return comp_cv_qual_signature (to_type1, to_type2);
+ {
+ int result = comp_cv_qual_signature (to_type1, to_type2);
+ if (result != 0)
+ return result;
+ }
/* [over.ics.rank]
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@129905 138bc75d-0d04-0410-961f-82ee72b054a4
|