diff options
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.patch | 77 |
1 files changed, 0 insertions, 77 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 deleted file mode 100644 index 300b4e1..0000000 --- a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0232-PR-c-48089.patch +++ /dev/null @@ -1,77 +0,0 @@ -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 - |