From 3968f33b6542cf20cf63cf49bfbc033bd2486295 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 12 Jun 2011 20:56:57 -0700 Subject: gcc-4.6.0: Bring in patches from FSF 4.6 branch This brings in new patches from 4.6 release branch updates the comment section of existing branch to not contain patch numbers. Tested build on qemu for arm ppc mips x86 and x86_64 Signed-off-by: Khem Raj --- .../gcc-4_6-branch-backports/0324-PR-c-49105.patch | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0324-PR-c-49105.patch (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0324-PR-c-49105.patch') diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0324-PR-c-49105.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0324-PR-c-49105.patch new file mode 100644 index 000000000..895fc54ae --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0324-PR-c-49105.patch @@ -0,0 +1,75 @@ +From 64c58ffe439f284f8ff22900f2bbd4923e92d835 Mon Sep 17 00:00:00 2001 +From: jason +Date: Wed, 25 May 2011 01:08:38 +0000 +Subject: [PATCH] PR c++/49105 + * typeck.c (build_const_cast_1): Handle rvalue references. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174162 138bc75d-0d04-0410-961f-82ee72b054a4 + +index 9a81ea5..578eb83 100644 +--- a/gcc/cp/typeck.c ++++ b/gcc/cp/typeck.c +@@ -6220,14 +6220,29 @@ build_const_cast_1 (tree dst_type, tree expr, bool complain, + + /* [expr.const.cast] + +- An lvalue of type T1 can be explicitly converted to an lvalue of +- type T2 using the cast const_cast (where T1 and T2 are object +- types) if a pointer to T1 can be explicitly converted to the type +- pointer to T2 using a const_cast. */ ++ For two object types T1 and T2, if a pointer to T1 can be explicitly ++ converted to the type "pointer to T2" using a const_cast, then the ++ following conversions can also be made: ++ ++ -- an lvalue of type T1 can be explicitly converted to an lvalue of ++ type T2 using the cast const_cast; ++ ++ -- a glvalue of type T1 can be explicitly converted to an xvalue of ++ type T2 using the cast const_cast; and ++ ++ -- if T1 is a class type, a prvalue of type T1 can be explicitly ++ converted to an xvalue of type T2 using the cast const_cast. */ ++ + if (TREE_CODE (dst_type) == REFERENCE_TYPE) + { + reference_type = dst_type; +- if (! real_lvalue_p (expr)) ++ if (!TYPE_REF_IS_RVALUE (dst_type) ++ ? real_lvalue_p (expr) ++ : (CLASS_TYPE_P (TREE_TYPE (dst_type)) ++ ? lvalue_p (expr) ++ : lvalue_or_rvalue_with_address_p (expr))) ++ /* OK. */; ++ else + { + if (complain) + error ("invalid const_cast of an rvalue of type %qT to type %qT", +new file mode 100644 +index 0000000..94ee4ca +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp0x/rv-cast2.C +@@ -0,0 +1,21 @@ ++// Test for const_cast to reference (5.2.11/4). ++// { dg-options -std=c++0x } ++ ++template T&& xval(); ++template T& lval(); ++template T prval(); ++ ++struct A { }; ++ ++int main() ++{ ++ const_cast(lval()); ++ const_cast(xval()); // { dg-error "" } ++ const_cast(prval()); // { dg-error "" } ++ const_cast(lval()); ++ const_cast(xval()); ++ const_cast(prval()); // { dg-error "" } ++ const_cast(lval()); ++ const_cast(xval()); ++ const_cast(prval()); ++} +-- +1.7.0.4 + -- cgit v1.2.3