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/0232-PR-c-48089.patch | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch') 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 +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 + -- cgit v1.2.3