gcc-4.6: Switch to using svn SRC_URI for recipe

We call the recipes 4.6
Remove the backport patches

(From OE-Core rev: 68b545f4ff719f2b6e57d68b002dc9845c7a14ae)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2011-06-17 17:11:43 -07:00 committed by Richard Purdie
parent c2007ba4cd
commit 0faa5f7299
374 changed files with 22 additions and 741304 deletions

View File

@ -1,70 +0,0 @@
From af3385141f9bfe32ab89165bfc98a7ea2ff19278 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:19:36 +0000
Subject: [PATCH] Backport from mainline
2011-03-17 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/48141
* dse.c (record_store): If no positions are needed in an insn
that cannot be deleted, at least unchain it from active_local_stores.
* gcc.dg/pr48141.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171545 138bc75d-0d04-0410-961f-82ee72b054a4
index 8e9b645..e43ab72 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1,5 +1,5 @@
/* RTL dead store elimination.
- Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+ Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Richard Sandiford <rsandifor@codesourcery.com>
@@ -1530,8 +1530,7 @@ record_store (rtx body, bb_info_t bb_info)
/* An insn can be deleted if every position of every one of
its s_infos is zero. */
- if (any_positions_needed_p (s_info)
- || ptr->cannot_delete)
+ if (any_positions_needed_p (s_info))
del = false;
if (del)
@@ -1543,7 +1542,8 @@ record_store (rtx body, bb_info_t bb_info)
else
active_local_stores = ptr->next_local_store;
- delete_dead_store_insn (insn_to_delete);
+ if (!insn_to_delete->cannot_delete)
+ delete_dead_store_insn (insn_to_delete);
}
else
last = ptr;
new file mode 100644
index 0000000..006f5cb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48141.c
@@ -0,0 +1,17 @@
+/* PR rtl-optimization/48141 */
+/* { dg-do compile } */
+/* { dg-options "-O" } */
+
+#define A i = 0;
+#define B A A A A A A A A A A
+#define C B B B B B B B B B B
+#define D C C C C C C C C C C
+#define E D D D D D D D D D D
+
+int
+foo (void)
+{
+ volatile int i = 0;
+ E E E E E E E E E E E
+ return 0;
+}
--
1.7.0.4

View File

@ -1,164 +0,0 @@
From 540b311d6b6aa2e50a9feb45255361e498bb5198 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:20:34 +0000
Subject: [PATCH] Backport from mainline
2011-03-17 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/48141
* params.def (PARAM_MAX_DSE_ACTIVE_LOCAL_STORES): New.
* dse.c: Include params.h.
(active_local_stores_len): New variable.
(add_wild_read, dse_step1): Clear it when setting active_local_stores
to NULL.
(record_store, check_mem_read_rtx): Decrease it when removing
from the chain.
(scan_insn): Likewise. Increase it when adding to chain, if it
reaches PARAM_MAX_DSE_ACTIVE_LOCAL_STORES limit, set to 1 and
set active_local_stores to NULL before the addition.
* Makefile.in (dse.o): Depend on $(PARAMS_H).
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171546 138bc75d-0d04-0410-961f-82ee72b054a4
index 9a8262a..792ca6c 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -3070,7 +3070,7 @@ dse.o : dse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(TREE_H) $(TM_P_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
$(RECOG_H) $(EXPR_H) $(DF_H) cselib.h $(DBGCNT_H) $(TIMEVAR_H) \
$(TREE_PASS_H) alloc-pool.h $(ALIAS_H) dse.h $(OPTABS_H) $(TARGET_H) \
- $(BITMAP_H)
+ $(BITMAP_H) $(PARAMS_H)
fwprop.o : fwprop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(DIAGNOSTIC_CORE_H) insn-config.h $(RECOG_H) $(FLAGS_H) $(OBSTACK_H) $(BASIC_BLOCK_H) \
output.h $(DF_H) alloc-pool.h $(TIMEVAR_H) $(TREE_PASS_H) $(TARGET_H) \
diff --git a/gcc/dse.c b/gcc/dse.c
index e43ab72..a15b735 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -47,6 +47,7 @@ along with GCC; see the file COPYING3. If not see
#include "optabs.h"
#include "dbgcnt.h"
#include "target.h"
+#include "params.h"
/* This file contains three techniques for performing Dead Store
Elimination (dse).
@@ -387,6 +388,7 @@ static alloc_pool insn_info_pool;
/* The linked list of stores that are under consideration in this
basic block. */
static insn_info_t active_local_stores;
+static int active_local_stores_len;
struct bb_info
{
@@ -947,6 +949,7 @@ add_wild_read (bb_info_t bb_info)
}
insn_info->wild_read = true;
active_local_stores = NULL;
+ active_local_stores_len = 0;
}
@@ -1537,6 +1540,7 @@ record_store (rtx body, bb_info_t bb_info)
{
insn_info_t insn_to_delete = ptr;
+ active_local_stores_len--;
if (last)
last->next_local_store = ptr->next_local_store;
else
@@ -2074,6 +2078,7 @@ check_mem_read_rtx (rtx *loc, void *data)
if (dump_file)
dump_insn_info ("removing from active", i_ptr);
+ active_local_stores_len--;
if (last)
last->next_local_store = i_ptr->next_local_store;
else
@@ -2163,6 +2168,7 @@ check_mem_read_rtx (rtx *loc, void *data)
if (dump_file)
dump_insn_info ("removing from active", i_ptr);
+ active_local_stores_len--;
if (last)
last->next_local_store = i_ptr->next_local_store;
else
@@ -2222,6 +2228,7 @@ check_mem_read_rtx (rtx *loc, void *data)
if (dump_file)
dump_insn_info ("removing from active", i_ptr);
+ active_local_stores_len--;
if (last)
last->next_local_store = i_ptr->next_local_store;
else
@@ -2426,6 +2433,7 @@ scan_insn (bb_info_t bb_info, rtx insn)
if (dump_file)
dump_insn_info ("removing from active", i_ptr);
+ active_local_stores_len--;
if (last)
last->next_local_store = i_ptr->next_local_store;
else
@@ -2453,6 +2461,12 @@ scan_insn (bb_info_t bb_info, rtx insn)
fprintf (dump_file, "handling memset as BLKmode store\n");
if (mems_found == 1)
{
+ if (active_local_stores_len++
+ >= PARAM_VALUE (PARAM_MAX_DSE_ACTIVE_LOCAL_STORES))
+ {
+ active_local_stores_len = 1;
+ active_local_stores = NULL;
+ }
insn_info->next_local_store = active_local_stores;
active_local_stores = insn_info;
}
@@ -2496,6 +2510,12 @@ scan_insn (bb_info_t bb_info, rtx insn)
it as cannot delete. This simplifies the processing later. */
if (mems_found == 1)
{
+ if (active_local_stores_len++
+ >= PARAM_VALUE (PARAM_MAX_DSE_ACTIVE_LOCAL_STORES))
+ {
+ active_local_stores_len = 1;
+ active_local_stores = NULL;
+ }
insn_info->next_local_store = active_local_stores;
active_local_stores = insn_info;
}
@@ -2534,6 +2554,7 @@ remove_useless_values (cselib_val *base)
if (del)
{
+ active_local_stores_len--;
if (last)
last->next_local_store = insn_info->next_local_store;
else
@@ -2584,6 +2605,7 @@ dse_step1 (void)
= create_alloc_pool ("cse_store_info_pool",
sizeof (struct store_info), 100);
active_local_stores = NULL;
+ active_local_stores_len = 0;
cselib_clear_table ();
/* Scan the insns. */
diff --git a/gcc/params.def b/gcc/params.def
index 5749eb2..e5a82e9 100644
--- a/gcc/params.def
+++ b/gcc/params.def
@@ -698,6 +698,12 @@ DEFPARAM(PARAM_MAX_SCHED_READY_INSNS,
"The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass",
100, 0, 0)
+/* This is the maximum number of active local stores RTL DSE will consider. */
+DEFPARAM (PARAM_MAX_DSE_ACTIVE_LOCAL_STORES,
+ "max-dse-active-local-stores",
+ "Maximum number of active local stores in RTL dead store elimination",
+ 5000, 0, 0)
+
/* Prefetching and cache-optimizations related parameters. Default values are
usually set by machine description. */
--
1.7.0.4

View File

@ -1,93 +0,0 @@
From 125ee3cf946de59472c02ffd792aca4f1045669f Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:21:34 +0000
Subject: [PATCH] Backport from mainline
2011-03-20 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/48156
* df-core.c (df_get_bb_dirty): Use df_lr if df_live is NULL,
assume df and df_lr are not NULL.
* gcc.dg/pr48156.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171547 138bc75d-0d04-0410-961f-82ee72b054a4
index 36270bf..98c2088 100644
--- a/gcc/df-core.c
+++ b/gcc/df-core.c
@@ -1,6 +1,6 @@
/* Allocation for dataflow support routines.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
- 2008, 2009, 2010 Free Software Foundation, Inc.
+ 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
Originally contributed by Michael P. Hayes
(m.hayes@elec.canterbury.ac.nz, mhayes@redhat.com)
Major rewrite contributed by Danny Berlin (dberlin@dberlin.org)
@@ -1400,10 +1400,9 @@ df_mark_solutions_dirty (void)
bool
df_get_bb_dirty (basic_block bb)
{
- if (df && df_live)
- return bitmap_bit_p (df_live->out_of_date_transfer_functions, bb->index);
- else
- return false;
+ return bitmap_bit_p ((df_live
+ ? df_live : df_lr)->out_of_date_transfer_functions,
+ bb->index);
}
new file mode 100644
index 0000000..7b4d529
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48156.c
@@ -0,0 +1,45 @@
+/* PR rtl-optimization/48156 */
+/* { dg-do run } */
+/* { dg-options "-O -fcrossjumping --param min-crossjump-insns=1" } */
+
+extern void abort (void);
+
+static int __attribute__ ((noinline, noclone))
+equals (int s1, int s2)
+{
+ return s1 == s2;
+}
+
+static int __attribute__ ((noinline, noclone))
+bar (void)
+{
+ return 1;
+}
+
+static void __attribute__ ((noinline, noclone))
+baz (int f, int j)
+{
+ if (f != 4 || j != 2)
+ abort ();
+}
+
+void
+foo (int x)
+{
+ int i = 0, j = bar ();
+
+ if (x == 1)
+ i = 2;
+
+ if (j && equals (i, j))
+ baz (8, i);
+ else
+ baz (4, i);
+}
+
+int
+main ()
+{
+ foo (1);
+ return 0;
+}
--
1.7.0.4

View File

@ -1,94 +0,0 @@
From 5bc59e25607b755798008d5e0d79ca4cea6711ed Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:23:01 +0000
Subject: [PATCH] Backport from mainline
2011-03-20 Jakub Jelinek <jakub@redhat.com>
PR c/42544
PR c/48197
* c-common.c (shorten_compare): If primopN is first sign-extended
to opN and then zero-extended to result type, set primopN to opN.
* gcc.c-torture/execute/pr42544.c: New test.
* gcc.c-torture/execute/pr48197.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171548 138bc75d-0d04-0410-961f-82ee72b054a4
index 4da9a2d..c0c01b2 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -3300,6 +3300,20 @@ shorten_compare (tree *op0_ptr, tree *op1_ptr, tree *restype_ptr,
primop0 = get_narrower (op0, &unsignedp0);
primop1 = get_narrower (op1, &unsignedp1);
+ /* If primopN is first sign-extended from primopN's precision to opN's
+ precision, then zero-extended from opN's precision to
+ *restype_ptr precision, shortenings might be invalid. */
+ if (TYPE_PRECISION (TREE_TYPE (primop0)) < TYPE_PRECISION (TREE_TYPE (op0))
+ && TYPE_PRECISION (TREE_TYPE (op0)) < TYPE_PRECISION (*restype_ptr)
+ && !unsignedp0
+ && TYPE_UNSIGNED (TREE_TYPE (op0)))
+ primop0 = op0;
+ if (TYPE_PRECISION (TREE_TYPE (primop1)) < TYPE_PRECISION (TREE_TYPE (op1))
+ && TYPE_PRECISION (TREE_TYPE (op1)) < TYPE_PRECISION (*restype_ptr)
+ && !unsignedp1
+ && TYPE_UNSIGNED (TREE_TYPE (op1)))
+ primop1 = op1;
+
/* Handle the case that OP0 does not *contain* a conversion
but it *requires* conversion to FINAL_TYPE. */
new file mode 100644
index 0000000..c5951b0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr42544.c
@@ -0,0 +1,14 @@
+/* PR c/42544 */
+
+extern void abort (void);
+
+int
+main ()
+{
+ signed short s = -1;
+ if (sizeof (long long) == sizeof (unsigned int))
+ return 0;
+ if ((unsigned int) s >= 0x100000000ULL)
+ abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr48197.c b/gcc/testsuite/gcc.c-torture/execute/pr48197.c
new file mode 100644
index 0000000..37812c0
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr48197.c
@@ -0,0 +1,25 @@
+/* PR c/48197 */
+
+extern void abort (void);
+static int y = 0x8000;
+
+int
+main ()
+{
+ unsigned int x = (short)y;
+ if (sizeof (0LL) == sizeof (0U))
+ return 0;
+ if (0LL > (0U ^ (short)-0x8000))
+ abort ();
+ if (0LL > (0U ^ x))
+ abort ();
+ if (0LL > (0U ^ (short)y))
+ abort ();
+ if ((0U ^ (short)-0x8000) < 0LL)
+ abort ();
+ if ((0U ^ x) < 0LL)
+ abort ();
+ if ((0U ^ (short)y) < 0LL)
+ abort ();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,58 +0,0 @@
From b6ed53c51ca6090f3f422e6223e8dc3b150f0393 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:24:06 +0000
Subject: [PATCH] Backport from mainline
2011-03-24 Jakub Jelinek <jakub@redhat.com>
PR debug/48204
* simplify-rtx.c (simplify_const_unary_operation): Call
real_convert when changing mode class with FLOAT_EXTEND.
* gcc.dg/dfp/pr48204.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171549 138bc75d-0d04-0410-961f-82ee72b054a4
index ce4eab4..ed6ae2b 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -1526,7 +1526,8 @@ simplify_const_unary_operation (enum rtx_code code, enum machine_mode mode,
}
else if (GET_CODE (op) == CONST_DOUBLE
- && SCALAR_FLOAT_MODE_P (mode))
+ && SCALAR_FLOAT_MODE_P (mode)
+ && SCALAR_FLOAT_MODE_P (GET_MODE (op)))
{
REAL_VALUE_TYPE d, t;
REAL_VALUE_FROM_CONST_DOUBLE (d, op);
@@ -1549,7 +1550,10 @@ simplify_const_unary_operation (enum rtx_code code, enum machine_mode mode,
d = real_value_truncate (mode, d);
break;
case FLOAT_EXTEND:
- /* All this does is change the mode. */
+ /* All this does is change the mode, unless changing
+ mode class. */
+ if (GET_MODE_CLASS (mode) != GET_MODE_CLASS (GET_MODE (op)))
+ real_convert (&d, mode, &d);
break;
case FIX:
real_arithmetic (&d, FIX_TRUNC_EXPR, &d, NULL);
new file mode 100644
index 0000000..7b42158
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/dfp/pr48204.c
@@ -0,0 +1,10 @@
+/* PR debug/48204 */
+/* { dg-do compile } */
+/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts -fno-tree-fre -g" } */
+
+void
+foo (void)
+{
+ float cf = 3.0f;
+ _Decimal64 d64 = cf;
+}
--
1.7.0.4

View File

@ -1,27 +0,0 @@
From d4d74232bca4968da87cd8157cc2d6139115946e Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 09:24:53 +0000
Subject: [PATCH] Backport from mainline
2011-03-25 Jakub Jelinek <jakub@redhat.com>
* printf/printf_fp.c (__quadmath_printf_fp): Use memcpy instead of
mempcpy.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171550 138bc75d-0d04-0410-961f-82ee72b054a4
index 4a63be9..eb66372 100644
--- a/libquadmath/printf/printf_fp.c
+++ b/libquadmath/printf/printf_fp.c
@@ -1197,7 +1197,7 @@ __quadmath_printf_fp (struct __quadmath_printf_file *fp,
if (*copywc == decimalwc)
memcpy (cp, decimal, decimal_len), cp += decimal_len;
else if (*copywc == thousands_sepwc)
- mempcpy (cp, thousands_sep, thousands_sep_len), cp += thousands_sep_len;
+ memcpy (cp, thousands_sep, thousands_sep_len), cp += thousands_sep_len;
else
*cp++ = (char) *copywc;
}
--
1.7.0.4

View File

@ -1,61 +0,0 @@
From 6bb9234e718d4b75a9a1e63d523d08c3392ba55f Mon Sep 17 00:00:00 2001
From: paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 10:02:34 +0000
Subject: [PATCH] 2011-03-26 Paolo Carlini <paolo.carlini@oracle.com>
* include/bits/random.h (negative_binomial_distribution<>::
negative_binomial_distribution(_IntType, double),
negative_binomial_distribution<>::
negative_binomial_distribution(const param_type&)): Fix thinko
p / (1 - p) for (1 - p) / p.
* include/bits/random.tcc (negative_binomial_distribution<>::
operator()): Fix.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171553 138bc75d-0d04-0410-961f-82ee72b054a4
index 26cec8a..988ee61 100644
--- a/libstdc++-v3/include/bits/random.h
+++ b/libstdc++-v3/include/bits/random.h
@@ -3782,7 +3782,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
param_type(_IntType __k = 1, double __p = 0.5)
: _M_k(__k), _M_p(__p)
- { }
+ {
+ _GLIBCXX_DEBUG_ASSERT((_M_k > 0) && (_M_p > 0.0) && (_M_p <= 1.0));
+ }
_IntType
k() const
@@ -3803,12 +3805,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
explicit
negative_binomial_distribution(_IntType __k = 1, double __p = 0.5)
- : _M_param(__k, __p), _M_gd(__k, __p / (1.0 - __p))
+ : _M_param(__k, __p), _M_gd(__k, (1.0 - __p) / __p)
{ }
explicit
negative_binomial_distribution(const param_type& __p)
- : _M_param(__p), _M_gd(__p.k(), __p.p() / (1.0 - __p.p()))
+ : _M_param(__p), _M_gd(__p.k(), (1.0 - __p.p()) / __p.p())
{ }
/**
diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc
index 4b17e91..e81392f 100644
--- a/libstdc++-v3/include/bits/random.tcc
+++ b/libstdc++-v3/include/bits/random.tcc
@@ -1100,7 +1100,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
param_type;
const double __y =
- _M_gd(__urng, param_type(__p.k(), __p.p() / (1.0 - __p.p())));
+ _M_gd(__urng, param_type(__p.k(), (1.0 - __p.p()) / __p.p()));
std::poisson_distribution<result_type> __poisson(__y);
return __poisson(__urng);
--
1.7.0.4

View File

@ -1,226 +0,0 @@
From 8c9cc2d03061ea065b70695ef4903a0390c01fb8 Mon Sep 17 00:00:00 2001
From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 26 Mar 2011 18:41:02 +0000
Subject: [PATCH] Backport from mainline:
2011-03-24 Uros Bizjak <ubizjak@gmail.com>
PR target/48237
* config/i386/i386.md (*movdf_internal_rex64): Do not split
alternatives that can be handled with movq or movabsq insn.
(*movdf_internal): Disable for !TARGET_64BIT.
(*movdf_internal_nointeger): Ditto.
* config/i386/i386.c (ix86_print_operand): Handle DFmode immediates.
testsuite/ChangeLog:
Backport from mainline:
2011-03-24 Uros Bizjak <ubizjak@gmail.com>
PR target/48237
* gcc.target/i386/pr48237.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171560 138bc75d-0d04-0410-961f-82ee72b054a4
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 82d999b..4fb654f 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -14389,17 +14389,21 @@ ix86_print_operand (FILE *file, rtx x, int code)
fprintf (file, "0x%08x", (unsigned int) l);
}
- /* These float cases don't actually occur as immediate operands. */
else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode)
{
- char dstr[30];
+ REAL_VALUE_TYPE r;
+ long l[2];
- real_to_decimal (dstr, CONST_DOUBLE_REAL_VALUE (x), sizeof (dstr), 0, 1);
- fputs (dstr, file);
+ REAL_VALUE_FROM_CONST_DOUBLE (r, x);
+ REAL_VALUE_TO_TARGET_DOUBLE (r, l);
+
+ if (ASSEMBLER_DIALECT == ASM_ATT)
+ putc ('$', file);
+ fprintf (file, "0x%lx%08lx", l[1] & 0xffffffff, l[0] & 0xffffffff);
}
- else if (GET_CODE (x) == CONST_DOUBLE
- && GET_MODE (x) == XFmode)
+ /* These float cases don't actually occur as immediate operands. */
+ else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == XFmode)
{
char dstr[30];
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index a17ab7a..b50a52a 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2906,9 +2906,9 @@
(define_insn "*movdf_internal_rex64"
[(set (match_operand:DF 0 "nonimmediate_operand"
- "=f,m,f,r ,m ,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
+ "=f,m,f,r ,m,!r,!m,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
(match_operand:DF 1 "general_operand"
- "fm,f,G,rmF,Fr,C ,Y2*x,m ,Y2*x,r ,Yi"))]
+ "fm,f,G,rm,r,F ,F ,C ,Y2*x,m ,Y2*x,r ,Yi"))]
"TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
&& (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
@@ -2929,9 +2929,15 @@
case 3:
case 4:
- return "#";
+ return "mov{q}\t{%1, %0|%0, %1}";
case 5:
+ return "movabs{q}\t{%1, %0|%0, %1}";
+
+ case 6:
+ return "#";
+
+ case 7:
switch (get_attr_mode (insn))
{
case MODE_V4SF:
@@ -2949,9 +2955,9 @@
default:
gcc_unreachable ();
}
- case 6:
- case 7:
case 8:
+ case 9:
+ case 10:
switch (get_attr_mode (insn))
{
case MODE_V4SF:
@@ -2986,17 +2992,27 @@
gcc_unreachable ();
}
- case 9:
- case 10:
+ case 11:
+ case 12:
return "%vmovd\t{%1, %0|%0, %1}";
default:
gcc_unreachable();
}
}
- [(set_attr "type" "fmov,fmov,fmov,multi,multi,sselog1,ssemov,ssemov,ssemov,ssemov,ssemov")
+ [(set_attr "type" "fmov,fmov,fmov,imov,imov,imov,multi,sselog1,ssemov,ssemov,ssemov,ssemov,ssemov")
+ (set (attr "modrm")
+ (if_then_else
+ (and (eq_attr "alternative" "5") (eq_attr "type" "imov"))
+ (const_string "0")
+ (const_string "*")))
+ (set (attr "length_immediate")
+ (if_then_else
+ (and (eq_attr "alternative" "5") (eq_attr "type" "imov"))
+ (const_string "8")
+ (const_string "*")))
(set (attr "prefix")
- (if_then_else (eq_attr "alternative" "0,1,2,3,4")
+ (if_then_else (eq_attr "alternative" "0,1,2,3,4,5,6")
(const_string "orig")
(const_string "maybe_vex")))
(set (attr "prefix_data16")
@@ -3006,18 +3022,18 @@
(set (attr "mode")
(cond [(eq_attr "alternative" "0,1,2")
(const_string "DF")
- (eq_attr "alternative" "3,4,9,10")
+ (eq_attr "alternative" "3,4,5,6,11,12")
(const_string "DI")
/* For SSE1, we have many fewer alternatives. */
(eq (symbol_ref "TARGET_SSE2") (const_int 0))
- (cond [(eq_attr "alternative" "5,6")
+ (cond [(eq_attr "alternative" "7,8")
(const_string "V4SF")
]
(const_string "V2SF"))
/* xorps is one byte shorter. */
- (eq_attr "alternative" "5")
+ (eq_attr "alternative" "7")
(cond [(ne (symbol_ref "optimize_function_for_size_p (cfun)")
(const_int 0))
(const_string "V4SF")
@@ -3032,7 +3048,7 @@
chains, otherwise use short move to avoid extra work.
movaps encodes one byte shorter. */
- (eq_attr "alternative" "6")
+ (eq_attr "alternative" "8")
(cond
[(ne (symbol_ref "optimize_function_for_size_p (cfun)")
(const_int 0))
@@ -3045,7 +3061,7 @@
/* For architectures resolving dependencies on register
parts we may avoid extra work to zero out upper part
of register. */
- (eq_attr "alternative" "7")
+ (eq_attr "alternative" "9")
(if_then_else
(ne (symbol_ref "TARGET_SSE_SPLIT_REGS")
(const_int 0))
@@ -3059,7 +3075,7 @@
"=f,m,f,r ,o ,Y2*x,Y2*x,Y2*x,m ")
(match_operand:DF 1 "general_operand"
"fm,f,G,roF,Fr,C ,Y2*x,m ,Y2*x"))]
- "!(MEM_P (operands[0]) && MEM_P (operands[1]))
+ "!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
&& optimize_function_for_speed_p (cfun)
&& TARGET_INTEGER_DFMODE_MOVES
&& (reload_in_progress || reload_completed
@@ -3199,9 +3215,9 @@
"=f,m,f,*r ,o ,Y2*x,Y2*x,Y2*x ,m ")
(match_operand:DF 1 "general_operand"
"fm,f,G,*roF,*Fr,C ,Y2*x,mY2*x,Y2*x"))]
- "!(MEM_P (operands[0]) && MEM_P (operands[1]))
- && ((optimize_function_for_size_p (cfun)
- || !TARGET_INTEGER_DFMODE_MOVES) && !TARGET_64BIT)
+ "!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))
+ && (optimize_function_for_size_p (cfun)
+ || !TARGET_INTEGER_DFMODE_MOVES)
&& (reload_in_progress || reload_completed
|| (ix86_cmodel == CM_MEDIUM || ix86_cmodel == CM_LARGE)
|| (!(TARGET_SSE2 && TARGET_SSE_MATH)
new file mode 100644
index 0000000..e20446e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr48237.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fcaller-saves -fschedule-insns2 -fselective-scheduling2 -mtune=core2" } */
+
+union double_union
+{
+ double d;
+ int i[2];
+};
+
+void bar (int, ...);
+
+void
+foo (double d)
+{
+ union double_union du = { d };
+ while (1)
+ {
+ du.i[1] -= 0x100000L;
+ bar (0, du.d);
+ du.d += d;
+ }
+}
--
1.7.0.4

View File

@ -1,312 +0,0 @@
From e2965db317ee7efd916963c87b9c34023eefda54 Mon Sep 17 00:00:00 2001
From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 27 Mar 2011 20:08:35 +0000
Subject: [PATCH] 2011-03-27 Jonathan Wakely <jwakely.gcc@gmail.com>
PR other/48179
PR other/48221
PR other/48234
* doc/extend.texi (Alignment): Move section to match order in TOC.
* doc/invoke.texi (i386 and x86-64 Windows Options): Likewise.
(Warning Options): Adjust -Wno-cpp summary and remove stray backslash.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171581 138bc75d-0d04-0410-961f-82ee72b054a4
index c897101..998d703 100644
--- a/gcc/doc/extend.texi
+++ b/gcc/doc/extend.texi
@@ -4180,42 +4180,6 @@ machines, typically because the target assembler does not allow them.
You can use the sequence @samp{\e} in a string or character constant to
stand for the ASCII character @key{ESC}.
-@node Alignment
-@section Inquiring on Alignment of Types or Variables
-@cindex alignment
-@cindex type alignment
-@cindex variable alignment
-
-The keyword @code{__alignof__} allows you to inquire about how an object
-is aligned, or the minimum alignment usually required by a type. Its
-syntax is just like @code{sizeof}.
-
-For example, if the target machine requires a @code{double} value to be
-aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
-This is true on many RISC machines. On more traditional machine
-designs, @code{__alignof__ (double)} is 4 or even 2.
-
-Some machines never actually require alignment; they allow reference to any
-data type even at an odd address. For these machines, @code{__alignof__}
-reports the smallest alignment that GCC will give the data type, usually as
-mandated by the target ABI.
-
-If the operand of @code{__alignof__} is an lvalue rather than a type,
-its value is the required alignment for its type, taking into account
-any minimum alignment specified with GCC's @code{__attribute__}
-extension (@pxref{Variable Attributes}). For example, after this
-declaration:
-
-@smallexample
-struct foo @{ int x; char y; @} foo1;
-@end smallexample
-
-@noindent
-the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
-alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
-
-It is an error to ask for the alignment of an incomplete type.
-
@node Variable Attributes
@section Specifying Attributes of Variables
@cindex attribute of variables
@@ -5224,6 +5188,42 @@ allows one to declare vector data types supported by the Sony/Toshiba/IBM SPU
Language Extensions Specification. It is intended to support the
@code{__vector} keyword.
+@node Alignment
+@section Inquiring on Alignment of Types or Variables
+@cindex alignment
+@cindex type alignment
+@cindex variable alignment
+
+The keyword @code{__alignof__} allows you to inquire about how an object
+is aligned, or the minimum alignment usually required by a type. Its
+syntax is just like @code{sizeof}.
+
+For example, if the target machine requires a @code{double} value to be
+aligned on an 8-byte boundary, then @code{__alignof__ (double)} is 8.
+This is true on many RISC machines. On more traditional machine
+designs, @code{__alignof__ (double)} is 4 or even 2.
+
+Some machines never actually require alignment; they allow reference to any
+data type even at an odd address. For these machines, @code{__alignof__}
+reports the smallest alignment that GCC will give the data type, usually as
+mandated by the target ABI.
+
+If the operand of @code{__alignof__} is an lvalue rather than a type,
+its value is the required alignment for its type, taking into account
+any minimum alignment specified with GCC's @code{__attribute__}
+extension (@pxref{Variable Attributes}). For example, after this
+declaration:
+
+@smallexample
+struct foo @{ int x; char y; @} foo1;
+@end smallexample
+
+@noindent
+the value of @code{__alignof__ (foo1.y)} is 1, even though its actual
+alignment is probably 2 or 4, the same as @code{__alignof__ (int)}.
+
+It is an error to ask for the alignment of an incomplete type.
+
@node Inline
@section An Inline Function is As Fast As a Macro
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index f4cdf66..5478f79 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -237,7 +237,7 @@ Objective-C and Objective-C++ Dialects}.
-Wno-attributes -Wno-builtin-macro-redefined @gol
-Wc++-compat -Wc++0x-compat -Wcast-align -Wcast-qual @gol
-Wchar-subscripts -Wclobbered -Wcomment @gol
--Wconversion -Wcoverage-mismatch -Wcpp -Wno-deprecated @gol
+-Wconversion -Wcoverage-mismatch -Wno-cpp -Wno-deprecated @gol
-Wno-deprecated-declarations -Wdisabled-optimization @gol
-Wno-div-by-zero -Wdouble-promotion -Wempty-body -Wenum-compare @gol
-Wno-endif-labels -Werror -Werror=* @gol
@@ -613,6 +613,11 @@ Objective-C and Objective-C++ Dialects}.
-m32 -m64 -mlarge-data-threshold=@var{num} @gol
-msse2avx -mfentry -m8bit-idiv}
+@emph{i386 and x86-64 Windows Options}
+@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
+-mnop-fun-dllimport -mthread @gol
+-municode -mwin32 -mwindows -fno-set-stack-executable}
+
@emph{IA-64 Options}
@gccoptlist{-mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic @gol
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata @gol
@@ -906,11 +911,6 @@ See RS/6000 and PowerPC Options.
@emph{x86-64 Options}
See i386 and x86-64 Options.
-@emph{i386 and x86-64 Windows Options}
-@gccoptlist{-mconsole -mcygwin -mno-cygwin -mdll
--mnop-fun-dllimport -mthread @gol
--municode -mwin32 -mwindows -fno-set-stack-executable}
-
@emph{Xstormy16 Options}
@gccoptlist{-msim}
@@ -3045,7 +3045,7 @@ Warn whenever a comment-start sequence @samp{/*} appears in a @samp{/*}
comment, or whenever a Backslash-Newline appears in a @samp{//} comment.
This warning is enabled by @option{-Wall}.
-@item -Wno-cpp \
+@item -Wno-cpp
@r{(C, Objective-C, C++, Objective-C++ and Fortran only)}
Suppress warning messages emitted by @code{#warning} directives.
@@ -12815,6 +12815,78 @@ Generate code for the large model: This model makes no assumptions
about addresses and sizes of sections.
@end table
+@node i386 and x86-64 Windows Options
+@subsection i386 and x86-64 Windows Options
+@cindex i386 and x86-64 Windows Options
+
+These additional options are available for Windows targets:
+
+@table @gcctabopt
+@item -mconsole
+@opindex mconsole
+This option is available for Cygwin and MinGW targets. It
+specifies that a console application is to be generated, by
+instructing the linker to set the PE header subsystem type
+required for console applications.
+This is the default behavior for Cygwin and MinGW targets.
+
+@item -mdll
+@opindex mdll
+This option is available for Cygwin and MinGW targets. It
+specifies that a DLL - a dynamic link library - is to be
+generated, enabling the selection of the required runtime
+startup object and entry point.
+
+@item -mnop-fun-dllimport
+@opindex mnop-fun-dllimport
+This option is available for Cygwin and MinGW targets. It
+specifies that the dllimport attribute should be ignored.
+
+@item -mthread
+@opindex mthread
+This option is available for MinGW targets. It specifies
+that MinGW-specific thread support is to be used.
+
+@item -municode
+@opindex municode
+This option is available for mingw-w64 targets. It specifies
+that the UNICODE macro is getting pre-defined and that the
+unicode capable runtime startup code is chosen.
+
+@item -mwin32
+@opindex mwin32
+This option is available for Cygwin and MinGW targets. It
+specifies that the typical Windows pre-defined macros are to
+be set in the pre-processor, but does not influence the choice
+of runtime library/startup code.
+
+@item -mwindows
+@opindex mwindows
+This option is available for Cygwin and MinGW targets. It
+specifies that a GUI application is to be generated by
+instructing the linker to set the PE header subsystem type
+appropriately.
+
+@item -fno-set-stack-executable
+@opindex fno-set-stack-executable
+This option is available for MinGW targets. It specifies that
+the executable flag for stack used by nested functions isn't
+set. This is necessary for binaries running in kernel mode of
+Windows, as there the user32 API, which is used to set executable
+privileges, isn't available.
+
+@item -mpe-aligned-commons
+@opindex mpe-aligned-commons
+This option is available for Cygwin and MinGW targets. It
+specifies that the GNU extension to the PE file format that
+permits the correct alignment of COMMON variables should be
+used when generating code. It will be enabled by default if
+GCC detects that the target assembler found during configuration
+supports the feature.
+@end table
+
+See also under @ref{i386 and x86-64 Options} for standard options.
+
@node IA-64 Options
@subsection IA-64 Options
@cindex IA-64 Options
@@ -17541,78 +17613,6 @@ is defined for compatibility with Diab.
These are listed under @xref{i386 and x86-64 Options}.
-@node i386 and x86-64 Windows Options
-@subsection i386 and x86-64 Windows Options
-@cindex i386 and x86-64 Windows Options
-
-These additional options are available for Windows targets:
-
-@table @gcctabopt
-@item -mconsole
-@opindex mconsole
-This option is available for Cygwin and MinGW targets. It
-specifies that a console application is to be generated, by
-instructing the linker to set the PE header subsystem type
-required for console applications.
-This is the default behavior for Cygwin and MinGW targets.
-
-@item -mdll
-@opindex mdll
-This option is available for Cygwin and MinGW targets. It
-specifies that a DLL - a dynamic link library - is to be
-generated, enabling the selection of the required runtime
-startup object and entry point.
-
-@item -mnop-fun-dllimport
-@opindex mnop-fun-dllimport
-This option is available for Cygwin and MinGW targets. It
-specifies that the dllimport attribute should be ignored.
-
-@item -mthread
-@opindex mthread
-This option is available for MinGW targets. It specifies
-that MinGW-specific thread support is to be used.
-
-@item -municode
-@opindex municode
-This option is available for mingw-w64 targets. It specifies
-that the UNICODE macro is getting pre-defined and that the
-unicode capable runtime startup code is chosen.
-
-@item -mwin32
-@opindex mwin32
-This option is available for Cygwin and MinGW targets. It
-specifies that the typical Windows pre-defined macros are to
-be set in the pre-processor, but does not influence the choice
-of runtime library/startup code.
-
-@item -mwindows
-@opindex mwindows
-This option is available for Cygwin and MinGW targets. It
-specifies that a GUI application is to be generated by
-instructing the linker to set the PE header subsystem type
-appropriately.
-
-@item -fno-set-stack-executable
-@opindex fno-set-stack-executable
-This option is available for MinGW targets. It specifies that
-the executable flag for stack used by nested functions isn't
-set. This is necessary for binaries running in kernel mode of
-Windows, as there the user32 API, which is used to set executable
-privileges, isn't available.
-
-@item -mpe-aligned-commons
-@opindex mpe-aligned-commons
-This option is available for Cygwin and MinGW targets. It
-specifies that the GNU extension to the PE file format that
-permits the correct alignment of COMMON variables should be
-used when generating code. It will be enabled by default if
-GCC detects that the target assembler found during configuration
-supports the feature.
-@end table
-
-See also under @ref{i386 and x86-64 Options} for standard options.
-
@node Xstormy16 Options
@subsection Xstormy16 Options
@cindex Xstormy16 Options
--
1.7.0.4

View File

@ -1,246 +0,0 @@
From 2631216d2fedc5339a5edcac64db1ab5d9269498 Mon Sep 17 00:00:00 2001
From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 28 Mar 2011 10:14:34 +0000
Subject: [PATCH] 2011-03-28 Richard Guenther <rguenther@suse.de>
Backport from mainline
2011-03-24 Richard Guenther <rguenther@suse.de>
PR middle-end/48269
* tree-object-size.c (addr_object_size): Do not double-account
for MEM_REF offsets.
* gcc.dg/builtin-object-size-10.c: New testcase.
2011-03-22 Richard Guenther <rguenther@suse.de>
PR tree-optimization/48228
* tree-vrp.c (vrp_visit_phi_node): Do not stop propagating
for single-arg PHIs.
* gcc.dg/Wstrict-overflow-23.c: New testcase.
2011-03-17 Richard Guenther <rguenther@suse.de>
PR middle-end/48134
* tree-ssa.c (insert_debug_temp_for_var_def): If we propagated
a value make sure to fold the statement.
* gcc.dg/pr48134.c: New testcase.
2011-03-15 Richard Guenther <rguenther@suse.de>
PR middle-end/48031
* fold-const.c (fold_indirect_ref_1): Do not create new variable-sized
or variable-indexed array accesses when in gimple form.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171595 138bc75d-0d04-0410-961f-82ee72b054a4
index 957049c..9a2f31f 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -15554,12 +15554,17 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
}
/* *(foo *)&fooarray => fooarray[0] */
else if (TREE_CODE (optype) == ARRAY_TYPE
- && type == TREE_TYPE (optype))
+ && type == TREE_TYPE (optype)
+ && (!in_gimple_form
+ || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
{
tree type_domain = TYPE_DOMAIN (optype);
tree min_val = size_zero_node;
if (type_domain && TYPE_MIN_VALUE (type_domain))
min_val = TYPE_MIN_VALUE (type_domain);
+ if (in_gimple_form
+ && TREE_CODE (min_val) != INTEGER_CST)
+ return NULL_TREE;
return build4_loc (loc, ARRAY_REF, type, op, min_val,
NULL_TREE, NULL_TREE);
}
@@ -15633,7 +15638,9 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
/* *(foo *)fooarrptr => (*fooarrptr)[0] */
if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
- && type == TREE_TYPE (TREE_TYPE (subtype)))
+ && type == TREE_TYPE (TREE_TYPE (subtype))
+ && (!in_gimple_form
+ || TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))
{
tree type_domain;
tree min_val = size_zero_node;
@@ -15641,6 +15648,9 @@ fold_indirect_ref_1 (location_t loc, tree type, tree op0)
type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
if (type_domain && TYPE_MIN_VALUE (type_domain))
min_val = TYPE_MIN_VALUE (type_domain);
+ if (in_gimple_form
+ && TREE_CODE (min_val) != INTEGER_CST)
+ return NULL_TREE;
return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
NULL_TREE);
}
new file mode 100644
index 0000000..16014bb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/Wstrict-overflow-23.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wstrict-overflow" } */
+
+unsigned int
+do_scrolling (unsigned int window_size, unsigned int writecost)
+{
+ unsigned int i = window_size;
+
+ int terminal_window_p = 0;
+ unsigned int queue = 0;
+
+ for (i = window_size; i; i--)
+ {
+ if (writecost < i)
+ ++queue;
+ else if (writecost & 1)
+ terminal_window_p = 1;
+ }
+
+ if (queue > 0)
+ {
+ if (!terminal_window_p)
+ {
+ terminal_window_p = 1;
+ }
+ }
+
+ if (terminal_window_p)
+ return 100;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/builtin-object-size-10.c b/gcc/testsuite/gcc.dg/builtin-object-size-10.c
new file mode 100644
index 0000000..6c7ed45
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/builtin-object-size-10.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-objsz-details" } */
+
+typedef struct {
+ char sentinel[4];
+ char data[0];
+} drone_packet;
+typedef struct {
+ char type_str[16];
+ char channel_hop;
+} drone_source_packet;
+drone_packet *
+foo(char *x)
+{
+ drone_packet *dpkt = __builtin_malloc(sizeof(drone_packet)
+ + sizeof(drone_source_packet));
+ drone_source_packet *spkt = (drone_source_packet *) dpkt->data;
+ __builtin___snprintf_chk (spkt->type_str, 16,
+ 1, __builtin_object_size (spkt->type_str, 1),
+ "%s", x);
+ return dpkt;
+}
+
+/* { dg-final { scan-tree-dump "maximum object size 21" "objsz" } } */
+/* { dg-final { scan-tree-dump "maximum subobject size 16" "objsz" } } */
+/* { dg-final { cleanup-tree-dump "objsz" } } */
diff --git a/gcc/testsuite/gcc.dg/pr48134.c b/gcc/testsuite/gcc.dg/pr48134.c
new file mode 100644
index 0000000..8dc5a6d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48134.c
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fstack-check=specific -fno-tree-dse -fno-tree-fre -fno-tree-loop-optimize -g" } */
+
+struct S
+{
+ int w, z;
+};
+struct T
+{
+ struct S s;
+};
+
+int i;
+
+static inline struct S
+bar (struct S x)
+{
+ i++;
+ return x;
+}
+
+int
+foo (struct T t, struct S s)
+{
+ struct S *c = &s;
+ if (i)
+ c = &t.s;
+ t.s.w = 3;
+ s = bar (*c);
+ return t.s.w;
+}
diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c
index 6a74d19..043b445 100644
--- a/gcc/tree-object-size.c
+++ b/gcc/tree-object-size.c
@@ -348,8 +348,6 @@ addr_object_size (struct object_size_info *osi, const_tree ptr,
tree bytes2 = compute_object_offset (TREE_OPERAND (ptr, 0), pt_var);
if (bytes2 != error_mark_node)
{
- bytes2 = size_binop (PLUS_EXPR, bytes2,
- TREE_OPERAND (pt_var, 1));
if (TREE_CODE (bytes2) == INTEGER_CST
&& tree_int_cst_lt (pt_var_size, bytes2))
bytes2 = size_zero_node;
diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c
index 5c9e0d8..eaf3ef9 100644
--- a/gcc/tree-ssa.c
+++ b/gcc/tree-ssa.c
@@ -455,13 +455,19 @@ insert_debug_temp_for_var_def (gimple_stmt_iterator *gsi, tree var)
continue;
if (value)
- FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
- /* unshare_expr is not needed here. vexpr is either a
- SINGLE_RHS, that can be safely shared, some other RHS
- that was unshared when we found it had a single debug
- use, or a DEBUG_EXPR_DECL, that can be safely
- shared. */
- SET_USE (use_p, value);
+ {
+ FOR_EACH_IMM_USE_ON_STMT (use_p, imm_iter)
+ /* unshare_expr is not needed here. vexpr is either a
+ SINGLE_RHS, that can be safely shared, some other RHS
+ that was unshared when we found it had a single debug
+ use, or a DEBUG_EXPR_DECL, that can be safely
+ shared. */
+ SET_USE (use_p, value);
+ /* If we didn't replace uses with a debug decl fold the
+ resulting expression. Otherwise we end up with invalid IL. */
+ if (TREE_CODE (value) != DEBUG_EXPR_DECL)
+ fold_stmt_inplace (stmt);
+ }
else
gimple_debug_bind_reset_value (stmt);
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 65d249f..280e6da 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -6619,6 +6619,7 @@ vrp_visit_phi_node (gimple phi)
edge; this helps us avoid an overflow infinity for conditionals
which are not in a loop. */
if (edges > 0
+ && gimple_phi_num_args (phi) > 1
&& edges == old_edges)
{
int cmp_min = compare_values (lhs_vr->min, vr_result.min);
--
1.7.0.4

View File

@ -1,47 +0,0 @@
From 2fe380ffa4f1ca0fba1e4915df127992eb977569 Mon Sep 17 00:00:00 2001
From: rsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 28 Mar 2011 10:22:57 +0000
Subject: [PATCH] gcc/
PR target/47553
* config/arm/predicates.md (neon_lane_number): Accept 0..15.
gcc/testsuite/
PR target/47553
* gcc.target/arm/neon-vld-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171596 138bc75d-0d04-0410-961f-82ee72b054a4
index 399938f..40ce1f3 100644
--- a/gcc/config/arm/predicates.md
+++ b/gcc/config/arm/predicates.md
@@ -610,7 +610,7 @@
;; TODO: We could check lane numbers more precisely based on the mode.
(define_predicate "neon_lane_number"
(and (match_code "const_int")
- (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 7")))
+ (match_test "INTVAL (op) >= 0 && INTVAL (op) <= 15")))
;; Predicates for named expanders that overlap multiple ISAs.
(define_predicate "cmpdi_operand"
new file mode 100644
index 0000000..f6bf691
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/neon-vld-1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_neon_ok } */
+/* { dg-options "-O1" } */
+/* { dg-add-options arm_neon } */
+
+#include <arm_neon.h>
+
+uint8x16_t
+foo (uint8_t *a, uint8x16_t b)
+{
+ vst1q_lane_u8 (a, b, 14);
+ return vld1q_lane_u8 (a + 0x100, b, 15);
+}
--
1.7.0.4

View File

@ -1,28 +0,0 @@
From c471cbe03c049ed4a97708936342e4dd28606d22 Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 28 Mar 2011 16:46:27 +0000
Subject: [PATCH] Backport from mainline:
2011-03-23 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR testsuite/48251
* g++.dg/guality/guality.exp: Disable on alpha*-dec-osf*.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171616 138bc75d-0d04-0410-961f-82ee72b054a4
index 9a17850..749691d 100644
--- a/gcc/testsuite/g++.dg/guality/guality.exp
+++ b/gcc/testsuite/g++.dg/guality/guality.exp
@@ -4,7 +4,8 @@ load_lib g++-dg.exp
load_lib gcc-gdb-test.exp
# Disable on darwin until radr://7264615 is resolved.
-if { [istarget *-*-darwin*] } {
+# Disable on Tru64 UNIX (PR testsuite/48251).
+if { [istarget *-*-darwin*] || [istarget alpha*-dec-osf*] } {
return
}
--
1.7.0.4

View File

@ -1,837 +0,0 @@
From d70e14fe2c9c3fc20d9bc1dca7cfcc3d6bb1301e Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 28 Mar 2011 17:09:27 +0000
Subject: [PATCH] libgfortran:
backport from mainline:
2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR bootstrap/48135
* configure.ac (gfortran_use_symver): Handle --disable-symvers.
* configure: Regenerate.
libgomp:
backport from mainline:
2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR bootstrap/48135
* acinclude.m4 (enable_symvers): Handle --disable-symvers.
* configure: Regenerate.
libjava:
backport from mainline:
2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR bootstrap/48135
* configure.ac (libjava_cv_anon_version_script): Handle
--disable-symvers.
* configure: Regenerate.
libquadmath:
backport from mainline:
2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR bootstrap/48135
* configure.ac (quadmath_use_symver): Handle --disable-symvers.
* configure: Regenerate.
libssp:
backport from mainline:
2011-03-21 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
PR bootstrap/48135
* configure.ac (ssp_use_symver): Handle --disable-symvers.
* configure: Regenerate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171617 138bc75d-0d04-0410-961f-82ee72b054a4
index 13a079f..5a81735 100755
--- a/libgfortran/configure
+++ b/libgfortran/configure
@@ -757,6 +757,7 @@ enable_intermodule
enable_maintainer_mode
enable_multilib
enable_dependency_tracking
+enable_symvers
enable_shared
enable_static
with_pic
@@ -1406,6 +1407,7 @@ Optional Features:
--enable-multilib build many library versions (default)
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
+ --disable-symvers disable symbol versioning for libgfortran
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
@@ -5564,14 +5566,22 @@ fi
# Check for symbol versioning (copied from libssp).
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is supported" >&5
$as_echo_n "checking whether symbol versioning is supported... " >&6; }
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
-cat > conftest.map <<EOF
+# Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+ enableval=$enable_symvers; gfortran_use_symver=$enableval
+else
+ gfortran_use_symver=yes
+fi
+
+if test "x$gfortran_use_symver" = xyes; then
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
-if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5592,18 +5602,18 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
-if test x$gfortran_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ if test x$gfortran_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5624,10 +5634,11 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- ;;
- esac
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
-LDFLAGS="$save_LDFLAGS"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gfortran_use_symver" >&5
$as_echo "$gfortran_use_symver" >&6; }
if test "x$gfortran_use_symver" != xno; then
@@ -12101,7 +12112,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12104 "configure"
+#line 12115 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12207,7 +12218,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12210 "configure"
+#line 12221 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/libgfortran/configure.ac b/libgfortran/configure.ac
index 66468db..e265ccd 100644
--- a/libgfortran/configure.ac
+++ b/libgfortran/configure.ac
@@ -144,30 +144,37 @@ AC_SUBST(CFLAGS)
# Check for symbol versioning (copied from libssp).
AC_MSG_CHECKING([whether symbol versioning is supported])
-save_LDFLAGS="$LDFLAGS"
-LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
-cat > conftest.map <<EOF
+AC_ARG_ENABLE(symvers,
+AS_HELP_STRING([--disable-symvers],
+ [disable symbol versioning for libgfortran]),
+gfortran_use_symver=$enableval,
+gfortran_use_symver=yes)
+if test "x$gfortran_use_symver" = xyes; then
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
-AC_TRY_LINK([int foo;],[],[gfortran_use_symver=gnu],[gfortran_use_symver=no])
-if test x$gfortran_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ AC_TRY_LINK([int foo;],[],[gfortran_use_symver=gnu],[gfortran_use_symver=no])
+ if test x$gfortran_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- AC_TRY_LINK([int foo;],[],[gfortran_use_symver=sun],[gfortran_use_symver=no])
- ;;
- esac
+ AC_TRY_LINK([int foo;],[],[gfortran_use_symver=sun],[gfortran_use_symver=no])
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
-LDFLAGS="$save_LDFLAGS"
AC_MSG_RESULT($gfortran_use_symver)
AM_CONDITIONAL(LIBGFOR_USE_SYMVER, [test "x$gfortran_use_symver" != xno])
AM_CONDITIONAL(LIBGFOR_USE_SYMVER_GNU, [test "x$gfortran_use_symver" = xgnu])
index eb876b9..4a4b62f 100644
--- a/libgomp/acinclude.m4
+++ b/libgomp/acinclude.m4
@@ -228,20 +228,24 @@ LIBGOMP_ENABLE(symvers,yes,[=STYLE],
# If we never went through the LIBGOMP_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
AC_REQUIRE([LIBGOMP_CHECK_LINKER_FEATURES])
-# FIXME The following test is too strict, in theory.
-if test $enable_shared = no || test "x$LD" = x; then
- enable_symvers=no
-else
- if test $with_gnu_ld = yes ; then
- enable_symvers=gnu
+
+# Turn a 'yes' into a suitable default.
+if test x$enable_symvers = xyes ; then
+ # FIXME The following test is too strict, in theory.
+ if test $enable_shared = no || test "x$LD" = x; then
+ enable_symvers=no
else
- case ${target_os} in
- # Sun symbol versioning exists since Solaris 2.5.
- solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
- enable_symvers=sun ;;
- *)
- enable_symvers=no ;;
- esac
+ if test $with_gnu_ld = yes ; then
+ enable_symvers=gnu
+ else
+ case ${target_os} in
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[[5-9]]* | solaris2.1[[0-9]]*)
+ enable_symvers=sun ;;
+ *)
+ enable_symvers=no ;;
+ esac
+ fi
fi
fi
diff --git a/libgomp/configure b/libgomp/configure
index 3368c0e..50dc29a 100755
--- a/libgomp/configure
+++ b/libgomp/configure
@@ -15780,20 +15780,24 @@ fi
# If we never went through the LIBGOMP_CHECK_LINKER_FEATURES macro, then we
# don't know enough about $LD to do tricks...
-# FIXME The following test is too strict, in theory.
-if test $enable_shared = no || test "x$LD" = x; then
- enable_symvers=no
-else
- if test $with_gnu_ld = yes ; then
- enable_symvers=gnu
+
+# Turn a 'yes' into a suitable default.
+if test x$enable_symvers = xyes ; then
+ # FIXME The following test is too strict, in theory.
+ if test $enable_shared = no || test "x$LD" = x; then
+ enable_symvers=no
else
- case ${target_os} in
- # Sun symbol versioning exists since Solaris 2.5.
- solaris2.[5-9]* | solaris2.1[0-9]*)
- enable_symvers=sun ;;
- *)
- enable_symvers=no ;;
- esac
+ if test $with_gnu_ld = yes ; then
+ enable_symvers=gnu
+ else
+ case ${target_os} in
+ # Sun symbol versioning exists since Solaris 2.5.
+ solaris2.[5-9]* | solaris2.1[0-9]*)
+ enable_symvers=sun ;;
+ *)
+ enable_symvers=no ;;
+ esac
+ fi
fi
fi
index f79e53b..2a57e13 100755
--- a/libjava/configure
+++ b/libjava/configure
@@ -959,6 +959,7 @@ enable_rpath
with_libiconv_prefix
enable_tls
with_system_libunwind
+enable_symvers
with_python_dir
enable_aot_compile_rpm
enable_java_home
@@ -1648,6 +1649,7 @@ Optional Features:
--enable-java-gc=TYPE choose garbage collector (default is boehm)
--disable-rpath do not hardcode runtime library paths
--enable-tls Use thread-local storage [default=yes]
+ --disable-symvers disable symbol versioning for libjava
--enable-aot-compile-rpm
enable installation of aot-compile-rpm [default=no]
--enable-java-home create a standard JDK-style directory layout in the
@@ -13344,7 +13346,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13347 "configure"
+#line 13349 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -13450,7 +13452,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 13453 "configure"
+#line 13455 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -19443,7 +19445,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
enableval=$enable_sjlj_exceptions; :
else
cat > conftest.$ac_ext << EOF
-#line 19446 "configure"
+#line 19448 "configure"
struct S { ~S(); };
void bar();
void foo()
@@ -24530,12 +24532,24 @@ $as_echo_n "checking whether ld supports anonymous version scripts... " >&6; }
if test "${libjava_cv_anon_version_script+set}" = set; then :
$as_echo_n "(cached) " >&6
else
- save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS"
- libjava_cv_anon_version_script=no
- CFLAGS="$CFLAGS -fPIC";
- LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map"
- echo '{ global: globalsymb*; local: *; };' > conftest.map
- if test x$gcc_no_link = xyes; then
+ # Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+ enableval=$enable_symvers; case "$enableval" in
+ yes) libjava_cv_anon_version_script=yes ;;
+ no) libjava_cv_anon_version_script=no ;;
+ *) as_fn_error "Unknown argument to enable/disable symvers" "$LINENO" 5;;
+ esac
+else
+ libjava_cv_anon_version_script=yes
+
+fi
+
+ if test x$libjava_cv_anon_version_script = xyes; then
+ save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS"
+ CFLAGS="$CFLAGS -fPIC";
+ LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map"
+ echo '{ global: globalsymb*; local: *; };' > conftest.map
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -24551,17 +24565,19 @@ main ()
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
libjava_cv_anon_version_script=gnu
+else
+ libjava_cv_anon_version_script=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test x$libjava_cv_anon_version_script = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -shared -Wl,-M,conftest.map"
- # Sun ld doesn't understand wildcards here.
- echo '{ global: globalsymbol; local: *; };' > conftest.map
- if test x$gcc_no_link = xyes; then
+ if test x$libjava_cv_anon_version_script = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared -Wl,-M,conftest.map"
+ # Sun ld doesn't understand wildcards here.
+ echo '{ global: globalsymbol; local: *; };' > conftest.map
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -24580,10 +24596,11 @@ if ac_fn_c_try_link "$LINENO"; then :
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- ;;
- esac
+ ;;
+ esac
+ fi
+ CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS"
fi
- CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libjava_cv_anon_version_script" >&5
diff --git a/libjava/configure.ac b/libjava/configure.ac
index 8187eec..c5bb1a0 100644
--- a/libjava/configure.ac
+++ b/libjava/configure.ac
@@ -1800,26 +1800,38 @@ GCC_CHECK_UNWIND_GETIPINFO
# See if linker supports anonymous version scripts.
AC_CACHE_CHECK([whether ld supports anonymous version scripts],
[libjava_cv_anon_version_script],
- [save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS"
- libjava_cv_anon_version_script=no
- CFLAGS="$CFLAGS -fPIC";
- LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map"
- echo '{ global: globalsymb*; local: *; };' > conftest.map
- AC_TRY_LINK(void globalsymbol (void) {} void localsymbol (void) {},,
- [libjava_cv_anon_version_script=gnu], [])
- if test x$libjava_cv_anon_version_script = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -shared -Wl,-M,conftest.map"
- # Sun ld doesn't understand wildcards here.
- echo '{ global: globalsymbol; local: *; };' > conftest.map
- AC_TRY_LINK(void globalsymbol (void) {} void localsymbol (void) {},,
- [libjava_cv_anon_version_script=sun], [])
- ;;
- esac
+ [AC_ARG_ENABLE(symvers,
+ AS_HELP_STRING([--disable-symvers],
+ [disable symbol versioning for libjava]),
+ [case "$enableval" in
+ yes) libjava_cv_anon_version_script=yes ;;
+ no) libjava_cv_anon_version_script=no ;;
+ *) AC_MSG_ERROR([Unknown argument to enable/disable symvers]);;
+ esac],
+ [libjava_cv_anon_version_script=yes]
+ )
+ if test x$libjava_cv_anon_version_script = xyes; then
+ save_CFLAGS="$CFLAGS"; save_LDFLAGS="$LDFLAGS"
+ CFLAGS="$CFLAGS -fPIC";
+ LDFLAGS="$LDFLAGS -shared -Wl,--version-script,conftest.map"
+ echo '{ global: globalsymb*; local: *; };' > conftest.map
+ AC_TRY_LINK(void globalsymbol (void) {} void localsymbol (void) {},,
+ [libjava_cv_anon_version_script=gnu],
+ [libjava_cv_anon_version_script=no])
+ if test x$libjava_cv_anon_version_script = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -shared -Wl,-M,conftest.map"
+ # Sun ld doesn't understand wildcards here.
+ echo '{ global: globalsymbol; local: *; };' > conftest.map
+ AC_TRY_LINK(void globalsymbol (void) {} void localsymbol (void) {},,
+ [libjava_cv_anon_version_script=sun], [])
+ ;;
+ esac
+ fi
+ CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS"
fi
- CFLAGS="$save_CFLAGS"; LDFLAGS="$save_LDFLAGS"
])
AM_CONDITIONAL(ANONVERSCRIPT, test "$libjava_cv_anon_version_script" != no)
AM_CONDITIONAL(ANONVERSCRIPT_GNU, test "$libjava_cv_anon_version_script" = gnu)
index 8735ac5..7f78ea1 100755
--- a/libquadmath/configure
+++ b/libquadmath/configure
@@ -747,6 +747,7 @@ with_gnu_ld
enable_libtool_lock
enable_maintainer_mode
enable_multilib
+enable_symvers
enable_generated_files_in_srcdir
'
ac_precious_vars='build_alias
@@ -1391,6 +1392,7 @@ Optional Features:
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
--enable-multilib build many library versions (default)
+ --disable-symvers disable symbol versioning for libquadmath
--enable-generated-files-in-srcdir
put copies of generated files in source dir intended
for creating source tarballs for users without
@@ -10511,7 +10513,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10514 "configure"
+#line 10516 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10617,7 +10619,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10620 "configure"
+#line 10622 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12339,19 +12341,27 @@ CFLAGS="$saved_CFLAGS"
# Check for symbol versioning (copied from libssp).
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is supported" >&5
$as_echo_n "checking whether symbol versioning is supported... " >&6; }
-if test x$gcc_no_link = xyes; then
- # If we cannot link, we cannot build shared libraries, so do not use
- # symbol versioning.
- quadmath_use_symver=no
+# Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+ enableval=$enable_symvers; quadmath_use_symver=$enableval
else
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
- cat > conftest.map <<EOF
+ quadmath_use_symver=yes
+fi
+
+if test "x$quadmath_use_symver" = xyes; then
+ if test x$gcc_no_link = xyes; then
+ # If we cannot link, we cannot build shared libraries, so do not use
+ # symbol versioning.
+ quadmath_use_symver=no
+ else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
- if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12372,18 +12382,18 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test x$quadmath_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ if test x$quadmath_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -12404,10 +12414,11 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- ;;
- esac
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
- LDFLAGS="$save_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $quadmath_use_symver" >&5
$as_echo "$quadmath_use_symver" >&6; }
diff --git a/libquadmath/configure.ac b/libquadmath/configure.ac
index 8559c1d..512b9f8 100644
--- a/libquadmath/configure.ac
+++ b/libquadmath/configure.ac
@@ -164,35 +164,42 @@ CFLAGS="$saved_CFLAGS"
# Check for symbol versioning (copied from libssp).
AC_MSG_CHECKING([whether symbol versioning is supported])
-if test x$gcc_no_link = xyes; then
- # If we cannot link, we cannot build shared libraries, so do not use
- # symbol versioning.
- quadmath_use_symver=no
-else
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
- cat > conftest.map <<EOF
+AC_ARG_ENABLE(symvers,
+AS_HELP_STRING([--disable-symvers],
+ [disable symbol versioning for libquadmath]),
+quadmath_use_symver=$enableval,
+quadmath_use_symver=yes)
+if test "x$quadmath_use_symver" = xyes; then
+ if test x$gcc_no_link = xyes; then
+ # If we cannot link, we cannot build shared libraries, so do not use
+ # symbol versioning.
+ quadmath_use_symver=no
+ else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
- AC_TRY_LINK([int foo;],[],[quadmath_use_symver=gnu],[quadmath_use_symver=no])
- if test x$quadmath_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ AC_TRY_LINK([int foo;],[],[quadmath_use_symver=gnu],[quadmath_use_symver=no])
+ if test x$quadmath_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- AC_TRY_LINK([int foo;],[],[quadmath_use_symver=sun],[quadmath_use_symver=no])
- ;;
- esac
+ AC_TRY_LINK([int foo;],[],[quadmath_use_symver=sun],[quadmath_use_symver=no])
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
- LDFLAGS="$save_LDFLAGS"
fi
AC_MSG_RESULT($quadmath_use_symver)
AM_CONDITIONAL(LIBQUAD_USE_SYMVER, [test "x$quadmath_use_symver" != xno])
index 85a6a0a..b1edcb4 100755
--- a/libssp/configure
+++ b/libssp/configure
@@ -734,6 +734,7 @@ enable_version_specific_runtime_libs
enable_maintainer_mode
enable_multilib
enable_dependency_tracking
+enable_symvers
enable_shared
enable_static
with_pic
@@ -1372,6 +1373,7 @@ Optional Features:
--enable-multilib build many library versions (default)
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
+ --disable-symvers disable symbol versioning for libssp
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS]
@@ -4098,19 +4100,27 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether symbol versioning is supported" >&5
$as_echo_n "checking whether symbol versioning is supported... " >&6; }
-if test x$gcc_no_link = xyes; then
- # If we cannot link, we cannot build shared libraries, so do not use
- # symbol versioning.
- ssp_use_symver=no
+# Check whether --enable-symvers was given.
+if test "${enable_symvers+set}" = set; then :
+ enableval=$enable_symvers; ssp_use_symver=$enableval
else
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
- cat > conftest.map <<EOF
+ ssp_use_symver=yes
+fi
+
+if test "x$ssp_use_symver" = xyes; then
+ if test x$gcc_no_link = xyes; then
+ # If we cannot link, we cannot build shared libraries, so do not use
+ # symbol versioning.
+ ssp_use_symver=no
+ else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
- if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4131,18 +4141,18 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- if test x$ssp_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ if test x$ssp_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- if test x$gcc_no_link = xyes; then
+ if test x$gcc_no_link = xyes; then
as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
fi
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -4163,10 +4173,11 @@ else
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
- ;;
- esac
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
- LDFLAGS="$save_LDFLAGS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssp_use_symver" >&5
$as_echo "$ssp_use_symver" >&6; }
@@ -10639,7 +10650,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10642 "configure"
+#line 10653 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -10745,7 +10756,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 10748 "configure"
+#line 10759 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
diff --git a/libssp/configure.ac b/libssp/configure.ac
index ee48f4d..0eee36c 100644
--- a/libssp/configure.ac
+++ b/libssp/configure.ac
@@ -72,35 +72,42 @@ if test x$ssp_hidden = xyes; then
fi
AC_MSG_CHECKING([whether symbol versioning is supported])
-if test x$gcc_no_link = xyes; then
- # If we cannot link, we cannot build shared libraries, so do not use
- # symbol versioning.
- ssp_use_symver=no
-else
- save_LDFLAGS="$LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
- cat > conftest.map <<EOF
+AC_ARG_ENABLE(symvers,
+AS_HELP_STRING([--disable-symvers],
+ [disable symbol versioning for libssp]),
+ssp_use_symver=$enableval,
+ssp_use_symver=yes)
+if test "x$ssp_use_symver" = xyes; then
+ if test x$gcc_no_link = xyes; then
+ # If we cannot link, we cannot build shared libraries, so do not use
+ # symbol versioning.
+ ssp_use_symver=no
+ else
+ save_LDFLAGS="$LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,--version-script,./conftest.map"
+ cat > conftest.map <<EOF
FOO_1.0 {
global: *foo*; bar; local: *;
};
EOF
- AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no])
- if test x$ssp_use_symver = xno; then
- case "$target_os" in
- solaris2*)
- LDFLAGS="$save_LDFLAGS"
- LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
- # Sun ld cannot handle wildcards and treats all entries as undefined.
- cat > conftest.map <<EOF
+ AC_TRY_LINK([int foo;],[],[ssp_use_symver=gnu],[ssp_use_symver=no])
+ if test x$ssp_use_symver = xno; then
+ case "$target_os" in
+ solaris2*)
+ LDFLAGS="$save_LDFLAGS"
+ LDFLAGS="$LDFLAGS -fPIC -shared -Wl,-M,./conftest.map"
+ # Sun ld cannot handle wildcards and treats all entries as undefined.
+ cat > conftest.map <<EOF
FOO_1.0 {
global: foo; local: *;
};
EOF
- AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no])
- ;;
- esac
+ AC_TRY_LINK([int foo;],[],[ssp_use_symver=sun],[ssp_use_symver=no])
+ ;;
+ esac
+ fi
+ LDFLAGS="$save_LDFLAGS"
fi
- LDFLAGS="$save_LDFLAGS"
fi
AC_MSG_RESULT($ssp_use_symver)
AM_CONDITIONAL(LIBSSP_USE_SYMVER, [test "x$ssp_use_symver" != xno])
--
1.7.0.4

View File

@ -1,62 +0,0 @@
From 6f57329da3c7308ccf6b1740ead898d668ec24f9 Mon Sep 17 00:00:00 2001
From: krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 11:57:40 +0000
Subject: [PATCH] 2011-03-29 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.c (s390_preferred_reload_class): Return NO_REGS
for invalid symbolic addresses.
(s390_secondary_reload): Don't use s390_check_symref_alignment for
larl operands.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171658 138bc75d-0d04-0410-961f-82ee72b054a4
index 5165e87..c1bb234 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -3011,14 +3011,20 @@ s390_preferred_reload_class (rtx op, reg_class_t rclass)
it is most likely being used as an address, so
prefer ADDR_REGS. If 'class' is not a superset
of ADDR_REGS, e.g. FP_REGS, reject this reload. */
- case PLUS:
case LABEL_REF:
case SYMBOL_REF:
case CONST:
- if (reg_class_subset_p (ADDR_REGS, rclass))
+ if (reg_class_subset_p (ADDR_REGS, rclass)
+ && legitimate_reload_constant_p (op))
return ADDR_REGS;
else
return NO_REGS;
+ case PLUS:
+ /* load address will be used for this reload. */
+ if (reg_class_subset_p (ADDR_REGS, rclass))
+ return ADDR_REGS;
+ else
+ return NO_REGS;
default:
break;
@@ -3134,12 +3140,16 @@ s390_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
if (TARGET_Z10)
{
+ HOST_WIDE_INT offset;
+ rtx symref;
+
/* On z10 several optimizer steps may generate larl operands with
an odd addend. */
if (in_p
- && s390_symref_operand_p (x, NULL, NULL)
+ && s390_symref_operand_p (x, &symref, &offset)
&& mode == Pmode
- && !s390_check_symref_alignment (x, 2))
+ && !SYMBOL_REF_ALIGN1_P (symref)
+ && (offset & 1) == 1)
sri->icode = ((mode == DImode) ? CODE_FOR_reloaddi_larl_odd_addend_z10
: CODE_FOR_reloadsi_larl_odd_addend_z10);
--
1.7.0.4

View File

@ -1,405 +0,0 @@
From 04688242805dcf2a1e9c8948a3d15611d88c1520 Mon Sep 17 00:00:00 2001
From: nickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 12:27:07 +0000
Subject: [PATCH] * config/rx/rx.h (LABEL_ALIGN_AFTER_BARRIER): Define.
(ASM_OUTPUT_MAX_SKIP): Define.
* config/rx/predicates.md (rx_zs_comparison_operator): Do not
allow LT aor GE comparisons.
* config/rx/rx-protos.h (rx_align_for_label): Prototype.
* config/rx/rx.md: Add peepholes and patterns to combine extending
loads with simple arithmetic instructions.
* config/rx/rx.c (rx_is_legitimate_address): Allow QI and HI modes
to use pre-decrement and post-increment addressing.
(rx_is_restricted_memory_address): For REG+INT addressing, ensure
that the INT is a valid offset.
(rx_print_operand): Handle %R.
Fix %Q's handling of MEMs.
(rx_option_override): Set alignments.
(rx_align_for_label): New function.
(rx_max_skip_for_label): New function.
(TARGET_ASM_JUMP_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LABEL_ALIGN_MAX_SKIP): Define.
(TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP): Define.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171659 138bc75d-0d04-0410-961f-82ee72b054a4
index 77b3353..82cac42 100644
--- a/gcc/config/rx/predicates.md
+++ b/gcc/config/rx/predicates.md
@@ -284,7 +284,7 @@
)
(define_predicate "rx_zs_comparison_operator"
- (match_code "eq,ne,lt,ge")
+ (match_code "eq,ne")
)
;; GT and LE omitted due to operand swap required.
diff --git a/gcc/config/rx/rx-protos.h b/gcc/config/rx/rx-protos.h
index a6ae416..e1ab9c2 100644
--- a/gcc/config/rx/rx-protos.h
+++ b/gcc/config/rx/rx-protos.h
@@ -30,16 +30,17 @@ extern void rx_expand_prologue (void);
extern int rx_initial_elimination_offset (int, int);
#ifdef RTX_CODE
+extern int rx_align_for_label (void);
extern void rx_emit_stack_popm (rtx *, bool);
extern void rx_emit_stack_pushm (rtx *);
extern void rx_expand_epilogue (bool);
extern char * rx_gen_move_template (rtx *, bool);
extern bool rx_is_legitimate_constant (rtx);
extern bool rx_is_restricted_memory_address (rtx, Mmode);
+extern bool rx_match_ccmode (rtx, Mmode);
extern void rx_notice_update_cc (rtx body, rtx insn);
extern void rx_split_cbranch (Mmode, Rcode, rtx, rtx, rtx);
extern Mmode rx_select_cc_mode (Rcode, rtx, rtx);
-extern bool rx_match_ccmode (rtx, Mmode);
#endif
#endif /* GCC_RX_PROTOS_H */
diff --git a/gcc/config/rx/rx.c b/gcc/config/rx/rx.c
index 6b179e7..ad8d0bb 100644
--- a/gcc/config/rx/rx.c
+++ b/gcc/config/rx/rx.c
@@ -57,7 +57,7 @@ static void rx_print_operand (FILE *, rtx, int);
#define CC_FLAG_Z (1 << 1)
#define CC_FLAG_O (1 << 2)
#define CC_FLAG_C (1 << 3)
-#define CC_FLAG_FP (1 << 4) /* fake, to differentiate CC_Fmode */
+#define CC_FLAG_FP (1 << 4) /* Fake, to differentiate CC_Fmode. */
static unsigned int flags_from_mode (enum machine_mode mode);
static unsigned int flags_from_code (enum rtx_code code);
@@ -85,7 +85,9 @@ rx_is_legitimate_address (Mmode mode, rtx x, bool strict ATTRIBUTE_UNUSED)
/* Register Indirect. */
return true;
- if (GET_MODE_SIZE (mode) == 4
+ if ((GET_MODE_SIZE (mode) == 4
+ || GET_MODE_SIZE (mode) == 2
+ || GET_MODE_SIZE (mode) == 1)
&& (GET_CODE (x) == PRE_DEC || GET_CODE (x) == POST_INC))
/* Pre-decrement Register Indirect or
Post-increment Register Indirect. */
@@ -187,7 +189,10 @@ rx_is_restricted_memory_address (rtx mem, enum machine_mode mode)
base = XEXP (mem, 0);
index = XEXP (mem, 1);
- return RX_REG_P (base) && CONST_INT_P (index);
+ if (! RX_REG_P (base) || ! CONST_INT_P (index))
+ return false;
+
+ return IN_RANGE (INTVAL (index), 0, (0x10000 * GET_MODE_SIZE (mode)) - 1);
case SYMBOL_REF:
/* Can happen when small data is being supported.
@@ -386,11 +391,14 @@ rx_assemble_integer (rtx x, unsigned int size, int is_aligned)
%L Print low part of a DImode register, integer or address.
%N Print the negation of the immediate value.
%Q If the operand is a MEM, then correctly generate
- register indirect or register relative addressing. */
+ register indirect or register relative addressing.
+ %R Like %Q but for zero-extending loads. */
static void
rx_print_operand (FILE * file, rtx op, int letter)
{
+ bool unsigned_load = false;
+
switch (letter)
{
case 'A':
@@ -450,6 +458,7 @@ rx_print_operand (FILE * file, rtx op, int letter)
else
{
unsigned int flags = flags_from_mode (mode);
+
switch (code)
{
case LT:
@@ -588,10 +597,15 @@ rx_print_operand (FILE * file, rtx op, int letter)
rx_print_integer (file, - INTVAL (op));
break;
+ case 'R':
+ gcc_assert (GET_MODE_SIZE (GET_MODE (op)) < 4);
+ unsigned_load = true;
+ /* Fall through. */
case 'Q':
if (MEM_P (op))
{
HOST_WIDE_INT offset;
+ rtx mem = op;
op = XEXP (op, 0);
@@ -626,22 +640,24 @@ rx_print_operand (FILE * file, rtx op, int letter)
rx_print_operand (file, op, 0);
fprintf (file, "].");
- switch (GET_MODE_SIZE (GET_MODE (op)))
+ switch (GET_MODE_SIZE (GET_MODE (mem)))
{
case 1:
- gcc_assert (offset < 65535 * 1);
- fprintf (file, "B");
+ gcc_assert (offset <= 65535 * 1);
+ fprintf (file, unsigned_load ? "UB" : "B");
break;
case 2:
gcc_assert (offset % 2 == 0);
- gcc_assert (offset < 65535 * 2);
- fprintf (file, "W");
+ gcc_assert (offset <= 65535 * 2);
+ fprintf (file, unsigned_load ? "UW" : "W");
break;
- default:
+ case 4:
gcc_assert (offset % 4 == 0);
- gcc_assert (offset < 65535 * 4);
+ gcc_assert (offset <= 65535 * 4);
fprintf (file, "L");
break;
+ default:
+ gcc_unreachable ();
}
break;
}
@@ -2336,6 +2352,13 @@ rx_option_override (void)
flag_strict_volatile_bitfields = 1;
rx_override_options_after_change ();
+
+ if (align_jumps == 0 && ! optimize_size)
+ align_jumps = 3;
+ if (align_loops == 0 && ! optimize_size)
+ align_loops = 3;
+ if (align_labels == 0 && ! optimize_size)
+ align_labels = 3;
}
/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */
@@ -2728,6 +2751,45 @@ rx_match_ccmode (rtx insn, enum machine_mode cc_mode)
}
+int
+rx_align_for_label (void)
+{
+ return optimize_size ? 1 : 3;
+}
+
+static int
+rx_max_skip_for_label (rtx lab)
+{
+ int opsize;
+ rtx op;
+
+ if (lab == NULL_RTX)
+ return 0;
+ op = lab;
+ do
+ {
+ op = next_nonnote_insn (op);
+ }
+ while (op && (LABEL_P (op)
+ || (INSN_P (op) && GET_CODE (PATTERN (op)) == USE)));
+ if (!op)
+ return 0;
+
+ opsize = get_attr_length (op);
+ if (opsize >= 0 && opsize < 8)
+ return opsize - 1;
+ return 0;
+}
+
+#undef TARGET_ASM_JUMP_ALIGN_MAX_SKIP
+#define TARGET_ASM_JUMP_ALIGN_MAX_SKIP rx_max_skip_for_label
+#undef TARGET_ASM_LOOP_ALIGN_MAX_SKIP
+#define TARGET_ASM_LOOP_ALIGN_MAX_SKIP rx_max_skip_for_label
+#undef TARGET_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP
+#define TARGET_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP rx_max_skip_for_label
+#undef TARGET_ASM_LABEL_ALIGN_MAX_SKIP
+#define TARGET_ASM_LABEL_ALIGN_MAX_SKIP rx_max_skip_for_label
+
#undef TARGET_FUNCTION_VALUE
#define TARGET_FUNCTION_VALUE rx_function_value
diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h
index e3966ed..01fc23b 100644
--- a/gcc/config/rx/rx.h
+++ b/gcc/config/rx/rx.h
@@ -615,4 +615,23 @@ typedef unsigned int CUMULATIVE_ARGS;
#define BRANCH_COST(SPEED,PREDICT) 1
#define REGISTER_MOVE_COST(MODE,FROM,TO) 2
-#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode(OP, X, Y)
+#define SELECT_CC_MODE(OP,X,Y) rx_select_cc_mode((OP), (X), (Y))
+
+#define LABEL_ALIGN_AFTER_BARRIER(x) rx_align_for_label ()
+
+#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM, LOG, MAX_SKIP) \
+ do \
+ { \
+ if ((LOG) == 0 || (MAX_SKIP) == 0) \
+ break; \
+ if (TARGET_AS100_SYNTAX) \
+ { \
+ if ((LOG) >= 2) \
+ fprintf (STREAM, "\t.ALIGN 4\t; %d alignment actually requested\n", 1 << (LOG)); \
+ else \
+ fprintf (STREAM, "\t.ALIGN 2\n"); \
+ } \
+ else \
+ fprintf (STREAM, "\t.balign %d,3,%d\n", 1 << (LOG), (MAX_SKIP)); \
+ } \
+ while (0)
diff --git a/gcc/config/rx/rx.md b/gcc/config/rx/rx.md
index cd5b571..641f1d4 100644
--- a/gcc/config/rx/rx.md
+++ b/gcc/config/rx/rx.md
@@ -1545,6 +1545,139 @@
(set_attr "length" "3,4,5,6,7,6")]
)
+;; A set of peepholes to catch extending loads followed by arithmetic operations.
+;; We use iterators where possible to reduce the amount of typing and hence the
+;; possibilities for typos.
+
+(define_code_iterator extend_types [(zero_extend "") (sign_extend "")])
+(define_code_attr letter [(zero_extend "R") (sign_extend "Q")])
+
+(define_code_iterator memex_commutative [(plus "") (and "") (ior "") (xor "")])
+(define_code_iterator memex_noncomm [(div "") (udiv "") (minus "")])
+(define_code_iterator memex_nocc [(smax "") (smin "") (mult "")])
+
+(define_code_attr op [(plus "add") (and "and") (div "div") (udiv "divu") (smax "max") (smin "min") (mult "mul") (ior "or") (minus "sub") (xor "xor")])
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (parallel [(set (match_operand:SI 2 "register_operand")
+ (memex_commutative:SI (match_dup 0)
+ (match_dup 2)))
+ (clobber (reg:CC CC_REG))])]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(parallel [(set:SI (match_dup 2)
+ (memex_commutative:SI (match_dup 2)
+ (extend_types:SI (match_dup 1))))
+ (clobber (reg:CC CC_REG))])]
+)
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (parallel [(set (match_operand:SI 2 "register_operand")
+ (memex_commutative:SI (match_dup 2)
+ (match_dup 0)))
+ (clobber (reg:CC CC_REG))])]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(parallel [(set:SI (match_dup 2)
+ (memex_commutative:SI (match_dup 2)
+ (extend_types:SI (match_dup 1))))
+ (clobber (reg:CC CC_REG))])]
+)
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (parallel [(set (match_operand:SI 2 "register_operand")
+ (memex_noncomm:SI (match_dup 2)
+ (match_dup 0)))
+ (clobber (reg:CC CC_REG))])]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(parallel [(set:SI (match_dup 2)
+ (memex_noncomm:SI (match_dup 2)
+ (extend_types:SI (match_dup 1))))
+ (clobber (reg:CC CC_REG))])]
+)
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (set (match_operand:SI 2 "register_operand")
+ (memex_nocc:SI (match_dup 0)
+ (match_dup 2)))]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(set:SI (match_dup 2)
+ (memex_nocc:SI (match_dup 2)
+ (extend_types:SI (match_dup 1))))]
+)
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (set (match_operand:SI 2 "register_operand")
+ (memex_nocc:SI (match_dup 2)
+ (match_dup 0)))]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(set:SI (match_dup 2)
+ (memex_nocc:SI (match_dup 2)
+ (extend_types:SI (match_dup 1))))]
+)
+
+(define_insn "*<memex_commutative:code>si3_<extend_types:code><small_int_modes:mode>"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (memex_commutative:SI (match_operand:SI 1 "register_operand" "%0")
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
+ (clobber (reg:CC CC_REG))]
+ ""
+ "<memex_commutative:op>\t%<extend_types:letter>2, %0"
+ [(set_attr "timings" "33")
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
+) ;; rather than using iterators we could specify exact sizes.
+
+(define_insn "*<memex_noncomm:code>si3_<extend_types:code><small_int_modes:mode>"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (memex_noncomm:SI (match_operand:SI 1 "register_operand" "0")
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))
+ (clobber (reg:CC CC_REG))]
+ ""
+ "<memex_noncomm:op>\t%<extend_types:letter>2, %0"
+ [(set_attr "timings" "33")
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
+) ;; rather than using iterators we could specify exact sizes.
+
+(define_insn "*<memex_nocc:code>si3_<extend_types:code><small_int_modes:mode>"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (memex_nocc:SI (match_operand:SI 1 "register_operand" "%0")
+ (extend_types:SI (match_operand:small_int_modes 2 "rx_restricted_mem_operand" "Q"))))]
+ ""
+ "<memex_nocc:op>\t%<extend_types:letter>2, %0"
+ [(set_attr "timings" "33")
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
+) ;; rather than using iterators we could specify exact sizes.
+
+(define_peephole2
+ [(set (match_operand:SI 0 "register_operand")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand")))
+ (set (reg:CC CC_REG)
+ (compare:CC (match_operand:SI 2 "register_operand")
+ (match_dup 0)))]
+ "peep2_regno_dead_p (2, REGNO (operands[0]))"
+ [(set (reg:CC CC_REG)
+ (compare:CC (match_dup 2)
+ (extend_types:SI (match_dup 1))))]
+)
+
+(define_insn "*comparesi3_<extend_types:code><small_int_modes:mode>"
+ [(set (reg:CC CC_REG)
+ (compare:CC (match_operand:SI 0 "register_operand" "=r")
+ (extend_types:SI (match_operand:small_int_modes 1 "rx_restricted_mem_operand" "Q"))))]
+ ""
+ "cmp\t%<extend_types:letter>1, %0"
+ [(set_attr "timings" "33")
+ (set_attr "length" "5")] ;; Worst case sceanario. FIXME: If we defined separate patterns
+) ;; rather than using iterators we could specify exact sizes.
+
;; Floating Point Instructions
(define_insn "addsf3"
--
1.7.0.4

View File

@ -1,26 +0,0 @@
From e8c1376d80e89383a6eff16349bf2071b571a47f Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:23:59 +0000
Subject: [PATCH] * c.opt: Add -std=c++03.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171662 138bc75d-0d04-0410-961f-82ee72b054a4
index bb928fa..fe746e2 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -1133,7 +1133,11 @@ Remap file names when including files
std=c++98
C++ ObjC++
-Conform to the ISO 1998 C++ standard
+Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum
+
+std=c++03
+C++ ObjC++ Alias(std=c++98)
+Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum
std=c++0x
C++ ObjC++
--
1.7.0.4

View File

@ -1,68 +0,0 @@
From 1d1e50e7f9e7511a01ee95d7cffd8311c9b84d8b Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:09 +0000
Subject: [PATCH] PR c++/47570
* semantics.c (cxx_eval_constant_expression) [COMPOUND_EXPR]: Don't
use the generic binary expression handling.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171663 138bc75d-0d04-0410-961f-82ee72b054a4
index a0f48c0..d23effe 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -6896,7 +6896,13 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
r = cxx_eval_constant_expression (call, op0, allow_non_constant,
addr, non_constant_p);
else
- goto binary;
+ {
+ /* Check that the LHS is constant and then discard it. */
+ cxx_eval_constant_expression (call, op0, allow_non_constant,
+ false, non_constant_p);
+ r = cxx_eval_constant_expression (call, op1, allow_non_constant,
+ addr, non_constant_p);
+ }
}
break;
@@ -6938,7 +6944,6 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
case UNEQ_EXPR:
case RANGE_EXPR:
case COMPLEX_EXPR:
- binary:
r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
non_constant_p);
break;
new file mode 100644
index 0000000..c60ba86
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-47570.C
@@ -0,0 +1,25 @@
+// PR c++/47570
+// { dg-options -std=c++0x }
+
+unsigned int constexpr one()
+{ return 1; }
+
+int constexpr one_B()
+{ return 1; }
+
+int main()
+{
+ // FAIL TO COMPILE:
+ static bool constexpr SC_huh1 = ((unsigned int)one()) >= ((unsigned int)0);
+ static bool constexpr SC_huh2 = one() >= ((unsigned int)0);
+ static bool constexpr SC_huh3 = one() >= 0;
+
+ // COMPILE OK:
+ static bool constexpr SC_huh4 = ((one() == 0) || (one() > 0));
+ static bool constexpr SC_huh5 = one() == 0;
+ static bool constexpr SC_huh6 = one() > 0;
+ static bool constexpr SC_huh7 = one_B() >= 0;
+ static bool constexpr SC_huh8 = one() >= 1;
+
+ return SC_huh3;
+}
--
1.7.0.4

View File

@ -1,50 +0,0 @@
From 4ebec68ee3aee90ba13a4c4bc70afbb4a613468b Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:19 +0000
Subject: [PATCH] PR c++/47504
* semantics.c (cxx_eval_constant_expression) [NOP_EXPR]: Don't let
the conversion set TREE_OVERFLOW.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171664 138bc75d-0d04-0410-961f-82ee72b054a4
index d23effe..5fe1414 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -7030,6 +7030,11 @@ cxx_eval_constant_expression (const constexpr_call *call, tree t,
conversion. */
return fold (t);
r = fold_build1 (TREE_CODE (t), to, op);
+ /* Conversion of an out-of-range value has implementation-defined
+ behavior; the language considers it different from arithmetic
+ overflow, which is undefined. */
+ if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
+ TREE_OVERFLOW (r) = false;
}
break;
index 598cae6..2d614ec 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-data2.C
@@ -44,5 +44,4 @@ extern template struct A3<int, 510>;
// Use.
A3<int, 1111> a31;
-// FIXME should this be an error?
A3<char, 9999> a32; // { dg-warning "overflow" }
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C
new file mode 100644
index 0000000..5d5749c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-overflow2.C
@@ -0,0 +1,8 @@
+// PR c++/47504
+// { dg-options -std=c++0x }
+
+char constexpr sub(char arg)
+{ return char(arg - char(1)); }
+
+int main()
+{ static char constexpr m = sub(-1); }
--
1.7.0.4

View File

@ -1,46 +0,0 @@
From 3a987d8e4a8c885fe7fc54595ebdd82d5291e1e7 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:30 +0000
Subject: [PATCH] * except.c (build_noexcept_spec): Call cxx_constant_value after
converting to bool.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171665 138bc75d-0d04-0410-961f-82ee72b054a4
index c05e507..a814d67 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1203,10 +1203,10 @@ build_noexcept_spec (tree expr, int complain)
it until instantiation. */
if (!processing_template_decl)
{
- expr = cxx_constant_value (expr);
expr = perform_implicit_conversion_flags (boolean_type_node, expr,
complain,
LOOKUP_NORMAL);
+ expr = cxx_constant_value (expr);
}
if (expr == boolean_true_node)
return noexcept_true_spec;
new file mode 100644
index 0000000..7bf961b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-noexcept5.C
@@ -0,0 +1,15 @@
+// { dg-options -std=c++0x }
+
+struct booleable {
+ bool data;
+ constexpr explicit operator bool() { return data; }
+};
+
+constexpr booleable truthy_func() { return {true}; }
+
+void funky() noexcept(truthy_func()) {}
+
+int main() {
+ funky();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,181 +0,0 @@
From 21e7558c6e06c35620e80478f4e6b5ccd1c78aa9 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:42 +0000
Subject: [PATCH] c-family/
* c.opt (fconstexpr-depth): New option.
cp/
* semantics.c (push_cx_call_context): Return bool.
(cxx_eval_call_expression): Handle excess depth.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171666 138bc75d-0d04-0410-961f-82ee72b054a4
index fe746e2..4c4727f 100644
--- a/gcc/c-family/c.opt
+++ b/gcc/c-family/c.opt
@@ -719,6 +719,10 @@ fconstant-string-class=
ObjC ObjC++ Joined MissingArgError(no class name specified with %qs)
-fconst-string-class=<name> Use class <name> for constant strings
+fconstexpr-depth=
+C++ ObjC++ Joined RejectNegative UInteger Var(max_constexpr_depth) Init(512)
+-fconstexpr-depth=<number> Specify maximum constexpr recursion depth
+
fdeduce-init-list
C++ ObjC++ Var(flag_deduce_init_list) Init(1)
-fno-deduce-init-list disable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list
index 5fe1414..3213483 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5922,17 +5922,21 @@ cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
/* Variables and functions to manage constexpr call expansion context.
These do not need to be marked for PCH or GC. */
+/* FIXME remember and print actual constant arguments. */
static VEC(tree,heap) *call_stack = NULL;
static int call_stack_tick;
static int last_cx_error_tick;
-static void
+static bool
push_cx_call_context (tree call)
{
++call_stack_tick;
if (!EXPR_HAS_LOCATION (call))
SET_EXPR_LOCATION (call, input_location);
VEC_safe_push (tree, heap, call_stack, call);
+ if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
+ return false;
+ return true;
}
static void
@@ -5967,6 +5971,9 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t,
tree result;
constexpr_call new_call = { NULL, NULL, NULL, 0 };
constexpr_call **slot;
+ constexpr_call *entry;
+ bool depth_ok;
+
if (TREE_CODE (fun) != FUNCTION_DECL)
{
/* Might be a constexpr function pointer. */
@@ -6029,7 +6036,7 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t,
if (*non_constant_p)
return t;
- push_cx_call_context (t);
+ depth_ok = push_cx_call_context (t);
new_call.hash
= iterative_hash_template_arg (new_call.bindings,
@@ -6039,37 +6046,43 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t,
maybe_initialize_constexpr_call_table ();
slot = (constexpr_call **)
htab_find_slot (constexpr_call_table, &new_call, INSERT);
- if (*slot != NULL)
- {
- /* Calls which are in progress have their result set to NULL
- so that we can detect circular dependencies. */
- if ((*slot)->result == NULL)
- {
- if (!allow_non_constant)
- error ("call has circular dependency");
- (*slot)->result = result = error_mark_node;
- }
- else
- {
- result = (*slot)->result;
- if (result == error_mark_node && !allow_non_constant)
- /* Re-evaluate to get the error. */
- cxx_eval_constant_expression (&new_call, new_call.fundef->body,
- allow_non_constant, addr,
- non_constant_p);
- }
- }
- else
+ entry = *slot;
+ if (entry == NULL)
{
/* We need to keep a pointer to the entry, not just the slot, as the
slot can move in the call to cxx_eval_builtin_function_call. */
- constexpr_call *entry = ggc_alloc_constexpr_call ();
+ *slot = entry = ggc_alloc_constexpr_call ();
*entry = new_call;
- *slot = entry;
- result
- = cxx_eval_constant_expression (&new_call, new_call.fundef->body,
- allow_non_constant, addr,
- non_constant_p);
+ }
+ /* Calls which are in progress have their result set to NULL
+ so that we can detect circular dependencies. */
+ else if (entry->result == NULL)
+ {
+ if (!allow_non_constant)
+ error ("call has circular dependency");
+ *non_constant_p = true;
+ entry->result = result = error_mark_node;
+ }
+
+ if (!depth_ok)
+ {
+ if (!allow_non_constant)
+ error ("constexpr evaluation depth exceeds maximum of %d (use "
+ "-fconstexpr-depth= to increase the maximum)",
+ max_constexpr_depth);
+ *non_constant_p = true;
+ entry->result = result = error_mark_node;
+ }
+ else
+ {
+ result = entry->result;
+ if (!result || (result == error_mark_node && !allow_non_constant))
+ result = (cxx_eval_constant_expression
+ (&new_call, new_call.fundef->body,
+ allow_non_constant, addr,
+ non_constant_p));
+ if (result == error_mark_node)
+ *non_constant_p = true;
if (*non_constant_p)
entry->result = result = error_mark_node;
else
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 5478f79..4bcf83a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -181,7 +181,7 @@ in the following sections.
@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@gccoptlist{-fabi-version=@var{n} -fno-access-control -fcheck-new @gol
--fconserve-space -ffriend-injection @gol
+-fconserve-space -fconstexpr-depth=@var{n} -ffriend-injection @gol
-fno-elide-constructors @gol
-fno-enforce-eh-specs @gol
-ffor-scope -fno-for-scope -fno-gnu-keywords @gol
@@ -1881,6 +1881,13 @@ two definitions were merged.
This option is no longer useful on most targets, now that support has
been added for putting variables into BSS without making them common.
+@item -fconstexpr-depth=@var{n}
+@opindex fconstexpr-depth
+Set the maximum nested evaluation depth for C++0x constexpr functions
+to @var{n}. A limit is needed to detect endless recursion during
+constant expression evaluation. The minimum specified by the standard
+is 512.
+
@item -fno-deduce-init-list
@opindex fno-deduce-init-list
Disable deduction of a template type parameter as
new file mode 100644
index 0000000..2f9b488
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-recursion.C
@@ -0,0 +1,5 @@
+// Test that we catch excessive recursion.
+// { dg-options "-std=c++0x -fconstexpr-depth=5" }
+// { dg-prune-output "in constexpr expansion" }
+constexpr int f (int i) { return f (i-1); }
+constexpr int i = f(42); // { dg-error "constexpr evaluation depth" }
--
1.7.0.4

View File

@ -1,117 +0,0 @@
From 87e73453e8135e72f592c1d7c84da942e7a1e308 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:24:59 +0000
Subject: [PATCH] * decl2.c (cp_check_const_attributes): New.
(cplus_decl_attributes): Call cp_check_const_attributes.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171667 138bc75d-0d04-0410-961f-82ee72b054a4
index eb5d4f5..f62f913 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -1264,6 +1264,25 @@ cp_reconstruct_complex_type (tree type, tree bottom)
return cp_build_qualified_type (outer, cp_type_quals (type));
}
+/* Replaces any constexpr expression that may be into the attributes
+ arguments with their reduced value. */
+
+static void
+cp_check_const_attributes (tree attributes)
+{
+ tree attr;
+ for (attr = attributes; attr; attr = TREE_CHAIN (attr))
+ {
+ tree arg;
+ for (arg = TREE_VALUE (attr); arg; arg = TREE_CHAIN (arg))
+ {
+ tree expr = TREE_VALUE (arg);
+ if (EXPR_P (expr))
+ TREE_VALUE (arg) = maybe_constant_value (expr);
+ }
+ }
+}
+
/* Like decl_attributes, but handle C++ complexity. */
void
@@ -1284,6 +1303,8 @@ cplus_decl_attributes (tree *decl, tree attributes, int flags)
return;
}
+ cp_check_const_attributes (attributes);
+
if (TREE_CODE (*decl) == TEMPLATE_DECL)
decl = &DECL_TEMPLATE_RESULT (*decl);
new file mode 100644
index 0000000..ac85c07
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-attribute.C
@@ -0,0 +1,63 @@
+// { dg-options -std=c++0x }
+
+//A few constexpr's
+constexpr int foo() { return __alignof__(int); }
+
+template<typename T>
+constexpr int fooT() { return __alignof__(T); }
+
+template<int N>
+constexpr int fooN() { return N; }
+
+//Now the attributes
+
+//with normal variables,
+int a __attribute__((aligned(foo())));
+int b __attribute__((aligned(fooT<int>())));
+int c __attribute__((aligned(fooN<__alignof__(int)>())));
+
+//with variables inside a template,
+template <typename T>
+void fun()
+{
+ T a __attribute__((aligned(foo())));
+ T b __attribute__((aligned(fooT<T>())));
+ T c __attribute__((aligned(fooN<__alignof__(T)>())));
+ T d __attribute__((aligned(fooT<int>())));
+ T e __attribute__((aligned(fooN<__alignof__(int)>())));
+}
+
+//instantiate it,
+void bar()
+{
+ fun<int>();
+}
+
+//with classes
+struct __attribute__((aligned(foo()))) S0
+{
+ char dummy;
+};
+S0 s0;
+
+struct __attribute__((aligned(fooT<int>()))) S1
+{
+ char dummy;
+};
+S1 s1;
+
+//and class templates
+template <typename T>
+struct __attribute__((aligned(foo()))) S2
+{
+ char dummy;
+};
+
+S2<int> s2;
+
+template <typename T>
+struct __attribute__((aligned(fooT<T>()))) S3
+{
+ char dummy;
+};
+S3<int> s3;
--
1.7.0.4

View File

@ -1,59 +0,0 @@
From c68e41052387396cba4a066d8e9658dc2011baf0 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:25:10 +0000
Subject: [PATCH] Core 1148
* typeck.c (check_return_expr): Fix conditions for setting
LOOKUP_PREFER_RVALUE.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171668 138bc75d-0d04-0410-961f-82ee72b054a4
index 0e8a6d7..03aa49e 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -7760,12 +7760,19 @@ check_return_expr (tree retval, bool *no_warning)
/* Under C++0x [12.8/16 class.copy], a returned lvalue is sometimes
treated as an rvalue for the purposes of overload resolution to
- favor move constructors over copy constructors. */
- if ((cxx_dialect != cxx98)
- && named_return_value_okay_p
- /* The variable must not have the `volatile' qualifier. */
- && !CP_TYPE_VOLATILE_P (TREE_TYPE (retval))
- /* The return type must be a class type. */
+ favor move constructors over copy constructors.
+
+ Note that these conditions are similar to, but not as strict as,
+ the conditions for the named return value optimization. */
+ if ((cxx_dialect != cxx98)
+ && (TREE_CODE (retval) == VAR_DECL
+ || TREE_CODE (retval) == PARM_DECL)
+ && DECL_CONTEXT (retval) == current_function_decl
+ && !TREE_STATIC (retval)
+ && same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
+ (TYPE_MAIN_VARIANT
+ (TREE_TYPE (TREE_TYPE (current_function_decl)))))
+ /* This is only interesting for class type. */
&& CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl))))
flags = flags | LOOKUP_PREFER_RVALUE;
new file mode 100644
index 0000000..216b1b5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/elision2.C
@@ -0,0 +1,13 @@
+// Core 1148: should be able to move from value parameter on return
+// { dg-options -std=c++0x }
+
+struct A
+{
+ A(const A&) = delete;
+ A(A&&);
+};
+
+A f (A a)
+{
+ return a;
+}
--
1.7.0.4

View File

@ -1,50 +0,0 @@
From 8d72f0bd42615d92c0db226238694eedb52914d3 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:25:22 +0000
Subject: [PATCH] PR c++/48313
* pt.c (maybe_adjust_types_for_deduction): Handle T&& deduction
from overloaded function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171669 138bc75d-0d04-0410-961f-82ee72b054a4
index 95b82ee..2e18588 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -13936,7 +13936,10 @@ maybe_adjust_types_for_deduction (unification_kind_t strict,
&& TYPE_REF_IS_RVALUE (*parm)
&& TREE_CODE (TREE_TYPE (*parm)) == TEMPLATE_TYPE_PARM
&& cp_type_quals (TREE_TYPE (*parm)) == TYPE_UNQUALIFIED
- && arg_expr && real_lvalue_p (arg_expr))
+ && (arg_expr ? real_lvalue_p (arg_expr)
+ /* try_one_overload doesn't provide an arg_expr, but
+ functions are always lvalues. */
+ : TREE_CODE (*arg) == FUNCTION_TYPE))
*arg = build_reference_type (*arg);
/* [temp.deduct.call]
new file mode 100644
index 0000000..160296f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/rv-deduce2.C
@@ -0,0 +1,18 @@
+// PR c++/48313
+// { dg-options -std=c++0x }
+
+template<typename F>
+void f(F&&) { }
+
+void g() { }
+
+template<typename T> void h() { }
+
+int main()
+{
+ f( g ); // OK
+ void (&p)() = h<int>;
+ f( p ); // OK
+ f( h<int> ); // ???
+}
+
--
1.7.0.4

View File

@ -1,57 +0,0 @@
From d1f71a5193dd2b3debd551f3dc0e0d237acf7e81 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:25:37 +0000
Subject: [PATCH] PR c++/47999
* semantics.c (finish_call_expr): Preserve reference semantics
in templates.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171670 138bc75d-0d04-0410-961f-82ee72b054a4
index 3213483..23bb021 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2150,11 +2150,14 @@ finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
/* A call where the function is unknown. */
result = cp_build_function_call_vec (fn, args, complain);
- if (processing_template_decl)
+ if (processing_template_decl && result != error_mark_node)
{
+ if (TREE_CODE (result) == INDIRECT_REF)
+ result = TREE_OPERAND (result, 0);
result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
KOENIG_LOOKUP_P (result) = koenig_p;
release_tree_vector (orig_args);
+ result = convert_from_reference (result);
}
return result;
new file mode 100644
index 0000000..66630e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/auto22.C
@@ -0,0 +1,21 @@
+// PR c++/47999
+// { dg-options -std=c++0x }
+
+int& identity(int& i)
+{
+ return i;
+}
+
+// In a function template, auto type deduction works incorrectly.
+template <typename = void>
+void f()
+{
+ int i = 0;
+ auto&& x = identity(i); // Type of x should be `int&`, but it is `int&&`.
+}
+
+int main (int argc, char* argv[])
+{
+ f();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,67 +0,0 @@
From 6ec20c02d4514be339f0112d793794abf60451a7 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:25:51 +0000
Subject: [PATCH] * pt.c (build_non_dependent_expr): Keep dereferences outside the
NON_DEPENDENT_EXPR.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171671 138bc75d-0d04-0410-961f-82ee72b054a4
index 2e18588..d649628 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18851,24 +18851,17 @@ build_non_dependent_expr (tree expr)
TREE_OPERAND (expr, 0),
build_non_dependent_expr (TREE_OPERAND (expr, 1)));
+ /* Keep dereferences outside the NON_DEPENDENT_EXPR so lvalue_kind
+ doesn't need to look inside. */
+ if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
+ return convert_from_reference (build_non_dependent_expr
+ (TREE_OPERAND (expr, 0)));
+
/* If the type is unknown, it can't really be non-dependent */
gcc_assert (TREE_TYPE (expr) != unknown_type_node);
- /* Otherwise, build a NON_DEPENDENT_EXPR.
-
- REFERENCE_TYPEs are not stripped for expressions in templates
- because doing so would play havoc with mangling. Consider, for
- example:
-
- template <typename T> void f<T& g>() { g(); }
-
- In the body of "f", the expression for "g" will have
- REFERENCE_TYPE, even though the standard says that it should
- not. The reason is that we must preserve the syntactic form of
- the expression so that mangling (say) "f<g>" inside the body of
- "f" works out correctly. Therefore, the REFERENCE_TYPE is
- stripped here. */
- return build1 (NON_DEPENDENT_EXPR, non_reference (TREE_TYPE (expr)), expr);
+ /* Otherwise, build a NON_DEPENDENT_EXPR. */
+ return build1 (NON_DEPENDENT_EXPR, TREE_TYPE (expr), expr);
}
/* ARGS is a vector of expressions as arguments to a function call.
new file mode 100644
index 0000000..12e363a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/move1.C
@@ -0,0 +1,15 @@
+// { dg-options "-std=c++0x -pedantic-errors" }
+
+#include <utility>
+
+class A { };
+
+static void g ( A && ) { }
+
+template < class T > class B {
+public:
+ void f ( ) {
+ A a;
+ g ( std :: move ( a ) );
+ }
+};
--
1.7.0.4

View File

@ -1,35 +0,0 @@
From af19d0c50df96adb55baaf54026ad82a9d256868 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:26:00 +0000
Subject: [PATCH] * call.c (reference_binding): Allow direct binding to an array
rvalue.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171672 138bc75d-0d04-0410-961f-82ee72b054a4
index ac625a0..2ff3745 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -1429,7 +1429,9 @@ reference_binding (tree rto, tree rfrom, tree expr, bool c_cast_p, int flags)
|| (((CP_TYPE_CONST_NON_VOLATILE_P (to)
&& !(flags & LOOKUP_NO_TEMP_BIND))
|| TYPE_REF_IS_RVALUE (rto))
- && (CLASS_TYPE_P (from) || (expr && lvalue_p (expr))))))
+ && (CLASS_TYPE_P (from)
+ || TREE_CODE (from) == ARRAY_TYPE
+ || (expr && lvalue_p (expr))))))
{
/* [dcl.init.ref]
new file mode 100644
index 0000000..25113d7
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-arrray1.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+typedef int IRT[2];
+
+const IRT& ir = IRT{1,2};
--
1.7.0.4

View File

@ -1,95 +0,0 @@
From 1370bfdaf3735fc1038436cfc86b7cfe43d3eaf0 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:26:10 +0000
Subject: [PATCH] Core 1232
* call.c (build_array_conv): New.
(implicit_conversion): Use it.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171673 138bc75d-0d04-0410-961f-82ee72b054a4
index 2ff3745..c84e6fc 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -801,6 +801,53 @@ build_aggr_conv (tree type, tree ctor, int flags)
return c;
}
+/* Represent a conversion from CTOR, a braced-init-list, to TYPE, an
+ array type, if such a conversion is possible. */
+
+static conversion *
+build_array_conv (tree type, tree ctor, int flags)
+{
+ conversion *c;
+ unsigned HOST_WIDE_INT len = CONSTRUCTOR_NELTS (ctor);
+ tree elttype = TREE_TYPE (type);
+ unsigned i;
+ tree val;
+ bool bad = false;
+ bool user = false;
+ enum conversion_rank rank = cr_exact;
+
+ if (TYPE_DOMAIN (type))
+ {
+ unsigned HOST_WIDE_INT alen = tree_low_cst (array_type_nelts_top (type), 1);
+ if (alen < len)
+ return NULL;
+ }
+
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
+ {
+ conversion *sub
+ = implicit_conversion (elttype, TREE_TYPE (val), val,
+ false, flags);
+ if (sub == NULL)
+ return NULL;
+
+ if (sub->rank > rank)
+ rank = sub->rank;
+ if (sub->user_conv_p)
+ user = true;
+ if (sub->bad_p)
+ bad = true;
+ }
+
+ c = alloc_conversion (ck_aggr);
+ c->type = type;
+ c->rank = rank;
+ c->user_conv_p = user;
+ c->bad_p = bad;
+ c->u.next = NULL;
+ return c;
+}
+
/* Build a representation of the identity conversion from EXPR to
itself. The TYPE should match the type of EXPR, if EXPR is non-NULL. */
@@ -1623,6 +1670,8 @@ implicit_conversion (tree to, tree from, tree expr, bool c_cast_p,
return conv;
}
}
+ else if (TREE_CODE (to) == ARRAY_TYPE)
+ return build_array_conv (to, expr, flags);
}
if (expr != NULL_TREE
new file mode 100644
index 0000000..19eec33
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist-array2.C
@@ -0,0 +1,12 @@
+// { dg-options -std=c++0x }
+
+typedef int IA[2];
+typedef double DA[2];
+
+void f(const IA&) { }
+void f(const DA&);
+
+int main()
+{
+ f({1,2});
+}
--
1.7.0.4

View File

@ -1,71 +0,0 @@
From 7ca62e4f7e0e27a4282dc14e5b89c389d5c194bb Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:26:21 +0000
Subject: [PATCH] * semantics.c (is_valid_constexpr_fn): Specify input location.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171674 138bc75d-0d04-0410-961f-82ee72b054a4
index 23bb021..a41a1d5 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5390,8 +5390,8 @@ is_valid_constexpr_fn (tree fun, bool complain)
{
ret = false;
if (complain)
- error ("invalid type for parameter %q#D of constexpr function",
- parm);
+ error ("invalid type for parameter %d of constexpr "
+ "function %q+#D", DECL_PARM_INDEX (parm), fun);
}
if (!DECL_CONSTRUCTOR_P (fun))
@@ -5401,7 +5401,7 @@ is_valid_constexpr_fn (tree fun, bool complain)
{
ret = false;
if (complain)
- error ("invalid return type %qT of constexpr function %qD",
+ error ("invalid return type %qT of constexpr function %q+D",
rettype, fun);
}
@@ -5411,7 +5411,7 @@ is_valid_constexpr_fn (tree fun, bool complain)
{
ret = false;
if (complain)
- error ("enclosing class of %q#D is not a literal type", fun);
+ error ("enclosing class of %q+#D is not a literal type", fun);
}
}
index a3706d6..183d3f7 100644
--- a/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-diag1.C
@@ -1,12 +1,11 @@
// Test that we explain why a template instantiation isn't constexpr
// { dg-options -std=c++0x }
-// { dg-prune-output "not a constexpr function" }
template <class T>
struct A
{
T t;
- constexpr int f() { return 42; }
+ constexpr int f() { return 42; } // { dg-error "enclosing class" }
};
struct B { B(); operator int(); };
@@ -14,8 +13,8 @@ struct B { B(); operator int(); };
constexpr A<int> ai = { 42 };
constexpr int i = ai.f();
-constexpr int b = A<B>().f(); // { dg-error "enclosing class" }
+constexpr int b = A<B>().f(); // { dg-error "not a constexpr function" }
template <class T>
-constexpr int f (T t) { return 42; }
-constexpr int x = f(B()); // { dg-error "parameter" }
+constexpr int f (T t) { return 42; } // { dg-error "parameter" }
+constexpr int x = f(B()); // { dg-error "constexpr function" }
--
1.7.0.4

View File

@ -1,102 +0,0 @@
From d67703129d516043d4e43bdf79a17889f5abc3f7 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 14:26:33 +0000
Subject: [PATCH] PR c++/48296
* decl.c (cp_finish_decl): Defer validation of constexpr member
functions.
* class.c (finalize_literal_type_property): Validate them here.
* semantics.c (is_valid_constexpr_fn): Don't check completeness.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171675 138bc75d-0d04-0410-961f-82ee72b054a4
index 1325260..42066c3 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4547,6 +4547,8 @@ type_requires_array_cookie (tree type)
static void
finalize_literal_type_property (tree t)
{
+ tree fn;
+
if (cxx_dialect < cxx0x
|| TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t)
/* FIXME These constraints seem unnecessary; remove from standard.
@@ -4557,18 +4559,10 @@ finalize_literal_type_property (tree t)
&& !TYPE_HAS_CONSTEXPR_CTOR (t))
CLASSTYPE_LITERAL_P (t) = false;
- if (!CLASSTYPE_LITERAL_P (t) && !CLASSTYPE_TEMPLATE_INSTANTIATION (t))
- {
- tree fn;
- for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
- if (DECL_DECLARED_CONSTEXPR_P (fn)
- && DECL_NONSTATIC_MEMBER_FUNCTION_P (fn)
- && !DECL_CONSTRUCTOR_P (fn))
- {
- error ("enclosing class of %q+D is not a literal type", fn);
- DECL_DECLARED_CONSTEXPR_P (fn) = false;
- }
- }
+ for (fn = TYPE_METHODS (t); fn; fn = DECL_CHAIN (fn))
+ if (DECL_DECLARED_CONSTEXPR_P (fn)
+ && TREE_CODE (fn) != TEMPLATE_DECL)
+ validate_constexpr_fundecl (fn);
}
/* Check the validity of the bases and members declared in T. Add any
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 3139ad8..fbd6c97 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -5793,7 +5793,10 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
}
}
- if (TREE_CODE (decl) == FUNCTION_DECL)
+ if (TREE_CODE (decl) == FUNCTION_DECL
+ /* For members, defer until finalize_literal_type_property. */
+ && (!DECL_CLASS_SCOPE_P (decl)
+ || !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))))
validate_constexpr_fundecl (decl);
else if (!ensure_literal_type_for_constexpr_object (decl))
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index a41a1d5..9926d26 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5406,8 +5406,7 @@ is_valid_constexpr_fn (tree fun, bool complain)
}
if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
- && COMPLETE_TYPE_P (DECL_CONTEXT (fun))
- && !valid_type_in_constexpr_fundecl_p (DECL_CONTEXT (fun)))
+ && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
{
ret = false;
if (complain)
new file mode 100644
index 0000000..4646f82
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-memfn1.C
@@ -0,0 +1,18 @@
+// PR c++/48296
+// { dg-options -std=c++0x }
+
+struct X
+{
+ constexpr X() { }
+ constexpr X f(X x) { return x; }
+ constexpr X g(X x);
+};
+
+constexpr X X::g(X x) { return x; }
+
+struct Y
+{
+ Y() { }
+ constexpr Y f(Y y); // { dg-error "constexpr" }
+ static constexpr Y g(Y y); // { dg-error "constexpr" }
+};
--
1.7.0.4

View File

@ -1,43 +0,0 @@
From 709a81571cc3f418f51f95ed9291b4f2fabc577c Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 16:07:15 +0000
Subject: [PATCH] PR c++/48166
* decl.c (revert_static_member_fn): Strip function-cv-quals.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171679 138bc75d-0d04-0410-961f-82ee72b054a4
index fbd6c97..41beef3 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -13342,10 +13342,14 @@ static_fn_type (tree memfntype)
void
revert_static_member_fn (tree decl)
{
- TREE_TYPE (decl) = static_fn_type (decl);
+ tree stype = static_fn_type (decl);
- if (cp_type_quals (TREE_TYPE (decl)) != TYPE_UNQUALIFIED)
- error ("static member function %q#D declared with type qualifiers", decl);
+ if (type_memfn_quals (stype) != TYPE_UNQUALIFIED)
+ {
+ error ("static member function %q#D declared with type qualifiers", decl);
+ stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED);
+ }
+ TREE_TYPE (decl) = stype;
if (DECL_ARGUMENTS (decl))
DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
new file mode 100644
index 0000000..ce8af7b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/memfnquals1.C
@@ -0,0 +1,6 @@
+// PR c++/48166
+
+struct foo {
+ static void func ();
+};
+void foo::func () const {} // { dg-error "type qualifiers" }
--
1.7.0.4

View File

@ -1,178 +0,0 @@
From 14fb9260e8c94249305dba567e7e242ac3d30fa7 Mon Sep 17 00:00:00 2001
From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 18:24:02 +0000
Subject: [PATCH] * config/alpha/alpha.c (alpha_sr_alias_set): Don't define.
(alpha_option_override): Don't set alpha_sr_alias_set.
(emit_frame_store_1): Use gen_frame_mem rather than calling
set_mem_alias_set.
(alpha_expand_epilogue): Ditto.
(unicosmk_gen_dsib): Ditto.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171686 138bc75d-0d04-0410-961f-82ee72b054a4
index c1036b4..3da7fa0 100644
index 76ab31a..b41404e 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -94,10 +94,6 @@ int alpha_memory_latency = 3;
static int alpha_function_needs_gp;
-/* The alias set for prologue/epilogue register save/restore. */
-
-static GTY(()) alias_set_type alpha_sr_alias_set;
-
/* The assembler name of the current function. */
static const char *alpha_fnname;
@@ -510,9 +506,6 @@ alpha_option_override (void)
if (align_functions <= 0)
align_functions = 16;
- /* Acquire a unique set number for our register saves and restores. */
- alpha_sr_alias_set = new_alias_set ();
-
/* Register variables and functions with the garbage collector. */
/* Set up function hooks. */
@@ -7715,8 +7708,7 @@ emit_frame_store_1 (rtx value, rtx base_reg, HOST_WIDE_INT frame_bias,
rtx addr, mem, insn;
addr = plus_constant (base_reg, base_ofs);
- mem = gen_rtx_MEM (DImode, addr);
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, addr);
insn = emit_move_insn (mem, value);
RTX_FRAME_RELATED_P (insn) = 1;
@@ -8391,9 +8383,7 @@ alpha_expand_epilogue (void)
/* Restore registers in order, excepting a true frame pointer. */
- mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, reg_offset));
- if (! eh_ofs)
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (sa_reg, reg_offset));
reg = gen_rtx_REG (DImode, REG_RA);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
@@ -8408,8 +8398,8 @@ alpha_expand_epilogue (void)
fp_offset = reg_offset;
else
{
- mem = gen_rtx_MEM (DImode, plus_constant(sa_reg, reg_offset));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode,
+ plus_constant (sa_reg, reg_offset));
reg = gen_rtx_REG (DImode, i);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg,
@@ -8421,8 +8411,7 @@ alpha_expand_epilogue (void)
for (i = 0; i < 31; ++i)
if (fmask & (1UL << i))
{
- mem = gen_rtx_MEM (DFmode, plus_constant(sa_reg, reg_offset));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DFmode, plus_constant (sa_reg, reg_offset));
reg = gen_rtx_REG (DFmode, i+32);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
@@ -8438,9 +8427,9 @@ alpha_expand_epilogue (void)
for (i = 9; i < 15; i++)
if (imask & (1UL << i))
{
- mem = gen_rtx_MEM (DImode, plus_constant(hard_frame_pointer_rtx,
- reg_offset));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode,
+ plus_constant (hard_frame_pointer_rtx,
+ reg_offset));
reg = gen_rtx_REG (DImode, i);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
@@ -8450,9 +8439,9 @@ alpha_expand_epilogue (void)
for (i = 2; i < 10; i++)
if (fmask & (1UL << i))
{
- mem = gen_rtx_MEM (DFmode, plus_constant(hard_frame_pointer_rtx,
- reg_offset));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DFmode,
+ plus_constant (hard_frame_pointer_rtx,
+ reg_offset));
reg = gen_rtx_REG (DFmode, i+32);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
@@ -8460,8 +8449,7 @@ alpha_expand_epilogue (void)
}
/* Restore the return address from the DSIB. */
- mem = gen_rtx_MEM (DImode, plus_constant (hard_frame_pointer_rtx, -8));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (hard_frame_pointer_rtx, -8));
reg = gen_rtx_REG (DImode, REG_RA);
emit_move_insn (reg, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE, reg, cfa_restores);
@@ -8524,9 +8512,8 @@ alpha_expand_epilogue (void)
if (TARGET_ABI_UNICOSMK)
{
emit_insn (gen_blockage ());
- mem = gen_rtx_MEM (DImode,
- plus_constant (hard_frame_pointer_rtx, -16));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode,
+ plus_constant (hard_frame_pointer_rtx, -16));
emit_move_insn (hard_frame_pointer_rtx, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE,
hard_frame_pointer_rtx, cfa_restores);
@@ -8534,8 +8521,7 @@ alpha_expand_epilogue (void)
else if (fp_is_frame_pointer)
{
emit_insn (gen_blockage ());
- mem = gen_rtx_MEM (DImode, plus_constant (sa_reg, fp_offset));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (sa_reg, fp_offset));
emit_move_insn (hard_frame_pointer_rtx, mem);
cfa_restores = alloc_reg_note (REG_CFA_RESTORE,
hard_frame_pointer_rtx, cfa_restores);
@@ -10515,15 +10501,13 @@ unicosmk_gen_dsib (unsigned long *imaskP)
/* Save the return address. */
- mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 56));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (stack_pointer_rtx, 56));
FRP (emit_move_insn (mem, gen_rtx_REG (DImode, REG_RA)));
(*imaskP) &= ~(1UL << REG_RA);
/* Save the old frame pointer. */
- mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 48));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (stack_pointer_rtx, 48));
FRP (emit_move_insn (mem, hard_frame_pointer_rtx));
(*imaskP) &= ~(1UL << HARD_FRAME_POINTER_REGNUM);
@@ -10532,8 +10516,7 @@ unicosmk_gen_dsib (unsigned long *imaskP)
/* Store the SSIB pointer. */
ssib_name = ggc_strdup (unicosmk_ssib_name ());
- mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 32));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (stack_pointer_rtx, 32));
FRP (emit_move_insn (gen_rtx_REG (DImode, 5),
gen_rtx_SYMBOL_REF (Pmode, ssib_name)));
@@ -10541,8 +10524,7 @@ unicosmk_gen_dsib (unsigned long *imaskP)
/* Save the CIW index. */
- mem = gen_rtx_MEM (DImode, plus_constant (stack_pointer_rtx, 24));
- set_mem_alias_set (mem, alpha_sr_alias_set);
+ mem = gen_frame_mem (DImode, plus_constant (stack_pointer_rtx, 24));
FRP (emit_move_insn (mem, gen_rtx_REG (DImode, 25)));
emit_insn (gen_blockage ());
--
1.7.0.4

View File

@ -1,56 +0,0 @@
From 4af193055b0dcc204387ba06e11a053c5b55ad15 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 18:47:47 +0000
Subject: [PATCH] PR c++/48319
* pt.c (value_dependent_expression_p): Handle TEMPLATE_ID_EXPR.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171688 138bc75d-0d04-0410-961f-82ee72b054a4
index d649628..da9365f 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18220,6 +18220,11 @@ value_dependent_expression_p (tree expression)
return false;
}
+ case TEMPLATE_ID_EXPR:
+ /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
+ type-dependent. */
+ return type_dependent_expression_p (expression);
+
default:
/* A constant expression is value-dependent if any subexpression is
value-dependent. */
new file mode 100644
index 0000000..1ceeeaf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dependent1.C
@@ -0,0 +1,25 @@
+// PR c++/48319
+// { dg-options -std=c++0x }
+// We were failing to recognize declval<_Args1> as dependent.
+
+template<typename Tp> Tp declval() noexcept;
+
+template<typename _Tp>
+class __is_constructible_helper
+{
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+public:
+ static const bool __value = sizeof(__test<_Tp>(0)) == 1;
+};
+
+int main() {
+ return __is_constructible_helper<int>::__value;
+}
--
1.7.0.4

View File

@ -1,53 +0,0 @@
From 0d6afd28da26c4b09e1eb2b16d7a3c021fae7372 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 20:30:06 +0000
Subject: [PATCH] PR preprocessor/48248
* c-ppoutput.c (print): Add src_file field.
(init_pp_output): Initialize it.
(maybe_print_line): Don't optimize by adding up to 8 newlines
if map->to_file and print.src_file are different file.
(print_line): Update print.src_file.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171697 138bc75d-0d04-0410-961f-82ee72b054a4
index 57ed676..9ebac42 100644
--- a/gcc/c-family/c-ppoutput.c
+++ b/gcc/c-family/c-ppoutput.c
@@ -36,6 +36,7 @@ static struct
int src_line; /* Line number currently being written. */
unsigned char printed; /* Nonzero if something output at line. */
bool first_time; /* pp_file_change hasn't been called yet. */
+ const char *src_file; /* Current source file. */
} print;
/* Defined and undefined macros being queued for output with -dU at
@@ -153,6 +154,7 @@ init_pp_output (FILE *out_stream)
print.prev = 0;
print.outf = out_stream;
print.first_time = 1;
+ print.src_file = "";
}
/* Writes out the preprocessed file, handling spacing and paste
@@ -312,7 +314,9 @@ maybe_print_line (source_location src_loc)
print.printed = 0;
}
- if (src_line >= print.src_line && src_line < print.src_line + 8)
+ if (src_line >= print.src_line
+ && src_line < print.src_line + 8
+ && strcmp (map->to_file, print.src_file) == 0)
{
while (src_line > print.src_line)
{
@@ -344,6 +348,7 @@ print_line (source_location src_loc, const char *special_flags)
unsigned char *p;
print.src_line = SOURCE_LINE (map, src_loc);
+ print.src_file = map->to_file;
/* cpp_quote_string does not nul-terminate, so we have to do it
ourselves. */
--
1.7.0.4

View File

@ -1,803 +0,0 @@
From e4e229cd56063482aced7df857e82512b846435d Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 29 Mar 2011 22:47:59 +0000
Subject: [PATCH] PR debug/48253
* dwarf2out.c (struct dw_fde_struct): Remove dw_fde_hot_section_label,
dw_fde_hot_section_end_label, dw_fde_unlikely_section_label,
dw_fde_unlikely_section_end_label, cold_in_std_section,
dw_fde_switched_sections and dw_fde_switched_cold_to_hot fields.
Add dw_fde_second_begin, dw_fde_second_end and second_in_std_section
fields.
(output_fde): Use dw_fde_second_{begin,end} if second is
true, otherwise dw_fde_{begin,end}.
(output_call_frame_info): Test dw_fde_second_begin != NULL
instead of dw_fde_switched_sections.
(dwarf2out_begin_prologue): Stop initializing removed dw_fde_struct
fields, initialize new fields. Initialize in_std_section
unconditionally from the first partition.
(dwarf2out_end_epilogue): Don't override dw_fde_end when
dw_fde_second_begin is non-NULL.
(dwarf2out_switch_text_section): Stop initializing removed
dw_fde_struct fields, initialize new fields, initialize
also dw_fde_end here. Set dw_fde_switch_cfi even when
dwarf2out_do_cfi_asm (). Call var_location_switch_text_section.
(struct var_loc_list_def): Add last_before_switch field.
(arange_table, arange_table_allocated, arange_table_in_use,
ARANGE_TABLE_INCREMENT, add_arange): Removed.
(size_of_aranges): Count !in_std_section and !second_in_std_section
hunks in fdes, instead of looking at arange_table_in_use.
(output_aranges): Add aranges_length argument, don't call
size_of_aranges here. Instead of using aranges_table*
emit ranges for fdes when !in_std_section resp.
!second_in_std_section.
(dw_loc_list): Break ranges crossing section switch.
(convert_cfa_to_fb_loc_list): Likewise. If switched sections,
use dw_fde_second_end instead of dw_fde_end as end of last
range.
(gen_subprogram_die): Don't call add_arange. Use
dw_fde_{begin,end} for first partition and if switched
section dw_fde_second_{begin,end} for the second.
(var_location_switch_text_section_1,
var_location_switch_text_section): New functions.
(dwarf2out_begin_function): Initialize cold_text_section even
when function_section () isn't text_section.
(prune_unused_types): Don't walk arange_table.
(dwarf2out_finish): Don't needlessly test
flag_reorder_blocks_and_partition when testing cold_text_section_used.
If info_section_emitted, call size_of_aranges and if it indicates
non-empty .debug_aranges, call output_aranges with the computed
size. Stop using removed dw_fde_struct fields, use
dw_fde_{begin,end} for first partition and dw_fde_second_{begin,end}
for second.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171702 138bc75d-0d04-0410-961f-82ee72b054a4
index b7c06e5..1e5917c 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -303,10 +303,8 @@ typedef struct GTY(()) dw_fde_struct {
const char *dw_fde_end;
const char *dw_fde_vms_end_prologue;
const char *dw_fde_vms_begin_epilogue;
- const char *dw_fde_hot_section_label;
- const char *dw_fde_hot_section_end_label;
- const char *dw_fde_unlikely_section_label;
- const char *dw_fde_unlikely_section_end_label;
+ const char *dw_fde_second_begin;
+ const char *dw_fde_second_end;
dw_cfi_ref dw_fde_cfi;
dw_cfi_ref dw_fde_switch_cfi; /* Last CFI before switching sections. */
HOST_WIDE_INT stack_realignment;
@@ -325,13 +323,9 @@ typedef struct GTY(()) dw_fde_struct {
unsigned drap_reg_saved: 1;
/* True iff dw_fde_begin label is in text_section or cold_text_section. */
unsigned in_std_section : 1;
- /* True iff dw_fde_unlikely_section_label is in text_section or
+ /* True iff dw_fde_second_begin label is in text_section or
cold_text_section. */
- unsigned cold_in_std_section : 1;
- /* True iff switched sections. */
- unsigned dw_fde_switched_sections : 1;
- /* True iff switching from cold to hot section. */
- unsigned dw_fde_switched_cold_to_hot : 1;
+ unsigned second_in_std_section : 1;
}
dw_fde_node;
@@ -3625,28 +3619,8 @@ output_fde (dw_fde_ref fde, bool for_eh, bool second,
dw2_asm_output_offset (DWARF_OFFSET_SIZE, section_start_label,
debug_frame_section, "FDE CIE offset");
- if (!fde->dw_fde_switched_sections)
- {
- begin = fde->dw_fde_begin;
- end = fde->dw_fde_end;
- }
- else
- {
- /* For the first section, prefer dw_fde_begin over
- dw_fde_{hot,cold}_section_label, as the latter
- might be separated from the real start of the
- function by alignment padding. */
- if (!second)
- begin = fde->dw_fde_begin;
- else if (fde->dw_fde_switched_cold_to_hot)
- begin = fde->dw_fde_hot_section_label;
- else
- begin = fde->dw_fde_unlikely_section_label;
- if (second ^ fde->dw_fde_switched_cold_to_hot)
- end = fde->dw_fde_unlikely_section_end_label;
- else
- end = fde->dw_fde_hot_section_end_label;
- }
+ begin = second ? fde->dw_fde_second_begin : fde->dw_fde_begin;
+ end = second ? fde->dw_fde_second_end : fde->dw_fde_end;
if (for_eh)
{
@@ -3707,7 +3681,7 @@ output_fde (dw_fde_ref fde, bool for_eh, bool second,
/* Loop through the Call Frame Instructions associated with
this FDE. */
fde->dw_fde_current_label = begin;
- if (!fde->dw_fde_switched_sections)
+ if (fde->dw_fde_second_begin == NULL)
for (cfi = fde->dw_fde_cfi; cfi != NULL; cfi = cfi->dw_cfi_next)
output_cfi (cfi, fde, for_eh);
else if (!second)
@@ -3986,7 +3960,7 @@ output_call_frame_info (int for_eh)
if (for_eh && !fde_needed_for_eh_p (fde))
continue;
- for (k = 0; k < (fde->dw_fde_switched_sections ? 2 : 1); k++)
+ for (k = 0; k < (fde->dw_fde_second_begin ? 2 : 1); k++)
output_fde (fde, for_eh, k, section_start_label, fde_encoding,
augmentation, any_lsda_needed, lsda_encoding);
}
@@ -4104,14 +4078,10 @@ dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
fde = &fde_table[fde_table_in_use++];
fde->decl = current_function_decl;
fde->dw_fde_begin = dup_label;
- fde->dw_fde_current_label = dup_label;
- fde->dw_fde_hot_section_label = NULL;
- fde->dw_fde_hot_section_end_label = NULL;
- fde->dw_fde_unlikely_section_label = NULL;
- fde->dw_fde_unlikely_section_end_label = NULL;
- fde->dw_fde_switched_sections = 0;
- fde->dw_fde_switched_cold_to_hot = 0;
fde->dw_fde_end = NULL;
+ fde->dw_fde_current_label = dup_label;
+ fde->dw_fde_second_begin = NULL;
+ fde->dw_fde_second_end = NULL;
fde->dw_fde_vms_end_prologue = NULL;
fde->dw_fde_vms_begin_epilogue = NULL;
fde->dw_fde_cfi = NULL;
@@ -4122,27 +4092,9 @@ dwarf2out_begin_prologue (unsigned int line ATTRIBUTE_UNUSED,
fde->nothrow = crtl->nothrow;
fde->drap_reg = INVALID_REGNUM;
fde->vdrap_reg = INVALID_REGNUM;
- if (flag_reorder_blocks_and_partition)
- {
- section *unlikelysec;
- if (first_function_block_is_cold)
- fde->in_std_section = 1;
- else
- fde->in_std_section
- = (fnsec == text_section
- || (cold_text_section && fnsec == cold_text_section));
- unlikelysec = unlikely_text_section ();
- fde->cold_in_std_section
- = (unlikelysec == text_section
- || (cold_text_section && unlikelysec == cold_text_section));
- }
- else
- {
- fde->in_std_section
- = (fnsec == text_section
- || (cold_text_section && fnsec == cold_text_section));
- fde->cold_in_std_section = 0;
- }
+ fde->in_std_section = (fnsec == text_section
+ || (cold_text_section && fnsec == cold_text_section));
+ fde->second_in_std_section = 0;
args_size = old_args_size = 0;
@@ -4238,7 +4190,8 @@ dwarf2out_end_epilogue (unsigned int line ATTRIBUTE_UNUSED,
ASM_OUTPUT_LABEL (asm_out_file, label);
fde = current_fde ();
gcc_assert (fde != NULL);
- fde->dw_fde_end = xstrdup (label);
+ if (fde->dw_fde_second_begin == NULL)
+ fde->dw_fde_end = xstrdup (label);
}
void
@@ -4285,20 +4238,29 @@ dwarf2out_note_section_used (void)
cold_text_section_used = true;
}
+static void var_location_switch_text_section (void);
+
void
dwarf2out_switch_text_section (void)
{
+ section *sect;
dw_fde_ref fde = current_fde ();
+ dw_cfi_ref cfi;
- gcc_assert (cfun && fde && !fde->dw_fde_switched_sections);
-
- fde->dw_fde_switched_sections = 1;
- fde->dw_fde_switched_cold_to_hot = !in_cold_section_p;
+ gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
- fde->dw_fde_hot_section_label = crtl->subsections.hot_section_label;
- fde->dw_fde_hot_section_end_label = crtl->subsections.hot_section_end_label;
- fde->dw_fde_unlikely_section_label = crtl->subsections.cold_section_label;
- fde->dw_fde_unlikely_section_end_label = crtl->subsections.cold_section_end_label;
+ if (!in_cold_section_p)
+ {
+ fde->dw_fde_end = crtl->subsections.cold_section_end_label;
+ fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
+ fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
+ }
+ else
+ {
+ fde->dw_fde_end = crtl->subsections.hot_section_end_label;
+ fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
+ fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
+ }
have_multiple_function_sections = true;
/* Reset the current label on switching text sections, so that we
@@ -4313,7 +4275,12 @@ dwarf2out_switch_text_section (void)
fprintf (asm_out_file, "\t.cfi_endproc\n");
/* Now do the real section switch. */
- switch_to_section (current_function_section ());
+ sect = current_function_section ();
+ switch_to_section (sect);
+
+ fde->second_in_std_section
+ = (sect == text_section
+ || (cold_text_section && sect == cold_text_section));
if (dwarf2out_do_cfi_asm ())
{
@@ -4322,16 +4289,12 @@ dwarf2out_switch_text_section (void)
again. */
output_cfis (fde->dw_fde_cfi, true, fde, true);
}
- else
- {
- dw_cfi_ref cfi = fde->dw_fde_cfi;
-
- cfi = fde->dw_fde_cfi;
- if (cfi)
- while (cfi->dw_cfi_next != NULL)
- cfi = cfi->dw_cfi_next;
- fde->dw_fde_switch_cfi = cfi;
- }
+ cfi = fde->dw_fde_cfi;
+ if (cfi)
+ while (cfi->dw_cfi_next != NULL)
+ cfi = cfi->dw_cfi_next;
+ fde->dw_fde_switch_cfi = cfi;
+ var_location_switch_text_section ();
}
/* And now, the subset of the debugging information support code necessary
@@ -6110,6 +6073,11 @@ struct GTY (()) var_loc_list_def {
Do not mark it for GC because it is marked through the chain. */
struct var_loc_node * GTY ((skip ("%h"))) last;
+ /* Pointer to the last element before section switch,
+ if NULL, either sections weren't switched or first
+ is after section switch. */
+ struct var_loc_node * GTY ((skip ("%h"))) last_before_switch;
+
/* DECL_UID of the variable decl. */
unsigned int decl_id;
};
@@ -6177,19 +6145,6 @@ static GTY (()) VEC (pubname_entry, gc) * pubtype_table;
defines/undefines (and file start/end markers). */
static GTY (()) VEC (macinfo_entry, gc) * macinfo_table;
-/* Array of dies for which we should generate .debug_arange info. */
-static GTY((length ("arange_table_allocated"))) dw_die_ref *arange_table;
-
-/* Number of elements currently allocated for arange_table. */
-static GTY(()) unsigned arange_table_allocated;
-
-/* Number of elements in arange_table currently in use. */
-static GTY(()) unsigned arange_table_in_use;
-
-/* Size (in elements) of increments by which we may expand the
- arange_table. */
-#define ARANGE_TABLE_INCREMENT 64
-
/* Array of dies for which we should generate .debug_ranges info. */
static GTY ((length ("ranges_table_allocated"))) dw_ranges_ref ranges_table;
@@ -6433,8 +6388,7 @@ static void add_pubname (tree, dw_die_ref);
static void add_pubname_string (const char *, dw_die_ref);
static void add_pubtype (tree, dw_die_ref);
static void output_pubnames (VEC (pubname_entry,gc) *);
-static void add_arange (tree, dw_die_ref);
-static void output_aranges (void);
+static void output_aranges (unsigned long);
static unsigned int add_ranges_num (int);
static unsigned int add_ranges (const_tree);
static void add_ranges_by_labels (dw_die_ref, const char *, const char *,
@@ -10868,7 +10822,20 @@ size_of_aranges (void)
size += 2 * DWARF2_ADDR_SIZE;
if (cold_text_section_used)
size += 2 * DWARF2_ADDR_SIZE;
- size += 2 * DWARF2_ADDR_SIZE * arange_table_in_use;
+ if (have_multiple_function_sections)
+ {
+ unsigned fde_idx = 0;
+
+ for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
+ {
+ dw_fde_ref fde = &fde_table[fde_idx];
+
+ if (!fde->in_std_section)
+ size += 2 * DWARF2_ADDR_SIZE;
+ if (fde->dw_fde_second_begin && !fde->second_in_std_section)
+ size += 2 * DWARF2_ADDR_SIZE;
+ }
+ }
/* Count the two zero words used to terminated the address range table. */
size += 2 * DWARF2_ADDR_SIZE;
@@ -11696,35 +11663,14 @@ output_pubnames (VEC (pubname_entry, gc) * names)
dw2_asm_output_data (DWARF_OFFSET_SIZE, 0, NULL);
}
-/* Add a new entry to .debug_aranges if appropriate. */
-
-static void
-add_arange (tree decl, dw_die_ref die)
-{
- if (! DECL_SECTION_NAME (decl))
- return;
-
- if (arange_table_in_use == arange_table_allocated)
- {
- arange_table_allocated += ARANGE_TABLE_INCREMENT;
- arange_table = GGC_RESIZEVEC (dw_die_ref, arange_table,
- arange_table_allocated);
- memset (arange_table + arange_table_in_use, 0,
- ARANGE_TABLE_INCREMENT * sizeof (dw_die_ref));
- }
-
- arange_table[arange_table_in_use++] = die;
-}
-
/* Output the information that goes into the .debug_aranges table.
Namely, define the beginning and ending address range of the
text section generated for this compilation unit. */
static void
-output_aranges (void)
+output_aranges (unsigned long aranges_length)
{
unsigned i;
- unsigned long aranges_length = size_of_aranges ();
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
@@ -11769,38 +11715,28 @@ output_aranges (void)
cold_text_section_label, "Length");
}
- for (i = 0; i < arange_table_in_use; i++)
+ if (have_multiple_function_sections)
{
- dw_die_ref die = arange_table[i];
-
- /* We shouldn't see aranges for DIEs outside of the main CU. */
- gcc_assert (die->die_mark);
+ unsigned fde_idx = 0;
- if (die->die_tag == DW_TAG_subprogram)
- {
- dw2_asm_output_addr (DWARF2_ADDR_SIZE, get_AT_low_pc (die),
- "Address");
- dw2_asm_output_delta (DWARF2_ADDR_SIZE, get_AT_hi_pc (die),
- get_AT_low_pc (die), "Length");
- }
- else
+ for (fde_idx = 0; fde_idx < fde_table_in_use; fde_idx++)
{
- /* A static variable; extract the symbol from DW_AT_location.
- Note that this code isn't currently hit, as we only emit
- aranges for functions (jason 9/23/99). */
- dw_attr_ref a = get_AT (die, DW_AT_location);
- dw_loc_descr_ref loc;
-
- gcc_assert (a && AT_class (a) == dw_val_class_loc);
-
- loc = AT_loc (a);
- gcc_assert (loc->dw_loc_opc == DW_OP_addr);
-
- dw2_asm_output_addr_rtx (DWARF2_ADDR_SIZE,
- loc->dw_loc_oprnd1.v.val_addr, "Address");
- dw2_asm_output_data (DWARF2_ADDR_SIZE,
- get_AT_unsigned (die, DW_AT_byte_size),
- "Length");
+ dw_fde_ref fde = &fde_table[fde_idx];
+
+ if (!fde->in_std_section)
+ {
+ dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_begin,
+ "Address");
+ dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_end,
+ fde->dw_fde_begin, "Length");
+ }
+ if (fde->dw_fde_second_begin && !fde->second_in_std_section)
+ {
+ dw2_asm_output_addr (DWARF2_ADDR_SIZE, fde->dw_fde_second_begin,
+ "Address");
+ dw2_asm_output_delta (DWARF2_ADDR_SIZE, fde->dw_fde_second_end,
+ fde->dw_fde_second_begin, "Length");
+ }
}
}
@@ -15210,9 +15146,23 @@ dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
}
if (descr)
{
+ bool range_across_switch = false;
+ /* If section switch happens in between node->label
+ and node->next->label (or end of function) and
+ we can't emit it as a single entry list,
+ emit two ranges, first one ending at the end
+ of first partition and second one starting at the
+ beginning of second partition. */
+ if (node == loc_list->last_before_switch
+ && (node != loc_list->first || loc_list->first->next)
+ && current_function_decl)
+ {
+ endname = current_fde ()->dw_fde_end;
+ range_across_switch = true;
+ }
/* The variable has a location between NODE->LABEL and
NODE->NEXT->LABEL. */
- if (node->next)
+ else if (node->next)
endname = node->next->label;
/* If the variable has a location at the last label
it keeps its location until the end of function. */
@@ -15227,6 +15177,30 @@ dw_loc_list (var_loc_list *loc_list, tree decl, int want_address)
*listp = new_loc_list (descr, node->label, endname, secname);
listp = &(*listp)->dw_loc_next;
+
+ if (range_across_switch)
+ {
+ if (GET_CODE (node->loc) == EXPR_LIST)
+ descr = dw_sra_loc_expr (decl, node->loc);
+ else
+ {
+ initialized = NOTE_VAR_LOCATION_STATUS (node->loc);
+ varloc = NOTE_VAR_LOCATION (node->loc);
+ descr = dw_loc_list_1 (decl, varloc, want_address,
+ initialized);
+ }
+ gcc_assert (descr);
+ /* The variable has a location between NODE->LABEL and
+ NODE->NEXT->LABEL. */
+ if (node->next)
+ endname = node->next->label;
+ else
+ endname = current_fde ()->dw_fde_second_end;
+ *listp = new_loc_list (descr,
+ current_fde ()->dw_fde_second_begin,
+ endname, secname);
+ listp = &(*listp)->dw_loc_next;
+ }
}
}
@@ -17305,33 +17279,61 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
last_cfa = next_cfa;
last_label = start_label;
+ if (fde->dw_fde_second_begin && fde->dw_fde_switch_cfi == NULL)
+ {
+ /* If the first partition contained no CFI adjustments, the
+ CIE opcodes apply to the whole first partition. */
+ *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
+ fde->dw_fde_begin, fde->dw_fde_end, section);
+ list_tail =&(*list_tail)->dw_loc_next;
+ start_label = last_label = fde->dw_fde_second_begin;
+ }
+
for (cfi = fde->dw_fde_cfi; cfi; cfi = cfi->dw_cfi_next)
- switch (cfi->dw_cfi_opc)
- {
- case DW_CFA_set_loc:
- case DW_CFA_advance_loc1:
- case DW_CFA_advance_loc2:
- case DW_CFA_advance_loc4:
- if (!cfa_equal_p (&last_cfa, &next_cfa))
- {
- *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
- start_label, last_label, section);
+ {
+ switch (cfi->dw_cfi_opc)
+ {
+ case DW_CFA_set_loc:
+ case DW_CFA_advance_loc1:
+ case DW_CFA_advance_loc2:
+ case DW_CFA_advance_loc4:
+ if (!cfa_equal_p (&last_cfa, &next_cfa))
+ {
+ *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
+ start_label, last_label, section);
- list_tail = &(*list_tail)->dw_loc_next;
- last_cfa = next_cfa;
- start_label = last_label;
- }
- last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
- break;
+ list_tail = &(*list_tail)->dw_loc_next;
+ last_cfa = next_cfa;
+ start_label = last_label;
+ }
+ last_label = cfi->dw_cfi_oprnd1.dw_cfi_addr;
+ break;
- case DW_CFA_advance_loc:
- /* The encoding is complex enough that we should never emit this. */
- gcc_unreachable ();
+ case DW_CFA_advance_loc:
+ /* The encoding is complex enough that we should never emit this. */
+ gcc_unreachable ();
- default:
- lookup_cfa_1 (cfi, &next_cfa, &remember);
- break;
- }
+ default:
+ lookup_cfa_1 (cfi, &next_cfa, &remember);
+ break;
+ }
+ if (cfi == fde->dw_fde_switch_cfi)
+ {
+ if (!cfa_equal_p (&last_cfa, &next_cfa))
+ {
+ *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
+ start_label, last_label, section);
+
+ list_tail = &(*list_tail)->dw_loc_next;
+ last_cfa = next_cfa;
+ start_label = last_label;
+ }
+ *list_tail = new_loc_list (build_cfa_loc (&last_cfa, offset),
+ start_label, fde->dw_fde_end, section);
+ list_tail = &(*list_tail)->dw_loc_next;
+ start_label = last_label = fde->dw_fde_second_begin;
+ }
+ }
if (!cfa_equal_p (&last_cfa, &next_cfa))
{
@@ -17342,7 +17344,10 @@ convert_cfa_to_fb_loc_list (HOST_WIDE_INT offset)
}
*list_tail = new_loc_list (build_cfa_loc (&next_cfa, offset),
- start_label, fde->dw_fde_end, section);
+ start_label,
+ fde->dw_fde_second_begin
+ ? fde->dw_fde_second_end : fde->dw_fde_end,
+ section);
if (list && list->dw_loc_next)
gen_llsym (list);
@@ -19213,14 +19218,13 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
#endif
add_pubname (decl, subr_die);
- add_arange (decl, subr_die);
}
else
{ /* Generate pubnames entries for the split function code
ranges. */
dw_fde_ref fde = &fde_table[current_funcdef_fde];
- if (fde->dw_fde_switched_sections)
+ if (fde->dw_fde_second_begin)
{
if (dwarf_version >= 3 || !dwarf_strict)
{
@@ -19229,28 +19233,11 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
section, since the HOT/COLD labels might precede an
alignment offset. */
bool range_list_added = false;
- if (fde->in_std_section)
- {
- add_ranges_by_labels (subr_die,
- fde->dw_fde_begin,
- fde->dw_fde_end,
- &range_list_added);
- add_ranges_by_labels (subr_die,
- fde->dw_fde_unlikely_section_label,
- fde->dw_fde_unlikely_section_end_label,
- &range_list_added);
- }
- else
- {
- add_ranges_by_labels (subr_die,
- fde->dw_fde_begin,
- fde->dw_fde_end,
- &range_list_added);
- add_ranges_by_labels (subr_die,
- fde->dw_fde_hot_section_label,
- fde->dw_fde_hot_section_end_label,
- &range_list_added);
- }
+ add_ranges_by_labels (subr_die, fde->dw_fde_begin,
+ fde->dw_fde_end, &range_list_added);
+ add_ranges_by_labels (subr_die, fde->dw_fde_second_begin,
+ fde->dw_fde_second_end,
+ &range_list_added);
add_pubname (decl, subr_die);
if (range_list_added)
add_ranges (NULL);
@@ -19275,7 +19262,6 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
fde->dw_fde_end);
/* Add it. */
add_pubname (decl, subr_die);
- add_arange (decl, subr_die);
/* Build a minimal DIE for the secondary section. */
seg_die = new_die (DW_TAG_subprogram,
@@ -19293,30 +19279,18 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
add_linkage_name (seg_die, decl);
}
- gcc_assert (name!=NULL);
+ gcc_assert (name != NULL);
add_pure_or_virtual_attribute (seg_die, decl);
if (DECL_ARTIFICIAL (decl))
add_AT_flag (seg_die, DW_AT_artificial, 1);
- if (fde->in_std_section)
- {
- name = concat ("__cold_sect_of_", name, NULL);
- add_AT_lbl_id (seg_die, DW_AT_low_pc,
- fde->dw_fde_unlikely_section_label);
- add_AT_lbl_id (seg_die, DW_AT_high_pc,
- fde->dw_fde_unlikely_section_end_label);
- }
- else
- {
- name = concat ("__hot_sect_of_", name, NULL);
- add_AT_lbl_id (seg_die, DW_AT_low_pc,
- fde->dw_fde_hot_section_label);
- add_AT_lbl_id (seg_die, DW_AT_high_pc,
- fde->dw_fde_hot_section_end_label);
- }
+ name = concat ("__second_sect_of_", name, NULL);
+ add_AT_lbl_id (seg_die, DW_AT_low_pc,
+ fde->dw_fde_second_begin);
+ add_AT_lbl_id (seg_die, DW_AT_high_pc,
+ fde->dw_fde_second_end);
add_name_attribute (seg_die, name);
add_pubname_string (name, seg_die);
- add_arange (decl, seg_die);
}
}
else
@@ -19324,7 +19298,6 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
add_AT_lbl_id (subr_die, DW_AT_low_pc, fde->dw_fde_begin);
add_AT_lbl_id (subr_die, DW_AT_high_pc, fde->dw_fde_end);
add_pubname (decl, subr_die);
- add_arange (decl, subr_die);
}
}
@@ -21975,6 +21948,29 @@ dwarf2out_var_location (rtx loc_note)
last_in_cold_section_p = in_cold_section_p;
}
+/* Note in one location list that text section has changed. */
+
+static int
+var_location_switch_text_section_1 (void **slot, void *data ATTRIBUTE_UNUSED)
+{
+ var_loc_list *list = (var_loc_list *) *slot;
+ if (list->first)
+ list->last_before_switch
+ = list->last->next ? list->last->next : list->last;
+ return 1;
+}
+
+/* Note in all location lists that text section has changed. */
+
+static void
+var_location_switch_text_section (void)
+{
+ if (decl_loc_table == NULL)
+ return;
+
+ htab_traverse (decl_loc_table, var_location_switch_text_section_1, NULL);
+}
+
/* We need to reset the locations at the beginning of each
function. We can't do this in the end_function hook, because the
declarations that use the locations won't have been output when
@@ -21985,7 +21981,7 @@ dwarf2out_begin_function (tree fun)
{
if (function_section (fun) != text_section)
have_multiple_function_sections = true;
- else if (flag_reorder_blocks_and_partition && !cold_text_section)
+ if (flag_reorder_blocks_and_partition && !cold_text_section)
{
gcc_assert (current_function_decl == fun);
cold_text_section = unlikely_text_section ();
@@ -22702,11 +22698,9 @@ prune_unused_types (void)
}
/* Also set the mark on nodes referenced from the
- pubname_table or arange_table. */
+ pubname_table. */
FOR_EACH_VEC_ELT (pubname_entry, pubname_table, i, pub)
prune_unused_types_mark (pub->die, 1);
- for (i = 0; i < arange_table_in_use; i++)
- prune_unused_types_mark (arange_table[i], 1);
/* Mark nodes referenced from the direct call table. */
FOR_EACH_VEC_ELT (dcall_entry, dcall_table, i, dcall)
@@ -23479,7 +23473,7 @@ dwarf2out_finish (const char *filename)
if (text_section_used)
add_ranges_by_labels (comp_unit_die (), text_section_label,
text_end_label, &range_list_added);
- if (flag_reorder_blocks_and_partition && cold_text_section_used)
+ if (cold_text_section_used)
add_ranges_by_labels (comp_unit_die (), cold_text_section_label,
cold_end_label, &range_list_added);
@@ -23487,22 +23481,12 @@ dwarf2out_finish (const char *filename)
{
dw_fde_ref fde = &fde_table[fde_idx];
- if (fde->dw_fde_switched_sections)
- {
- if (!fde->in_std_section)
- add_ranges_by_labels (comp_unit_die (),
- fde->dw_fde_hot_section_label,
- fde->dw_fde_hot_section_end_label,
- &range_list_added);
- if (!fde->cold_in_std_section)
- add_ranges_by_labels (comp_unit_die (),
- fde->dw_fde_unlikely_section_label,
- fde->dw_fde_unlikely_section_end_label,
- &range_list_added);
- }
- else if (!fde->in_std_section)
+ if (!fde->in_std_section)
add_ranges_by_labels (comp_unit_die (), fde->dw_fde_begin,
fde->dw_fde_end, &range_list_added);
+ if (fde->dw_fde_second_begin && !fde->second_in_std_section)
+ add_ranges_by_labels (comp_unit_die (), fde->dw_fde_second_begin,
+ fde->dw_fde_second_end, &range_list_added);
}
if (range_list_added)
@@ -23614,13 +23598,21 @@ dwarf2out_finish (const char *filename)
output_vcall_table ();
}
- /* Output the address range information. We only put functions in the arange
- table, so don't write it out if we don't have any. */
- if ((text_section_used || cold_text_section_used || arange_table_in_use)
- && info_section_emitted)
+ /* Output the address range information. We only put functions in the
+ arange table, so don't write it out if we don't have any. */
+ if (info_section_emitted)
{
- switch_to_section (debug_aranges_section);
- output_aranges ();
+ unsigned long aranges_length = size_of_aranges ();
+
+ /* Empty .debug_aranges would contain just header and
+ terminating 0,0. */
+ if (aranges_length
+ != (unsigned long) (DWARF_ARANGES_HEADER_SIZE
+ + 2 * DWARF2_ADDR_SIZE))
+ {
+ switch_to_section (debug_aranges_section);
+ output_aranges (aranges_length);
+ }
}
/* Output ranges section if necessary. */
--
1.7.0.4

View File

@ -1,40 +0,0 @@
From ec2d33835ee5855060878da89d4051fa06af9e97 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 30 Mar 2011 02:16:37 +0000
Subject: [PATCH] PR c++/48265
* pt.c (value_dependent_expression_p) [VAR_DECL]: Make sure
the variable is constant before looking at its initializer.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171715 138bc75d-0d04-0410-961f-82ee72b054a4
index da9365f..e716ca6 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18085,10 +18085,10 @@ value_dependent_expression_p (tree expression)
return value_dependent_expression_p (DECL_INITIAL (expression));
case VAR_DECL:
- /* A constant with integral or enumeration type and is initialized
+ /* A constant with literal type and is initialized
with an expression that is value-dependent. */
if (DECL_INITIAL (expression)
- && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (expression))
+ && decl_constant_var_p (expression)
&& value_dependent_expression_p (DECL_INITIAL (expression)))
return true;
return false;
new file mode 100644
index 0000000..112389d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/value-dep1.C
@@ -0,0 +1,7 @@
+// PR c++/48265
+// { dg-options -std=c++0x }
+
+template < int > struct S
+{
+ S () { const int i = i; i; };
+};
--
1.7.0.4

View File

@ -1,32 +0,0 @@
From 87c5c4ec5bee02725cb4bd4f81bb3c86a0277a81 Mon Sep 17 00:00:00 2001
From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 30 Mar 2011 10:43:55 +0000
Subject: [PATCH] Fix a typo in FLOAT_SSE_REGS.
2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
Backport from mainline
2011-03-30 H.J. Lu <hongjiu.lu@intel.com>
PR target/48349
* config/i386/i386.h (REG_CLASS_CONTENTS): Fix a typo in
FLOAT_SSE_REGS.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171719 138bc75d-0d04-0410-961f-82ee72b054a4
index f14a95d..981052f 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -1272,7 +1272,7 @@ enum reg_class
{ 0xe0000000, 0x1f }, /* MMX_REGS */ \
{ 0x1fe00100,0x1fe000 }, /* FP_TOP_SSE_REG */ \
{ 0x1fe00200,0x1fe000 }, /* FP_SECOND_SSE_REG */ \
-{ 0x1fe0ff00,0x3fe000 }, /* FLOAT_SSE_REGS */ \
+{ 0x1fe0ff00,0x1fe000 }, /* FLOAT_SSE_REGS */ \
{ 0x1ffff, 0x1fe0 }, /* FLOAT_INT_REGS */ \
{ 0x1fe100ff,0x1fffe0 }, /* INT_SSE_REGS */ \
{ 0x1fe1ffff,0x1fffe0 }, /* FLOAT_INT_SSE_REGS */ \
--
1.7.0.4

View File

@ -1,70 +0,0 @@
From 541566b2d3b46207159abb1f59970bb11078e57e Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 30 Mar 2011 18:05:43 +0000
Subject: [PATCH] PR c++/48281
* semantics.c (finish_compound_literal): Do put static/constant
arrays in static variables.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171738 138bc75d-0d04-0410-961f-82ee72b054a4
index 9926d26..b88e190 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -2329,7 +2329,34 @@ finish_compound_literal (tree type, tree compound_literal)
if (TREE_CODE (type) == ARRAY_TYPE)
cp_complete_array_type (&type, compound_literal, false);
compound_literal = digest_init (type, compound_literal);
- return get_target_expr (compound_literal);
+ /* Put static/constant array temporaries in static variables, but always
+ represent class temporaries with TARGET_EXPR so we elide copies. */
+ if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
+ && TREE_CODE (type) == ARRAY_TYPE
+ && initializer_constant_valid_p (compound_literal, type))
+ {
+ tree decl = create_temporary_var (type);
+ DECL_INITIAL (decl) = compound_literal;
+ TREE_STATIC (decl) = 1;
+ if (literal_type_p (type) && CP_TYPE_CONST_NON_VOLATILE_P (type))
+ {
+ /* 5.19 says that a constant expression can include an
+ lvalue-rvalue conversion applied to "a glvalue of literal type
+ that refers to a non-volatile temporary object initialized
+ with a constant expression". Rather than try to communicate
+ that this VAR_DECL is a temporary, just mark it constexpr. */
+ DECL_DECLARED_CONSTEXPR_P (decl) = true;
+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
+ TREE_CONSTANT (decl) = true;
+ }
+ cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
+ decl = pushdecl_top_level (decl);
+ DECL_NAME (decl) = make_anon_name ();
+ SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
+ return decl;
+ }
+ else
+ return get_target_expr (compound_literal);
}
/* Return the declaration for the function-name variable indicated by
new file mode 100644
index 0000000..2b9f07d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/initlist46.C
@@ -0,0 +1,14 @@
+// PR c++/48281
+// { dg-options "-std=c++0x -O2" }
+// { dg-do run }
+
+#include <initializer_list>
+
+typedef std::initializer_list<int> int1;
+typedef std::initializer_list<int1> int2;
+static int2 ib = {{42,2,3,4,5},{2,3,4,5,1},{3,4,5,2,1}};
+
+int main()
+{
+ return *(ib.begin()->begin()) != 42;
+}
--
1.7.0.4

View File

@ -1,38 +0,0 @@
From 61759009408d9f43af89eaeaff769a656416e1af Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 30 Mar 2011 19:50:17 +0000
Subject: [PATCH] PR c++/48369
* semantics.c (potential_constant_expression_1): Handle
UNORDERED_EXPR and ORDERED_EXPR.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171746 138bc75d-0d04-0410-961f-82ee72b054a4
index b88e190..48dd4ee 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -7741,6 +7741,8 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
case BIT_XOR_EXPR:
case BIT_AND_EXPR:
case TRUTH_XOR_EXPR:
+ case UNORDERED_EXPR:
+ case ORDERED_EXPR:
case UNLT_EXPR:
case UNLE_EXPR:
case UNGT_EXPR:
new file mode 100644
index 0000000..40d07e5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/isnan.C
@@ -0,0 +1,9 @@
+// PR c++/48369
+// { dg-options -std=gnu++0x }
+
+extern "C" int isnan (double);
+
+void f(double d)
+{
+ bool b = isnan(d);
+}
--
1.7.0.4

View File

@ -1,39 +0,0 @@
From f23bf88450af23287387d878036f78042093d61b Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 30 Mar 2011 20:29:43 +0000
Subject: [PATCH] PR c++/48212
* semantics.c (non_const_var_error): Just return if DECL_INITIAL
is error_mark_node.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171749 138bc75d-0d04-0410-961f-82ee72b054a4
index 48dd4ee..c88b4bb 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -6759,6 +6759,9 @@ non_const_var_error (tree r)
tree type = TREE_TYPE (r);
error ("the value of %qD is not usable in a constant "
"expression", r);
+ /* Avoid error cascade. */
+ if (DECL_INITIAL (r) == error_mark_node)
+ return;
if (DECL_DECLARED_CONSTEXPR_P (r))
inform (DECL_SOURCE_LOCATION (r),
"%qD used in its own initializer", r);
new file mode 100644
index 0000000..2094d3e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/error-recovery1.C
@@ -0,0 +1,9 @@
+// PR c++/48212
+// { dg-options -std=c++0x }
+
+template < bool > void
+foo ()
+{
+ const bool b =; // { dg-error "" }
+ foo < b > (); // { dg-error "constant expression" }
+};
--
1.7.0.4

View File

@ -1,29 +0,0 @@
From b3287343bd8870538aee70687286d78881ee8b81 Mon Sep 17 00:00:00 2001
From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 31 Mar 2011 10:00:44 +0000
Subject: [PATCH] 2011-03-31 Richard Guenther <rguenther@suse.de>
PR lto/48246
* lto.c (lto_wpa_write_files): Disable assert for non-empty
partitions when checking is not enabled.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171774 138bc75d-0d04-0410-961f-82ee72b054a4
index 71c8cdb..4c832fb 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1514,8 +1514,8 @@ lto_wpa_write_files (void)
fprintf (cgraph_dump_file, "varpool nodes:");
dump_varpool_node_set (cgraph_dump_file, vset);
}
- gcc_assert (cgraph_node_set_nonempty_p (set)
- || varpool_node_set_nonempty_p (vset) || !i);
+ gcc_checking_assert (cgraph_node_set_nonempty_p (set)
+ || varpool_node_set_nonempty_p (vset) || !i);
lto_set_current_out_file (file);
--
1.7.0.4

View File

@ -1,92 +0,0 @@
From 18bc61fc490330f5dc59639626fa9bb5269e31d7 Mon Sep 17 00:00:00 2001
From: ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 31 Mar 2011 11:14:41 +0000
Subject: [PATCH] PR target/48142
* config/i386/i386.c (ix86_adjust_stack_and_probe): Differentiate
frame-related from frame-unrelated adjustments to the stack pointer.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171778 138bc75d-0d04-0410-961f-82ee72b054a4
index 4fb654f..a524d77 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -9981,7 +9981,7 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size)
probe that many bytes past the specified size to maintain a protection
area at the botton of the stack. */
const int dope = 4 * UNITS_PER_WORD;
- rtx size_rtx = GEN_INT (size);
+ rtx size_rtx = GEN_INT (size), last;
/* See if we have a constant small number of probes to generate. If so,
that's the easy case. The run-time loop is made up of 11 insns in the
@@ -10021,9 +10021,9 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size)
emit_stack_probe (stack_pointer_rtx);
/* Adjust back to account for the additional first interval. */
- emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx,
- plus_constant (stack_pointer_rtx,
- PROBE_INTERVAL + dope)));
+ last = emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+ PROBE_INTERVAL + dope)));
}
/* Otherwise, do the same as above, but in a loop. Note that we must be
@@ -10084,15 +10084,33 @@ ix86_adjust_stack_and_probe (const HOST_WIDE_INT size)
}
/* Adjust back to account for the additional first interval. */
- emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx,
- plus_constant (stack_pointer_rtx,
- PROBE_INTERVAL + dope)));
+ last = emit_insn (gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+ PROBE_INTERVAL + dope)));
release_scratch_register_on_entry (&sr);
}
gcc_assert (cfun->machine->fs.cfa_reg != stack_pointer_rtx);
- cfun->machine->fs.sp_offset += size;
+
+ /* Even if the stack pointer isn't the CFA register, we need to correctly
+ describe the adjustments made to it, in particular differentiate the
+ frame-related ones from the frame-unrelated ones. */
+ if (size > 0)
+ {
+ rtx expr = gen_rtx_SEQUENCE (VOIDmode, rtvec_alloc (2));
+ XVECEXP (expr, 0, 0)
+ = gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx, -size));
+ XVECEXP (expr, 0, 1)
+ = gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+ PROBE_INTERVAL + dope + size));
+ add_reg_note (last, REG_FRAME_RELATED_EXPR, expr);
+ RTX_FRAME_RELATED_P (last) = 1;
+
+ cfun->machine->fs.sp_offset += size;
+ }
/* Make sure nothing is scheduled before we are done. */
emit_insn (gen_blockage ());
new file mode 100644
index 0000000..7964057
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/i386-9.C
@@ -0,0 +1,12 @@
+// PR target/48142
+// Testcase by Zdenek Sojka <zsojka@seznam.cz>
+
+// { dg-do run { target i?86-*-* x86_64-*-* } }
+// { dg-options "-Os -mpreferred-stack-boundary=5 -fstack-check -fno-omit-frame-pointer" }
+
+int main()
+{
+ try { throw 0; }
+ catch (...) {}
+ return 0;
+}
--
1.7.0.4

View File

@ -1,22 +0,0 @@
From e9265f24f30b22d79d2ea4013dd32a491a12d00c Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 31 Mar 2011 15:05:47 +0000
Subject: [PATCH] PR target/16292
* gfortran.dg/g77/cabs.f: Only xfail execution on mips-sgi-irix6*
with -O0.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171785 138bc75d-0d04-0410-961f-82ee72b054a4
index d409012..998327b 100644
--- a/gcc/testsuite/gfortran.dg/g77/cabs.f
+++ b/gcc/testsuite/gfortran.dg/g77/cabs.f
@@ -1,4 +1,5 @@
-c { dg-do run { xfail mips-sgi-irix6* } } PR 16292
+c { dg-do run }
+c { dg-xfail-run-if "PR target/16292" { mips-sgi-irix6* } { -O0 } }
program cabs_1
complex z0
real r0
--
1.7.0.4

View File

@ -1,38 +0,0 @@
From c965b9c986732377eb96e00f7266e281f345a00b Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 31 Mar 2011 20:33:07 +0000
Subject: [PATCH] PR c++/48280
* method.c (defaultable_fn_check): Templates are not defaultable.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171798 138bc75d-0d04-0410-961f-82ee72b054a4
index d70da95..e6f3c25 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1594,6 +1594,12 @@ defaultable_fn_check (tree fn)
{
special_function_kind kind = sfk_none;
+ if (template_parm_scope_p ())
+ {
+ error ("a template cannot be defaulted");
+ return false;
+ }
+
if (DECL_CONSTRUCTOR_P (fn))
{
if (FUNCTION_FIRST_USER_PARMTYPE (fn) == void_list_node)
new file mode 100644
index 0000000..307bf94
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/defaulted24.C
@@ -0,0 +1,6 @@
+// PR c++/48280
+// { dg-options -std=c++0x }
+
+struct S {
+ template < typename > S (const S &) = default; // { dg-error "" }
+};
--
1.7.0.4

View File

@ -1,48 +0,0 @@
From 5e28e486dbc793184ca462b8b528f5eff3d4f2ef Mon Sep 17 00:00:00 2001
From: jyasskin <jyasskin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 1 Apr 2011 01:07:46 +0000
Subject: [PATCH] Merge r171807 from trunk to the 4.6 release branch, to fix two C++
conformance problems in libsupc++.
Tested: bootstrap + make check-c++ on x86_64
libstdc++-v3/ChangeLog:
2011-03-31 Jeffrey Yasskin <jyasskin@google.com>
* libsupc++/exception_ptr.h: Forward-declare std::type_info.
* libsupc++/nested_exception.h (__throw_with_nested): Remove a
redundant default argument from std::__throw_with_nested.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171815 138bc75d-0d04-0410-961f-82ee72b054a4
index ef826f6..26117cd 100644
--- a/libstdc++-v3/libsupc++/exception_ptr.h
+++ b/libstdc++-v3/libsupc++/exception_ptr.h
@@ -137,7 +137,7 @@ namespace std
operator==(const exception_ptr&, const exception_ptr&) throw()
__attribute__ ((__pure__));
- const type_info*
+ const class type_info*
__cxa_exception_type() const throw() __attribute__ ((__pure__));
};
diff --git a/libstdc++-v3/libsupc++/nested_exception.h b/libstdc++-v3/libsupc++/nested_exception.h
index 6a4f04e..d4804bb 100644
--- a/libstdc++-v3/libsupc++/nested_exception.h
+++ b/libstdc++-v3/libsupc++/nested_exception.h
@@ -117,7 +117,7 @@ namespace std
// with a type that has an accessible nested_exception base.
template<typename _Ex>
inline void
- __throw_with_nested(_Ex&& __ex, const nested_exception* = 0)
+ __throw_with_nested(_Ex&& __ex, const nested_exception*)
{ throw __ex; }
template<typename _Ex>
--
1.7.0.4

View File

@ -1,61 +0,0 @@
From f8ae59386457b39085b086d04a8cd96e4450f167 Mon Sep 17 00:00:00 2001
From: abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 1 Apr 2011 11:07:44 +0000
Subject: [PATCH] Backport from mainline
2011-03-22 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/48143
* config/i386/sse.md (*sse2_cvtpd2dq): Add athlon_decode attribute.
(*sse2_cvttpd2dq, sse2_cvtss2sd, *sse2_cvtpd2ps,
sse2_cvtps2pd): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171825 138bc75d-0d04-0410-961f-82ee72b054a4
index ba2bf24..f4bea64 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -2715,6 +2715,7 @@
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")
(set_attr "amdfam10_decode" "double")
+ (set_attr "athlon_decode" "vector")
(set_attr "bdver1_decode" "double")])
(define_insn "avx_cvttpd2dq256"
@@ -2746,6 +2747,7 @@
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "TI")
(set_attr "amdfam10_decode" "double")
+ (set_attr "athlon_decode" "vector")
(set_attr "bdver1_decode" "double")])
(define_insn "*avx_cvtsd2ss"
@@ -2806,6 +2808,7 @@
"cvtss2sd\t{%2, %0|%0, %2}"
[(set_attr "type" "ssecvt")
(set_attr "amdfam10_decode" "vector,double")
+ (set_attr "athlon_decode" "direct,direct")
(set_attr "bdver1_decode" "direct,direct")
(set_attr "mode" "DF")])
@@ -2842,6 +2845,7 @@
(set_attr "prefix" "maybe_vex")
(set_attr "mode" "V4SF")
(set_attr "amdfam10_decode" "double")
+ (set_attr "athlon_decode" "vector")
(set_attr "bdver1_decode" "double")])
(define_insn "avx_cvtps2pd256"
@@ -2879,6 +2883,7 @@
(set_attr "mode" "V2DF")
(set_attr "prefix_data16" "0")
(set_attr "amdfam10_decode" "direct")
+ (set_attr "athlon_decode" "double")
(set_attr "bdver1_decode" "double")])
(define_expand "vec_unpacks_hi_v4sf"
--
1.7.0.4

View File

@ -1,29 +0,0 @@
From 5b6ffdded3fd04395f72852e2a201d011d10a060 Mon Sep 17 00:00:00 2001
From: uweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 1 Apr 2011 17:17:59 +0000
Subject: [PATCH] * config/spu/t-spu-elf (dp-bit.c): Use > instead of >>.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171838 138bc75d-0d04-0410-961f-82ee72b054a4
index a131f64..5189f28 100644
--- a/gcc/config/spu/t-spu-elf
+++ b/gcc/config/spu/t-spu-elf
@@ -1,4 +1,5 @@
-# Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
+# Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
@@ -55,7 +56,7 @@ FPBIT = fp-bit.c
DPBIT = dp-bit.c
dp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/spu/t-spu-elf
- cat $(srcdir)/config/fp-bit.c >> dp-bit.c
+ cat $(srcdir)/config/fp-bit.c > dp-bit.c
fp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/spu/t-spu-elf
echo '#define FLOAT' > fp-bit.c
--
1.7.0.4

View File

@ -1,111 +0,0 @@
From 0d43ff3bbc445b0264f804cd6449069182045678 Mon Sep 17 00:00:00 2001
From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 2 Apr 2011 15:34:01 +0000
Subject: [PATCH] 2011-04-02 Jonathan Wakely <redi@gcc.gnu.org>
PR libstdc++/48398
* include/bits/unique_ptr.h (__tuple_type): Store pointer type.
* testsuite/20_util/unique_ptr/modifiers/48398.cc: New.
* testsuite/20_util/unique_ptr/requirements/pointer_type.cc: Remove
unused parameter name.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171889 138bc75d-0d04-0410-961f-82ee72b054a4
index 5e8ab90..5df4325 100644
--- a/libstdc++-v3/include/bits/unique_ptr.h
+++ b/libstdc++-v3/include/bits/unique_ptr.h
@@ -100,11 +100,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
typedef decltype( __test<_Del>(0)) type;
};
- typedef std::tuple<_Tp*, _Dp> __tuple_type;
- __tuple_type _M_t;
+ typedef std::tuple<typename _Pointer::type, _Dp> __tuple_type;
+ __tuple_type _M_t;
public:
- typedef typename _Pointer::type pointer;
+ typedef typename _Pointer::type pointer;
typedef _Tp element_type;
typedef _Dp deleter_type;
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/48398.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/48398.cc
new file mode 100644
index 0000000..54948df
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/48398.cc
@@ -0,0 +1,41 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// 20.7.1 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+
+// PR libstdc++/48398
+
+struct my_deleter
+{
+ typedef int* pointer;
+
+ void operator()( pointer p ) { delete p; }
+};
+
+void test01()
+{
+ std::unique_ptr<void, my_deleter> p( new int() );
+
+ p.get();
+ p.reset();
+
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
index 5074844..55f28ca 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/requirements/pointer_type.cc
@@ -1,7 +1,7 @@
// { dg-do compile }
// { dg-options "-std=gnu++0x" }
-// Copyright (C) 2010 Free Software Foundation
+// Copyright (C) 2010, 2011 Free Software Foundation
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -25,13 +25,13 @@
struct A
{
- void operator()(void* p) const { }
+ void operator()(void*) const { }
};
struct B
{
typedef char* pointer;
- void operator()(pointer p) const { }
+ void operator()(pointer) const { }
};
int main()
--
1.7.0.4

View File

@ -1,30 +0,0 @@
From e26756e1112552489e123c8ed7ed038beae89c5b Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 4 Apr 2011 15:55:33 +0000
Subject: [PATCH] * gfortran.dg/bessel_6.f90: Use dg-add-options ieee.
* gfortran.dg/bessel_7.f90: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171940 138bc75d-0d04-0410-961f-82ee72b054a4
index e760d4c..3c1a6f4 100644
--- a/gcc/testsuite/gfortran.dg/bessel_6.f90
+++ b/gcc/testsuite/gfortran.dg/bessel_6.f90
@@ -1,4 +1,5 @@
! { dg-do run { xfail spu-*-* } }
+! { dg-add-options ieee }
!
! PR fortran/36158
! PR fortran/33197
diff --git a/gcc/testsuite/gfortran.dg/bessel_7.f90 b/gcc/testsuite/gfortran.dg/bessel_7.f90
index 10a6e96..78f1ff2 100644
--- a/gcc/testsuite/gfortran.dg/bessel_7.f90
+++ b/gcc/testsuite/gfortran.dg/bessel_7.f90
@@ -1,4 +1,5 @@
! { dg-do run { xfail *-*-mingw* spu-*-* } }
+! { dg-add-options ieee }
!
! PR fortran/36158
! PR fortran/33197
--
1.7.0.4

View File

@ -1,57 +0,0 @@
From ca7759868733b4570e496b889e711523640fc582 Mon Sep 17 00:00:00 2001
From: janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 4 Apr 2011 18:53:34 +0000
Subject: [PATCH] 2011-04-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/48291
* class.c (get_unique_hashed_string): Adjust maximum allowable length
for unique type string.
2011-04-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/48291
* gfortran.dg/class_42.f03: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171950 138bc75d-0d04-0410-961f-82ee72b054a4
index 85da3cb..b99930a 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -137,9 +137,9 @@ get_unique_hashed_string (char *string, gfc_symbol *derived)
{
char tmp[2*GFC_MAX_SYMBOL_LEN+2];
get_unique_type_string (&tmp[0], derived);
- /* If string is too long, use hash value in hex representation
- (allow for extra decoration, cf. gfc_build_class_symbol)*/
- if (strlen (tmp) > GFC_MAX_SYMBOL_LEN - 10)
+ /* If string is too long, use hash value in hex representation (allow for
+ extra decoration, cf. gfc_build_class_symbol & gfc_find_derived_vtab). */
+ if (strlen (tmp) > GFC_MAX_SYMBOL_LEN - 11)
{
int h = gfc_hash_value (derived);
sprintf (string, "%X", h);
new file mode 100644
index 0000000..dd59835
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/class_42.f03
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR 48291: [4.6/4.7 Regression] [OOP] internal compiler error, new_symbol(): Symbol name too long
+!
+! Contributed by Adrian Prantl <adrian@llnl.gov>
+
+module Overload_AnException_Impl
+ type :: Overload_AnException_impl_t
+ end type
+contains
+ subroutine ctor_impl(self)
+ class(Overload_AnException_impl_t) :: self
+ end subroutine
+end module
+
+! { dg-final { cleanup-modules "Overload_AnException_Impl" } }
--
1.7.0.4

View File

@ -1,952 +0,0 @@
From 0e497997f5e241721dece71b322621d24abd4a04 Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 4 Apr 2011 22:20:34 +0000
Subject: [PATCH] * es.po: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171957 138bc75d-0d04-0410-961f-82ee72b054a4
index 2ceed68..84b3475 100644
--- a/gcc/po/es.po
+++ b/gcc/po/es.po
@@ -1,16 +1,16 @@
-# Mensajes en español para gcc-4.6-b20101218.
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Mensajes en español para gcc-4.6.0.
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
-# Cristian Othón Martínez Vera <cfuga@itam.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Cristian Othón Martínez Vera <cfuga@itam.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
#
# Agradezco a Juan Cuquejo Mira por sus comentarios sobre esta traducción
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 4.6-b20101218\n"
+"Project-Id-Version: gcc 4.6.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2011-03-24 16:45+0000\n"
-"PO-Revision-Date: 2010-12-21 07:58-0600\n"
+"PO-Revision-Date: 2011-04-04 16:04-0500\n"
"Last-Translator: Cristian Othón Martínez Vera <cfuga@itam.mx>\n"
"Language-Team: Spanish <es@li.org>\n"
"Language: es\n"
@@ -1800,9 +1800,8 @@ msgid "The maximum amount of memory to be allocated by GCSE"
msgstr "La cantidad máxima de memoria a ser asignada por GCSE"
#: params.def:222
-#, fuzzy
msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
-msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle"
+msgstr "La tasa máxima de inserciones para borrados de expresiones en GCSE"
#: params.def:233
msgid "The threshold ratio for performing partial redundancy elimination after reload"
@@ -1978,9 +1977,8 @@ msgid "Bound on size of expressions used in the scalar evolutions analyzer"
msgstr "Límite en el tamaño de expresiones usadas en el analizador escalar de evoluciones"
#: params.def:488
-#, fuzzy
msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer"
-msgstr "Límite en el tamaño de expresiones usadas en el analizador escalar de evoluciones"
+msgstr "Límite en la complejidad de expresiones en el analizador escalar de evoluciones"
#: params.def:493
msgid "Bound on the number of variables in Omega constraint systems"
@@ -5541,9 +5539,8 @@ msgid "Return pointers in both a0 and d0"
msgstr "Devuelve punteros tanto en a0 como en d0"
#: config/mn10300/mn10300.opt:56
-#, fuzzy
msgid "Allow gcc to generate LIW instructions"
-msgstr "Permite a gcc usar las instrucciones repeat/erepeat"
+msgstr "Permite a gcc generar instrucciones LIW"
#: config/s390/tpf.opt:23
msgid "Enable TPF-OS tracing code"
@@ -6307,7 +6304,7 @@ msgstr "Despacha al calendarizador si el procesador es bdver1 y la calendarizaci
#: config/i386/i386.opt:271
msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
-msgstr ""
+msgstr "Usa instrucciones AVX de 128-bit en lugar de instrucciones AVX de 256-bit en el auto-vectorizador."
#: config/i386/i386.opt:277
msgid "Generate 32bit i386 code"
@@ -6358,9 +6355,8 @@ msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation"
msgstr "No admite funciones internas y generación de código SSE4.1 y SSE4.2"
#: config/i386/i386.opt:328
-#, fuzzy
msgid "%<-msse5%> was removed"
-msgstr "se eliminó '-msse5'"
+msgstr "se eliminó %<-msse5%>"
#: config/i386/i386.opt:333
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
@@ -8172,13 +8168,12 @@ msgid "Set the max size of data eligible for the TDA area"
msgstr "Establece el tamaño máximo de datos elegibles para el área TDA"
#: config/v850/v850.opt:71
-#, fuzzy
msgid "Do not enforce strict alignment"
-msgstr "Refuerza la alineación estricta"
+msgstr "No refuerza la alineación estricta"
#: config/v850/v850.opt:75
msgid "Put jump tables for switch statements into the .data section rather than the .code section"
-msgstr ""
+msgstr "Coloca las tablas de salto para las declaraciones switch en la sección .data en lugar de la sección .code"
#: config/v850/v850.opt:82
msgid "Compile for the v850 processor"
@@ -8193,9 +8188,8 @@ msgid "Compile for the v850e1 processor"
msgstr "Compila para el procesador v850e1"
#: config/v850/v850.opt:94
-#, fuzzy
msgid "Compile for the v850es variant of the v850e1"
-msgstr "Compila para el procesador v850e"
+msgstr "Compila para la variante v850es del procesador v850e1"
#: config/v850/v850.opt:98
msgid "Compile for the v850e2 processor"
@@ -8719,7 +8713,6 @@ msgid "Use multiply high instructions for high part of 32x32 multiply"
msgstr "Usa instrucciones high de multiplicación para la parte high de la multiplicación 32x32"
#: config/microblaze/microblaze.opt:92
-#, fuzzy
msgid "Use hardware floating point conversion instructions"
msgstr "Usa instrucciones de conversión de coma flotante de hardware"
@@ -9385,7 +9378,7 @@ msgstr "Inyecta las funciones friend dentro de espacios de nombres cerrados"
#: c-family/c.opt:819
msgid "Don't emit dllexported inline functions unless needed"
-msgstr ""
+msgstr "No emite funciones en línea exportadas en dll a menos que sea necesario"
#: c-family/c.opt:826
msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
@@ -9409,7 +9402,7 @@ msgstr "Trata una especificaci
#: c-family/c.opt:858
msgid "Specify which ABI to use for Objective-C family code and meta-data generation."
-msgstr ""
+msgstr "Especifica cuál ABI usar para el código de la familia Objective-C y la generación de metadatos."
#: c-family/c.opt:864
msgid "Generate special Objective-C methods to initialize/destroy non-POD C++ ivars, if needed"
@@ -9429,7 +9422,7 @@ msgstr "Activa la recolecci
#: c-family/c.opt:882
msgid "Enable inline checks for nil receivers with the NeXT runtime and ABI version 2."
-msgstr ""
+msgstr "Activa las revisiones en línea para los receptores nil con el tiempo de ejecución NeXT y la ABI versión 2."
#: c-family/c.opt:887
msgid "Enable Objective-C setjmp exception handling runtime"
@@ -10028,9 +10021,8 @@ msgid "Run only the second compilation of -fcompare-debug"
msgstr "Ejecuta sólo la segunda compilación de -fcompare-debug"
#: common.opt:875
-#, fuzzy
msgid "Perform comparison elimination after register allocation has finished"
-msgstr "Realiza la eliminación de subexpresiones comunes globales despúes del alojamiento de registros"
+msgstr "Realiza la eliminación de comparaciones después de terminar el alojamiento de registros"
#: common.opt:879
msgid "Do not perform optimizations increasing noticeably stack usage"
@@ -10085,9 +10077,8 @@ msgid "Delete useless null pointer checks"
msgstr "Borra las revisiones de punteros nulos sin uso"
#: common.opt:937
-#, fuzzy
msgid "Try to convert virtual calls to direct ones."
-msgstr "Trata de permitir que el enlazador convierta las llamadas PIC a llamadas directas"
+msgstr "Trata de convertir las llamadas virtuales a llamadas directas."
#: common.opt:941
msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics"
@@ -10217,7 +10208,7 @@ msgstr "Realiza la carga redundante despu
#: common.opt:1110
msgid "Perform global common subexpression elimination after register allocation"
-msgstr "Realiza la eliminación de subexpresiones comunes globales despúes del alojamiento de registros"
+msgstr "Realiza la eliminación de subexpresiones comunes globales después del alojamiento de registros"
#: common.opt:1116
msgid "Enable in and out of Graphite representation"
@@ -10923,9 +10914,8 @@ msgid "Enable loop invariant motion on trees"
msgstr "Permite el movimiento invariante de bucles en árboles"
#: common.opt:1924
-#, fuzzy
msgid "Enable loop interchange transforms. Same as -floop-interchange"
-msgstr "Activa la transformación Loop Interchange"
+msgstr "Activa las transformaciones de intercambio de bucle. Igual que -floop-interchange"
#: common.opt:1928
msgid "Create canonical induction variables in loops"
@@ -11291,14 +11281,12 @@ msgid "argument must have complex type"
msgstr "el argumento debe tener tipo complejo"
#: go/gofrontend/expressions.cc:7578
-#, fuzzy
msgid "complex arguments must have identical types"
-msgstr "los argumentos cmplx deben tener tipos idénticos"
+msgstr "los argumentos complejos deben tener tipos idénticos"
#: go/gofrontend/expressions.cc:7580
-#, fuzzy
msgid "complex arguments must have floating-point type"
-msgstr "los argumentos cmplx deben tener tipo de coma flotante"
+msgstr "los argumentos complejos deben tener tipo de coma flotante"
#: go/gofrontend/expressions.cc:8560
msgid "expected function"
@@ -11914,9 +11902,9 @@ msgid "redefinition of typedef %q+D with different type"
msgstr "redefinición de la definición de tipo %q+D con un tipo diferente"
#: c-decl.c:1818
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redefinition of typedef %q+D with variably modified type"
-msgstr "redefinición de la definición de tipo %q+D con un tipo diferente"
+msgstr "redefinición de la definición de tipo %q+D con un tipo modificado variablemente"
#: c-decl.c:1825
#, gcc-internal-format
@@ -13293,9 +13281,9 @@ msgid "prefix attributes are ignored for implementations"
msgstr "se descartan los atributos de prefijo para las implementaciones"
#: c-parser.c:1554
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unexpected attribute"
-msgstr "Se esperaba un nombre de atributo de bit"
+msgstr "atributo inesperado"
#: c-parser.c:1596
#, gcc-internal-format
@@ -13644,14 +13632,14 @@ msgid "unknown property attribute"
msgstr "atributo de propiedad desconocido"
#: c-parser.c:7964 cp/parser.c:23157
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "missing %<=%> (after %<getter%> attribute)"
-msgstr "falta un %<(%> después de %<#pragma pack%> - se descarta"
+msgstr "falta un %<=%> (después del atributo %<getter%>)"
#: c-parser.c:7967 cp/parser.c:23160
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "missing %<=%> (after %<setter%> attribute)"
-msgstr "falta un %<(%> después de %<#pragma pack%> - se descarta"
+msgstr "falta un %<=%> (después del atributo %<setter%>)"
#: c-parser.c:7981 cp/parser.c:23174
#, gcc-internal-format
@@ -15393,7 +15381,7 @@ msgid "caller edge frequency is too large"
msgstr "la frecuencia de borde llamador es demasiado grande"
#: cgraphunit.c:435
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "caller edge frequency %i does not match BB frequency %i"
msgstr "la frecuencia de borde llamador %i no coincide con la frecuencia BB %i"
@@ -15520,7 +15508,7 @@ msgstr "puntos de borde para una declaraci
#: cgraphunit.c:685
#, gcc-internal-format
msgid "a call to thunk improperly represented in the call graph:"
-msgstr ""
+msgstr "una llamada a thunk representada impropiamente en el grafo de llamada:"
#: cgraphunit.c:693
#, gcc-internal-format
@@ -15548,9 +15536,9 @@ msgid "verify_cgraph_node failed"
msgstr "falló verify_cgraph_node"
#: cgraphunit.c:817
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute"
-msgstr "el atributo %<assign%> genera un conflicto con el atributo %<retain%>"
+msgstr "el atributo %<weakref%> se debe acompañar con un atributo %<alias%>"
#: cgraphunit.c:872 cgraphunit.c:909
#, gcc-internal-format
@@ -15558,14 +15546,14 @@ msgid "%<externally_visible%> attribute have effect only on public objects"
msgstr "el atributo %<externally_visible%> sólo tiene efecto en objetos públicos"
#: cgraphunit.c:881
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute ignored because function is defined"
-msgstr "se descarta el atributo %qE porque %qT ya está definido"
+msgstr "se descarta el atributo %<weakref%> porque ya se definió la función"
#: cgraphunit.c:919
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute ignored because variable is initialized"
-msgstr "se descarta el atributo %qE porque %qT ya está definido"
+msgstr "se descarta el atributo %<weakref%> porque ya se inicializó la variable"
#: cgraphunit.c:1167 cgraphunit.c:1193
#, gcc-internal-format
@@ -17114,9 +17102,9 @@ msgid "-iplugindir <dir> option not passed from the gcc driver"
msgstr "no se pasó la opción -iplugindir <dir> del controlador de gcc"
#: profile.c:417
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "corrupted profile info: edge count exceeds maximal count"
-msgstr "información de análisis de perfil corrupta: el borde de %i a %i excede la cuenta maximal"
+msgstr "información de análisis de perfil corrupta: la cuenta de borde excede la cuenta maximal"
#: profile.c:421
#, gcc-internal-format, gfc-internal-format
@@ -17598,7 +17586,7 @@ msgstr "este objetivo no admite %qs"
#: toplev.c:1323
#, gcc-internal-format
msgid "Graphite loop optimizations cannot be used (-fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all, and -ftree-loop-linear)"
-msgstr ""
+msgstr "No se pueden usar las optimizaciones de bucle Graphite (-fgraphite, -fgraphite-identity, -floop-block, -floop-flatten, -floop-interchange, -floop-strip-mine, -floop-parallelize-all, y -ftree-loop-linear)"
#: toplev.c:1352
#, gcc-internal-format
@@ -18835,9 +18823,9 @@ msgid "correcting inconsistent value profile: %s profiler overall count (%d) doe
msgstr "se corrige el valor de perfil inconsistente: %s la cuenta general del perfilador (%d) no coincide con la cuenta BB (%d)"
#: value-prof.c:476
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "corrupted value profile: %s profile counter (%d out of %d) inconsistent with basic-block count (%d)"
-msgstr "valor de perfil corrupto: %s la cuenta general del perfilador (%d) no coincide con la cuenta BB (%d)"
+msgstr "valor de perfil corrupto: la cuenta del perfilador %s (%d de %d) es inconsistente con la cuenta bloque-básico (%d)"
#: var-tracking.c:6159
#, gcc-internal-format
@@ -19479,9 +19467,9 @@ msgid "alignment for %q+D must be at least %d"
msgstr "la alineación para %q+D debe ser por lo menos %d"
#: c-family/c-common.c:6666
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "inline function %q+D declared weak"
-msgstr "la función inline %q+D no se puede declarar weak"
+msgstr "la función inline %q+D se declaró weak"
#: c-family/c-common.c:6671
#, gcc-internal-format
@@ -21039,7 +21027,7 @@ msgstr "no se puede entender kern.osversion %q.*s"
#: config/darwin.c:1608
#, gcc-internal-format
msgid "the use of _OBJC_-prefixed variable names to select meta-data sections is deprecated at 4.6 and will be removed in 4.7"
-msgstr ""
+msgstr "el uso de nombre de variables con prefijo _OBJC_ para seleccionar secciones de metadatos es obsoleto en 4.6 y se eliminará en 4.7"
#: config/darwin.c:1782
#, gcc-internal-format, gfc-internal-format
@@ -21171,7 +21159,7 @@ msgstr "PIC s
#: config/darwin.h:150
#, gcc-internal-format
msgid "%<-fobjc-abi-version%> >= 2 is only supported on %<-m64%> targets for %<-fnext-runtime%>"
-msgstr ""
+msgstr "%<-fobjc-abi-version%> >= 2 sólo se admite en objetivos %<-m64%> para %<-fnext-runtime%>"
#. Mach-O supports 'weak imports', and 'weak definitions' in coalesced
#. sections. machopic_select_section ensures that weak variables go in
@@ -21537,14 +21525,14 @@ msgid "static variable %q+D is marked dllimport"
msgstr "la variable estática %q+D se marcó como dllimport"
#: config/avr/avr.c:249
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized argument to -mmcu= option: %qs"
-msgstr "no se reconoce el argumento para la opción --help=: %q.*s"
+msgstr "no se reconoce el argumento para la opción -mmcu=: %qs"
#: config/avr/avr.c:250
#, gcc-internal-format
msgid "See --target-help for supported MCUs"
-msgstr ""
+msgstr "Vea --target-help para MCUs permitidos"
#: config/avr/avr.c:497
#, gcc-internal-format
@@ -24116,14 +24104,14 @@ msgid "parameter list does not match a valid signature for %s()"
msgstr "la lista de parámetros no ofrece una firma válida para %s()"
#: config/spu/spu.c:548
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -march= switch"
-msgstr "valor erróneo (%s) para el interruptor -masm="
+msgstr "valor erróneo (%s) para la opción -march="
#: config/spu/spu.c:559
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -mtune= switch"
-msgstr "valor erróneo %qs para la opción -mtune"
+msgstr "valor erróneo (%s) para la opción -mtune="
#: config/spu/spu.c:5388 config/spu/spu.c:5391
#, gcc-internal-format
@@ -27003,9 +26991,9 @@ msgid "const %qs cannot be declared %<mutable%>"
msgstr "const %qs no se puede declarar %<mutable%>"
#: cp/decl.c:9226
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "reference %qs cannot be declared %<mutable%>"
-msgstr "la función %qs no se puede declarar %<mutable%>"
+msgstr "la referencia %qs no se puede declarar %<mutable%>"
#: cp/decl.c:9265
#, gcc-internal-format
@@ -28431,7 +28419,7 @@ msgstr "se omiti
#: cp/mangle.c:2768
#, gcc-internal-format
msgid "string literal in function template signature"
-msgstr ""
+msgstr "literal de cadena en la firma de plantilla de función"
#: cp/mangle.c:3040
#, gcc-internal-format
@@ -29173,9 +29161,9 @@ msgid "non-scalar type"
msgstr "tipo que no es escalar"
#: cp/parser.c:5957
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ISO C++ does not allow %<alignof%> with a non-type"
-msgstr "ISO C++ no permite inicializadores designados"
+msgstr "ISO C++ no permite %<alignof%> con algo que no es tipo"
#: cp/parser.c:6016
#, gcc-internal-format
@@ -29283,9 +29271,9 @@ msgid "expected iteration-statement"
msgstr "se esperaba una declaración de iteración"
#: cp/parser.c:9091
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "range-based-for loops are not allowed in C++98 mode"
-msgstr "no se permiten las conversiones estándar en este contexto"
+msgstr "no se permiten los bucles for basados en rango en el modo C++98"
#. Issue a warning about this use of a GNU extension.
#: cp/parser.c:9213
@@ -29679,9 +29667,9 @@ msgid "invalid use of %<auto%>"
msgstr "uso inválido de %<auto%>"
#: cp/parser.c:15691
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "types may not be defined in template arguments"
-msgstr "no se pueden definir tipos en tipos de parámetro"
+msgstr "no se pueden definir tipos en argumentos de plantilla"
#: cp/parser.c:15772
#, gcc-internal-format
@@ -30573,9 +30561,9 @@ msgid "%qE is not a valid template argument for type %qT because string literals
msgstr "%qE no es un argumento válido de plantilla para el tipo %qT porque las literales de cadena nunca se pueden usar en este contexto"
#: cp/pt.c:5403
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "in template argument for type %qT "
-msgstr "%qE no es un argumento de plantilla válido para el tipo %qT"
+msgstr "en el argumento de plantilla para el tipo %qT "
#: cp/pt.c:5443
#, gcc-internal-format
@@ -31491,9 +31479,9 @@ msgid "the value of %qD is not usable in a constant expression"
msgstr "el valor de %qD no se puede usar en una expresión constante"
#: cp/semantics.c:6722
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD used in its own initializer"
-msgstr "se usó la variable %q#D con tipo %<auto%> en su propio inicializador"
+msgstr "se usó %qD en su propio inicializador"
#: cp/semantics.c:6727
#, gcc-internal-format
@@ -31586,14 +31574,14 @@ msgid "pointer comparison expression is not a constant expression"
msgstr "la expresión de comparación de punteros no es una expresión constante"
#: cp/semantics.c:7636
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "division by zero is not a constant-expression"
-msgstr "la expresión %qE no es una expresión constante"
+msgstr "la división entre cero no es una expresión constante"
#: cp/semantics.c:7739
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-constant array initialization"
-msgstr "el índice de matriz no es una constante en el inicializador"
+msgstr "inicialización de una matriz que no es constante"
#: cp/semantics.c:7745
#, gcc-internal-format, gfc-internal-format
@@ -33394,9 +33382,9 @@ msgid "'%s' argument of '%s' intrinsic at %L must be INTEGER or LOGICAL"
msgstr "El argumento '%s' del intrínseco '%s' en %L debe ser INTEGER o LOGICAL"
#: fortran/class.c:199
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Polymorphic array at %C not yet supported"
-msgstr "Aún no se admite un parámetro de tipo diferido"
+msgstr "Aún no se admite la matriz polimórfica en %C"
#. Since the extension field is 8 bit wide, we can only have
#. up to 255 extension levels.
@@ -33789,7 +33777,7 @@ msgstr "Extensi
#: fortran/decl.c:2620
#, gcc-internal-format, gfc-internal-format
msgid "Unlimited polymorphism at %C not yet supported"
-msgstr ""
+msgstr "Aún no se admite polimorfismo ilimitado en %C"
#: fortran/decl.c:2629
#, gcc-internal-format, gfc-internal-format
@@ -35105,9 +35093,9 @@ msgid "Fortran 2008: Rank remapping target is not rank 1 at %L"
msgstr "Fortran 2008: El objetivo de remapeo de rango no es rango 1 en %L"
#: fortran/expr.c:3515
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Target expression in pointer assignment at %L must deliver a pointer result"
-msgstr "La expresión de selección en una declaración GOTO computada en %L debe ser una expresión entera escalar"
+msgstr "La expresión objetivo en la asignación de puntero en %L debe entregar un resultado puntero"
#: fortran/expr.c:3523
#, gcc-internal-format, gfc-internal-format
@@ -35150,9 +35138,9 @@ msgid "Pointer initialization target at %C must have the SAVE attribute"
msgstr "El objetivo de inicialización de puntero en %C debe tener el atributo SAVE"
#: fortran/expr.c:3633
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Procedure pointer initialization target at %L may not be a procedure pointer"
-msgstr "El objetivo de inicialización de puntero en %L no debe ser ALLOCATABLE"
+msgstr "El objetivo de inicialización de puntero a procedimiento en %L tal vez no es un puntero a procedimiento"
#: fortran/expr.c:4383
#, gcc-internal-format, gfc-internal-format
@@ -35362,7 +35350,7 @@ msgstr "El procedimiento '%s' en %s en %L no es ni funci
#: fortran/interface.c:1127
#, gcc-internal-format, gfc-internal-format
msgid "In %s at %L procedures must be either all SUBROUTINEs or all FUNCTIONs"
-msgstr ""
+msgstr "En %s en %L los procedimientos deben ser o todos SUBROUTINE o todos FUNCTION"
#: fortran/interface.c:1182 fortran/interface.c:1186
#, gcc-internal-format, gfc-internal-format
@@ -35455,19 +35443,19 @@ msgid "Dummy argument '%s' has to be a pointer or assumed-shape array without CO
msgstr "El argumento dummy '%s' tiene que ser un puntero o una matriz de tamaño asumida sin atributo CONTIGUOUS - porque el argumento actual en %L no es simplemente contiguo y ambos son ASYNCHRONOUS o VOLATILE"
#: fortran/interface.c:1698
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Polymorphic scalar passed to array dummy argument '%s' at %L"
-msgstr "Argumento dummy pasado como objeto no polimórfico de '%s' en %L"
+msgstr "Se pasó un escalar polimórfico al argumento dummy de matriz '%s' en %L"
#: fortran/interface.c:1707
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Element of assumed-shaped or pointer array passed to array dummy argument '%s' at %L"
-msgstr "Un elemento de la matriz de forma asumida se pasa al argumento dummy '%s' en %L"
+msgstr "Se pasó un elemento de forma asumida o puntero a matriz al argumento dummy de matriz '%s' en %L"
#: fortran/interface.c:1719
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Extension: Scalar non-default-kind, non-C_CHAR-kind CHARACTER actual argument with array dummy argument '%s' at %L"
-msgstr "Fortran 2003: Argumento actual CHARACTER escalar con argumento dummy de matriz '%s' en %L"
+msgstr "Extensión: Argumento actual CHARACTER de género diferente a C_CHAR, sin género por defecto escalar con argumento dummy de matriz '%s' en %L"
#: fortran/interface.c:1727
#, gcc-internal-format, gfc-internal-format
@@ -35522,7 +35510,7 @@ msgstr "No coincide la longitud de car
#: fortran/interface.c:2122
#, gcc-internal-format, gfc-internal-format
msgid "Actual argument argument at %L to allocatable or pointer dummy argument '%s' must have a deferred length type parameter if and only if the dummy has one"
-msgstr ""
+msgstr "El argumento actual del argumento en %L para el argumento alojable o dummy puntero '%s' debe tener un parámetro de tipo de longitud diferido si y sólo si el dummy tiene uno"
#: fortran/interface.c:2136
#, gcc-internal-format, gfc-internal-format
@@ -35660,19 +35648,19 @@ msgid "Procedure '%s' called at %L is not explicitly declared"
msgstr "El procedimiento '%s' que se llama en %L no tiene una interfaz explícita"
#: fortran/interface.c:2713
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "The pointer object '%s' at %L must have an explicit function interface or be declared as array"
-msgstr "El procedimiento ELEMENTAL '%s' en %L debe tener una interfaz explícita"
+msgstr "El objeto puntero '%s' en %L debe tener una interfaz de función explícita o declrararse como matriz"
#: fortran/interface.c:2721
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "The allocatable object '%s' at %L must have an explicit function interface or be declared as array"
-msgstr "El procedimiento ELEMENTAL '%s' en %L debe tener una interfaz explícita"
+msgstr "El objeto allocatable '%s' en %L debe tener una interfaz de función explícita o declararse como matriz"
#: fortran/interface.c:2729
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Allocatable function '%s' at %L must have an explicit function interface"
-msgstr "La función de longitud de carácter automática '%s' que no es constante en %L debe una interfaz explícita"
+msgstr "La función allocatable '%s' en %L debe tener una interfaz de función explícita"
#: fortran/interface.c:2739
#, gcc-internal-format, gfc-internal-format
@@ -36656,9 +36644,9 @@ msgid "MOLD tag at %L conflicts with SOURCE tag at %L"
msgstr "La etiqueta MOLD en %L tiene conflictos con la etiqueta SOURCE en %L"
#: fortran/match.c:3139
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Allocate-object at %L with a deferred type parameter requires either a type-spec or SOURCE tag or a MOLD tag"
-msgstr "El objeto de alojamiento en %L con un parámetro de tipo diferido requiere una especificación de tipo o una etiqueta SOURCE"
+msgstr "El objeto de alojamiento en %L con un parámetro de tipo diferido requiere una especificación de tipo o una etiqueta SOURCE o una etiqueta MOLD"
#: fortran/match.c:3276
#, gcc-internal-format, gfc-internal-format
@@ -38146,24 +38134,24 @@ msgid "Unable to find a specific INTRINSIC procedure for the reference '%s' at %
msgstr "No se puede encontrar un procedimiento INTRINSIC específico para la referencia '%s' en %L"
#: fortran/resolve.c:347
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2008: Argument '%s' of pure function '%s' at %L with VALUE attribute but without INTENT(IN)"
-msgstr "El argumento '%s' de la función pure '%s' en %L debe ser INTENT(IN)"
+msgstr "Fortran 2008: El argumento '%s' de la función pure '%s' en %L debe tener el atributo VALUE pero sin INTENT(IN)"
#: fortran/resolve.c:352
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Argument '%s' of pure function '%s' at %L must be INTENT(IN) or VALUE"
-msgstr "El argumento '%s' de la función pure '%s' en %L debe ser INTENT(IN)"
+msgstr "El argumento '%s' de la función pure '%s' en %L debe ser INTENT(IN) o VALUE"
#: fortran/resolve.c:360
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2008: Argument '%s' of pure subroutine '%s' at %L with VALUE attribute but without INTENT"
-msgstr "El argumento '%s' de la función pure '%s' en %L debe tener especificado su INTENT"
+msgstr "Fortran 2008: El argumento '%s' de la subrutina pure '%s' en %L debe tener atributo VALUE pero sin INTENT"
#: fortran/resolve.c:365
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Argument '%s' of pure subroutine '%s' at %L must have its INTENT specified or have the VALUE attribute"
-msgstr "El argumento '%s' de la función pure '%s' en %L debe tener especificado su INTENT"
+msgstr "El argumento '%s' de la subrutina pure '%s' en %L debe tener especificado su INTENT o tener el atributo VALUE"
#: fortran/resolve.c:386
#, gcc-internal-format, gfc-internal-format
@@ -38551,19 +38539,19 @@ msgid "Parameter '%s' to '%s' at %L must be either a TARGET or an associated poi
msgstr "El parámetro '%s' para '%s' en %L debe ser un TARGET o un puntero asociado"
#: fortran/resolve.c:2736
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Coindexed argument not permitted in '%s' call at %L"
-msgstr "no se permite usar punteros como valores case"
+msgstr "No se permite un argumento coindizado en la llamada '%s' en %L"
#: fortran/resolve.c:2759
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Array section not permitted in '%s' call at %L"
-msgstr "Más argumentos actuales que formales en la llamada '%s' en %L"
+msgstr "No se permite una sección de matriz en la llamada '%s' en %L"
#: fortran/resolve.c:2770
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Array section in '%s' call at %L"
-msgstr "No se permite el nombre de función '%s' en %C"
+msgstr "Sección de matriz en la llamada '%s' en %L"
#: fortran/resolve.c:2789
#, gcc-internal-format, gfc-internal-format
@@ -39077,9 +39065,9 @@ msgid "Allocate-object at %L also appears at %L"
msgstr "El objeto de alojamiento en %L también aparece en %L"
#: fortran/resolve.c:7064 fortran/resolve.c:7070
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Allocate-object at %L is subobject of object at %L"
-msgstr "El objeto de alojamiento en %L también aparece en %L"
+msgstr "El objeto de alojamiento en %L es un subobjeto del objeto en %L"
#. The cases overlap, or they are the same
#. element in the list. Either way, we must
@@ -39179,7 +39167,7 @@ msgstr "Bloque CLASS IS doble en la declaraci
#: fortran/resolve.c:8077
#, gcc-internal-format, gfc-internal-format
msgid "Data transfer element at %L cannot be polymorphic unless it is processed by a defined input/output procedure"
-msgstr "El elemento de transferencia de datos en %L no puede ser polimórfico a menso que se procese con un procedimiento de entrada/salida definido"
+msgstr "El elemento de transferencia de datos en %L no puede ser polimórfico a menos que se procese con un procedimiento de entrada/salida definido"
#: fortran/resolve.c:8089
#, gcc-internal-format, gfc-internal-format
@@ -39187,9 +39175,9 @@ msgid "Data transfer element at %L cannot have POINTER components"
msgstr "El elemento de transferencia de datos en %L no puede tener componentes POINTER"
#: fortran/resolve.c:8097
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Data transfer element at %L cannot have procedure pointer components"
-msgstr "El elemento de transferencia de datos en %L no puede tener componentes POINTER"
+msgstr "El elemento de transferencia de datos en %L no puede tener componentes de puntero a procedimiento"
#: fortran/resolve.c:8104
#, gcc-internal-format, gfc-internal-format
@@ -39522,9 +39510,9 @@ msgid "ELEMENTAL function '%s' at %L must have a scalar result"
msgstr "La función ELEMENTAL '%s' en %L debe tener un resultado escalar"
#: fortran/resolve.c:10258
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Statement function '%s' at %L may not have pointer or allocatable attribute"
-msgstr "La función de declaración '%s' en %L no se permite como un argumento actual"
+msgstr "La función de declaración '%s' en %L no debe tener atributo puntero o alojable"
#: fortran/resolve.c:10277
#, gcc-internal-format, gfc-internal-format
@@ -39880,7 +39868,7 @@ msgstr "La longitud de car
#: fortran/resolve.c:11655
#, gcc-internal-format, gfc-internal-format
msgid "Character component '%s' of '%s' at %L with deferred length must be a POINTER or ALLOCATABLE"
-msgstr ""
+msgstr "El componente de carácter '%s' de '%s' en %L con longitud diferida debe ser POINTER o ALLOCATABLE"
#: fortran/resolve.c:11667
#, gcc-internal-format, gfc-internal-format
@@ -39908,41 +39896,41 @@ msgid "Component '%s' with CLASS at %L must be allocatable or pointer"
msgstr "El componente '%s' con CLASS en %L debe ser allocatable o pointer"
#: fortran/resolve.c:11771
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Assumed size array '%s' in namelist '%s' at %L is not allowed"
-msgstr "No se permite la matriz de tamaño asumido '%s' en la lista de nombres '%s' en %C"
+msgstr "No se permite la matriz de tamaño asumido '%s' en la lista de nombres '%s' en %L"
#: fortran/resolve.c:11777
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2003: NAMELIST array object '%s' with assumed shape in namelist '%s' at %L"
-msgstr "El objeto de matriz NAMELIST '%s' no debe tener forma asumida en la lista de nombres '%s' en %L"
+msgstr "Fortran 2003: Objeto de matriz NAMELIST '%s' con forma asumida en la lista de nombres '%s' en %L"
#: fortran/resolve.c:11784
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2003: NAMELIST array object '%s' with nonconstant shape in namelist '%s' at %L"
-msgstr "El objeto de matriz NAMELIST '%s' debe tener forma constante en la lista de nombres '%s' en %L"
+msgstr "Fortran 2003: El objeto de matriz NAMELIST '%s' con forma que no es constante en la lista de nombres '%s' en %L"
#: fortran/resolve.c:11793
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2003: NAMELIST object '%s' with nonconstant character length in namelist '%s' at %L"
-msgstr "El objeto de matriz NAMELIST '%s' debe tener forma constante en la lista de nombres '%s' en %L"
+msgstr "Fortran 2003: El objeto de matriz NAMELIST '%s' con longitud de carácter que no es constante en la lista de nombres '%s' en %L"
#: fortran/resolve.c:11803
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "NAMELIST object '%s' in namelist '%s' at %L is polymorphic and requires a defined input/output procedure"
-msgstr "El elemento de transferencia de datos en %L no puede ser polimórfico a menso que se procese con un procedimiento de entrada/salida definido"
+msgstr "El objeto NAMELIST '%s' en la lista de nombres '%s' en %L es polimórfico y requiere un procedimiento de entrada/salida definido"
#: fortran/resolve.c:11813
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "Fortran 2003: NAMELIST object '%s' in namelist '%s' at %L with ALLOCATABLE or POINTER components"
-msgstr "El objeto NAMELIST '%s' en la lista de nombres '%s' en %L no puede tener componentes ALLOCATABLE"
+msgstr "Fortran 2003: El objeto NAMELIST '%s' en la lista de nombres '%s' en %L con componentes ALLOCATABLE o POINTER"
#. FIXME: Once UDDTIO is implemented, the following can be
#. removed.
#: fortran/resolve.c:11821
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "NAMELIST object '%s' in namelist '%s' at %L has ALLOCATABLE or POINTER components and thus requires a defined input/output procedure"
-msgstr "El objeto NAMELIST '%s' en la lista de nombres '%s' en %L no puede tener componentes ALLOCATABLE"
+msgstr "El objeto NAMELIST '%s' en la lista de nombres '%s' en %L tiene componentes ALLOCATABLE o POINTER y por lo tanto requere un procedimiento de entrada/salida definido"
#: fortran/resolve.c:11838
#, gcc-internal-format, gfc-internal-format
@@ -41617,7 +41605,7 @@ msgstr "las extensiones de clase no est
#: objc/objc-act.c:632
#, gcc-internal-format
msgid "class extension for class %qE declared after its %<@implementation%>"
-msgstr ""
+msgstr "la extensión de clase para la clase %qE se declaró después de su %<@implementation%>"
#: objc/objc-act.c:647
#, gcc-internal-format
@@ -41640,24 +41628,24 @@ msgid "%<@package%> presently has the same effect as %<@public%>"
msgstr "%<@package%> en este momento tiene el mismo efecto que %<@public%>"
#: objc/objc-act.c:734
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@optional%> is not available in Objective-C 1.0"
-msgstr "%<@property%> no está disponible en Objective-C 1.0"
+msgstr "%<@optional%> no está disponible en Objective-C 1.0"
#: objc/objc-act.c:736
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@required%> is not available in Objective-C 1.0"
-msgstr "%<@property%> no está disponible en Objective-C 1.0"
+msgstr "%<@required%> no está disponible en Objective-C 1.0"
#: objc/objc-act.c:744
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@optional%> is allowed in @protocol context only"
-msgstr "@optional/@required sólo se permiten en el contexto de @protocol"
+msgstr "%<@optional%> sólo se permite en el contexto de @protocol"
#: objc/objc-act.c:746
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@required%> is allowed in @protocol context only"
-msgstr "@optional/@required sólo se permiten en el contexto de @protocol"
+msgstr "%<@required%> sólo se permite en el contexto de @protocol"
#: objc/objc-act.c:853
#, gcc-internal-format
@@ -42013,14 +42001,14 @@ msgid "%<@throw%> argument is not an object"
msgstr "el argumento %<@throw%> no es un objeto"
#: objc/objc-act.c:4138
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<@synchronized%> argument is not an object"
-msgstr "el argumento %<@throw%> no es un objeto"
+msgstr "el argumento %<@synchronized%> no es un objeto"
#: objc/objc-act.c:4273
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "type %qT does not have a known size"
-msgstr "el tipo %q+D no tiene un tamaño conocido"
+msgstr "el tipo %qT no tiene un tamaño conocido"
#: objc/objc-act.c:4450
#, gcc-internal-format
@@ -42134,27 +42122,27 @@ msgstr "la variable de instancia %qE se accedi
#: objc/objc-act.c:5764 objc/objc-act.c:5784
#, gcc-internal-format
msgid "method %<%c%E%> declared %<@optional%> and %<@required%> at the same time"
-msgstr ""
+msgstr "se declaró el método %<%c%E%> como %<@optional%> y %<@required%> al mismo tiempo"
#: objc/objc-act.c:5768
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of %<%c%E%> as %<@required%>"
-msgstr "declaración previa de %<%c%s%>"
+msgstr "declaración previa de %<%c%E%> como %<@required%>"
#: objc/objc-act.c:5788
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of %<%c%E%> as %<@optional%>"
-msgstr "declaración previa de %<%c%s%>"
+msgstr "declaración previa de %<%c%E%> como %<@optional%>"
#: objc/objc-act.c:5848
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "duplicate declaration of method %<%c%E%> with conflicting types"
-msgstr "declaración duplicada del método %<%c%E%>"
+msgstr "declaración duplicada del método %<%c%E%> con tipos en conflicto"
#: objc/objc-act.c:5852
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "previous declaration of %<%c%E%>"
-msgstr "declaración previa de %<%c%s%>"
+msgstr "declaración previa de %<%c%E%>"
#: objc/objc-act.c:5914
#, gcc-internal-format
@@ -42172,9 +42160,9 @@ msgid "instance variable %qs has unknown size"
msgstr "la variable de instancia %qs es de tamaño desconocido"
#: objc/objc-act.c:6025
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "instance variable %qs uses flexible array member"
-msgstr "uso inválido de un miembro de matriz flexible"
+msgstr "la variable de instancia %qs usa un miembro de matriz flexible"
#: objc/objc-act.c:6051
#, gcc-internal-format
@@ -42373,9 +42361,9 @@ msgid "%<@dynamic%> requires the @interface of the class to be available"
msgstr "%<@dynamic%> requiere que @interface de la clase esté disponible"
#: objc/objc-act.c:7807
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "definition of protocol %qE not found"
-msgstr "no se encontró la definición de método para %<%c%E%>"
+msgstr "no se encontró la definición del protocolo %qE"
#. It would be nice to use warn_deprecated_use() here, but
#. we are using TREE_CHAIN (which is supposed to be the
@@ -42465,25 +42453,25 @@ msgid "%<-fobjc-gc%> is ignored for %<-fgnu-runtime%>"
msgstr "se descarta %<-fobjc-gc%> por %<-fgnu-runtime%>"
#: objc/objc-gnu-runtime-abi-01.c:137
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-fobjc-sjlj-exceptions%> is ignored for %<-fgnu-runtime%>"
-msgstr "se descarta %<-fobjc-gc%> por %<-fgnu-runtime%>"
+msgstr "se descarta %<-fobjc-sjlj-exceptions%> por %<-fgnu-runtime%>"
#: objc/objc-gnu-runtime-abi-01.c:2168 objc/objc-next-runtime-abi-01.c:2848
#: objc/objc-next-runtime-abi-02.c:3636
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "non-objective-c type '%T' cannot be caught"
-msgstr "el miembro que no es objeto %qs no se puede declarar %<mutable%>"
+msgstr "no se puede atrapar el tipo '%T' que no es de objective-c"
#: objc/objc-next-runtime-abi-01.c:150
#, gcc-internal-format
msgid "%<-fobjc-sjlj-exceptions%> is the only supported exceptions system for %<-fnext-runtime%> with %<-fobjc-abi-version%> < 2"
-msgstr ""
+msgstr "%<-fobjc-sjlj-exceptions%> es la única excepción a sistema admitida para %<-fnext-runtime%> con %<-fobjc-abi-version%> < 2"
#: objc/objc-next-runtime-abi-02.c:247
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-fobjc-sjlj-exceptions%> is ignored for %<-fnext-runtime%> when %<-fobjc-abi-version%> >= 2"
-msgstr "se descarta %<-fobjc-gc%> por %<-fgnu-runtime%>"
+msgstr "se descarta %<-fobjc-sjlj-exceptions%> por %<-fnext-runtime%> cuando %<-fobjc-abi-version%> >= 2"
#: objc/objc-runtime-shared-support.c:431
#, gcc-internal-format
--
1.7.0.4

View File

@ -1,27 +0,0 @@
From 7a43b3a2e2c0d9cf557ac45577cc42c6d72e0065 Mon Sep 17 00:00:00 2001
From: baldrick <baldrick@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 5 Apr 2011 08:13:16 +0000
Subject: [PATCH] The parameters for functions from the frexp family were the wrong way
round. Swap them.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171972 138bc75d-0d04-0410-961f-82ee72b054a4
index 3340dc4..728b631 100644
--- a/gcc/fortran/f95-lang.c
+++ b/gcc/fortran/f95-lang.c
@@ -695,10 +695,9 @@ build_builtin_fntypes (tree *fntype, tree type)
type, integer_type_node, NULL_TREE);
/* type (*) (void) */
fntype[3] = build_function_type_list (type, NULL_TREE);
- /* type (*) (&int, type) */
- fntype[4] = build_function_type_list (type,
+ /* type (*) (type, &int) */
+ fntype[4] = build_function_type_list (type, type,
build_pointer_type (integer_type_node),
- type,
NULL_TREE);
/* type (*) (int, type) */
fntype[5] = build_function_type_list (type,
--
1.7.0.4

View File

@ -1,32 +0,0 @@
From 56a8ff0c197b4b0f917e3b50ac0dd3ed26f300c3 Mon Sep 17 00:00:00 2001
From: rguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 5 Apr 2011 12:13:27 +0000
Subject: [PATCH] 2011-04-05 Richard Guenther <rguenther@suse.de>
PR bootstrap/48431
* lto-plugin.c (claim_file_handler): Do not declare vars in code.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171983 138bc75d-0d04-0410-961f-82ee72b054a4
index 64a0164..661f10c 100644
--- a/lto-plugin/lto-plugin.c
+++ b/lto-plugin/lto-plugin.c
@@ -851,11 +851,11 @@ claim_file_handler (const struct ld_plugin_input_file *file, int *claimed)
/* We pass the offset of the actual file, not the archive header.
Can't use PRIx64, because that's C99, so we have to print the
64-bit hex int as two 32-bit ones. */
- int lo, hi;
+ int lo, hi, t;
lo = file->offset & 0xffffffff;
hi = ((int64_t)file->offset >> 32) & 0xffffffff;
- int t = hi ? asprintf (&objname, "%s@0x%x%08x", file->name, lo, hi)
- : asprintf (&objname, "%s@0x%x", file->name, lo);
+ t = hi ? asprintf (&objname, "%s@0x%x%08x", file->name, lo, hi)
+ : asprintf (&objname, "%s@0x%x", file->name, lo);
check (t >= 0, LDPL_FATAL, "asprintf failed");
lto_file.name = objname;
}
--
1.7.0.4

View File

@ -1,22 +0,0 @@
From 6d713959cbb05f7cd030d776bb52113eac8af075 Mon Sep 17 00:00:00 2001
From: ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 5 Apr 2011 14:34:51 +0000
Subject: [PATCH] * stor-layout.c (self_referential_size): Fix 2010-07-13 commit.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@171989 138bc75d-0d04-0410-961f-82ee72b054a4
index ed36c5b..a225dbf 100644
--- a/gcc/stor-layout.c
+++ b/gcc/stor-layout.c
@@ -367,7 +367,7 @@ self_referential_size (tree size)
VEC_safe_push (tree, gc, size_functions, fndecl);
/* Replace the original expression with a call to the size function. */
- return build_call_expr_loc_vec (input_location, fndecl, args);
+ return build_call_expr_loc_vec (UNKNOWN_LOCATION, fndecl, args);
}
/* Take, queue and compile all the size functions. It is essential that
--
1.7.0.4

View File

@ -1,690 +0,0 @@
From 66ebb4822dae1fd3c97ee62f9126615818150966 Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 5 Apr 2011 23:08:59 +0000
Subject: [PATCH] * de.po: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172010 138bc75d-0d04-0410-961f-82ee72b054a4
index 8db4ba1..8f3af8f 100644
--- a/gcc/po/de.po
+++ b/gcc/po/de.po
@@ -6,10 +6,10 @@
# Roland Stigge <stigge@antcom.de>, 2003, 2004, 2005, 2006, 2007, 2008, 2010, 2011.
msgid ""
msgstr ""
-"Project-Id-Version: gcc 4.6-b20101218\n"
+"Project-Id-Version: gcc 4.6.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2011-03-24 16:45+0000\n"
-"PO-Revision-Date: 2011-03-05 19:50+0100\n"
+"PO-Revision-Date: 2011-04-05 19:50+0100\n"
"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -1815,9 +1815,8 @@ msgid "The maximum amount of memory to be allocated by GCSE"
msgstr "Maximalbetrag des von GCSE zu belegenden Speichers"
#: params.def:222
-#, fuzzy
msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
-msgstr "Die Höchstzahl der zum Abrollen von Schleifen zu betrachtenden Anweisungen"
+msgstr "Das größte Verhältnis von Einfügungen zu Löschungen von Ausdrücken in GCSE"
#: params.def:233
msgid "The threshold ratio for performing partial redundancy elimination after reload"
@@ -1992,9 +1991,8 @@ msgid "Bound on size of expressions used in the scalar evolutions analyzer"
msgstr "Schranke für Größe von Ausdrücken im skalaren Evolutions-Analysierer verwendet"
#: params.def:488
-#, fuzzy
msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer"
-msgstr "Schranke für Größe von Ausdrücken im skalaren Evolutions-Analysierer verwendet"
+msgstr "Schranke für die Komplexität von Ausdrücken im skalaren Evolutions-Analysierer"
#: params.def:493
msgid "Bound on the number of variables in Omega constraint systems"
@@ -3442,7 +3440,7 @@ msgstr "AltiVec-Argument an Funktion ohne Prototyp übergeben"
#: config/s390/s390.c:5206
#, c-format
msgid "symbolic memory references are only supported on z10 or later"
-msgstr ""
+msgstr "symbolische Speicherreferenzen werden nur auf z10 oder neuer unterstützt"
#: config/s390/s390.c:5217
#, c-format
@@ -3450,74 +3448,74 @@ msgid "cannot decompose address"
msgstr "Adresse kann nicht zerlegt werden"
#: config/s390/s390.c:5276
-#, fuzzy, c-format
+#, c-format
msgid "invalid comparison operator for 'E' output modifier"
-msgstr "ungültiger Operand für Modifizierer »b«"
+msgstr "ungültiger Vergleichsoperator für Ausgabemodifizierer »E«"
#: config/s390/s390.c:5297
-#, fuzzy, c-format
+#, c-format
msgid "invalid reference for 'J' output modifier"
-msgstr "ungültiger Operand für Modifizierer »b«"
+msgstr "ungültige Referenz für Ausgabemodifizierer »J«"
#: config/s390/s390.c:5311
#, c-format
msgid "memory reference expected for 'O' output modifier"
-msgstr ""
+msgstr "Speicherreferenz für Ausgabemodifizierer »O« erwartet"
#: config/s390/s390.c:5322
-#, fuzzy, c-format
+#, c-format
msgid "invalid address for 'O' output modifier"
-msgstr "ungültiger Operand für Modifizierer »O«"
+msgstr "ungültige Adresse für Ausgabemodifizierer »O«"
#: config/s390/s390.c:5340
#, c-format
msgid "memory reference expected for 'R' output modifier"
-msgstr ""
+msgstr "Speicherreferenz für Ausgabemodifizierer »R« erwartet"
#: config/s390/s390.c:5351
-#, fuzzy, c-format
+#, c-format
msgid "invalid address for 'R' output modifier"
-msgstr "ungültiger Operand für Modifizierer »b«"
+msgstr "ungültige Adresse für Ausgabemodifizierer »R«"
#: config/s390/s390.c:5369
#, c-format
msgid "memory reference expected for 'S' output modifier"
-msgstr ""
+msgstr "Speicherreferenz für Ausgabemodifizierer »S« erwartet"
#: config/s390/s390.c:5379
-#, fuzzy, c-format
+#, c-format
msgid "invalid address for 'S' output modifier"
-msgstr "ungültiger Operand für Modifizierer »b«"
+msgstr "ungültige Adresse für Ausgabemodifizierer »S«"
#: config/s390/s390.c:5399
#, c-format
msgid "register or memory expression expected for 'N' output modifier"
-msgstr ""
+msgstr "Register oder Speicherausdruck für Ausgabemodifizierer »N« erwartet"
#: config/s390/s390.c:5409
#, c-format
msgid "register or memory expression expected for 'M' output modifier"
-msgstr ""
+msgstr "Register oder Speicherausdruck für Ausgabemodifizierer »M« erwartet"
#: config/s390/s390.c:5474
-#, fuzzy, c-format
+#, c-format
msgid "invalid constant - try using an output modifier"
-msgstr "Ungültiger Operanden-Ausgabecode"
+msgstr "Ungültige Konstante - anderen Ausgabemodifizierer probieren"
#: config/s390/s390.c:5477
-#, fuzzy, c-format
+#, c-format
msgid "invalid constant for output modifier '%c'"
-msgstr "ungültiger Operand für Modifizierer »o«"
+msgstr "ungültige Konstante für Ausgabemodifizierer »%c«"
#: config/s390/s390.c:5484
-#, fuzzy, c-format
+#, c-format
msgid "invalid expression - try using an output modifier"
-msgstr "ungültiger Ausdruck für Min-L-Wert"
+msgstr "ungültiger Ausdruck - anderen Ausgabemodifizierer probieren"
#: config/s390/s390.c:5487
-#, fuzzy, c-format
+#, c-format
msgid "invalid expression for output modifier '%c'"
-msgstr "ungültiger Operand für Modifizierer »o«"
+msgstr "ungültiger Ausdruck für Ausgabemodifizierer »%c«"
#: config/score/score7.c:1207
#, c-format
@@ -5556,9 +5554,8 @@ msgid "Return pointers in both a0 and d0"
msgstr "Zeiger sowohl in a0 als auch in d0 zurück geben"
#: config/mn10300/mn10300.opt:56
-#, fuzzy
msgid "Allow gcc to generate LIW instructions"
-msgstr "GCC erlauben, den repeat/erepeat-Befehl zu verwenden"
+msgstr "GCC erlauben, LIW-Befehle zu verwenden"
#: config/s390/tpf.opt:23
msgid "Enable TPF-OS tracing code"
@@ -6372,9 +6369,8 @@ msgid "Do not support SSE4.1 and SSE4.2 built-in functions and code generation"
msgstr "Eingebaute SSE4.1- und SSE4.2-Funktionen und Codeerzeugung nicht unterstützen"
#: config/i386/i386.opt:328
-#, fuzzy
msgid "%<-msse5%> was removed"
-msgstr "»-msse5« wurde entfernt"
+msgstr "%<-msse5%> wurde entfernt"
#: config/i386/i386.opt:333
msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
@@ -8180,13 +8176,12 @@ msgid "Set the max size of data eligible for the TDA area"
msgstr "Maximalgröße der für den TDA-Bereich geeigneten Daten setzen"
#: config/v850/v850.opt:71
-#, fuzzy
msgid "Do not enforce strict alignment"
-msgstr "Genaue Ausrichtung erzwingen"
+msgstr "Genaue Ausrichtung nicht erzwingen"
#: config/v850/v850.opt:75
msgid "Put jump tables for switch statements into the .data section rather than the .code section"
-msgstr ""
+msgstr "Sprungtabellen für »switch«-Anweisungen in den .data-Abschnitt statt in den .code-Abschnitt einfügen"
#: config/v850/v850.opt:82
msgid "Compile for the v850 processor"
@@ -8201,9 +8196,8 @@ msgid "Compile for the v850e1 processor"
msgstr "Für v850e1-Prozessor übersetzen"
#: config/v850/v850.opt:94
-#, fuzzy
msgid "Compile for the v850es variant of the v850e1"
-msgstr "Für v850e-Prozessor übersetzen"
+msgstr "Für die v850es-Variante des v850e1 übersetzen"
#: config/v850/v850.opt:98
msgid "Compile for the v850e2 processor"
@@ -8726,13 +8720,12 @@ msgid "Use multiply high instructions for high part of 32x32 multiply"
msgstr "Verwendet »multiply high«-Befehle für den oberen Teil einer 32x32 Multiplikation"
#: config/microblaze/microblaze.opt:92
-#, fuzzy
msgid "Use hardware floating point conversion instructions"
-msgstr "Hardware-Fließkommakonvertierungbefehle verwenden"
+msgstr "Hardware-Gleitkommakonvertierungbefehle verwenden"
#: config/microblaze/microblaze.opt:96
msgid "Use hardware floating point square root instruction"
-msgstr "Verwendet Hardware Fließkomma Wurzel-Instruktion"
+msgstr "Verwendet Hardware-Gleitkomma-Wurzel-Instruktion"
#: config/microblaze/microblaze.opt:100
msgid "Description for mxl-mode-executable"
@@ -22953,17 +22946,17 @@ msgstr "inkonsistente Aufrufe von %qs können nicht behandelt werden"
#: config/mips/mips.c:9227
#, gcc-internal-format
msgid "the %<interrupt%> attribute requires a MIPS32r2 processor"
-msgstr ""
+msgstr "das %<interrupt%>-Attribut erfordert einen MIPS32r2-Prozessor"
#: config/mips/mips.c:9229
#, gcc-internal-format
msgid "the %<interrupt%> attribute requires %<-msoft-float%>"
-msgstr ""
+msgstr "das %<interrupt%>-Attribut erfordert %<-msoft-float%>"
#: config/mips/mips.c:9231
#, gcc-internal-format
msgid "interrupt handlers cannot be MIPS16 functions"
-msgstr ""
+msgstr "Interrupthandler können keine MIPS16-Funktionen sein"
#: config/mips/mips.c:13214
#, gcc-internal-format
@@ -22971,24 +22964,24 @@ msgid "invalid argument to built-in function"
msgstr "ungültiges Argument für eingebaute Funktion"
#: config/mips/mips.c:13455
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "built-in function %qE not supported for MIPS16"
-msgstr "eingebaute Funktion %qs nicht für MIPS16 unterstützt"
+msgstr "eingebaute Funktion %qE nicht für MIPS16 unterstützt"
#: config/mips/mips.c:14045
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs does not support MIPS16 code"
-msgstr "%s unterstützt nicht %s"
+msgstr "%qs unterstützt keinen MIPS16-Code"
#: config/mips/mips.c:15266
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "MIPS16 PIC for ABIs other than o32 and o64"
-msgstr "Hardware-Fließkommacode für MIPS16 für ABIs außer o32 und o64"
+msgstr "MIPS16 PIC für ABIs außer o32 und o64"
#: config/mips/mips.c:15269
#, gcc-internal-format
msgid "MIPS16 -mxgot code"
-msgstr ""
+msgstr "MIPS16 -mxgot Code"
#: config/mips/mips.c:15272
#, gcc-internal-format
@@ -23073,17 +23066,17 @@ msgstr "die Architektur %qs unterstützt keine paarweisen Einzel-Befehle"
#: config/mips/mips.c:15762
#, gcc-internal-format
msgid "%qs requires a target that provides the %qs instruction"
-msgstr ""
+msgstr "%qs erfordert ein Ziel, das den %qs-Befehl unterstützt"
#: config/mips/mips.c:15867
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs requires branch-likely instructions"
-msgstr "die Architektur %qs unterstützt keine Befehle mit Sprungwahrscheinlichkeit"
+msgstr "%qs erfordert sprungwahrscheinliche Befehle"
#: config/mips/mips.c:15871
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the %qs architecture does not support the synci instruction"
-msgstr "die Architektur %qs unterstützt keine Befehle mit Sprungwahrscheinlichkeit"
+msgstr "die Architektur %qs unterstützt nicht den synci-Befehl"
#: config/mips/mips.c:16343
#, gcc-internal-format
@@ -23177,100 +23170,100 @@ msgid "-munix=98 option required for C89 Amendment 1 features.\n"
msgstr "Option -munix=98 für Eigenschaften des C89 Amendment 1 erforderlich.\n"
#: config/picochip/picochip.c:438
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid AE type specified (%s)"
-msgstr "falsches Typ-Argument von %qs"
+msgstr "ungültiger AE-Typ angegeben (%s)"
#: config/picochip/picochip.c:461
#, gcc-internal-format, gfc-internal-format
msgid "invalid mul type specified (%s) - expected mac, mul or none"
-msgstr ""
+msgstr "ungültiger mul-Typ angegeben (%s) - mac, mul oder none erwartet"
#: config/picochip/picochip.c:756
#, gcc-internal-format, gfc-internal-format
msgid "unexpected mode %s encountered in picochip_emit_save_register"
-msgstr ""
+msgstr "unerwarteter Modus %s in picochip_emit_save_register gefunden"
#: config/picochip/picochip.c:923
#, gcc-internal-format, gfc-internal-format
msgid "defaulting to stack for %s register creation"
-msgstr ""
+msgstr "Erzeugung von Register %s erfolgt auf Stack"
#: config/picochip/picochip.c:1607
#, gcc-internal-format
msgid "LCFI labels have already been deferred"
-msgstr ""
+msgstr " LCFI-Marken wurden bereits zurückgestellt"
#: config/picochip/picochip.c:1670
#, gcc-internal-format
msgid "LM label has already been deferred"
-msgstr ""
+msgstr "LM-Marke wurde bereits zurückgestellt"
#: config/picochip/picochip.c:1680
#, gcc-internal-format
msgid "LCFI labels have already been deferred."
-msgstr ""
+msgstr "LCFI-Marken wurden bereits zurückgestellt."
#: config/picochip/picochip.c:1962
#, gcc-internal-format, gfc-internal-format
msgid "picochip_asm_output_opcode - Found multiple lines in VLIW packet %s"
-msgstr ""
+msgstr "picochip_asm_output_opcode - Mehrere Zeilen in VLIW-Paket %s gefunden"
#: config/picochip/picochip.c:2065
#, gcc-internal-format
msgid "picochip_asm_output_opcode - can%'t output unknown operator %c"
-msgstr ""
+msgstr "picochip_asm_output_opcode - unbekannter Operator %c kann nicht ausgegeben werden"
#: config/picochip/picochip.c:2316 config/picochip/picochip.c:2376
#, gcc-internal-format
msgid "%s: at least one operand can%'t be handled"
-msgstr ""
+msgstr "%s: mindestens ein Operand kann nicht behandelt werden"
#: config/picochip/picochip.c:2457
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unknown short branch in %s (type %d)"
-msgstr "Unbekanntes Zeichenketten-Token %s\n"
+msgstr "unbekannter kurzer Sprung in %s (Typ %d)"
#: config/picochip/picochip.c:2494
#, gcc-internal-format, gfc-internal-format
msgid "unknown long branch in %s (type %d)"
-msgstr ""
+msgstr "unbekannter weiter Sprung in %s (Typ %d)"
#: config/picochip/picochip.c:2534 config/picochip/picochip.c:2602
#, gcc-internal-format, gfc-internal-format
msgid "PUT uses port array index %d, which is out of range [%d..%d)"
-msgstr ""
+msgstr "PUT verwendet Port-Feldindex %d, was außerhalb des Wertebereiches [%d..%d) liegt"
#: config/picochip/picochip.c:2568
#, gcc-internal-format, gfc-internal-format
msgid "GET uses port array index %d, which is out of range [%d..%d)"
-msgstr ""
+msgstr "GET verwendet Port-Feldindex %d, was außerhalb des Wertebereiches [%d..%d) liegt"
#: config/picochip/picochip.c:3439
#, gcc-internal-format, gfc-internal-format
msgid "too many ALU instructions emitted (%d)"
-msgstr ""
+msgstr "zu viele ALU-Befehle ausgegeben (%d)"
#: config/picochip/picochip.c:4071 config/picochip/picochip.c:4164
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s: Second source operand is not a constant"
-msgstr "»o«-Operand ist nicht konstant"
+msgstr "%s: Zweiter Quelloperand ist keine Konstante"
#: config/picochip/picochip.c:4074 config/picochip/picochip.c:4125
#: config/picochip/picochip.c:4167
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s: Third source operand is not a constant"
-msgstr "»o«-Operand ist nicht konstant"
+msgstr "%s: Dritter Quelloperand ist keine Konstante"
#: config/picochip/picochip.c:4128
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s: Fourth source operand is not a constant"
-msgstr "»o«-Operand ist nicht konstant"
+msgstr "%s: Vierter Quelloperand ist keine Konstante"
#: config/picochip/picochip.c:4423
#, gcc-internal-format, gfc-internal-format
msgid "%s (disable warning using -mno-inefficient-warnings)"
-msgstr ""
+msgstr "%s (Warnung kann mit -mno-inefficient-warnings ausgeschaltet werden)"
#: config/rs6000/host-darwin.c:60
#, gcc-internal-format
@@ -23332,29 +23325,29 @@ msgid "junk at end of #pragma longcall"
msgstr "Ausschuss am Ende von #pragma longcall"
#: config/rs6000/rs6000-c.c:3473
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts %d arguments"
-msgstr "unpassende Argumente"
+msgstr "%s akzeptiert nur %d Argumente"
#: config/rs6000/rs6000-c.c:3478
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 1 argument"
-msgstr "-split hat kein Argument."
+msgstr "%s akzeptiert nur 1 Argument"
#: config/rs6000/rs6000-c.c:3483
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s only accepts 2 arguments"
-msgstr "%q+D benötigt entweder null oder zwei Argumente"
+msgstr "%s akzeptiert nur 2 Argumente"
#: config/rs6000/rs6000-c.c:3548
#, gcc-internal-format
msgid "vec_extract only accepts 2 arguments"
-msgstr ""
+msgstr "vec_extract akzeptiert nur 2 Argumente"
#: config/rs6000/rs6000-c.c:3624
#, gcc-internal-format
msgid "vec_insert only accepts 3 arguments"
-msgstr ""
+msgstr "vec_insert akzeptiert nur 3 Argumente"
#: config/rs6000/rs6000-c.c:3727
#, gcc-internal-format
@@ -23369,17 +23362,17 @@ msgstr "ungültige Parameterkombination für intrinsisches AltiVec"
#: config/rs6000/rs6000.c:2524
#, gcc-internal-format
msgid "-mrecip requires -ffinite-math or -ffast-math"
-msgstr ""
+msgstr "-mrecip erfordert -ffinite-math oder -ffast-math"
#: config/rs6000/rs6000.c:2526
#, gcc-internal-format
msgid "-mrecip requires -fno-trapping-math or -ffast-math"
-msgstr ""
+msgstr "-mrecip erfordert -fno-trapping-math oder -ffast-math"
#: config/rs6000/rs6000.c:2528
#, gcc-internal-format
msgid "-mrecip requires -freciprocal-math or -ffast-math"
-msgstr ""
+msgstr "-mrecip erfordert -freciprocal-math oder -ffast-math"
#: config/rs6000/rs6000.c:2622
#, gcc-internal-format
@@ -23387,14 +23380,14 @@ msgid "-m64 requires PowerPC64 architecture, enabling"
msgstr "-m64 erfordert PowerPC64-Architektur voraus, eingeschaltet"
#: config/rs6000/rs6000.c:2747
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "AltiVec not supported in this target"
-msgstr "Kellergrenzen nicht für dieses Ziel unterstützt"
+msgstr "AltiVec wird für dieses Ziel nicht unterstützt"
#: config/rs6000/rs6000.c:2749
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "SPE not supported in this target"
-msgstr "Kellergrenzen nicht für dieses Ziel unterstützt"
+msgstr "SPE wird für dieses Ziel nicht unterstützt"
#: config/rs6000/rs6000.c:2776
#, gcc-internal-format
@@ -23414,37 +23407,37 @@ msgstr "unbekannte ABI-Typ (%s) für Vektorisierungsbibliothek bei Schalter -mve
#: config/rs6000/rs6000.c:2901
#, gcc-internal-format
msgid "target attribute or pragma changes long double size"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert Größe von long double"
#: config/rs6000/rs6000.c:2922 config/rs6000/rs6000.c:2937
#, gcc-internal-format
msgid "target attribute or pragma changes AltiVec ABI"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert AltiVec ABI"
#: config/rs6000/rs6000.c:2954
#, gcc-internal-format
msgid "target attribute or pragma changes darwin64 ABI"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert darwin64 ABI"
#: config/rs6000/rs6000.c:2995
#, gcc-internal-format
msgid "target attribute or pragma changes SPE ABI"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert SPE ABI"
#: config/rs6000/rs6000.c:3317
#, gcc-internal-format
msgid "target attribute or pragma changes single precision floating point"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert Gleitkomma mit einfacher Genauigkeit"
#: config/rs6000/rs6000.c:3320
#, gcc-internal-format
msgid "target attribute or pragma changes double precision floating point"
-msgstr ""
+msgstr "Ziel-Attribut oder Pragma ändert Gleitkomma mit doppelter Genauigkeit"
#: config/rs6000/rs6000.c:3367
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unknown option for -mrecip=%s"
-msgstr "Unbekannte CPU: -mcpu=%s"
+msgstr "unbekannte Option für -mrecip=%s"
#: config/rs6000/rs6000.c:3834
#, gcc-internal-format, gfc-internal-format
@@ -23452,14 +23445,14 @@ msgid "unknown -m%s= option specified: '%s'"
msgstr "unbekannte Option für -m%s= angegeben: »%s«"
#: config/rs6000/rs6000.c:3869
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unknown value %s for -mfpu"
-msgstr "Falscher Wert %qs für Schalter -mcpu"
+msgstr "unbekannter Wert %s für -mfpu"
#: config/rs6000/rs6000.c:4256
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "invalid option for -mcmodel: '%s'"
-msgstr "ungültige Option für -mfloat-gprs: »%s«"
+msgstr "ungültige Option für -mcmodel: »%s«"
#: config/rs6000/rs6000.c:4386
#, gcc-internal-format, gfc-internal-format
@@ -23472,24 +23465,24 @@ msgid "not configured for ABI: '%s'"
msgstr "nicht für ABI konfiguriert: »%s«"
#: config/rs6000/rs6000.c:4472
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "using darwin64 ABI"
msgstr "darwin64-ABI wird verwendet"
#: config/rs6000/rs6000.c:4477
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "using old darwin ABI"
msgstr "Altes darwin-ABI wird verwendet"
#: config/rs6000/rs6000.c:4484
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "using IBM extended precision long double"
-msgstr "IBM long doubles mit erweiterter Genauigkeit werden verwendet"
+msgstr "IBM long double mit erweiterter Genauigkeit wird verwendet"
#: config/rs6000/rs6000.c:4490
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "using IEEE extended precision long double"
-msgstr "IEEE long doubles mit erweiterter Genauigkeit werden verwendet"
+msgstr "IEEE long double mit erweiterter Genauigkeit wird verwendet"
#: config/rs6000/rs6000.c:4495
#, gcc-internal-format, gfc-internal-format
@@ -23497,14 +23490,14 @@ msgid "unknown ABI specified: '%s'"
msgstr "unbekanntes ABI angegeben: »%s«"
#: config/rs6000/rs6000.c:4504
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -mcpu"
-msgstr "Falscher Wert (%s) für Schalter -mcpu"
+msgstr "falscher Wert (%s) für -mcpu"
#: config/rs6000/rs6000.c:4511
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "bad value (%s) for -mtune"
-msgstr "Falscher Wert (%s) für Schalter -mtune="
+msgstr "falscher Wert (%s) für -mtune"
#: config/rs6000/rs6000.c:4522
#, gcc-internal-format
@@ -23517,9 +23510,9 @@ msgid "invalid option for -mfloat-gprs: '%s'"
msgstr "ungültige Option für -mfloat-gprs: »%s«"
#: config/rs6000/rs6000.c:4546
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "unknown switch -mlong-double-%s"
-msgstr "Unbekannter Schalter -mlong-double-%s"
+msgstr "unbekannter Schalter -mlong-double-%s"
#: config/rs6000/rs6000.c:4567
#, gcc-internal-format
@@ -23534,12 +23527,12 @@ msgstr "unbekannte Option -malign-XXXXX angegeben: »%s«"
#: config/rs6000/rs6000.c:4582
#, gcc-internal-format
msgid "-msingle-float option equivalent to -mhard-float"
-msgstr ""
+msgstr "Option -msingle-float ist äquivalent zu -mhard-float"
#: config/rs6000/rs6000.c:4598
#, gcc-internal-format
msgid "-msimple-fpu option ignored"
-msgstr ""
+msgstr "Option -msimple-fpu ignoriert"
#: config/rs6000/rs6000.c:7966
#, gcc-internal-format
@@ -23562,9 +23555,9 @@ msgid "GCC vector passed by reference: non-standard ABI extension with no compat
msgstr "GCC-Vektor per Referenz übergegeben: Nicht-Standard-ABI-Erweiterung ohne Kompatibilitätsgarantie"
#: config/rs6000/rs6000.c:10003
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function to %s already processed"
-msgstr "Die Eingabedatei als bereits vorverarbeitet behandeln"
+msgstr "interner Fehler: Eingebaute Funktion auf %s bereits verarbeitet"
#: config/rs6000/rs6000.c:10950
#, gcc-internal-format
@@ -23592,14 +23585,14 @@ msgid "argument 3 must be a 4-bit unsigned literal"
msgstr "Argument 3 muss ein vorzeichenloses 4-Bit-Symbol sein"
#: config/rs6000/rs6000.c:11419
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument 3 must be a 2-bit unsigned literal"
-msgstr "Argument 3 muss ein vorzeichenloses 4-Bit-Symbol sein"
+msgstr "Argument 3 muss ein vorzeichenloses 2-Bit-Symbol sein"
#: config/rs6000/rs6000.c:11431
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "argument 3 must be a 1-bit unsigned literal"
-msgstr "Argument 3 muss ein vorzeichenloses 4-Bit-Symbol sein"
+msgstr "Argument 3 muss ein vorzeichenloses 1-Bit-Symbol sein"
#: config/rs6000/rs6000.c:11614
#, gcc-internal-format
@@ -23637,14 +23630,14 @@ msgid "argument 1 of __builtin_spe_predicate is out of range"
msgstr "Argument 1 von __builtin_spe_predicate ist außerhalb des Wertebereiches"
#: config/rs6000/rs6000.c:13716
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s had no type"
-msgstr "interner Fehler - zu viele Schnittstellentypen"
+msgstr "interner Fehler: eingebaute Funktion %s hatte keinen Typ"
#: config/rs6000/rs6000.c:13723
#, gcc-internal-format, gfc-internal-format
msgid "internal error: builtin function %s had an unexpected return type %s"
-msgstr ""
+msgstr "interner Fehler: eingebaute Funktion %s hatte unerwarteten Rückgabetyp %s"
#: config/rs6000/rs6000.c:13736
#, gcc-internal-format, gfc-internal-format
--
1.7.0.4

View File

@ -1,29 +0,0 @@
From 578ce9461ebac7a6ec001c0025e0b854385ec39c Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 6 Apr 2011 16:05:18 +0000
Subject: [PATCH] * gcov-io.c: Use GCC Runtime Library Exception.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172054 138bc75d-0d04-0410-961f-82ee72b054a4
index 6d371cd..37c1c3e 100644
--- a/gcc/gcov-io.c
+++ b/gcc/gcov-io.c
@@ -16,8 +16,13 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING3. If not see
+Under Section 7 of GPL version 3, you are granted additional
+permissions described in the GCC Runtime Library Exception, version
+3.1, as published by the Free Software Foundation.
+
+You should have received a copy of the GNU General Public License and
+a copy of the GCC Runtime Library Exception along with this program;
+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
/* Routines declared in gcov-io.h. This file should be #included by
--
1.7.0.4

View File

@ -1,658 +0,0 @@
From e86c60e8bb9da37bfbef63315f38d5154035392d Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 6 Apr 2011 20:39:20 +0000
Subject: [PATCH] Backported from mainline
2011-04-01 Jakub Jelinek <jakub@redhat.com>
PR middle-end/48335
* expr.c (expand_assignment): Handle all possibilities
if TO_RTX is CONCAT.
* expmed.c (store_bit_field_1): Avoid trying to create
invalid SUBREGs.
(store_split_bit_field): If SUBREG_REG (op0) or
op0 itself has smaller mode than word, return it
for offset 0 and const0_rtx for out-of-bounds stores.
If word is const0_rtx, skip it.
* gcc.c-torture/compile/pr48335-1.c: New test.
* gcc.dg/pr48335-1.c: New test.
* gcc.dg/pr48335-2.c: New test.
* gcc.dg/pr48335-3.c: New test.
* gcc.dg/pr48335-4.c: New test.
* gcc.dg/pr48335-5.c: New test.
* gcc.dg/pr48335-6.c: New test.
* gcc.dg/pr48335-7.c: New test.
* gcc.dg/pr48335-8.c: New test.
* gcc.target/i386/pr48335-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172063 138bc75d-0d04-0410-961f-82ee72b054a4
index b0c1e23..6c35f8e 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -457,8 +457,10 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
&& bitsize == GET_MODE_BITSIZE (fieldmode)
&& (!MEM_P (op0)
? ((GET_MODE_SIZE (fieldmode) >= UNITS_PER_WORD
- || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode))
- && byte_offset % GET_MODE_SIZE (fieldmode) == 0)
+ || GET_MODE_SIZE (GET_MODE (op0)) == GET_MODE_SIZE (fieldmode))
+ && ((GET_MODE (op0) == fieldmode && byte_offset == 0)
+ || validate_subreg (fieldmode, GET_MODE (op0), op0,
+ byte_offset)))
: (! SLOW_UNALIGNED_ACCESS (fieldmode, MEM_ALIGN (op0))
|| (offset * BITS_PER_UNIT % bitsize == 0
&& MEM_ALIGN (op0) % GET_MODE_BITSIZE (fieldmode) == 0))))
@@ -519,6 +521,7 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
rtx insn;
rtx start = get_last_insn ();
rtx arg0 = op0;
+ unsigned HOST_WIDE_INT subreg_off;
/* Get appropriate low part of the value being stored. */
if (CONST_INT_P (value) || REG_P (value))
@@ -542,15 +545,17 @@ store_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
arg0 = SUBREG_REG (op0);
}
- insn = (GEN_FCN (icode)
- (gen_rtx_SUBREG (fieldmode, arg0,
- (bitnum % BITS_PER_WORD) / BITS_PER_UNIT
- + (offset * UNITS_PER_WORD)),
- value));
- if (insn)
+ subreg_off = (bitnum % BITS_PER_WORD) / BITS_PER_UNIT
+ + (offset * UNITS_PER_WORD);
+ if (validate_subreg (fieldmode, GET_MODE (arg0), arg0, subreg_off))
{
- emit_insn (insn);
- return true;
+ insn = (GEN_FCN (icode) (gen_rtx_SUBREG (fieldmode, arg0,
+ subreg_off), value));
+ if (insn)
+ {
+ emit_insn (insn);
+ return true;
+ }
}
delete_insns_since (start);
}
@@ -1106,22 +1111,32 @@ store_split_bit_field (rtx op0, unsigned HOST_WIDE_INT bitsize,
if (GET_CODE (op0) == SUBREG)
{
int word_offset = (SUBREG_BYTE (op0) / UNITS_PER_WORD) + offset;
- word = operand_subword_force (SUBREG_REG (op0), word_offset,
- GET_MODE (SUBREG_REG (op0)));
+ enum machine_mode sub_mode = GET_MODE (SUBREG_REG (op0));
+ if (sub_mode != BLKmode && GET_MODE_SIZE (sub_mode) < UNITS_PER_WORD)
+ word = word_offset ? const0_rtx : op0;
+ else
+ word = operand_subword_force (SUBREG_REG (op0), word_offset,
+ GET_MODE (SUBREG_REG (op0)));
offset = 0;
}
else if (REG_P (op0))
{
- word = operand_subword_force (op0, offset, GET_MODE (op0));
+ enum machine_mode op0_mode = GET_MODE (op0);
+ if (op0_mode != BLKmode && GET_MODE_SIZE (op0_mode) < UNITS_PER_WORD)
+ word = offset ? const0_rtx : op0;
+ else
+ word = operand_subword_force (op0, offset, GET_MODE (op0));
offset = 0;
}
else
word = op0;
/* OFFSET is in UNITs, and UNIT is in bits.
- store_fixed_bit_field wants offset in bytes. */
- store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, thissize,
- thispos, part);
+ store_fixed_bit_field wants offset in bytes. If WORD is const0_rtx,
+ it is just an out-of-bounds access. Ignore it. */
+ if (word != const0_rtx)
+ store_fixed_bit_field (word, offset * unit / BITS_PER_UNIT, thissize,
+ thispos, part);
bitsdone += thissize;
}
}
diff --git a/gcc/expr.c b/gcc/expr.c
index 3295156..1de0ce4 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -4292,16 +4292,47 @@ expand_assignment (tree to, tree from, bool nontemporal)
/* Handle expand_expr of a complex value returning a CONCAT. */
else if (GET_CODE (to_rtx) == CONCAT)
{
- if (COMPLEX_MODE_P (TYPE_MODE (TREE_TYPE (from))))
+ unsigned short mode_bitsize = GET_MODE_BITSIZE (GET_MODE (to_rtx));
+ if (COMPLEX_MODE_P (TYPE_MODE (TREE_TYPE (from)))
+ && bitpos == 0
+ && bitsize == mode_bitsize)
+ result = store_expr (from, to_rtx, false, nontemporal);
+ else if (bitsize == mode_bitsize / 2
+ && (bitpos == 0 || bitpos == mode_bitsize / 2))
+ result = store_expr (from, XEXP (to_rtx, bitpos != 0), false,
+ nontemporal);
+ else if (bitpos + bitsize <= mode_bitsize / 2)
+ result = store_field (XEXP (to_rtx, 0), bitsize, bitpos,
+ mode1, from, TREE_TYPE (tem),
+ get_alias_set (to), nontemporal);
+ else if (bitpos >= mode_bitsize / 2)
+ result = store_field (XEXP (to_rtx, 1), bitsize,
+ bitpos - mode_bitsize / 2, mode1, from,
+ TREE_TYPE (tem), get_alias_set (to),
+ nontemporal);
+ else if (bitpos == 0 && bitsize == mode_bitsize)
{
- gcc_assert (bitpos == 0);
- result = store_expr (from, to_rtx, false, nontemporal);
+ rtx from_rtx;
+ result = expand_normal (from);
+ from_rtx = simplify_gen_subreg (GET_MODE (to_rtx), result,
+ TYPE_MODE (TREE_TYPE (from)), 0);
+ emit_move_insn (XEXP (to_rtx, 0),
+ read_complex_part (from_rtx, false));
+ emit_move_insn (XEXP (to_rtx, 1),
+ read_complex_part (from_rtx, true));
}
else
{
- gcc_assert (bitpos == 0 || bitpos == GET_MODE_BITSIZE (mode1));
- result = store_expr (from, XEXP (to_rtx, bitpos != 0), false,
- nontemporal);
+ rtx temp = assign_stack_temp (GET_MODE (to_rtx),
+ GET_MODE_SIZE (GET_MODE (to_rtx)),
+ 0);
+ write_complex_part (temp, XEXP (to_rtx, 0), false);
+ write_complex_part (temp, XEXP (to_rtx, 1), true);
+ result = store_field (temp, bitsize, bitpos, mode1, from,
+ TREE_TYPE (tem), get_alias_set (to),
+ nontemporal);
+ emit_move_insn (XEXP (to_rtx, 0), read_complex_part (temp, false));
+ emit_move_insn (XEXP (to_rtx, 1), read_complex_part (temp, true));
}
}
else
new file mode 100644
index 0000000..6f81338
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr48335-1.c
@@ -0,0 +1,41 @@
+/* PR middle-end/48335 */
+
+struct S { float d; };
+
+void bar (struct S);
+
+void
+f0 (int x)
+{
+ struct S s = {.d = 0.0f };
+ ((char *) &s.d)[0] = x;
+ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f1 (int x)
+{
+ struct S s = {.d = 0.0f };
+ ((char *) &s.d)[1] = x;
+ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (int x)
+{
+ struct S s = {.d = 0.0f };
+ ((char *) &s.d)[2] = x;
+ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f3 (int x)
+{
+ struct S s = {.d = 0.0f };
+ ((char *) &s.d)[3] = x;
+ s.d *= 7.0;
+ bar (s);
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-1.c b/gcc/testsuite/gcc.dg/pr48335-1.c
new file mode 100644
index 0000000..7a022ea
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-1.c
@@ -0,0 +1,48 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef long long T __attribute__((may_alias));
+
+struct S
+{
+ _Complex float d __attribute__((aligned (8)));
+};
+
+void bar (struct S);
+
+void
+f1 (T x)
+{
+ struct S s;
+ *(T *) &s.d = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (int x)
+{
+ struct S s = { .d = 0.0f };
+ *(char *) &s.d = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f3 (int x)
+{
+ struct S s = { .d = 0.0f };
+ ((char *) &s.d)[2] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f4 (int x, int y)
+{
+ struct S s = { .d = 0.0f };
+ ((char *) &s.d)[y] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-2.c b/gcc/testsuite/gcc.dg/pr48335-2.c
new file mode 100644
index 0000000..a37c079
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-2.c
@@ -0,0 +1,58 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef long long T __attribute__((may_alias, aligned (1)));
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ _Complex float d __attribute__((aligned (8)));
+};
+
+void bar (struct S);
+
+void
+f1 (T x)
+{
+ struct S s;
+ *(T *) ((char *) &s.d + 1) = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (int x)
+{
+ struct S s = { .d = 0.0f };
+ ((U *)((char *) &s.d + 1))[0] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f3 (int x)
+{
+ struct S s = { .d = 0.0f };
+ ((U *)((char *) &s.d + 1))[1] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f4 (int x)
+{
+ struct S s = { .d = 0.0f };
+ ((U *)((char *) &s.d + 1))[2] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f5 (int x)
+{
+ struct S s = { .d = 0.0f };
+ ((U *)((char *) &s.d + 1))[3] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-3.c b/gcc/testsuite/gcc.dg/pr48335-3.c
new file mode 100644
index 0000000..9041f59
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-3.c
@@ -0,0 +1,48 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ double d;
+};
+
+void bar (struct S);
+
+void
+f1 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[0] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[1] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f3 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[2] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f4 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[3] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-4.c b/gcc/testsuite/gcc.dg/pr48335-4.c
new file mode 100644
index 0000000..98e9e1e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-4.c
@@ -0,0 +1,39 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ double d;
+};
+
+void bar (struct S);
+
+void
+f1 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[-1] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[-2] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f3 (int x)
+{
+ struct S s = { .d = 0.0 };
+ ((U *)((char *) &s.d + 1))[5] = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-5.c b/gcc/testsuite/gcc.dg/pr48335-5.c
new file mode 100644
index 0000000..b189548
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-5.c
@@ -0,0 +1,38 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef long long T __attribute__((may_alias));
+
+struct S
+{
+ _Complex float d __attribute__((aligned (8)));
+};
+
+int
+f1 (struct S x)
+{
+ struct S s = x;
+ return *(T *) &s.d;
+}
+
+int
+f2 (struct S x)
+{
+ struct S s = x;
+ return *(char *) &s.d;
+}
+
+int
+f3 (struct S x)
+{
+ struct S s = x;
+ return ((char *) &s.d)[2];
+}
+
+int
+f4 (struct S x, int y)
+{
+ struct S s = x;
+ return ((char *) &s.d)[y];
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-6.c b/gcc/testsuite/gcc.dg/pr48335-6.c
new file mode 100644
index 0000000..769130c
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-6.c
@@ -0,0 +1,46 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef long long T __attribute__((may_alias, aligned (1)));
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ _Complex float d __attribute__((aligned (8)));
+};
+
+T
+f1 (struct S x)
+{
+ struct S s = x;
+ return *(T *) ((char *) &s.d + 1);
+}
+
+int
+f2 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[0];
+}
+
+int
+f3 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[1];
+}
+
+int
+f4 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[2];
+}
+
+int
+f5 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[3];
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-7.c b/gcc/testsuite/gcc.dg/pr48335-7.c
new file mode 100644
index 0000000..ddb15ee
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-7.c
@@ -0,0 +1,38 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ double d;
+};
+
+int
+f1 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[0];
+}
+
+int
+f2 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[1];
+}
+
+int
+f3 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[2];
+}
+
+int
+f4 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[3];
+}
diff --git a/gcc/testsuite/gcc.dg/pr48335-8.c b/gcc/testsuite/gcc.dg/pr48335-8.c
new file mode 100644
index 0000000..bb06c15
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48335-8.c
@@ -0,0 +1,31 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra" } */
+
+typedef short U __attribute__((may_alias, aligned (1)));
+
+struct S
+{
+ double d;
+};
+
+int
+f1 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[-1];
+}
+
+int
+f2 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[-2];
+}
+
+int
+f3 (struct S x)
+{
+ struct S s = x;
+ return ((U *)((char *) &s.d + 1))[5];
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr48335-1.c b/gcc/testsuite/gcc.target/i386/pr48335-1.c
new file mode 100644
index 0000000..08c5284
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr48335-1.c
@@ -0,0 +1,32 @@
+/* PR middle-end/48335 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fno-tree-sra -msse2" } */
+
+#include <emmintrin.h>
+
+typedef __float128 T __attribute__((may_alias));
+
+struct S
+{
+ _Complex double d __attribute__((aligned (16)));
+};
+
+void bar (struct S);
+
+void
+f1 (T x)
+{
+ struct S s;
+ *(T *) &s.d = x;
+ __real__ s.d *= 7.0;
+ bar (s);
+}
+
+void
+f2 (__m128d x)
+{
+ struct S s;
+ _mm_store_pd ((double *) &s.d, x);
+ __real__ s.d *= 7.0;
+ bar (s);
+}
--
1.7.0.4

View File

@ -1,113 +0,0 @@
From da3ed31e2090c6b8236bbc3be69433aca0d445f1 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 6 Apr 2011 20:40:24 +0000
Subject: [PATCH] PR debug/48466
* dwarf2out.c (based_loc_descr): If drap_reg is INVALID_REGNUM, use
as base_reg whatever register reg has been eliminated to, instead
of hardcoding STACK_POINTER_REGNUM.
* gcc.dg/guality/pr36977.c: New test.
* gcc.dg/guality/pr48466.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172064 138bc75d-0d04-0410-961f-82ee72b054a4
index 1e5917c..68d56b0 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -13545,7 +13545,7 @@ based_loc_descr (rtx reg, HOST_WIDE_INT offset,
int base_reg
= DWARF_FRAME_REGNUM ((fde && fde->drap_reg != INVALID_REGNUM)
? HARD_FRAME_POINTER_REGNUM
- : STACK_POINTER_REGNUM);
+ : REGNO (elim));
return new_reg_loc_descr (base_reg, offset);
}
new file mode 100644
index 0000000..3689fae
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr36977.c
@@ -0,0 +1,32 @@
+/* PR debug/36977 */
+/* { dg-do run } */
+/* { dg-options "-g" } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+
+void
+foo ()
+{
+}
+
+int
+main ()
+{
+ struct { char c[100]; } cbig;
+ struct { int i[800]; } ibig;
+ struct { long l[900]; } lbig;
+ struct { float f[200]; } fbig;
+ struct { double d[300]; } dbig;
+ struct { short s[400]; } sbig;
+
+ ibig.i[0] = 55; /* { dg-final { gdb-test 30 "ibig.i\[0\]" "55" } } */
+ ibig.i[100] = 5; /* { dg-final { gdb-test 30 "ibig.i\[100\]" "5" } } */
+ cbig.c[0] = '\0'; /* { dg-final { gdb-test 30 "cbig.c\[0\]" "'\\0'" } } */
+ cbig.c[99] = 'A'; /* { dg-final { gdb-test 30 "cbig.c\[99\]" "'A'" } } */
+ fbig.f[100] = 11.0; /* { dg-final { gdb-test 30 "fbig.f\[100\]" "11" } } */
+ dbig.d[202] = 9.0; /* { dg-final { gdb-test 30 "dbig.d\[202\]" "9" } } */
+ sbig.s[90] = 255; /* { dg-final { gdb-test 30 "sbig.s\[90\]" "255" } } */
+ lbig.l[333] = 999; /* { dg-final { gdb-test 30 "lbig.l\[333\]" "999" } } */
+
+ foo ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/guality/pr48466.c b/gcc/testsuite/gcc.dg/guality/pr48466.c
new file mode 100644
index 0000000..8d5426a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/guality/pr48466.c
@@ -0,0 +1,41 @@
+/* PR debug/48466 */
+/* { dg-do run } */
+/* { dg-options "-g" } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+
+struct S { unsigned int a; unsigned int *b; };
+struct T { struct S a; struct S b; };
+struct U { const char *u; };
+int n[10];
+volatile int v;
+
+struct U
+foo (const char *s)
+{
+ struct U r;
+ r.u = s;
+ return r;
+}
+
+void
+bar (struct T *s, int a, int b)
+{
+ s->a.a = a;
+ s->a.b = &s->a.a;
+ s->b.a = b;
+ s->b.b = &s->b.a;
+}
+
+int
+main ()
+{
+ struct T t;
+ struct U x = foo ("this is x");
+ struct S y, z;
+ y.b = n; /* { dg-final { gdb-test 38 "t.a.a" "17" } } */
+ y.a = 0; /* { dg-final { gdb-test 38 "*t.a.b" "17" } } */
+ bar (&t, 17, 21); /* { dg-final { gdb-test 38 "t.b.a" "21" } } */
+ v++; /* { dg-final { gdb-test 38 "*t.b.b" "21" } } */
+ z = y;
+ return 0;
+}
--
1.7.0.4

View File

@ -1,140 +0,0 @@
From 3329b7447ab817bb0374a689f3b381a5781ed8aa Mon Sep 17 00:00:00 2001
From: jyasskin <jyasskin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 04:50:23 +0000
Subject: [PATCH] Merge r172073 from trunk to the 4.6 release branch, to fix two
ambiguities between extensions and new C++0x functions.
Tested: bootstrap + make check-c++ on x86_64
libstdc++-v3/ChangeLog:
2011-04-06 Jeffrey Yasskin <jyasskin@google.com>
* include/ext/algorithm (is_sorted): In C++0x mode import from
namespace std.
* include/ext/numeric (iota): In C++0x mode import from
namespace std.
* testsuite/ext/is_sorted/cxx0x.cc: New.
* testsuite/ext/iota/cxx0x.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172074 138bc75d-0d04-0410-961f-82ee72b054a4
index 368b591..417a03a 100644
--- a/libstdc++-v3/include/ext/algorithm
+++ b/libstdc++-v3/include/ext/algorithm
@@ -471,6 +471,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
#endif
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ using std::is_sorted;
+#else
// is_sorted, a predicated testing whether a range is sorted in
// nondescending order. This is an extension, not part of the C++
// standard.
@@ -526,6 +529,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return false;
return true;
}
+#endif // __GXX_EXPERIMENTAL_CXX0X__
/**
* @brief Find the median of three values.
diff --git a/libstdc++-v3/include/ext/numeric b/libstdc++-v3/include/ext/numeric
index d4a367f..b389177 100644
--- a/libstdc++-v3/include/ext/numeric
+++ b/libstdc++-v3/include/ext/numeric
@@ -123,6 +123,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
power(_Tp __x, _Integer __n)
{ return __power(__x, __n); }
+#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ using std::iota;
+#else
/**
* This is an SGI extension.
* @ingroup SGIextensions
@@ -141,9 +144,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
while (__first != __last)
*__first++ = __value++;
}
+#endif // __GXX_EXPERIMENTAL_CXX0X__
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#endif
-
diff --git a/libstdc++-v3/testsuite/ext/iota/cxx0x.cc b/libstdc++-v3/testsuite/ext/iota/cxx0x.cc
new file mode 100644
index 0000000..84917ad
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/iota/cxx0x.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <ext/numeric>
+#include <vector>
+
+void foo()
+{
+ std::vector<int> v;
+ iota(v.begin(), v.end(), 0);
+}
diff --git a/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc b/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc
new file mode 100644
index 0000000..518716c
--- /dev/null
+++ b/libstdc++-v3/testsuite/ext/is_sorted/cxx0x.cc
@@ -0,0 +1,28 @@
+// { dg-do compile }
+// { dg-options "-std=gnu++0x" }
+
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <ext/algorithm>
+#include <vector>
+
+void foo()
+{
+ std::vector<int> v;
+ is_sorted(v.begin(), v.end());
+}
--
1.7.0.4

View File

@ -1,154 +0,0 @@
From 354f280d6446d87730bacabf798f88a7aedd1af1 Mon Sep 17 00:00:00 2001
From: abel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 12:07:24 +0000
Subject: [PATCH] Backport from mainline
2011-03-26 Andrey Belevantsev <abel@ispras.ru>
PR rtl-optimization/48144
* sel-sched-ir.c (merge_history_vect): Factor out from ...
(merge_expr_data): ... here.
(av_set_intersect): Rename to av_set_code_motion_filter.
Update all callers. Call merge_history_vect when an
expression is found in both sets.
* sel-sched-ir.h (av_set_code_motion_filter): Add prototype.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172097 138bc75d-0d04-0410-961f-82ee72b054a4
index b88dad1..61f3ffb 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -1564,6 +1564,20 @@ free_history_vect (VEC (expr_history_def, heap) **pvect)
*pvect = NULL;
}
+/* Merge vector FROM to PVECT. */
+static void
+merge_history_vect (VEC (expr_history_def, heap) **pvect,
+ VEC (expr_history_def, heap) *from)
+{
+ expr_history_def *phist;
+ int i;
+
+ /* We keep this vector sorted. */
+ for (i = 0; VEC_iterate (expr_history_def, from, i, phist); i++)
+ insert_in_history_vect (pvect, phist->uid, phist->type,
+ phist->old_expr_vinsn, phist->new_expr_vinsn,
+ phist->spec_ds);
+}
/* Compare two vinsns as rhses if possible and as vinsns otherwise. */
bool
@@ -1796,9 +1810,6 @@ update_speculative_bits (expr_t to, expr_t from, insn_t split_point)
void
merge_expr_data (expr_t to, expr_t from, insn_t split_point)
{
- int i;
- expr_history_def *phist;
-
/* For now, we just set the spec of resulting expr to be minimum of the specs
of merged exprs. */
if (EXPR_SPEC (to) > EXPR_SPEC (from))
@@ -1822,20 +1833,12 @@ merge_expr_data (expr_t to, expr_t from, insn_t split_point)
EXPR_ORIG_SCHED_CYCLE (to) = MIN (EXPR_ORIG_SCHED_CYCLE (to),
EXPR_ORIG_SCHED_CYCLE (from));
- /* We keep this vector sorted. */
- for (i = 0;
- VEC_iterate (expr_history_def, EXPR_HISTORY_OF_CHANGES (from),
- i, phist);
- i++)
- insert_in_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
- phist->uid, phist->type,
- phist->old_expr_vinsn, phist->new_expr_vinsn,
- phist->spec_ds);
-
EXPR_WAS_SUBSTITUTED (to) |= EXPR_WAS_SUBSTITUTED (from);
EXPR_WAS_RENAMED (to) |= EXPR_WAS_RENAMED (from);
EXPR_CANT_MOVE (to) |= EXPR_CANT_MOVE (from);
+ merge_history_vect (&EXPR_HISTORY_OF_CHANGES (to),
+ EXPR_HISTORY_OF_CHANGES (from));
update_target_availability (to, from, split_point);
update_speculative_bits (to, from, split_point);
}
@@ -2328,16 +2331,24 @@ av_set_split_usefulness (av_set_t av, int prob, int all_prob)
}
/* Leave in AVP only those expressions, which are present in AV,
- and return it. */
+ and return it, merging history expressions. */
void
-av_set_intersect (av_set_t *avp, av_set_t av)
+av_set_code_motion_filter (av_set_t *avp, av_set_t av)
{
av_set_iterator i;
- expr_t expr;
+ expr_t expr, expr2;
FOR_EACH_EXPR_1 (expr, i, avp)
- if (av_set_lookup (av, EXPR_VINSN (expr)) == NULL)
+ if ((expr2 = av_set_lookup (av, EXPR_VINSN (expr))) == NULL)
av_set_iter_remove (&i);
+ else
+ /* When updating av sets in bookkeeping blocks, we can add more insns
+ there which will be transformed but the upper av sets will not
+ reflect those transformations. We then fail to undo those
+ when searching for such insns. So merge the history saved
+ in the av set of the block we are processing. */
+ merge_history_vect (&EXPR_HISTORY_OF_CHANGES (expr),
+ EXPR_HISTORY_OF_CHANGES (expr2));
}
diff --git a/gcc/sel-sched-ir.h b/gcc/sel-sched-ir.h
index 1f3dec4..5516da9 100644
--- a/gcc/sel-sched-ir.h
+++ b/gcc/sel-sched-ir.h
@@ -1565,7 +1565,7 @@ extern void av_set_leave_one_nonspec (av_set_t *);
extern expr_t av_set_element (av_set_t, int);
extern void av_set_substract_cond_branches (av_set_t *);
extern void av_set_split_usefulness (av_set_t, int, int);
-extern void av_set_intersect (av_set_t *, av_set_t);
+extern void av_set_code_motion_filter (av_set_t *, av_set_t);
extern void sel_save_haifa_priorities (void);
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index e26ddac..9179249 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -6481,7 +6481,7 @@ code_motion_path_driver (insn_t insn, av_set_t orig_ops, ilist_t path,
/* Filter the orig_ops set. */
if (AV_SET_VALID_P (insn))
- av_set_intersect (&orig_ops, AV_SET (insn));
+ av_set_code_motion_filter (&orig_ops, AV_SET (insn));
/* If no more original ops, return immediately. */
if (!orig_ops)
new file mode 100644
index 0000000..030202d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr48144.c
@@ -0,0 +1,16 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-O -frerun-cse-after-loop -fschedule-insns2 -fselective-scheduling2 -fno-tree-ch -funroll-loops --param=max-sched-extend-regions-iters=2 --param=max-sched-region-blocks=15" } */
+extern void *memcpy(void *dest, const void *src, __SIZE_TYPE__ n);
+
+void bar (void *, void *, void *);
+
+void foo
+ (void *p, char *data, unsigned data_len)
+{
+ int buffer[8];
+ int buf2[8];
+ unsigned i;
+ for (i = 0; i + 8 <= data_len; i += 8)
+ bar (p, buffer, data + i);
+ memcpy (buf2, data + i, data_len);
+}
--
1.7.0.4

View File

@ -1,960 +0,0 @@
From cd0f7d2692283fbf5dfce422da2896a07fc3ea3f Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 16:31:06 +0000
Subject: [PATCH] * de.po: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172104 138bc75d-0d04-0410-961f-82ee72b054a4
index 8f3af8f..a1d1617 100644
--- a/gcc/po/de.po
+++ b/gcc/po/de.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: gcc 4.6.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2011-03-24 16:45+0000\n"
-"PO-Revision-Date: 2011-04-05 19:50+0100\n"
+"PO-Revision-Date: 2011-04-06 19:50+0100\n"
"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -10028,9 +10028,8 @@ msgid "Run only the second compilation of -fcompare-debug"
msgstr "Nur die zweite Kompilierung von -fcompare-debug laufen lassen"
#: common.opt:875
-#, fuzzy
msgid "Perform comparison elimination after register allocation has finished"
-msgstr "Beseitigung globaler gemeinsamer Teilausdrücke nach Registerreservierung durchführen"
+msgstr "Beseitigung von Vergleichen nach Registerreservierung durchführen"
#: common.opt:879
msgid "Do not perform optimizations increasing noticeably stack usage"
@@ -10085,9 +10084,8 @@ msgid "Delete useless null pointer checks"
msgstr "Unnötige Nullzeigerprügungen löschen"
#: common.opt:937
-#, fuzzy
msgid "Try to convert virtual calls to direct ones."
-msgstr "Dem Linker erlauben, PIC-Aufrufe in direkte Aufrufe umzuwandeln"
+msgstr "Versuchen, virtuelle Sprünge in direkte umzuwandeln."
#: common.opt:941
msgid "-fdiagnostics-show-location=[once|every-line]\tHow often to emit source location at the beginning of line-wrapped diagnostics"
@@ -10923,9 +10921,8 @@ msgid "Enable loop invariant motion on trees"
msgstr "Bewegung der Schleifeninvariante auf Bäumen einschalten"
#: common.opt:1924
-#, fuzzy
msgid "Enable loop interchange transforms. Same as -floop-interchange"
-msgstr "Transformation des Loop Interchange einschalten"
+msgstr "Umwandlungen mit Schleifenaustausch einschalten. Das Gleiche wie -floop-interchange"
#: common.opt:1928
msgid "Create canonical induction variables in loops"
@@ -11290,14 +11287,12 @@ msgid "argument must have complex type"
msgstr "Argument muss komplexen Typen haben"
#: go/gofrontend/expressions.cc:7578
-#, fuzzy
msgid "complex arguments must have identical types"
-msgstr "cmplx-Argumente müssen identische Typen haben"
+msgstr "komplexe Argumente müssen identische Typen haben"
#: go/gofrontend/expressions.cc:7580
-#, fuzzy
msgid "complex arguments must have floating-point type"
-msgstr "cmplx-Argumente müssen Gleitkommatypen haben"
+msgstr "komplexe Argumente müssen Gleitkommatyp haben"
#: go/gofrontend/expressions.cc:8560
msgid "expected function"
@@ -11913,9 +11908,9 @@ msgid "redefinition of typedef %q+D with different type"
msgstr "Redefinition des typedef %q+D mit anderem Typ"
#: c-decl.c:1818
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "redefinition of typedef %q+D with variably modified type"
-msgstr "Redefinition des typedef %q+D mit anderem Typ"
+msgstr "Redefinition des typedef %q+D mit variabel modifiziertem Typ"
#: c-decl.c:1825
#, gcc-internal-format
@@ -13292,9 +13287,9 @@ msgid "prefix attributes are ignored for implementations"
msgstr "Präfixattribute werden für Implementierungen ignoriert"
#: c-parser.c:1554
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unexpected attribute"
-msgstr "Attributbitname erwartet"
+msgstr "unerwartetes Attribut"
#: c-parser.c:1596
#, gcc-internal-format
@@ -13643,14 +13638,14 @@ msgid "unknown property attribute"
msgstr "unbekanntes Eigenschaftsattribut"
#: c-parser.c:7964 cp/parser.c:23157
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "missing %<=%> (after %<getter%> attribute)"
-msgstr "fehlendes %<(%> hinter %<#pragma pack%> - ignoriert"
+msgstr "fehlendes %<=%> (hinter Attribut %<getter%>)"
#: c-parser.c:7967 cp/parser.c:23160
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "missing %<=%> (after %<setter%> attribute)"
-msgstr "fehlendes %<(%> hinter %<#pragma pack%> - ignoriert"
+msgstr "fehlendes %<=%> (hinter Attribut %<setter%>)"
#: c-parser.c:7981 cp/parser.c:23174
#, gcc-internal-format
@@ -13698,9 +13693,9 @@ msgid "too many %qs clauses"
msgstr "zu viele %qs-Klauseln"
#: c-parser.c:8481 cp/parser.c:23550
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "collapse argument needs positive constant integer expression"
-msgstr "Vergleich zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlausdrücken"
+msgstr "Collapse-Argument erfordert positiven konstanten Ganzzahlausdruck"
#: c-parser.c:8547 cp/parser.c:23601
#, gcc-internal-format
@@ -13713,9 +13708,9 @@ msgid "expected integer expression"
msgstr "Ganzzahlausdruck erwartet"
#: c-parser.c:8650
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<num_threads%> value must be positive"
-msgstr "%HWert %<num_threads%> muss positiv sein"
+msgstr "Wert von %<num_threads%> muss positiv sein"
#: c-parser.c:8733 cp/parser.c:23753
#, gcc-internal-format
@@ -13728,9 +13723,9 @@ msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
msgstr "Ablauf %<runtime%> akzeptiert keinen Parameter %<chunk_size%>"
#: c-parser.c:8825 cp/parser.c:23841
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
-msgstr "Ablauf %<runtime%> akzeptiert keinen Parameter %<chunk_size%>"
+msgstr "Ablauf %<auto%> akzeptiert keinen Parameter %<chunk_size%>"
#: c-parser.c:8843 cp/parser.c:23857
#, gcc-internal-format
@@ -13770,22 +13765,22 @@ msgstr "Schleifendeklaration oder Initialisierung erwartet"
#: c-parser.c:9363
#, gcc-internal-format
msgid "not enough perfectly nested loops"
-msgstr ""
+msgstr "nicht genügend perfekt geschachtelte Schleifen"
#: c-parser.c:9416 cp/parser.c:24720
#, gcc-internal-format
msgid "collapsed loops not perfectly nested"
-msgstr ""
+msgstr "zusammengelegte Schleifen sind nicht perfekt geschachtelt"
#: c-parser.c:9454 cp/parser.c:24564 cp/parser.c:24602 cp/pt.c:11892
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qD should not be firstprivate"
-msgstr "Schleifenvariable %qs sollte nicht »firstprivate« sein"
+msgstr "Schleifenvariable %qD sollte nicht »firstprivate« sein"
#: c-parser.c:9899
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qD is not a variable"
-msgstr "»%s« bei %C ist keine Variable"
+msgstr "%qD ist keine Variable"
#: c-parser.c:9901 cp/semantics.c:4002
#, gcc-internal-format
@@ -13836,7 +13831,7 @@ msgstr "falsche Benutzung des unvollständigen typedef %qD"
#: c-typeck.c:319
#, gcc-internal-format
msgid "%qT and %qT are in disjoint named address spaces"
-msgstr ""
+msgstr "%qT und %qT sind in disjunkt benannten Adressräumen"
#: c-typeck.c:561 c-typeck.c:586
#, gcc-internal-format
@@ -13864,9 +13859,9 @@ msgid "types are not quite compatible"
msgstr "Typen nicht ganz kompatibel"
#: c-typeck.c:1220
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pointer target types incompatible in C++"
-msgstr "Zeiger auf Elementtyp %qT mit Objekttyp %qT inkompatibel"
+msgstr "Zeiger-Zieltypen sind in C++ inkompatibel"
#: c-typeck.c:1552
#, gcc-internal-format
@@ -13899,9 +13894,9 @@ msgid "dereferencing %<void *%> pointer"
msgstr "Dereferenzierung eines %<void *%>-Zeigers"
#: c-typeck.c:2307
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "subscripted value is neither array nor pointer nor vector"
-msgstr "indizierter Wert ist weder ein Feld noch ein Zeiger"
+msgstr "indizierter Wert ist weder Feld noch Zeiger noch Vektor"
#: c-typeck.c:2319 cp/typeck.c:2854 cp/typeck.c:2948
#, gcc-internal-format
@@ -13914,9 +13909,9 @@ msgid "subscripted value is pointer to function"
msgstr "indizierter Wert ist Zeiger auf Funktion"
#: c-typeck.c:2350
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "index value is out of bound"
-msgstr "Index in Dimension %d ist außerhalb der Grenzen bei %L"
+msgstr "Indexwert ist außerhalb der Grenzen"
#: c-typeck.c:2394
#, gcc-internal-format
@@ -13931,7 +13926,7 @@ msgstr "ISO-C90 verbietet, ein Nicht-L-Wert-Feld zu indizieren"
#: c-typeck.c:2505
#, gcc-internal-format
msgid "enum constant defined here"
-msgstr ""
+msgstr "enum-Konstante hier definiert"
#: c-typeck.c:2736
#, gcc-internal-format
@@ -13947,14 +13942,14 @@ msgid "function called through a non-compatible type"
msgstr "Funktion über nicht kompatiblen Typen aufgerufen"
#: c-typeck.c:2786 c-typeck.c:2840
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "function with qualified void return type called"
-msgstr "Funktionsdefinition hat qualifizierten void-Rückgabetypen"
+msgstr "Funktion mit qualifiziertem void-Rückgabetypen aufgerufen"
#: c-typeck.c:2930
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "too many arguments to method %qE"
-msgstr "zu viele Argumente für Funktion %qE"
+msgstr "zu viele Argumente für Methode %qE"
#: c-typeck.c:2933 c-family/c-common.c:8039
#, gcc-internal-format
@@ -13962,9 +13957,9 @@ msgid "too many arguments to function %qE"
msgstr "zu viele Argumente für Funktion %qE"
#: c-typeck.c:2936 c-typeck.c:3170 cp/decl2.c:4169 cp/typeck.c:3304
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "declared here"
-msgstr "%q+D hier deklariert"
+msgstr "hier deklariert"
#: c-typeck.c:2971
#, gcc-internal-format, gfc-internal-format
@@ -14027,9 +14022,9 @@ msgid "passing argument %d of %qE as signed due to prototype"
msgstr "Übergabe des Arguments %d von %qE als vorzeichenbehaftet aufgrund des Prototyps"
#: c-typeck.c:3135 cp/call.c:5666
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "implicit conversion from %qT to %qT when passing argument to function"
-msgstr "Anfrage zur impliziten für Umwandlung von %qT in %qT ist in C++ nicht erlaubt"
+msgstr "implizite Umwandlung von %qT in %qT bei Übergabe von Argument an Funktion"
#: c-typeck.c:3168 c-family/c-common.c:8877 c-family/c-common.c:8926
#, gcc-internal-format
@@ -14042,9 +14037,9 @@ msgid "comparison with string literal results in unspecified behavior"
msgstr "Vergleich mit Zeichenkettenliteral führt zu unspezifiziertem Verhalten"
#: c-typeck.c:3269
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "comparison between %qT and %qT"
-msgstr "Vergleich zwischen %q#T und %q#T"
+msgstr "Vergleich zwischen %qT und %qT"
#: c-typeck.c:3321
#, gcc-internal-format
@@ -14069,12 +14064,12 @@ msgstr "Argument falschen Typs für unäres Ausrufungszeichen"
#: c-typeck.c:3578
#, gcc-internal-format
msgid "increment of enumeration value is invalid in C++"
-msgstr ""
+msgstr "Schrittweite von Aufzählungswerten (enum) ist in C++ ungültig"
#: c-typeck.c:3581
#, gcc-internal-format
msgid "decrement of enumeration value is invalid in C++"
-msgstr ""
+msgstr "Verringerung von Aufzählungswerten (enum) ist in C++ ungültig"
#: c-typeck.c:3594
#, gcc-internal-format
@@ -14102,9 +14097,9 @@ msgid "decrement of pointer to unknown structure"
msgstr "Verminderung eines Zeigers auf unbekannte Struktur"
#: c-typeck.c:3722
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "taking address of expression of type %<void%>"
-msgstr "statischer Zugriff auf Objekt des Typs %<id%>"
+msgstr "Adresse des Ausdrucks des Typs %<void%> wird genommen"
#: c-typeck.c:3892 c-family/c-common.c:8633
#, gcc-internal-format
@@ -14152,9 +14147,9 @@ msgid "non-lvalue array in conditional expression"
msgstr "Nicht-L-Wert-Feld in bedingtem Ausdruck"
#: c-typeck.c:4127 cp/call.c:4337
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "implicit conversion from %qT to %qT to match other result of conditional"
-msgstr "Anfrage zur impliziten für Umwandlung von %qT in %qT ist in C++ nicht erlaubt"
+msgstr "implizite Umwandlung von %qT in %qT um an anderes Ergebnis von Bedingung anzupassen"
#: c-typeck.c:4201
#, gcc-internal-format
@@ -14162,9 +14157,9 @@ msgid "ISO C forbids conditional expr with only one void side"
msgstr "ISO-C verbietet bedingten Ausdruck mit nur einer void-Seite"
#: c-typeck.c:4218
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pointers to disjoint address spaces used in conditional expression"
-msgstr "Zeigertyp passt nicht in bedingtem Ausdruck"
+msgstr "Zeiger auf disjunkte Adressräume in bedingtem Ausdruck verwendet"
#: c-typeck.c:4226 c-typeck.c:4235
#, gcc-internal-format
@@ -14192,19 +14187,17 @@ msgid "left-hand operand of comma expression has no effect"
msgstr "linker Operand des Komma-Ausdrucks hat keinen Effekt"
#: c-typeck.c:4446
-#, fuzzy
msgid "cast adds %q#v qualifier to function type"
-msgstr "Typkonvertierung fügt neue Typqualifizierer zu Funktionstyp hinzu"
+msgstr "Typumwandlung fügt Qualifizierer %q#v zu Funktionstyp hinzu"
#: c-typeck.c:4452
-#, fuzzy
msgid "cast discards %q#v qualifier from pointer target type"
-msgstr "Typkonvertierung streicht Qualifizierer von Zeiger-Zieltyp"
+msgstr "Typumwandlung streicht Qualifizierer %q#v von Zeiger-Zieltyp"
#: c-typeck.c:4487
#, gcc-internal-format
msgid "to be safe all intermediate pointers in cast from %qT to %qT must be %<const%> qualified"
-msgstr ""
+msgstr "zur Sicherheit müssen alle vorübergehenden Zeiger in Umwandlung von %qT in %qT mit %<const%> qualifiziert sein"
#: c-typeck.c:4524
#, gcc-internal-format
@@ -14279,12 +14272,12 @@ msgstr "ISO-C verbietet Konvertierung von Objektzeigertypen in Funktionszeigerty
#: c-typeck.c:4769
#, gcc-internal-format
msgid "defining a type in a cast is invalid in C++"
-msgstr ""
+msgstr "Definition eines Typs in einer Umwandlung ist in C++ ungültig"
#: c-typeck.c:4908 c-typeck.c:5205
#, gcc-internal-format
msgid "enum conversion in assignment is invalid in C++"
-msgstr ""
+msgstr "enum-Umwandlung in Zuweisung ist in C++ ungültig"
#. This macro is used to emit diagnostics to ensure that all format
#. strings are complete sentences, visible to gettext and checked at
@@ -14294,24 +14287,24 @@ msgstr ""
#. compile time. It is the same as WARN_FOR_ASSIGNMENT but with an
#. extra parameter to enumerate qualifiers.
#: c-typeck.c:5113 c-typeck.c:5143 c-typeck.c:5670
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "expected %qT but argument is of type %qT"
-msgstr "format %q.*s erwartet Typ %<%T%s%>, aber Argument %d hat Typ %qT"
+msgstr "%qT erwartet, aber Argument hat Typ %qT"
#: c-typeck.c:5203
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enum conversion when passing argument %d of %qE is invalid in C++"
-msgstr "Zeigerziele bei Übergabe des Arguments %d von %qE unterscheiden sich im Vorzeichenbesitz"
+msgstr "Enum-Umwandlung bei Übergabe des Arguments %d von %qE ist in C++ ungültig"
#: c-typeck.c:5207 c-typeck.c:7762
#, gcc-internal-format
msgid "enum conversion in initialization is invalid in C++"
-msgstr ""
+msgstr "enum-Umwandlung in Initialisierung ist in C++ ungültig"
#: c-typeck.c:5209
#, gcc-internal-format
msgid "enum conversion in return is invalid in C++"
-msgstr ""
+msgstr "enum-Umwandlung in Rückgabe ist in C++ ungültig"
#: c-typeck.c:5238
#, gcc-internal-format
@@ -14319,44 +14312,36 @@ msgid "cannot pass rvalue to reference parameter"
msgstr "R-Wert kann nicht an Referenzparameter übergeben werden"
#: c-typeck.c:5368 c-typeck.c:5591
-#, fuzzy
msgid "passing argument %d of %qE makes %q#v qualified function pointer from unqualified"
-msgstr "Übergabe des Arguments %d von %qE erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger"
+msgstr "Übergabe des Arguments %d von %qE erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger %q#v"
#: c-typeck.c:5371 c-typeck.c:5594
-#, fuzzy
msgid "assignment makes %q#v qualified function pointer from unqualified"
-msgstr "Zuweisung erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger"
+msgstr "Zuweisung erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger %q#v"
#: c-typeck.c:5374 c-typeck.c:5596
-#, fuzzy
msgid "initialization makes %q#v qualified function pointer from unqualified"
-msgstr "Initialisierung erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger"
+msgstr "Initialisierung erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger %q#v"
#: c-typeck.c:5377 c-typeck.c:5598
-#, fuzzy
msgid "return makes %q#v qualified function pointer from unqualified"
-msgstr "return erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger"
+msgstr "return erzeugt aus unqualifiziertem einen qualifizierten Funktionszeiger %q#v"
#: c-typeck.c:5384 c-typeck.c:5554
-#, fuzzy
msgid "passing argument %d of %qE discards %qv qualifier from pointer target type"
-msgstr "Übergabe des Arguments %d von %qE entfernt Kennzeichner von Zeiger-Ziel-Typ"
+msgstr "Übergabe des Arguments %d von %qE entfernt Kennzeichner %qv von Zeiger-Ziel-Typ"
#: c-typeck.c:5386 c-typeck.c:5556
-#, fuzzy
msgid "assignment discards %qv qualifier from pointer target type"
-msgstr "Zuweisung streicht Qualifizierer von Zeiger-Zieltyp"
+msgstr "Zuweisung streicht Qualifizierer %qv von Zeiger-Zieltyp"
#: c-typeck.c:5388 c-typeck.c:5558
-#, fuzzy
msgid "initialization discards %qv qualifier from pointer target type"
-msgstr "Initialisierung streicht Qualifizierer von Zeiger-Zieltyp"
+msgstr "Initialisierung streicht Qualifizierer %qv von Zeiger-Zieltyp"
#: c-typeck.c:5390 c-typeck.c:5560
-#, fuzzy
msgid "return discards %qv qualifier from pointer target type"
-msgstr "return streicht Qualifizierer von Zeiger-Zieltyp"
+msgstr "return streicht Qualifizierer %qv von Zeiger-Zieltyp"
#: c-typeck.c:5399
#, gcc-internal-format
@@ -14369,24 +14354,24 @@ msgid "request for implicit conversion from %qT to %qT not permitted in C++"
msgstr "Anfrage zur impliziten für Umwandlung von %qT in %qT ist in C++ nicht erlaubt"
#: c-typeck.c:5466
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "passing argument %d of %qE from pointer to non-enclosed address space"
-msgstr "Übergabe des Arguments %d von %qE von inkompatiblem Zeigertyp"
+msgstr "Übergabe des Arguments %d von %qE von Zeiger auf nicht eingeschlossenen Adressbereich"
#: c-typeck.c:5470
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assignment from pointer to non-enclosed address space"
-msgstr "Typkonvertierung von Zeiger auf Ganzzahl anderer Breite"
+msgstr "Zuweisung von Zeiger auf nicht eingeschlossenen Adressbereich"
#: c-typeck.c:5474
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "initialization from pointer to non-enclosed address space"
-msgstr "Initialisierung von inkompatiblem Zeigertyp"
+msgstr "Initialisierung von Zeiger auf nicht enthaltenen Adressraum"
#: c-typeck.c:5478
#, gcc-internal-format
msgid "return from pointer to non-enclosed address space"
-msgstr ""
+msgstr "Rückgabe von Pointer auf nicht enthaltenen Adressraum"
#: c-typeck.c:5496
#, gcc-internal-format
@@ -14521,19 +14506,19 @@ msgid "incompatible type for argument %d of %qE"
msgstr "Inkompatibler Typ für Argument %d von %qE"
#: c-typeck.c:5673
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "incompatible types when assigning to type %qT from type %qT"
-msgstr "unverträgliche Typen in Zuweisung von %qT an %qT"
+msgstr "unverträgliche Typen bei Zuweisung an Typ %qT von Typ %qT"
#: c-typeck.c:5678
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "incompatible types when initializing type %qT using type %qT"
-msgstr "inkompatible Typen in Initialisierung"
+msgstr "inkompatible Typen bei Initialisierung von Typ %qT mit Typ %qT"
#: c-typeck.c:5683
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "incompatible types when returning type %qT but %qT was expected"
-msgstr "unverträgliche Typen in Zuweisung von %qT an %qT"
+msgstr "unverträgliche Typen bei Rückgabe von Typ %qT, aber %qT wurde erwartet"
#: c-typeck.c:5747
#, gcc-internal-format
@@ -14561,14 +14546,14 @@ msgid "char-array initialized from wide string"
msgstr "char-Feld mit wide-Zeichenkette initialisiert"
#: c-typeck.c:6062
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "wide character array initialized from non-wide string"
-msgstr "wchar_t-Feld mit Nicht-wide-Zeichenkette initialisiert"
+msgstr "Feld von wide character mit Nicht-wide-Zeichenkette initialisiert"
#: c-typeck.c:6068
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "wide character array initialized from incompatible wide string"
-msgstr "wchar_t-Feld mit Nicht-wide-Zeichenkette initialisiert"
+msgstr "Feld von wide character mit unverträglicher wide-Zeichenkette initialisiert"
#: c-typeck.c:6102
#, gcc-internal-format
@@ -14587,7 +14572,7 @@ msgid "initializer element is not constant"
msgstr "Initialisierungselement ist nicht konstant"
#: c-typeck.c:6226 c-typeck.c:6272 c-typeck.c:7745
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "initializer element is not a constant expression"
msgstr "Initialisierungselement ist nicht konstant"
@@ -14657,9 +14642,9 @@ msgid "array index in initializer not of integer type"
msgstr "Feldindex in Initialisierung hat nicht Ganzzahltyp"
#: c-typeck.c:7148 c-typeck.c:7157
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "array index in initializer is not an integer constant expression"
-msgstr "Feldindex in Initialisierung hat nicht Ganzzahltyp"
+msgstr "Feldindex in Initialisierung ist kein konstanter Ganzzahlausdruck"
#: c-typeck.c:7162 c-typeck.c:7164
#, gcc-internal-format
@@ -14777,9 +14762,9 @@ msgid "%<long%> switch expression not converted to %<int%> in ISO C"
msgstr "%<long%> switch-Ausdruck nicht nach »int« konvertiert in ISO C"
#: c-typeck.c:8817 c-typeck.c:8825
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "case label is not an integer constant expression"
-msgstr "Größe des Feldes ist kein konstanter Ganzzahlausdruck"
+msgstr "»case«-Marke ist kein konstanter Ganzzahlausdruck"
#: c-typeck.c:8831 cp/parser.c:8261
#, gcc-internal-format
@@ -14792,9 +14777,9 @@ msgid "%<default%> label not within a switch statement"
msgstr "%<default%>-Marke nicht innerhalb einer switch-Anweisung"
#: c-typeck.c:8916 cp/parser.c:8557
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "suggest explicit braces to avoid ambiguous %<else%>"
-msgstr "%Hes wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeutiges %<else%> zu vermeiden"
+msgstr "es wird empfohlen, explizite geschweifte Klammern zu setzen, um mehrdeutiges %<else%> zu vermeiden"
#: c-typeck.c:9025 cp/cp-gimplify.c:91 cp/parser.c:9149
#, gcc-internal-format
@@ -14857,9 +14842,9 @@ msgid "the comparison will always evaluate as %<true%> for the address of %qD wi
msgstr ""
#: c-typeck.c:9830 c-typeck.c:9905
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "comparison of pointers to disjoint address spaces"
-msgstr "in Vergleich verschiedener Zeigertypen fehlt Typkonvertierung"
+msgstr "Vergleich von Zeigern auf disjunkte Adressräume"
#: c-typeck.c:9837 c-typeck.c:9843
#, gcc-internal-format
@@ -14887,9 +14872,9 @@ msgid "ISO C forbids ordered comparisons of pointers to functions"
msgstr "ISO-C verbietet geordnete Vergleiche zwischen Zeigern auf Funktionen"
#: c-typeck.c:9900
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "ordered comparison of pointer with null pointer"
-msgstr "geordneter Vergleich von Zeiger mit Ganzzahlnull"
+msgstr "geordneter Vergleich von Zeiger mit Null-Zeiger"
#: c-typeck.c:9923 c-typeck.c:9926 c-typeck.c:9933 c-typeck.c:9936
#, gcc-internal-format
@@ -14897,9 +14882,9 @@ msgid "ordered comparison of pointer with integer zero"
msgstr "geordneter Vergleich von Zeiger mit Ganzzahlnull"
#: c-typeck.c:9980 cp/typeck.c:4251
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "implicit conversion from %qT to %qT to match other operand of binary expression"
-msgstr "Anfrage zur impliziten für Umwandlung von %qT in %qT ist in C++ nicht erlaubt"
+msgstr "implizite Umwandlung von %qT in %qT zur Anpassung an anderen Operanden des Binärausdrucks"
#: c-typeck.c:10262
#, gcc-internal-format
@@ -14972,14 +14957,14 @@ msgid "size of variable %q+D is too large"
msgstr "Größe der Variablen %q+D ist zu hoch"
#: cfgexpand.c:4025
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "stack protector not protecting local variables: variable length buffer"
-msgstr "Lokale Variablen werden nicht geschützt: Puffer variabler Größe"
+msgstr "Stack-Schutz schützt nicht lokale Variablen: Puffer variabler Größe"
#: cfgexpand.c:4029
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "stack protector not protecting function: all local arrays are less than %d bytes long"
-msgstr "Funktion wird nicht geschützt: Kein Puffer mit mindestens %d Bytes"
+msgstr "Stack-Schutz schützt nicht Funktion: Alle lokalen Felder sind kleiner als %d Bytes"
#: cfghooks.c:110
#, gcc-internal-format, gfc-internal-format
@@ -15157,32 +15142,32 @@ msgid "bb %d do not belong to loop %d"
msgstr "BB %d gehört nicht zur Schleife %d"
#: cfgloop.c:1363
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s header does not have exactly 2 entries"
msgstr "Kopf der Schleife %d hat nicht genau 2 Einträge"
#: cfgloop.c:1370
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s latch does not have exactly 1 successor"
msgstr "Falle der Schleife %d hat nicht genau einen Nachfolger"
#: cfgloop.c:1375
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s latch does not have header as successor"
msgstr "Falle der Schleife %d hat nicht den Kopf als Nachfolger"
#: cfgloop.c:1380
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s latch does not belong directly to it"
msgstr "Falle der Schleife %d gehört nicht direkt zu ihr"
#: cfgloop.c:1386
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s header does not belong directly to it"
msgstr "Kopf der Schleife %d gehört nicht direkt zu ihr"
#: cfgloop.c:1392
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "loop %d%'s latch is marked as part of irreducible region"
msgstr "Falle der Schleife %d ist als Teil einer irreduziblen Region markiert"
@@ -15222,17 +15207,17 @@ msgid "nonempty exits list of loop %d, but exits are not recorded"
msgstr "Nichtleere Ausgangsliste der Schleife %d, aber Ausgänge werden nicht aufgezeichnet"
#: cfgloop.c:1514
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "exit %d->%d not recorded"
msgstr "Ausgang %d->%d nicht aufgezeichnet"
#: cfgloop.c:1532
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "wrong list of exited loops for edge %d->%d"
msgstr "Falsche Liste der beendeten Schleifen für Kante %d->%d"
#: cfgloop.c:1541
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "too many loop exits recorded"
msgstr "Zu viele Schleifenausgänge aufgezeichnet"
@@ -15277,9 +15262,9 @@ msgid "missing REG_EH_REGION note in the end of bb %i"
msgstr "fehlender Vermerk von REG_EH_REGION am Ende vom bb %i"
#: cfgrtl.c:1932
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too many eh edges %i"
-msgstr "zu viele abgehende Zweig-Kanten vom bb %i"
+msgstr "zu viele eh-Kanten %i"
#: cfgrtl.c:1940
#, gcc-internal-format, gfc-internal-format
@@ -15292,9 +15277,9 @@ msgid "fallthru edge after unconditional jump %i"
msgstr "Fallthru-Kante nach unbedingtem Sprung %i"
#: cfgrtl.c:1950
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "wrong number of branch edges after unconditional jump %i"
-msgstr "falscher Betrag der Zweig-Kanten nach unbedingtem Sprung %i"
+msgstr "falsche Anzahl der Zweig-Kanten nach unbedingtem Sprung %i"
#: cfgrtl.c:1957
#, gcc-internal-format, gfc-internal-format
@@ -15402,9 +15387,9 @@ msgid "caller edge frequency is too large"
msgstr "Rufer-Kantenhäufigkeit ist zu groß"
#: cgraphunit.c:435
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "caller edge frequency %i does not match BB frequency %i"
-msgstr "Rufer-Kantenhäufigkeit ist zu groß"
+msgstr "Rufer-Kantenhäufigkeit %i passt nicht zur BB-Häufigkeit %i"
#: cgraphunit.c:471
#, gcc-internal-format, gfc-internal-format
@@ -15412,34 +15397,34 @@ msgid "aux field set for edge %s->%s"
msgstr "Aux-Feld für Kante %s->%s gesetzt"
#: cgraphunit.c:478
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "execution count is negative"
msgstr "Ausführungszähler ist negativ"
#: cgraphunit.c:483
#, gcc-internal-format
msgid "externally visible inline clone"
-msgstr ""
+msgstr "extern sichtbare Inline-Kopie"
#: cgraphunit.c:488
#, gcc-internal-format
msgid "inline clone with address taken"
-msgstr ""
+msgstr "Inline-Kopie mit Adresse genommen"
#: cgraphunit.c:493
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "inline clone is needed"
-msgstr "inlined_to-Zeiger ist falsch"
+msgstr "Inline-Kopie erforderlich"
#: cgraphunit.c:500
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "aux field set for indirect edge from %s"
-msgstr "Aux-Feld für Kante %s->%s gesetzt"
+msgstr "Aux-Feld für indirekte Kante %s von gesetzt"
#: cgraphunit.c:507
#, gcc-internal-format, gfc-internal-format
msgid "An indirect edge from %s is not marked as indirect or has associated indirect_info, the corresponding statement is: "
-msgstr ""
+msgstr "Eine indirekte Kante von %s ist nicht als indirekt markiert und hat keine zugeordnete indirect_info, die zugehörige Anweisung ist:"
#: cgraphunit.c:524
#, gcc-internal-format
@@ -15474,42 +15459,42 @@ msgstr "Knoten in cgraph_hash nicht gefunden"
#: cgraphunit.c:568
#, gcc-internal-format
msgid "node has wrong clone_of"
-msgstr ""
+msgstr "Knoten hat falsches clone_of"
#: cgraphunit.c:580
#, gcc-internal-format
msgid "node has wrong clone list"
-msgstr ""
+msgstr "Knoten hat falsche Clone-Liste"
#: cgraphunit.c:586
#, gcc-internal-format
msgid "node is in clone list but it is not clone"
-msgstr ""
+msgstr "Knoten ist in Clone-Liste, aber es ist kein Clone"
#: cgraphunit.c:591
#, gcc-internal-format
msgid "node has wrong prev_clone pointer"
-msgstr ""
+msgstr "Knoten hat falschen Zeiger prev_clone"
#: cgraphunit.c:596
#, gcc-internal-format
msgid "double linked list of clones corrupted"
-msgstr ""
+msgstr "doppelt verkettete Liste des Clones ist beschädigt"
#: cgraphunit.c:605
#, gcc-internal-format
msgid "non-DECL_ONE_ONLY node in a same_comdat_group list"
-msgstr ""
+msgstr "Nicht-DECL_ONE_ONLY-Knoten in einer same_comdat_group-Liste"
#: cgraphunit.c:610
#, gcc-internal-format
msgid "node is alone in a comdat group"
-msgstr ""
+msgstr "Knoten ist allein in einer Comdat-Gruppe"
#: cgraphunit.c:617
#, gcc-internal-format
msgid "same_comdat_group is not a circular list"
-msgstr ""
+msgstr "same_comdat_group ist keine ringförmige Liste"
#: cgraphunit.c:652
#, gcc-internal-format
@@ -15517,9 +15502,9 @@ msgid "shared call_stmt:"
msgstr "Gemeinsam genutztes call_stmt:"
#: cgraphunit.c:662
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "edge points to same body alias:"
-msgstr "Kante zeigt auf falsche Deklaration:"
+msgstr "Kante zeigt auf selben Körper-Alias:"
#: cgraphunit.c:674
#, gcc-internal-format
@@ -15529,12 +15514,12 @@ msgstr "Kante zeigt auf falsche Deklaration:"
#: cgraphunit.c:685
#, gcc-internal-format
msgid "a call to thunk improperly represented in the call graph:"
-msgstr ""
+msgstr "ein Aufruf von Thunk ist im Aufrufgraphen falsch repräsentiert:"
#: cgraphunit.c:693
#, gcc-internal-format
msgid "an indirect edge with unknown callee corresponding to a call_stmt with a known declaration:"
-msgstr ""
+msgstr "eine indirekte Kante mit unbekanntem Aufrufziel korrespondiert mit einem call_stmt mit einer unbekannten Deklaration:"
#: cgraphunit.c:703
#, gcc-internal-format
@@ -15547,9 +15532,9 @@ msgid "edge %s->%s has no corresponding call_stmt"
msgstr "Kante %s->%s hat keine passende call_stmt"
#: cgraphunit.c:731
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "an indirect edge from %s has no corresponding call_stmt"
-msgstr "Kante %s->%s hat keine passende call_stmt"
+msgstr "eine indirekte Kante von %s hat kein passendes call_stmt"
#: cgraphunit.c:742
#, gcc-internal-format
@@ -15557,24 +15542,24 @@ msgid "verify_cgraph_node failed"
msgstr "verify_cgraph gescheitert"
#: cgraphunit.c:817
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute should be accompanied with an %<alias%> attribute"
-msgstr "Attribut %s steht mit Attribut %s bei %L in Konflikt"
+msgstr "Attribut %<weakref%> sollte von Attribut %<alias%> begleitet werden"
#: cgraphunit.c:872 cgraphunit.c:909
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<externally_visible%> attribute have effect only on public objects"
-msgstr "%J Attribut %<externally_visible%> wirkt sich nur auf öffentliche Objekte aus"
+msgstr "Attribut %<externally_visible%> wirkt sich nur auf öffentliche Objekte aus"
#: cgraphunit.c:881
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute ignored because function is defined"
-msgstr "Attribut %qE ignoriert, da %qT bereits definiert ist"
+msgstr "Attribut %<weakref%> ignoriert, da Funktion bereits definiert ist"
#: cgraphunit.c:919
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<weakref%> attribute ignored because variable is initialized"
-msgstr "Attribut %qE ignoriert, da %qT bereits definiert ist"
+msgstr "Attribut %<weakref%> ignoriert, da Variable bereits initialisiert ist"
#: cgraphunit.c:1167 cgraphunit.c:1193
#, gcc-internal-format
@@ -15582,14 +15567,14 @@ msgid "failed to reclaim unneeded function"
msgstr "Zurückfordern der nicht genötigten Funktion gescheitert"
#: cgraphunit.c:1931
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "nodes with unreleased memory found"
-msgstr "Knoten ohne freigegebenen Speicher gefunden"
+msgstr "Knoten mit nicht freigegebenem Speicher gefunden"
#: collect2.c:1489 opts.c:801
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "LTO support has not been enabled in this configuration"
-msgstr "-m64 wird in dieser Konfiguration nicht unterstützt"
+msgstr "LTO-Unterstützung wurde in dieser Konfiguration nicht aktiviert"
#: collect2.c:1577
#, gcc-internal-format, gfc-internal-format
@@ -15627,7 +15612,7 @@ msgid "conversion to incomplete type"
msgstr "Konvertierung in unvollständigen Typen"
#: convert.c:852 convert.c:928
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t convert between vector values of different size"
msgstr "zwischen Vektorwerten verschiedener Größen kann nicht konvertiert werden"
@@ -15647,9 +15632,9 @@ msgid "aggregate value used where a complex was expected"
msgstr "zusammengesetzer Wert verwendet, wo »complex« erwartet wurde"
#: convert.c:934
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t convert value to a vector"
-msgstr "Wert kann nicht in Vektor konvertiert werden"
+msgstr "Wert kann nicht in einen Vektor umgewandelt werden"
#: convert.c:973
#, gcc-internal-format
@@ -15692,14 +15677,14 @@ msgid "%qs has overflowed"
msgstr "%qs übergelaufen"
#: coverage.c:349
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "no coverage for function %qE found"
-msgstr "keine Überdeckung für Funktion %qs gefunden"
+msgstr "keine Überdeckung für Funktion %qE gefunden"
#: coverage.c:364
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "coverage mismatch for function %qE while reading counter %qs"
-msgstr "Überdeckung passt nicht für Funktion %qs beim Lesen des Zählers %qs"
+msgstr "Überdeckung passt nicht für Funktion %qE beim Lesen des Zählers %qs"
#: coverage.c:378
#, fuzzy, gcc-internal-format
--
1.7.0.4

View File

@ -1,281 +0,0 @@
From 1e8081c83aa5101ccca523ce8448282bece491ff Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 18:05:08 +0000
Subject: [PATCH] PR debug/48343
* combine.c (combine_instructions): Add last_combined_insn,
update it if insn is after it, pass it to all try_combine
calls.
(try_combine): Add last_combined_insn parameter, pass it instead of
i3 to propagate_for_debug.
* gcc.dg/torture/pr48343.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172110 138bc75d-0d04-0410-961f-82ee72b054a4
index f9d33b3..5f179c6 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -387,7 +387,7 @@ static int cant_combine_insn_p (rtx);
static int can_combine_p (rtx, rtx, rtx, rtx, rtx, rtx, rtx *, rtx *);
static int combinable_i3pat (rtx, rtx *, rtx, rtx, rtx, int, int, rtx *);
static int contains_muldiv (rtx);
-static rtx try_combine (rtx, rtx, rtx, rtx, int *);
+static rtx try_combine (rtx, rtx, rtx, rtx, int *, rtx);
static void undo_all (void);
static void undo_commit (void);
static rtx *find_split_point (rtx *, rtx, bool);
@@ -1159,6 +1159,7 @@ combine_instructions (rtx f, unsigned int nregs)
FOR_EACH_BB (this_basic_block)
{
+ rtx last_combined_insn = NULL_RTX;
optimize_this_for_speed_p = optimize_bb_for_speed_p (this_basic_block);
last_call_luid = 0;
mem_last_set = -1;
@@ -1177,6 +1178,10 @@ combine_instructions (rtx f, unsigned int nregs)
next = 0;
if (NONDEBUG_INSN_P (insn))
{
+ if (last_combined_insn == NULL_RTX
+ || DF_INSN_LUID (last_combined_insn) < DF_INSN_LUID (insn))
+ last_combined_insn = insn;
+
/* See if we know about function return values before this
insn based upon SUBREG flags. */
check_promoted_subreg (insn, PATTERN (insn));
@@ -1190,7 +1195,8 @@ combine_instructions (rtx f, unsigned int nregs)
for (links = LOG_LINKS (insn); links; links = XEXP (links, 1))
if ((next = try_combine (insn, XEXP (links, 0), NULL_RTX,
- NULL_RTX, &new_direct_jump_p)) != 0)
+ NULL_RTX, &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
/* Try each sequence of three linked insns ending with this one. */
@@ -1208,8 +1214,8 @@ combine_instructions (rtx f, unsigned int nregs)
nextlinks;
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, link, XEXP (nextlinks, 0),
- NULL_RTX,
- &new_direct_jump_p)) != 0)
+ NULL_RTX, &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
}
@@ -1227,14 +1233,15 @@ combine_instructions (rtx f, unsigned int nregs)
&& sets_cc0_p (PATTERN (prev)))
{
if ((next = try_combine (insn, prev, NULL_RTX, NULL_RTX,
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
for (nextlinks = LOG_LINKS (prev); nextlinks;
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, prev, XEXP (nextlinks, 0),
- NULL_RTX,
- &new_direct_jump_p)) != 0)
+ NULL_RTX, &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
}
@@ -1247,14 +1254,15 @@ combine_instructions (rtx f, unsigned int nregs)
&& reg_mentioned_p (cc0_rtx, SET_SRC (PATTERN (insn))))
{
if ((next = try_combine (insn, prev, NULL_RTX, NULL_RTX,
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
for (nextlinks = LOG_LINKS (prev); nextlinks;
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, prev, XEXP (nextlinks, 0),
- NULL_RTX,
- &new_direct_jump_p)) != 0)
+ NULL_RTX, &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
}
@@ -1269,8 +1277,8 @@ combine_instructions (rtx f, unsigned int nregs)
&& NONJUMP_INSN_P (prev)
&& sets_cc0_p (PATTERN (prev))
&& (next = try_combine (insn, XEXP (links, 0),
- prev, NULL_RTX,
- &new_direct_jump_p)) != 0)
+ prev, NULL_RTX, &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
#endif
@@ -1281,7 +1289,8 @@ combine_instructions (rtx f, unsigned int nregs)
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, XEXP (links, 0),
XEXP (nextlinks, 0), NULL_RTX,
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
/* Try four-instruction combinations. */
@@ -1305,14 +1314,16 @@ combine_instructions (rtx f, unsigned int nregs)
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, link, link1,
XEXP (nextlinks, 0),
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
/* I0, I1 -> I2, I2 -> I3. */
for (nextlinks = XEXP (next1, 1); nextlinks;
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, link, link1,
XEXP (nextlinks, 0),
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
}
@@ -1326,14 +1337,16 @@ combine_instructions (rtx f, unsigned int nregs)
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, link, link1,
XEXP (nextlinks, 0),
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
/* I0 -> I1; I1, I2 -> I3. */
for (nextlinks = LOG_LINKS (link1); nextlinks;
nextlinks = XEXP (nextlinks, 1))
if ((next = try_combine (insn, link, link1,
XEXP (nextlinks, 0),
- &new_direct_jump_p)) != 0)
+ &new_direct_jump_p,
+ last_combined_insn)) != 0)
goto retry;
}
}
@@ -1362,7 +1375,8 @@ combine_instructions (rtx f, unsigned int nregs)
i2mod_old_rhs = copy_rtx (orig);
i2mod_new_rhs = copy_rtx (note);
next = try_combine (insn, i2mod, NULL_RTX, NULL_RTX,
- &new_direct_jump_p);
+ &new_direct_jump_p,
+ last_combined_insn);
i2mod = NULL_RTX;
if (next)
goto retry;
@@ -2501,10 +2515,15 @@ update_cfg_for_uncondjump (rtx insn)
resume scanning.
Set NEW_DIRECT_JUMP_P to a nonzero value if try_combine creates a
- new direct jump instruction. */
+ new direct jump instruction.
+
+ LAST_COMBINED_INSN is either I3, or some insn after I3 that has
+ been I3 passed to an earlier try_combine within the same basic
+ block. */
static rtx
-try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
+try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
+ rtx last_combined_insn)
{
/* New patterns for I3 and I2, respectively. */
rtx newpat, newi2pat = 0;
@@ -3853,7 +3872,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
i2src while its original mode is temporarily
restored, and then clear i2scratch so that we don't
do it again later. */
- propagate_for_debug (i2, i3, reg, i2src);
+ propagate_for_debug (i2, last_combined_insn, reg, i2src);
i2scratch = false;
/* Put back the new mode. */
adjust_reg_mode (reg, new_mode);
@@ -3866,13 +3885,16 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
if (reg == i2dest)
{
first = i2;
- last = i3;
+ last = last_combined_insn;
}
else
{
first = i3;
last = undobuf.other_insn;
gcc_assert (last);
+ if (DF_INSN_LUID (last)
+ < DF_INSN_LUID (last_combined_insn))
+ last = last_combined_insn;
}
/* We're dealing with a reg that changed mode but not
@@ -4101,14 +4123,14 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
if (newi2pat)
{
if (MAY_HAVE_DEBUG_INSNS && i2scratch)
- propagate_for_debug (i2, i3, i2dest, i2src);
+ propagate_for_debug (i2, last_combined_insn, i2dest, i2src);
INSN_CODE (i2) = i2_code_number;
PATTERN (i2) = newi2pat;
}
else
{
if (MAY_HAVE_DEBUG_INSNS && i2src)
- propagate_for_debug (i2, i3, i2dest, i2src);
+ propagate_for_debug (i2, last_combined_insn, i2dest, i2src);
SET_INSN_DELETED (i2);
}
@@ -4117,7 +4139,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
LOG_LINKS (i1) = 0;
REG_NOTES (i1) = 0;
if (MAY_HAVE_DEBUG_INSNS)
- propagate_for_debug (i1, i3, i1dest, i1src);
+ propagate_for_debug (i1, last_combined_insn, i1dest, i1src);
SET_INSN_DELETED (i1);
}
@@ -4126,7 +4148,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
LOG_LINKS (i0) = 0;
REG_NOTES (i0) = 0;
if (MAY_HAVE_DEBUG_INSNS)
- propagate_for_debug (i0, i3, i0dest, i0src);
+ propagate_for_debug (i0, last_combined_insn, i0dest, i0src);
SET_INSN_DELETED (i0);
}
new file mode 100644
index 0000000..e56b3a3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr48343.c
@@ -0,0 +1,19 @@
+/* PR debug/48343 */
+/* { dg-do compile } */
+/* { dg-options "-fcompare-debug" } */
+
+void foo (unsigned char *, unsigned char *);
+
+void
+test (unsigned int x, int y)
+{
+ unsigned int i, j = 0, k;
+ unsigned char s[256], t[64];
+ foo (s, t);
+ t[0] = y;
+ for (i = 0; i < 256; i++)
+ {
+ j = (j + s[i] + t[i % x]) & 0xff;
+ k = i; i = j; j = k;
+ }
+}
--
1.7.0.4

View File

@ -1,27 +0,0 @@
From 95333dcb51a2099d45b792b945fd9c0a2f8febab Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 18:33:34 +0000
Subject: [PATCH] PR fortran/48117
* gfortran.dg/gomp/pr48117.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172120 138bc75d-0d04-0410-961f-82ee72b054a4
new file mode 100644
index 0000000..bc8ad9b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr48117.f90
@@ -0,0 +1,11 @@
+! PR fortran/48117
+! { dg-do compile }
+! { dg-options "-O2 -fopenmp" }
+
+subroutine foo(x)
+ character(len=*), optional :: x
+ character(len=80) :: v
+ !$omp master
+ if (present(x)) v = adjustl(x)
+ !$omp end master
+end subroutine foo
--
1.7.0.4

View File

@ -1,224 +0,0 @@
From ac4ab0911ae869e3cd4c00629e3c4d4d0b7e7aa6 Mon Sep 17 00:00:00 2001
From: uros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 20:46:50 +0000
Subject: [PATCH] * config/i386/sse.md: Update copyright year.
(avx_cmp<ssescalarmodesuffix><mode>3): Add missing output
register constraint.
(*vec_concatv2sf_avx): Fix wrong register constraint in
alternative 3 of operand 1.
(*vec_set<mode>_0_avx): Avoid combining registers from different
units in a single alternative.
(*vec_set<mode>_0_sse4_1): Ditto.
(*vec_set<mode>_0_sse2): Ditto.
(vec_set<mode>_0): Ditto.
(sse2_storehpd): Ditto.
(sse2_loadhpd): Ditto.
(sse4_1_insertps): Use nonimmediate_operand for operand 2.
* config/i386/predicates.md (sse_comparison_operator): Do not
define as special predicate.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172126 138bc75d-0d04-0410-961f-82ee72b054a4
index 986856b..7cce9d4 100644
--- a/gcc/config/i386/predicates.md
+++ b/gcc/config/i386/predicates.md
@@ -969,13 +969,8 @@
;; Return true if OP is a comparison that can be used in the CMPSS/CMPPS insns.
;; The first set are supported directly; the second set can't be done with
;; full IEEE support, i.e. NaNs.
-;;
-;; ??? It would seem that we have a lot of uses of this predicate that pass
-;; it the wrong mode. We got away with this because the old function didn't
-;; check the mode at all. Mirror that for now by calling this a special
-;; predicate.
-(define_special_predicate "sse_comparison_operator"
+(define_predicate "sse_comparison_operator"
(match_code "eq,lt,le,unordered,ne,unge,ungt,ordered"))
;; Return true if OP is a comparison operator that can be issued by
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index f4bea64..578ad82 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -1,5 +1,5 @@
;; GCC machine description for SSE instructions
-;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+;; Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
;; Free Software Foundation, Inc.
;;
;; This file is part of GCC.
@@ -1557,7 +1557,7 @@
(set_attr "mode" "<MODE>")])
(define_insn "avx_cmp<ssescalarmodesuffix><mode>3"
- [(set (match_operand:SSEMODEF2P 0 "register_operand" "")
+ [(set (match_operand:SSEMODEF2P 0 "register_operand" "=x")
(vec_merge:SSEMODEF2P
(unspec:SSEMODEF2P
[(match_operand:SSEMODEF2P 1 "register_operand" "x")
@@ -3846,7 +3846,7 @@
(define_insn "*vec_concatv2sf_avx"
[(set (match_operand:V2SF 0 "register_operand" "=x,x,x,*y ,*y")
(vec_concat:V2SF
- (match_operand:SF 1 "nonimmediate_operand" " x,x,m, x , m")
+ (match_operand:SF 1 "nonimmediate_operand" " x,x,m, 0 , m")
(match_operand:SF 2 "vector_move_operand" " x,m,C,*ym, C")))]
"TARGET_AVX"
"@
@@ -3935,13 +3935,15 @@
DONE;
})
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "*vec_set<mode>_0_avx"
- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")
+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m, m,m")
(vec_merge:SSEMODE4S
(vec_duplicate:SSEMODE4S
(match_operand:<ssescalarmode> 2
- "general_operand" " x,m,*r,x,*rm,x*rfF"))
- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0")
+ "general_operand" " x,m,*r,x,*rm,x,*r,fF"))
+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,x, x,0, 0,0")
(const_int 1)))]
"TARGET_AVX"
"@
@@ -3950,20 +3952,24 @@
vmovd\t{%2, %0|%0, %2}
vmovss\t{%2, %1, %0|%0, %1, %2}
vpinsrd\t{$0, %2, %1, %0|%0, %1, %2, 0}
+ #
+ #
#"
- [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")
- (set_attr "prefix_extra" "*,*,*,*,1,*")
- (set_attr "length_immediate" "*,*,*,*,1,*")
+ [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*,*")
+ (set_attr "prefix_extra" "*,*,*,*,1,*,*,*")
+ (set_attr "length_immediate" "*,*,*,*,1,*,*,*")
(set_attr "prefix" "vex")
- (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])
+ (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*,*")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "*vec_set<mode>_0_sse4_1"
- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x,m")
+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x, x,x, x, m,m")
(vec_merge:SSEMODE4S
(vec_duplicate:SSEMODE4S
(match_operand:<ssescalarmode> 2
- "general_operand" " x,m,*r,x,*rm,*rfF"))
- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0,0")
+ "general_operand" " x,m,*r,x,*rm,*r,fF"))
+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,C, C,0, 0, 0,0")
(const_int 1)))]
"TARGET_SSE4_1"
"@
@@ -3972,44 +3978,53 @@
movd\t{%2, %0|%0, %2}
movss\t{%2, %0|%0, %2}
pinsrd\t{$0, %2, %0|%0, %2, 0}
+ #
#"
- [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*")
- (set_attr "prefix_extra" "*,*,*,*,1,*")
- (set_attr "length_immediate" "*,*,*,*,1,*")
- (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*")])
+ [(set_attr "type" "sselog,ssemov,ssemov,ssemov,sselog,*,*")
+ (set_attr "prefix_extra" "*,*,*,*,1,*,*")
+ (set_attr "length_immediate" "*,*,*,*,1,*,*")
+ (set_attr "mode" "SF,<ssescalarmode>,SI,SF,TI,*,*")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "*vec_set<mode>_0_sse2"
- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m")
+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x, x,x,m, m,m")
(vec_merge:SSEMODE4S
(vec_duplicate:SSEMODE4S
(match_operand:<ssescalarmode> 2
- "general_operand" " m,*r,x,x*rfF"))
- (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0")
+ "general_operand" " m,*r,x,x,*r,fF"))
+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C, C,0,0, 0,0")
(const_int 1)))]
"TARGET_SSE2"
"@
mov<ssescalarmodesuffix>\t{%2, %0|%0, %2}
movd\t{%2, %0|%0, %2}
movss\t{%2, %0|%0, %2}
+ #
+ #
#"
[(set_attr "type" "ssemov")
- (set_attr "mode" "<ssescalarmode>,SI,SF,*")])
+ (set_attr "mode" "<ssescalarmode>,SI,SF,*,*,*")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "vec_set<mode>_0"
- [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m")
+ [(set (match_operand:SSEMODE4S 0 "nonimmediate_operand" "=x,x,m, m,m")
(vec_merge:SSEMODE4S
(vec_duplicate:SSEMODE4S
(match_operand:<ssescalarmode> 2
- "general_operand" " m,x,x*rfF"))
- (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0")
+ "general_operand" " m,x,x,*r,fF"))
+ (match_operand:SSEMODE4S 1 "vector_move_operand" " C,0,0, 0,0")
(const_int 1)))]
"TARGET_SSE"
"@
movss\t{%2, %0|%0, %2}
movss\t{%2, %0|%0, %2}
+ #
+ #
#"
[(set_attr "type" "ssemov")
- (set_attr "mode" "SF,SF,*")])
+ (set_attr "mode" "SF,SF,*,*,*")])
;; A subset is vec_setv4sf.
(define_insn "*vec_setv4sf_avx"
@@ -4064,7 +4079,7 @@
(define_insn "sse4_1_insertps"
[(set (match_operand:V4SF 0 "register_operand" "=x")
- (unspec:V4SF [(match_operand:V4SF 2 "register_operand" "x")
+ (unspec:V4SF [(match_operand:V4SF 2 "nonimmediate_operand" "xm")
(match_operand:V4SF 1 "register_operand" "0")
(match_operand:SI 3 "const_0_to_255_operand" "n")]
UNSPEC_INSERTPS))]
@@ -4811,6 +4826,8 @@
(set_attr "prefix" "vex")
(set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "sse2_storehpd"
[(set (match_operand:DF 0 "nonimmediate_operand" "=m,x,x,*f,r")
(vec_select:DF
@@ -4912,6 +4929,8 @@
(set_attr "prefix" "vex")
(set_attr "mode" "V1DF,V2DF,DF,DF,DF")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "sse2_loadhpd"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,o,o,o")
(vec_concat:V2DF
@@ -4983,6 +5002,8 @@
(set_attr "prefix" "vex")
(set_attr "mode" "DF,V1DF,V1DF,V1DF,DF,DF,DF")])
+;; Avoid combining registers from different units in a single alternative,
+;; see comment above inline_secondary_memory_needed function in i386.c
(define_insn "sse2_loadlpd"
[(set (match_operand:V2DF 0 "nonimmediate_operand" "=x,x,x,x,x,m,m,m")
(vec_concat:V2DF
--
1.7.0.4

View File

@ -1,24 +0,0 @@
From 5430ea55f853566272279cbd5bb20a2dd5bd7a51 Mon Sep 17 00:00:00 2001
From: mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Thu, 7 Apr 2011 21:33:47 +0000
Subject: [PATCH] * gcc.dg/torture/stackalign/non-local-goto-5.c: Fix for targets
with no trampolines.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172135 138bc75d-0d04-0410-961f-82ee72b054a4
index 08ca95d..d198c9a 100644
--- a/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c
+++ b/gcc/testsuite/gcc.dg/torture/stackalign/non-local-goto-5.c
@@ -1,8 +1,8 @@
/* { dg-do run } */
+extern void exit (int);
#if !defined (NO_LABEL_VALUES) && !defined (NO_TRAMPOLINES)
extern void abort (void);
-extern void exit (int);
int s(i){if(i>0){__label__ l1;int f(int i){if(i==2)goto l1;return 0;}return f(i);l1:;}return 1;}
int x(){return s(0)==1&&s(1)==0&&s(2)==1;}
int main(){if(x()!=1)abort();exit(0);}
--
1.7.0.4

View File

@ -1,68 +0,0 @@
From eba70fb9976ef047a8fb8dc6499c42e8fd3551f7 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 11:45:29 +0000
Subject: [PATCH] PR tree-optimization/48377
* tree-vect-data-refs.c (vector_alignment_reachable_p): Set
is_packed to true even for types with smaller TYPE_ALIGN than
TYPE_SIZE.
* gcc.dg/vect/pr48377.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172174 138bc75d-0d04-0410-961f-82ee72b054a4
index 5295c71..270462e 100644
new file mode 100644
index 0000000..e0cde43
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr48377.c
@@ -0,0 +1,25 @@
+/* PR tree-optimization/48377 */
+/* { dg-do run } */
+
+typedef unsigned int U __attribute__((__aligned__ (1), __may_alias__));
+
+__attribute__((noinline, noclone)) unsigned int
+foo (const char *s, int len)
+{
+ const U *p = (const U *) s;
+ unsigned int f = len / sizeof (unsigned int), hash = len, i;
+
+ for (i = 0; i < f; ++i)
+ hash += *p++;
+ return hash;
+}
+
+char buf[64] __attribute__((aligned (32)));
+
+int
+main (void)
+{
+ return foo (buf + 1, 26) != 26;
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 2c9936c..a1437b5 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -1,5 +1,5 @@
/* Data References Analysis and Manipulation Utilities for Vectorization.
- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Dorit Naishlos <dorit@il.ibm.com>
and Ira Rosen <irar@il.ibm.com>
@@ -1143,6 +1143,9 @@ vector_alignment_reachable_p (struct data_reference *dr)
if (ba)
is_packed = contains_packed_reference (ba);
+ if (compare_tree_int (TYPE_SIZE (type), TYPE_ALIGN (type)) > 0)
+ is_packed = true;
+
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "Unknown misalignment, is_packed = %d",is_packed);
if (targetm.vectorize.vector_alignment_reachable (type, is_packed))
--
1.7.0.4

View File

@ -1,774 +0,0 @@
From dc6361adc966b10875fbfafff9652dcc4043df58 Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 14:29:58 +0000
Subject: [PATCH] * de.po: Update.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172188 138bc75d-0d04-0410-961f-82ee72b054a4
index a1d1617..e904097 100644
--- a/gcc/po/de.po
+++ b/gcc/po/de.po
@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: gcc 4.6.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2011-03-24 16:45+0000\n"
-"PO-Revision-Date: 2011-04-06 19:50+0100\n"
+"PO-Revision-Date: 2011-04-08 19:50+0100\n"
"Last-Translator: Roland Stigge <stigge@antcom.de>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
"Language: de\n"
@@ -15687,9 +15687,9 @@ msgid "coverage mismatch for function %qE while reading counter %qs"
msgstr "Überdeckung passt nicht für Funktion %qE beim Lesen des Zählers %qs"
#: coverage.c:378
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "coverage mismatch ignored"
-msgstr "unpassende Überdeckung ignoriert wegen -Wcoverage-mismatch"
+msgstr "unpassende Überdeckung ignoriert"
#: coverage.c:380
#, gcc-internal-format
@@ -15697,9 +15697,9 @@ msgid "execution counts estimated"
msgstr "Ausführungszähler voraussichtlich"
#: coverage.c:381
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "execution counts assumed to be zero"
-msgstr "Datei %s nicht gefunden, Ausführungszähler als null angenommen"
+msgstr "Ausführungszähler als null angenommen"
#: coverage.c:384
#, gcc-internal-format
@@ -15717,9 +15717,9 @@ msgid "error writing %qs"
msgstr "Fehler beim Schreiben von %qs"
#: cppspec.c:92
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qs is not a valid option to the preprocessor"
-msgstr "»%s« ist keine gültige Präprozessoroption"
+msgstr "%qs ist keine gültige Präprozessoroption"
#: cppspec.c:111
#, gcc-internal-format
@@ -15727,9 +15727,9 @@ msgid "too many input files"
msgstr "zu viele Eingabedateien"
#: dbgcnt.c:135
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot find a valid counter:value pair:"
-msgstr "Es kann kein gültiger Zähler:Wert-Paar gefunden werden:"
+msgstr "Es kann kein gültiges Zähler:Wert-Paar gefunden werden:"
#: dbgcnt.c:136
#, gcc-internal-format, gfc-internal-format
@@ -15817,9 +15817,9 @@ msgid "region_array is corrupted for region %i"
msgstr "region_array ist für Region %i beschädigt"
#: except.c:3342 except.c:3373
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "lp_array is corrupted for lp %i"
-msgstr "region_array ist für Region %i beschädigt"
+msgstr "lp_array ist für lp %i beschädigt"
#: except.c:3359
#, gcc-internal-format, gfc-internal-format
@@ -15832,9 +15832,9 @@ msgid "negative nesting depth of region %i"
msgstr "negative Verschachtelungstiefe der Region %i"
#: except.c:3378
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "region of lp %i is wrong"
-msgstr "äußerer Block der Region %i ist falsch"
+msgstr "Region von lp %i ist falsch"
#: except.c:3405
#, gcc-internal-format, gfc-internal-format
@@ -15842,14 +15842,14 @@ msgid "tree list ends on depth %i"
msgstr "Baumliste endet bei Tiefe %i"
#: except.c:3410
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "region_array does not match region_tree"
-msgstr "Feld passt nicht zum Regionsbaum"
+msgstr "region_array passt nicht zum region_tree"
#: except.c:3415
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "lp_array does not match region_tree"
-msgstr "Feld passt nicht zum Regionsbaum"
+msgstr "lp_array passt nicht zum region_tree"
#: except.c:3422
#, gcc-internal-format
@@ -15864,27 +15864,27 @@ msgstr "Kellergrenzen nicht für dieses Ziel unterstützt"
#: expmed.c:1778
#, gcc-internal-format
msgid "multiple accesses to volatile structure member because of packed attribute"
-msgstr ""
+msgstr "mehrfacher Zugriff auf »volatile« Strukturelement wegen gepackter Attribute"
#: expmed.c:1782
#, gcc-internal-format
msgid "multiple accesses to volatile structure bitfield because of packed attribute"
-msgstr ""
+msgstr "mehrfacher Zugriff auf »volatile« Strukturbitfelder wegen gepackter Attribute"
#: expmed.c:1792
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "mis-aligned access used for structure member"
-msgstr "Speicherklasse für Strukturfeld %qs angegeben"
+msgstr "falsch ausgerichteter Zugriff für Strukturelement verwendet"
#: expmed.c:1795
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "mis-aligned access used for structure bitfield"
-msgstr "Speicherklasse für Strukturfeld %qs angegeben"
+msgstr "falsch ausgerichteter Zugriff für Strukturbitfeld verwendet"
#: expmed.c:1801
#, gcc-internal-format
msgid "when a volatile object spans multiple type-sized locations, the compiler must choose between using a single mis-aligned access to preserve the volatility, or using multiple aligned accesses to avoid runtime faults; this code may fail at runtime if the hardware does not allow this access"
-msgstr ""
+msgstr "wenn ein »volatile«-Objekt über mehrere Bereiche mit Typgröße geht, muss der Compiler wählen zwischen der Verwendung einzelner falsch ausgerichteter Zugriffe um die Volatilität zu erhalten und der Verwendung mehrerer ausgerichteter Zugriffe um Laufzeitfehler zu verhindern. Dies kann zur Laufzeit fehlschlagen, wenn die Hardware diesen Zugriff nicht erlaubt"
#: expr.c:9305
#, gcc-internal-format
@@ -15902,19 +15902,19 @@ msgid "invalid argument %qs to -fdebug-prefix-map"
msgstr "ungültiges Argument %qs für -fdebug-prefix-map"
#: final.c:1583
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the frame size of %wd bytes is larger than %wd bytes"
-msgstr "Größe von %q+D überschreitet %wd Bytes"
+msgstr "die Rahmengröße von %wd Bytes überschreitet %wd Bytes"
#: final.c:4376 toplev.c:1407 tree-optimize.c:171
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not open final insn dump file %qs: %m"
-msgstr "Abzugsdatei %qs konnte nicht geöffnet werden: %s"
+msgstr "endgültige Abzugsdatei %qs der Anweisungen konnte nicht geöffnet werden: %m"
#: final.c:4440 tree-optimize.c:187
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not close final insn dump file %qs: %m"
-msgstr "Abzugsdatei %qs konnte nicht geöffnet werden: %s"
+msgstr "endgültige Abzugsdatei %qs der Anweisungen konnte nicht geschlossen werden: %m"
#: fixed-value.c:103
#, gcc-internal-format
@@ -15957,9 +15957,9 @@ msgid "assuming signed overflow does not occur when reducing constant in compari
msgstr "Annahme, dass vorzeichenbehafteter Überlauf nicht auftritt, wenn Konstante in Vergleich verringert wird"
#: fold-const.c:8576
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "assuming signed overflow does not occur when changing X +- C1 cmp C2 to X cmp C1 +- C2"
-msgstr "Annahme, dass vorzeichenbehafteter Überlauf nicht auftritt, wenn Division negiert wird"
+msgstr "Annahme, dass vorzeichenbehafteter Überlauf nicht auftritt, wenn »X +- C1 cmp C2« in »X cmp C1 +- C2« geändert wird"
#: fold-const.c:8815
#, gcc-internal-format
@@ -15972,9 +15972,9 @@ msgid "fold check: original tree changed by fold"
msgstr "Faltungstest: ursprünglicher Baum durch Faltung geändert"
#: function.c:253
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "total size of local objects too large"
-msgstr "%JGesamtgröße der lokalen Objekte zu hoch"
+msgstr "Gesamtgröße der lokalen Objekte zu hoch"
#: function.c:1749 gimplify.c:5061
#, gcc-internal-format
@@ -16017,9 +16017,9 @@ msgid "specs %s spec was not found to be renamed"
msgstr "keine %s-Spezifikation zum Umbenennen gefunden"
#: gcc.c:1791
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s: attempt to rename spec %qs to already defined spec %qs"
-msgstr "%s: Versuch, Spezifikation »%s« in bereits definierte Spezifikation »%s« umzubenennen"
+msgstr "%s: Versuch, Spezifikation %qs in bereits definierte Spezifikation %qs umzubenennen"
#: gcc.c:1812
#, gcc-internal-format, gfc-internal-format
@@ -16037,9 +16037,9 @@ msgid "spec file has no spec for linking"
msgstr "Spezifikationsdatei hat keine Spezifikation zum Binden"
#: gcc.c:2417
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "system path %qs is not absolute"
-msgstr "System-Pfad »%s« ist nicht absolut"
+msgstr "System-Pfad %qs ist nicht absolut"
#: gcc.c:2494
#, gcc-internal-format
@@ -16047,59 +16047,59 @@ msgid "-pipe not supported"
msgstr "-pipe wird nicht unterstützt"
#: gcc.c:2617
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "pex_init failed: %m"
-msgstr "pex_init gescheitert"
+msgstr "pex_init gescheitert: %m"
#: gcc.c:2656
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "failed to get exit status: %m"
-msgstr "Ende-Status konnte nicht ermittelt werden"
+msgstr "Ende-Status konnte nicht ermittelt werden: %m"
#: gcc.c:2662
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "failed to get process times: %m"
-msgstr "Verarbeitungszeiten konnten nicht ermittelt werden"
+msgstr "Verarbeitungszeiten konnten nicht ermittelt werden: %m"
#: gcc.c:2688
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s (program %s)"
-msgstr "Programme: %s\n"
+msgstr "%s (Programm %s)"
#: gcc.c:3097 opts-common.c:958 opts-common.c:1030
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized command line option %qs"
-msgstr "nicht erkannte Kommandozeilenoption »%s«"
+msgstr "nicht erkannte Kommandozeilenoption %qs"
#: gcc.c:3358
#, gcc-internal-format
msgid "%qs is an unknown -save-temps option"
-msgstr ""
+msgstr "%qs ist eine unbekannte Option für -save-temps"
#: gcc.c:3816
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "-pipe ignored because -save-temps specified"
-msgstr "Warnung: -pipe ignoriert, da -save-temps angegeben"
+msgstr "-pipe ignoriert, da -save-temps angegeben"
#: gcc.c:3902
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%<-x %s%> after last input file has no effect"
-msgstr "Warnung: »-x %s« hinter letzter Eingabedatei hat keine Wirkung"
+msgstr "%<-x %s%> hinter letzter Eingabedatei hat keine Wirkung"
#: gcc.c:4069
#, gcc-internal-format
msgid "unable to locate default linker script %qs in the library search paths"
-msgstr ""
+msgstr "Standard-Linkerscript %qs kann nicht in den Bibliotheks-Suchpfaden gefunden werden"
#: gcc.c:4272
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "switch %qs does not start with %<-%>"
-msgstr "Schalter »%s« beginnt nicht mit »-«"
+msgstr "Schalter %qs beginnt nicht mit %<-%>"
#: gcc.c:4275
#, gcc-internal-format
msgid "spec-generated switch is just %<-%>"
-msgstr ""
+msgstr "aus Spezifikation erzeugtes switch ist nur %<-%>"
#: gcc.c:4366
#, gcc-internal-format, gfc-internal-format
@@ -16117,52 +16117,52 @@ msgid "could not close temporary response file %s"
msgstr "temporäre Antwortdatei %s konnte nicht geschlossen werden"
#: gcc.c:4501
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec %qs invalid"
-msgstr "Spezifikation »%s« ist ungültig"
+msgstr "Spezifikation %qs ist ungültig"
#: gcc.c:4650
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec %qs has invalid %<%%0%c%>"
-msgstr "Spezifikation »%s« hat ungültiges »%%0%c«"
+msgstr "Spezifikation %qs hat ungültiges %<%%0%c%>"
#: gcc.c:4961
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec %qs has invalid %<%%W%c%>"
-msgstr "Spezifikation »%s« hat ungültiges »%%W%c«"
+msgstr "Spezifikation %qs hat ungültiges %<%%W%c%>"
#: gcc.c:4983
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec %qs has invalid %<%%x%c%>"
-msgstr "Spezifikation »%s« hat ungültiges »%%x%c«"
+msgstr "Spezifikation %qs hat ungültiges %<%%x%c%>"
#. Catch the case where a spec string contains something like
#. '%{foo:%*}'. i.e. there is no * in the pattern on the left
#. hand side of the :.
#: gcc.c:5171
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec failure: %<%%*%> has not been initialized by pattern match"
-msgstr "Spezifikationsfehler: »%%*« wurde nicht durch Mustererkennung initialisiert"
+msgstr "Spezifikationsfehler: %<%%*%> wurde nicht durch Mustererkennung initialisiert"
#: gcc.c:5180
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "use of obsolete %%[ operator in specs"
-msgstr "Warnung: Verwendung des veralteten Operators %%[ in Spezifikation"
+msgstr "Verwendung des veralteten Operators %%[ in Spezifikationen"
#: gcc.c:5261
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "spec failure: unrecognized spec option %qc"
-msgstr "Spezifikationsfehler: nicht erkannte Option »%c«"
+msgstr "Spezifikationsfehler: nicht erkannte Spezifikationsoption »%c«"
#: gcc.c:5321
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unknown spec function %qs"
-msgstr "unbekannte Spezifikationsfunktion »%s«"
+msgstr "unbekannte Spezifikationsfunktion %qs"
#: gcc.c:5339
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "error in args to spec function %qs"
-msgstr "Fehler in Argumenten für Spezifikationsfunktion »%s«"
+msgstr "Fehler in Argumenten für Spezifikationsfunktion %qs"
#: gcc.c:5387
#, gcc-internal-format
@@ -16181,39 +16181,39 @@ msgid "malformed spec function arguments"
msgstr "schlechte Argumente für Spezifikationsfunktion"
#: gcc.c:5655
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "braced spec %qs is invalid at %qc"
-msgstr "geschweift geklammerte Spezifikation »%s« ist bei »%c« ungültig"
+msgstr "geschweift geklammerte Spezifikation %qs ist bei %qc ungültig"
#: gcc.c:5743
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "braced spec body %qs is invalid"
-msgstr "geschweift geklammerter Körper »%s« ist ungültig"
+msgstr "geschweift geklammerter Spezifikationskörper %qs ist ungültig"
#: gcc.c:5992
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s: could not determine length of compare-debug file %s"
-msgstr "in Antwortdatei %s konnte nicht geschrieben werden"
+msgstr "%s: Größe der Vergleichs-Prüfdatei %s konnte nicht ermittelt werden"
#: gcc.c:6003
#, gcc-internal-format, gfc-internal-format
msgid "%s: -fcompare-debug failure (length)"
-msgstr ""
+msgstr "%s: Fehlschlag von -fcompare-debug (Länge)"
#: gcc.c:6013 gcc.c:6054
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "%s: could not open compare-debug file %s"
-msgstr "%s: Ausgabedatei »%s« konnte nicht geöffnet werden\n"
+msgstr "%s: Vergleichs-Prüfdatei %s konnte nicht geöffnet werden"
#: gcc.c:6033 gcc.c:6070
#, gcc-internal-format, gfc-internal-format
msgid "%s: -fcompare-debug failure"
-msgstr ""
+msgstr "%s: Fehlschlag von -fcompare-debug"
#: gcc.c:6144
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "atexit failed"
-msgstr "pex_init gescheitert"
+msgstr "atexit gescheitert"
#: gcc.c:6323
#, gcc-internal-format
@@ -16226,9 +16226,9 @@ msgid "spec failure: more than one arg to SYSROOT_HEADERS_SUFFIX_SPEC"
msgstr "Spezifikationsfehler: mehr als ein Argument für SYSROOT_HEADERS_SUFFIX_SPEC"
#: gcc.c:6456
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unrecognized option %<-%s%>"
-msgstr "nicht erkannte Option »-%s«"
+msgstr "nicht erkannte Option %<-%s%>"
#. The error status indicates that only one set of fixed
#. headers should be built.
@@ -16243,9 +16243,9 @@ msgid "no input files"
msgstr "keine Eingabedateien"
#: gcc.c:6665
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "cannot specify -o with -c, -S or -E with multiple files"
-msgstr "-o kann nicht mit -c oder -S mit mehreren Dateien angegeben werden"
+msgstr "-o kann nicht mit -c, -S oder -E mit mehreren Dateien angegeben werden"
#: gcc.c:6695
#, gcc-internal-format, gfc-internal-format
@@ -16255,22 +16255,22 @@ msgstr "%s: %s-Compiler ist auf diesem System nicht installiert"
#: gcc.c:6719
#, gcc-internal-format
msgid "recompiling with -fcompare-debug"
-msgstr ""
+msgstr "Neuübersetzung mit -fcompare-debug"
#: gcc.c:6735
#, gcc-internal-format
msgid "during -fcompare-debug recompilation"
-msgstr ""
+msgstr "während Neuübersetzung mit -fcompare-debug"
#: gcc.c:6744
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "comparing final insns dumps"
-msgstr "Vergleich ist immer %d"
+msgstr "Vergleich der endgültigen Answeisungslisten"
#: gcc.c:6844
#, gcc-internal-format
msgid "-fuse-linker-plugin, but "
-msgstr ""
+msgstr "-fuse-linker-plugin, aber "
#: gcc.c:6873
#, gcc-internal-format, gfc-internal-format
@@ -16283,39 +16283,39 @@ msgid "language %s not recognized"
msgstr "Sprache %s nicht erkannt"
#: gcc.c:6985
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s: %m"
-msgstr "%s: %s"
+msgstr "%s: %m"
#: gcc.c:7140
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multilib spec %qs is invalid"
-msgstr "Multilib-Spezifikation »%s« ist ungültig"
+msgstr "Multilib-Spezifikation %qs ist ungültig"
#: gcc.c:7332
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multilib exclusions %qs is invalid"
-msgstr "Multilib-Ausschlüsse »%s« sind ungültig"
+msgstr "Multilib-Ausschlüsse %qs sind ungültig"
#: gcc.c:7390 gcc.c:7531
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multilib select %qs is invalid"
-msgstr "Multilib-select »%s« ist ungültig"
+msgstr "Multilib-select %qs ist ungültig"
#: gcc.c:7569
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "multilib exclusion %qs is invalid"
-msgstr "Multilib-Ausschluss »%s« ist ungültig"
+msgstr "Multilib-Ausschluss %qs ist ungültig"
#: gcc.c:7775
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "environment variable %qs not defined"
-msgstr "Umgebungsvariable »%s« nicht definiert"
+msgstr "Umgebungsvariable %qs nicht definiert"
#: gcc.c:7887 gcc.c:7892
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "invalid version number %qs"
-msgstr "ungültige Versionsnummer »%s«"
+msgstr "ungültige Versionsnummer %qs"
#: gcc.c:7935
#, gcc-internal-format, gfc-internal-format
@@ -16328,34 +16328,34 @@ msgid "too many arguments to %%:version-compare"
msgstr "zu viele Argumente für %%:version-compare"
#: gcc.c:7982
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "unknown operator %qs in %%:version-compare"
-msgstr "unbekannter Operator »%s« in %%:version-compare"
+msgstr "unbekannter Operator %qs in %%:version-compare"
#: gcc.c:8095
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-dump-opt"
msgstr "zu viele Argumente für %%:version-compare"
#: gcc.c:8163
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-self-opt"
-msgstr "zu viele Argumente für %%:version-compare"
+msgstr "zu viele Argumente für %%:compare-debug-self-opt"
#: gcc.c:8198
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too few arguments to %%:compare-debug-auxbase-opt"
-msgstr "zu wenige Argumente für %%:version-compare"
+msgstr "zu wenige Argumente für %%:compare-debug-auxbase-opt"
#: gcc.c:8201
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "too many arguments to %%:compare-debug-auxbase-opt"
-msgstr "zu viele Argumente für %%:version-compare"
+msgstr "zu viele Argumente für %%:compare-debug-auxbase-opt"
#: gcc.c:8208
#, gcc-internal-format, gfc-internal-format
msgid "argument to %%:compare-debug-auxbase-opt does not end in .gk"
-msgstr ""
+msgstr "Argument für %%:compare-debug-auxbase-opt endet nicht mit .pk"
#: gcse.c:5176
#, gcc-internal-format, gfc-internal-format
@@ -16370,23 +16370,23 @@ msgstr "%s: %d Basis-Blöcke und %d Register"
#: ggc-common.c:467 ggc-common.c:475 ggc-common.c:549 ggc-common.c:568
#: ggc-page.c:2170 ggc-page.c:2201 ggc-page.c:2208 ggc-zone.c:2420
#: ggc-zone.c:2431 ggc-zone.c:2435
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t write PCH file: %m"
msgstr "PCH-Datei kann nicht geschrieben werden: %m"
#: ggc-common.c:561 config/i386/host-cygwin.c:55
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t get position in PCH file: %m"
msgstr "Position in PCH-Datei kann nicht ermittelt werden: %m"
#: ggc-common.c:571
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t write padding to PCH file: %m"
msgstr "Auffüllung für PCH-Datei kann nicht geschrieben werden: %m"
#: ggc-common.c:626 ggc-common.c:634 ggc-common.c:641 ggc-common.c:644
#: ggc-common.c:654 ggc-common.c:657 ggc-page.c:2298 ggc-zone.c:2454
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t read PCH file: %m"
msgstr "PCH-Datei kann nicht gelesen werden: %m"
@@ -16401,24 +16401,24 @@ msgid "open /dev/zero: %m"
msgstr "/dev/zero öffnen: %m"
#: ggc-page.c:2186 ggc-page.c:2192
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t write PCH file"
msgstr "PCH-Datei kann nicht geschrieben werden"
#: ggc-zone.c:2417 ggc-zone.c:2428
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t seek PCH file: %m"
msgstr "in PCH-Datei kann nicht positioniert werden: %m"
#: gimple.c:1071
-#, fuzzy, gcc-internal-format, gfc-internal-format
+#, gcc-internal-format, gfc-internal-format
msgid "gimple check: expected %s(%s), have %s(%s) in %s, at %s:%d"
-msgstr "Baumprüfung: Klasse %qs erwartet, haben %qs (%s) in %s, bei %s:%d"
+msgstr "GIMPLE-Prüfung: %s(%s) erwartet, haben %s(%s) in %s, bei %s:%d"
#: gimplify.c:2430
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "using result of function returning %<void%>"
-msgstr "keine return-Anweisung in nicht void zurückgebender Funktion"
+msgstr "Ergebnis einer %<void%> zurückgebenden Funktion verwendet"
#: gimplify.c:4946
#, gcc-internal-format, gfc-internal-format
@@ -16436,44 +16436,44 @@ msgid "memory input %d is not directly addressable"
msgstr "Speichereingabe %d ist nicht direkt adressierbar"
#: gimplify.c:5552
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "threadprivate variable %qE used in untied task"
-msgstr "Threadprivate Variablen werden für dieses Ziel nicht unterstützt"
+msgstr "threadprivate Variable %qE in unverknüpfter Task verwendet"
#: gimplify.c:5553 gimplify.c:5615
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enclosing task"
-msgstr "%Humgebende Parallele"
+msgstr "umgebende Task"
#: gimplify.c:5612
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%qE not specified in enclosing parallel"
-msgstr "in umgebender Parallele wurde %qs nicht angegeben"
+msgstr "%qE in umgebender Parallele nicht angegeben"
#: gimplify.c:5617
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "enclosing parallel"
-msgstr "%Humgebende Parallele"
+msgstr "umgebende Parallele"
#: gimplify.c:5722
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qE should be private"
-msgstr "Schleifenvariable %qs sollte »private« sein"
+msgstr "Schleifenvariable %qE sollte »private« sein"
#: gimplify.c:5736
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qE should not be firstprivate"
-msgstr "Schleifenvariable %qs sollte nicht »firstprivate« sein"
+msgstr "Schleifenvariable %qE sollte nicht »firstprivate« sein"
#: gimplify.c:5739
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "iteration variable %qE should not be reduction"
-msgstr "Schleifenvariable %qs sollte nicht in Reduktion sein"
+msgstr "Schleifenvariable %qE sollte nicht Reduktion sein"
#: gimplify.c:5902
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "%s variable %qE is private in outer context"
-msgstr "%s Variable %qs ist im äußeren Kontext »private«"
+msgstr "%s Variable %qE ist im äußeren Kontext »private«"
#: gimplify.c:7495
#, gcc-internal-format
@@ -16481,14 +16481,14 @@ msgid "gimplification failed"
msgstr "Gimplifikation gescheitert"
#: godump.c:1040
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not close Go dump file: %m"
-msgstr "Abzugsdatei %qs konnte nicht geöffnet werden: %s"
+msgstr "Go-Abzugsdatei konnte nicht geschlossen werden: %m"
#: godump.c:1052
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "could not open Go dump file %qs: %m"
-msgstr "Abzugsdatei %qs konnte nicht geöffnet werden: %s"
+msgstr "Go-Abzugsdatei %qs konnte nicht geöffnet werden: %m"
#: graph.c:411 toplev.c:1517 java/jcf-parse.c:1751 java/jcf-parse.c:1890
#: objc/objc-act.c:477
@@ -16503,39 +16503,39 @@ msgid "can%'t open %s for writing: %m"
msgstr "%s kann nicht zum Schreiben geöffnet werden: %m"
#: graphite-poly.c:593
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the file is not in OpenScop format"
-msgstr "Feldbreite im printf-Format"
+msgstr "die Datei ist nicht im OpenScop-Format"
#: graphite-poly.c:604
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "the language is not recognized"
-msgstr "Sprache %s nicht erkannt"
+msgstr "die Sprache wurde nicht erkannt"
#: graphite-poly.c:615
#, gcc-internal-format
msgid "parameters number in the scop file is different from the internal scop parameter number"
-msgstr ""
+msgstr "Anzahl der Parameter in der Scop-Datei unterscheidet sich von der internen Anzahl der Scop-Parameter"
#: graphite-poly.c:628
#, gcc-internal-format
msgid "number of statements in the OpenScop file does not match the graphite internal statements number"
-msgstr ""
+msgstr "Anzahl der Anweisungen in der OpenScop-Datei passt nicht zur internen Graphite-Anweisungsanzahl"
#: graphite-poly.c:719
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "can%'t open %s for reading: %m"
-msgstr "%s kann nicht zum Schreiben geöffnet werden: %m"
+msgstr "%s kann nicht zum Lesen geöffnet werden: %m"
#: graphite-poly.c:742
#, gcc-internal-format, gfc-internal-format
msgid "the graphite file read for scop %d does not contain a legal transform"
-msgstr ""
+msgstr "für Scop %d gelesene Graphite-Datei enthält keine gültige Umwandlung"
#: graphite.c:290
-#, fuzzy, gcc-internal-format
+#, gcc-internal-format
msgid "Graphite loop optimizations cannot be used"
-msgstr "Schleifenoptimierungen auf Baumebene einschalten"
+msgstr "Graphite-Schleifenoptimierungen können nicht verwendet werden"
#. Fatal error here. We do not want to support compiling ltrans units with
#. different version of compiler or different flags than the WPA unit, so
@@ -16543,7 +16543,7 @@ msgstr "Schleifenoptimierungen auf Baumebene einschalten"
#: ipa-reference.c:1198
#, gcc-internal-format
msgid "ipa reference summary is missing in ltrans unit"
-msgstr ""
+msgstr "IPA-Referenzzusammenfassung fehlt in ltrans-Einheit"
#: ira.c:1377 ira.c:1390 ira.c:1404
#, gcc-internal-format, gfc-internal-format
--
1.7.0.4

View File

@ -1,80 +0,0 @@
From a5e7415bfbe41941768106dc5819bf3fff1b8435 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 15:01:50 +0000
Subject: [PATCH] PR c++/48450
* c-family/c-common.c (c_common_truthvalue_conversion): Don't ignore
conversion from C++0x scoped enum.
* cp/cvt.c (ocp_convert): Handle converting scoped enum to bool.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172191 138bc75d-0d04-0410-961f-82ee72b054a4
index c0c01b2..0be3996 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -3938,16 +3938,25 @@ c_common_truthvalue_conversion (location_t location, tree expr)
}
CASE_CONVERT:
- /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
- since that affects how `default_conversion' will behave. */
- if (TREE_CODE (TREE_TYPE (expr)) == REFERENCE_TYPE
- || TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0))) == REFERENCE_TYPE)
- break;
- /* If this is widening the argument, we can ignore it. */
- if (TYPE_PRECISION (TREE_TYPE (expr))
- >= TYPE_PRECISION (TREE_TYPE (TREE_OPERAND (expr, 0))))
- return c_common_truthvalue_conversion (location,
- TREE_OPERAND (expr, 0));
+ {
+ tree totype = TREE_TYPE (expr);
+ tree fromtype = TREE_TYPE (TREE_OPERAND (expr, 0));
+
+ /* Don't cancel the effect of a CONVERT_EXPR from a REFERENCE_TYPE,
+ since that affects how `default_conversion' will behave. */
+ if (TREE_CODE (totype) == REFERENCE_TYPE
+ || TREE_CODE (fromtype) == REFERENCE_TYPE)
+ break;
+ /* Don't strip a conversion from C++0x scoped enum, since they
+ don't implicitly convert to other types. */
+ if (TREE_CODE (fromtype) == ENUMERAL_TYPE
+ && ENUM_IS_SCOPED (fromtype))
+ break;
+ /* If this isn't narrowing the argument, we can ignore it. */
+ if (TYPE_PRECISION (totype) >= TYPE_PRECISION (fromtype))
+ return c_common_truthvalue_conversion (location,
+ TREE_OPERAND (expr, 0));
+ }
break;
case MODIFY_EXPR:
index 8ab0001..290b926 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -727,7 +727,13 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
return error_mark_node;
}
if (code == BOOLEAN_TYPE)
- return cp_truthvalue_conversion (e);
+ {
+ /* We can't implicitly convert a scoped enum to bool, so convert
+ to the underlying type first. */
+ if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC))
+ e = convert (ENUM_UNDERLYING_TYPE (intype), e);
+ return cp_truthvalue_conversion (e);
+ }
converted = fold_if_not_in_template (convert_to_integer (type, e));
new file mode 100644
index 0000000..10e510b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum9.C
@@ -0,0 +1,5 @@
+// { dg-options -std=c++0x }
+
+enum class E { };
+E f();
+bool b2 = static_cast<bool>(f());
--
1.7.0.4

View File

@ -1,132 +0,0 @@
From 2f7a2d284d42cfbff01ee024af4cbaeaff766ee5 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 15:02:00 +0000
Subject: [PATCH] * semantics.c (finish_decltype_type): Add complain parm.
* cp-tree.h: Adjust.
* parser.c (cp_parser_decltype): Adjust.
* pt.c (tsubst): Adjust.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172192 138bc75d-0d04-0410-961f-82ee72b054a4
index 4b49046..176a4b8 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -5344,7 +5344,7 @@ extern tree baselink_for_fns (tree);
extern void finish_static_assert (tree, tree, location_t,
bool);
extern tree describable_type (tree);
-extern tree finish_decltype_type (tree, bool);
+extern tree finish_decltype_type (tree, bool, tsubst_flags_t);
extern tree finish_trait_expr (enum cp_trait_kind, tree, tree);
extern tree build_lambda_expr (void);
extern tree build_lambda_object (tree);
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 4260f6d..daba2fc 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -10457,7 +10457,8 @@ cp_parser_decltype (cp_parser *parser)
return error_mark_node;
}
- return finish_decltype_type (expr, id_expression_or_member_access_p);
+ return finish_decltype_type (expr, id_expression_or_member_access_p,
+ tf_warning_or_error);
}
/* Special member functions [gram.special] */
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index e716ca6..ed48203 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -11025,7 +11025,7 @@ tsubst (tree t, tree args, tsubst_flags_t complain, tree in_decl)
type = lambda_return_type (type);
else
type = finish_decltype_type
- (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t));
+ (type, DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), complain);
return cp_build_qualified_type_real (type,
cp_type_quals (t)
| cp_type_quals (type),
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index c88b4bb..3a85ddb 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -4785,7 +4785,8 @@ describable_type (tree expr)
a full expression. */
tree
-finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
+finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
+ tsubst_flags_t complain)
{
tree orig_expr = expr;
tree type = NULL_TREE;
@@ -4798,7 +4799,8 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
|| (TREE_CODE (expr) == BIT_NOT_EXPR
&& TYPE_P (TREE_OPERAND (expr, 0))))
{
- error ("argument to decltype must be an expression");
+ if (complain & tf_error)
+ error ("argument to decltype must be an expression");
return error_mark_node;
}
@@ -4865,7 +4867,9 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
if (OVL_CHAIN (expr)
|| TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
{
- error ("%qE refers to a set of overloaded functions", orig_expr);
+ if (complain & tf_error)
+ error ("%qE refers to a set of overloaded functions",
+ orig_expr);
return error_mark_node;
}
else
@@ -4917,7 +4921,8 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
default:
gcc_assert (TYPE_P (expr) || DECL_P (expr)
|| TREE_CODE (expr) == SCOPE_REF);
- error ("argument to decltype must be an expression");
+ if (complain & tf_error)
+ error ("argument to decltype must be an expression");
return error_mark_node;
}
}
@@ -5012,7 +5017,8 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
if (!type || type == unknown_type_node)
{
- error ("type of %qE is unknown", expr);
+ if (complain & tf_error)
+ error ("type of %qE is unknown", expr);
return error_mark_node;
}
new file mode 100644
index 0000000..0a95a96
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae7.C
@@ -0,0 +1,20 @@
+// { dg-options -std=c++0x }
+
+struct A
+{
+ void f();
+ void f(int);
+ typedef int g;
+};
+
+template <class T> decltype (T::f) f();
+template <class T> void f();
+
+template <class T> decltype (T::g) g();
+template <class T> void g();
+
+int main()
+{
+ f<A>();
+ g<A>();
+}
--
1.7.0.4

View File

@ -1,47 +0,0 @@
From 92860ca75ea3cbb7223913d121c60cc56c966794 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 15:02:08 +0000
Subject: [PATCH] PR c++/48452
* typeck.c (build_x_compound_expr_from_list): Return error_mark_node
in SFINAE context.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172193 138bc75d-0d04-0410-961f-82ee72b054a4
index 03aa49e..ec9233d 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -5469,6 +5469,8 @@ build_x_compound_expr_from_list (tree list, expr_list_kind exp,
default:
gcc_unreachable ();
}
+ else
+ return error_mark_node;
for (list = TREE_CHAIN (list); list; list = TREE_CHAIN (list))
expr = build_x_compound_expr (expr, TREE_VALUE (list),
new file mode 100644
index 0000000..ede8b70
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
@@ -0,0 +1,18 @@
+// PR c++/48452
+// { dg-options -std=c++0x }
+namespace std {
+ template <class T> T&& declval();
+}
+
+template<class T, class... Args>
+decltype(T(std::declval<Args>()...), char()) f(int);
+
+template<class, class...>
+char (&f(...))[2];
+
+struct A { virtual ~A() = 0; };
+struct B {};
+
+static_assert(sizeof(f<A, int, int>(0)) != 1, "Error"); // a
+static_assert(sizeof(f<B, void, int>(0)) != 1, "Error"); // b
+static_assert(sizeof(f<void, int, int>(0)) != 1, "Error"); // c
--
1.7.0.4

View File

@ -1,110 +0,0 @@
From 4215154488607abf1ee95f1d1f03cb66be4bd4d8 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 15:02:16 +0000
Subject: [PATCH] PR c++/48468
* except.c (build_noexcept_spec): Propagate error_mark_node.
(finish_noexcept_expr): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172194 138bc75d-0d04-0410-961f-82ee72b054a4
index a814d67..874f111 100644
--- a/gcc/cp/except.c
+++ b/gcc/cp/except.c
@@ -1125,6 +1125,9 @@ finish_noexcept_expr (tree expr, tsubst_flags_t complain)
{
tree fn;
+ if (expr == error_mark_node)
+ return error_mark_node;
+
if (processing_template_decl)
return build_min (NOEXCEPT_EXPR, boolean_type_node, expr);
@@ -1212,6 +1215,8 @@ build_noexcept_spec (tree expr, int complain)
return noexcept_true_spec;
else if (expr == boolean_false_node)
return noexcept_false_spec;
+ else if (expr == error_mark_node)
+ return error_mark_node;
else
{
gcc_assert (processing_template_decl || expr == error_mark_node);
index be6fa00..60015e7 100644
--- a/gcc/testsuite/g++.dg/cpp0x/noexcept02.C
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept02.C
@@ -46,7 +46,9 @@ SA(!noexcept(f3(A())));
template <class T1, class T2>
void f (T1, T2) noexcept(noexcept(T1(), T2()));
-SA(noexcept(f3(1,1)));
+struct B { };
+
+SA(noexcept(f3(1,B())));
SA(!noexcept(f3(1,A())));
SA(!noexcept(f3(A(),1)));
SA(!noexcept(f3(A(),A())));
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae11.C b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
new file mode 100644
index 0000000..a3ffc34
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae11.C
@@ -0,0 +1,56 @@
+// PR c++/48468
+// { dg-options -std=c++0x }
+// { dg-prune-output "note" }
+
+template<class T>
+T&& declval() noexcept;
+
+template< class T >
+inline void f1( T& x ) noexcept( noexcept( declval<T&>().foo() ) )
+{
+ x.foo();
+}
+
+template< class T,
+ bool Noexcept = noexcept( declval<T&>().foo() )
+>
+inline void f2( T& x ) noexcept( Noexcept )
+{
+ x.foo();
+}
+
+// a common and trivial mistake
+template< class T >
+inline void f3( T& x ) noexcept( declval<T&>().foo() )
+{
+ x.foo();
+}
+
+struct X
+{
+ void foo();
+};
+
+struct Y
+{
+ void foo() noexcept;
+};
+
+struct Z {};
+
+int main()
+{
+ X x; Y y; Z z;
+
+ static_assert( !noexcept( f1(x) ), "OK." );
+ static_assert( !noexcept( f2(x) ), "OK." );
+ // static_assert( !noexcept( f3(x) ), "shall be ill-formed(OK)." );
+
+ static_assert( noexcept( f1(y) ), "OK." );
+ static_assert( noexcept( f2(y) ), "OK." );
+ // static_assert( noexcept( f3(y) ), "shall be ill-formed(OK)." );
+
+ static_assert( noexcept( f1(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+ static_assert( noexcept( f2(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+ static_assert( !noexcept( f3(z) ), "shall be ill-formed." ); // { dg-error "no match" }
+}
--
1.7.0.4

View File

@ -1,145 +0,0 @@
From c9ec81bbd73666b97ab9049b759b5ab8d0e06681 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 15:02:28 +0000
Subject: [PATCH] PR c++/48500
* semantics.c (potential_constant_expression_1) [CALL_EXPR]: Check
arguments even if we don't know the function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172195 138bc75d-0d04-0410-961f-82ee72b054a4
index 3a85ddb..e6bb1dc 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -7374,6 +7374,8 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
class member access expression, including the result of the
implicit transformation in the body of the non-static
member function (9.3.1); */
+ /* FIXME this restriction seems pointless since the standard dropped
+ "potential constant expression". */
if (is_this_parameter (t))
{
if (flags & tf_error)
@@ -7389,51 +7391,63 @@ potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
{
tree fun = get_function_named_in_call (t);
const int nargs = call_expr_nargs (t);
- if (TREE_CODE (fun) != FUNCTION_DECL)
- {
- if (potential_constant_expression_1 (fun, rval, flags))
- /* Might end up being a constant function pointer. */
- return true;
- if (flags & tf_error)
- error ("%qE is not a function name", fun);
- return false;
- }
- /* Skip initial arguments to base constructors. */
- if (DECL_BASE_CONSTRUCTOR_P (fun))
- i = num_artificial_parms_for (fun);
+ i = 0;
+
+ if (is_overloaded_fn (fun))
+ {
+ if (TREE_CODE (fun) == FUNCTION_DECL)
+ {
+ if (builtin_valid_in_constant_expr_p (fun))
+ return true;
+ if (!DECL_DECLARED_CONSTEXPR_P (fun)
+ && !morally_constexpr_builtin_function_p (fun))
+ {
+ if (flags & tf_error)
+ error ("%qD is not %<constexpr%>", fun);
+ return false;
+ }
+ /* A call to a non-static member function takes the address
+ of the object as the first argument. But in a constant
+ expression the address will be folded away, so look
+ through it now. */
+ if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
+ && !DECL_CONSTRUCTOR_P (fun))
+ {
+ tree x = get_nth_callarg (t, 0);
+ if (is_this_parameter (x))
+ /* OK. */;
+ else if (!potential_constant_expression_1 (x, rval, flags))
+ {
+ if (flags & tf_error)
+ error ("object argument is not a potential "
+ "constant expression");
+ return false;
+ }
+ i = 1;
+ }
+ }
+ else
+ fun = get_first_fn (fun);
+ /* Skip initial arguments to base constructors. */
+ if (DECL_BASE_CONSTRUCTOR_P (fun))
+ i = num_artificial_parms_for (fun);
+ fun = DECL_ORIGIN (fun);
+ }
else
- i = 0;
- fun = DECL_ORIGIN (fun);
- if (builtin_valid_in_constant_expr_p (fun))
- return true;
- if (!DECL_DECLARED_CONSTEXPR_P (fun)
- && !morally_constexpr_builtin_function_p (fun))
{
- if (flags & tf_error)
- error ("%qD is not %<constexpr%>", fun);
- return false;
+ if (potential_constant_expression_1 (fun, rval, flags))
+ /* Might end up being a constant function pointer. */;
+ else
+ {
+ if (flags & tf_error)
+ error ("%qE is not a function name", fun);
+ return false;
+ }
}
for (; i < nargs; ++i)
{
tree x = get_nth_callarg (t, i);
- /* A call to a non-static member function takes the
- address of the object as the first argument.
- But in a constant expression the address will be folded
- away, so look through it now. */
- if (i == 0 && DECL_NONSTATIC_MEMBER_P (fun)
- && !DECL_CONSTRUCTOR_P (fun))
- {
- if (is_this_parameter (x))
- /* OK. */;
- else if (!potential_constant_expression_1 (x, rval, flags))
- {
- if (flags & tf_error)
- error ("object argument is not a potential constant "
- "expression");
- return false;
- }
- }
- else if (!potential_constant_expression_1 (x, rval, flags))
+ if (!potential_constant_expression_1 (x, rval, flags))
{
if (flags & tf_error)
error ("argument in position %qP is not a "
new file mode 100644
index 0000000..833318b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/regress/call1.C
@@ -0,0 +1,13 @@
+// PR c++/48500
+// { dg-options -std=c++0x }
+
+struct linked_ptr {
+};
+template <typename T> linked_ptr make_linked_ptr(T* ptr);
+struct Concrete;
+struct NewedClass {
+ NewedClass(const Concrete& req){}
+};
+template<typename ArgT> void AddObjToChange(const ArgT& req) {
+ linked_ptr p = make_linked_ptr(new NewedClass(req));
+}
--
1.7.0.4

View File

@ -1,26 +0,0 @@
From 6b290e64ee2bbe7974ee43ce49297ee9496f18d6 Mon Sep 17 00:00:00 2001
From: kargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 21:41:35 +0000
Subject: [PATCH] 2011-04-08 Steven G. Kargl <kargl@gcc.gnu.org>
PR target/47829
gcc/config.gcc: disable unwind table generation for crtbegin/crtend
on i386-*-freebsd.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172214 138bc75d-0d04-0410-961f-82ee72b054a4
index 58f6787..1f13564 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1212,6 +1212,7 @@ x86_64-*-elf*)
;;
i[34567]86-*-freebsd*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h"
+ tmake_file="${tmake_file} i386/t-crtstuff"
;;
x86_64-*-freebsd*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/x86-64.h i386/freebsd.h i386/freebsd64.h"
--
1.7.0.4

View File

@ -1,24 +0,0 @@
From fcc3e3a4ba3138d25c93ba5f996cac1660788bb9 Mon Sep 17 00:00:00 2001
From: mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Apr 2011 23:56:45 +0000
Subject: [PATCH] PR testsuite/48506
* gcc.dg/tree-ssa/ssa-ccp-17.c: Robustify against ports that
default to fno-common.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172219 138bc75d-0d04-0410-961f-82ee72b054a4
index 7d769ae..aece3c7 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-17.c
@@ -18,7 +18,7 @@ int bar(void)
return ((struct Foo *)p)->i;
}
-const struct Foo g;
+extern const struct Foo g;
int foobar(void)
{
--
1.7.0.4

View File

@ -1,24 +0,0 @@
From 8216e1c4c23928723f8e1583bf7e014813bb2c07 Mon Sep 17 00:00:00 2001
From: baldrick <baldrick@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 9 Apr 2011 16:14:07 +0000
Subject: [PATCH] Bail out rather than crashing in array_type_nelts if TYPE_MAX_VALUE is null.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172226 138bc75d-0d04-0410-961f-82ee72b054a4
index 405b549..4d6ca36 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2453,6 +2453,10 @@ array_type_nelts (const_tree type)
min = TYPE_MIN_VALUE (index_type);
max = TYPE_MAX_VALUE (index_type);
+ /* TYPE_MAX_VALUE may not be set if the array has unknown length. */
+ if (!max)
+ return error_mark_node;
+
return (integer_zerop (min)
? max
: fold_build2 (MINUS_EXPR, TREE_TYPE (max), max, min));
--
1.7.0.4

View File

@ -1,24 +0,0 @@
From f96c29b23a4f631242aae823f9735a33e8e1cf0a Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 9 Apr 2011 19:04:11 +0000
Subject: [PATCH] PR c++/48528
* g++.dg/cpp0x/sfinae10.C: Remove abstract class.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172230 138bc75d-0d04-0410-961f-82ee72b054a4
index ede8b70..72dbce0 100644
--- a/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
+++ b/gcc/testsuite/g++.dg/cpp0x/sfinae10.C
@@ -10,9 +10,7 @@ decltype(T(std::declval<Args>()...), char()) f(int);
template<class, class...>
char (&f(...))[2];
-struct A { virtual ~A() = 0; };
struct B {};
-static_assert(sizeof(f<A, int, int>(0)) != 1, "Error"); // a
static_assert(sizeof(f<B, void, int>(0)) != 1, "Error"); // b
static_assert(sizeof(f<void, int, int>(0)) != 1, "Error"); // c
--
1.7.0.4

View File

@ -1,74 +0,0 @@
From 7d736b8d0fb4f7892a5646ca3581b9ab01cb2971 Mon Sep 17 00:00:00 2001
From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 10 Apr 2011 16:19:41 +0000
Subject: [PATCH] 2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/48465
* configure.ac (libtool_VERSION): Bump library version to 6:16:0.
* configure: Regenerate.
* config/abi/pre/gnu.ver (GLIBCXX_3.4.16): Export missing symbols.
* testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.16.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172240 138bc75d-0d04-0410-961f-82ee72b054a4
index fa52672..839f846 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -1264,6 +1264,14 @@ GLIBCXX_3.4.15 {
} GLIBCXX_3.4.14;
+GLIBCXX_3.4.16 {
+
+ # libstdc++/48465
+ _ZNSs10_S_compareE[jmy][jmy];
+ _ZNSbIwSt11char_traitsIwESaIwEE10_S_compareE[jmy][jmy];
+
+} GLIBCXX_3.4.15;
+
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.3 {
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index 4e1661a..c321e76 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -2825,7 +2825,7 @@ ac_config_headers="$ac_config_headers config.h"
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:15:0
+libtool_VERSION=6:16:0
# Find the rest of the source tree framework.
diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac
index 128b9c5..ccf1230 100644
--- a/libstdc++-v3/configure.ac
+++ b/libstdc++-v3/configure.ac
@@ -12,7 +12,7 @@ AC_CONFIG_HEADER(config.h)
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:15:0
+libtool_VERSION=6:16:0
AC_SUBST(libtool_VERSION)
# Find the rest of the source tree framework.
diff --git a/libstdc++-v3/testsuite/util/testsuite_abi.cc b/libstdc++-v3/testsuite/util/testsuite_abi.cc
index a533311..ea100b6 100644
--- a/libstdc++-v3/testsuite/util/testsuite_abi.cc
+++ b/libstdc++-v3/testsuite/util/testsuite_abi.cc
@@ -193,6 +193,7 @@ check_version(symbol& test, bool added)
known_versions.push_back("GLIBCXX_3.4.13");
known_versions.push_back("GLIBCXX_3.4.14");
known_versions.push_back("GLIBCXX_3.4.15");
+ known_versions.push_back("GLIBCXX_3.4.16");
known_versions.push_back("GLIBCXX_LDBL_3.4");
known_versions.push_back("GLIBCXX_LDBL_3.4.7");
known_versions.push_back("GLIBCXX_LDBL_3.4.10");
--
1.7.0.4

View File

@ -1,75 +0,0 @@
From f6e12aec843ba3a839f49b60a5ca092f2fadd876 Mon Sep 17 00:00:00 2001
From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 10 Apr 2011 16:29:05 +0000
Subject: [PATCH] 2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
PR libstdc++/48541
* include/std/functional (_Base_manager::_M_get_pointer): Use
addressof.
* testsuite/20_util/function/48541.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172242 138bc75d-0d04-0410-961f-82ee72b054a4
index 6643b76..660e371 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1586,7 +1586,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type)
_M_get_pointer(const _Any_data& __source)
{
const _Functor* __ptr =
- __stored_locally? &__source._M_access<_Functor>()
+ __stored_locally? std::__addressof(__source._M_access<_Functor>())
/* have stored a pointer */ : __source._M_access<_Functor*>();
return const_cast<_Functor*>(__ptr);
}
diff --git a/libstdc++-v3/testsuite/20_util/function/48451.cc b/libstdc++-v3/testsuite/20_util/function/48451.cc
new file mode 100644
index 0000000..f812367
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/48451.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/48451
+
+#include <functional>
+
+struct X {
+ void operator () () const { }
+ float operator & () const { return 1.2345; }
+};
+
+void test01()
+{
+ X x;
+ std::function<void()> f(x);
+ f();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,106 +0,0 @@
From 2173abe5d6f3f3157317caa470226e13827c3df9 Mon Sep 17 00:00:00 2001
From: redi <redi@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 10 Apr 2011 16:34:34 +0000
Subject: [PATCH] 2011-04-10 Jonathan Wakely <jwakely.gcc@gmail.com>
* testsuite/20_util/function/48451.cc: Rename to...
* testsuite/20_util/function/48541.cc: This.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172243 138bc75d-0d04-0410-961f-82ee72b054a4
deleted file mode 100644
index f812367..0000000
--- a/libstdc++-v3/testsuite/20_util/function/48451.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// { dg-options "-std=gnu++0x" }
-// { dg-do compile }
-// Copyright (C) 2011 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 3, or (at your option)
-// any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING3. If not see
-// <http://www.gnu.org/licenses/>.
-
-// libstdc++/48451
-
-#include <functional>
-
-struct X {
- void operator () () const { }
- float operator & () const { return 1.2345; }
-};
-
-void test01()
-{
- X x;
- std::function<void()> f(x);
- f();
-}
-
-int main()
-{
- test01();
- return 0;
-}
diff --git a/libstdc++-v3/testsuite/20_util/function/48541.cc b/libstdc++-v3/testsuite/20_util/function/48541.cc
new file mode 100644
index 0000000..f812367
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/48541.cc
@@ -0,0 +1,40 @@
+// { dg-options "-std=gnu++0x" }
+// { dg-do compile }
+// Copyright (C) 2011 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+// libstdc++/48451
+
+#include <functional>
+
+struct X {
+ void operator () () const { }
+ float operator & () const { return 1.2345; }
+};
+
+void test01()
+{
+ X x;
+ std::function<void()> f(x);
+ f();
+}
+
+int main()
+{
+ test01();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,37 +0,0 @@
From 0344e764781d1c1b27f07f6f973b9797d8d6285c Mon Sep 17 00:00:00 2001
From: ro <ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 11 Apr 2011 10:42:23 +0000
Subject: [PATCH] Backport from mainline:
2011-04-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/alpha/osf5.h (MAX_OFILE_ALIGNMENT): Define.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172253 138bc75d-0d04-0410-961f-82ee72b054a4
index 84a3c24..97a789f 100644
--- a/gcc/config/alpha/osf5.h
+++ b/gcc/config/alpha/osf5.h
@@ -1,7 +1,7 @@
/* Definitions of target machine for GNU compiler, for DEC Alpha on
Tru64 UNIX V5.1.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001,
- 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010
+ 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
Free Software Foundation, Inc.
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
@@ -223,6 +223,10 @@ __enable_execute_stack (void *addr) \
#define LD_INIT_SWITCH "-init"
#define LD_FINI_SWITCH "-fini"
+/* From Tru64 UNIX Object File and Symbol Table Format Specification,
+ 2.3.5 Alignment, p.19. */
+#define MAX_OFILE_ALIGNMENT (64 * 1024 * BITS_PER_UNIT)
+
/* Select a format to encode pointers in exception handling data. CODE
is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is
true if the symbol may be affected by dynamic relocations.
--
1.7.0.4

View File

@ -1,35 +0,0 @@
From ec818a73c8e43d77fefc29593ef84e69b0cac39e Mon Sep 17 00:00:00 2001
From: jsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 11 Apr 2011 15:26:47 +0000
Subject: [PATCH] * common.opt (Tbss=, Tdata=, Ttext=): New options.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172260 138bc75d-0d04-0410-961f-82ee72b054a4
index c2f2d6c..6056551 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -456,12 +456,21 @@ Driver Joined Separate
Tbss
Driver Separate
+Tbss=
+Driver Joined
+
Tdata
Driver Separate
+Tdata=
+Driver Joined
+
Ttext
Driver Separate
+Ttext=
+Driver Joined
+
W
Common RejectNegative Warning Alias(Wextra)
This switch is deprecated; use -Wextra instead
--
1.7.0.4

View File

@ -1,42 +0,0 @@
From 514b92d849b08f3fb7a8194a822b0b8609776564 Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 00:20:18 +0000
Subject: [PATCH] PR c++/48523
* tree.c (maybe_dummy_object): Use build_x_indirect_ref rather
than cp_build_indirect_ref.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172293 138bc75d-0d04-0410-961f-82ee72b054a4
index 56639ff..15ee741 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -2421,7 +2421,7 @@ maybe_dummy_object (tree type, tree* binfop)
else if (current != current_class_type
&& context == nonlambda_method_basetype ())
/* In a lambda, need to go through 'this' capture. */
- decl = (cp_build_indirect_ref
+ decl = (build_x_indirect_ref
((lambda_expr_this_capture
(CLASSTYPE_LAMBDA_EXPR (current_class_type))),
RO_NULL, tf_warning_or_error));
new file mode 100644
index 0000000..29cd2a9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this4.C
@@ -0,0 +1,13 @@
+// PR c++/48523
+// { dg-options -std=c++0x }
+
+template<typename>
+struct X
+{
+ bool b;
+
+ void f()
+ {
+ [this]{ return b; };
+ }
+};
--
1.7.0.4

View File

@ -1,38 +0,0 @@
From 373ffb66c10a25abb4c48a027fea4e6cf8c4cc5d Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 00:20:32 +0000
Subject: [PATCH] PR c++/48534
* cvt.c (ocp_convert): Use build_nop to convert to underlying type
of scoped enum.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172294 138bc75d-0d04-0410-961f-82ee72b054a4
index 290b926..ce4f985 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -731,7 +731,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags)
/* We can't implicitly convert a scoped enum to bool, so convert
to the underlying type first. */
if (SCOPED_ENUM_P (intype) && (convtype & CONV_STATIC))
- e = convert (ENUM_UNDERLYING_TYPE (intype), e);
+ e = build_nop (ENUM_UNDERLYING_TYPE (intype), e);
return cp_truthvalue_conversion (e);
}
new file mode 100644
index 0000000..55a1ab4
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/enum10.C
@@ -0,0 +1,9 @@
+// PR c++/48534
+// { dg-options -std=c++0x }
+
+enum class OpSE : bool;
+
+int main()
+{
+ return static_cast<bool>(OpSE());
+}
--
1.7.0.4

View File

@ -1,51 +0,0 @@
From b58a503c5dbde32cbb9bd48ea16ff868d2023cf9 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 06:53:13 +0000
Subject: [PATCH] PR c/48517
* c-typeck.c (store_init_value): Set TREE_TYPE (decl) to
qualified type.
* gcc.c-torture/compile/pr48517.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172300 138bc75d-0d04-0410-961f-82ee72b054a4
index a22bb73..fca369c 100644
--- a/gcc/c-typeck.c
+++ b/gcc/c-typeck.c
@@ -5773,11 +5773,13 @@ store_init_value (location_t init_loc, tree decl, tree init, tree origtype)
/* For int foo[] = (int [3]){1}; we need to set array size
now since later on array initializer will be just the
brace enclosed list of the compound literal. */
+ tree etype = strip_array_types (TREE_TYPE (decl));
type = build_distinct_type_copy (TYPE_MAIN_VARIANT (type));
- TREE_TYPE (decl) = type;
TYPE_DOMAIN (type) = TYPE_DOMAIN (TREE_TYPE (cldecl));
layout_type (type);
layout_decl (cldecl, 0);
+ TREE_TYPE (decl)
+ = c_build_qualified_type (type, TYPE_QUALS (etype));
}
}
}
new file mode 100644
index 0000000..30b3ecb
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr48517.c
@@ -0,0 +1,13 @@
+/* PR c/48517 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+void bar (const unsigned short *);
+
+void
+foo (void)
+{
+ static const unsigned short array[] = (const unsigned short []) { 0x0D2B };
+ const unsigned short *ptr = array;
+ bar (ptr);
+}
--
1.7.0.4

View File

@ -1,255 +0,0 @@
From 872b1920a12548af70c3866daadc4a67d05416b1 Mon Sep 17 00:00:00 2001
From: paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 09:05:41 +0000
Subject: [PATCH] 2011-04-12 Allan McRae <allan@archlinux.org>
PR libstdc++/48566
* testsuite/tr1/6_containers/unordered_map/requirements/
iterator_null_neg.cc: Include <cstddef>.
* testsuite/tr1/6_containers/unordered_set/requirements/
iterator_null_neg.cc: Likewise.
* testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc: Include
<cstring>.
* testsuite/util/testsuite_common_types.h: Include <limits>.
* testsuite/29_atomics/atomic_integral/cons/assign_neg.cc:
Adjust dg-error line numbers.
* testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
* testsuite/29_atomics/atomic_integral/operators/increment_neg.cc:
Likewise.
* testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc:
Likewise.
* testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc:
Likewise.
* testsuite/29_atomics/atomic/cons/assign_neg.cc: Likewise.
* testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172304 138bc75d-0d04-0410-961f-82ee72b054a4
index a6bba98..245f18f 100644
--- a/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
+++ b/libstdc++-v3/testsuite/27_io/basic_filebuf/seekoff/wchar_t/4.cc
@@ -1,6 +1,6 @@
// { dg-require-fileio "" }
-// Copyright (C) 2010 Free Software Foundation, Inc.
+// Copyright (C) 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -21,6 +21,7 @@
#include <fstream>
#include <cwchar>
+#include <cstring>
#include <testsuite_hooks.h>
void test01()
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
index 6b04cf8..68b64f0 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/assign_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 571 }
+// { dg-error "deleted" "" { target *-*-* } 572 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
index cdd95fd..79182bb 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic/cons/copy_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -28,5 +28,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 610 }
+// { dg-error "deleted" "" { target *-*-* } 611 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
index 265878d..306fd4c 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/assign_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,5 +29,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 571 }
+// { dg-error "deleted" "" { target *-*-* } 572 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
index acb8006..56a41d1 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/cons/copy_neg.cc
@@ -1,7 +1,7 @@
// { dg-options "-std=gnu++0x" }
// { dg-do compile }
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -29,5 +29,5 @@ int main()
return 0;
}
-// { dg-error "deleted" "" { target *-*-* } 610 }
+// { dg-error "deleted" "" { target *-*-* } 611 }
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
index b2f1ea4..4ee4e7f 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -27,7 +27,7 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 427 }
// { dg-error "operator" "" { target *-*-* } 428 }
// { dg-error "operator" "" { target *-*-* } 429 }
+// { dg-error "operator" "" { target *-*-* } 430 }
// { dg-excess-errors "In file included from" }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
index dd84c83..3e0a975 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -28,6 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 384 }
// { dg-error "operator" "" { target *-*-* } 385 }
// { dg-error "operator" "" { target *-*-* } 386 }
+// { dg-error "operator" "" { target *-*-* } 387 }
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
index 90b7555..5047be7 100644
--- a/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_integral/operators/increment_neg.cc
@@ -2,7 +2,7 @@
// { dg-do compile }
// -*- C++ -*-
-// Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
+// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as
@@ -28,6 +28,6 @@ int main()
return 0;
}
-// { dg-error "operator" "" { target *-*-* } 362 }
// { dg-error "operator" "" { target *-*-* } 363 }
// { dg-error "operator" "" { target *-*-* } 364 }
+// { dg-error "operator" "" { target *-*-* } 365 }
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc
index 97b4b67..882ca36 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/requirements/iterator_null_neg.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <tr1/unordered_map>
+#include <cstddef>
std::tr1::unordered_map<int, int>::iterator it1 = NULL; // { dg-error "conversion" }
std::tr1::unordered_map<int, int>::const_iterator cit1 = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc
index bf2f4ff..a0747ec 100644
--- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc
+++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/requirements/iterator_null_neg.cc
@@ -1,6 +1,6 @@
// 2005-09-10 Paolo Carlini <pcarlini@suse.de>
//
-// Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+// Copyright (C) 2005, 2009, 2011 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -22,6 +22,7 @@
// libstdc++/23781
#include <tr1/unordered_set>
+#include <cstddef>
std::tr1::unordered_set<int>::iterator it4 = NULL; // { dg-error "conversion" }
std::tr1::unordered_set<int>::const_iterator cit4 = NULL; // { dg-error "conversion" }
diff --git a/libstdc++-v3/testsuite/util/testsuite_common_types.h b/libstdc++-v3/testsuite/util/testsuite_common_types.h
index f597da2..a4f59ac 100644
--- a/libstdc++-v3/testsuite/util/testsuite_common_types.h
+++ b/libstdc++-v3/testsuite/util/testsuite_common_types.h
@@ -1,7 +1,7 @@
// -*- C++ -*-
// typelist for the C++ library testsuite.
//
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -37,6 +37,7 @@
#include <list>
#include <deque>
#include <string>
+#include <limits>
#include <map>
#include <set>
--
1.7.0.4

View File

@ -1,43 +0,0 @@
From a03834fec84b808ccef5c0abb5c35d069d7ad868 Mon Sep 17 00:00:00 2001
From: nickc <nickc@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 11:33:07 +0000
Subject: [PATCH] * config/v850/v850.c (expand_prologue): Do not use the CALLT
instruction for interrupt handlers if the target is the basic V850
architecture.
(expand_epilogue): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172312 138bc75d-0d04-0410-961f-82ee72b054a4
index 6d6ed78..d75f88c 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -1686,7 +1686,7 @@ expand_prologue (void)
/* Save/setup global registers for interrupt functions right now. */
if (interrupt_handler)
{
- if (! TARGET_DISABLE_CALLT)
+ if (! TARGET_DISABLE_CALLT && (TARGET_V850E || TARGET_V850E2_ALL))
emit_insn (gen_callt_save_interrupt ());
else
emit_insn (gen_save_interrupt ());
@@ -1768,7 +1768,7 @@ expand_prologue (void)
/* Special case interrupt functions that save all registers for a call. */
if (interrupt_handler && ((1L << LINK_POINTER_REGNUM) & reg_saved) != 0)
{
- if (! TARGET_DISABLE_CALLT)
+ if (! TARGET_DISABLE_CALLT && (TARGET_V850E || TARGET_V850E2_ALL))
emit_insn (gen_callt_save_all_interrupt ());
else
emit_insn (gen_save_all_interrupt ());
@@ -2019,7 +2019,7 @@ expand_epilogue (void)
/* And return or use reti for interrupt handlers. */
if (interrupt_handler)
{
- if (! TARGET_DISABLE_CALLT)
+ if (! TARGET_DISABLE_CALLT && (TARGET_V850E || TARGET_V850E2_ALL))
emit_insn (gen_callt_return_interrupt ());
else
emit_jump_insn (gen_return_interrupt ());
--
1.7.0.4

View File

@ -1,128 +0,0 @@
From 5b05a527f1368e4ca9f71a8ec8124a2c64661007 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 13:44:33 +0000
Subject: [PATCH] PR rtl-optimization/48549
* combine.c (propagate_for_debug): Also stop after BB_END of
this_basic_block. Process LAST and just stop processing after it.
(combine_instructions): If last_combined_insn has been deleted,
set last_combined_insn to its PREV_INSN.
* g++.dg/opt/pr48549.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172319 138bc75d-0d04-0410-961f-82ee72b054a4
index 5f179c6..d563999 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -1178,8 +1178,13 @@ combine_instructions (rtx f, unsigned int nregs)
next = 0;
if (NONDEBUG_INSN_P (insn))
{
+ while (last_combined_insn
+ && INSN_DELETED_P (last_combined_insn))
+ last_combined_insn = PREV_INSN (last_combined_insn);
if (last_combined_insn == NULL_RTX
- || DF_INSN_LUID (last_combined_insn) < DF_INSN_LUID (insn))
+ || BARRIER_P (last_combined_insn)
+ || BLOCK_FOR_INSN (last_combined_insn) != this_basic_block
+ || DF_INSN_LUID (last_combined_insn) <= DF_INSN_LUID (insn))
last_combined_insn = insn;
/* See if we know about function return values before this
@@ -2435,19 +2440,21 @@ propagate_for_debug_subst (rtx from, const_rtx old_rtx, void *data)
}
/* Replace all the occurrences of DEST with SRC in DEBUG_INSNs between INSN
- and LAST. */
+ and LAST, not including INSN, but including LAST. Also stop at the end
+ of THIS_BASIC_BLOCK. */
static void
propagate_for_debug (rtx insn, rtx last, rtx dest, rtx src)
{
- rtx next, loc;
+ rtx next, loc, end = NEXT_INSN (BB_END (this_basic_block));
struct rtx_subst_pair p;
p.to = src;
p.adjusted = false;
next = NEXT_INSN (insn);
- while (next != last)
+ last = NEXT_INSN (last);
+ while (next != last && next != end)
{
insn = next;
next = NEXT_INSN (insn);
new file mode 100644
index 0000000..30799ee
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr48549.C
@@ -0,0 +1,63 @@
+// PR rtl-optimization/48549
+// { dg-do compile }
+// { dg-options "-fcompare-debug -O2" }
+
+void
+foo (void *from, void *to)
+{
+ long offset = reinterpret_cast <long>(to) - reinterpret_cast <long>(from);
+ if (offset != static_cast <int>(offset))
+ *(int *) 0xC0DE = 0;
+ reinterpret_cast <int *>(from)[1] = offset;
+}
+struct A
+{
+ A () : a () {}
+ A (void *x) : a (x) {}
+ void *bar () { return a; }
+ void *a;
+};
+struct C;
+struct D;
+struct E : public A
+{
+ C m1 (int);
+ D m2 ();
+ E () {}
+ E (A x) : A (x) {}
+};
+struct C : public E
+{
+ C () {}
+ C (void *x) : E (x) {}
+};
+struct D : public E
+{
+ D (void *x) : E (x) {}
+};
+C
+E::m1 (int x)
+{
+ return (reinterpret_cast <char *>(bar ()) + x);
+}
+D
+E::m2 ()
+{
+ return reinterpret_cast <char *>(bar ());
+}
+struct B
+{
+ E a;
+ unsigned b : 16;
+ unsigned c : 1;
+};
+void
+baz (B *x)
+{
+ for (unsigned i = 0; i < 64; i++)
+ {
+ D d = x[i].a.m2 ();
+ C c = x[i].a.m1 (x[i].c);
+ foo (d.bar (), c.bar ());
+ }
+}
--
1.7.0.4

View File

@ -1,110 +0,0 @@
From abf56c82ebcb8ba287fc69b8961af55b4541a130 Mon Sep 17 00:00:00 2001
From: jamborm <jamborm@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Apr 2011 18:31:55 +0000
Subject: [PATCH] 2011-04-12 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/48195
* ipa-cp.c (ipcp_driver): Call ipa_check_create_node_params and
ipa_check_create_edge_args.
(ipcp_generate_summary): Do not call ipa_check_create_node_params and
ipa_check_create_edge_args.
* ipa-inline.c (inline_generate_summary): Do not call
ipa_check_create_node_params and ipa_check_create_edge_args.
* ipa-prop.c (ipa_analyze_node): Call ipa_check_create_node_params and
ipa_check_create_edge_args.
* testsuite/gcc.dg/ipa/pr48195.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172332 138bc75d-0d04-0410-961f-82ee72b054a4
index db0941c..aad5d78 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -1516,6 +1516,8 @@ ipcp_driver (void)
ipa_print_all_params (dump_file);
ipa_print_all_jump_functions (dump_file);
}
+ ipa_check_create_node_params ();
+ ipa_check_create_edge_args ();
/* 2. Do the interprocedural propagation. */
ipcp_iterate_stage ();
/* 3. Insert the constants found to the functions. */
@@ -1543,8 +1545,6 @@ ipcp_generate_summary (void)
if (dump_file)
fprintf (dump_file, "\nIPA constant propagation start:\n");
- ipa_check_create_node_params ();
- ipa_check_create_edge_args ();
ipa_register_cgraph_hooks ();
for (node = cgraph_nodes; node; node = node->next)
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index 7ae5f96..b3c9215 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -2091,11 +2091,7 @@ inline_generate_summary (void)
cgraph_add_function_insertion_hook (&add_new_function, NULL);
if (flag_indirect_inlining)
- {
- ipa_register_cgraph_hooks ();
- ipa_check_create_node_params ();
- ipa_check_create_edge_args ();
- }
+ ipa_register_cgraph_hooks ();
for (node = cgraph_nodes; node; node = node->next)
if (node->analyzed)
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 82599f1..589bc16 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -1522,10 +1522,13 @@ ipa_analyze_params_uses (struct cgraph_node *node,
void
ipa_analyze_node (struct cgraph_node *node)
{
- struct ipa_node_params *info = IPA_NODE_REF (node);
+ struct ipa_node_params *info;
struct param_analysis_info *parms_info;
int i, param_count;
+ ipa_check_create_node_params ();
+ ipa_check_create_edge_args ();
+ info = IPA_NODE_REF (node);
push_cfun (DECL_STRUCT_FUNCTION (node->decl));
current_function_decl = node->decl;
ipa_initialize_node_params (node);
new file mode 100644
index 0000000..1cf7a7f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/ipa/pr48195.c
@@ -0,0 +1,24 @@
+/* { dg-do link } */
+/* { dg-options "-O2 -flto --param partial-inlining-entry-probability=101" } */
+
+extern void abort(void);
+
+int i;
+
+void __attribute__ ((constructor))
+c2 ()
+{
+ if (i)
+ abort ();
+}
+
+void __attribute__ ((destructor))
+d1 ()
+{
+ if (i)
+ abort ();
+}
+
+void main ()
+{
+}
--
1.7.0.4

View File

@ -1,22 +0,0 @@
From 811af0cad0121e89e3a3908dd71ca32187281e19 Mon Sep 17 00:00:00 2001
From: ramana <ramana@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 07:41:08 +0000
Subject: [PATCH] Fix PR target/48090
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172363 138bc75d-0d04-0410-961f-82ee72b054a4
index b0f31f5..d9f8bb8 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -3690,7 +3690,7 @@
;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1).
;; The first alternative allows the common case of a *full* overlap.
(define_insn "*arm_negdi2"
- [(set (match_operand:DI 0 "s_register_operand" "=&r,r")
+ [(set (match_operand:DI 0 "s_register_operand" "=r,&r")
(neg:DI (match_operand:DI 1 "s_register_operand" "0,r")))
(clobber (reg:CC CC_REGNUM))]
"TARGET_ARM"
--
1.7.0.4

View File

@ -1,57 +0,0 @@
From a236530cd5ac2466b1ca3b510b6bdb493c7b5342 Mon Sep 17 00:00:00 2001
From: dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 15:19:40 +0000
Subject: [PATCH] Fix PR c++/48574
gcc/cp/
* class.c (fixed_type_or_null): We cannot determine the dynamic
type of a reference variable if its initializer is dependent.
gcc/testsuite/
* g++.dg/template/dependent-expr7.C: New test case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172376 138bc75d-0d04-0410-961f-82ee72b054a4
index 42066c3..d19610a 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -5937,6 +5937,7 @@ fixed_type_or_null (tree instance, int *nonnull, int *cdtorp)
itself. */
if (TREE_CODE (instance) == VAR_DECL
&& DECL_INITIAL (instance)
+ && !type_dependent_expression_p (DECL_INITIAL (instance))
&& !htab_find (ht, instance))
{
tree type;
new file mode 100644
index 0000000..b246820
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/dependent-expr7.C
@@ -0,0 +1,22 @@
+// Origin PR c++/48574
+// { dg-do compile }
+
+struct A
+{
+ virtual void foo();
+};
+
+template <typename T>
+void
+bar(T x)
+{
+ A &b = *x;
+ b.foo ();
+}
+
+void
+foo()
+{
+ A a;
+ bar(&a);
+}
--
1.7.0.4

View File

@ -1,116 +0,0 @@
From 235c1ad4230b29a189d4300841c4d8c3dd144388 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 15:47:40 +0000
Subject: [PATCH] PR c++/48570
* semantics.c (cxx_eval_array_reference): Handle reading from
wchar_t, char16_t and char32_t STRING_CST.
* g++.dg/cpp0x/constexpr-wstring1.C: New test.
* g++.dg/cpp0x/constexpr-wstring2.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172378 138bc75d-0d04-0410-961f-82ee72b054a4
index e6bb1dc..cf8d329 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -6279,7 +6279,7 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
non_constant_p);
tree index, oldidx;
HOST_WIDE_INT i;
- unsigned len;
+ unsigned len, elem_nchars = 1;
if (*non_constant_p)
return t;
oldidx = TREE_OPERAND (t, 1);
@@ -6291,9 +6291,14 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
return t;
else if (addr)
return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
- len = (TREE_CODE (ary) == CONSTRUCTOR
- ? CONSTRUCTOR_NELTS (ary)
- : (unsigned)TREE_STRING_LENGTH (ary));
+ if (TREE_CODE (ary) == CONSTRUCTOR)
+ len = CONSTRUCTOR_NELTS (ary);
+ else
+ {
+ elem_nchars = (TYPE_PRECISION (TREE_TYPE (TREE_TYPE (ary)))
+ / TYPE_PRECISION (char_type_node));
+ len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
+ }
if (compare_tree_int (index, len) >= 0)
{
if (!allow_non_constant)
@@ -6304,9 +6309,16 @@ cxx_eval_array_reference (const constexpr_call *call, tree t,
i = tree_low_cst (index, 0);
if (TREE_CODE (ary) == CONSTRUCTOR)
return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
- else
+ else if (elem_nchars == 1)
return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
TREE_STRING_POINTER (ary)[i]);
+ else
+ {
+ tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
+ return native_interpret_expr (type, (const unsigned char *)
+ TREE_STRING_POINTER (ary)
+ + i * elem_nchars, elem_nchars);
+ }
/* Don't VERIFY_CONSTANT here. */
}
new file mode 100644
index 0000000..059977b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring1.C
@@ -0,0 +1,34 @@
+// PR c++/48570
+// { dg-do run }
+// { dg-options "-std=c++0x" }
+
+extern "C" void abort ();
+constexpr wchar_t foo (int i) { return L"0123"[i]; }
+constexpr char16_t bar (int i) { return u"0123"[i]; }
+constexpr char32_t baz (int i) { return U"0123"[i]; }
+const wchar_t foo0 = foo (0);
+const wchar_t foo1 = foo (1);
+const wchar_t foo2 = foo (2);
+const wchar_t foo3 = foo (3);
+const wchar_t foo4 = foo (4);
+const char16_t bar0 = bar (0);
+const char16_t bar1 = bar (1);
+const char16_t bar2 = bar (2);
+const char16_t bar3 = bar (3);
+const char16_t bar4 = bar (4);
+const char32_t baz0 = baz (0);
+const char32_t baz1 = baz (1);
+const char32_t baz2 = baz (2);
+const char32_t baz3 = baz (3);
+const char32_t baz4 = baz (4);
+
+int
+main ()
+{
+ if (foo0 != L'0' || foo1 != L'1' || foo2 != L'2' || foo3 != L'3' || foo4 != L'\0')
+ abort ();
+ if (bar0 != u'0' || bar1 != u'1' || bar2 != u'2' || bar3 != u'3' || bar4 != u'\0')
+ abort ();
+ if (baz0 != U'0' || baz1 != U'1' || baz2 != U'2' || baz3 != U'3' || baz4 != U'\0')
+ abort ();
+}
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
new file mode 100644
index 0000000..4fc8980
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-wstring2.C
@@ -0,0 +1,7 @@
+// PR c++/48570
+// { dg-do compile }
+// { dg-options -std=c++0x }
+
+constexpr wchar_t c1 = L"hi"[3]; // { dg-error "out of bound" }
+constexpr char16_t c2 = u"hi"[3]; // { dg-error "out of bound" }
+constexpr char32_t c3 = U"hi"[3]; // { dg-error "out of bound" }
--
1.7.0.4

View File

@ -1,93 +0,0 @@
From f16c1783b4b2c93a42eb36b4f136ec46bd3ce834 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 15:52:17 +0000
Subject: [PATCH] PR middle-end/48591
* omp-low.c (expand_omp_atomic_fetch_op): Return false if decl is
NULL.
(expand_omp_atomic_pipeline): Return false if cmpxchg is NULL.
* gcc.dg/gomp/pr48591.c: New test.
* testsuite/libgomp.c/pr48591.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172381 138bc75d-0d04-0410-961f-82ee72b054a4
index c3f2178..5b0fdff 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -5005,6 +5005,8 @@ expand_omp_atomic_fetch_op (basic_block load_bb,
return false;
decl = built_in_decls[base + index + 1];
+ if (decl == NULL_TREE)
+ return false;
itype = TREE_TYPE (TREE_TYPE (decl));
if (direct_optab_handler (optab, TYPE_MODE (itype)) == CODE_FOR_nothing)
@@ -5056,6 +5058,8 @@ expand_omp_atomic_pipeline (basic_block load_bb, basic_block store_bb,
edge e;
cmpxchg = built_in_decls[BUILT_IN_VAL_COMPARE_AND_SWAP_N + index + 1];
+ if (cmpxchg == NULL_TREE)
+ return false;
type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (addr)));
itype = TREE_TYPE (TREE_TYPE (cmpxchg));
new file mode 100644
index 0000000..e6cb106
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/gomp/pr48591.c
@@ -0,0 +1,22 @@
+/* PR middle-end/48591 */
+/* { dg-do compile { target i?86-*-* x86_64-*-* ia64-*-* } } */
+/* { dg-options "-fopenmp" } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ __float128 f = 0.0;
+ int i;
+ #pragma omp parallel for reduction(+:f)
+ for (i = 0; i < 128; i++)
+ f += 0.5Q;
+ if (f != 64.0Q)
+ abort ();
+ #pragma omp atomic
+ f += 8.5Q;
+ if (f != 72.5Q)
+ abort ();
+ return 0;
+}
new file mode 100644
index 0000000..18dfd7f
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c/pr48591.c
@@ -0,0 +1,22 @@
+/* PR middle-end/48591 */
+/* { dg-do run { target i?86-*-linux* x86_64-*-linux* ia64-*-linux* } } */
+/* { dg-options "-fopenmp" } */
+
+extern void abort (void);
+
+int
+main ()
+{
+ __float128 f = 0.0;
+ int i;
+ #pragma omp parallel for reduction(+:f)
+ for (i = 0; i < 128; i++)
+ f += 0.5Q;
+ if (f != 64.0Q)
+ abort ();
+ #pragma omp atomic
+ f += 8.5Q;
+ if (f != 72.5Q)
+ abort ();
+ return 0;
+}
--
1.7.0.4

View File

@ -1,182 +0,0 @@
From 348c7b9400ed5fe0d8c3c077f8223ca359bed036 Mon Sep 17 00:00:00 2001
From: pault <pault@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 18:38:17 +0000
Subject: [PATCH] 2011-04-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/48360
PR fortran/48456
* trans-array.c (get_std_lbound): For derived type variables
return array valued component lbound.
2011-04-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/48360
PR fortran/48456
* gfortran.dg/realloc_on_assign_6.f03: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172390 138bc75d-0d04-0410-961f-82ee72b054a4
index ac08c42..3d4a52a 100644
--- a/gcc/fortran/trans-array.c
+++ b/gcc/fortran/trans-array.c
@@ -6707,6 +6707,8 @@ get_std_lbound (gfc_expr *expr, tree desc, int dim, bool assumed_size)
tree stride;
tree cond, cond1, cond3, cond4;
tree tmp;
+ gfc_ref *ref;
+
if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (desc)))
{
tmp = gfc_rank_cst[dim];
@@ -6740,6 +6742,14 @@ get_std_lbound (gfc_expr *expr, tree desc, int dim, bool assumed_size)
else if (expr->expr_type == EXPR_VARIABLE)
{
tmp = TREE_TYPE (expr->symtree->n.sym->backend_decl);
+ for (ref = expr->ref; ref; ref = ref->next)
+ {
+ if (ref->type == REF_COMPONENT
+ && ref->u.c.component->as
+ && ref->next
+ && ref->next->u.ar.type == AR_FULL)
+ tmp = TREE_TYPE (ref->u.c.component->backend_decl);
+ }
return GFC_TYPE_ARRAY_LBOUND(tmp, dim);
}
else if (expr->expr_type == EXPR_FUNCTION)
new file mode 100644
index 0000000..7c170eb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/realloc_on_assign_6.f03
@@ -0,0 +1,129 @@
+! { dg-do compile }
+! Test the fix for PR48456 and PR48360 in which the backend
+! declarations for components were not located in the automatic
+! reallocation on assignments, thereby causing ICEs.
+!
+! Contributed by Keith Refson <krefson@googlemail.com>
+! and Douglas Foulds <mixnmaster@gmail.com>
+!
+! This is PR48360
+
+module m
+ type mm
+ real, dimension(3,3) :: h0
+ end type mm
+end module m
+
+module gf33
+
+ real, allocatable, save, dimension(:,:) :: hmat
+
+contains
+ subroutine assignit
+
+ use m
+ implicit none
+
+ type(mm) :: mmv
+
+ hmat = mmv%h0
+ end subroutine assignit
+end module gf33
+
+! This is PR48456
+
+module custom_type
+
+integer, parameter :: dp = kind(0.d0)
+
+type :: my_type_sub
+ real(dp), dimension(5) :: some_vector
+end type my_type_sub
+
+type :: my_type
+ type(my_type_sub) :: some_element
+end type my_type
+
+end module custom_type
+
+module custom_interfaces
+
+interface
+ subroutine store_data_subroutine(vec_size)
+ implicit none
+ integer, intent(in) :: vec_size
+ integer :: k
+ end subroutine store_data_subroutine
+end interface
+
+end module custom_interfaces
+
+module store_data_test
+
+use custom_type
+
+save
+type(my_type), dimension(:), allocatable :: some_type_to_save
+
+end module store_data_test
+
+program test
+
+use store_data_test
+
+integer :: vec_size
+
+vec_size = 2
+
+call store_data_subroutine(vec_size)
+call print_after_transfer()
+
+end program test
+
+subroutine store_data_subroutine(vec_size)
+
+use custom_type
+use store_data_test
+
+implicit none
+
+integer, intent(in) :: vec_size
+integer :: k
+
+allocate(some_type_to_save(vec_size))
+
+do k = 1,vec_size
+
+ some_type_to_save(k)%some_element%some_vector(1) = 1.0_dp
+ some_type_to_save(k)%some_element%some_vector(2) = 2.0_dp
+ some_type_to_save(k)%some_element%some_vector(3) = 3.0_dp
+ some_type_to_save(k)%some_element%some_vector(4) = 4.0_dp
+ some_type_to_save(k)%some_element%some_vector(5) = 5.0_dp
+
+end do
+
+end subroutine store_data_subroutine
+
+subroutine print_after_transfer()
+
+use custom_type
+use store_data_test
+
+implicit none
+
+real(dp), dimension(:), allocatable :: C_vec
+integer :: k
+
+allocate(C_vec(5))
+
+do k = 1,size(some_type_to_save)
+
+ C_vec = some_type_to_save(k)%some_element%some_vector
+ print *, "C_vec", C_vec
+
+end do
+
+end subroutine print_after_transfer
+! { dg-final { cleanup-modules "m gf33" } }
+! { dg-final { cleanup-modules "custom_type custom_interfaces" } }
+! { dg-final { cleanup-modules "store_data_test" } }
--
1.7.0.4

View File

@ -1,75 +0,0 @@
From b711bf8d9e6f7b717bb87fa7a3514692efdecfaf Mon Sep 17 00:00:00 2001
From: jason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 20:51:23 +0000
Subject: [PATCH] PR c++/48594
* decl2.c (build_offset_ref_call_from_tree): Fix calling a functor
or pointer to (non-member) function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172395 138bc75d-0d04-0410-961f-82ee72b054a4
index f62f913..1217e42 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -4079,10 +4079,13 @@ build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
parameter. That must be done before the FN is transformed
because we depend on the form of FN. */
make_args_non_dependent (*args);
- object = build_non_dependent_expr (object);
- if (TREE_CODE (fn) == DOTSTAR_EXPR)
- object = cp_build_addr_expr (object, tf_warning_or_error);
- VEC_safe_insert (tree, gc, *args, 0, object);
+ if (TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
+ {
+ object = build_non_dependent_expr (object);
+ if (TREE_CODE (fn) == DOTSTAR_EXPR)
+ object = cp_build_addr_expr (object, tf_warning_or_error);
+ VEC_safe_insert (tree, gc, *args, 0, object);
+ }
/* Now that the arguments are done, transform FN. */
fn = build_non_dependent_expr (fn);
}
@@ -4101,7 +4104,10 @@ build_offset_ref_call_from_tree (tree fn, VEC(tree,gc) **args)
VEC_safe_insert (tree, gc, *args, 0, object_addr);
}
- expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
+ if (CLASS_TYPE_P (TREE_TYPE (fn)))
+ expr = build_op_call (fn, args, tf_warning_or_error);
+ else
+ expr = cp_build_function_call_vec (fn, args, tf_warning_or_error);
if (processing_template_decl && expr != error_mark_node)
expr = build_min_non_dep_call_vec (expr, orig_fn, orig_args);
new file mode 100644
index 0000000..8d6b77a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/operator11.C
@@ -0,0 +1,25 @@
+// PR c++/48594
+// Test for uses of (X->*Y)() that don't actually involve a
+// pointer to member function.
+
+struct A { } a;
+struct B { } b;
+struct C * cp;
+
+struct Func { void operator()(); };
+Func operator->* (A, int);
+
+typedef void (*pfn)();
+pfn operator->* (B, int);
+
+pfn C::*cpfn;
+Func C::*cfunc;
+
+template <class T>
+void f()
+{
+ (a->*1)();
+ (b->*1)();
+ (cp->*cpfn)();
+ (cp->*cfunc)();
+}
--
1.7.0.4

View File

@ -1,138 +0,0 @@
From ede3baf6fc1fe4972344051051daff1043f90ce3 Mon Sep 17 00:00:00 2001
From: danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 13 Apr 2011 22:36:59 +0000
Subject: [PATCH] Backport from mainline:
2011-04-08 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/48366
* config/pa/pa.c (hppa_register_move_cost): Increase to 18 cost of
move from floating point to shift amount register .
(emit_move_sequence): Remove secondary reload support for floating
point to shift amount amount register copies.
(pa_secondary_reload): Return GENERAL_REGS for floating point/shift
amount register copies.
* config/pa/pa32-regs.h (HARD_REGNO_MODE_OK): For shift amount
register, return false if mode isn't a scalar integer mode.
* config/pa/pa64-regs.h (HARD_REGNO_MODE_OK): Likewise.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172400 138bc75d-0d04-0410-961f-82ee72b054a4
index 98267b0..8a691c7 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -1467,6 +1467,8 @@ hppa_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED,
{
if (from == SHIFT_REGS)
return 0x100;
+ else if (to == SHIFT_REGS && FP_REG_CLASS_P (from))
+ return 18;
else if ((FP_REG_CLASS_P (from) && ! FP_REG_CLASS_P (to))
|| (FP_REG_CLASS_P (to) && ! FP_REG_CLASS_P (from)))
return 16;
@@ -1810,15 +1812,12 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg)
return 1;
}
/* Handle secondary reloads for SAR. These occur when trying to load
- the SAR from memory, FP register, or with a constant. */
+ the SAR from memory or a constant. */
else if (scratch_reg
&& GET_CODE (operand0) == REG
&& REGNO (operand0) < FIRST_PSEUDO_REGISTER
&& REGNO_REG_CLASS (REGNO (operand0)) == SHIFT_REGS
- && (GET_CODE (operand1) == MEM
- || GET_CODE (operand1) == CONST_INT
- || (GET_CODE (operand1) == REG
- && FP_REG_CLASS_P (REGNO_REG_CLASS (REGNO (operand1))))))
+ && (GET_CODE (operand1) == MEM || GET_CODE (operand1) == CONST_INT))
{
/* D might not fit in 14 bits either; for such cases load D into
scratch reg. */
@@ -5883,6 +5882,10 @@ output_arg_descriptor (rtx call_insn)
fputc ('\n', asm_out_file);
}
+/* Inform reload about cases where moving X with a mode MODE to a register in
+ RCLASS requires an extra scratch or immediate register. Return the class
+ needed for the immediate register. */
+
static reg_class_t
pa_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
enum machine_mode mode, secondary_reload_info *sri)
@@ -5985,24 +5988,29 @@ pa_secondary_reload (bool in_p, rtx x, reg_class_t rclass_i,
return NO_REGS;
}
- /* We need a secondary register (GPR) for copies between the SAR
- and anything other than a general register. */
- if (rclass == SHIFT_REGS && (regno <= 0 || regno >= 32))
+ /* A SAR<->FP register copy requires an intermediate general register
+ and secondary memory. We need a secondary reload with a general
+ scratch register for spills. */
+ if (rclass == SHIFT_REGS)
{
- sri->icode = (in_p
- ? direct_optab_handler (reload_in_optab, mode)
- : direct_optab_handler (reload_out_optab, mode));
- return NO_REGS;
+ /* Handle spill. */
+ if (regno >= FIRST_PSEUDO_REGISTER || regno < 0)
+ {
+ sri->icode = (in_p
+ ? direct_optab_handler (reload_in_optab, mode)
+ : direct_optab_handler (reload_out_optab, mode));
+ return NO_REGS;
+ }
+
+ /* Handle FP copy. */
+ if (FP_REG_CLASS_P (REGNO_REG_CLASS (regno)))
+ return GENERAL_REGS;
}
- /* A SAR<->FP register copy requires a secondary register (GPR) as
- well as secondary memory. */
if (regno >= 0 && regno < FIRST_PSEUDO_REGISTER
- && (REGNO_REG_CLASS (regno) == SHIFT_REGS
- && FP_REG_CLASS_P (rclass)))
- sri->icode = (in_p
- ? direct_optab_handler (reload_in_optab, mode)
- : direct_optab_handler (reload_out_optab, mode));
+ && REGNO_REG_CLASS (regno) == SHIFT_REGS
+ && FP_REG_CLASS_P (rclass))
+ return GENERAL_REGS;
return NO_REGS;
}
diff --git a/gcc/config/pa/pa32-regs.h b/gcc/config/pa/pa32-regs.h
index 7e8e05d..9a1c067 100644
--- a/gcc/config/pa/pa32-regs.h
+++ b/gcc/config/pa/pa32-regs.h
@@ -209,6 +209,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
registers. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \
+ : (REGNO) == 88 ? SCALAR_INT_MODE_P (MODE) \
: !TARGET_PA_11 && FP_REGNO_P (REGNO) \
? (VALID_FP_MODE_P (MODE) \
&& (GET_MODE_SIZE (MODE) <= 8 \
diff --git a/gcc/config/pa/pa64-regs.h b/gcc/config/pa/pa64-regs.h
index 23dc778..313577b 100644
--- a/gcc/config/pa/pa64-regs.h
+++ b/gcc/config/pa/pa64-regs.h
@@ -149,10 +149,11 @@ along with GCC; see the file COPYING3. If not see
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
On the HP-PA, the cpu registers can hold any mode. We
- force this to be an even register is it cannot hold the full mode. */
+ force this to be an even register if it cannot hold the full mode. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \
((REGNO) == 0 \
? (MODE) == CCmode || (MODE) == CCFPmode \
+ : (REGNO) == 60 ? SCALAR_INT_MODE_P (MODE) \
/* Make wide modes be in aligned registers. */ \
: FP_REGNO_P (REGNO) \
? (VALID_FP_MODE_P (MODE) \
--
1.7.0.4

View File

@ -1,194 +0,0 @@
From cad5b42c7c890058535eb7bc8c3766f03d428f59 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 15 Apr 2011 10:21:00 +0000
Subject: [PATCH] PR target/48605
* config/i386/sse.md (avx_insertps, sse4_1_insertps): If operands[2]
is a MEM, offset it as needed based on top 2 bits in operands[3],
change MEM mode to SFmode and mask those 2 bits away from operands[3].
* gcc.target/i386/sse4_1-insertps-3.c: New test.
* gcc.target/i386/sse4_1-insertps-4.c: New test.
* gcc.target/i386/avx-insertps-3.c: New test.
* gcc.target/i386/avx-insertps-4.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172483 138bc75d-0d04-0410-961f-82ee72b054a4
index 578ad82..6db9b77 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -4070,7 +4070,16 @@
(match_operand:SI 3 "const_0_to_255_operand" "n")]
UNSPEC_INSERTPS))]
"TARGET_AVX"
- "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
+{
+ if (MEM_P (operands[2]))
+ {
+ unsigned count_s = INTVAL (operands[3]) >> 6;
+ if (count_s)
+ operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
+ operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
+ }
+ return "vinsertps\t{%3, %2, %1, %0|%0, %1, %2, %3}";
+}
[(set_attr "type" "sselog")
(set_attr "prefix" "vex")
(set_attr "prefix_extra" "1")
@@ -4084,7 +4093,16 @@
(match_operand:SI 3 "const_0_to_255_operand" "n")]
UNSPEC_INSERTPS))]
"TARGET_SSE4_1"
- "insertps\t{%3, %2, %0|%0, %2, %3}";
+{
+ if (MEM_P (operands[2]))
+ {
+ unsigned count_s = INTVAL (operands[3]) >> 6;
+ if (count_s)
+ operands[3] = GEN_INT (INTVAL (operands[3]) & 0x3f);
+ operands[2] = adjust_address_nv (operands[2], SFmode, count_s * 4);
+ }
+ return "insertps\t{%3, %2, %0|%0, %2, %3}";
+}
[(set_attr "type" "sselog")
(set_attr "prefix_data16" "1")
(set_attr "prefix_extra" "1")
new file mode 100644
index 0000000..9397729
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertps-3.c
@@ -0,0 +1,8 @@
+/* { dg-do run { target ilp32 } } */
+/* { dg-require-effective-target avx } */
+/* { dg-options "-O2 -mfpmath=sse -mavx -mtune=geode" } */
+
+#define CHECK_H "avx-check.h"
+#define TEST avx_test
+
+#include "sse4_1-insertps-3.c"
diff --git a/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c b/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c
new file mode 100644
index 0000000..527b070
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/avx-vinsertps-4.c
@@ -0,0 +1,8 @@
+/* { dg-do run } */
+/* { dg-require-effective-target avx } */
+/* { dg-options "-O2 -mfpmath=sse -mavx" } */
+
+#define CHECK_H "avx-check.h"
+#define TEST avx_test
+
+#include "sse4_1-insertps-4.c"
diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c
new file mode 100644
index 0000000..75a8073
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-3.c
@@ -0,0 +1,5 @@
+/* { dg-do run { target ilp32 } } */
+/* { dg-require-effective-target sse4 } */
+/* { dg-options "-O2 -msse4.1 -mtune=geode" } */
+
+#include "sse4_1-insertps-2.c"
diff --git a/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c
new file mode 100644
index 0000000..30defca
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/sse4_1-insertps-4.c
@@ -0,0 +1,92 @@
+/* { dg-do run } */
+/* { dg-require-effective-target sse4 } */
+/* { dg-options "-O2 -msse4.1" } */
+
+#ifndef CHECK_H
+#define CHECK_H "sse4_1-check.h"
+#endif
+
+#ifndef TEST
+#define TEST sse4_1_test
+#endif
+
+#include CHECK_H
+
+#include <smmintrin.h>
+#include <string.h>
+
+#define msk0 0x41
+#define msk1 0x90
+#define msk2 0xe9
+#define msk3 0x70
+
+#define msk4 0xFC
+#define msk5 0x05
+#define msk6 0x0A
+#define msk7 0x0F
+
+union
+ {
+ __m128 x;
+ float f[4];
+ } val1;
+
+static void
+TEST (void)
+{
+ union
+ {
+ __m128 x;
+ float f[4];
+ } res[8], val2, tmp;
+ int masks[8];
+ int i, j;
+
+ val2.f[0] = 55.0;
+ val2.f[1] = 55.0;
+ val2.f[2] = 55.0;
+ val2.f[3] = 55.0;
+
+ val1.f[0] = 1.;
+ val1.f[1] = 2.;
+ val1.f[2] = 3.;
+ val1.f[3] = 4.;
+
+ asm volatile ("" : "+m" (val1));
+ res[0].x = _mm_insert_ps (val2.x, val1.x, msk0);
+ asm volatile ("" : "+m" (val1));
+ res[1].x = _mm_insert_ps (val2.x, val1.x, msk1);
+ asm volatile ("" : "+m" (val1));
+ res[2].x = _mm_insert_ps (val2.x, val1.x, msk2);
+ asm volatile ("" : "+m" (val1));
+ res[3].x = _mm_insert_ps (val2.x, val1.x, msk3);
+
+ masks[0] = msk0;
+ masks[1] = msk1;
+ masks[2] = msk2;
+ masks[3] = msk3;
+
+ for (i = 0; i < 4; i++)
+ {
+ asm volatile ("" : "+m" (val1));
+ res[i + 4].x = _mm_insert_ps (val2.x, val1.x, msk4);
+ }
+
+ masks[4] = msk4;
+ masks[5] = msk4;
+ masks[6] = msk4;
+ masks[7] = msk4;
+
+ for (i=0; i < 8; i++)
+ {
+ tmp = val2;
+ tmp.f[(masks[i] & 0x30) >> 4] = val1.f[(masks[i] & 0xC0) >> 6];
+
+ for (j = 0; j < 4; j++)
+ if (masks[i] & (0x1 << j))
+ tmp.f[j] = 0.f;
+
+ if (memcmp (&res[i], &tmp, sizeof (tmp)))
+ abort ();
+ }
+}
--
1.7.0.4

View File

@ -1,24 +0,0 @@
From 13a531dde8ee181ad9e8aeb6b755ca52f261bef8 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 15 Apr 2011 10:29:58 +0000
Subject: [PATCH] PR target/48614
* gcc.target/i386/pr46084.c: Require avx_runtime instead of
just avx.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172485 138bc75d-0d04-0410-961f-82ee72b054a4
index 88bcd1c..3ca22eb 100644
--- a/gcc/testsuite/gcc.target/i386/pr46084.c
+++ b/gcc/testsuite/gcc.target/i386/pr46084.c
@@ -1,7 +1,7 @@
/* This test needs to use setrlimit to set the stack size, so it can
only run on Unix. */
/* { dg-do run { target *-*-linux* *-*-solaris* *-*-darwin* } } */
-/* { dg-require-effective-target avx } */
+/* { dg-require-effective-target avx_runtime } */
/* { dg-require-effective-target split_stack } */
/* { dg-options "-fsplit-stack -O2 -mavx" } */
--
1.7.0.4

View File

@ -1,46 +0,0 @@
From d3cce0bbf7e327905965f0fae70b04af08bfb64b Mon Sep 17 00:00:00 2001
From: krebbel <krebbel@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 15 Apr 2011 12:43:40 +0000
Subject: [PATCH] 2011-04-15 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.md (popcountdi2, popcountsi2, popcounthi2):
Replace match_operand with match_dup for the third operand in
these expanders.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@172491 138bc75d-0d04-0410-961f-82ee72b054a4
index 2d552fb..7639d2d 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -9330,7 +9330,7 @@
(parallel [(set (match_dup 0) (plus:DI (match_dup 0) (match_dup 2)))
(clobber (reg:CC CC_REGNUM))])
; sllg op2, op0, 16
- (set (match_operand:DI 2 "register_operand" "")
+ (set (match_dup 2)
(ashift:DI (match_dup 0) (const_int 16)))
; agr op0, op2
(parallel [(set (match_dup 0) (plus:DI (match_dup 0) (match_dup 2)))
@@ -9352,7 +9352,7 @@
UNSPEC_POPCNT))
(clobber (reg:CC CC_REGNUM))])
; sllk op2, op0, 16
- (set (match_operand:SI 2 "register_operand" "")
+ (set (match_dup 2)
(ashift:SI (match_dup 0) (const_int 16)))
; ar op0, op2
(parallel [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2)))
@@ -9374,7 +9374,7 @@
UNSPEC_POPCNT))
(clobber (reg:CC CC_REGNUM))])
; sllk op2, op0, 8
- (set (match_operand:SI 2 "register_operand" "")
+ (set (match_dup 2)
(ashift:SI (match_dup 0) (const_int 8)))
; ar op0, op2
(parallel [(set (match_dup 0) (plus:SI (match_dup 0) (match_dup 2)))
--
1.7.0.4

Some files were not shown because too many files have changed in this diff Show More