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 0000000000..eaf6921b52 --- /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 @@ | |||
1 | From 6674aae1e1421a2d600bf9d0a1e501873a88b8f6 Mon Sep 17 00:00:00 2001 | ||
2 | From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4> | ||
3 | Date: Thu, 26 May 2011 03:06:09 +0000 | ||
4 | Subject: [PATCH] PR c++/45401 | ||
5 | * decl.c (grokdeclarator): Don't change type when adding rvalue ref | ||
6 | to another reference type. | ||
7 | |||
8 | git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@174260 138bc75d-0d04-0410-961f-82ee72b054a4 | ||
9 | |||
10 | index de53541..b3de096 100644 | ||
11 | --- a/gcc/cp/decl.c | ||
12 | +++ b/gcc/cp/decl.c | ||
13 | @@ -9017,13 +9017,18 @@ grokdeclarator (const cp_declarator *declarator, | ||
14 | to create the type "rvalue reference to cv TD' creates the | ||
15 | type TD." | ||
16 | */ | ||
17 | - if (!VOID_TYPE_P (type)) | ||
18 | + if (VOID_TYPE_P (type)) | ||
19 | + /* We already gave an error. */; | ||
20 | + else if (TREE_CODE (type) == REFERENCE_TYPE) | ||
21 | + { | ||
22 | + if (declarator->u.reference.rvalue_ref) | ||
23 | + /* Leave type alone. */; | ||
24 | + else | ||
25 | + type = cp_build_reference_type (TREE_TYPE (type), false); | ||
26 | + } | ||
27 | + else | ||
28 | type = cp_build_reference_type | ||
29 | - ((TREE_CODE (type) == REFERENCE_TYPE | ||
30 | - ? TREE_TYPE (type) : type), | ||
31 | - (declarator->u.reference.rvalue_ref | ||
32 | - && (TREE_CODE(type) != REFERENCE_TYPE | ||
33 | - || TYPE_REF_IS_RVALUE (type)))); | ||
34 | + (type, declarator->u.reference.rvalue_ref); | ||
35 | |||
36 | /* In C++0x, we need this check for direct reference to | ||
37 | reference declarations, which are forbidden by | ||
38 | new file mode 100644 | ||
39 | index 0000000..569ee5b | ||
40 | --- /dev/null | ||
41 | +++ b/gcc/testsuite/g++.dg/cpp0x/rv-restrict.C | ||
42 | @@ -0,0 +1,6 @@ | ||
43 | +// PR c++/45401 | ||
44 | +// { dg-options -std=c++0x } | ||
45 | + | ||
46 | +typedef int &__restrict restrictLvref; | ||
47 | +typedef restrictLvref &&rvrefToRestrictLvref; | ||
48 | +typedef restrictLvref rvrefToRestrictLvref; | ||
49 | -- | ||
50 | 1.7.0.4 | ||
51 | |||