summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2011-04-30 12:37:47 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-05-05 12:26:41 +0100
commit478deec11f3349d61b1a922f047dc958dc07262a (patch)
tree1843907b36de2bcb8f821d49d8c9a88014ef0dc7 /meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch
parentd42dccf886983ba14ccc868041d7bea0cf1a260e (diff)
downloadast2050-yocto-poky-478deec11f3349d61b1a922f047dc958dc07262a.zip
ast2050-yocto-poky-478deec11f3349d61b1a922f047dc958dc07262a.tar.gz
gcc-4.6.0: Backport FSF 4.6 branch patches
This is set of bugfixes that has been done on FSF gcc-4_2-branch since 4.6.0 was released They will roll into 4.6.1 release once that happens in coming approx 6 months time then we can simply remove them thats the reason so use a separate .inc file to define the SRC_URI additions (From OE-Core rev: b0d5b9f12adbce2c4a0df6059f5671188cd32293) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch166
1 files changed, 166 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch
new file mode 100644
index 0000000..e032f13
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-4.6.0/gcc-4_6-branch-backports/0143-PR-middle-end-48661.patch
@@ -0,0 +1,166 @@
+From 6d925e0321b8a34fb21b00a202c07d3d8a6e389a Mon Sep 17 00:00:00 2001
+From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Mon, 18 Apr 2011 21:58:03 +0000
+Subject: [PATCH 143/200] PR middle-end/48661
+ * gimple-fold.c (gimple_get_virt_method_for_binfo): Return NULL
+ if TREE_TYPE (v) is non-NULL.
+
+ * gimple-fold.c (gimple_get_virt_method_for_binfo): Renamed from
+ gimple_get_virt_mehtod_for_binfo.
+ * gimple.h (gimple_get_virt_method_for_binfo): Likewise.
+ * ipa-cp.c (ipcp_process_devirtualization_opportunities): Adjust
+ callers.
+ * ipa-prop.c (try_make_edge_direct_virtual_call): Likewise.
+
+ * g++.dg/torture/pr48661.C: New test.
+
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172676 138bc75d-0d04-0410-961f-82ee72b054a4
+
+index abc2273..1b82e12 100644
+--- a/gcc/gimple-fold.c
++++ b/gcc/gimple-fold.c
+@@ -1374,7 +1374,7 @@ gimple_fold_builtin (gimple stmt)
+ is a thunk (other than a this adjustment which is dealt with by DELTA). */
+
+ tree
+-gimple_get_virt_mehtod_for_binfo (HOST_WIDE_INT token, tree known_binfo,
++gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo,
+ tree *delta, bool refuse_thunks)
+ {
+ HOST_WIDE_INT i;
+@@ -1393,6 +1393,10 @@ gimple_get_virt_mehtod_for_binfo (HOST_WIDE_INT token, tree known_binfo,
+ v = TREE_CHAIN (v);
+ }
+
++ /* If BV_VCALL_INDEX is non-NULL, give up. */
++ if (TREE_TYPE (v))
++ return NULL_TREE;
++
+ fndecl = TREE_VALUE (v);
+ node = cgraph_get_node_or_alias (fndecl);
+ if (refuse_thunks
+diff --git a/gcc/gimple.h b/gcc/gimple.h
+index cc35b60..fca3d55 100644
+--- a/gcc/gimple.h
++++ b/gcc/gimple.h
+@@ -892,7 +892,7 @@ unsigned get_gimple_rhs_num_ops (enum tree_code);
+ gimple gimple_alloc_stat (enum gimple_code, unsigned MEM_STAT_DECL);
+ const char *gimple_decl_printable_name (tree, int);
+ bool gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace);
+-tree gimple_get_virt_mehtod_for_binfo (HOST_WIDE_INT, tree, tree *, bool);
++tree gimple_get_virt_method_for_binfo (HOST_WIDE_INT, tree, tree *, bool);
+ void gimple_adjust_this_by_delta (gimple_stmt_iterator *, tree);
+ /* Returns true iff T is a valid GIMPLE statement. */
+ extern bool is_gimple_stmt (tree);
+diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
+index aad5d78..7f5a4c6 100644
+--- a/gcc/ipa-cp.c
++++ b/gcc/ipa-cp.c
+@@ -1242,7 +1242,7 @@ ipcp_process_devirtualization_opportunities (struct cgraph_node *node)
+ {
+ tree binfo = VEC_index (tree, info->params[param_index].types, j);
+ tree d;
+- tree t = gimple_get_virt_mehtod_for_binfo (token, binfo, &d, true);
++ tree t = gimple_get_virt_method_for_binfo (token, binfo, &d, true);
+
+ if (!t)
+ {
+diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
+index 589bc16..d89bf6d 100644
+--- a/gcc/ipa-prop.c
++++ b/gcc/ipa-prop.c
+@@ -1730,7 +1730,7 @@ try_make_edge_direct_virtual_call (struct cgraph_edge *ie,
+ type = ie->indirect_info->otr_type;
+ binfo = get_binfo_at_offset (binfo, ie->indirect_info->anc_offset, type);
+ if (binfo)
+- target = gimple_get_virt_mehtod_for_binfo (token, binfo, &delta, true);
++ target = gimple_get_virt_method_for_binfo (token, binfo, &delta, true);
+ else
+ return NULL;
+
+new file mode 100644
+index 0000000..8de2142
+--- /dev/null
++++ b/gcc/testsuite/g++.dg/torture/pr48661.C
+@@ -0,0 +1,77 @@
++// PR middle-end/48661
++// { dg-do run }
++
++extern "C" void abort ();
++
++__attribute__((noinline))
++double
++foo (double x, double y)
++{
++ asm volatile ("" : : : "memory");
++ return x + y;
++}
++
++__attribute__((noinline, noclone))
++void
++bar (int x)
++{
++ if (x != 123)
++ abort ();
++}
++
++struct A
++{
++ double a1, a2;
++};
++
++struct B
++{
++ virtual int m () const = 0 ;
++};
++
++struct C
++{
++ virtual ~C () {}
++};
++
++struct D : virtual public B, public C
++{
++ explicit D (const A &x) : d(123) { foo (x.a2, x.a1); }
++ int m () const { return d; }
++ int d;
++};
++
++struct E
++{
++ E () : d(0) {}
++ virtual void n (const B &x) { d = x.m (); x.m (); x.m (); }
++ int d;
++};
++
++void
++test ()
++{
++ A a;
++ a.a1 = 0;
++ a.a2 = 1;
++ E p;
++ D q (a);
++ const B &b = q;
++ bar (b.m ());
++ p.n (b);
++ bar (p.d);
++}
++
++void
++baz ()
++{
++ A a;
++ D p2 (a);
++}
++
++int
++main ()
++{
++ test ();
++ return 0;
++}
+--
+1.7.0.4
+
OpenPOWER on IntegriCloud