4.7.0-0.9
This commit is contained in:
parent
15d1c7249f
commit
c0579b832a
1
.gitignore
vendored
1
.gitignore
vendored
@ -14,3 +14,4 @@
|
||||
/gcc-4.7.0-20120112.tar.bz2
|
||||
/gcc-4.7.0-20120117.tar.bz2
|
||||
/gcc-4.7.0-20120119.tar.bz2
|
||||
/gcc-4.7.0-20120123.tar.bz2
|
||||
|
34
gcc.spec
34
gcc.spec
@ -1,9 +1,9 @@
|
||||
%global DATE 20120119
|
||||
%global SVNREV 183308
|
||||
%global DATE 20120123
|
||||
%global SVNREV 183456
|
||||
%global gcc_version 4.7.0
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%global gcc_release 0.8
|
||||
%global gcc_release 0.9
|
||||
%global _unpackaged_files_terminate_build 0
|
||||
%global multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||
%ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
|
||||
@ -174,7 +174,10 @@ Patch12: gcc47-libstdc++-docs.patch
|
||||
Patch13: gcc47-no-add-needed.patch
|
||||
Patch14: gcc47-ppl-0.10.patch
|
||||
Patch15: gcc47-libitm-fno-exceptions.patch
|
||||
Patch16: gcc47-pr51856.patch
|
||||
Patch16: gcc47-pr51895.patch
|
||||
Patch17: gcc47-pr51957.patch
|
||||
Patch18: gcc47-pr46590-revert.patch
|
||||
Patch19: gcc47-pr51968.patch
|
||||
|
||||
Patch1000: fastjar-0.97-segfault.patch
|
||||
Patch1001: fastjar-0.97-len1.patch
|
||||
@ -674,7 +677,10 @@ package or when debugging this package.
|
||||
%patch14 -p0 -b .ppl-0.10~
|
||||
%endif
|
||||
%patch15 -p0 -b .libitm-fno-exceptions~
|
||||
%patch16 -p0 -b .pr51856~
|
||||
%patch16 -p0 -b .pr51895~
|
||||
%patch17 -p0 -b .pr51957~
|
||||
%patch18 -p0 -b .pr46590-revert~
|
||||
%patch19 -p0 -b .pr51968~
|
||||
|
||||
%if 0%{?_enable_debug_packages}
|
||||
cat > split-debuginfo.sh <<\EOF
|
||||
@ -2635,6 +2641,24 @@ fi
|
||||
%{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
|
||||
|
||||
%changelog
|
||||
* Mon Jan 23 2012 Jakub Jelinek <jakub@redhat.com> 4.7.0-0.9
|
||||
- update from trunk
|
||||
- PRs ada/46192, c++/51344, c++/51398, c++/51402, c++/51832, c++/51919,
|
||||
c++/51922, debug/45682, fortran/50556, fortran/51056, fortran/51904,
|
||||
fortran/51913, fortran/51948, libgcj/23182, libgfortran/51899,
|
||||
libitm/51830, libstdc++/50982, lto/51916, middle-end/45416,
|
||||
rtl-optimization/40761, rtl-optimization/51924, target/47096,
|
||||
target/49868, target/50313, target/50887, target/51106, target/51819,
|
||||
target/51900, target/51915, target/51931, target/51934,
|
||||
testsuite/51941, tree-optimization/51895, tree-optimization/51903,
|
||||
tree-optimization/51914, tree-optimization/51949
|
||||
- fix REE pass (#783481, PR rtl-optimization/51933)
|
||||
- further overload fixes with using decls (#783586, PR c++/51925)
|
||||
- fix ICE during expansion with BLKmode MEM_REF (#782868, PR middle-end/51895)
|
||||
- fix ppc64 profiledbootstrap (PR target/51957)
|
||||
- revert broken stack layout change (PR tree-optimization/46590)
|
||||
- fix ARM ICE on neon insn splitting (PR target/51968)
|
||||
|
||||
* Thu Jan 19 2012 Jakub Jelinek <jakub@redhat.com> 4.7.0-0.8
|
||||
- update from trunk
|
||||
- PRs bootstrap/50237, c++/51225, c++/51889, fortran/48426, fortran/51634,
|
||||
|
96
gcc47-pr46590-revert.patch
Normal file
96
gcc47-pr46590-revert.patch
Normal file
@ -0,0 +1,96 @@
|
||||
Revert:
|
||||
2012-01-19 Michael Matz <matz@suse.de>
|
||||
|
||||
PR tree-optimization/46590
|
||||
* cfgexpand.c (add_scope_conflicts_1): New old_conflicts argument,
|
||||
use it in remembering which conflicts we already created.
|
||||
(add_scope_conflicts): Adjust call to above, (de)allocate helper
|
||||
bitmap.
|
||||
|
||||
--- gcc/cfgexpand.c (revision 183305)
|
||||
+++ gcc/cfgexpand.c (revision 183304)
|
||||
@@ -441,12 +441,11 @@ visit_conflict (gimple stmt ATTRIBUTE_UN
|
||||
|
||||
/* Helper routine for add_scope_conflicts, calculating the active partitions
|
||||
at the end of BB, leaving the result in WORK. We're called to generate
|
||||
- conflicts when OLD_CONFLICTS is non-null, otherwise we're just tracking
|
||||
- liveness. If we generate conflicts then OLD_CONFLICTS stores the bits
|
||||
- for which we generated conflicts already. */
|
||||
+ conflicts when FOR_CONFLICT is true, otherwise we're just tracking
|
||||
+ liveness. */
|
||||
|
||||
static void
|
||||
-add_scope_conflicts_1 (basic_block bb, bitmap work, bitmap old_conflicts)
|
||||
+add_scope_conflicts_1 (basic_block bb, bitmap work, bool for_conflict)
|
||||
{
|
||||
edge e;
|
||||
edge_iterator ei;
|
||||
@@ -483,7 +482,7 @@ add_scope_conflicts_1 (basic_block bb, b
|
||||
}
|
||||
else if (!is_gimple_debug (stmt))
|
||||
{
|
||||
- if (old_conflicts
|
||||
+ if (for_conflict
|
||||
&& visit == visit_op)
|
||||
{
|
||||
/* If this is the first real instruction in this BB we need
|
||||
@@ -491,27 +490,16 @@ add_scope_conflicts_1 (basic_block bb, b
|
||||
Unlike classical liveness for named objects we can't
|
||||
rely on seeing a def/use of the names we're interested in.
|
||||
There might merely be indirect loads/stores. We'd not add any
|
||||
- conflicts for such partitions. We know that we generated
|
||||
- conflicts between all partitions in old_conflicts already,
|
||||
- so we need to generate only the new ones, avoiding to
|
||||
- repeatedly pay the O(N^2) cost for each basic block. */
|
||||
+ conflicts for such partitions. */
|
||||
bitmap_iterator bi;
|
||||
unsigned i;
|
||||
-
|
||||
- EXECUTE_IF_AND_COMPL_IN_BITMAP (work, old_conflicts, 0, i, bi)
|
||||
+ EXECUTE_IF_SET_IN_BITMAP (work, 0, i, bi)
|
||||
{
|
||||
unsigned j;
|
||||
bitmap_iterator bj;
|
||||
- /* First the conflicts between new and old_conflicts. */
|
||||
- EXECUTE_IF_SET_IN_BITMAP (old_conflicts, 0, j, bj)
|
||||
- add_stack_var_conflict (i, j);
|
||||
- /* Then the conflicts between only the new members. */
|
||||
- EXECUTE_IF_AND_COMPL_IN_BITMAP (work, old_conflicts, i + 1,
|
||||
- j, bj)
|
||||
+ EXECUTE_IF_SET_IN_BITMAP (work, i + 1, j, bj)
|
||||
add_stack_var_conflict (i, j);
|
||||
}
|
||||
- /* And remember for the next basic block. */
|
||||
- bitmap_ior_into (old_conflicts, work);
|
||||
visit = visit_conflict;
|
||||
}
|
||||
walk_stmt_load_store_addr_ops (stmt, work, visit, visit, visit);
|
||||
@@ -528,7 +516,6 @@ add_scope_conflicts (void)
|
||||
basic_block bb;
|
||||
bool changed;
|
||||
bitmap work = BITMAP_ALLOC (NULL);
|
||||
- bitmap old_conflicts;
|
||||
|
||||
/* We approximate the live range of a stack variable by taking the first
|
||||
mention of its name as starting point(s), and by the end-of-scope
|
||||
@@ -550,18 +537,15 @@ add_scope_conflicts (void)
|
||||
FOR_EACH_BB (bb)
|
||||
{
|
||||
bitmap active = (bitmap)bb->aux;
|
||||
- add_scope_conflicts_1 (bb, work, NULL);
|
||||
+ add_scope_conflicts_1 (bb, work, false);
|
||||
if (bitmap_ior_into (active, work))
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
- old_conflicts = BITMAP_ALLOC (NULL);
|
||||
-
|
||||
FOR_EACH_BB (bb)
|
||||
- add_scope_conflicts_1 (bb, work, old_conflicts);
|
||||
+ add_scope_conflicts_1 (bb, work, true);
|
||||
|
||||
- BITMAP_FREE (old_conflicts);
|
||||
BITMAP_FREE (work);
|
||||
FOR_ALL_BB (bb)
|
||||
BITMAP_FREE (bb->aux);
|
@ -1,45 +0,0 @@
|
||||
2012-01-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
||||
|
||||
PR rtl-optimization/51856
|
||||
* reload.c (find_reloads_subreg_address): Set the address_reloaded
|
||||
flag to reloaded.
|
||||
|
||||
* gcc.c-torture/compile/pr51856.c: New testcase.
|
||||
|
||||
--- gcc/reload.c.jj 2012-01-05 21:54:36.000000000 +0100
|
||||
+++ gcc/reload.c 2012-01-19 20:17:26.151735687 +0100
|
||||
@@ -6232,7 +6232,7 @@ find_reloads_subreg_address (rtx x, int
|
||||
}
|
||||
}
|
||||
if (reloaded && address_reloaded)
|
||||
- *address_reloaded = 1;
|
||||
+ *address_reloaded = reloaded;
|
||||
|
||||
return x;
|
||||
}
|
||||
--- gcc/testsuite/gcc.c-torture/compile/pr51856.c.jj 2012-01-19 20:17:26.151735687 +0100
|
||||
+++ gcc/testsuite/gcc.c-torture/compile/pr51856.c 2012-01-19 20:17:26.151735687 +0100
|
||||
@@ -0,0 +1,23 @@
|
||||
+struct B { int b1; long long b2, b3; int b4; };
|
||||
+struct C { char c1[40], c2, c3[96]; long long c4[5], c5; char c6[596]; };
|
||||
+void fn1 (long long), fn2 (char *, int), fn4 (void);
|
||||
+int r, fn3 (int, const char *, int, char *, int, int);
|
||||
+
|
||||
+void
|
||||
+foo (int t, int u, int v, int w, int x, int y, struct B *z)
|
||||
+{
|
||||
+ char c[512], d[512], e;
|
||||
+ struct C g;
|
||||
+ long long f, h[255];
|
||||
+ struct B j;
|
||||
+ __builtin_bzero (&j, sizeof j);
|
||||
+ if (y > w)
|
||||
+ fn4 ();
|
||||
+ __builtin_bzero (&g, sizeof g);
|
||||
+ g.c5 = h[0];
|
||||
+ fn1 (z ? z->b3 : f);
|
||||
+ g.c2 = y;
|
||||
+ fn2 (d, 256);
|
||||
+ if (fn3 (r, "", e, c, 0, 16))
|
||||
+ fn4 ();
|
||||
+}
|
55
gcc47-pr51895.patch
Normal file
55
gcc47-pr51895.patch
Normal file
@ -0,0 +1,55 @@
|
||||
2012-01-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/51895
|
||||
* expr.c (expand_expr_real_1): Handle BLKmode MEM_REF of
|
||||
non-addressable non-BLKmode base correctly.
|
||||
|
||||
* g++.dg/opt/pr51895.C: New test.
|
||||
|
||||
--- gcc/expr.c.jj 2012-01-13 21:47:35.000000000 +0100
|
||||
+++ gcc/expr.c 2012-01-19 13:12:14.218760812 +0100
|
||||
@@ -9328,6 +9328,16 @@ expand_expr_real_1 (tree exp, rtx target
|
||||
bftype = TREE_TYPE (base);
|
||||
if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
|
||||
bftype = TREE_TYPE (exp);
|
||||
+ else
|
||||
+ {
|
||||
+ temp = assign_stack_temp (DECL_MODE (base),
|
||||
+ GET_MODE_SIZE (DECL_MODE (base)),
|
||||
+ 0);
|
||||
+ store_expr (base, temp, 0, false);
|
||||
+ temp = adjust_address (temp, BLKmode, offset);
|
||||
+ set_mem_size (temp, int_size_in_bytes (TREE_TYPE (exp)));
|
||||
+ return temp;
|
||||
+ }
|
||||
return expand_expr (build3 (BIT_FIELD_REF, bftype,
|
||||
base,
|
||||
TYPE_SIZE (TREE_TYPE (exp)),
|
||||
--- gcc/testsuite/g++.dg/opt/pr51895.C.jj 2012-01-19 13:20:27.808899825 +0100
|
||||
+++ gcc/testsuite/g++.dg/opt/pr51895.C 2012-01-19 13:21:10.042655293 +0100
|
||||
@@ -0,0 +1,25 @@
|
||||
+// PR middle-end/51895
|
||||
+// { dg-do compile }
|
||||
+// { dg-options "-O2" }
|
||||
+
|
||||
+struct S
|
||||
+{
|
||||
+ long a;
|
||||
+ char b;
|
||||
+ S () : a (0), b (0) {}
|
||||
+ bool baz ();
|
||||
+};
|
||||
+
|
||||
+__attribute__((noinline)) static bool
|
||||
+bar (S x, S y)
|
||||
+{
|
||||
+ y = x;
|
||||
+ return y.baz ();
|
||||
+}
|
||||
+
|
||||
+bool
|
||||
+foo (S x)
|
||||
+{
|
||||
+ S y;
|
||||
+ return bar (x, y);
|
||||
+}
|
206
gcc47-pr51957.patch
Normal file
206
gcc47-pr51957.patch
Normal file
@ -0,0 +1,206 @@
|
||||
2012-01-23 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR target/51957
|
||||
* target.def (const_not_ok_for_debug_p): New hook.
|
||||
* doc/tm.texi.in (TARGET_CONST_NOT_OK_FOR_DEBUG_P): New hook
|
||||
documentation.
|
||||
* doc/tm.texi: Regenerated.
|
||||
* dwarf2out.c (const_ok_for_output_1): If
|
||||
targetm.const_not_ok_for_debug_p returns true, fail.
|
||||
* config/rs6000/rs6000.c (rs6000_const_not_ok_for_debug_p): New
|
||||
function.
|
||||
(TARGET_CONST_NOT_OK_FOR_DEBUG_P): Redefine.
|
||||
|
||||
* gcc.dg/pr51957-1.c: New test.
|
||||
* gcc.dg/pr51957-1.h: New file.
|
||||
* gcc.dg/pr51957-2.c: New test.
|
||||
|
||||
--- gcc/target.def.jj 2012-01-20 12:35:16.000000000 +0100
|
||||
+++ gcc/target.def 2012-01-23 13:14:52.601638343 +0100
|
||||
@@ -1382,6 +1382,14 @@ DEFHOOK
|
||||
rtx, (rtx x),
|
||||
delegitimize_mem_from_attrs)
|
||||
|
||||
+/* Given an RTX, return true if it is not ok to emit it into debug info
|
||||
+ section. */
|
||||
+DEFHOOK
|
||||
+(const_not_ok_for_debug_p,
|
||||
+ "",
|
||||
+ bool, (rtx x),
|
||||
+ hook_bool_rtx_false)
|
||||
+
|
||||
/* Given an address RTX, say whether it is valid. */
|
||||
DEFHOOK
|
||||
(legitimate_address_p,
|
||||
--- gcc/doc/tm.texi.in.jj 2012-01-20 12:35:10.000000000 +0100
|
||||
+++ gcc/doc/tm.texi.in 2012-01-23 13:27:19.544241676 +0100
|
||||
@@ -5567,6 +5567,11 @@ the semantics of these opaque @code{UNSP
|
||||
into their original form.
|
||||
@end deftypefn
|
||||
|
||||
+@hook TARGET_CONST_NOT_OK_FOR_DEBUG_P
|
||||
+This hook should return true if @var{x} should not be emitted into
|
||||
+debug sections.
|
||||
+@end deftypefn
|
||||
+
|
||||
@hook TARGET_CANNOT_FORCE_CONST_MEM
|
||||
This hook should return true if @var{x} is of a form that cannot (or
|
||||
should not) be spilled to the constant pool. @var{mode} is the mode
|
||||
--- gcc/doc/tm.texi.jj 2012-01-20 12:35:10.000000000 +0100
|
||||
+++ gcc/doc/tm.texi 2012-01-23 13:27:33.000000000 +0100
|
||||
@@ -5631,6 +5631,11 @@ the semantics of these opaque @code{UNSP
|
||||
into their original form.
|
||||
@end deftypefn
|
||||
|
||||
+@deftypefn {Target Hook} bool TARGET_CONST_NOT_OK_FOR_DEBUG_P (rtx @var{x})
|
||||
+This hook should return true if @var{x} should not be emitted into
|
||||
+debug sections.
|
||||
+@end deftypefn
|
||||
+
|
||||
@deftypefn {Target Hook} bool TARGET_CANNOT_FORCE_CONST_MEM (enum machine_mode @var{mode}, rtx @var{x})
|
||||
This hook should return true if @var{x} is of a form that cannot (or
|
||||
should not) be spilled to the constant pool. @var{mode} is the mode
|
||||
--- gcc/dwarf2out.c.jj 2012-01-22 16:02:10.000000000 +0100
|
||||
+++ gcc/dwarf2out.c 2012-01-23 13:58:09.887380014 +0100
|
||||
@@ -10683,6 +10683,13 @@ const_ok_for_output_1 (rtx *rtlp, void *
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ if (targetm.const_not_ok_for_debug_p (rtl))
|
||||
+ {
|
||||
+ expansion_failed (NULL_TREE, rtl,
|
||||
+ "Expression rejected for debug by the backend.\n");
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
if (GET_CODE (rtl) != SYMBOL_REF)
|
||||
return 0;
|
||||
|
||||
--- gcc/config/rs6000/rs6000.c.jj 2012-01-22 16:02:10.000000000 +0100
|
||||
+++ gcc/config/rs6000/rs6000.c 2012-01-23 13:25:05.092031129 +0100
|
||||
@@ -1106,6 +1106,7 @@ static rtx rs6000_debug_legitimize_addre
|
||||
static rtx rs6000_legitimize_tls_address (rtx, enum tls_model);
|
||||
static void rs6000_output_dwarf_dtprel (FILE *, int, rtx) ATTRIBUTE_UNUSED;
|
||||
static rtx rs6000_delegitimize_address (rtx);
|
||||
+static bool rs6000_const_not_ok_for_debug_p (rtx);
|
||||
static rtx rs6000_tls_get_addr (void);
|
||||
static rtx rs6000_got_sym (void);
|
||||
static int rs6000_tls_symbol_ref_1 (rtx *, void *);
|
||||
@@ -1405,6 +1406,9 @@ static const struct attribute_spec rs600
|
||||
#undef TARGET_DELEGITIMIZE_ADDRESS
|
||||
#define TARGET_DELEGITIMIZE_ADDRESS rs6000_delegitimize_address
|
||||
|
||||
+#undef TARGET_CONST_NOT_OK_FOR_DEBUG_P
|
||||
+#define TARGET_CONST_NOT_OK_FOR_DEBUG_P rs6000_const_not_ok_for_debug_p
|
||||
+
|
||||
#undef TARGET_ASM_FUNCTION_PROLOGUE
|
||||
#define TARGET_ASM_FUNCTION_PROLOGUE rs6000_output_function_prologue
|
||||
#undef TARGET_ASM_FUNCTION_EPILOGUE
|
||||
@@ -5815,6 +5819,25 @@ rs6000_delegitimize_address (rtx orig_x)
|
||||
return orig_x;
|
||||
}
|
||||
|
||||
+/* Return true if X shouldn't be emitted into the debug info.
|
||||
+ The linker doesn't like .toc section references from
|
||||
+ .debug_* sections, so reject .toc section symbols. */
|
||||
+
|
||||
+static bool
|
||||
+rs6000_const_not_ok_for_debug_p (rtx x)
|
||||
+{
|
||||
+ if (GET_CODE (x) == SYMBOL_REF
|
||||
+ && CONSTANT_POOL_ADDRESS_P (x))
|
||||
+ {
|
||||
+ rtx c = get_pool_constant (x);
|
||||
+ enum machine_mode cmode = get_pool_mode (x);
|
||||
+ if (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (c, cmode))
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
/* Construct the SYMBOL_REF for the tls_get_addr function. */
|
||||
|
||||
static GTY(()) rtx rs6000_tls_symbol;
|
||||
--- gcc/testsuite/gcc.dg/pr51957-1.c.jj 2012-01-23 14:06:45.024357678 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr51957-1.c 2012-01-23 14:12:02.895492825 +0100
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* PR target/51957 */
|
||||
+/* { dg-do link } */
|
||||
+/* { dg-options "-O2 -g -fprofile-use" } */
|
||||
+/* { dg-additional-sources "pr51957-2.c" } */
|
||||
+
|
||||
+int v[128];
|
||||
+#include "pr51957-1.h"
|
||||
+
|
||||
+void
|
||||
+foo (U *x)
|
||||
+{
|
||||
+ T *a = x->u;
|
||||
+ while (1)
|
||||
+ {
|
||||
+ union R *b;
|
||||
+ b = fn1 ();
|
||||
+ if (b != w[0] && !(v[b->p->c] == 1))
|
||||
+ {
|
||||
+ fn2 (a->t, "foobar", b->p);
|
||||
+ b = w[0];
|
||||
+ }
|
||||
+ if (b != w[0])
|
||||
+ fn3 ();
|
||||
+ if (w[0] && b != w[0])
|
||||
+ fn4 (b->p);
|
||||
+ if (b != w[0] && (v[b->p->c] == 1) && fn4 (b->p))
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
--- gcc/testsuite/gcc.dg/pr51957-1.h.jj 2012-01-23 14:06:56.491290757 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr51957-1.h 2012-01-23 14:07:35.243060438 +0100
|
||||
@@ -0,0 +1,9 @@
|
||||
+union R { int c; union R *p; };
|
||||
+extern union R *w[];
|
||||
+typedef struct { int t; } T;
|
||||
+typedef struct { void *u; } U;
|
||||
+union R *fn1 (void);
|
||||
+void fn2 (int, const char *, union R *);
|
||||
+void fn3 (void);
|
||||
+int fn4 (union R *);
|
||||
+void foo (U *x);
|
||||
--- gcc/testsuite/gcc.dg/pr51957-2.c.jj 2012-01-23 14:10:59.840862700 +0100
|
||||
+++ gcc/testsuite/gcc.dg/pr51957-2.c 2012-01-23 14:10:52.870904033 +0100
|
||||
@@ -0,0 +1,35 @@
|
||||
+/* PR target/51957 */
|
||||
+/* { dg-do compile } */
|
||||
+/* { dg-options "-O0" } */
|
||||
+
|
||||
+#include "pr51957-1.h"
|
||||
+
|
||||
+union R *w[10];
|
||||
+
|
||||
+union R *
|
||||
+fn1 (void)
|
||||
+{
|
||||
+ return (union R *) 0;
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+fn2 (int x, const char *y, union R *z)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+fn3 (void)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+fn4 (union R *x)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
21
gcc47-pr51968.patch
Normal file
21
gcc47-pr51968.patch
Normal file
@ -0,0 +1,21 @@
|
||||
2012-01-23 Richard Henderson <rth@redhat.com>
|
||||
|
||||
PR target/51968
|
||||
* config/arm/arm.c (neon_split_vcombine): Split into
|
||||
NOTE_INSN_DELETED instead of nothing.
|
||||
|
||||
--- gcc/config/arm/arm.c
|
||||
+++ gcc/config/arm/arm.c
|
||||
@@ -20928,7 +20928,11 @@ neon_split_vcombine (rtx operands[3])
|
||||
rtx destlo, desthi;
|
||||
|
||||
if (src1 == dest && src2 == dest + halfregs)
|
||||
- return;
|
||||
+ {
|
||||
+ /* No-op move. Can't split to nothing; emit something. */
|
||||
+ emit_note (NOTE_INSN_DELETED);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
/* Preserve register attributes for variable tracking. */
|
||||
destlo = gen_rtx_REG_offset (operands[0], halfmode, dest, 0);
|
Loading…
Reference in New Issue
Block a user