summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch116
1 files changed, 0 insertions, 116 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch
deleted file mode 100644
index c047fbfd0..000000000
--- a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0114-PR-c-48570.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-From 235c1ad4230b29a189d4300841c4d8c3dd144388 Mon Sep 17 00:00:00 2001
-From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Wed, 13 Apr 2011 15:47:40 +0000
-Subject: [PATCH] PR c++/48570
- * semantics.c (cxx_eval_array_reference): Handle reading from
- wchar_t, char16_t and char32_t STRING_CST.
-
- * g++.dg/cpp0x/constexpr-wstring1.C: New test.
- * g++.dg/cpp0x/constexpr-wstring2.C: New test.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172378 138bc75d-0d04-0410-961f-82ee72b054a4
-
-index e6bb1dc..cf8d329 100644
---- a/gcc/cp/semantics.c
-+++ b/gcc/cp/semantics.c
-@@ -6279,7 +6279,7 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
- non_constant_p);
- tree index, oldidx;
- HOST_WIDE_INT i;
-- unsigned len;
-+ unsigned len, elem_nchars = 1;
- if (*non_constant_p)
- return t;
- oldidx = TREE_OPERAND (t, 1);
-@@ -6291,9 +6291,14 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
- return t;
- else if (addr)
- return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
-- len = (TREE_CODE (ary) == CONSTRUCTOR
-- ? CONSTRUCTOR_NELTS (ary)
-- : (unsigned)TREE_STRING_LENGTH (ary));
-+ if (TREE_CODE (ary) == CONSTRUCTOR)
-+ len = CONSTRUCTOR_NELTS (ary);
-+ else
-+ {
-+ elem_nchars = (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (ary)))
-+ / TYPE_PRECISION (char_type_node));
-+ len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
-+ }
- if (compare_tree_int (index, len) >= 0)
- {
- if (!allow_non_constant)
-@@ -6304,9 +6309,16 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
- i = tree_low_cst (index, 0);
- if (TREE_CODE (ary) == CONSTRUCTOR)
- return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
-- else
-+ else if (elem_nchars == 1)
- return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
- TREE_STRING_POINTER (ary)[i]);
-+ else
-+ {
-+ tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
-+ return native_interpret_expr (type, (const unsigned char *)
-+ TREE_STRING_POINTER (ary)
-+ + i * elem_nchars, elem_nchars);
-+ }
- /* Don't VERIFY_CONSTANT here. */
- }
-
-new file mode 100644
-index 0000000..059977b
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C
-@@ -0,0 +1,34 @@
-+// PR c++/48570
-+// { dg-do run }
-+// { dg-options "-std=c++0x" }
-+
-+extern "C" void abort ();
-+constexpr wchar_t foo (int i) { return L"0123"[i]; }
-+constexpr char16_t bar (int i) { return u"0123"[i]; }
-+constexpr char32_t baz (int i) { return U"0123"[i]; }
-+const wchar_t foo0 = foo (0);
-+const wchar_t foo1 = foo (1);
-+const wchar_t foo2 = foo (2);
-+const wchar_t foo3 = foo (3);
-+const wchar_t foo4 = foo (4);
-+const char16_t bar0 = bar (0);
-+const char16_t bar1 = bar (1);
-+const char16_t bar2 = bar (2);
-+const char16_t bar3 = bar (3);
-+const char16_t bar4 = bar (4);
-+const char32_t baz0 = baz (0);
-+const char32_t baz1 = baz (1);
-+const char32_t baz2 = baz (2);
-+const char32_t baz3 = baz (3);
-+const char32_t baz4 = baz (4);
-+
-+int
-+main ()
-+{
-+ if (foo0 != L'0' || foo1 != L'1' || foo2 != L'2' || foo3 != L'3' || foo4 != L'\0')
-+ abort ();
-+ if (bar0 != u'0' || bar1 != u'1' || bar2 != u'2' || bar3 != u'3' || bar4 != u'\0')
-+ abort ();
-+ if (baz0 != U'0' || baz1 != U'1' || baz2 != U'2' || baz3 != U'3' || baz4 != U'\0')
-+ abort ();
-+}
-diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
-new file mode 100644
-index 0000000..4fc8980
---- /dev/null
-+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
-@@ -0,0 +1,7 @@
-+// PR c++/48570
-+// { dg-do compile }
-+// { dg-options -std=c++0x }
-+
-+constexpr wchar_t c1 = L"hi"[3]; // { dg-error "out of bound" }
-+constexpr char16_t c2 = u"hi"[3]; // { dg-error "out of bound" }
-+constexpr char32_t c3 = U"hi"[3]; // { dg-error "out of bound" }
---
-1.7.0.4
-