4.4.0-2
This commit is contained in:
parent
fbde678bbe
commit
614bd41946
|
@ -1,2 +1,2 @@
|
|||
fastjar-0.97.tar.gz
|
||||
gcc-4.4.0-20090423.tar.bz2
|
||||
gcc-4.4.0-20090424.tar.bz2
|
||||
|
|
20
gcc.spec
20
gcc.spec
|
@ -1,9 +1,9 @@
|
|||
%define DATE 20090423
|
||||
%define SVNREV 146636
|
||||
%define DATE 20090424
|
||||
%define SVNREV 146674
|
||||
%define gcc_version 4.4.0
|
||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||
# %{release}, append them after %{gcc_release} on Release: line.
|
||||
%define gcc_release 1
|
||||
%define gcc_release 2
|
||||
%define _unpackaged_files_terminate_build 0
|
||||
%define multilib_64_archs sparc64 ppc64 s390x x86_64
|
||||
%define include_gappletviewer 1
|
||||
|
@ -155,6 +155,7 @@ Patch32: gcc44-rh459374-1.patch
|
|||
Patch33: gcc44-rh459374-2.patch
|
||||
Patch34: gcc44-rh459374-3.patch
|
||||
Patch35: gcc44-cswtch.patch
|
||||
Patch36: gcc44-pr39867.patch
|
||||
|
||||
Patch1000: fastjar-0.97-segfault.patch
|
||||
|
||||
|
@ -448,6 +449,7 @@ which are required to compile with the GNAT.
|
|||
%patch33 -p0 -b .rh459374-2~
|
||||
%patch34 -p0 -b .rh459374-3~
|
||||
%patch35 -p0 -b .cswtch~
|
||||
%patch36 -p0 -b .pr39867~
|
||||
|
||||
# This testcase doesn't compile.
|
||||
rm libjava/testsuite/libjava.lang/PR35020*
|
||||
|
@ -1172,7 +1174,7 @@ fi
|
|||
/sbin/install-info \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || :
|
||||
/sbin/install-info \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || :
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || :
|
||||
/sbin/install-info \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || :
|
||||
|
||||
|
@ -1181,7 +1183,7 @@ if [ $1 = 0 ]; then
|
|||
/sbin/install-info --delete \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_rm.info.gz || :
|
||||
/sbin/install-info --delete \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_ugn_unw.info.gz || :
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat_ugn.info.gz || :
|
||||
/sbin/install-info --delete \
|
||||
--info-dir=%{_infodir} %{_infodir}/gnat-style.info.gz || :
|
||||
fi
|
||||
|
@ -1758,12 +1760,18 @@ fi
|
|||
%doc rpm.doc/changelogs/libmudflap/ChangeLog*
|
||||
|
||||
%changelog
|
||||
* Fri Apr 24 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-2
|
||||
- update from gcc-4_4-branch
|
||||
- PR c++/38228
|
||||
- fix folding of cond expr with comparison to MAX/MIN (PR middle-end/39867)
|
||||
- fix up gcc-gnat install-info arguments (#452783)
|
||||
|
||||
* Thu Apr 23 2009 Jakub Jelinek <jakub@redhat.com> 4.4.0-1
|
||||
- update from gcc-4_4-branch
|
||||
- GCC 4.4.0 release
|
||||
- PRs libstdc++/39802, c++/39639, c/39855, rtl-optimization/39762,
|
||||
testsuite/39781, tree-optimization/39824
|
||||
- fix up DSE (PR middle-end/39794)
|
||||
- fix up DSE (PR rtl-optimization/39794)
|
||||
- debuginfo fixes for VLA and nested/contained functions (#459374)
|
||||
- improve -ftree-switch-conversion optimization if the constant is the
|
||||
same in all cases
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
2009-04-21 Jakub Jelinek <jakub@redhat.com>
|
||||
2009-04-24 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR middle-end/39794
|
||||
PR rtl-optimization/39794
|
||||
* alias.c (canon_true_dependence): Add x_addr argument.
|
||||
* rtl.h (canon_true_dependence): Adjust prototype.
|
||||
* cse.c (check_dependence): Adjust canon_true_dependence callers.
|
||||
* cselib.c (cselib_invalidate_mem): Likewise.
|
||||
* gcse.c (compute_transp): Likewise.
|
||||
* dse.c (scan_reads_nospill): Likewise.
|
||||
(record_store, check_mem_read_rtx): Likewise. For non-const or
|
||||
frame addresses pass cselib_subst_to_values as mem_addr, for
|
||||
const or frame addresses canon_base_mem of the group plus
|
||||
optionally offset.
|
||||
(record_store, check_mem_read_rtx): Likewise. For non-const-or-frame
|
||||
addresses pass base->val_rtx as mem_addr, for const-or-frame addresses
|
||||
canon_base_addr of the group, plus optional offset.
|
||||
(struct group_info): Rename canon_base_mem to
|
||||
canon_base_addr.
|
||||
(get_group_info): Set canon_base_addr to canon_rtx of base, not
|
||||
canon_rtx of base_mem.
|
||||
|
||||
* gcc.dg/pr39794.c: New test.
|
||||
|
||||
--- gcc/alias.c.jj 2009-03-28 18:11:42.000000000 +0100
|
||||
+++ gcc/alias.c 2009-04-21 12:44:18.000000000 +0200
|
||||
@@ -2250,14 +2251,13 @@ true_dependence (const_rtx mem, enum mac
|
||||
--- gcc/alias.c.jj 2009-04-22 23:54:25.000000000 +0200
|
||||
+++ gcc/alias.c 2009-04-23 18:09:28.000000000 +0200
|
||||
@@ -2287,14 +2287,13 @@ true_dependence (const_rtx mem, enum mac
|
||||
Variant of true_dependence which assumes MEM has already been
|
||||
canonicalized (hence we no longer do that here).
|
||||
The mem_addr argument has been added, since true_dependence computed
|
||||
|
@ -34,7 +37,7 @@
|
|||
if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
|
||||
return 1;
|
||||
|
||||
@@ -2283,7 +2283,8 @@ canon_true_dependence (const_rtx mem, en
|
||||
@@ -2320,7 +2319,8 @@ canon_true_dependence (const_rtx mem, en
|
||||
if (nonoverlapping_memrefs_p (x, mem))
|
||||
return 0;
|
||||
|
||||
|
@ -44,8 +47,37 @@
|
|||
|
||||
if (! base_alias_check (x_addr, mem_addr, GET_MODE (x), mem_mode))
|
||||
return 0;
|
||||
--- gcc/dse.c.jj 2009-03-28 18:11:42.000000000 +0100
|
||||
+++ gcc/dse.c 2009-04-21 18:11:19.000000000 +0200
|
||||
--- gcc/dse.c.jj 2009-04-22 22:20:23.000000000 +0200
|
||||
+++ gcc/dse.c 2009-04-23 18:20:44.000000000 +0200
|
||||
@@ -223,7 +223,7 @@ struct store_info
|
||||
/* This canonized mem. */
|
||||
rtx mem;
|
||||
|
||||
- /* The result of get_addr on mem. */
|
||||
+ /* Canonized MEM address for use by canon_true_dependence. */
|
||||
rtx mem_addr;
|
||||
|
||||
/* If this is non-zero, it is the alias set of a spill location. */
|
||||
@@ -476,8 +476,8 @@ struct group_info
|
||||
do read dependency. */
|
||||
rtx base_mem;
|
||||
|
||||
- /* Canonized version of base_mem, most likely the same thing. */
|
||||
- rtx canon_base_mem;
|
||||
+ /* Canonized version of base_mem's address. */
|
||||
+ rtx canon_base_addr;
|
||||
|
||||
/* These two sets of two bitmaps are used to keep track of how many
|
||||
stores are actually referencing that position from this base. We
|
||||
@@ -705,7 +705,7 @@ get_group_info (rtx base)
|
||||
gi->rtx_base = base;
|
||||
gi->id = rtx_group_next_id++;
|
||||
gi->base_mem = gen_rtx_MEM (QImode, base);
|
||||
- gi->canon_base_mem = canon_rtx (gi->base_mem);
|
||||
+ gi->canon_base_addr = canon_rtx (base);
|
||||
gi->store1_n = BITMAP_ALLOC (NULL);
|
||||
gi->store1_p = BITMAP_ALLOC (NULL);
|
||||
gi->store2_n = BITMAP_ALLOC (NULL);
|
||||
@@ -1286,7 +1286,7 @@ static rtx get_stored_val (store_info_t,
|
||||
static int
|
||||
record_store (rtx body, bb_info_t bb_info)
|
||||
|
@ -55,28 +87,31 @@
|
|||
HOST_WIDE_INT offset = 0;
|
||||
HOST_WIDE_INT width = 0;
|
||||
alias_set_type spill_alias_set;
|
||||
@@ -1456,6 +1456,20 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
@@ -1456,6 +1456,23 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
ptr = active_local_stores;
|
||||
last = NULL;
|
||||
redundant_reason = NULL;
|
||||
+ mem = canon_rtx (mem);
|
||||
+ if (spill_alias_set || group_id < 0)
|
||||
+ {
|
||||
+ cselib_lookup (XEXP (mem, 0), Pmode, 1);
|
||||
+ mem_addr = cselib_subst_to_values (XEXP (mem, 0));
|
||||
+ }
|
||||
+ /* For alias_set != 0 canon_true_dependence should be never called. */
|
||||
+ if (spill_alias_set)
|
||||
+ mem_addr = NULL_RTX;
|
||||
+ else
|
||||
+ {
|
||||
+ group_info_t group
|
||||
+ = VEC_index (group_info_t, rtx_group_vec, group_id);
|
||||
+ mem_addr = group->canon_base_mem;
|
||||
+ if (group_id < 0)
|
||||
+ mem_addr = base->val_rtx;
|
||||
+ else
|
||||
+ {
|
||||
+ group_info_t group
|
||||
+ = VEC_index (group_info_t, rtx_group_vec, group_id);
|
||||
+ mem_addr = group->canon_base_addr;
|
||||
+ }
|
||||
+ if (offset)
|
||||
+ mem_addr = gen_rtx_PLUS (GET_MODE (mem_addr), mem_addr, GEN_INT (offset));
|
||||
+ mem_addr = plus_constant (mem_addr, offset);
|
||||
+ }
|
||||
|
||||
while (ptr)
|
||||
{
|
||||
@@ -1547,13 +1561,13 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
@@ -1547,13 +1564,13 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
if (canon_true_dependence (s_info->mem,
|
||||
GET_MODE (s_info->mem),
|
||||
s_info->mem_addr,
|
||||
|
@ -92,7 +127,7 @@
|
|||
/* An insn can be deleted if every position of every one of
|
||||
its s_infos is zero. */
|
||||
if (any_positions_needed_p (s_info)
|
||||
@@ -1580,9 +1594,9 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
@@ -1580,9 +1597,9 @@ record_store (rtx body, bb_info_t bb_inf
|
||||
/* Finish filling in the store_info. */
|
||||
store_info->next = insn_info->store_rec;
|
||||
insn_info->store_rec = store_info;
|
||||
|
@ -104,7 +139,7 @@
|
|||
store_info->cse_base = base;
|
||||
if (width > HOST_BITS_PER_WIDE_INT)
|
||||
{
|
||||
@@ -2006,7 +2020,7 @@ replace_read (store_info_t store_info, i
|
||||
@@ -2006,7 +2023,7 @@ replace_read (store_info_t store_info, i
|
||||
static int
|
||||
check_mem_read_rtx (rtx *loc, void *data)
|
||||
{
|
||||
|
@ -113,27 +148,30 @@
|
|||
bb_info_t bb_info;
|
||||
insn_info_t insn_info;
|
||||
HOST_WIDE_INT offset = 0;
|
||||
@@ -2058,6 +2072,19 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
@@ -2058,6 +2075,22 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
read_info->end = offset + width;
|
||||
read_info->next = insn_info->read_rec;
|
||||
insn_info->read_rec = read_info;
|
||||
+ if (spill_alias_set || group_id < 0)
|
||||
+ {
|
||||
+ cselib_lookup (XEXP (mem, 0), Pmode, 1);
|
||||
+ mem_addr = cselib_subst_to_values (XEXP (mem, 0));
|
||||
+ }
|
||||
+ /* For alias_set != 0 canon_true_dependence should be never called. */
|
||||
+ if (spill_alias_set)
|
||||
+ mem_addr = NULL_RTX;
|
||||
+ else
|
||||
+ {
|
||||
+ group_info_t group
|
||||
+ = VEC_index (group_info_t, rtx_group_vec, group_id);
|
||||
+ mem_addr = group->canon_base_mem;
|
||||
+ if (group_id < 0)
|
||||
+ mem_addr = base->val_rtx;
|
||||
+ else
|
||||
+ {
|
||||
+ group_info_t group
|
||||
+ = VEC_index (group_info_t, rtx_group_vec, group_id);
|
||||
+ mem_addr = group->canon_base_addr;
|
||||
+ }
|
||||
+ if (offset)
|
||||
+ mem_addr = gen_rtx_PLUS (GET_MODE (mem_addr), mem_addr, GEN_INT (offset));
|
||||
+ mem_addr = plus_constant (mem_addr, offset);
|
||||
+ }
|
||||
|
||||
/* We ignore the clobbers in store_info. The is mildly aggressive,
|
||||
but there really should not be a clobber followed by a read. */
|
||||
@@ -2128,7 +2155,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
@@ -2128,7 +2161,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
= canon_true_dependence (store_info->mem,
|
||||
GET_MODE (store_info->mem),
|
||||
store_info->mem_addr,
|
||||
|
@ -142,7 +180,7 @@
|
|||
|
||||
else if (group_id == store_info->group_id)
|
||||
{
|
||||
@@ -2139,7 +2166,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
@@ -2139,7 +2172,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
= canon_true_dependence (store_info->mem,
|
||||
GET_MODE (store_info->mem),
|
||||
store_info->mem_addr,
|
||||
|
@ -151,7 +189,7 @@
|
|||
|
||||
/* If this read is just reading back something that we just
|
||||
stored, rewrite the read. */
|
||||
@@ -2224,7 +2251,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
@@ -2224,7 +2257,7 @@ check_mem_read_rtx (rtx *loc, void *data
|
||||
remove = canon_true_dependence (store_info->mem,
|
||||
GET_MODE (store_info->mem),
|
||||
store_info->mem_addr,
|
||||
|
@ -160,26 +198,20 @@
|
|||
|
||||
if (remove)
|
||||
{
|
||||
@@ -3067,7 +3094,8 @@ scan_reads_nospill (insn_info_t insn_inf
|
||||
@@ -3066,8 +3099,9 @@ scan_reads_nospill (insn_info_t insn_inf
|
||||
if ((read_info->group_id < 0)
|
||||
&& canon_true_dependence (group->base_mem,
|
||||
QImode,
|
||||
group->canon_base_mem,
|
||||
- group->canon_base_mem,
|
||||
- read_info->mem, rtx_varies_p))
|
||||
+ group->canon_base_addr,
|
||||
+ read_info->mem, NULL_RTX,
|
||||
+ rtx_varies_p))
|
||||
{
|
||||
if (kill)
|
||||
bitmap_ior_into (kill, group->group_kill);
|
||||
--- gcc/cse.c.jj 2009-03-28 18:11:42.000000000 +0100
|
||||
+++ gcc/cse.c 2009-04-21 11:18:02.000000000 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Common subexpression elimination for GNU compiler.
|
||||
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998
|
||||
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
--- gcc/cse.c.jj 2009-04-22 22:20:23.000000000 +0200
|
||||
+++ gcc/cse.c 2009-04-23 18:09:35.000000000 +0200
|
||||
@@ -1658,7 +1658,7 @@ check_dependence (rtx *x, void *data)
|
||||
{
|
||||
struct check_dependence_data *d = (struct check_dependence_data *) data;
|
||||
|
@ -189,9 +221,9 @@
|
|||
cse_rtx_varies_p);
|
||||
else
|
||||
return 0;
|
||||
--- gcc/rtl.h.jj 2009-03-28 18:11:43.000000000 +0100
|
||||
+++ gcc/rtl.h 2009-04-21 11:17:04.000000000 +0200
|
||||
@@ -2282,7 +2282,7 @@ extern rtx canon_rtx (rtx);
|
||||
--- gcc/rtl.h.jj 2009-04-22 22:20:37.000000000 +0200
|
||||
+++ gcc/rtl.h 2009-04-23 18:09:35.000000000 +0200
|
||||
@@ -2290,7 +2290,7 @@ extern rtx canon_rtx (rtx);
|
||||
extern int true_dependence (const_rtx, enum machine_mode, const_rtx, bool (*)(const_rtx, bool));
|
||||
extern rtx get_addr (rtx);
|
||||
extern int canon_true_dependence (const_rtx, enum machine_mode, rtx, const_rtx,
|
||||
|
@ -200,8 +232,8 @@
|
|||
extern int read_dependence (const_rtx, const_rtx);
|
||||
extern int anti_dependence (const_rtx, const_rtx);
|
||||
extern int output_dependence (const_rtx, const_rtx);
|
||||
--- gcc/cselib.c.jj 2009-03-28 18:11:43.000000000 +0100
|
||||
+++ gcc/cselib.c 2009-04-21 11:18:25.000000000 +0200
|
||||
--- gcc/cselib.c.jj 2009-04-22 22:20:23.000000000 +0200
|
||||
+++ gcc/cselib.c 2009-04-23 18:09:35.000000000 +0200
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Common subexpression elimination library for GNU compiler.
|
||||
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
|
@ -219,8 +251,8 @@
|
|||
{
|
||||
has_mem = true;
|
||||
num_mems++;
|
||||
--- gcc/gcse.c.jj 2009-03-28 18:11:42.000000000 +0100
|
||||
+++ gcc/gcse.c 2009-04-21 11:19:20.000000000 +0200
|
||||
--- gcc/gcse.c.jj 2009-04-22 22:20:23.000000000 +0200
|
||||
+++ gcc/gcse.c 2009-04-23 18:09:35.000000000 +0200
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Global common subexpression elimination/Partial redundancy elimination
|
||||
and global constant/copy propagation for GNU compiler.
|
||||
|
@ -230,7 +262,7 @@
|
|||
|
||||
This file is part of GCC.
|
||||
|
||||
@@ -2516,7 +2516,7 @@ compute_transp (const_rtx x, int indx, s
|
||||
@@ -2512,7 +2512,7 @@ compute_transp (const_rtx x, int indx, s
|
||||
dest_addr = XEXP (list_entry, 0);
|
||||
|
||||
if (canon_true_dependence (dest, GET_MODE (dest), dest_addr,
|
||||
|
@ -239,10 +271,10 @@
|
|||
{
|
||||
if (set_p)
|
||||
SET_BIT (bmap[bb_index], indx);
|
||||
--- gcc/testsuite/gcc.dg/pr39794.c.jj 2009-04-21 13:08:45.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr39794.c 2009-04-21 13:07:29.000000000 +0200
|
||||
--- gcc/testsuite/gcc.dg/pr39794.c.jj 2009-04-23 18:09:35.000000000 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr39794.c 2009-04-23 18:21:13.000000000 +0200
|
||||
@@ -0,0 +1,33 @@
|
||||
+/* PR middle-end/39794 */
|
||||
+/* PR rtl-optimization/39794 */
|
||||
+/* { dg-do run } */
|
||||
+/* { dg-options "-O2 -funroll-loops" } */
|
||||
+
|
||||
|
|
|
@ -0,0 +1,70 @@
|
|||
2009-04-24 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
PR middle-end/39867
|
||||
* fold-const.c (fold_cond_expr_with_comparison): When folding
|
||||
> and >= to MAX, make sure the MAX uses the same type as the
|
||||
comparison's operands.
|
||||
|
||||
* gcc.dg/pr39867.c: New.
|
||||
|
||||
--- gcc/fold-const.c (revision 146581)
|
||||
+++ gcc/fold-const.c (working copy)
|
||||
@@ -5337,31 +5337,34 @@ fold_cond_expr_with_comparison (tree typ
|
||||
break;
|
||||
|
||||
case GT_EXPR:
|
||||
- /* If C1 is C2 - 1, this is max(A, C2). */
|
||||
+ /* If C1 is C2 - 1, this is max(A, C2), but use ARG00's type for
|
||||
+ MAX_EXPR, to preserve the signedness of the comparison. */
|
||||
if (! operand_equal_p (arg2, TYPE_MIN_VALUE (type),
|
||||
OEP_ONLY_CONST)
|
||||
&& operand_equal_p (arg01,
|
||||
const_binop (MINUS_EXPR, arg2,
|
||||
build_int_cst (type, 1), 0),
|
||||
OEP_ONLY_CONST))
|
||||
- return pedantic_non_lvalue (fold_build2 (MAX_EXPR,
|
||||
- type,
|
||||
- fold_convert (type, arg1),
|
||||
- arg2));
|
||||
+ return pedantic_non_lvalue (fold_convert (type,
|
||||
+ fold_build2 (MAX_EXPR, TREE_TYPE (arg00),
|
||||
+ arg00,
|
||||
+ fold_convert (TREE_TYPE (arg00),
|
||||
+ arg2))));
|
||||
break;
|
||||
|
||||
case GE_EXPR:
|
||||
- /* If C1 is C2 + 1, this is max(A, C2). */
|
||||
+ /* If C1 is C2 + 1, this is max(A, C2), with the same care as above. */
|
||||
if (! operand_equal_p (arg2, TYPE_MAX_VALUE (type),
|
||||
OEP_ONLY_CONST)
|
||||
&& operand_equal_p (arg01,
|
||||
const_binop (PLUS_EXPR, arg2,
|
||||
build_int_cst (type, 1), 0),
|
||||
OEP_ONLY_CONST))
|
||||
- return pedantic_non_lvalue (fold_build2 (MAX_EXPR,
|
||||
- type,
|
||||
- fold_convert (type, arg1),
|
||||
- arg2));
|
||||
+ return pedantic_non_lvalue (fold_convert (type,
|
||||
+ fold_build2 (MAX_EXPR, TREE_TYPE (arg00),
|
||||
+ arg00,
|
||||
+ fold_convert (TREE_TYPE (arg00),
|
||||
+ arg2))));
|
||||
break;
|
||||
case NE_EXPR:
|
||||
break;
|
||||
--- gcc/testsuite/gcc.dg/pr39867.c 2009-04-21 23:33:56.143009234 +0200
|
||||
+++ gcc/testsuite/gcc.dg/pr39867.c 2009-04-24 09:20:07.000000000 +0200
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* { dg-do link } */
|
||||
+/* { dg-options "-O2" } */
|
||||
+
|
||||
+int main (void)
|
||||
+{
|
||||
+ int exp = -1;
|
||||
+ /* Wrong folding of the LHS to an unsigned MAX leads to 4294967295 > 2. */
|
||||
+ if ((exp < 2 ? 2U : (unsigned int) exp) != 2)
|
||||
+ link_error ();
|
||||
+ return 0;
|
||||
+}
|
Loading…
Reference in New Issue