summaryrefslogtreecommitdiff
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2011-06-12 20:56:57 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-06-14 14:37:31 +0100
commit3968f33b6542cf20cf63cf49bfbc033bd2486295 (patch)
tree2bdb5e2f692a3bd3ecadbf2b4c7dc9f54485c737 /meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch
parent022ca1d1357caafdfe23aa9ab82f90ba89b6942b (diff)
downloadopenembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.gz
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.bz2
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.tar.xz
openembedded-core-3968f33b6542cf20cf63cf49bfbc033bd2486295.zip
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 <raj.khem@gmail.com>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch
new file mode 100644
index 000000000..300b4e143
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch
@@ -0,0 +1,77 @@
+From 3db4aa63d6850f44758d06d5f075c76de6d4c1e9 Mon Sep 17 00:00:00 2001
+From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Fri, 6 May 2011 21:58:22 +0000
+Subject: [PATCH] PR c++/48089
+ * semantics.c (potential_constant_expression_1): Don't allow *this
+ in a constructor.
+ (register_constexpr_fundef): Use potential_rvalue_constant_expression.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@173513 138bc75d-0d04-0410-961f-82ee72b054a4
+
+index f43649e..8f621b9 100644
+--- a/gcc/cp/semantics.c
++++ b/gcc/cp/semantics.c
+@@ -5704,11 +5704,11 @@ register_constexpr_fundef (tree fun, tree body)
+ body = unshare_expr (TREE_OPERAND (body, 0));
+ }
+
+- if (!potential_constant_expression (body))
++ if (!potential_rvalue_constant_expression (body))
+ {
+ DECL_DECLARED_CONSTEXPR_P (fun) = false;
+ if (!DECL_TEMPLATE_INSTANTIATION (fun))
+- require_potential_constant_expression (body);
++ require_potential_rvalue_constant_expression (body);
+ return NULL;
+ }
+ fundef->body = body;
+@@ -7560,7 +7560,16 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
+ tree x = TREE_OPERAND (t, 0);
+ STRIP_NOPS (x);
+ if (is_this_parameter (x))
+- return true;
++ {
++ if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
++ {
++ if (flags & tf_error)
++ sorry ("use of the value of the object being constructed "
++ "in a constant expression");
++ return false;
++ }
++ return true;
++ }
+ return potential_constant_expression_1 (x, rval, flags);
+ }
+
+new file mode 100644
+index 0000000..fc69cfe
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-48089.C
+@@ -0,0 +1,24 @@
++// PR c++/48089
++// { dg-options -std=c++0x }
++
++// bang is ill-formed (diagnostic required) because its initializer is
++// non-constant, because it uses the value of an uninitialized object.
++
++// s() is ill-formed (no diagnostic required) because there is no set of
++// arguments that would produce a constant expression.
++
++// R() is well-formed because i is initialized before j.
++
++struct s {
++ constexpr s() : v(v) { } // { dg-message "" }
++ int v;
++};
++
++constexpr s bang; // { dg-error "" }
++
++struct R {
++ int i,j;
++ constexpr R() : i(42),j(i) { } // { dg-bogus "" "" { xfail *-*-* } }
++};
++
++constexpr R r; // { dg-bogus "" "" { xfail *-*-* } }
+--
+1.7.0.4
+