diff options
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0347-PR-c-45401.patch')
-rw-r--r-- | meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0347-PR-c-45401.patch | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0347-PR-c-45401.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0347-PR-c-45401.patch new file mode 100644 index 000000000..eaf6921b5 --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0347-PR-c-45401.patch @@ -0,0 +1,51 @@ +From 6674aae1e1421a2d600bf9d0a1e501873a88b8f6 Mon Sep 17 00:00:00 2001 +From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> +Date: Thu, 26 May 2011 03:06:09 +0000 +Subject: [PATCH] PR c++/45401 + * decl.c (grokdeclarator): Don't change type when adding rvalue ref + to another reference type. + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174260 138bc75d-0d04-0410-961f-82ee72b054a4 + +index de53541..b3de096 100644 +--- a/gcc/cp/decl.c ++++ b/gcc/cp/decl.c +@@ -9017,13 +9017,18 @@ grokdeclarator (const cp_declarator *declarator, + to create the type "rvalue reference to cv TD' creates the + type TD." + */ +- if (!VOID_TYPE_P (type)) ++ if (VOID_TYPE_P (type)) ++ /* We already gave an error. */; ++ else if (TREE_CODE (type) == REFERENCE_TYPE) ++ { ++ if (declarator->u.reference.rvalue_ref) ++ /* Leave type alone. */; ++ else ++ type = cp_build_reference_type (TREE_TYPE (type), false); ++ } ++ else + type = cp_build_reference_type +- ((TREE_CODE (type) == REFERENCE_TYPE +- ? TREE_TYPE (type) : type), +- (declarator->u.reference.rvalue_ref +- && (TREE_CODE(type) != REFERENCE_TYPE +- || TYPE_REF_IS_RVALUE (type)))); ++ (type, declarator->u.reference.rvalue_ref); + + /* In C++0x, we need this check for direct reference to + reference declarations, which are forbidden by +new file mode 100644 +index 0000000..569ee5b +--- /dev/null ++++ b/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C +@@ -0,0 +1,6 @@ ++// PR c++/45401 ++// { dg-options -std=c++0x } ++ ++typedef int &__restrict restrictLvref; ++typedef restrictLvref &&rvrefToRestrictLvref; ++typedef restrictLvref rvrefToRestrictLvref; +-- +1.7.0.4 + |