summaryrefslogtreecommitdiff
path: root/debian/patches/svn-updates.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/svn-updates.diff')
-rw-r--r--debian/patches/svn-updates.diff9556
1 files changed, 2 insertions, 9554 deletions
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index f0056fa..78c261d 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,4 +1,4 @@
-# DP: updates from the 4.6 branch upto 20111215 (r182348).
+# DP: updates from the 4.7 branch upto 2012xxxx (r182348).
last_updated()
{
@@ -8,9559 +8,7 @@ Thu Dec 15 00:05:16 UTC 2011 (revision 182348)
EOF
}
-svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_6_2_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch \
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_7_0_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch \
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
-Index: configure
-===================================================================
---- a/src/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/configure (.../branches/gcc-4_6-branch)
-@@ -6944,10 +6944,6 @@
- extra_arflags_for_target=" -X32_64"
- extra_nmflags_for_target=" -B -X32_64"
- ;;
-- *-*-darwin[3-9]*)
-- # ranlib before Darwin10 requires the -c flag to look at common symbols.
-- extra_ranlibflags_for_target=" -c"
-- ;;
- mips*-*-pe | sh*-*-pe | *arm-wince-pe)
- target_makefile_frag="config/mt-wince"
- ;;
-Index: libgcc/config.host
-===================================================================
---- a/src/libgcc/config.host (.../tags/gcc_4_6_2_release)
-+++ b/src/libgcc/config.host (.../branches/gcc-4_6-branch)
-@@ -145,15 +145,6 @@
- asm_hidden_op=.private_extern
- tmake_file="t-darwin ${cpu_type}/t-darwin t-slibgcc-darwin"
- ;;
--*-*-freebsd[12] | *-*-freebsd[12].* | *-*-freebsd*aout*)
-- # This is the place-holder for the generic a.out configuration
-- # of FreeBSD. No actual configuration resides here since
-- # there was only ever a bare-bones ix86 configuration for
-- # a.out and it exists solely in the machine-specific section.
-- # This place-holder must exist to avoid dropping into
-- # the generic ELF configuration of FreeBSD (i.e. it must be
-- # ordered before that section).
-- ;;
- *-*-freebsd*)
- # This is the generic ELF configuration of FreeBSD. Later
- # machine-specific sections may refine and add to this
-Index: libgcc/ChangeLog
-===================================================================
---- a/src/libgcc/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,8 @@
-+2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
-+
-+ * config.host (*-*-freebsd[12], *-*-freebsd[12].*,
-+ *-*-freebsd*aout*): Remove.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libtool.m4
-===================================================================
---- a/src/libtool.m4 (.../tags/gcc_4_6_2_release)
-+++ b/src/libtool.m4 (.../branches/gcc-4_6-branch)
-@@ -2273,7 +2273,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[[123]]*) objformat=aout ;;
-+ freebsd[[23]].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -2291,7 +2291,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-@@ -4804,7 +4804,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_TAGVAR(hardcode_direct, $1)=yes
- _LT_TAGVAR(hardcode_minus_L, $1)=yes
-@@ -5751,7 +5751,7 @@
- esac
- ;;
-
-- freebsd[[12]]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- _LT_TAGVAR(ld_shlibs, $1)=no
-Index: libgomp/configure
-===================================================================
---- a/src/libgomp/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libgomp/configure (.../branches/gcc-4_6-branch)
-@@ -9317,7 +9317,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -10230,7 +10230,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -10248,7 +10248,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -13164,7 +13164,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_FC=yes
- hardcode_minus_L_FC=yes
-@@ -13869,7 +13869,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -13887,7 +13887,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libgomp/ChangeLog
-===================================================================
---- a/src/libgomp/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libgomp/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libquadmath/configure
-===================================================================
---- a/src/libquadmath/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libquadmath/configure (.../branches/gcc-4_6-branch)
-@@ -8727,7 +8727,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9643,7 +9643,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9661,7 +9661,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libquadmath/ChangeLog
-===================================================================
---- a/src/libquadmath/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libquadmath/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/c-family/ChangeLog
-===================================================================
---- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,15 @@
-+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR c++/50608
-+ * c-common.c (c_fully_fold_internal) <ADDR_EXPR>: Call fold_offsetof_1.
-+ (fold_offsetof_1): Make global. Remove STOP_REF argument and adjust.
-+ <INDIRECT_REF>: Return the argument.
-+ <ARRAY_REF>: Remove special code for negative offset.
-+ Call fold_build_pointer_plus instead of size_binop.
-+ (fold_offsetof): Remove STOP_REF argument and adjust.
-+ * c-common.h (fold_offsetof_1): Declare.
-+ (fold_offsetof): Remove STOP_REF argument.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/c-family/c-common.c
-===================================================================
---- a/src/gcc/c-family/c-common.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-family/c-common.c (.../branches/gcc-4_6-branch)
-@@ -1236,13 +1236,7 @@
- && (op1 = get_base_address (op0)) != NULL_TREE
- && TREE_CODE (op1) == INDIRECT_REF
- && TREE_CONSTANT (TREE_OPERAND (op1, 0)))
-- {
-- tree offset = fold_offsetof (op0, op1);
-- op1
-- = fold_convert_loc (loc, TREE_TYPE (expr), TREE_OPERAND (op1, 0));
-- ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (expr), op1,
-- offset);
-- }
-+ ret = fold_convert_loc (loc, TREE_TYPE (expr), fold_offsetof_1 (op0));
- else if (op0 != orig_op0 || in_init)
- ret = in_init
- ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
-@@ -8459,20 +8453,15 @@
- return uc;
- }
-
--/* Build the result of __builtin_offsetof. EXPR is a nested sequence of
-- component references, with STOP_REF, or alternatively an INDIRECT_REF of
-- NULL, at the bottom; much like the traditional rendering of offsetof as a
-- macro. Returns the folded and properly cast result. */
-+/* Fold an offsetof-like expression. EXPR is a nested sequence of component
-+ references with an INDIRECT_REF of a constant at the bottom; much like the
-+ traditional rendering of offsetof as a macro. Return the folded result. */
-
--static tree
--fold_offsetof_1 (tree expr, tree stop_ref)
-+tree
-+fold_offsetof_1 (tree expr)
- {
-- enum tree_code code = PLUS_EXPR;
- tree base, off, t;
-
-- if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
-- return size_zero_node;
--
- switch (TREE_CODE (expr))
- {
- case ERROR_MARK:
-@@ -8489,15 +8478,15 @@
-
- case NOP_EXPR:
- case INDIRECT_REF:
-- if (!integer_zerop (TREE_OPERAND (expr, 0)))
-+ if (!TREE_CONSTANT (TREE_OPERAND (expr, 0)))
- {
- error ("cannot apply %<offsetof%> to a non constant address");
- return error_mark_node;
- }
-- return size_zero_node;
-+ return TREE_OPERAND (expr, 0);
-
- case COMPONENT_REF:
-- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
-+ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
- if (base == error_mark_node)
- return base;
-
-@@ -8515,21 +8504,14 @@
- break;
-
- case ARRAY_REF:
-- base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
-+ base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
- if (base == error_mark_node)
- return base;
-
- t = TREE_OPERAND (expr, 1);
-- if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
-- {
-- code = MINUS_EXPR;
-- t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
-- }
-- t = convert (sizetype, t);
-- off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
-
- /* Check if the offset goes beyond the upper bound of the array. */
-- if (code == PLUS_EXPR && TREE_CODE (t) == INTEGER_CST)
-+ if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) >= 0)
- {
- tree upbound = array_ref_up_bound (expr);
- if (upbound != NULL_TREE
-@@ -8569,26 +8551,30 @@
- }
- }
- }
-+
-+ t = convert (sizetype, t);
-+ off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
- break;
-
- case COMPOUND_EXPR:
- /* Handle static members of volatile structs. */
- t = TREE_OPERAND (expr, 1);
- gcc_assert (TREE_CODE (t) == VAR_DECL);
-- return fold_offsetof_1 (t, stop_ref);
-+ return fold_offsetof_1 (t);
-
- default:
- gcc_unreachable ();
- }
-
-- return size_binop (code, base, off);
-+ return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), base, off);
- }
-
-+/* Likewise, but convert it to the return type of offsetof. */
-+
- tree
--fold_offsetof (tree expr, tree stop_ref)
-+fold_offsetof (tree expr)
- {
-- /* Convert back from the internal sizetype to size_t. */
-- return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
-+ return convert (size_type_node, fold_offsetof_1 (expr));
- }
-
- /* Warn for A ?: C expressions (with B omitted) where A is a boolean
-Index: gcc/c-family/c-common.h
-===================================================================
---- a/src/gcc/c-family/c-common.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-family/c-common.h (.../branches/gcc-4_6-branch)
-@@ -916,7 +916,8 @@
-
- extern void verify_sequence_points (tree);
-
--extern tree fold_offsetof (tree, tree);
-+extern tree fold_offsetof_1 (tree);
-+extern tree fold_offsetof (tree);
-
- /* Places where an lvalue, or modifiable lvalue, may be required.
- Used to select diagnostic messages in lvalue_error and
-Index: gcc/DATESTAMP
-===================================================================
---- a/src/gcc/DATESTAMP (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_6-branch)
-@@ -1 +1 @@
--20111026
-+20111214
-Index: gcc/configure
-===================================================================
---- a/src/gcc/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/configure (.../branches/gcc-4_6-branch)
-@@ -7442,17 +7442,7 @@
- RANLIB="$ac_cv_prog_RANLIB"
- fi
-
--case "${host}" in
--*-*-darwin*)
-- # By default, the Darwin ranlib will not treat common symbols as
-- # definitions when building the archive table of contents. Other
-- # ranlibs do that; pass an option to the Darwin ranlib that makes
-- # it behave similarly.
-- ranlib_flags="-c"
-- ;;
--*)
-- ranlib_flags=""
--esac
-+ranlib_flags=""
-
-
- # Find a good install program. We prefer a C program (faster),
-@@ -15740,7 +15730,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -16653,7 +16643,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -16671,7 +16661,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -17505,7 +17495,7 @@
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 17508 "configure"
-+#line 17498 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -17611,7 +17601,7 @@
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 17614 "configure"
-+#line 17604 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -18537,7 +18527,7 @@
- esac
- ;;
-
-- freebsd[12]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- ld_shlibs_CXX=no
-@@ -20312,7 +20302,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -20330,7 +20320,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: gcc/objc/objc-next-runtime-abi-01.c
-===================================================================
---- a/src/gcc/objc/objc-next-runtime-abi-01.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/objc/objc-next-runtime-abi-01.c (.../branches/gcc-4_6-branch)
-@@ -2871,12 +2871,15 @@
- return eh_id;
- }
-
-+/* For NeXT ABI 0 and 1, the personality routines are just those of the
-+ underlying language. */
-+
- static tree
- objc_eh_personality (void)
- {
- if (!objc_eh_personality_decl)
- #ifndef OBJCPLUS
-- objc_eh_personality_decl = build_personality_function ("objc");
-+ objc_eh_personality_decl = build_personality_function ("gcc");
- #else
- objc_eh_personality_decl = build_personality_function ("gxx");
- #endif
-Index: gcc/objc/objc-act.c
-===================================================================
---- a/src/gcc/objc/objc-act.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/objc/objc-act.c (.../branches/gcc-4_6-branch)
-@@ -3136,9 +3136,8 @@
- struct string_descriptor *desc, key;
- void **loc;
-
-- /* Prep the string argument. */
-- string = fix_string_type (string);
-- TREE_SET_CODE (string, STRING_CST);
-+ /* We should be passed a STRING_CST. */
-+ gcc_checking_assert (TREE_CODE (string) == STRING_CST);
- length = TREE_STRING_LENGTH (string) - 1;
-
- /* The target may have different ideas on how to construct an ObjC string
-Index: gcc/objc/ChangeLog
-===================================================================
---- a/src/gcc/objc/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/objc/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,18 @@
-+2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ Backport from mainline
-+ 2011-10-29 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/47997
-+ * objc-act.c (objc_build_string_object): Remove redundant second
-+ call to fix_string_type (). Add a checking assert that we are,
-+ indeed, passed a STRING_CST.
-+
-+2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ * objc-next-runtime-abi-01.c (objc_eh_personality): Use gcc personality
-+ for Objective-C m32.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/reorg.c
-===================================================================
---- a/src/gcc/reorg.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/reorg.c (.../branches/gcc-4_6-branch)
-@@ -3554,9 +3554,11 @@
- }
- }
-
-+ /* See if we have a simple (conditional) jump that is useless. */
- if (! INSN_ANNULLED_BRANCH_P (delay_insn)
-+ && ! condjump_in_parallel_p (delay_insn)
- && prev_active_insn (target_label) == insn
-- && ! condjump_in_parallel_p (delay_insn)
-+ && ! BARRIER_P (prev_nonnote_insn (target_label))
- #ifdef HAVE_cc0
- /* If the last insn in the delay slot sets CC0 for some insn,
- various code assumes that it is in a delay slot. We could
-Index: gcc/ChangeLog
-===================================================================
---- a/src/gcc/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,343 @@
-+2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * lto-streamer-out.c (write_symbol): Use proper 64-bit host type.
-+ * lto-cgraph.c (input_cgraph_opt_section): Use 'int' for offsets.
-+ * lto-streamer-in.c (lto_read_body): Likewise.
-+ (lto_input_toplevel_asms): Likewise.
-+ * lto-section-in.c (lto_create_simple_input_block): Likewise.
-+ * lto-opts.c (lto_read_file_options): Likewise.
-+ * ipa-prop.c (ipa_prop_read_section): Likewise.
-+
-+ * df.h (DF_NOTE): Fix typo in comment.
-+
-+2011-12-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-+
-+ * regmove.c (fixup_match_2): Only access call_used_regs with hard
-+ regs.
-+
-+2011-12-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/51510
-+ * calls.c (internal_arg_pointer_based_exp_scan): Don't use
-+ VEC_safe_grow_cleared if idx is smaller than VEC_length.
-+
-+ Backported from mainline
-+ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/51485
-+ * tree-vect-data-refs.c (vect_analyze_data_refs): Give up on
-+ DRs in call stmts.
-+
-+2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR tree-optimization/50569
-+ * tree-sra.c (build_ref_for_model): Replicate a chain of COMPONENT_REFs
-+ in the expression of MODEL instead of just the last one.
-+
-+2011-12-09 Michael Meissner <meissner@the-meissners.org>
-+
-+ Backport from mainline
-+ 2011-12-09 Michael Meissner <meissner@the-meissners.org>
-+
-+ PR rtl-optimization/51469
-+ * varasm.c (default_binds_local_p_1): If the symbol is a gnu
-+ indirect function, mark the symbol as non-local.
-+
-+2011-12-09 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backport from mainline
-+ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/51466
-+ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Also copy
-+ TREE_SIDE_EFFECTS.
-+
-+ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/50078
-+ * tree-ssa-forwprop.c (forward_propagate_addr_expr_1): Copy over
-+ TREE_THIS_VOLATILE also from the old to new lhs resp. rhs.
-+
-+2011-12-09 Kazu Hirata <kazu@codesourcery.com>
-+
-+ Backport from mainline:
-+
-+ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
-+
-+ PR target/51408
-+ * config/arm/arm.md (*minmax_arithsi): Always require the else
-+ clause in the MINUS case.
-+
-+2011-12-08 Teresa Johnson <tejohnson@google.com>
-+
-+ Backport from mainline:
-+
-+ 2011-08-05 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * config/i386/i386.md (*movdi_internal_rex64): Use "!o" constraint
-+ instead of "!m" for operand 0, alternative 4.
-+ (*movdf_internal_rex64): Ditto for operand 0, alernative 6.
-+
-+2011-12-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backport from mainline
-+ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR debug/51410
-+ * c-decl.c (pop_scope): Don't add DECL_EXTERNAL decls
-+ for debug info if scope is file_scope.
-+
-+ PR c/51339
-+ * c-decl.c (c_finish_incomplete_decl, finish_decl): Call
-+ relayout_decl instead of layout_decl.
-+
-+ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
-+ Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR middle-end/51323
-+ PR middle-end/50074
-+ * calls.c (internal_arg_pointer_exp_state): New variable.
-+ (internal_arg_pointer_based_exp_1,
-+ internal_arg_pointer_exp_scan): New functions.
-+ (internal_arg_pointer_based_exp): New function.
-+ (mem_overlaps_already_clobbered_arg_p): Use it.
-+ (expand_call): Free internal_arg_pointer_exp_state.cache vector
-+ and clear internal_arg_pointer_exp_state.scan_start.
-+
-+ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR rtl-optimization/48721
-+ * sched-deps.c (sched_analyze_insn): For SIBLING_CALL_P set
-+ reg_pending_barrier to TRUE_BARRIER.
-+
-+ 2011-11-26 Joern Rennecke <joern.rennecke@embecosm.com>
-+
-+ PR middle-end/50074
-+ * calls.c (mem_overlaps_already_clobbered_arg_p):
-+ Return false if no outgoing arguments have been stored so far.
-+
-+2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR tree-optimization/51315
-+ * tree-sra.c (tree_non_mode_aligned_mem_p): Rename to...
-+ (tree_non_aligned_mem_p): ...this. Add ALIGN parameter. Look into
-+ MEM_REFs and use get_object_or_type_alignment for them.
-+ (build_accesses_from_assign): Adjust for above change.
-+ (access_precludes_ipa_sra_p): Likewise.
-+
-+2011-12-06 Martin Jambor <mjambor@suse.cz>
-+
-+ Backport from mainline:
-+
-+ 2011-12-02 Martin Jambor <mjambor@suse.cz>
-+
-+ PR tree-optimization/50622
-+ * tree-sra.c (load_assign_lhs_subreplacements): Force gimple operand
-+ if both lacc and racc are grp_partial_lhs.
-+
-+2011-12-06 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ * config/rs6000/rs6000.c (darwin_rs6000_override_options): Initialize
-+ rs6000_current_abi.
-+
-+2011-12-06 Alan Modra <amodra@gmail.com>
-+
-+ PR target/50906
-+ * config/rs6000/rs6000.c (rs6000_emit_prologue <TARGET_SPE_ABI>):
-+ Do not mark r11 setup as frame-related. Pass correct offset to
-+ rs6000_emit_savres_rtx. Correct out-of-line rs6000_frame_related
-+ arguments. Correct sp_offset. Remove "offset" fudge from
-+ in-line rs6000_frame_related call. Rename misleading variable.
-+ Fix comments and whitespace. Tidy some expressions.
-+ (rs6000_emit_epilogue <TARGET_SPE_ABI>): Always set frame_reg_rtx
-+ to r11 in out-of-line case. Correct sp_offset. Pass correct
-+ offset to rs6000_emit_savres_rtx. Rename misleading variable.
-+ Fix comments and whitespace. Tidy some expressions.
-+ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Add sp_offset
-+ adjustment when !saving_GPRs_inline. Correct register mode
-+ used in address calcs.
-+ (rs6000_emit_epilogue <non-TARGET_SPE_ABI>): Similarly when
-+ !restoring_GPRs_inline.
-+
-+2011-12-04 Jérémie Detrey <Jeremie.Detrey@loria.fr>
-+
-+ PR target/51393
-+ * config/i386/avxintrin.h (_mm256_insert_epi64): Declare second
-+ parameter as long long.
-+
-+2011-12-02 Georg-Johann Lay <avr@gjlay.de>
-+
-+ PR target/51002
-+ PR target/51345
-+ * config/avr/libgcc.S (__prologue_saves__, __epilogue_restores__):
-+ Enclose parts using __SP_H__ in !defined (__AVR_HAVE_8BIT_SP__).
-+ Add FIXME comments.
-+ * config/avr/avr.md (movhi_sp_r_irq_off, movhi_sp_r_irq_on): Set
-+ insn condition to !AVR_HAVE_8BIT_SP.
-+ * config/avr/avr.c (output_movhi): "clr%B0" instead of "in
-+ %B0,__SP_H__" if AVR_HAVE_8BIT_SP.
-+ (avr_file_start): Only print "__SP_H__ = 0x3e" if !AVR_HAVE_8BIT_SP.
-+ * config/avr/avr-devices.c (avr_mcu_types): ATtiny4313 and
-+ AT86RF401 have a 16-bit SP (their manual is bogus).
-+
-+2011-11-25 Richard Sandiford <richard.sandiford@linaro.org>
-+
-+ Backport from mainline:
-+
-+ 2011-03-29 Richard Sandiford <richard.sandiford@linaro.org>
-+
-+ PR debug/48190
-+ * dwarf2out.c (dw_loc_list_node): Add resolved_addr and replaced.
-+ (cached_dw_loc_list_def): New structure.
-+ (cached_dw_loc_list): New typedef.
-+ (cached_dw_loc_list_table): New variable.
-+ (cached_dw_loc_list_table_hash): New function.
-+ (cached_dw_loc_list_table_eq): Likewise.
-+ (add_location_or_const_value_attribute): Take a bool cache_p.
-+ Cache the list when the parameter is true.
-+ (gen_formal_parameter_die): Update caller.
-+ (gen_variable_die): Likewise.
-+ (dwarf2out_finish): Likewise.
-+ (dwarf2out_abstract_function): Nullify cached_dw_loc_list_table
-+ while generating debug info for the decl.
-+ (dwarf2out_function_decl): Clear cached_dw_loc_list_table.
-+ (dwarf2out_init): Initialize cached_dw_loc_list_table.
-+ (resolve_addr): Cache the result of resolving a chain of
-+ location lists.
-+
-+2011-11-24 Enkovich Ilya <ilya.enkovich@intel.com>
-+
-+ PR target/51287
-+ * i386.c (distance_non_agu_define): Fix insn attr check.
-+
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
-+2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR rtl-optimization/51187
-+ * reorg.c (relax_delay_slots): Do not consider a jump useless if there
-+ is a barrier between the jump and its target label.
-+
-+2011-11-19 Richard Earnshaw <rearnsha@arm.com>
-+
-+ PR target/50493
-+ * config/arm/arm.c (neon_disambiguate_copy): Correctly handle partial
-+ overlap of src and dest operands.
-+
-+2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/49992
-+ * configure.ac: Remove ranlib special-casing for Darwin.
-+ * configure: Regenerate.
-+
-+2011-11-16 Richard Earnshaw <rearnsha@arm.com>
-+ Bernd Schmidt <bernds@coudesourcery.com>
-+ Sebastian Huber <sebastian.huber@embedded-brains.de>
-+
-+ PR target/49641
-+ * config/arm/arm.c (store_multiple_sequence): Avoid cases where
-+ the base reg is stored iff compiling for Thumb1.
-+
-+2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/48108
-+ Backport from mainline r180523
-+ * config/darwin.c (top level): Amend comments concerning LTO output.
-+ (lto_section_num): New variable. (darwin_lto_section_e): New GTY.
-+ (LTO_SECTS_SECTION, LTO_INDEX_SECTION): New.
-+ (LTO_NAMES_SECTION): Rename.
-+ (darwin_asm_named_section): Record LTO section counts and switches
-+ in a vec of darwin_lto_section_e.
-+ (darwin_file_start): Remove unused code.
-+ (darwin_file_end): Put an LTO section termination label. Handle
-+ output of the wrapped LTO sections, index and names table.
-+
-+2011-11-12 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/45233
-+ * config/rs6000/rs6000.c (rs6000_legitimize_reload_address):
-+ Only expand a symbol ref. into an access when the entity is defined
-+ in the TU.
-+
-+2011-11-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/51077
-+ * tree-object-size.c (addr_object_size): Check TREE_CODE of
-+ MEM_REF's operand rather than code of the MEM_REF itself.
-+
-+2011-11-07 Alan Modra <amodra@gmail.com>
-+
-+ PR target/30282
-+ * config/rs6000/rs6000.c (rs6000_emit_stack_reset): Always emit
-+ blockage for ABI_V4.
-+
-+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR c++/50608
-+ * c-parser.c (c_parser_postfix_expression) <RID_OFFSETOF>: Adjust call
-+ to fold_offsetof.
-+ * c-typeck.c (build_unary_op) <ADDR_EXPR>: Call fold_offsetof_1.
-+
-+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR target/50979
-+ * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=v8.
-+
-+2011-11-03 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * config/i386/i386.md (lround<X87MODEF:mode><SWI248x:mode>2,
-+ rint<mode>2, floor<mode>2, lfloor<MODEF:mode><SWI48:mode>2,
-+ btrunc<mode>2, lwp_lwpval<mode>3): Use operands[N] instead of operandN.
-+
-+2011-11-02 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR target/50945
-+ * config/sparc/sparc.md (movsf_insn): Reindent constraints.
-+ (movsf_insn_no_fpu): Likewise.
-+ (movdf_insn_sp32): Likewise.
-+ (movdf_insn_sp32_no_fpu): Likewise.
-+ (movdf_insn_sp32_v9): Likewise. Remove redundant GY constraint.
-+ (movdf_insn_sp32_v9_no_fpu): Likewise.
-+ (movdf_insn_sp64): Likewise.
-+ (movdf_insn_sp64_no_fpu): Likewise.
-+ (movtf_insn_sp32): Likewise.
-+ (movtf_insn_sp32_no_fpu): Likewise.
-+ (movtf_insn_sp64): Likewise.
-+ (movtf_insn_sp64_hq): Likewise.
-+ (movtf_insn_sp64_no_fpu): Likewise.
-+
-+2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
-+
-+ * cfgcleanup.c (try_head_merge_bb): If get_condition returns
-+ NULL for a jump that is a cc0 insn, pick the previous insn for
-+ move_before.
-+
-+2011-11-01 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * config/i386/i386.md (splitters for int-float conversion): Use
-+ SUBREG_REG on SUBREGs in splitter constraints.
-+
-+2011-11-01 Julian Brown <julian@codesourcery.com>
-+
-+ PR rtl-optimization/47918
-+ * reload1.c (set_initial_label_offsets): Use initial offsets
-+ for labels on the nonlocal_goto_handler_labels chain.
-+
-+2011-10-29 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-+
-+ PR target/50691
-+ * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
-+ * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
-+ TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
-+
-+2011-10-27 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/50875
-+ * config/i386/sse.md (*avx_unpcklpd256): Remove extra insn
-+ constraints. Change alternative 1 to "x,m,1".
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-@@ -144,8 +489,8 @@
-
- 2011-10-07 Bernd Schmidt <bernds@codesourcery.com>
-
-- PR target/49049
-- * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
-+ PR target/49049
-+ * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
-
- 2011-10-06 Jakub Jelinek <jakub@redhat.com>
-
-@@ -252,7 +597,7 @@
- * config/rs6000/rs6000.md (probe_stack): Use explicit operand.
- * config/rs6000/rs6000.c (output_probe_stack_range): Likewise.
-
--2011-09-14 Diego Novillo <dnovillo@google.com>
-+2011-09-14 Diego Novillo <dnovillo@google.com>
-
- * tree-vect-stmts.c (vect_transform_stmt): Remove unused
- local variable ORIG_SCALAR_STMT.
-Index: gcc/testsuite/gcc.target/arm/pr49641.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/arm/pr49641.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.target/arm/pr49641.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,18 @@
-+/* { dg-do compile } */
-+/* { dg-options "-mthumb -O2" } */
-+/* { dg-require-effective-target arm_thumb1_ok } */
-+/* { dg-final { scan-assembler-not "stmia\[\\t \]*r3!\[^\\n]*r3" } } */
-+typedef struct {
-+ void *t1, *t2, *t3;
-+} z;
-+extern volatile int y;
-+static inline void foo(z *x) {
-+ x->t1 = &x->t2;
-+ x->t2 = ((void *)0);
-+ x->t3 = &x->t1;
-+}
-+extern z v;
-+void bar (void) {
-+ y = 0;
-+ foo(&v);
-+}
-Index: gcc/testsuite/gcc.target/i386/pr51393.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr51393.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr51393.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,22 @@
-+/* { dg-do run } */
-+/* { dg-require-effective-target avx } */
-+/* { dg-require-effective-target lp64 } */
-+/* { dg-options "-O -mavx" } */
-+
-+#include "avx-check.h"
-+#include <immintrin.h>
-+
-+static void
-+__attribute__((noinline))
-+avx_test (void)
-+{
-+ long long in = 0x800000000ll;
-+ long long out;
-+
-+ __m256i zero = _mm256_setzero_si256();
-+ __m256i tmp = _mm256_insert_epi64 (zero, in, 0);
-+ out = _mm256_extract_epi64(tmp, 0);
-+
-+ if (in != out)
-+ abort ();
-+}
-Index: gcc/testsuite/gcc.target/i386/pr48721.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr48721.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr48721.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,51 @@
-+/* PR rtl-optimization/48721 */
-+/* { dg-do compile } */
-+/* { dg-options "-O -foptimize-sibling-calls -fsched2-use-superblocks -fschedule-insns2 -mtune=core2" } */
-+
-+extern unsigned char a[];
-+extern int b[], d[], e[], f[], g[], *h[], m[], *n[], o[];
-+extern char c[];
-+
-+struct S
-+{
-+ unsigned char s1;
-+ int s2, s3, s4, s5, s6, s7, s8;
-+};
-+
-+__attribute__((noinline, noclone)) int
-+foo (int x)
-+{
-+ return 0;
-+}
-+
-+int
-+bar (int x, struct S *y)
-+{
-+ int z;
-+ switch (x)
-+ {
-+ case 1:
-+ case 2:
-+ {
-+ int t2, t4, t5, t6, t7, t8;
-+ z = o[y->s8 * 6];
-+ t8 = *n[m[x] * 5];
-+ t4 = *h[y->s7];
-+ t7 = z;
-+ z = g[f[x] + y->s6];
-+ t6 = e[y->s5];
-+ t5 = d[c[x] + y->s3 * 17];
-+ if (z)
-+ t2 = b[z];
-+ if (a[z] != y->s1)
-+ return foo (x);
-+ y->s8 = t8;
-+ y->s4 = t4;
-+ y->s7 = t7;
-+ y->s6 = t6;
-+ y->s5 = t5;
-+ y->s2 = t2;
-+ }
-+ }
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/movdi-rex64.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/movdi-rex64.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,11 @@
-+/* { dg-do compile { target *-*-linux* } } */
-+/* { dg-options "-fPIE" } */
-+
-+char *strcpy (char *dest, const char *src);
-+
-+static __thread char buffer[25];
-+const char * error_message (void)
-+{
-+ strcpy (buffer, "Unknown code ");
-+ return 0;
-+}
-Index: gcc/testsuite/gfortran.dg/whole_file_35.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/whole_file_35.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/whole_file_35.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,28 @@
-+! { dg-do compile }
-+!
-+! PR fortran/50408
-+!
-+! Contributed by Vittorio Zecca
-+!
-+ module m
-+ type int
-+ integer :: val
-+ end type int
-+ interface ichar
-+ module procedure uch
-+ end interface
-+ contains
-+ function uch (c)
-+ character (len=1), intent (in) :: c
-+ type (int) :: uch
-+ intrinsic ichar
-+ uch%val = 127 - ichar (c)
-+ end function uch
-+ end module m
-+
-+ program p
-+ use m
-+ print *,ichar('~') ! must print "1"
-+ end program p
-+
-+! { dg-final { cleanup-modules "m" } }
-Index: gcc/testsuite/gfortran.dg/move_alloc_8.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/move_alloc_8.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,106 @@
-+! { dg-do compile }
-+!
-+! PR fortran/50684
-+!
-+! Module "bug" contributed by Martin Steghöfer.
-+!
-+
-+MODULE BUG
-+ TYPE MY_TYPE
-+ INTEGER, ALLOCATABLE :: VALUE
-+ END TYPE
-+CONTAINS
-+ SUBROUTINE POINTER_INTENT_IN_BUG_WORKING(POINTER_INTENT_IN_VARIABLE)
-+ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
-+ TYPE(MY_TYPE), POINTER :: POINTER_VARIABLE_LOCAL
-+ INTEGER, ALLOCATABLE :: LOCAL_VALUE
-+
-+ POINTER_VARIABLE_LOCAL=>POINTER_INTENT_IN_VARIABLE
-+ CALL MOVE_ALLOC(POINTER_VARIABLE_LOCAL%VALUE, LOCAL_VALUE)
-+
-+ RETURN
-+ END SUBROUTINE POINTER_INTENT_IN_BUG_WORKING
-+
-+ SUBROUTINE POINTER_INTENT_IN_BUG_FAILING(POINTER_INTENT_IN_VARIABLE)
-+ TYPE(MY_TYPE), POINTER, INTENT(IN) :: POINTER_INTENT_IN_VARIABLE
-+ INTEGER, ALLOCATABLE :: LOCAL_VALUE
-+
-+ CALL MOVE_ALLOC(POINTER_INTENT_IN_VARIABLE%VALUE, LOCAL_VALUE)
-+
-+ RETURN
-+ END SUBROUTINE POINTER_INTENT_IN_BUG_FAILING
-+end module bug
-+
-+subroutine test1()
-+ TYPE MY_TYPE
-+ INTEGER, ALLOCATABLE :: VALUE
-+ END TYPE
-+CONTAINS
-+ SUBROUTINE sub (dt)
-+ type(MY_TYPE), intent(in) :: dt
-+ INTEGER, ALLOCATABLE :: lv
-+ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
-+ END SUBROUTINE
-+end subroutine test1
-+
-+subroutine test2 (x, px)
-+ implicit none
-+ type t
-+ integer, allocatable :: a
-+ end type t
-+
-+ type t2
-+ type(t), pointer :: ptr
-+ integer, allocatable :: a
-+ end type t2
-+
-+ type(t2), intent(in) :: x
-+ type(t2), pointer, intent(in) :: px
-+
-+ integer, allocatable :: a
-+ type(t2), pointer :: ta
-+
-+ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
-+ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
-+ call move_alloc (x%ptr%a, a) ! OK (3)
-+ call move_alloc (px%a, a) ! OK (4)
-+ call move_alloc (px%ptr%a, a) ! OK (5)
-+end subroutine test2
-+
-+subroutine test3 (x, px)
-+ implicit none
-+ type t
-+ integer, allocatable :: a
-+ end type t
-+
-+ type t2
-+ class(t), pointer :: ptr
-+ integer, allocatable :: a
-+ end type t2
-+
-+ type(t2), intent(in) :: x
-+ class(t2), pointer, intent(in) :: px
-+
-+ integer, allocatable :: a
-+ class(t2), pointer :: ta
-+
-+ call move_alloc (px, ta) ! { dg-error "cannot be INTENT.IN." }
-+ call move_alloc (x%a, a) ! { dg-error "cannot be INTENT.IN." }
-+ call move_alloc (x%ptr%a, a) ! OK (6)
-+ call move_alloc (px%a, a) ! OK (7)
-+ call move_alloc (px%ptr%a, a) ! OK (8)
-+end subroutine test3
-+
-+subroutine test4()
-+ TYPE MY_TYPE
-+ INTEGER, ALLOCATABLE :: VALUE
-+ END TYPE
-+CONTAINS
-+ SUBROUTINE sub (dt)
-+ CLASS(MY_TYPE), intent(in) :: dt
-+ INTEGER, ALLOCATABLE :: lv
-+ call move_alloc(dt%VALUE, lv) ! { dg-error "cannot be INTENT.IN." }
-+ END SUBROUTINE
-+end subroutine test4
-+
-+! { dg-final { cleanup-modules "bug" } }
-Index: gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/realloc_on_assign_8.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,17 @@
-+! { dg-do compile }
-+!
-+! PR fortran/51448
-+!
-+! Contribued by François Willot
-+!
-+ PROGRAM MAIN
-+ IMPLICIT NONE
-+ TYPE mytype
-+ REAL b(2)
-+ END TYPE mytype
-+ TYPE(mytype) a
-+ DOUBLE PRECISION, ALLOCATABLE :: x(:)
-+ ALLOCATE(x(2))
-+ a%b=0.0E0
-+ x=a%b
-+ END
-Index: gcc/testsuite/gfortran.dg/default_initialization_5.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/default_initialization_5.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,66 @@
-+! { dg-do run }
-+! { dg-options "-fdump-tree-original" }
-+!
-+! PR fortran/51435
-+!
-+! Contributed by darmar.xxl@gmail.com
-+!
-+module arr_m
-+ type arr_t
-+ real(8), dimension(:), allocatable :: rsk
-+ end type
-+ type arr_t2
-+ integer :: a = 77
-+ end type
-+end module arr_m
-+!*********************
-+module list_m
-+ use arr_m
-+ implicit none
-+
-+ type(arr_t2), target :: tgt
-+
-+ type my_list
-+ type(arr_t), pointer :: head => null()
-+ end type my_list
-+ type my_list2
-+ type(arr_t2), pointer :: head => tgt
-+ end type my_list2
-+end module list_m
-+!***********************
-+module worker_mod
-+ use list_m
-+ implicit none
-+
-+ type data_all_t
-+ type(my_list) :: my_data
-+ end type data_all_t
-+ type data_all_t2
-+ type(my_list2) :: my_data
-+ end type data_all_t2
-+contains
-+ subroutine do_job()
-+ type(data_all_t) :: dum
-+ type(data_all_t2) :: dum2
-+
-+ if (associated(dum%my_data%head)) then
-+ call abort()
-+ else
-+ print *, 'OK: do_job my_data%head is NOT associated'
-+ end if
-+
-+ if (dum2%my_data%head%a /= 77) &
-+ call abort()
-+ end subroutine
-+end module
-+!***************
-+program hello
-+ use worker_mod
-+ implicit none
-+ call do_job()
-+end program
-+
-+! { dg-final { scan-tree-dump-times "my_data.head = 0B" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "my_data.head = &tgt" 1 "original" } }
-+! { dg-final { cleanup-tree-dump "original" } }
-+! { dg-final { cleanup-modules "arr_m list_m worker_mod" } }
-Index: gcc/testsuite/gfortran.dg/pr50875.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/pr50875.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/pr50875.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,39 @@
-+! { dg-do compile { target { i?86-*-* x86_64-*-* } } }
-+! { dg-options "-O3 -mavx" }
-+!
-+! PR fortran/50875.f90
-+
-+module test
-+
-+ implicit none
-+
-+ integer, parameter :: dp=kind(1.d0)
-+
-+ integer :: P = 2
-+
-+ real(kind=dp), allocatable :: real_array_A(:),real_array_B(:,:)
-+ complex(kind=dp), allocatable :: cmplx_array_A(:)
-+
-+contains
-+
-+ subroutine routine_A
-+
-+ integer :: i
-+
-+ allocate(cmplx_array_A(P),real_array_B(P,P),real_array_A(P))
-+
-+ real_array_A = 1
-+ real_array_B = 1
-+
-+ do i = 1, p
-+ cmplx_array_A = cmplx(real_array_B(:,i),0.0_dp,dp)
-+ cmplx_array_A = cmplx_array_A * exp(cmplx(0.0_dp,real_array_A+1))
-+ end do
-+
-+ deallocate(cmplx_array_A,real_array_B,real_array_A)
-+
-+ end subroutine routine_A
-+
-+end module test
-+
-+! { dg-final { cleanup-modules "test" } }
-Index: gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/warn_function_without_result_2.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,19 @@
-+! { dg-do compile }
-+! { dg-options "-Wall" }
-+!
-+! PR fortran/50923
-+!
-+module m
-+contains
-+ integer pure function f() ! { dg-warning "Return value of function 'f' at .1. not set" }
-+ end function f
-+ integer pure function g() result(h) ! { dg-warning "Return value 'h' of function 'g' declared at .1. not set" }
-+ end function g
-+ integer pure function i()
-+ i = 7
-+ end function i
-+ integer pure function j() result(k)
-+ k = 8
-+ end function j
-+end module m
-+! { dg-final { cleanup-modules "mod" } }
-Index: gcc/testsuite/gfortran.dg/implicit_pure_1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90 (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_1.f90 (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,53 @@
-+! { dg-do run }
-+!
-+! PR fortran/51218
-+!
-+! Contributed by Harald Anlauf
-+!
-+
-+module a
-+ implicit none
-+ integer :: neval = 0
-+contains
-+ subroutine inc_eval
-+ neval = neval + 1
-+ end subroutine inc_eval
-+end module a
-+
-+module b
-+ use a
-+ implicit none
-+contains
-+ function f(x) ! Should be implicit pure
-+ real :: f
-+ real, intent(in) :: x
-+ f = x
-+ end function f
-+
-+ function g(x) ! Should NOT be implicit pure
-+ real :: g
-+ real, intent(in) :: x
-+ call inc_eval
-+ g = x
-+ end function g
-+end module b
-+
-+program gfcbug114a
-+ use a
-+ use b
-+ implicit none
-+ real :: x = 1, y = 1, t, u, v, w
-+ if (neval /= 0) call abort ()
-+ t = f(x)*f(y)
-+ if (neval /= 0) call abort ()
-+ u = f(x)*f(y) + f(x)*f(y)
-+ if (neval /= 0) call abort ()
-+ v = g(x)*g(y)
-+ if (neval /= 2) call abort ()
-+ w = g(x)*g(y) + g(x)*g(y)
-+ if (neval /= 6) call abort ()
-+ if (t /= 1.0 .or. u /= 2.0 .or. v /= 1.0 .or. w /= 2) call abort ()
-+end program gfcbug114a
-+
-+! { dg-final { scan-module "b" "IMPLICIT_PURE" } }
-+! { dg-final { cleanup-modules "b" } }
-Index: gcc/testsuite/gcc.c-torture/execute/pr51466.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51466.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,43 @@
-+/* PR tree-optimization/51466 */
-+
-+extern void abort (void);
-+
-+__attribute__((noinline, noclone)) int
-+foo (int i)
-+{
-+ volatile int v[4];
-+ int *p;
-+ v[i] = 6;
-+ p = (int *) &v[i];
-+ return *p;
-+}
-+
-+__attribute__((noinline, noclone)) int
-+bar (int i)
-+{
-+ volatile int v[4];
-+ int *p;
-+ v[i] = 6;
-+ p = (int *) &v[i];
-+ *p = 8;
-+ return v[i];
-+}
-+
-+__attribute__((noinline, noclone)) int
-+baz (int i)
-+{
-+ volatile int v[4];
-+ int *p;
-+ v[i] = 6;
-+ p = (int *) &v[0];
-+ *p = 8;
-+ return v[i];
-+}
-+
-+int
-+main ()
-+{
-+ if (foo (3) != 6 || bar (2) != 8 || baz (0) != 8 || baz (1) != 6)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/20111212-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/20111212-1.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,34 @@
-+/* PR tree-optimization/50569 */
-+/* Reported by Paul Koning <pkoning@gcc.gnu.org> */
-+/* Reduced testcase by Mikael Pettersson <mikpe@it.uu.se> */
-+
-+struct event {
-+ struct {
-+ unsigned int sec;
-+ } sent __attribute__((packed));
-+};
-+
-+void __attribute__((noinline,noclone)) frob_entry(char *buf)
-+{
-+ struct event event;
-+
-+ __builtin_memcpy(&event, buf, sizeof(event));
-+ if (event.sent.sec < 64) {
-+ event.sent.sec = -1U;
-+ __builtin_memcpy(buf, &event, sizeof(event));
-+ }
-+}
-+
-+int main(void)
-+{
-+ union {
-+ char buf[1 + sizeof(struct event)];
-+ int align;
-+ } u;
-+
-+ __builtin_memset(&u, 0, sizeof u);
-+
-+ frob_entry(&u.buf[1]);
-+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr51323.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr51323.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,35 @@
-+/* PR middle-end/51323 */
-+
-+extern void abort (void);
-+struct S { int a, b, c; };
-+int v;
-+
-+__attribute__((noinline, noclone)) void
-+foo (int x, int y, int z)
-+{
-+ if (x != v || y != 0 || z != 9)
-+ abort ();
-+}
-+
-+static inline int
-+baz (const struct S *p)
-+{
-+ return p->b;
-+}
-+
-+__attribute__((noinline, noclone)) void
-+bar (int x, struct S y)
-+{
-+ foo (baz (&y), 0, x);
-+}
-+
-+int
-+main ()
-+{
-+ struct S s;
-+ v = 3; s.a = v - 1; s.b = v; s.c = v + 1;
-+ bar (9, s);
-+ v = 17; s.a = v - 1; s.b = v; s.c = v + 1;
-+ bar (9, s);
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/20111208-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/20111208-1.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,94 @@
-+/* PR tree-optimization/51315 */
-+/* Reported by Jurij Smakov <jurij@wooyd.org> */
-+
-+typedef unsigned int size_t;
-+
-+extern void *memcpy (void *__restrict __dest,
-+ __const void *__restrict __src, size_t __n)
-+ __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
-+
-+extern size_t strlen (__const char *__s)
-+ __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
-+
-+typedef short int int16_t;
-+typedef int int32_t;
-+
-+extern void abort (void);
-+
-+int a;
-+
-+static void __attribute__ ((noinline,noclone))
-+do_something (int item)
-+{
-+ a = item;
-+}
-+
-+int
-+pack_unpack (char *s, char *p)
-+{
-+ char *send, *pend;
-+ char type;
-+ int integer_size;
-+
-+ send = s + strlen (s);
-+ pend = p + strlen (p);
-+
-+ while (p < pend)
-+ {
-+ type = *p++;
-+
-+ switch (type)
-+ {
-+ case 's':
-+ integer_size = 2;
-+ goto unpack_integer;
-+
-+ case 'l':
-+ integer_size = 4;
-+ goto unpack_integer;
-+
-+ unpack_integer:
-+ switch (integer_size)
-+ {
-+ case 2:
-+ {
-+ union
-+ {
-+ int16_t i;
-+ char a[sizeof (int16_t)];
-+ }
-+ v;
-+ memcpy (v.a, s, sizeof (int16_t));
-+ s += sizeof (int16_t);
-+ do_something (v.i);
-+ }
-+ break;
-+
-+ case 4:
-+ {
-+ union
-+ {
-+ int32_t i;
-+ char a[sizeof (int32_t)];
-+ }
-+ v;
-+ memcpy (v.a, s, sizeof (int32_t));
-+ s += sizeof (int32_t);
-+ do_something (v.i);
-+ }
-+ break;
-+ }
-+ break;
-+ }
-+ }
-+ return (int) *s;
-+}
-+
-+int
-+main (void)
-+{
-+ int n = pack_unpack ("\200\001\377\376\035\300", "sl");
-+ if (n != 0)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/pr51077.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr51077.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,15 @@
-+/* PR middle-end/51077 */
-+
-+struct S { unsigned char s, t[256]; };
-+
-+void
-+foo (const struct S *x, struct S *y, int z)
-+{
-+ int i;
-+ for (i = 0; i < 8; i++)
-+ {
-+ const struct S *a = &x[i];
-+ __builtin___memcpy_chk (y->t, a->t, z, __builtin_object_size (y->t, 0));
-+ y = (struct S *) &y->t[z];
-+ }
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/20110913-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/compile/20110913-1.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,26 @@
-+struct ieee754_double {
-+ double d;
-+};
-+extern const float __exp_deltatable[178];
-+float __ieee754_expf (float x)
-+{
-+ static const float himark = 88.72283935546875;
-+ static const float lomark = -103.972084045410;
-+ if (__builtin_isless(x, himark) && __builtin_isgreater(x, lomark))
-+ {
-+ int tval;
-+ double x22, t, result, dx;
-+ float delta;
-+ struct ieee754_double ex2_u;
-+ dx -= t;
-+ tval = (int) (t * 512.0);
-+ if (t >= 0)
-+ delta = - __exp_deltatable[tval];
-+ else
-+ delta = __exp_deltatable[-tval];
-+ x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
-+ result = x22 * ex2_u.d + ex2_u.d;
-+ return (float) result;
-+ }
-+ return x;
-+}
-Index: gcc/testsuite/gnat.dg/frame_overflow.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/frame_overflow.adb (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gnat.dg/frame_overflow.adb (.../branches/gcc-4_6-branch)
-@@ -1,27 +1,20 @@
- -- { dg-do compile }
-
--with System;
-+package body Frame_Overflow is
-
--procedure frame_overflow is
--
-- type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
-- type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
--
-- type Bitmap_T is record
-- Bits : Bitmap_Array_T := (others => False);
-- end record;
--
-- function
-+ function -- { dg-error "too large" }
- Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T
- is
-- Result: Bitmap_T := Bitmap; -- { dg-error "Storage_Error" }
-+ Result: Bitmap_T := Bitmap;
- begin
- Result.Bits (Bitpos) := True;
- return Result;
- end;
-
-- function Negate (Bitmap : Bitmap_T) return Bitmap_T is
-- Result: Bitmap_T; -- { dg-error "Storage_Error" }
-+ function -- { dg-error "too large" }
-+ Negate (Bitmap : Bitmap_T) return Bitmap_T
-+ is
-+ Result: Bitmap_T;
- begin
- for E in Bitpos_Range_T loop
- Result.Bits (E) := not Bitmap.Bits (E);
-@@ -29,6 +22,4 @@
- return Result;
- end;
-
--begin
-- null;
--end;
-+end Frame_Overflow;
-Index: gcc/testsuite/gnat.dg/frame_overflow.ads
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/frame_overflow.ads (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gnat.dg/frame_overflow.ads (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,17 @@
-+with System;
-+
-+package Frame_Overflow is
-+
-+ type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
-+ type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
-+
-+ type Bitmap_T is record
-+ Bits : Bitmap_Array_T := (others => False);
-+ end record;
-+
-+ function
-+ Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T;
-+
-+ function Negate (Bitmap : Bitmap_T) return Bitmap_T;
-+
-+end Frame_Overflow;
-Index: gcc/testsuite/gnat.dg/specs/addr1.ads
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/specs/addr1.ads (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gnat.dg/specs/addr1.ads (.../branches/gcc-4_6-branch)
-@@ -15,7 +15,7 @@
- end record;
- for Rec2'Size use 64;
-
-- A: Arr (1 .. 12);
-+ A: Arr (1 .. 4);
-
- Obj1: Rec1;
- for Obj1'Address use A'Address; -- { dg-bogus "alignment" }
-Index: gcc/testsuite/gcc.dg/pr45819.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr45819.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr45819.c (.../branches/gcc-4_6-branch)
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-O2 -fdump-tree-optimized" } */
-+/* { dg-options "-O2 -fdump-tree-optimized -w" } */
-
- struct ehci_regs {
- char x;
-Index: gcc/testsuite/gcc.dg/gomp/pr51339.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/gomp/pr51339.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,15 @@
-+/* PR c/51339 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+char g[] = "g";
-+
-+void
-+foo (void)
-+{
-+#pragma omp parallel sections firstprivate (g) lastprivate (g)
-+ {
-+ #pragma omp section
-+ g[0] = 'h';
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/cpp/assert4.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/cpp/assert4.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/cpp/assert4.c (.../branches/gcc-4_6-branch)
-@@ -1,4 +1,4 @@
--/* Copyright (C) 2003, 2006, 2008 Free Software Foundation, Inc.
-+/* Copyright (C) 2003, 2006, 2008, 2009, 2011 Free Software Foundation, Inc.
- Test builtin preprocessor assertions.
- By Kaveh Ghazi <ghazi@caip.rutgers.edu>. */
-
-@@ -7,7 +7,7 @@
-
- /* Check for #system assertions. */
-
--#if defined __gnu_linux__
-+#if defined __linux__
- # if !#system(linux) || !#system(unix) || !#system(posix)
- # error
- # endif
-Index: gcc/testsuite/gcc.dg/pr50078.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr50078.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr50078.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,14 @@
-+/* PR tree-optimization/50078 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+
-+unsigned nonvolvar[2];
-+
-+void
-+test (int arg)
-+{
-+ unsigned v = *(volatile unsigned *) (&nonvolvar[arg]);
-+ *(volatile unsigned *) (&nonvolvar[arg]) = v;
-+}
-+
-+/* { dg-final { scan-assembler-times "movl\[^\n\r\]*nonvolvar" 2 { target { { i?86-*-* x86_64-*-* } && nonpic } } } } */
-Index: gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/debug/dwarf2/pr51410.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,13 @@
-+/* PR debug/51410 */
-+/* { dg-do compile } */
-+/* { dg-options "-O0 -gdwarf-2 -dA -fno-merge-debug-strings" } */
-+
-+int x;
-+
-+int
-+foo (void)
-+{
-+ return x;
-+}
-+
-+/* { dg-final { scan-assembler-times "\\(DIE\[^\\r\\n\]*DW_TAG_variable\\)" 1 } } */
-Index: gcc/testsuite/gcc.dg/pr51408.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr51408.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr51408.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,22 @@
-+/* This testcase used to fail because of a bug in
-+ arm.md:*minmax_arithsi. */
-+
-+/* { dg-do run } */
-+/* { dg-options "-O1" } */
-+
-+extern void abort (void);
-+
-+int __attribute__((noinline))
-+foo (int a, int b)
-+{
-+ int max = (b > 0) ? b : 0;
-+ return max - a;
-+}
-+
-+int
-+main (void)
-+{
-+ if (foo (3, -1) != -3)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/delay-slot-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/delay-slot-2.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/gcc.dg/delay-slot-2.c (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,116 @@
-+/* PR rtl-optimization/51187 */
-+/* Reported by Jurij Smakov <jurij@wooyd.org> */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-g -O2" } */
-+
-+extern int printf (__const char *__restrict __format, ...);
-+extern void print_c_condition (const char *);
-+
-+enum decision_type
-+{
-+ DT_num_insns,
-+ DT_mode, DT_code, DT_veclen,
-+ DT_elt_zero_int, DT_elt_one_int, DT_elt_zero_wide, DT_elt_zero_wide_safe,
-+ DT_const_int,
-+ DT_veclen_ge, DT_dup, DT_pred, DT_c_test,
-+ DT_accept_op, DT_accept_insn
-+};
-+
-+struct decision_test
-+{
-+ struct decision_test *next;
-+ enum decision_type type;
-+
-+ union
-+ {
-+ int num_insns;
-+
-+ struct
-+ {
-+ const char *name;
-+ } pred;
-+
-+ const char *c_test;
-+ int veclen;
-+ int dup;
-+ long intval;
-+ int opno;
-+
-+ struct {
-+ int code_number;
-+ int lineno;
-+ int num_clobbers_to_add;
-+ } insn;
-+ } u;
-+};
-+
-+enum routine_type {
-+ RECOG, SPLIT, PEEPHOLE2
-+};
-+
-+void
-+write_cond (struct decision_test *p, int depth,
-+ enum routine_type subroutine_type)
-+{
-+ switch (p->type)
-+ {
-+ case DT_num_insns:
-+ printf ("peep2_current_count >= %d", p->u.num_insns);
-+ break;
-+
-+ case DT_code:
-+ printf ("GET_CODE (x%d) == ", depth);
-+ break;
-+
-+ case DT_veclen:
-+ printf ("XVECLEN (x%d, 0) == %d", depth, p->u.veclen);
-+ break;
-+
-+ case DT_elt_zero_int:
-+ printf ("XINT (x%d, 0) == %d", depth, (int) p->u.intval);
-+ break;
-+
-+ case DT_elt_one_int:
-+ printf ("XINT (x%d, 1) == %d", depth, (int) p->u.intval);
-+ break;
-+
-+ case DT_elt_zero_wide:
-+ case DT_elt_zero_wide_safe:
-+ printf ("XWINT (x%d, 0) == ", depth);
-+ print_host_wide_int (p->u.intval);
-+ break;
-+
-+ case DT_const_int:
-+ printf ("x%d == const_int_rtx[MAX_SAVED_CONST_INT + (%d)]",
-+ depth, (int) p->u.intval);
-+ break;
-+
-+ case DT_veclen_ge:
-+ printf ("XVECLEN (x%d, 0) >= %d", depth, p->u.veclen);
-+ break;
-+
-+ case DT_dup:
-+ printf ("rtx_equal_p (x%d, operands[%d])", depth, p->u.dup);
-+ break;
-+
-+ case DT_pred:
-+ printf ("%s (x%d)", p->u.pred.name, depth);
-+ break;
-+
-+ case DT_c_test:
-+ print_c_condition (p->u.c_test);
-+ break;
-+
-+ case DT_accept_insn:
-+ ((void)(__builtin_expect(!(subroutine_type == RECOG), 0) ? __builtin_unreachable(), 0 : 0));
-+ ((void)(__builtin_expect(!(p->u.insn.num_clobbers_to_add), 0) ? __builtin_unreachable(), 0 : 0));
-+ printf ("pnum_clobbers != NULL");
-+ break;
-+
-+ default:
-+ __builtin_unreachable();
-+ }
-+}
-+
-+/* { dg-final { scan-assembler "printf" } } */
-Index: gcc/testsuite/ChangeLog
-===================================================================
---- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,203 @@
-+2011-12-14 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/51248
-+ * g++.dg/other/enum2.C: New.
-+
-+2011-12-13 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/51406
-+ PR c++/51161
-+ * g++.dg/cpp0x/rv-cast3.C: New.
-+ * g++.dg/cpp0x/rv-cast4.C: New.
-+
-+2011-12-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR testsuite/51511
-+ * gcc.dg/pr45819.c: Add -w to dg-options.
-+
-+ Backported from mainline
-+ 2011-12-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/51485
-+ * g++.dg/vect/pr51485.cc: New test.
-+
-+2011-12-12 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc.c-torture/execute/20111212-1.c: New test.
-+
-+2011-12-11 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50923
-+ * gfortran.dg/warn_function_without_result_2.f90: New.
-+
-+2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
-+
-+ PR fortran/51338
-+ Backport from trunk
-+ * gfortran.dg/assumed_charlen_substring_1.f90: New test.
-+
-+2011-12-09 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backport from mainline
-+ 2011-12-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/51466
-+ * gcc.c-torture/execute/pr51466.c: New test.
-+
-+ 2011-11-28 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/50078
-+ * gcc.dg/pr50078.c: New test.
-+
-+2011-12-09 Kazu Hirata <kazu@codesourcery.com>
-+
-+ Backport from mainline:
-+
-+ 2011-12-05 Kazu Hirata <kazu@codesourcery.com>
-+
-+ PR target/51408
-+ * gcc.dg/pr51408.c: New.
-+
-+2011-12-08 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51448
-+ * gfortran.dg/realloc_on_assign_8.f90: New.
-+
-+2011-12-08 Teresa Johnson <tejohnson@google.com>
-+
-+ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
-+ unused label.
-+
-+2011-12-08 Teresa Johnson <tejohnson@google.com>
-+
-+ * gcc.target/i386/movdi-rex64.c: Remove unnecessary
-+ -Wwrite-strings option.
-+
-+2011-12-08 Teresa Johnson <tejohnson@google.com>
-+
-+ * gcc.target/i386/movdi-rex64.c: New.
-+
-+2011-12-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backport from mainline
-+ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR debug/51410
-+ * gcc.dg/debug/dwarf2/pr51410.c: New test.
-+
-+ PR c/51339
-+ * gcc.dg/gomp/pr51339.c: New test.
-+
-+ 2011-12-05 Jakub Jelinek <jakub@redhat.com>
-+ Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR middle-end/51323
-+ PR middle-end/50074
-+ * gcc.c-torture/execute/pr51323.c: New test.
-+
-+ 2011-11-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR rtl-optimization/48721
-+ * gcc.target/i386/pr48721.c: New test.
-+
-+2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc.c-torture/execute/20111208-1.c: New test.
-+
-+ Backport from mainline
-+ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/frame_overflow.ads: New.
-+ * gnat.dg/frame_overflow.adb: Adjust.
-+ * gnat.dg/specs/addr1.ads: Likewise.
-+
-+2011-12-06 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51435
-+ * gfortran.dg/default_initialization_5.f90: New.
-+
-+2011-12-06 Martin Jambor <mjambor@suse.cz>
-+
-+ PR tree-optimization/50622
-+ * g++.dg/tree-ssa/pr50622.C: New test.
-+
-+2011-12-04 Uros Bizjak <ubizjak@gmail.com>
-+ Jérémie Detrey <Jeremie.Detrey@loria.fr>
-+
-+ PR target/51393
-+ * gcc.target/i386/pr51393.c: New test.
-+
-+2011-12-03 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50684
-+ * gfortran.dg/move_alloc_8.f90: New.
-+
-+2011-11-25 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50408
-+ * gfortran.dg/whole_file_35.f90: New.
-+
-+2011-11-24 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51218
-+ * resolve.c (pure_subroutine): If called subroutine is
-+ impure, unset implicit_pure.
-+ (resolve_function): Move impure check to simplify code.
-+
-+2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/51265
-+ * g++.dg/cpp0x/decltype36.C: New.
-+
-+2011-11-19 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc.dg/delay-slot-2.c: New test.
-+
-+2011-11-18 Joseph Myers <joseph@codesourcery.com>
-+
-+ * gcc.dg/cpp/assert4.c: Test __linux__, not __gnu_linux__.
-+
-+2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/51150
-+ * g++.dg/cpp0x/pr51150.C: New.
-+
-+2011-11-16 Richard Earnshaw <rearnsha@arm.com>
-+ Bernd Schmidt <bernds@coudesourcery.com>
-+ Sebastian Huber <sebastian.huber@embedded-brains.de>
-+
-+ PR target/49641
-+ * gcc.target/arm/pr49641.c: New test.
-+
-+2011-11-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/51077
-+ * gcc.c-torture/compile/pr51077.c: New test.
-+
-+2011-11-07 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/50870
-+ * g++.dg/cpp0x/decltype35.C: New.
-+
-+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * g++.dg/other/offsetof7.C: New test.
-+
-+2011-11-02 Bernd Schmidt <bernds@codesourcery.com>
-+
-+ * gcc.c-torture/compile/20110907.c: New file.
-+
-+2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/50901
-+ * g++.dg/cpp0x/pr50901.C: New.
-+
-+2011-10-27 Uros Bizjak <ubizjak@gmail.com>
-+ Steven G. Kargl <kargl@gcc.gnu.org>
-+
-+ PR target/50875
-+ * gfortran.dg/pr50875.f90: New test.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-@@ -9,9 +209,9 @@
-
- 2011-10-20 Uros Bizjak <ubizjak@gmail.com>
-
-- * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
-- non_strict_align.
-- * gcc.dg/ipa/ipa-sra-6.c: Ditto.
-+ * gcc.dg/ipa/ipa-sra-2.c: Add dg-require-effective-target
-+ non_strict_align.
-+ * gcc.dg/ipa/ipa-sra-6.c: Ditto.
-
- 2011-10-19 Jason Merrill <jason@redhat.com>
-
-Index: gcc/testsuite/g++.dg/vect/pr51485.cc
-===================================================================
---- a/src/gcc/testsuite/g++.dg/vect/pr51485.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/vect/pr51485.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,14 @@
-+/* { dg-do compile } */
-+
-+struct A { A (); unsigned int a; };
-+double bar (A a) throw () __attribute__((pure));
-+
-+void
-+foo (unsigned int x, double *y, A *z)
-+{
-+ unsigned int i;
-+ for (i = 0; i < x; i++)
-+ y[i] = bar (z[i]);
-+}
-+
-+/* { dg-final { cleanup-tree-dump "vect" } } */
-Index: gcc/testsuite/g++.dg/other/enum2.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/other/enum2.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/other/enum2.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,3 @@
-+// PR c++/51248
-+
-+enum E { e = sizeof(const E*) };
-Index: gcc/testsuite/g++.dg/other/offsetof7.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/other/offsetof7.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/other/offsetof7.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,17 @@
-+// PR c++/50608
-+// Testcase by <dberger@oubliette.org>
-+// { dg-do compile }
-+
-+struct A {
-+ int offset;
-+};
-+
-+struct B: public A {
-+};
-+
-+struct C {
-+ A a;
-+ B b;
-+};
-+
-+int fails = __builtin_offsetof (C, b.offset);
-Index: gcc/testsuite/g++.dg/tree-ssa/pr50622.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/tree-ssa/pr50622.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,30 @@
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+typedef __complex__ double Value;
-+struct LorentzVector
-+{
-+ LorentzVector & operator+=(const LorentzVector & a) {
-+ theX += a.theX;
-+ theY += a.theY;
-+ theZ += a.theZ;
-+ theT += a.theT;
-+ return *this;
-+ }
-+
-+ Value theX;
-+ Value theY;
-+ Value theZ;
-+ Value theT;
-+};
-+
-+inline LorentzVector
-+operator+(LorentzVector a, const LorentzVector & b) {
-+ return a += b;
-+}
-+
-+Value ex, et;
-+LorentzVector sum() {
-+ LorentzVector v1; v1.theX =ex; v1.theY =ex+et; v1.theZ =ex-et; v1.theT =et;
-+ return v1+v1;
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/pr50901.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/pr50901.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,9 @@
-+// { dg-options "-std=c++0x" }
-+
-+template<class T> int foo(int a)
-+{
-+ const unsigned b = a < 0 ? -a : a;
-+ return 0;
-+}
-+
-+int i = foo<float>(1);
-Index: gcc/testsuite/g++.dg/cpp0x/decltype35.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype35.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,15 @@
-+// PR c++/50870
-+// { dg-options -std=c++0x }
-+
-+template <class V>
-+ struct impl
-+ {
-+ template <class T> static T create();
-+ };
-+
-+template <class T, class U, class V, class
-+ = decltype(impl<V>::template create<T>()
-+ -> impl<V>::template create<U>())>
-+struct tester { };
-+
-+tester<impl<float>*, int, float> ti;
-Index: gcc/testsuite/g++.dg/cpp0x/decltype36.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype36.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,21 @@
-+// PR c++/51265
-+// { dg-options -std=c++0x }
-+
-+struct Funny
-+{
-+ int print(int);
-+};
-+
-+template<typename X>
-+void c();
-+
-+template<typename X, X ff>
-+void xx()
-+{
-+ c<decltype(ff)>();
-+}
-+
-+int main()
-+{
-+ xx<int(Funny::*)(int), &Funny::print>();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/pr51150.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/pr51150.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,20 @@
-+// PR c++/51150
-+// { dg-options "-std=c++0x" }
-+
-+struct Clock {
-+ double Now();
-+};
-+template <class T> void Foo(Clock* clock) {
-+ const int now = clock->Now();
-+}
-+
-+template void Foo<float>(Clock*);
-+
-+template <class T> void Boo(int val) {
-+ const int now1 = (double)(val);
-+ const int now2 = const_cast<double>(val); // { dg-error "invalid" }
-+ const int now3 = static_cast<double>(val);
-+ const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" }
-+}
-+
-+template void Boo<float>(int);
-Index: gcc/testsuite/g++.dg/cpp0x/rv-cast3.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast3.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,17 @@
-+// PR c++/51406
-+// { dg-do run { target c++11 } }
-+
-+extern "C" int printf(const char *,...);
-+extern "C" void abort();
-+
-+struct A { int a; A() : a(1) {} };
-+struct B { int b; B() : b(2) {} };
-+struct X : A, B {};
-+
-+int main() {
-+ X x;
-+ int a=static_cast<A&&>(x).a;
-+ int b=static_cast<B&&>(x).b;
-+ // printf ("%d %d\n", a, b);
-+ if (a!=1 || b!=2) abort();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/rv-cast4.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/rv-cast4.C (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,13 @@
-+// PR c++/51161
-+// { dg-do compile { target c++11 } }
-+
-+struct A{};
-+struct B : A{};
-+struct C : A{};
-+struct D : B, C{};
-+
-+int main()
-+{
-+ D d;
-+ static_cast<A &&>(d); // { dg-error "ambiguous" }
-+}
-Index: gcc/cp/typeck.c
-===================================================================
---- a/src/gcc/cp/typeck.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/typeck.c (.../branches/gcc-4_6-branch)
-@@ -4835,9 +4835,7 @@
- && TREE_CONSTANT (TREE_OPERAND (val, 0)))
- {
- tree type = build_pointer_type (argtype);
-- tree op0 = fold_convert (type, TREE_OPERAND (val, 0));
-- tree op1 = fold_convert (sizetype, fold_offsetof (arg, val));
-- return fold_build2 (POINTER_PLUS_EXPR, type, op0, op1);
-+ return fold_convert (type, fold_offsetof_1 (arg));
- }
-
- /* Handle complex lvalues (when permitted)
-@@ -5772,8 +5770,18 @@
- && reference_related_p (TREE_TYPE (type), intype)
- && (c_cast_p || at_least_as_qualified_p (TREE_TYPE (type), intype)))
- {
-- expr = build_typed_address (expr, type);
-- return convert_from_reference (expr);
-+ /* Handle the lvalue case here by casting to lvalue reference and
-+ then changing it to an rvalue reference. Casting an xvalue to
-+ rvalue reference will be handled by the main code path. */
-+ tree lref = cp_build_reference_type (TREE_TYPE (type), false);
-+ result = (perform_direct_initialization_if_possible
-+ (lref, expr, c_cast_p, complain));
-+ result = cp_fold_convert (type, result);
-+ /* Make sure we don't fold back down to a named rvalue reference,
-+ because that would be an lvalue. */
-+ if (DECL_P (result))
-+ result = build1 (NON_LVALUE_EXPR, type, result);
-+ return convert_from_reference (result);
- }
-
- /* Resolve overloaded address here rather than once in
-Index: gcc/cp/decl.c
-===================================================================
---- a/src/gcc/cp/decl.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_6-branch)
-@@ -11540,15 +11540,19 @@
- static void
- copy_type_enum (tree dst, tree src)
- {
-- TYPE_MIN_VALUE (dst) = TYPE_MIN_VALUE (src);
-- TYPE_MAX_VALUE (dst) = TYPE_MAX_VALUE (src);
-- TYPE_SIZE (dst) = TYPE_SIZE (src);
-- TYPE_SIZE_UNIT (dst) = TYPE_SIZE_UNIT (src);
-- SET_TYPE_MODE (dst, TYPE_MODE (src));
-- TYPE_PRECISION (dst) = TYPE_PRECISION (src);
-- TYPE_ALIGN (dst) = TYPE_ALIGN (src);
-- TYPE_USER_ALIGN (dst) = TYPE_USER_ALIGN (src);
-- TYPE_UNSIGNED (dst) = TYPE_UNSIGNED (src);
-+ tree t;
-+ for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
-+ {
-+ TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
-+ TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
-+ TYPE_SIZE (t) = TYPE_SIZE (src);
-+ TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
-+ SET_TYPE_MODE (dst, TYPE_MODE (src));
-+ TYPE_PRECISION (t) = TYPE_PRECISION (src);
-+ TYPE_ALIGN (t) = TYPE_ALIGN (src);
-+ TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
-+ TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
-+ }
- }
-
- /* Begin compiling the definition of an enumeration type.
-@@ -11903,9 +11907,12 @@
- return;
- }
-
-- /* Here there should not be any variants of this type. */
-+ /* If this is a forward declaration, there should not be any variants,
-+ though we can get a variant in the middle of an enum-specifier with
-+ wacky code like 'enum E { e = sizeof(const E*) };' */
- gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
-- && !TYPE_NEXT_VARIANT (enumtype));
-+ && (TYPE_VALUES (enumtype)
-+ || !TYPE_NEXT_VARIANT (enumtype)));
- }
-
- /* Build and install a CONST_DECL for an enumeration constant of the
-Index: gcc/cp/ChangeLog
-===================================================================
---- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,45 @@
-+2011-12-14 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/51248
-+ * decl.c (copy_type_enum): Also update variants.
-+ (finish_enum): Allow variants of complete enums.
-+
-+2011-12-13 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/51406
-+ PR c++/51161
-+ * typeck.c (build_static_cast_1): Fix cast of lvalue to
-+ base rvalue reference.
-+
-+2011-11-22 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/51265
-+ * semantics.c (finish_decltype_type): Handle PTRMEM_CST.
-+
-+2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/51150
-+ * pt.c (tsubst_copy_and_build): Handle FIX_TRUNC_EXPR.
-+
-+2011-11-07 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/50870
-+ * pt.c (tsubst_copy): Handle NAMESPACE_DECL.
-+ (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent
-+ object.
-+
-+2011-11-04 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR c++/50608
-+ * semantics.c (finish_offsetof): Adjust call to fold_offsetof.
-+ * typeck.c (cp_build_addr_expr_1): Call fold_offsetof_1.
-+
-+2011-10-29 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/50901
-+ * call.c (build_new_op_1): Handle ABS_EXPR together with the
-+ other unary EXPR.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/cp/pt.c
-===================================================================
---- a/src/gcc/cp/pt.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/pt.c (.../branches/gcc-4_6-branch)
-@@ -11439,6 +11439,9 @@
- mark_used (t);
- return t;
-
-+ case NAMESPACE_DECL:
-+ return t;
-+
- case OVERLOAD:
- /* An OVERLOAD will always be a non-dependent overload set; an
- overload set from function scope will just be represented with an
-@@ -12704,6 +12707,10 @@
- return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)),
- complain);
-
-+ case FIX_TRUNC_EXPR:
-+ return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)),
-+ 0, complain);
-+
- case ADDR_EXPR:
- op1 = TREE_OPERAND (t, 0);
- if (TREE_CODE (op1) == LABEL_DECL)
-@@ -13179,7 +13186,9 @@
- if (member == error_mark_node)
- return error_mark_node;
-
-- if (object_type && !CLASS_TYPE_P (object_type))
-+ if (type_dependent_expression_p (object))
-+ /* We can't do much here. */;
-+ else if (!CLASS_TYPE_P (object_type))
- {
- if (SCALAR_TYPE_P (object_type))
- {
-Index: gcc/cp/semantics.c
-===================================================================
---- a/src/gcc/cp/semantics.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_6-branch)
-@@ -3348,7 +3348,7 @@
- }
- if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
- expr = TREE_OPERAND (expr, 0);
-- return fold_offsetof (expr, NULL_TREE);
-+ return fold_offsetof (expr);
- }
-
- /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
-@@ -4927,8 +4927,9 @@
- gcc_unreachable ();
-
- case INTEGER_CST:
-+ case PTRMEM_CST:
- /* We can get here when the id-expression refers to an
-- enumerator. */
-+ enumerator or non-type template parameter. */
- type = TREE_TYPE (expr);
- break;
-
-Index: gcc/cp/call.c
-===================================================================
---- a/src/gcc/cp/call.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cp/call.c (.../branches/gcc-4_6-branch)
-@@ -4996,6 +4996,7 @@
- case POSTDECREMENT_EXPR:
- case REALPART_EXPR:
- case IMAGPART_EXPR:
-+ case ABS_EXPR:
- return cp_build_unary_op (code, arg1, candidates != 0, complain);
-
- case ARRAY_REF:
-Index: gcc/lto-cgraph.c
-===================================================================
---- a/src/gcc/lto-cgraph.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto-cgraph.c (.../branches/gcc-4_6-branch)
-@@ -1792,9 +1792,9 @@
- {
- const struct lto_function_header *header =
- (const struct lto_function_header *) data;
-- const int32_t cfg_offset = sizeof (struct lto_function_header);
-- const int32_t main_offset = cfg_offset + header->cfg_size;
-- const int32_t string_offset = main_offset + header->main_size;
-+ const int cfg_offset = sizeof (struct lto_function_header);
-+ const int main_offset = cfg_offset + header->cfg_size;
-+ const int string_offset = main_offset + header->main_size;
- struct data_in *data_in;
- struct lto_input_block ib_main;
- unsigned int i;
-Index: gcc/lto-streamer-out.c
-===================================================================
---- a/src/gcc/lto-streamer-out.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto-streamer-out.c (.../branches/gcc-4_6-branch)
-@@ -2408,7 +2408,7 @@
- enum gcc_plugin_symbol_kind kind;
- enum gcc_plugin_symbol_visibility visibility;
- int slot_num;
-- uint64_t size;
-+ unsigned HOST_WIDEST_INT size;
- const char *comdat;
- unsigned char c;
-
-@@ -2466,7 +2466,7 @@
- when symbol has attribute (visibility("hidden")) specified.
- targetm.binds_local_p check DECL_VISIBILITY_SPECIFIED and gets this
- right. */
--
-+
- if (DECL_EXTERNAL (t)
- && !targetm.binds_local_p (t))
- visibility = GCCPV_DEFAULT;
-@@ -2488,14 +2488,9 @@
- }
-
- if (kind == GCCPK_COMMON
-- && DECL_SIZE (t)
-- && TREE_CODE (DECL_SIZE (t)) == INTEGER_CST)
-- {
-- size = (HOST_BITS_PER_WIDE_INT >= 64)
-- ? (uint64_t) int_size_in_bytes (TREE_TYPE (t))
-- : (((uint64_t) TREE_INT_CST_HIGH (DECL_SIZE_UNIT (t))) << 32)
-- | TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
-- }
-+ && DECL_SIZE_UNIT (t)
-+ && TREE_CODE (DECL_SIZE_UNIT (t)) == INTEGER_CST)
-+ size = TREE_INT_CST_LOW (DECL_SIZE_UNIT (t));
- else
- size = 0;
-
-Index: gcc/dwarf2out.c
-===================================================================
---- a/src/gcc/dwarf2out.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/dwarf2out.c (.../branches/gcc-4_6-branch)
-@@ -4431,6 +4431,11 @@
- const char *section; /* Section this loclist is relative to */
- dw_loc_descr_ref expr;
- hashval_t hash;
-+ /* True if all addresses in this and subsequent lists are known to be
-+ resolved. */
-+ bool resolved_addr;
-+ /* True if this list has been replaced by dw_loc_next. */
-+ bool replaced;
- bool emitted;
- } dw_loc_list_node;
-
-@@ -6091,6 +6096,19 @@
- /* Table of decl location linked lists. */
- static GTY ((param_is (var_loc_list))) htab_t decl_loc_table;
-
-+/* A cached location list. */
-+struct GTY (()) cached_dw_loc_list_def {
-+ /* The DECL_UID of the decl that this entry describes. */
-+ unsigned int decl_id;
-+
-+ /* The cached location list. */
-+ dw_loc_list_ref loc_list;
-+};
-+typedef struct cached_dw_loc_list_def cached_dw_loc_list;
-+
-+/* Table of cached location lists. */
-+static GTY ((param_is (cached_dw_loc_list))) htab_t cached_dw_loc_list_table;
-+
- /* A pointer to the base of a list of references to DIE's that
- are uniquely identified by their tag, presence/absence of
- children DIE's, and list of attribute/value pairs. */
-@@ -6439,7 +6457,7 @@
- static void insert_double (double_int, unsigned char *);
- static void insert_float (const_rtx, unsigned char *);
- static rtx rtl_for_decl_location (tree);
--static bool add_location_or_const_value_attribute (dw_die_ref, tree,
-+static bool add_location_or_const_value_attribute (dw_die_ref, tree, bool,
- enum dwarf_attribute);
- static bool tree_add_const_value_attribute (dw_die_ref, tree);
- static bool tree_add_const_value_attribute_for_decl (dw_die_ref, tree);
-@@ -8173,6 +8191,24 @@
- htab_find_with_hash (decl_loc_table, decl, DECL_UID (decl));
- }
-
-+/* Returns a hash value for X (which really is a cached_dw_loc_list_list). */
-+
-+static hashval_t
-+cached_dw_loc_list_table_hash (const void *x)
-+{
-+ return (hashval_t) ((const cached_dw_loc_list *) x)->decl_id;
-+}
-+
-+/* Return nonzero if decl_id of cached_dw_loc_list X is the same as
-+ UID of decl *Y. */
-+
-+static int
-+cached_dw_loc_list_table_eq (const void *x, const void *y)
-+{
-+ return (((const cached_dw_loc_list *) x)->decl_id
-+ == DECL_UID ((const_tree) y));
-+}
-+
- /* Equate a DIE to a particular declaration. */
-
- static void
-@@ -16995,15 +17031,22 @@
- these things can crop up in other ways also.) Note that one type of
- constant value which can be passed into an inlined function is a constant
- pointer. This can happen for example if an actual argument in an inlined
-- function call evaluates to a compile-time constant address. */
-+ function call evaluates to a compile-time constant address.
-
-+ CACHE_P is true if it is worth caching the location list for DECL,
-+ so that future calls can reuse it rather than regenerate it from scratch.
-+ This is true for BLOCK_NONLOCALIZED_VARS in inlined subroutines,
-+ since we will need to refer to them each time the function is inlined. */
-+
- static bool
--add_location_or_const_value_attribute (dw_die_ref die, tree decl,
-+add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p,
- enum dwarf_attribute attr)
- {
- rtx rtl;
- dw_loc_list_ref list;
- var_loc_list *loc_list;
-+ cached_dw_loc_list *cache;
-+ void **slot;
-
- if (TREE_CODE (decl) == ERROR_MARK)
- return false;
-@@ -17040,7 +17083,33 @@
- && add_const_value_attribute (die, rtl))
- return true;
- }
-- list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
-+ /* If this decl is from BLOCK_NONLOCALIZED_VARS, we might need its
-+ list several times. See if we've already cached the contents. */
-+ list = NULL;
-+ if (loc_list == NULL || cached_dw_loc_list_table == NULL)
-+ cache_p = false;
-+ if (cache_p)
-+ {
-+ cache = (cached_dw_loc_list *)
-+ htab_find_with_hash (cached_dw_loc_list_table, decl, DECL_UID (decl));
-+ if (cache)
-+ list = cache->loc_list;
-+ }
-+ if (list == NULL)
-+ {
-+ list = loc_list_from_tree (decl, decl_by_reference_p (decl) ? 0 : 2);
-+ /* It is usually worth caching this result if the decl is from
-+ BLOCK_NONLOCALIZED_VARS and if the list has at least two elements. */
-+ if (cache_p && list && list->dw_loc_next)
-+ {
-+ slot = htab_find_slot_with_hash (cached_dw_loc_list_table, decl,
-+ DECL_UID (decl), INSERT);
-+ cache = ggc_alloc_cleared_cached_dw_loc_list ();
-+ cache->decl_id = DECL_UID (decl);
-+ cache->loc_list = list;
-+ *slot = cache;
-+ }
-+ }
- if (list)
- {
- add_AT_location_description (die, attr, list);
-@@ -18738,7 +18807,7 @@
- equate_decl_number_to_die (node, parm_die);
- if (! DECL_ABSTRACT (node_or_origin))
- add_location_or_const_value_attribute (parm_die, node_or_origin,
-- DW_AT_location);
-+ node == NULL, DW_AT_location);
-
- break;
-
-@@ -18923,6 +18992,7 @@
- tree context;
- int was_abstract;
- htab_t old_decl_loc_table;
-+ htab_t old_cached_dw_loc_list_table;
-
- /* Make sure we have the actual abstract inline, not a clone. */
- decl = DECL_ORIGIN (decl);
-@@ -18937,6 +19007,8 @@
- get locations in abstract instantces. */
- old_decl_loc_table = decl_loc_table;
- decl_loc_table = NULL;
-+ old_cached_dw_loc_list_table = cached_dw_loc_list_table;
-+ cached_dw_loc_list_table = NULL;
-
- /* Be sure we've emitted the in-class declaration DIE (if any) first, so
- we don't get confused by DECL_ABSTRACT. */
-@@ -18961,6 +19033,7 @@
-
- current_function_decl = save_fn;
- decl_loc_table = old_decl_loc_table;
-+ cached_dw_loc_list_table = old_cached_dw_loc_list_table;
- pop_cfun ();
- }
-
-@@ -19745,9 +19818,8 @@
- && !TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl_or_origin)))
- defer_location (decl_or_origin, var_die);
- else
-- add_location_or_const_value_attribute (var_die,
-- decl_or_origin,
-- DW_AT_location);
-+ add_location_or_const_value_attribute (var_die, decl_or_origin,
-+ decl == NULL, DW_AT_location);
- add_pubname (decl_or_origin, var_die);
- }
- else
-@@ -21534,6 +21606,7 @@
- dwarf2out_decl (decl);
-
- htab_empty (decl_loc_table);
-+ htab_empty (cached_dw_loc_list_table);
- }
-
- /* Output a marker (i.e. a label) for the beginning of the generated code for
-@@ -22267,6 +22340,11 @@
- decl_loc_table = htab_create_ggc (10, decl_loc_table_hash,
- decl_loc_table_eq, NULL);
-
-+ /* Allocate the cached_dw_loc_list_table. */
-+ cached_dw_loc_list_table
-+ = htab_create_ggc (10, cached_dw_loc_list_table_hash,
-+ cached_dw_loc_list_table_eq, NULL);
-+
- /* Allocate the initial hunk of the decl_scope_table. */
- decl_scope_table = VEC_alloc (tree, gc, 256);
-
-@@ -22907,30 +22985,53 @@
- {
- dw_die_ref c;
- dw_attr_ref a;
-- dw_loc_list_ref *curr;
-+ dw_loc_list_ref *curr, *start, loc;
- unsigned ix;
-
- FOR_EACH_VEC_ELT (dw_attr_node, die->die_attr, ix, a)
- switch (AT_class (a))
- {
- case dw_val_class_loc_list:
-- curr = AT_loc_list_ptr (a);
-- while (*curr)
-+ start = curr = AT_loc_list_ptr (a);
-+ loc = *curr;
-+ gcc_assert (loc);
-+ /* The same list can be referenced more than once. See if we have
-+ already recorded the result from a previous pass. */
-+ if (loc->replaced)
-+ *curr = loc->dw_loc_next;
-+ else if (!loc->resolved_addr)
- {
-- if (!resolve_addr_in_expr ((*curr)->expr))
-+ /* As things stand, we do not expect or allow one die to
-+ reference a suffix of another die's location list chain.
-+ References must be identical or completely separate.
-+ There is therefore no need to cache the result of this
-+ pass on any list other than the first; doing so
-+ would lead to unnecessary writes. */
-+ while (*curr)
- {
-- dw_loc_list_ref next = (*curr)->dw_loc_next;
-- if (next && (*curr)->ll_symbol)
-+ gcc_assert (!(*curr)->replaced && !(*curr)->resolved_addr);
-+ if (!resolve_addr_in_expr ((*curr)->expr))
- {
-- gcc_assert (!next->ll_symbol);
-- next->ll_symbol = (*curr)->ll_symbol;
-+ dw_loc_list_ref next = (*curr)->dw_loc_next;
-+ if (next && (*curr)->ll_symbol)
-+ {
-+ gcc_assert (!next->ll_symbol);
-+ next->ll_symbol = (*curr)->ll_symbol;
-+ }
-+ *curr = next;
- }
-- *curr = next;
-+ else
-+ curr = &(*curr)->dw_loc_next;
- }
-+ if (loc == *start)
-+ loc->resolved_addr = 1;
- else
-- curr = &(*curr)->dw_loc_next;
-+ {
-+ loc->replaced = 1;
-+ loc->dw_loc_next = *start;
-+ }
- }
-- if (!AT_loc_list (a))
-+ if (!*start)
- {
- remove_AT (die, a->dw_attr);
- ix--;
-@@ -23359,6 +23460,7 @@
- add_location_or_const_value_attribute (
- VEC_index (deferred_locations, deferred_locations_list, i)->die,
- VEC_index (deferred_locations, deferred_locations_list, i)->variable,
-+ false,
- DW_AT_location);
- }
-
-Index: gcc/ada/mlib-tgt-specific-darwin.adb
-===================================================================
---- a/src/gcc/ada/mlib-tgt-specific-darwin.adb (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/mlib-tgt-specific-darwin.adb (.../branches/gcc-4_6-branch)
-@@ -36,8 +36,6 @@
-
- -- Non default subprograms
-
-- function Archive_Indexer_Options return String_List_Access;
--
- procedure Build_Dynamic_Library
- (Ofiles : Argument_List;
- Options : Argument_List;
-@@ -67,15 +65,6 @@
- (1 => Flat_Namespace'Access,
- 2 => Shared_Libgcc'Access);
-
-- -----------------------------
-- -- Archive_Indexer_Options --
-- -----------------------------
--
-- function Archive_Indexer_Options return String_List_Access is
-- begin
-- return new String_List'(1 => new String'("-c"));
-- end Archive_Indexer_Options;
--
- ---------------------------
- -- Build_Dynamic_Library --
- ---------------------------
-@@ -180,7 +169,6 @@
- end Is_Archive_Ext;
-
- begin
-- Archive_Indexer_Options_Ptr := Archive_Indexer_Options'Access;
- Build_Dynamic_Library_Ptr := Build_Dynamic_Library'Access;
- DLL_Ext_Ptr := DLL_Ext'Access;
- Dynamic_Option_Ptr := Dynamic_Option'Access;
-Index: gcc/ada/init.c
-===================================================================
---- a/src/gcc/ada/init.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/init.c (.../branches/gcc-4_6-branch)
-@@ -2216,12 +2216,33 @@
- return 0;
- }
-
-+#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-+
-+void
-+__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
-+ void *ucontext ATTRIBUTE_UNUSED)
-+{
-+#if defined (__x86_64__)
-+ /* Work around radar #10302855/pr50678, where the unwinders (libunwind or
-+ libgcc_s depending on the system revision) and the DWARF unwind data for
-+ the sigtramp have different ideas about register numbering (causing rbx
-+ and rdx to be transposed).. */
-+ ucontext_t *uc = (ucontext_t *)ucontext ;
-+ unsigned long t = uc->uc_mcontext->__ss.__rbx;
-+
-+ uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
-+ uc->uc_mcontext->__ss.__rdx = t;
-+#endif
-+}
-+
- static void
--__gnat_error_handler (int sig, siginfo_t *si, void *ucontext ATTRIBUTE_UNUSED)
-+__gnat_error_handler (int sig, siginfo_t *si, void *ucontext)
- {
- struct Exception_Data *exception;
- const char *msg;
-
-+ __gnat_adjust_context_for_raise (sig, ucontext);
-+
- switch (sig)
- {
- case SIGSEGV:
-Index: gcc/ada/ChangeLog
-===================================================================
---- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,42 @@
-+2011-12-08 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR tree-optimization/51315
-+ Backport from mainline
-+ 2011-09-25 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc-interface/decl.c (gnat_to_gnu_entity) <object>: Do not promote
-+ the alignment if this doesn't prevent BLKmode access to the object.
-+
-+2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ Backport from mainline r181474
-+ PR target/50678
-+ * init.c (__gnat_error_handler) [Darwin]: Move work-around to the
-+ bug filed as radar #10302855 from __gnat_error_handler ...
-+ ... to (__gnat_adjust_context_for_raise) [Darwin]: New.
-+ (HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE) [Darwin]: Define.
-+ (__gnat_error_handler) [Darwin]: Use __gnat_adjust_context_for_raise.
-+
-+2011-11-18 Tristan Gingold <gingold@adacore.com>
-+ Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/49992
-+ * mlib-tgt-specific-darwin.adb (Archive_Indexer_Options): Remove.
-+ * gcc-interface/Makefile.in (darwin): Remove ranlib special-casing
-+ for Darwin.
-+
-+2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ Backport from mainline r181319
-+ * gcc-interface/Makefile.in (stamp-gnatlib-$(RTSDIR)): Don't link
-+ s-oscons.ads.
-+ (OSCONS_CPP, OSCONS_EXTRACT): New.
-+ (./bldtools/oscons/xoscons): New Target.
-+ ($(RTSDIR)/s-oscons.ads): New Target.
-+ (gnatlib): Depend on $(RTSDIR)/s-oscons.ads.
-+ * Make-generated.in: Remove machinery to generate xoscons and
-+ ada/s-oscons.ads.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/ada/gcc-interface/Makefile.in
-===================================================================
---- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_6-branch)
-@@ -2189,7 +2189,6 @@
-
- EH_MECHANISM=-gcc
- GNATLIB_SHARED = gnatlib-shared-darwin
-- RANLIB = ranlib -c
- GMEM_LIB = gmemlib
- LIBRARY_VERSION := $(LIB_VERSION)
- soext = .dylib
-@@ -2447,21 +2446,52 @@
- $(foreach PAIR,$(LIBGNAT_TARGET_PAIRS), \
- $(LN_S) $(fsrcpfx)ada/$(word 2,$(subst <, ,$(PAIR))) \
- $(RTSDIR)/$(word 1,$(subst <, ,$(PAIR)));)
--# Copy generated target dependent sources
-- $(RM) $(RTSDIR)/s-oscons.ads
-- (cd $(RTSDIR); $(LN_S) ../s-oscons.ads s-oscons.ads)
-+# Copy tsystem.h
-+ $(CP) $(srcdir)/tsystem.h $(RTSDIR)
- $(RM) ../stamp-gnatlib-$(RTSDIR)
- touch ../stamp-gnatlib1-$(RTSDIR)
-
- # GNULLI End #############################################################
-
-+ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
-+OSCONS_CPP=../../$(DECC) -E /comment=as_is -DNATIVE \
-+ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c
-+
-+OSCONS_EXTRACT=../../$(DECC) -DNATIVE \
-+ -DTARGET='""$(target)""' $(fsrcpfx)ada/s-oscons-tmplt.c ; \
-+ ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
-+ ./s-oscons-tmplt.exe > s-oscons-tmplt.s
-+
-+else
-+# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to adjust
-+# for running it from $(RTSDIR)
-+OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
-+ | sed -e 's^\./xgcc^../../xgcc^' -e 's^-B./^-B../../^'`
-+OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
-+ -DTARGET=\"$(target)\" $(fsrcpfx)ada/s-oscons-tmplt.c > s-oscons-tmplt.i
-+OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
-+endif
-+
-+./bldtools/oscons/xoscons: xoscons.adb xutil.ads xutil.adb
-+ -$(MKDIR) ./bldtools/oscons
-+ $(RM) $(addprefix ./bldtools/oscons/,$(notdir $^))
-+ $(CP) $^ ./bldtools/oscons
-+ (cd ./bldtools/oscons ; gnatmake -q xoscons)
-+
-+$(RTSDIR)/s-oscons.ads: ../stamp-gnatlib1-$(RTSDIR) s-oscons-tmplt.c gsocket.h ./bldtools/oscons/xoscons
-+ $(RM) $(RTSDIR)/s-oscons-tmplt.i $(RTSDIR)/s-oscons-tmplt.s
-+ (cd $(RTSDIR) ; \
-+ $(OSCONS_CPP) ; \
-+ $(OSCONS_EXTRACT) ; \
-+ ../bldtools/oscons/xoscons)
-+
- # Don't use semicolon separated shell commands that involve list expansions.
- # The semicolon triggers a call to DCL on VMS and DCL can't handle command
- # line lengths in excess of 256 characters.
- # Example: cd $(RTSDIR); ar rc libfoo.a $(LONG_LIST_OF_OBJS)
- # is guaranteed to overflow the buffer.
-
--gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR)
-+gnatlib: ../stamp-gnatlib1-$(RTSDIR) ../stamp-gnatlib2-$(RTSDIR) $(RTSDIR)/s-oscons.ads
- $(MAKE) -C $(RTSDIR) \
- CC="`echo \"$(GCC_FOR_TARGET)\" \
- | sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'`" \
-Index: gcc/ada/gcc-interface/decl.c
-===================================================================
---- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-4_6-branch)
-@@ -808,16 +808,30 @@
- && No (Address_Clause (gnat_entity))))
- && TREE_CODE (TYPE_SIZE (gnu_type)) == INTEGER_CST)
- {
-- /* No point in jumping through all the hoops needed in order
-+ unsigned int size_cap, align_cap;
-+
-+ /* No point in promoting the alignment if this doesn't prevent
-+ BLKmode access to the object, in particular block copy, as
-+ this will for example disable the NRV optimization for it.
-+ No point in jumping through all the hoops needed in order
- to support BIGGEST_ALIGNMENT if we don't really have to.
- So we cap to the smallest alignment that corresponds to
- a known efficient memory access pattern of the target. */
-- unsigned int align_cap = Is_Atomic (gnat_entity)
-- ? BIGGEST_ALIGNMENT
-- : get_mode_alignment (ptr_mode);
-+ if (Is_Atomic (gnat_entity))
-+ {
-+ size_cap = UINT_MAX;
-+ align_cap = BIGGEST_ALIGNMENT;
-+ }
-+ else
-+ {
-+ size_cap = MAX_FIXED_MODE_SIZE;
-+ align_cap = get_mode_alignment (ptr_mode);
-+ }
-
- if (!host_integerp (TYPE_SIZE (gnu_type), 1)
-- || compare_tree_int (TYPE_SIZE (gnu_type), align_cap) >= 0)
-+ || compare_tree_int (TYPE_SIZE (gnu_type), size_cap) > 0)
-+ align = 0;
-+ else if (compare_tree_int (TYPE_SIZE (gnu_type), align_cap) > 0)
- align = align_cap;
- else
- align = ceil_alignment (tree_low_cst (TYPE_SIZE (gnu_type), 1));
-Index: gcc/ada/Make-generated.in
-===================================================================
---- a/src/gcc/ada/Make-generated.in (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ada/Make-generated.in (.../branches/gcc-4_6-branch)
-@@ -64,37 +64,6 @@
- $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/nmake_s
- (cd $(ADA_GEN_SUBDIR)/bldtools/nmake_s; gnatmake -q xnmake ; ./xnmake -s ../../nmake.ads )
-
--ifeq ($(strip $(filter-out alpha64 ia64 dec hp vms% openvms% alphavms%,$(subst -, ,$(host)))),)
--OSCONS_CPP=../../../$(DECC) -E /comment=as_is -DNATIVE \
-- -DTARGET='""$(target)""' s-oscons-tmplt.c
--
--OSCONS_EXTRACT=../../../$(DECC) -DNATIVE \
-- -DTARGET='""$(target)""' s-oscons-tmplt.c ; \
-- ld -o s-oscons-tmplt.exe s-oscons-tmplt.obj; \
-- ./s-oscons-tmplt.exe > s-oscons-tmplt.s
--
--else
--# GCC_FOR_TARGET has paths relative to the gcc directory, so we need to ajust
--# for running it from $(ADA_GEN_SUBDIR)/bldtools/oscons
--OSCONS_CC=`echo "$(GCC_FOR_TARGET)" \
-- | sed -e 's^\./xgcc^../../../xgcc^' -e 's^-B./^-B../../../^'`
--OSCONS_CPP=$(OSCONS_CC) $(GNATLIBCFLAGS) -E -C \
-- -DTARGET=\"$(target)\" s-oscons-tmplt.c > s-oscons-tmplt.i
--OSCONS_EXTRACT=$(OSCONS_CC) -S s-oscons-tmplt.i
--endif
--
--$(ADA_GEN_SUBDIR)/s-oscons.ads : $(ADA_GEN_SUBDIR)/s-oscons-tmplt.c $(ADA_GEN_SUBDIR)/gsocket.h $(ADA_GEN_SUBDIR)/xoscons.adb $(ADA_GEN_SUBDIR)/xutil.ads $(ADA_GEN_SUBDIR)/xutil.adb
-- -$(MKDIR) $(ADA_GEN_SUBDIR)/bldtools/oscons
-- $(RM) $(addprefix $(ADA_GEN_SUBDIR)/bldtools/oscons/,$(notdir $^))
-- $(CP) $^ $(ADA_GEN_SUBDIR)/bldtools/oscons
-- (cd $(ADA_GEN_SUBDIR)/bldtools/oscons ; gnatmake -q xoscons ; \
-- $(RM) s-oscons-tmplt.i s-oscons-tmplt.s ; \
-- $(OSCONS_CPP) ; \
-- $(OSCONS_EXTRACT) ; \
-- ./xoscons ; \
-- $(RM) ../../s-oscons.ads ; \
-- $(CP) s-oscons.ads s-oscons.h ../../)
--
- $(ADA_GEN_SUBDIR)/sdefault.adb: $(ADA_GEN_SUBDIR)/stamp-sdefault ; @true
- $(ADA_GEN_SUBDIR)/stamp-sdefault : $(srcdir)/version.c Makefile
- $(ECHO) "pragma Style_Checks (Off);" >tmp-sdefault.adb
-Index: gcc/lto-streamer-in.c
-===================================================================
---- a/src/gcc/lto-streamer-in.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto-streamer-in.c (.../branches/gcc-4_6-branch)
-@@ -1366,9 +1366,9 @@
- {
- const struct lto_function_header *header;
- struct data_in *data_in;
-- int32_t cfg_offset;
-- int32_t main_offset;
-- int32_t string_offset;
-+ int cfg_offset;
-+ int main_offset;
-+ int string_offset;
- struct lto_input_block ib_cfg;
- struct lto_input_block ib_main;
-
-Index: gcc/c-decl.c
-===================================================================
---- a/src/gcc/c-decl.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-decl.c (.../branches/gcc-4_6-branch)
-@@ -721,7 +721,7 @@
-
- complete_array_type (&TREE_TYPE (decl), NULL_TREE, true);
-
-- layout_decl (decl, 0);
-+ relayout_decl (decl);
- }
- }
- }
-@@ -1200,7 +1200,7 @@
- DECL_CHAIN (p) = BLOCK_VARS (block);
- BLOCK_VARS (block) = p;
- }
-- else if (VAR_OR_FUNCTION_DECL_P (p))
-+ else if (VAR_OR_FUNCTION_DECL_P (p) && scope != file_scope)
- {
- /* For block local externs add a special
- DECL_EXTERNAL decl for debug info generation. */
-@@ -4261,7 +4261,7 @@
- if (DECL_INITIAL (decl))
- TREE_TYPE (DECL_INITIAL (decl)) = type;
-
-- layout_decl (decl, 0);
-+ relayout_decl (decl);
- }
-
- if (TREE_CODE (decl) == VAR_DECL)
-Index: gcc/fortran/trans-array.c
-===================================================================
---- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_6-branch)
-@@ -6772,8 +6772,17 @@
- gfc_array_index_type, cond,
- lbound, gfc_index_one_node);
- }
-- else if (expr->expr_type == EXPR_VARIABLE)
-+
-+ if (expr->expr_type == EXPR_FUNCTION)
- {
-+ /* A conversion function, so use the argument. */
-+ gcc_assert (expr->value.function.isym
-+ && expr->value.function.isym->conversion);
-+ expr = expr->value.function.actual->expr;
-+ }
-+
-+ if (expr->expr_type == EXPR_VARIABLE)
-+ {
- tmp = TREE_TYPE (expr->symtree->n.sym->backend_decl);
- for (ref = expr->ref; ref; ref = ref->next)
- {
-@@ -6785,15 +6794,6 @@
- }
- return GFC_TYPE_ARRAY_LBOUND(tmp, dim);
- }
-- else if (expr->expr_type == EXPR_FUNCTION)
-- {
-- /* A conversion function, so use the argument. */
-- expr = expr->value.function.actual->expr;
-- if (expr->expr_type != EXPR_VARIABLE)
-- return gfc_index_one_node;
-- desc = TREE_TYPE (expr->symtree->n.sym->backend_decl);
-- return get_std_lbound (expr, desc, dim, assumed_size);
-- }
-
- return gfc_index_one_node;
- }
-Index: gcc/fortran/ChangeLog
-===================================================================
---- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,55 @@
-+2011-12-11 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50923
-+ * trans-decl.c (generate_local_decl): Set TREE_NO_WARNING only
-+ if the front end has printed a warning.
-+ (gfc_generate_function_code): Fix unset-result warning.
-+
-+2011-12-11 Thomas Koenig <tkoenig@gcc.gnu.org>
-+
-+ PR fortran/51338
-+ Backport from trunk
-+ * dependency.c (are_identical_variables): Handle case where
-+ end fields of substring references are NULL.
-+
-+2011-12-08 Toon Moene <toon@moene.org>
-+
-+ PR fortran/51310
-+ * invoke.texi: Itemize the cases for which
-+ -finit-<type>=<constant> doesn't work.
-+
-+2011-12-08 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51448
-+ * fortran/trans-array.c (get_std_lbound): Fix handling of
-+ conversion functions.
-+
-+2011-12-06 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51435
-+ * expr.c (gfc_has_default_initializer): Fix handling of
-+ DT with initialized pointer components.
-+
-+2011-12-03 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50684
-+ * check.c (variable_check): Fix intent(in) check.
-+
-+2011-11-25 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/50408
-+ * trans-decl.c (gfc_get_module_backend_decl): Also copy
-+ ts.u.derived from the gsym if the ts.type is BT_CLASS.
-+ (gfc_get_extern_function_decl): Copy also the backend_decl
-+ for the symbol's ts.u.{derived,cl} from the gsym.
-+ * trans-types.c (gfc_copy_dt_decls_ifequal): Directly
-+ return if "from" and "to" are the same.
-+
-+2011-11-24 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/51218
-+ * gfortran.dg/implicit_pure_1.f90: New.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/fortran/expr.c
-===================================================================
---- a/src/gcc/fortran/expr.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/expr.c (.../branches/gcc-4_6-branch)
-@@ -3679,6 +3679,8 @@
- if (!c->attr.pointer
- && gfc_has_default_initializer (c->ts.u.derived))
- return true;
-+ if (c->attr.pointer && c->initializer)
-+ return true;
- }
- else
- {
-@@ -3689,6 +3691,7 @@
- return false;
- }
-
-+
- /* Get an expression for a default initializer. */
-
- gfc_expr *
-Index: gcc/fortran/trans-types.c
-===================================================================
---- a/src/gcc/fortran/trans-types.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/trans-types.c (.../branches/gcc-4_6-branch)
-@@ -2092,6 +2092,9 @@
- gfc_component *to_cm;
- gfc_component *from_cm;
-
-+ if (from == to)
-+ return 1;
-+
- if (from->backend_decl == NULL
- || !gfc_compare_derived_types (from, to))
- return 0;
-Index: gcc/fortran/resolve.c
-===================================================================
---- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_6-branch)
-@@ -3132,11 +3132,11 @@
- "procedure within a PURE procedure", name, &expr->where);
- t = FAILURE;
- }
-+
-+ if (gfc_implicit_pure (NULL))
-+ gfc_current_ns->proc_name->attr.implicit_pure = 0;
- }
-
-- if (!pure_function (expr, &name) && name && gfc_implicit_pure (NULL))
-- gfc_current_ns->proc_name->attr.implicit_pure = 0;
--
- /* Functions without the RECURSIVE attribution are not allowed to
- * call themselves. */
- if (expr->value.function.esym && !expr->value.function.esym->attr.recursive)
-@@ -3195,6 +3195,9 @@
- else if (gfc_pure (NULL))
- gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
- &c->loc);
-+
-+ if (gfc_implicit_pure (NULL))
-+ gfc_current_ns->proc_name->attr.implicit_pure = 0;
- }
-
-
-Index: gcc/fortran/trans-decl.c
-===================================================================
---- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_6-branch)
-@@ -677,7 +677,7 @@
- }
- else if (s->backend_decl)
- {
-- if (sym->ts.type == BT_DERIVED)
-+ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
- gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
- true);
- else if (sym->ts.type == BT_CHARACTER)
-@@ -1602,6 +1602,11 @@
- gfc_find_symbol (sym->name, gsym->ns, 0, &s);
- if (s && s->backend_decl)
- {
-+ if (sym->ts.type == BT_DERIVED || sym->ts.type == BT_CLASS)
-+ gfc_copy_dt_decls_ifequal (s->ts.u.derived, sym->ts.u.derived,
-+ true);
-+ else if (sym->ts.type == BT_CHARACTER)
-+ sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
- sym->backend_decl = s->backend_decl;
- return sym->backend_decl;
- }
-@@ -4179,10 +4184,16 @@
- "declared INTENT(OUT) but was not set and "
- "does not have a default initializer",
- sym->name, &sym->declared_at);
-+ if (sym->backend_decl != NULL_TREE)
-+ TREE_NO_WARNING(sym->backend_decl) = 1;
- }
- else if (gfc_option.warn_unused_dummy_argument)
-- gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
-+ {
-+ gfc_warning ("Unused dummy argument '%s' at %L", sym->name,
- &sym->declared_at);
-+ if (sym->backend_decl != NULL_TREE)
-+ TREE_NO_WARNING(sym->backend_decl) = 1;
-+ }
- }
-
- /* Warn for unused variables, but not if they're inside a common
-@@ -4227,11 +4238,6 @@
- mark the symbol now, as well as in traverse_ns, to prevent
- getting stuck in a circular dependency. */
- sym->mark = 1;
--
-- /* We do not want the middle-end to warn about unused parameters
-- as this was already done above. */
-- if (sym->attr.dummy && sym->backend_decl != NULL_TREE)
-- TREE_NO_WARNING(sym->backend_decl) = 1;
- }
- else if (sym->attr.flavor == FL_PARAMETER)
- {
-@@ -4846,11 +4852,11 @@
- if (result == NULL_TREE)
- {
- /* TODO: move to the appropriate place in resolve.c. */
-- if (warn_return_type && !sym->attr.referenced && sym == sym->result)
-+ if (warn_return_type && sym == sym->result)
- gfc_warning ("Return value of function '%s' at %L not set",
- sym->name, &sym->declared_at);
--
-- TREE_NO_WARNING(sym->backend_decl) = 1;
-+ if (warn_return_type)
-+ TREE_NO_WARNING(sym->backend_decl) = 1;
- }
- else
- gfc_add_expr_to_block (&body, gfc_generate_return ());
-Index: gcc/fortran/check.c
-===================================================================
---- a/src/gcc/fortran/check.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/check.c (.../branches/gcc-4_6-branch)
-@@ -485,10 +485,31 @@
- && (gfc_current_intrinsic_arg[n]->intent == INTENT_OUT
- || gfc_current_intrinsic_arg[n]->intent == INTENT_INOUT))
- {
-- gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)",
-- gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic,
-- &e->where);
-- return FAILURE;
-+ gfc_ref *ref;
-+ bool pointer = e->symtree->n.sym->ts.type == BT_CLASS
-+ && CLASS_DATA (e->symtree->n.sym)
-+ ? CLASS_DATA (e->symtree->n.sym)->attr.class_pointer
-+ : e->symtree->n.sym->attr.pointer;
-+
-+ for (ref = e->ref; ref; ref = ref->next)
-+ {
-+ if (pointer && ref->type == REF_COMPONENT)
-+ break;
-+ if (ref->type == REF_COMPONENT
-+ && ((ref->u.c.component->ts.type == BT_CLASS
-+ && CLASS_DATA (ref->u.c.component)->attr.class_pointer)
-+ || (ref->u.c.component->ts.type != BT_CLASS
-+ && ref->u.c.component->attr.pointer)))
-+ break;
-+ }
-+
-+ if (!ref)
-+ {
-+ gfc_error ("'%s' argument of '%s' intrinsic at %L cannot be "
-+ "INTENT(IN)", gfc_current_intrinsic_arg[n]->name,
-+ gfc_current_intrinsic, &e->where);
-+ return FAILURE;
-+ }
- }
-
- if (e->expr_type == EXPR_VARIABLE
-Index: gcc/fortran/dependency.c
-===================================================================
---- a/src/gcc/fortran/dependency.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/fortran/dependency.c (.../branches/gcc-4_6-branch)
-@@ -163,9 +163,19 @@
- break;
-
- case REF_SUBSTRING:
-- if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0
-- || gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
-+ if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0)
- return false;
-+
-+ /* If both are NULL, the end length compares equal, because we
-+ are looking at the same variable. This can only happen for
-+ assumed- or deferred-length character arguments. */
-+
-+ if (r1->u.ss.end == NULL && r2->u.ss.end == NULL)
-+ break;
-+
-+ if (gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0)
-+ return false;
-+
- break;
-
- default:
-Index: gcc/regmove.c
-===================================================================
---- a/src/gcc/regmove.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/regmove.c (.../branches/gcc-4_6-branch)
-@@ -860,7 +860,7 @@
- if (REG_N_CALLS_CROSSED (REGNO (src)) == 0)
- break;
-
-- if (call_used_regs [REGNO (dst)]
-+ if ((HARD_REGISTER_P (dst) && call_used_regs [REGNO (dst)])
- || find_reg_fusage (p, CLOBBER, dst))
- break;
- }
-Index: gcc/configure.ac
-===================================================================
---- a/src/gcc/configure.ac (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/configure.ac (.../branches/gcc-4_6-branch)
-@@ -807,17 +807,7 @@
- gcc_AC_PROG_LN_S
- ACX_PROG_LN($LN_S)
- AC_PROG_RANLIB
--case "${host}" in
--*-*-darwin*)
-- # By default, the Darwin ranlib will not treat common symbols as
-- # definitions when building the archive table of contents. Other
-- # ranlibs do that; pass an option to the Darwin ranlib that makes
-- # it behave similarly.
-- ranlib_flags="-c"
-- ;;
--*)
-- ranlib_flags=""
--esac
-+ranlib_flags=""
- AC_SUBST(ranlib_flags)
-
- gcc_AC_PROG_INSTALL
-Index: gcc/df.h
-===================================================================
---- a/src/gcc/df.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/df.h (.../branches/gcc-4_6-branch)
-@@ -53,7 +53,7 @@
- #define DF_RD 3 /* Reaching Defs. */
- #define DF_CHAIN 4 /* Def-Use and/or Use-Def Chains. */
- #define DF_WORD_LR 5 /* Subreg tracking lr. */
--#define DF_NOTE 6 /* REG_DEF and REG_UNUSED notes. */
-+#define DF_NOTE 6 /* REG_DEAD and REG_UNUSED notes. */
- #define DF_MD 7 /* Multiple Definitions. */
-
- #define DF_LAST_PROBLEM_PLUS1 (DF_MD + 1)
-Index: gcc/lto-section-in.c
-===================================================================
---- a/src/gcc/lto-section-in.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto-section-in.c (.../branches/gcc-4_6-branch)
-@@ -296,7 +296,7 @@
- = (const struct lto_simple_header *) data;
-
- struct lto_input_block* ib_main;
-- int32_t main_offset = sizeof (struct lto_simple_header);
-+ int main_offset = sizeof (struct lto_simple_header);
-
- if (!data)
- return NULL;
-Index: gcc/tree-vect-data-refs.c
-===================================================================
---- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-4_6-branch)
-@@ -2631,6 +2631,16 @@
- return false;
- }
-
-+ if (is_gimple_call (stmt))
-+ {
-+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
-+ {
-+ fprintf (vect_dump, "not vectorized: dr in a call ");
-+ print_gimple_stmt (vect_dump, stmt, 0, TDF_SLIM);
-+ }
-+ return false;
-+ }
-+
- /* Update DR field in stmt_vec_info struct. */
-
- /* If the dataref is in an inner-loop of the loop that is considered for
-Index: gcc/c-typeck.c
-===================================================================
---- a/src/gcc/c-typeck.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-typeck.c (.../branches/gcc-4_6-branch)
-@@ -3802,11 +3802,7 @@
- if (val && TREE_CODE (val) == INDIRECT_REF
- && TREE_CONSTANT (TREE_OPERAND (val, 0)))
- {
-- tree op0 = fold_convert_loc (location, sizetype,
-- fold_offsetof (arg, val)), op1;
--
-- op1 = fold_convert_loc (location, argtype, TREE_OPERAND (val, 0));
-- ret = fold_build2_loc (location, POINTER_PLUS_EXPR, argtype, op1, op0);
-+ ret = fold_convert_loc (location, argtype, fold_offsetof_1 (arg));
- goto return_build_unary_op;
- }
-
-Index: gcc/calls.c
-===================================================================
---- a/src/gcc/calls.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/calls.c (.../branches/gcc-4_6-branch)
-@@ -1548,6 +1548,131 @@
- return funexp;
- }
-
-+/* Internal state for internal_arg_pointer_based_exp and its helpers. */
-+static struct
-+{
-+ /* Last insn that has been scanned by internal_arg_pointer_based_exp_scan,
-+ or NULL_RTX if none has been scanned yet. */
-+ rtx scan_start;
-+ /* Vector indexed by REGNO - FIRST_PSEUDO_REGISTER, recording if a pseudo is
-+ based on crtl->args.internal_arg_pointer. The element is NULL_RTX if the
-+ pseudo isn't based on it, a CONST_INT offset if the pseudo is based on it
-+ with fixed offset, or PC if this is with variable or unknown offset. */
-+ VEC(rtx, heap) *cache;
-+} internal_arg_pointer_exp_state;
-+
-+static rtx internal_arg_pointer_based_exp (rtx, bool);
-+
-+/* Helper function for internal_arg_pointer_based_exp. Scan insns in
-+ the tail call sequence, starting with first insn that hasn't been
-+ scanned yet, and note for each pseudo on the LHS whether it is based
-+ on crtl->args.internal_arg_pointer or not, and what offset from that
-+ that pointer it has. */
-+
-+static void
-+internal_arg_pointer_based_exp_scan (void)
-+{
-+ rtx insn, scan_start = internal_arg_pointer_exp_state.scan_start;
-+
-+ if (scan_start == NULL_RTX)
-+ insn = get_insns ();
-+ else
-+ insn = NEXT_INSN (scan_start);
-+
-+ while (insn)
-+ {
-+ rtx set = single_set (insn);
-+ if (set && REG_P (SET_DEST (set)) && !HARD_REGISTER_P (SET_DEST (set)))
-+ {
-+ rtx val = NULL_RTX;
-+ unsigned int idx = REGNO (SET_DEST (set)) - FIRST_PSEUDO_REGISTER;
-+ /* Punt on pseudos set multiple times. */
-+ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache)
-+ && (VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx)
-+ != NULL_RTX))
-+ val = pc_rtx;
-+ else
-+ val = internal_arg_pointer_based_exp (SET_SRC (set), false);
-+ if (val != NULL_RTX)
-+ {
-+ if (idx
-+ >= VEC_length (rtx, internal_arg_pointer_exp_state.cache))
-+ VEC_safe_grow_cleared (rtx, heap,
-+ internal_arg_pointer_exp_state.cache,
-+ idx + 1);
-+ VEC_replace (rtx, internal_arg_pointer_exp_state.cache,
-+ idx, val);
-+ }
-+ }
-+ if (NEXT_INSN (insn) == NULL_RTX)
-+ scan_start = insn;
-+ insn = NEXT_INSN (insn);
-+ }
-+
-+ internal_arg_pointer_exp_state.scan_start = scan_start;
-+}
-+
-+/* Helper function for internal_arg_pointer_based_exp, called through
-+ for_each_rtx. Return 1 if *LOC is a register based on
-+ crtl->args.internal_arg_pointer. Return -1 if *LOC is not based on it
-+ and the subexpressions need not be examined. Otherwise return 0. */
-+
-+static int
-+internal_arg_pointer_based_exp_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
-+{
-+ if (REG_P (*loc) && internal_arg_pointer_based_exp (*loc, false) != NULL_RTX)
-+ return 1;
-+ if (MEM_P (*loc))
-+ return -1;
-+ return 0;
-+}
-+
-+/* Compute whether RTL is based on crtl->args.internal_arg_pointer. Return
-+ NULL_RTX if RTL isn't based on it, a CONST_INT offset if RTL is based on
-+ it with fixed offset, or PC if this is with variable or unknown offset.
-+ TOPLEVEL is true if the function is invoked at the topmost level. */
-+
-+static rtx
-+internal_arg_pointer_based_exp (rtx rtl, bool toplevel)
-+{
-+ if (CONSTANT_P (rtl))
-+ return NULL_RTX;
-+
-+ if (rtl == crtl->args.internal_arg_pointer)
-+ return const0_rtx;
-+
-+ if (REG_P (rtl) && HARD_REGISTER_P (rtl))
-+ return NULL_RTX;
-+
-+ if (GET_CODE (rtl) == PLUS && CONST_INT_P (XEXP (rtl, 1)))
-+ {
-+ rtx val = internal_arg_pointer_based_exp (XEXP (rtl, 0), toplevel);
-+ if (val == NULL_RTX || val == pc_rtx)
-+ return val;
-+ return plus_constant (val, INTVAL (XEXP (rtl, 1)));
-+ }
-+
-+ /* When called at the topmost level, scan pseudo assignments in between the
-+ last scanned instruction in the tail call sequence and the latest insn
-+ in that sequence. */
-+ if (toplevel)
-+ internal_arg_pointer_based_exp_scan ();
-+
-+ if (REG_P (rtl))
-+ {
-+ unsigned int idx = REGNO (rtl) - FIRST_PSEUDO_REGISTER;
-+ if (idx < VEC_length (rtx, internal_arg_pointer_exp_state.cache))
-+ return VEC_index (rtx, internal_arg_pointer_exp_state.cache, idx);
-+
-+ return NULL_RTX;
-+ }
-+
-+ if (for_each_rtx (&rtl, internal_arg_pointer_based_exp_1, NULL))
-+ return pc_rtx;
-+
-+ return NULL_RTX;
-+}
-+
- /* Return true if and only if SIZE storage units (usually bytes)
- starting from address ADDR overlap with already clobbered argument
- area. This function is used to determine if we should give up a
-@@ -1557,20 +1682,17 @@
- mem_overlaps_already_clobbered_arg_p (rtx addr, unsigned HOST_WIDE_INT size)
- {
- HOST_WIDE_INT i;
-+ rtx val;
-
-- if (addr == crtl->args.internal_arg_pointer)
-- i = 0;
-- else if (GET_CODE (addr) == PLUS
-- && XEXP (addr, 0) == crtl->args.internal_arg_pointer
-- && CONST_INT_P (XEXP (addr, 1)))
-- i = INTVAL (XEXP (addr, 1));
-- /* Return true for arg pointer based indexed addressing. */
-- else if (GET_CODE (addr) == PLUS
-- && (XEXP (addr, 0) == crtl->args.internal_arg_pointer
-- || XEXP (addr, 1) == crtl->args.internal_arg_pointer))
-+ if (sbitmap_empty_p (stored_args_map))
-+ return false;
-+ val = internal_arg_pointer_based_exp (addr, true);
-+ if (val == NULL_RTX)
-+ return false;
-+ else if (val == pc_rtx)
- return true;
- else
-- return false;
-+ i = INTVAL (val);
-
- #ifdef ARGS_GROW_DOWNWARD
- i = -i - size;
-@@ -3175,6 +3297,8 @@
- }
-
- sbitmap_free (stored_args_map);
-+ internal_arg_pointer_exp_state.scan_start = NULL_RTX;
-+ VEC_free (rtx, heap, internal_arg_pointer_exp_state.cache);
- }
- else
- {
-Index: gcc/cfgcleanup.c
-===================================================================
---- a/src/gcc/cfgcleanup.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/cfgcleanup.c (.../branches/gcc-4_6-branch)
-@@ -1969,7 +1969,14 @@
-
- cond = get_condition (jump, &move_before, true, false);
- if (cond == NULL_RTX)
-- move_before = jump;
-+ {
-+#ifdef HAVE_cc0
-+ if (reg_mentioned_p (cc0_rtx, jump))
-+ move_before = prev_nonnote_nondebug_insn (jump);
-+ else
-+#endif
-+ move_before = jump;
-+ }
-
- for (ix = 0; ix < nedges; ix++)
- if (EDGE_SUCC (bb, ix)->dest == EXIT_BLOCK_PTR)
-@@ -2131,7 +2138,14 @@
- jump = BB_END (final_dest_bb);
- cond = get_condition (jump, &move_before, true, false);
- if (cond == NULL_RTX)
-- move_before = jump;
-+ {
-+#ifdef HAVE_cc0
-+ if (reg_mentioned_p (cc0_rtx, jump))
-+ move_before = prev_nonnote_nondebug_insn (jump);
-+ else
-+#endif
-+ move_before = jump;
-+ }
- }
-
- do
-Index: gcc/tree-sra.c
-===================================================================
---- a/src/gcc/tree-sra.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/tree-sra.c (.../branches/gcc-4_6-branch)
-@@ -1020,26 +1020,28 @@
- return false;
- }
-
--/* Return true iff type of EXP is not sufficiently aligned. */
-+/* Return true if EXP is a memory reference less aligned than ALIGN. This is
-+ invoked only on strict-alignment targets. */
-
- static bool
--tree_non_mode_aligned_mem_p (tree exp)
-+tree_non_aligned_mem_p (tree exp, unsigned int align)
- {
-- enum machine_mode mode = TYPE_MODE (TREE_TYPE (exp));
-- unsigned int align;
-+ unsigned int exp_align;
-
- if (TREE_CODE (exp) == VIEW_CONVERT_EXPR)
- exp = TREE_OPERAND (exp, 0);
-
-- if (TREE_CODE (exp) == SSA_NAME
-- || TREE_CODE (exp) == MEM_REF
-- || mode == BLKmode
-- || is_gimple_min_invariant (exp)
-- || !STRICT_ALIGNMENT)
-+ if (TREE_CODE (exp) == SSA_NAME || is_gimple_min_invariant (exp))
- return false;
-
-- align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
-- if (GET_MODE_ALIGNMENT (mode) > align)
-+ /* get_object_alignment will fall back to BITS_PER_UNIT if it cannot
-+ compute an explicit alignment. Pretend that dereferenced pointers
-+ are always aligned on strict-alignment targets. */
-+ exp_align = get_object_alignment (exp, BIGGEST_ALIGNMENT);
-+ if (TREE_CODE (exp) == MEM_REF || TREE_CODE (exp) == TARGET_MEM_REF)
-+ exp_align = MAX (TYPE_ALIGN (TREE_TYPE (exp)), exp_align);
-+
-+ if (exp_align < align)
- return true;
-
- return false;
-@@ -1071,7 +1073,11 @@
- if (lacc)
- {
- lacc->grp_assignment_write = 1;
-- lacc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (rhs);
-+ if (STRICT_ALIGNMENT
-+ && tree_non_aligned_mem_p (rhs,
-+ get_object_alignment (lhs,
-+ BIGGEST_ALIGNMENT)))
-+ lacc->grp_unscalarizable_region = 1;
- }
-
- if (racc)
-@@ -1080,7 +1086,11 @@
- if (should_scalarize_away_bitmap && !gimple_has_volatile_ops (stmt)
- && !is_gimple_reg_type (racc->type))
- bitmap_set_bit (should_scalarize_away_bitmap, DECL_UID (racc->base));
-- racc->grp_unscalarizable_region |= tree_non_mode_aligned_mem_p (lhs);
-+ if (STRICT_ALIGNMENT
-+ && tree_non_aligned_mem_p (lhs,
-+ get_object_alignment (rhs,
-+ BIGGEST_ALIGNMENT)))
-+ racc->grp_unscalarizable_region = 1;
- }
-
- if (lacc && racc
-@@ -1435,29 +1445,61 @@
- return fold_build2_loc (loc, MEM_REF, exp_type, base, off);
- }
-
-+DEF_VEC_ALLOC_P_STACK (tree);
-+#define VEC_tree_stack_alloc(alloc) VEC_stack_alloc (tree, alloc)
-+
- /* Construct a memory reference to a part of an aggregate BASE at the given
-- OFFSET and of the same type as MODEL. In case this is a reference to a
-- component, the function will replicate the last COMPONENT_REF of model's
-- expr to access it. GSI and INSERT_AFTER have the same meaning as in
-- build_ref_for_offset. */
-+ OFFSET and of the type of MODEL. In case this is a chain of references
-+ to component, the function will replicate the chain of COMPONENT_REFs of
-+ the expression of MODEL to access it. GSI and INSERT_AFTER have the same
-+ meaning as in build_ref_for_offset. */
-
- static tree
- build_ref_for_model (location_t loc, tree base, HOST_WIDE_INT offset,
- struct access *model, gimple_stmt_iterator *gsi,
- bool insert_after)
- {
-+ tree type = model->type, t;
-+ VEC(tree,stack) *cr_stack = NULL;
-+
- if (TREE_CODE (model->expr) == COMPONENT_REF)
- {
-- tree t, exp_type, fld = TREE_OPERAND (model->expr, 1);
-- offset -= int_bit_position (fld);
-- exp_type = TREE_TYPE (TREE_OPERAND (model->expr, 0));
-- t = build_ref_for_offset (loc, base, offset, exp_type, gsi, insert_after);
-- return fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (fld), t, fld,
-- NULL_TREE);
-+ tree expr = model->expr;
-+
-+ /* Create a stack of the COMPONENT_REFs so later we can walk them in
-+ order from inner to outer. */
-+ cr_stack = VEC_alloc (tree, stack, 6);
-+
-+ do {
-+ tree field = TREE_OPERAND (expr, 1);
-+ offset -= int_bit_position (field);
-+
-+ VEC_safe_push (tree, stack, cr_stack, expr);
-+
-+ expr = TREE_OPERAND (expr, 0);
-+ type = TREE_TYPE (expr);
-+ } while (TREE_CODE (expr) == COMPONENT_REF);
- }
-- else
-- return build_ref_for_offset (loc, base, offset, model->type,
-- gsi, insert_after);
-+
-+ t = build_ref_for_offset (loc, base, offset, type, gsi, insert_after);
-+
-+ if (TREE_CODE (model->expr) == COMPONENT_REF)
-+ {
-+ unsigned i;
-+ tree expr;
-+
-+ /* Now replicate the chain of COMPONENT_REFs from inner to outer. */
-+ FOR_EACH_VEC_ELT_REVERSE (tree, cr_stack, i, expr)
-+ {
-+ tree field = TREE_OPERAND (expr, 1);
-+ t = fold_build3_loc (loc, COMPONENT_REF, TREE_TYPE (field), t, field,
-+ NULL_TREE);
-+ }
-+
-+ VEC_free (tree, stack, cr_stack);
-+ }
-+
-+ return t;
- }
-
- /* Construct a memory reference consisting of component_refs and array_refs to
-@@ -2594,6 +2636,10 @@
- rhs = get_access_replacement (racc);
- if (!useless_type_conversion_p (lacc->type, racc->type))
- rhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR, lacc->type, rhs);
-+
-+ if (racc->grp_partial_lhs && lacc->grp_partial_lhs)
-+ rhs = force_gimple_operand_gsi (old_gsi, rhs, true, NULL_TREE,
-+ true, GSI_SAME_STMT);
- }
- else
- {
-@@ -3604,7 +3650,8 @@
- || gimple_code (access->stmt) == GIMPLE_ASM))
- return true;
-
-- if (tree_non_mode_aligned_mem_p (access->expr))
-+ if (STRICT_ALIGNMENT
-+ && tree_non_aligned_mem_p (access->expr, TYPE_ALIGN (access->type)))
- return true;
-
- return false;
-Index: gcc/lto/lto.c
-===================================================================
---- a/src/gcc/lto/lto.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto/lto.c (.../branches/gcc-4_6-branch)
-@@ -198,7 +198,7 @@
- uint32_t ix;
- tree decl;
- uint32_t i, j;
--
-+
- ix = *data++;
- decl = lto_streamer_cache_get (data_in->reader_cache, (int) ix);
- if (TREE_CODE (decl) != FUNCTION_DECL)
-@@ -241,9 +241,9 @@
- VEC(ld_plugin_symbol_resolution_t,heap) *resolutions)
- {
- const struct lto_decl_header *header = (const struct lto_decl_header *) data;
-- const int32_t decl_offset = sizeof (struct lto_decl_header);
-- const int32_t main_offset = decl_offset + header->decl_state_size;
-- const int32_t string_offset = main_offset + header->main_size;
-+ const int decl_offset = sizeof (struct lto_decl_header);
-+ const int main_offset = decl_offset + header->decl_state_size;
-+ const int string_offset = main_offset + header->main_size;
- struct lto_input_block ib_main;
- struct data_in *data_in;
- unsigned int i;
-@@ -291,17 +291,20 @@
-
- if (data_ptr != data_end)
- internal_error ("bytecode stream: garbage at the end of symbols section");
--
-+
- /* Set the current decl state to be the global state. */
- decl_data->current_decl_state = decl_data->global_decl_state;
-
- lto_data_in_delete (data_in);
- }
-
--/* strtoll is not portable. */
--int64_t
--lto_parse_hex (const char *p) {
-- uint64_t ret = 0;
-+/* Custom version of strtoll, which is not portable. */
-+
-+static HOST_WIDEST_INT
-+lto_parse_hex (const char *p)
-+{
-+ HOST_WIDEST_INT ret = 0;
-+
- for (; *p != '\0'; ++p)
- {
- char c = *p;
-@@ -317,6 +320,7 @@
- internal_error ("could not parse hex number");
- ret |= part;
- }
-+
- return ret;
- }
-
-@@ -352,7 +356,7 @@
- {
- int t;
- char offset_p[17];
-- int64_t offset;
-+ HOST_WIDEST_INT offset;
- t = fscanf (resolution, "@0x%16s", offset_p);
- if (t != 1)
- internal_error ("could not parse file offset");
-Index: gcc/lto/lto.h
-===================================================================
---- a/src/gcc/lto/lto.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto/lto.h (.../branches/gcc-4_6-branch)
-@@ -60,6 +60,4 @@
- size_t len;
- };
-
--int64_t lto_parse_hex (const char *p);
--
- #endif /* LTO_H */
-Index: gcc/lto/ChangeLog
-===================================================================
---- a/src/gcc/lto/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,10 @@
-+2011-12-13 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * lto.h (lto_parse_hex): Delete.
-+ * lto.c (lto_read_decls): Use 'int' for offsets.
-+ (lto_parse_hex): Make static and return proper 64-bit host type.
-+ (lto_resolution_read): Use proper 64-bit host type.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/ipa-prop.c
-===================================================================
---- a/src/gcc/ipa-prop.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_6-branch)
-@@ -2868,9 +2868,9 @@
- {
- const struct lto_function_header *header =
- (const struct lto_function_header *) data;
-- const int32_t cfg_offset = sizeof (struct lto_function_header);
-- const int32_t main_offset = cfg_offset + header->cfg_size;
-- const int32_t string_offset = main_offset + header->main_size;
-+ const int cfg_offset = sizeof (struct lto_function_header);
-+ const int main_offset = cfg_offset + header->cfg_size;
-+ const int string_offset = main_offset + header->main_size;
- struct data_in *data_in;
- struct lto_input_block ib_main;
- unsigned int i;
-Index: gcc/po/ChangeLog
-===================================================================
---- a/src/gcc/po/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/po/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-10-30 Joseph Myers <joseph@codesourcery.com>
-+
-+ * ja.po: Update.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: gcc/po/ja.po
-===================================================================
---- a/src/gcc/po/ja.po (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/po/ja.po (.../branches/gcc-4_6-branch)
-@@ -20,7 +20,7 @@
- "Project-Id-Version: gcc 4.6.1\n"
- "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
- "POT-Creation-Date: 2011-06-21 10:27+0000\n"
--"PO-Revision-Date: 2011-10-25 22:36+0900\n"
-+"PO-Revision-Date: 2011-10-30 18:48+0900\n"
- "Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
- "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
- "Language: ja\n"
-@@ -834,12 +834,12 @@
- #: gcov.c:420
- #, c-format
- msgid " -a, --all-blocks Show information for every basic block\n"
--msgstr ""
-+msgstr " -a, --all-blocks 各基本ブロックに関する情報を表示する\n"
-
- #: gcov.c:421
- #, c-format
- msgid " -b, --branch-probabilities Include branch probabilities in output\n"
--msgstr ""
-+msgstr " -b, --branch-probabilities 出力に分岐可能性情報を含める\n"
-
- #: gcov.c:422
- #, c-format
-@@ -847,6 +847,8 @@
- " -c, --branch-counts Given counts of branches taken\n"
- " rather than percentages\n"
- msgstr ""
-+" -c, --branch-counts 分岐に関する百分率では無く行われた\n"
-+" 回数を取得する\n"
-
- #: gcov.c:424
- #, c-format
-@@ -859,21 +861,23 @@
- " -l, --long-file-names Use long output file names for included\n"
- " source files\n"
- msgstr ""
-+" -l, --long-file-names インクルードされたソースファイルに関する長い\n"
-+" 出力ファイル名を使用する\n"
-
- #: gcov.c:427
- #, c-format
- msgid " -f, --function-summaries Output summaries for each function\n"
--msgstr ""
-+msgstr " -f, --function-summaries 各関数に関する要約を出力する\n"
-
- #: gcov.c:428
- #, c-format
- msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
--msgstr ""
-+msgstr " -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する\n"
-
- #: gcov.c:429
- #, c-format
- msgid " -p, --preserve-paths Preserve all pathname components\n"
--msgstr ""
-+msgstr " -p, --preserve-paths すべてのパス名要素を保護する\n"
-
- #: gcov.c:430
- #, c-format
-@@ -977,7 +981,7 @@
- #: gcov.c:1045
- #, c-format
- msgid "%s:cannot open data file, assuming not executed\n"
--msgstr ""
-+msgstr "%s:データファイルを開けません。実行されていないと見なします\n"
-
- #: gcov.c:1052
- #, c-format
-@@ -1027,7 +1031,7 @@
- #: gcov.c:1379
- #, c-format
- msgid "%s:graph is unsolvable for '%s'\n"
--msgstr ""
-+msgstr "%s: '%s' 用のグラフが解決できません\n"
-
- #: gcov.c:1459
- #, c-format
-@@ -1037,7 +1041,7 @@
- #: gcov.c:1462
- #, c-format
- msgid "Lines executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された行:%s of %d\n"
-
- #: gcov.c:1466
- #, c-format
-@@ -1047,7 +1051,7 @@
- #: gcov.c:1472
- #, c-format
- msgid "Branches executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された分岐:%s of %d\n"
-
- #: gcov.c:1476
- #, c-format
-@@ -1057,12 +1061,12 @@
- #: gcov.c:1482
- #, c-format
- msgid "No branches\n"
--msgstr ""
-+msgstr "分岐がありません\n"
-
- #: gcov.c:1484
- #, c-format
- msgid "Calls executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された呼び出し:%s of %d\n"
-
- #: gcov.c:1488
- #, c-format
-@@ -1075,24 +1079,24 @@
- msgstr "%s: '%s' に対する行がありません\n"
-
- #: gcov.c:1843
--#, fuzzy, c-format
-+#, c-format
- msgid "call %2d returned %s\n"
--msgstr "呼び出し %d の戻り = %d\n"
-+msgstr ""
-
- #: gcov.c:1848
--#, fuzzy, c-format
-+#, c-format
- msgid "call %2d never executed\n"
--msgstr "呼び出し %d は一度も実行せず\n"
-+msgstr ""
-
- #: gcov.c:1853
--#, fuzzy, c-format
-+#, c-format
- msgid "branch %2d taken %s%s\n"
--msgstr "ブランチ %d 受理 = %d%%\n"
-+msgstr ""
-
- #: gcov.c:1857
--#, fuzzy, c-format
-+#, c-format
- msgid "branch %2d never executed\n"
--msgstr "ブランチ %d は一度も実行されず\n"
-+msgstr ""
-
- #: gcov.c:1862
- #, c-format
-@@ -1100,9 +1104,9 @@
- msgstr ""
-
- #: gcov.c:1865
--#, fuzzy, c-format
-+#, c-format
- msgid "unconditional %2d never executed\n"
--msgstr "呼び出し %d は一度も実行せず\n"
-+msgstr ""
-
- #: gcov.c:1901
- #, c-format
-@@ -1412,11 +1416,11 @@
-
- #: opts.c:1183
- msgid "The following options take separate arguments"
--msgstr ""
-+msgstr "次のオプションは分離した引数を取ります"
-
- #: opts.c:1185
- msgid "The following options take joined arguments"
--msgstr ""
-+msgstr "次のオプションは結合した引数を取ります"
-
- #: opts.c:1196
- msgid "The following options are language-related"
-@@ -1472,7 +1476,7 @@
- #: targhooks.c:1469
- #, c-format
- msgid "created and used with differing settings of '%s'"
--msgstr ""
-+msgstr "作成時と使用時で '%s' の設定が異なります"
-
- #: targhooks.c:1471
- msgid "out of memory"
-@@ -1480,11 +1484,11 @@
-
- #: targhooks.c:1486
- msgid "created and used with different settings of -fpic"
--msgstr ""
-+msgstr "作成時と使用時で -fpic の設定が異なります"
-
- #: targhooks.c:1488
- msgid "created and used with different settings of -fpie"
--msgstr ""
-+msgstr "作成時と使用時で -fpie の設定が異なります"
-
- #: tlink.c:386
- #, c-format
-@@ -1717,11 +1721,11 @@
-
- #: params.def:100
- msgid "The maximum depth of recursive inlining for inline functions"
--msgstr ""
-+msgstr "インライン関数を再帰的にインライン化する時の最大深度"
-
- #: params.def:105
- msgid "The maximum depth of recursive inlining for non-inline functions"
--msgstr ""
-+msgstr "非インライン関数を再帰的にインライン化する時の最大深度"
-
- #: params.def:110
- msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
-@@ -1761,16 +1765,15 @@
-
- #: params.def:180
- msgid "The size of function body to be considered large"
--msgstr ""
-+msgstr "大きいと見なされる関数本体のサイズ"
-
- #: params.def:184
- msgid "Maximal growth due to inlining of large function (in percent)"
- msgstr ""
-
- #: params.def:188
--#, fuzzy
- msgid "The size of translation unit to be considered large"
--msgstr "翻訳単位全体をファイルにダンプする"
-+msgstr "大きいと見なされる翻訳単位のサイズ"
-
- #: params.def:192
- msgid "How much can given compilation unit grow because of the inlining (in percent)"
-@@ -1786,20 +1789,19 @@
-
- #: params.def:204
- msgid "The size of stack frame to be considered large"
--msgstr ""
-+msgstr "大きいと見なされるスタックフレームのサイズ"
-
- #: params.def:208
- msgid "Maximal stack frame growth due to inlining (in percent)"
--msgstr ""
-+msgstr "インライン化によって増加するスタックフレームの最大量 (百分率)"
-
- #: params.def:215
- msgid "The maximum amount of memory to be allocated by GCSE"
--msgstr ""
-+msgstr "GCSE によって配置されるメモリの最大量"
-
- #: params.def:222
--#, fuzzy
- msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr ""
-
- #: params.def:233
- msgid "The threshold ratio for performing partial redundancy elimination after reload"
-@@ -1963,9 +1965,8 @@
- msgstr ""
-
- #: params.def:470
--#, fuzzy
- msgid "Bound on number of iv uses in loop optimized in iv optimizations"
--msgstr "目立たない、コストのかかる最適化を行なう"
-+msgstr ""
-
- #: params.def:478
- msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
-@@ -2044,9 +2045,8 @@
- msgstr ""
-
- #: params.def:594
--#, fuzzy
- msgid "The maximum number of iterations through CFG to extend regions"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr ""
-
- #: params.def:599
- msgid "The maximum conflict delay for an insn to be considered for speculative motion"
-@@ -2077,9 +2077,8 @@
- msgstr ""
-
- #: params.def:637
--#, fuzzy
- msgid "The upper bound for sharing integer constants"
--msgstr "`%s' の列挙値が整数定数ではありません"
-+msgstr "整数定数を共有するための上限値"
-
- #: params.def:656
- msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
-@@ -2111,11 +2110,11 @@
-
- #: params.def:714
- msgid "The number of insns executed before prefetch is completed"
--msgstr ""
-+msgstr "プリフェッチが完了する前に実行される命令数"
-
- #: params.def:721
- msgid "The number of prefetches that can run at the same time"
--msgstr ""
-+msgstr "同時に実行可能なプリフェッチの数"
-
- #: params.def:728
- msgid "The size of L1 cache"
-@@ -2162,9 +2161,8 @@
- msgstr ""
-
- #: params.def:806
--#, fuzzy
- msgid "maximum number of parameters in a SCoP"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr "SCoP 内のパラメータの最大数"
-
- #: params.def:813
- msgid "maximum number of basic blocks per function to be analyzed by Graphite"
-@@ -2597,9 +2595,9 @@
- msgstr "無効な %%E 値"
-
- #: config/alpha/alpha.c:5431 config/alpha/alpha.c:5479
--#, fuzzy, c-format
-+#, c-format
- msgid "unknown relocation unspec"
--msgstr "不明な設定済コンストラクタ型です"
-+msgstr ""
-
- #: config/alpha/alpha.c:5440 config/crx/crx.c:1119
- #: config/rs6000/rs6000.c:16490 config/spu/spu.c:1726
-@@ -3000,32 +2998,32 @@
- #: config/i386/i386.c:14106 config/i386/i386.c:14146
- #, c-format
- msgid "operand is not a condition code, invalid operand code 'D'"
--msgstr ""
-+msgstr "被演算子は条件コードではありません。無効な被演算子コード 'D' です"
-
- #: config/i386/i386.c:14172
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'C'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'C' です"
-
- #: config/i386/i386.c:14182
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'F'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'F' です"
-
- #: config/i386/i386.c:14200
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'c' です"
-
- #: config/i386/i386.c:14210
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'f'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'f' です"
-
- #: config/i386/i386.c:14313
- #, c-format
- msgid "operand is not a condition code, invalid operand code 'Y'"
--msgstr ""
-+msgstr "被演算子は条件コードではありません。無効な被演算子コード 'Y' です"
-
- #: config/i386/i386.c:14339
- #, c-format
-@@ -3098,7 +3096,7 @@
- #: config/lm32/lm32.c:529
- #, c-format
- msgid "only 0.0 can be loaded as an immediate"
--msgstr ""
-+msgstr "即値としてロードできるのは 0.0 のみです"
-
- #: config/lm32/lm32.c:599
- msgid "bad operand"
-@@ -3138,15 +3136,15 @@
-
- #: config/m32r/m32r.c:2290
- msgid "pre-increment address is not a register"
--msgstr ""
-+msgstr "前置増分アドレスがレジスタではありません"
-
- #: config/m32r/m32r.c:2297
- msgid "pre-decrement address is not a register"
--msgstr ""
-+msgstr "前置減分アドレスがレジスタではありません"
-
- #: config/m32r/m32r.c:2304
- msgid "post-increment address is not a register"
--msgstr ""
-+msgstr "後置増分アドレスがレジスタではありません"
-
- #: config/m32r/m32r.c:2380 config/m32r/m32r.c:2394
- #: config/rs6000/rs6000.c:25500
-@@ -3252,7 +3250,7 @@
-
- #: config/mmix/mmix.c:1589 config/mmix/mmix.c:1719
- msgid "MMIX Internal: Expected a CONST_INT, not this"
--msgstr ""
-+msgstr "MMIX 内部: CONST_INT が予期されますが、異なっています"
-
- #: config/mmix/mmix.c:1668
- msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
-@@ -3260,11 +3258,11 @@
-
- #: config/mmix/mmix.c:1687
- msgid "MMIX Internal: Expected a register, not this"
--msgstr ""
-+msgstr "MMIX 内部: レジスタが予期されますが、異なっています"
-
- #: config/mmix/mmix.c:1697
- msgid "MMIX Internal: Expected a constant, not this"
--msgstr ""
-+msgstr "MMIX 内部: 定数が予期されますが、異なっています"
-
- #. We need the original here.
- #: config/mmix/mmix.c:1781
-@@ -3301,7 +3299,7 @@
-
- #: config/picochip/picochip.c:2983 config/picochip/picochip.c:3015
- msgid "Bad address, not (reg+disp):"
--msgstr ""
-+msgstr "誤ったアドレスです。 (reg+disp) ではありません:"
-
- #: config/picochip/picochip.c:3029
- msgid "Bad address, not register:"
-@@ -3526,15 +3524,15 @@
-
- #: config/sh/sh.c:9271
- msgid "created and used with different architectures / ABIs"
--msgstr ""
-+msgstr "作成時と使用時で アーキテクチャ/ABI が異なります"
-
- #: config/sh/sh.c:9273
- msgid "created and used with different ABIs"
--msgstr ""
-+msgstr "作成時と使用時で ABI が異なります"
-
- #: config/sh/sh.c:9275
- msgid "created and used with different endianness"
--msgstr ""
-+msgstr "作成時と使用時でエンディアンが異なります"
-
- #: config/sparc/sparc.c:7445 config/sparc/sparc.c:7451
- #, c-format
-@@ -3617,7 +3615,7 @@
- #: config/vax/vax.c:427
- #, c-format
- msgid "symbol with offset used in PIC mode"
--msgstr ""
-+msgstr "PIC モードで使用されるオフセット付きのシンボルです"
-
- #: config/vax/vax.c:513
- #, c-format
-@@ -3837,19 +3835,19 @@
- msgstr "%s:%d:%d: ここから再帰的に実体化されました"
-
- #: cp/error.c:2913
--#, fuzzy, c-format
-+#, c-format
- msgid "%s:%d:%d: instantiated from here"
- msgstr "%s:%d:%d: ここから実体化されました"
-
- #: cp/error.c:2918
- #, c-format
- msgid "%s:%d: recursively instantiated from here"
--msgstr ""
-+msgstr "%s:%d: ここから再帰的に実体化されました"
-
- #: cp/error.c:2919
--#, fuzzy, c-format
-+#, c-format
- msgid "%s:%d: instantiated from here"
--msgstr "%s:%d: ここで実体化されました\n"
-+msgstr "%s:%d: ここから実体化されました"
-
- #: cp/error.c:2962
- #, c-format
-@@ -4029,22 +4027,21 @@
- #: fortran/expr.c:607
- #, c-format
- msgid "Constant expression required at %C"
--msgstr ""
-+msgstr "%C では定数式が要求されます"
-
- #: fortran/expr.c:610
- #, c-format
- msgid "Integer expression required at %C"
--msgstr ""
-+msgstr "%C では整数式が要求されます"
-
- #: fortran/expr.c:615
--#, fuzzy, c-format
-+#, c-format
- msgid "Integer value too large in expression at %C"
--msgstr "式の整数がオーバーフローしました"
-+msgstr "%C の式内で整数値が大きすぎます"
-
- #: fortran/expr.c:3147
--#, fuzzy
- msgid "array assignment"
--msgstr "代入"
-+msgstr "配列代入"
-
- #: fortran/gfortranspec.c:303
- #, c-format
-@@ -4080,7 +4077,7 @@
-
- #: fortran/io.c:551
- msgid "Unexpected element '%c' in format string at %L"
--msgstr ""
-+msgstr "予期しない要素 '%c' が書式文字列内 (位置 %L) にあります"
-
- #: fortran/io.c:553
- msgid "Unexpected end of format string"
-@@ -4088,15 +4085,15 @@
-
- #: fortran/io.c:554
- msgid "Zero width in format descriptor"
--msgstr ""
-+msgstr "幅 0 の書式記述子です"
-
- #: fortran/io.c:574
- msgid "Missing leading left parenthesis"
--msgstr ""
-+msgstr "前に左小括弧がありません"
-
- #: fortran/io.c:603
- msgid "Left parenthesis required after '*'"
--msgstr ""
-+msgstr "'*' の後には左小括弧が必要です"
-
- #: fortran/io.c:634
- msgid "Expected P edit descriptor"
-@@ -4116,9 +4113,8 @@
- msgstr ""
-
- #: fortran/io.c:844
--#, fuzzy
- msgid "E specifier not allowed with g0 descriptor"
--msgstr "型指定子 `%s' は struct や class の後には使えません"
-+msgstr ""
-
- #: fortran/io.c:914
- msgid "Positive exponent width required"
-@@ -4362,9 +4358,8 @@
- msgstr ""
-
- #: fortran/resolve.c:6233
--#, fuzzy
- msgid "End expression in DO loop"
--msgstr "オペランドとして無効な式"
-+msgstr ""
-
- #: fortran/resolve.c:6237
- msgid "Step expression in DO loop"
-@@ -4564,7 +4559,7 @@
- #: java/jcf-dump.c:1148
- #, c-format
- msgid " --extdirs PATH Set extensions directory path\n"
--msgstr ""
-+msgstr " --extdirs PATH 拡張のディレクトリパスを設定する\n"
-
- #: java/jcf-dump.c:1149
- #, c-format
-@@ -4734,18 +4729,18 @@
- #: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33
- #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
- msgid "warning: consider linking with '-static' as system libraries with"
--msgstr ""
-+msgstr "警告: システムライブラリとリンクする時は '-static' を指定することを検討してください"
-
- #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101
- #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109
- #: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34
- #: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46
- msgid " profiling support are only provided in archive format"
--msgstr ""
-+msgstr " プロファイリングサポートは書庫フォーマット内でのみ提供されます"
-
- #: config/rs6000/darwin.h:99
- msgid " conflicting code gen style switches are used"
--msgstr ""
-+msgstr " 競合しているコード生成スタイルスイッチが使用されています"
-
- #: config/arm/arm.h:178
- msgid "-msoft-float and -mhard_float may not be used together"
-@@ -4805,7 +4800,7 @@
-
- #: config/i386/linux-unwind.h:186
- msgid "ax ; {int $0x80 | syscall"
--msgstr ""
-+msgstr "ax ; {int $0x80 | syscall"
-
- #: config/s390/tpf.h:120
- msgid "static is not supported on TPF-OS"
-@@ -4869,7 +4864,7 @@
-
- #: java/lang.opt:206
- msgid "--extdirs=<path>\tSet the extension directory path"
--msgstr ""
-+msgstr "--extdirs=<path>\t拡張のディレクトリパスを設定する"
-
- #: java/lang.opt:216
- msgid "Input file is a file with a list of filenames to compile"
-@@ -5388,7 +5383,7 @@
-
- #: config/frv/frv.opt:31
- msgid "Enable label alignment optimizations"
--msgstr ""
-+msgstr "ラベル整列最適化を有効にする"
-
- #: config/frv/frv.opt:35
- msgid "Dynamically allocate cc registers"
-@@ -5452,7 +5447,7 @@
-
- #: config/frv/frv.opt:116
- msgid "Enable use of GPREL for read-only data in FDPIC"
--msgstr ""
-+msgstr "FDPIC 内の読み取り専用データ用 GPREL の使用を有効にする"
-
- #: config/frv/frv.opt:120 config/rs6000/rs6000.opt:216
- #: config/pdp11/pdp11.opt:67
-@@ -5460,9 +5455,8 @@
- msgstr "ハードウェア浮動小数点を利用する"
-
- #: config/frv/frv.opt:124 config/bfin/bfin.opt:77
--#, fuzzy
- msgid "Enable inlining of PLT in function calls"
--msgstr "関数呼び出しの前後でレジスタの保存を有効にする"
-+msgstr "関数呼び出し内で PLT のインライン化を有効にする"
-
- #: config/frv/frv.opt:128
- msgid "Enable PIC support for building libraries"
-@@ -5478,7 +5472,7 @@
-
- #: config/frv/frv.opt:140
- msgid "Use media instructions"
--msgstr ""
-+msgstr "media 命令を使用する"
-
- #: config/frv/frv.opt:144
- msgid "Use multiply add/subtract instructions"
-@@ -5494,7 +5488,7 @@
-
- #: config/frv/frv.opt:157
- msgid "Do not mark ABI switches in e_flags"
--msgstr ""
-+msgstr "e_flags 内の ABI スイッチをマークしない"
-
- #: config/frv/frv.opt:161
- msgid "Remove redundant membars"
-@@ -5506,7 +5500,7 @@
-
- #: config/frv/frv.opt:169
- msgid "Enable setting GPRs to the result of comparisons"
--msgstr ""
-+msgstr "比較結果を汎用レジスタに設定することを有効にする"
-
- #: config/frv/frv.opt:173
- msgid "Change the amount of scheduler lookahead"
-@@ -5565,9 +5559,8 @@
- msgstr ""
-
- #: config/mn10300/mn10300.opt:56
--#, fuzzy
- msgid "Allow gcc to generate LIW instructions"
--msgstr "gcc が repeat/erepeat 命令を使用することを許可する"
-+msgstr "gcc が LIW 命令を生成することを許可する"
-
- #: config/s390/tpf.opt:23
- msgid "Enable TPF-OS tracing code"
-@@ -5640,11 +5633,11 @@
-
- #: config/s390/s390.opt:91
- msgid "Warn if a function uses alloca or creates an array with dynamic size"
--msgstr ""
-+msgstr "関数で alloca を使用するか、または動的サイズの配列を作成した場合に、警告する"
-
- #: config/s390/s390.opt:95
- msgid "Warn if a single function's framesize exceeds the given framesize"
--msgstr ""
-+msgstr "一つの関数のフレームサイズが与えられたフレームサイズを超過する場合に警告する"
-
- #: config/s390/s390.opt:99
- msgid "z/Architecture"
-@@ -5692,7 +5685,7 @@
-
- #: config/ia64/ia64.opt:56
- msgid "gp is constant (but save/restore gp on indirect calls)"
--msgstr "gp を定数とする(但、間接呼び出しでは gp を save/restore する)"
-+msgstr "gp を定数とする(ただし、間接呼び出しでは gp を save/restore する)"
-
- #: config/ia64/ia64.opt:60
- msgid "Generate self-relocatable code"
-@@ -5741,39 +5734,39 @@
- #: config/ia64/ia64.opt:107 config/spu/spu.opt:72 config/sh/sh.opt:258
- #: config/pa/pa.opt:51
- msgid "Specify range of registers to make fixed"
--msgstr ""
-+msgstr "固定するレジスタの範囲を指定する"
-
- #: config/ia64/ia64.opt:119
- msgid "Use data speculation before reload"
--msgstr ""
-+msgstr "reload 前にデータ投機を使用する"
-
- #: config/ia64/ia64.opt:123
- msgid "Use data speculation after reload"
--msgstr ""
-+msgstr "reload 後にデータ投機を使用する"
-
- #: config/ia64/ia64.opt:127
- msgid "Use control speculation"
--msgstr ""
-+msgstr "制御投機を使用する"
-
- #: config/ia64/ia64.opt:131
- msgid "Use in block data speculation before reload"
--msgstr ""
-+msgstr "reload 前にブロック内データ投機を使用する"
-
- #: config/ia64/ia64.opt:135
- msgid "Use in block data speculation after reload"
--msgstr ""
-+msgstr "reload 後にブロック内データ投機を使用する"
-
- #: config/ia64/ia64.opt:139
- msgid "Use in block control speculation"
--msgstr ""
-+msgstr "ブロック内制御投機を使用する"
-
- #: config/ia64/ia64.opt:143
- msgid "Use simple data speculation check"
--msgstr ""
-+msgstr "単純データ投機検査を使用する"
-
- #: config/ia64/ia64.opt:147
- msgid "Use simple data speculation check for control speculation"
--msgstr ""
-+msgstr "制御投機用の単純データ投機検査を使用する"
-
- #: config/ia64/ia64.opt:151
- msgid "If set, data speculative instructions will be chosen for schedule only if there are no other choices at the moment "
-@@ -5789,7 +5782,7 @@
-
- #: config/ia64/ia64.opt:163
- msgid "Place a stop bit after every cycle when scheduling"
--msgstr ""
-+msgstr "スケジューリング時の各サイクル後にストップビットを配置する"
-
- #: config/ia64/ia64.opt:167
- msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
-@@ -5805,7 +5798,7 @@
-
- #: config/ia64/ia64.opt:179
- msgid "Don't generate checks for control speculation in selective scheduling"
--msgstr ""
-+msgstr "選択的スケジューリング内では制御投機用の検査を生成しない"
-
- #: config/ia64/vms_symvec_libgcc_s.opt:3
- msgid "! It would be better to auto-generate this file."
-@@ -6109,7 +6102,7 @@
-
- #: config/m68k/m68k.opt:160 config/bfin/bfin.opt:61
- msgid "Enable separate data segment"
--msgstr ""
-+msgstr "分離データセグメントを有効にする"
-
- #: config/m68k/m68k.opt:164 config/bfin/bfin.opt:57
- msgid "ID of shared library to build"
-@@ -6149,7 +6142,7 @@
-
- #: config/i386/mingw.opt:23
- msgid "Warn about none ISO msvcrt scanf/printf width extensions"
--msgstr ""
-+msgstr "非 ISO の msvcrt scanf/printf の幅拡張に関して警告する"
-
- #: config/i386/mingw.opt:27
- msgid "For nested functions on stack executable permission is set."
-@@ -6201,7 +6194,7 @@
-
- #: config/i386/i386.opt:114
- msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
--msgstr ""
-+msgstr "x86-64 メディアモデルでは与えられた閾値より大きいデータを .ldata セクションに配置する"
-
- #: config/i386/i386.opt:118
- msgid "Use given x86-64 code model"
-@@ -6217,16 +6210,15 @@
-
- #: config/i386/i386.opt:129
- msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
--msgstr ""
-+msgstr "スタックを再整列するために動的再整列引数ポインタ (Dynamic Realigned Argument Pointer, DRAP) を常に使用する"
-
- #: config/i386/i386.opt:133
- msgid "Return values of functions in FPU registers"
- msgstr "FPU レジスタ内の機能の値を返す"
-
- #: config/i386/i386.opt:137
--#, fuzzy
- msgid "Generate floating point mathematics using given instruction set"
--msgstr "ハードウェア浮動小数点命令を使用する"
-+msgstr "与えられた命令集合を使用して浮動小数数値計算を生成する"
-
- #: config/i386/i386.opt:149
- msgid "Inline all known string operations"
-@@ -6314,8 +6306,9 @@
- msgstr "8 バイトベクトルをメモリに返す"
-
- #: config/i386/i386.opt:253
-+#, fuzzy
- msgid "Generate reciprocals instead of divss and sqrtss."
--msgstr ""
-+msgstr "divss および sqrtss の代わりに逆数 (reciprocal) を生成する"
-
- #: config/i386/i386.opt:257
- msgid "Generate cld instruction in the function prologue."
-@@ -6331,7 +6324,7 @@
-
- #: config/i386/i386.opt:271
- msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
--msgstr ""
-+msgstr "自動ベクトル化で 256 ビット AVX 命令の代わりに 128 ビット AVX 命令を使用する"
-
- #: config/i386/i386.opt:277
- msgid "Generate 32bit i386 code"
-@@ -6382,9 +6375,8 @@
- msgstr "SSE4.1 と SSE4.2 の組み込み関数とコード生成をサポートしない"
-
- #: config/i386/i386.opt:328
--#, fuzzy
- msgid "%<-msse5%> was removed"
--msgstr "'-msse5' は削除されました"
-+msgstr "%<-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"
-@@ -6544,7 +6536,7 @@
-
- #: config/rs6000/rs6000.opt:152
- msgid "Use PowerPC General Purpose group optional instructions"
--msgstr "PowerPC 一般用途グループオプション命令を使用する"
-+msgstr "PowerPC 汎用グループオプション命令を使用する"
-
- #: config/rs6000/rs6000.opt:156
- msgid "Use PowerPC Graphics group optional instructions"
-@@ -7002,7 +6994,7 @@
-
- #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
- msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
--msgstr ""
-+msgstr "実行時サポートが提供されると見なし、リンカコマンドラインに -lsim を含めない"
-
- #: config/mcore/mcore.opt:60
- msgid "Use arbitrary sized immediates in bit operations"
-@@ -7014,7 +7006,7 @@
-
- #: config/mcore/mcore.opt:71
- msgid "Set the maximum amount for a single stack increment operation"
--msgstr "単一のスタックインクリメント操作の最大値を設定する"
-+msgstr "単一のスタック増分操作の最大値を設定する"
-
- #: config/mcore/mcore.opt:75
- msgid "Always treat bitfields as int-sized"
-@@ -7234,7 +7226,7 @@
-
- #: config/sh/sh.opt:246
- msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
--msgstr ""
-+msgstr "除算戦略、次のいずれか: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
-
- #: config/sh/sh.opt:250
- msgid "Specify name for 32 bit signed division function"
-@@ -7282,7 +7274,7 @@
-
- #: config/sh/sh.opt:298
- msgid "Mark MAC register as call-clobbered"
--msgstr ""
-+msgstr "MAC レジスタを呼び出しで破壊されるとマークする"
-
- #: config/sh/sh.opt:304
- msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
-@@ -7960,7 +7952,7 @@
-
- #: config/m68hc11/m68hc11.opt:49
- msgid "Auto pre/post decrement increment allowed"
--msgstr "自動 pre/post デクリメント インクリメントを許容する"
-+msgstr "自動 前置/後置 減分/増分 を許容する"
-
- #: config/m68hc11/m68hc11.opt:53
- msgid "Min/max instructions allowed"
-@@ -7972,7 +7964,7 @@
-
- #: config/m68hc11/m68hc11.opt:61
- msgid "Auto pre/post decrement increment not allowed"
--msgstr "自動 pre/post デクリメント インクリメントを許容しない"
-+msgstr "自動 前置/後置 減分/増分を許容しない"
-
- #: config/m68hc11/m68hc11.opt:65
- msgid "Use jsr and rts for function calls and returns"
-@@ -8346,7 +8338,7 @@
-
- #: config/bfin/bfin.opt:69
- msgid "Link with the fast floating-point library"
--msgstr ""
-+msgstr "高速な浮動小数ライブラリとリンクする"
-
- #: config/bfin/bfin.opt:81
- msgid "Do stack checking using bounds in L1 scratch memory"
-@@ -8382,7 +8374,7 @@
-
- #: config/picochip/picochip.opt:31
- msgid "Specify whether the byte access instructions should be used. Enabled by default."
--msgstr ""
-+msgstr "バイトアクセス命令を使用するかどうかを指定する。デフォルトでは有効となる"
-
- #: config/picochip/picochip.opt:35
- msgid "Enable debug output to be generated."
-@@ -8390,11 +8382,11 @@
-
- #: config/picochip/picochip.opt:39
- msgid "Allow a symbol value to be used as an immediate value in an instruction."
--msgstr ""
-+msgstr "命令内でシンボル値が即値として使用されることを許可する"
-
- #: config/picochip/picochip.opt:43
- msgid "Generate warnings when inefficient code is known to be generated."
--msgstr ""
-+msgstr "非効率なコードが生成された時に警告する"
-
- #: config/vxworks.opt:36
- msgid "Assume the VxWorks RTP environment"
-@@ -8418,7 +8410,7 @@
-
- #: config/darwin.opt:205
- msgid "Warn if constant CFString objects contain non-portable characters"
--msgstr ""
-+msgstr "定数 CFString オブジェクトが移植性の無い文字を含む場合に警告する"
-
- #: config/darwin.opt:210
- msgid "Generate AT&T-style stubs for Mach-O"
-@@ -8430,7 +8422,7 @@
-
- #: config/darwin.opt:218
- msgid "Generate code suitable for fast turn around debugging"
--msgstr ""
-+msgstr "デバッグを高速に行うために適したコードを生成する"
-
- #: config/darwin.opt:227
- msgid "The earliest MacOS X version on which this program will run"
-@@ -8442,15 +8434,15 @@
-
- #: config/darwin.opt:235
- msgid "Generate code for darwin loadable kernel extensions"
--msgstr ""
-+msgstr "darwin ロード可能カーネル拡張用のコードを生成する"
-
- #: config/darwin.opt:239
- msgid "Generate code for the kernel or loadable kernel extensions"
--msgstr ""
-+msgstr "カーネル用、またはロード可能カーネル拡張用のコードを生成する"
-
- #: config/darwin.opt:243
- msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
--msgstr ""
-+msgstr "-iframework <dir>\t<dir> をシステムフレームワークインクルードパスの末尾に加える"
-
- #: config/lynx.opt:23
- msgid "Support legacy multi-threading"
-@@ -8737,7 +8729,6 @@
- msgstr ""
-
- #: config/microblaze/microblaze.opt:92
--#, fuzzy
- msgid "Use hardware floating point conversion instructions"
- msgstr "ハードウェア浮動小数点変換命令を使用する"
-
-@@ -8862,7 +8853,7 @@
-
- #: c-family/c.opt:249
- msgid "-MT <target>\tAdd an unquoted target"
--msgstr ""
-+msgstr "-MT <target>\tターゲット (引用符を付けない) を追加する"
-
- #: c-family/c.opt:253
- msgid "Do not generate #line directives"
-@@ -8898,11 +8889,11 @@
-
- #: c-family/c.opt:288
- msgid "Warn about C constructs that are not in the common subset of C and C++"
--msgstr ""
-+msgstr "C と C++ の共通部分集合では無い C 構文に関して警告する"
-
- #: c-family/c.opt:292
- msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
--msgstr ""
-+msgstr "ISO C++ 1998 と ISO C++ 200x で意味が異なる C++ 構文に関して警告する"
-
- #: c-family/c.opt:296
- msgid "Warn about casts which discard qualifiers"
-@@ -8962,7 +8953,7 @@
-
- #: c-family/c.opt:352
- msgid "Warn about stray tokens after #elif and #endif"
--msgstr ""
-+msgstr "#elif および #endif の後にあるはぐれたトークンに関して警告する"
-
- #: c-family/c.opt:356
- msgid "Warn about comparison of different enum types"
-@@ -8977,9 +8968,8 @@
- msgstr "浮動小数点数の等価比較に関して警告する"
-
- #: c-family/c.opt:372
--#, fuzzy
- msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
--msgstr "printf/scanf/strftime/strfmon 形式の変則的なものに関して警告する"
-+msgstr "printf/scanf/strftime/strfmon 書式文字列異常に関して警告する"
-
- #: c-family/c.opt:376
- msgid "Warn if passing too many arguments to a function for its format string"
-@@ -8998,9 +8988,8 @@
- msgstr "セキュリティ問題になる可能性がある書式関数に関して警告する"
-
- #: c-family/c.opt:392
--#, fuzzy
- msgid "Warn about strftime formats yielding 2-digit years"
--msgstr "strftime 形式が二桁で年を表している時の警告しない"
-+msgstr "strftime 書式が 2 桁の年の場合に警告する"
-
- #: c-family/c.opt:396
- msgid "Warn about zero-length formats"
-@@ -9409,7 +9398,7 @@
-
- #: c-family/c.opt:823
- msgid "Don't emit dllexported inline functions unless needed"
--msgstr ""
-+msgstr "必要が無い限り dllexported インライン関数を発行しない"
-
- #: c-family/c.opt:830
- msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
-@@ -9501,7 +9490,7 @@
-
- #: c-family/c.opt:942
- msgid "Generate run time type descriptor information"
--msgstr ""
-+msgstr "実行時型記述子情報を生成する"
-
- #: c-family/c.opt:946
- msgid "Use the same size for double as for float"
-@@ -9889,19 +9878,16 @@
- msgstr "関数が __attribute__((pure)) の候補となりそうな場合に警告する"
-
- #: common.opt:608
--#, fuzzy
- msgid "Warn about enumerated switches, with no default, missing a case"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で default 文が無いか特定の case が無い場合に警告する"
-
- #: common.opt:612
--#, fuzzy
- msgid "Warn about enumerated switches missing a \"default:\" statement"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で \"default:\" 文が無い場合に警告する"
-
- #: common.opt:616
--#, fuzzy
- msgid "Warn about all enumerated switches missing a specific case"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で特定の case が無い場合に警告する"
-
- #: common.opt:620
- msgid "Do not suppress warnings from system headers"
-@@ -10000,9 +9986,8 @@
- msgstr "自動増加/減少命令を生成する"
-
- #: common.opt:821
--#, fuzzy
- msgid "Generate code to check bounds before indexing arrays"
--msgstr "配列の添字と添字境界を検査するコードを生成する"
-+msgstr "配列の添え字を使用する前に境界検査を行うコードを生成する"
-
- #: common.opt:825
- #, fuzzy
-@@ -10043,7 +10028,7 @@
-
- #: common.opt:864
- msgid "Looks for opportunities to reduce stack adjustments and stack references."
--msgstr ""
-+msgstr "スタック調整およびスタック参照を削減する機会を探す"
-
- #: common.opt:868
- msgid "Do not put uninitialized globals in the common section"
-@@ -10058,18 +10043,16 @@
- msgstr ""
-
- #: common.opt:884
--#, fuzzy
- msgid "Perform comparison elimination after register allocation has finished"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "レジスタは位置が完了した後に比較の除去を行う"
-
- #: common.opt:888
- msgid "Do not perform optimizations increasing noticeably stack usage"
--msgstr ""
-+msgstr "スタック使用量を著しく増加させる最適化を行わない"
-
- #: common.opt:892
--#, fuzzy
- msgid "Perform a register copy-propagation optimization pass"
--msgstr "最適化過程のレジスタつけ変えを行なう"
-+msgstr ""
-
- #: common.opt:896
- msgid "Perform cross-jumping optimization"
-@@ -10101,7 +10084,7 @@
-
- #: common.opt:928
- msgid "Map one directory name to another in debug information"
--msgstr ""
-+msgstr "デバッグ情報内のディレクトリー名を他のものにマップする"
-
- #: common.opt:934
- msgid "Defer popping functions args from stack until later"
-@@ -10116,9 +10099,8 @@
- msgstr "無意味な null ポインタ検査を削除する"
-
- #: common.opt:946
--#, fuzzy
- msgid "Try to convert virtual calls to direct ones."
--msgstr "リンカが PIC 呼び出しを直接呼び出しに変更することを許可するように試みる"
-+msgstr "仮想呼び出しを直接呼び出しに変換することを試みる"
-
- #: common.opt:950
- #, fuzzy
-@@ -10137,7 +10119,7 @@
-
- #: common.opt:978
- msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation"
--msgstr ""
-+msgstr "-fdump-final-insns=filename\t翻訳終了時に filename へ命令をダンプする"
-
- #: common.opt:982
- msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code"
-@@ -10173,7 +10155,7 @@
-
- #: common.opt:1014 common.opt:1018
- msgid "Perform unused type elimination in debug info"
--msgstr ""
-+msgstr "デバッグ情報内で使用されていない型の除去を行う"
-
- #: common.opt:1022
- msgid "Do not suppress C++ class debug information."
-@@ -10181,25 +10163,24 @@
-
- #: common.opt:1026
- msgid "Generate debug information to support Identical Code Folding (ICF)"
--msgstr ""
-+msgstr "Identical Code Folding (ICF) をサポートするためのデバッグ情報を生成する"
-
- #: common.opt:1030
- msgid "Enable exception handling"
- msgstr "例外処理を有効にする"
-
- #: common.opt:1034
--#, fuzzy
- msgid "Perform a number of minor, expensive optimizations"
--msgstr "目立たない、コストのかかる最適化を行なう"
-+msgstr "多くの、目立たないがコストが高い最適化を行う"
-
- #: common.opt:1038
- msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision"
--msgstr ""
-+msgstr "-fexcess-precision=[fast|standard]\t余分な浮動小数点精度の取り扱いを指定する"
-
- #: common.opt:1041
- #, c-format
- msgid "unknown excess precision style %qs"
--msgstr ""
-+msgstr "不明な余分な精度スタイル %qs です"
-
- #: common.opt:1054
- msgid "Assume no NaNs or infinities are generated"
-@@ -10222,52 +10203,45 @@
- msgstr ""
-
- #: common.opt:1077
--#, fuzzy, c-format
-+#, c-format
- msgid "unknown floating point contraction style %qs"
--msgstr "浮動小数点定数を TOC 内に配置する"
-+msgstr "不明な浮動小数短縮形 %qs です"
-
- #: common.opt:1094
- msgid "Allow function addresses to be held in registers"
- msgstr "関数アドレスをレジスタに持たせる事を許可する"
-
- #: common.opt:1098
--#, fuzzy
- msgid "Place each function into its own section"
--msgstr "各々の関数をそれ自身のセクションに配置する"
-+msgstr "それぞれの関数をそれ自身のセクションに配置する"
-
- #: common.opt:1102
--#, fuzzy
- msgid "Perform global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "大域共通部分式の除去を行う"
-
- #: common.opt:1106
--#, fuzzy
- msgid "Perform enhanced load motion during global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr ""
-
- #: common.opt:1110
--#, fuzzy
- msgid "Perform store motion after global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr ""
-
- #: common.opt:1114
- msgid "Perform redundant load after store elimination in global common subexpression"
- msgstr ""
-
- #: common.opt:1119
--#, fuzzy
- msgid "Perform global common subexpression elimination after register allocation"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "レジスタ配置後に大域共通部分式の除去を行う"
-
- #: common.opt:1125
--#, fuzzy
- msgid "Enable in and out of Graphite representation"
--msgstr "自動テンプレート実体化を有効にする"
-+msgstr ""
-
- #: common.opt:1129
--#, fuzzy
- msgid "Enable Graphite Identity transformation"
--msgstr "呼び出しグラフ情報を送出する"
-+msgstr ""
-
- #: common.opt:1133
- msgid "Mark all loops as parallel"
-@@ -10306,9 +10280,8 @@
- msgstr ""
-
- #: common.opt:1173
--#, fuzzy
- msgid "Perform conversion of conditional jumps to conditional execution"
--msgstr "条件的な実行への変更のための閾値を変更する"
-+msgstr ""
-
- #: common.opt:1177
- msgid "Convert conditional jumps in innermost loops to branchless equivalents"
-@@ -10376,13 +10349,12 @@
- msgstr ""
-
- #: common.opt:1253
--#, fuzzy
- msgid "Discover pure and const functions"
--msgstr "使われない仮想関数を切り捨てる"
-+msgstr "純粋および定数関数を見つける"
-
- #: common.opt:1257
- msgid "Discover readonly and non addressable static variables"
--msgstr ""
-+msgstr "読み取り専用およびアドレス付けできない静的変数を見つける"
-
- #: common.opt:1261
- msgid "Perform matrix layout flattening and transposing based"
-@@ -10415,9 +10387,8 @@
- msgstr ""
-
- #: common.opt:1305
--#, fuzzy
- msgid "Share slots for saving different hard registers."
--msgstr "引数レジスタにローカルのものを格納する"
-+msgstr ""
-
- #: common.opt:1309
- msgid "Share stack slots for spilled pseudo-registers."
-@@ -10621,19 +10592,19 @@
-
- #: common.opt:1521
- msgid "Enable basic program profiling code"
--msgstr ""
-+msgstr "基本プログラムプロファイリングコードを有効にする"
-
- #: common.opt:1525
- msgid "Insert arc-based program profiling code"
--msgstr ""
-+msgstr "円弧ベースプログラムプロファイリングコードを挿入する"
-
- #: common.opt:1529
- msgid "Set the top-level directory for storing the profile data."
--msgstr ""
-+msgstr "プロファイルデータ保存用の最上位ディレクリーを設定する"
-
- #: common.opt:1534
- msgid "Enable correction of flow inconsistent profile data input"
--msgstr ""
-+msgstr "フロー一貫性が無いデータ入力の訂正を有効にする"
-
- #: common.opt:1538
- msgid "Enable common options for generating profile info for profile feedback directed optimizations"
-@@ -10653,7 +10624,7 @@
-
- #: common.opt:1554
- msgid "Insert code to profile values of expressions"
--msgstr ""
-+msgstr "式の値をプロファイルするためのコードを挿入する"
-
- #: common.opt:1561
- msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
-@@ -11836,7 +11807,7 @@
- #: c-decl.c:1150
- #, gcc-internal-format
- msgid "nested function %q+D declared but never defined"
--msgstr ""
-+msgstr "入れ子になった関数 %q+D が宣言されましたが定義されていません"
-
- #: c-decl.c:1162
- #, gcc-internal-format
-@@ -11893,7 +11864,7 @@
- #: c-decl.c:1613
- #, gcc-internal-format
- msgid "prototype for %q+D follows non-prototype definition"
--msgstr ""
-+msgstr "非プロトタイプ定義に続いて %q+D 用のプロトタイプがあります"
-
- #: c-decl.c:1628
- #, gcc-internal-format
-@@ -11969,9 +11940,9 @@
- msgstr "%q+D が異なる型で再定義されました"
-
- #: c-decl.c:1818
--#, fuzzy, gcc-internal-format
-+#, gcc-internal-format
- msgid "redefinition of typedef %q+D with variably modified type"
--msgstr "%q+D が異なる型で再定義されました"
-+msgstr ""
-
- #: c-decl.c:1825
- #, gcc-internal-format
-@@ -12016,17 +11987,17 @@
- #: c-decl.c:2001
- #, gcc-internal-format
- msgid "extern declaration of %q+D follows declaration with no linkage"
--msgstr ""
-+msgstr "リンク無し宣言の後に %q+D の extern 宣言が続いています"
-
- #: c-decl.c:2037
- #, gcc-internal-format
- msgid "declaration of %q+D with no linkage follows extern declaration"
--msgstr ""
-+msgstr "extern 宣言の後にリンク無し %q+D の宣言が続いています"
-
- #: c-decl.c:2043
- #, gcc-internal-format
- msgid "redeclaration of %q+D with no linkage"
--msgstr ""
-+msgstr "リンク無し %q+D の再定義です"
-
- #: c-decl.c:2069
- #, gcc-internal-format
-@@ -12354,7 +12325,7 @@
- #: c-decl.c:4614
- #, gcc-internal-format
- msgid "defining a type in a compound literal is invalid in C++"
--msgstr ""
-+msgstr "複合リテラル内での型定義は C++ では無効です"
-
- #: c-decl.c:4666 c-decl.c:4681
- #, gcc-internal-format
-@@ -13393,23 +13364,23 @@
- #: c-parser.c:1829
- #, gcc-internal-format
- msgid "expression in static assertion is not an integer"
--msgstr ""
-+msgstr "静的アサーション内の式が整数ではありません"
-
- #: c-parser.c:1836
- #, gcc-internal-format
- msgid "expression in static assertion is not an integer constant expression"
--msgstr ""
-+msgstr "静的アサーション内の式が整数定数式ではありません"
-
- #: c-parser.c:1841
- #, gcc-internal-format
- msgid "expression in static assertion is not constant"
--msgstr ""
-+msgstr "静的アサーション内の式が定数ではありません"
-
- #. Report the error.
- #: c-parser.c:1846 cp/semantics.c:4719
- #, gcc-internal-format
- msgid "static assertion failed: %E"
--msgstr ""
-+msgstr "静的アサーションに失敗しました: %E"
-
- #: c-parser.c:2207 c-parser.c:3063 c-parser.c:3709 c-parser.c:3983
- #: c-parser.c:5084 c-parser.c:5175 c-parser.c:5800 c-parser.c:6083
-@@ -14125,12 +14096,12 @@
- #: c-typeck.c:3578
- #, gcc-internal-format
- msgid "increment of enumeration value is invalid in C++"
--msgstr "列挙値のインクリメントは C++ では無効です"
-+msgstr "列挙値の増分は C++ では無効です"
-
- #: c-typeck.c:3581
- #, gcc-internal-format
- msgid "decrement of enumeration value is invalid in C++"
--msgstr "列挙値のデクリメントは C++ では無効です"
-+msgstr "列挙値の減分は C++ では無効です"
-
- #: c-typeck.c:3594
- #, gcc-internal-format
-@@ -14140,22 +14111,22 @@
- #: c-typeck.c:3613 c-typeck.c:3645
- #, gcc-internal-format
- msgid "wrong type argument to increment"
--msgstr "インクリメントする引数の型が間違っています"
-+msgstr "増分する引数の型が間違っています"
-
- #: c-typeck.c:3615 c-typeck.c:3648
- #, gcc-internal-format
- msgid "wrong type argument to decrement"
--msgstr "デクリメントする引数の型が間違っています"
-+msgstr "減分する引数の型が間違っています"
-
- #: c-typeck.c:3635
- #, gcc-internal-format
- msgid "increment of pointer to unknown structure"
--msgstr "不明な構造体へのポインタのインクリメントです"
-+msgstr "不明な構造体へのポインタの増分です"
-
- #: c-typeck.c:3638
- #, gcc-internal-format
- msgid "decrement of pointer to unknown structure"
--msgstr "不明な構造体へのポインタのデクリメントです"
-+msgstr "不明な構造体へのポインタの減分です"
-
- #: c-typeck.c:3722
- #, gcc-internal-format
-@@ -14170,12 +14141,12 @@
- #: c-typeck.c:3895 c-family/c-common.c:8658
- #, gcc-internal-format
- msgid "increment of read-only location %qE"
--msgstr "読み取り専用位置 %qE のインクリメントです"
-+msgstr "読み取り専用位置 %qE の増分です"
-
- #: c-typeck.c:3898 c-family/c-common.c:8659
- #, gcc-internal-format
- msgid "decrement of read-only location %qE"
--msgstr "読み取り専用位置 %qE のデクリメントです"
-+msgstr "読み取り専用位置 %qE の減分です"
-
- #: c-typeck.c:3939
- #, gcc-internal-format
-@@ -19787,12 +19758,12 @@
- #: c-family/c-common.c:8611
- #, gcc-internal-format
- msgid "increment of member %qD in read-only object"
--msgstr "読み取り専用オブジェクト内のメンバ %qD のインクリメントです"
-+msgstr "読み取り専用オブジェクト内のメンバ %qD の増分です"
-
- #: c-family/c-common.c:8613
- #, gcc-internal-format
- msgid "decrement of member %qD in read-only object"
--msgstr "読み取り専用オブジェクト内のメンバ %qD のデクリメントです"
-+msgstr "読み取り専用オブジェクト内のメンバ %qD の減分です"
-
- #: c-family/c-common.c:8615
- #, gcc-internal-format
-@@ -19807,12 +19778,12 @@
- #: c-family/c-common.c:8620
- #, gcc-internal-format
- msgid "increment of read-only member %qD"
--msgstr "読み取り専用メンバ %qD のインクリメントです"
-+msgstr "読み取り専用メンバ %qD の増分です"
-
- #: c-family/c-common.c:8621
- #, gcc-internal-format
- msgid "decrement of read-only member %qD"
--msgstr "読み取り専用メンバ %qD のデクリメントです"
-+msgstr "読み取り専用メンバ %qD の減分です"
-
- #: c-family/c-common.c:8622
- #, gcc-internal-format
-@@ -19827,12 +19798,12 @@
- #: c-family/c-common.c:8627
- #, gcc-internal-format
- msgid "increment of read-only variable %qD"
--msgstr "読み取り専用変数 %qD のインクリメントです"
-+msgstr "読み取り専用変数 %qD の増分です"
-
- #: c-family/c-common.c:8628
- #, gcc-internal-format
- msgid "decrement of read-only variable %qD"
--msgstr "読み取り専用変数 %qD のデクリメントです"
-+msgstr "読み取り専用変数 %qD の減分です"
-
- #: c-family/c-common.c:8629
- #, gcc-internal-format
-@@ -19847,12 +19818,12 @@
- #: c-family/c-common.c:8633
- #, gcc-internal-format
- msgid "increment of read-only parameter %qD"
--msgstr "読み取り専用パラメータ %qD のインクリメントです"
-+msgstr "読み取り専用パラメータ %qD の増分です"
-
- #: c-family/c-common.c:8634
- #, gcc-internal-format
- msgid "decrement of read-only parameter %qD"
--msgstr "読み取り専用パラメータ %qD のデクリメントです"
-+msgstr "読み取り専用パラメータ %qD の減分です"
-
- #: c-family/c-common.c:8635
- #, gcc-internal-format
-@@ -19867,12 +19838,12 @@
- #: c-family/c-common.c:8642
- #, gcc-internal-format
- msgid "increment of read-only named return value %qD"
--msgstr "読み取り専用名前付き戻り値 %qD のインクリメントです"
-+msgstr "読み取り専用名前付き戻り値 %qD の増分です"
-
- #: c-family/c-common.c:8644
- #, gcc-internal-format
- msgid "decrement of read-only named return value %qD"
--msgstr "読み取り専用名前付き戻り値 %qD のデクリメントです"
-+msgstr "読み取り専用名前付き戻り値 %qD の減分です"
-
- #: c-family/c-common.c:8646
- #, gcc-internal-format
-@@ -19887,12 +19858,12 @@
- #: c-family/c-common.c:8652
- #, gcc-internal-format
- msgid "increment of function %qD"
--msgstr "関数 %qD のインクリメントです"
-+msgstr "関数 %qD の増分です"
-
- #: c-family/c-common.c:8653
- #, gcc-internal-format
- msgid "decrement of function %qD"
--msgstr "関数 %qD のデクリメントです"
-+msgstr "関数 %qD の減分です"
-
- #: c-family/c-common.c:8654
- #, gcc-internal-format
-@@ -19912,12 +19883,12 @@
- #: c-family/c-common.c:8677
- #, gcc-internal-format
- msgid "lvalue required as increment operand"
--msgstr "インクリメントの被演算子として左辺値が必要です"
-+msgstr "増分の被演算子として左辺値が必要です"
-
- #: c-family/c-common.c:8680
- #, gcc-internal-format
- msgid "lvalue required as decrement operand"
--msgstr "デクリメントの被演算子として左辺値が必要です"
-+msgstr "減分の被演算子として左辺値が必要です"
-
- #: c-family/c-common.c:8683
- #, gcc-internal-format
-@@ -20556,12 +20527,12 @@
- #: c-family/c-omp.c:375 cp/semantics.c:4431
- #, gcc-internal-format
- msgid "missing increment expression"
--msgstr "インクリメント式がありません"
-+msgstr "増分式がありません"
-
- #: c-family/c-omp.c:444 cp/semantics.c:4287
- #, gcc-internal-format
- msgid "invalid increment expression"
--msgstr "無効なインクリメント式です"
-+msgstr "無効な増分式です"
-
- #: c-family/c-opts.c:303
- #, gcc-internal-format
-@@ -20571,7 +20542,7 @@
- #: c-family/c-opts.c:306
- #, gcc-internal-format
- msgid "obsolete option -I- used, please use -iquote instead"
--msgstr "廃止あれたオプション -I- が使用されています。代わりに -iquote を使用してください"
-+msgstr "廃止されたオプション -I- が使用されています。代わりに -iquote を使用してください"
-
- #: c-family/c-opts.c:486
- #, gcc-internal-format
-Index: gcc/tree-ssa-forwprop.c
-===================================================================
---- a/src/gcc/tree-ssa-forwprop.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/tree-ssa-forwprop.c (.../branches/gcc-4_6-branch)
-@@ -872,7 +872,7 @@
- TREE_TYPE (gimple_assign_rhs1 (use_stmt))))
- {
- tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
-- tree new_offset, new_base, saved;
-+ tree new_offset, new_base, saved, new_lhs;
- while (handled_component_p (*def_rhs_basep))
- def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
- saved = *def_rhs_basep;
-@@ -891,9 +891,12 @@
- *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
- new_base, new_offset);
- TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (lhs);
-+ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (lhs);
- TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (lhs);
-- gimple_assign_set_lhs (use_stmt,
-- unshare_expr (TREE_OPERAND (def_rhs, 0)));
-+ new_lhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
-+ gimple_assign_set_lhs (use_stmt, new_lhs);
-+ TREE_THIS_VOLATILE (new_lhs) = TREE_THIS_VOLATILE (lhs);
-+ TREE_SIDE_EFFECTS (new_lhs) = TREE_SIDE_EFFECTS (lhs);
- *def_rhs_basep = saved;
- tidy_after_forward_propagate_addr (use_stmt);
- /* Continue propagating into the RHS if this was not the
-@@ -953,7 +956,7 @@
- TREE_TYPE (TREE_OPERAND (def_rhs, 0))))
- {
- tree *def_rhs_basep = &TREE_OPERAND (def_rhs, 0);
-- tree new_offset, new_base, saved;
-+ tree new_offset, new_base, saved, new_rhs;
- while (handled_component_p (*def_rhs_basep))
- def_rhs_basep = &TREE_OPERAND (*def_rhs_basep, 0);
- saved = *def_rhs_basep;
-@@ -972,9 +975,12 @@
- *def_rhs_basep = build2 (MEM_REF, TREE_TYPE (*def_rhs_basep),
- new_base, new_offset);
- TREE_THIS_VOLATILE (*def_rhs_basep) = TREE_THIS_VOLATILE (rhs);
-+ TREE_SIDE_EFFECTS (*def_rhs_basep) = TREE_SIDE_EFFECTS (rhs);
- TREE_THIS_NOTRAP (*def_rhs_basep) = TREE_THIS_NOTRAP (rhs);
-- gimple_assign_set_rhs1 (use_stmt,
-- unshare_expr (TREE_OPERAND (def_rhs, 0)));
-+ new_rhs = unshare_expr (TREE_OPERAND (def_rhs, 0));
-+ gimple_assign_set_rhs1 (use_stmt, new_rhs);
-+ TREE_THIS_VOLATILE (new_rhs) = TREE_THIS_VOLATILE (rhs);
-+ TREE_SIDE_EFFECTS (new_rhs) = TREE_SIDE_EFFECTS (rhs);
- *def_rhs_basep = saved;
- fold_stmt_inplace (use_stmt);
- tidy_after_forward_propagate_addr (use_stmt);
-Index: gcc/varasm.c
-===================================================================
---- a/src/gcc/varasm.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/varasm.c (.../branches/gcc-4_6-branch)
-@@ -6751,11 +6751,14 @@
- /* A non-decl is an entry in the constant pool. */
- if (!DECL_P (exp))
- local_p = true;
-- /* Weakrefs may not bind locally, even though the weakref itself is
-- always static and therefore local.
-- FIXME: We can resolve this more curefuly by looking at the weakref
-- alias. */
-- else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp)))
-+ /* Weakrefs may not bind locally, even though the weakref itself is always
-+ static and therefore local. Similarly, the resolver for ifunc functions
-+ might resolve to a non-local function.
-+ FIXME: We can resolve the weakref case more curefuly by looking at the
-+ weakref alias. */
-+ else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
-+ || (TREE_CODE (exp) == FUNCTION_DECL
-+ && lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
- local_p = false;
- /* Static variables are always local. */
- else if (! TREE_PUBLIC (exp))
-Index: gcc/sched-deps.c
-===================================================================
---- a/src/gcc/sched-deps.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/sched-deps.c (.../branches/gcc-4_6-branch)
-@@ -2687,7 +2687,11 @@
- else
- sched_analyze_2 (deps, XEXP (link, 0), insn);
- }
-- if (find_reg_note (insn, REG_SETJMP, NULL))
-+ /* Don't schedule anything after a tail call, tail call needs
-+ to use at least all call-saved registers. */
-+ if (SIBLING_CALL_P (insn))
-+ reg_pending_barrier = TRUE_BARRIER;
-+ else if (find_reg_note (insn, REG_SETJMP, NULL))
- reg_pending_barrier = MOVE_BARRIER;
- }
-
-Index: gcc/tree-object-size.c
-===================================================================
---- a/src/gcc/tree-object-size.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/tree-object-size.c (.../branches/gcc-4_6-branch)
-@@ -175,7 +175,7 @@
- unsigned HOST_WIDE_INT sz;
-
- if (!osi || (object_size_type & 1) != 0
-- || TREE_CODE (pt_var) != SSA_NAME)
-+ || TREE_CODE (TREE_OPERAND (pt_var, 0)) != SSA_NAME)
- {
- sz = compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
- object_size_type & ~1);
-Index: gcc/lto-opts.c
-===================================================================
---- a/src/gcc/lto-opts.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/lto-opts.c (.../branches/gcc-4_6-branch)
-@@ -358,7 +358,7 @@
- size_t len, l, skip;
- const char *data, *p;
- const struct lto_simple_header *header;
-- int32_t opts_offset;
-+ int opts_offset;
- struct lto_input_block ib;
-
- data = lto_get_section_data (file_data, LTO_section_opts, NULL, &len);
-@@ -379,10 +379,10 @@
-
- lto_check_version (header->lto_header.major_version,
- header->lto_header.minor_version);
--
-+
- LTO_INIT_INPUT_BLOCK (ib, p + opts_offset, 0, header->main_size);
- input_options (&ib);
--
-+
- skip = header->main_size + opts_offset;
- l -= skip;
- p += skip;
-Index: gcc/c-parser.c
-===================================================================
---- a/src/gcc/c-parser.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/c-parser.c (.../branches/gcc-4_6-branch)
-@@ -6294,7 +6294,7 @@
- c_parser_error (parser, "expected identifier");
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
- "expected %<)%>");
-- expr.value = fold_offsetof (offsetof_ref, NULL_TREE);
-+ expr.value = fold_offsetof (offsetof_ref);
- }
- break;
- case RID_CHOOSE_EXPR:
-Index: gcc/config/sparc/sparc.md
-===================================================================
---- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-4_6-branch)
-@@ -1813,8 +1813,8 @@
- })
-
- (define_insn "*movsf_insn"
-- [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f,*r,*r,*r,f,*r,m,m")
-- (match_operand:V32 1 "input_operand" "GY,f,*rRY,Q,S,m,m,f,*rGY"))]
-+ [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f, *r,*r,*r,f,*r,m, m")
-+ (match_operand:V32 1 "input_operand" "GY,f,*rRY, Q, S,m, m,f,*rGY"))]
- "TARGET_FPU
- && (register_operand (operands[0], <V32:MODE>mode)
- || register_or_zero_operand (operands[1], <V32:MODE>mode))"
-@@ -1861,8 +1861,8 @@
- ;; when -mno-fpu.
-
- (define_insn "*movsf_insn_no_fpu"
-- [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r,m")
-- (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
-+ [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r, m")
-+ (match_operand:SF 1 "input_operand" "rR,Q,S,m,rG"))]
- "! TARGET_FPU
- && (register_operand (operands[0], SFmode)
- || register_or_zero_operand (operands[1], SFmode))"
-@@ -1948,8 +1948,8 @@
-
- ;; Be careful, fmovd does not exist when !v9.
- (define_insn "*movdf_insn_sp32"
-- [(set (match_operand:DF 0 "nonimmediate_operand" "=e,W,U,T,o,e,*r,o,e,o")
-- (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "= e,W,U,T,o,e, *r, o, e,o")
-+ (match_operand:DF 1 "input_operand" "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
- "TARGET_FPU
- && ! TARGET_V9
- && (register_operand (operands[0], DFmode)
-@@ -1969,8 +1969,8 @@
- (set_attr "length" "*,*,*,*,2,2,2,2,2,2")])
-
- (define_insn "*movdf_insn_sp32_no_fpu"
-- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o,r,o")
-- (match_operand:DF 1 "input_operand" "T,U,G,ro,r"))]
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o, r,o")
-+ (match_operand:DF 1 "input_operand" " T,U,G,ro,r"))]
- "! TARGET_FPU
- && ! TARGET_V9
- && (register_operand (operands[0], DFmode)
-@@ -1986,8 +1986,8 @@
-
- ;; We have available v9 double floats but not 64-bit integer registers.
- (define_insn "*movdf_insn_sp32_v9"
-- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,T,W,U,T,f,*r,o")
-- (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYDF,*rGYf"))]
-+ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e, T,W,U,T, f, *r, o")
-+ (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roFD,*rGYf"))]
- "TARGET_FPU
- && TARGET_V9
- && ! TARGET_ARCH64
-@@ -2009,8 +2009,8 @@
- (set_attr "fptype" "double,double,*,*,*,*,*,*,*,*")])
-
- (define_insn "*movdf_insn_sp32_v9_no_fpu"
-- [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T,r,o")
-- (match_operand:DF 1 "input_operand" "T,U,G,ro,rG"))]
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T, r, o")
-+ (match_operand:DF 1 "input_operand" " T,U,G,ro,rG"))]
- "! TARGET_FPU
- && TARGET_V9
- && ! TARGET_ARCH64
-@@ -2027,8 +2027,8 @@
-
- ;; We have available both v9 double floats and 64-bit integer registers.
- (define_insn "*movdf_insn_sp64"
-- [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,W,*r,*r,m,*r")
-- (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY,m,*rGY,DF"))]
-+ [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e, e,W, *r,*r, m,*r")
-+ (match_operand:V64 1 "input_operand" "GY,e,W#F,e,*rGY, m,*rGY,FD"))]
- "TARGET_FPU
- && TARGET_ARCH64
- && (register_operand (operands[0], <V64:MODE>mode)
-@@ -2047,8 +2047,8 @@
- (set_attr "fptype" "double,double,*,*,*,*,*,*")])
-
- (define_insn "*movdf_insn_sp64_no_fpu"
-- [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
-- (match_operand:DF 1 "input_operand" "r,m,rG"))]
-+ [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r, m")
-+ (match_operand:DF 1 "input_operand" "r,m,rG"))]
- "! TARGET_FPU
- && TARGET_ARCH64
- && (register_operand (operands[0], DFmode)
-@@ -2288,8 +2288,8 @@
- })
-
- (define_insn "*movtf_insn_sp32"
-- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,U,r")
-- (match_operand:TF 1 "input_operand" "G,oe,GeUr,o,roG"))]
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o,U, r")
-+ (match_operand:TF 1 "input_operand" " G,oe,GeUr,o,roG"))]
- "TARGET_FPU
- && ! TARGET_ARCH64
- && (register_operand (operands[0], TFmode)
-@@ -2302,8 +2302,8 @@
- ;; when -mno-fpu.
-
- (define_insn "*movtf_insn_sp32_no_fpu"
-- [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o,r,o")
-- (match_operand:TF 1 "input_operand" "G,o,U,roG,r"))]
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o, r,o")
-+ (match_operand:TF 1 "input_operand" " G,o,U,roG,r"))]
- "! TARGET_FPU
- && ! TARGET_ARCH64
- && (register_operand (operands[0], TFmode)
-@@ -2312,8 +2312,8 @@
- [(set_attr "length" "4")])
-
- (define_insn "*movtf_insn_sp64"
-- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,r")
-- (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e, o, r")
-+ (match_operand:TF 1 "input_operand" "G,oe,Ger,roG"))]
- "TARGET_FPU
- && TARGET_ARCH64
- && ! TARGET_HARD_QUAD
-@@ -2323,8 +2323,8 @@
- [(set_attr "length" "2")])
-
- (define_insn "*movtf_insn_sp64_hq"
-- [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m,o,r")
-- (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m, o, r")
-+ (match_operand:TF 1 "input_operand" "G,e,m,e,rG,roG"))]
- "TARGET_FPU
- && TARGET_ARCH64
- && TARGET_HARD_QUAD
-@@ -2341,8 +2341,8 @@
- (set_attr "length" "2,*,*,*,2,2")])
-
- (define_insn "*movtf_insn_sp64_no_fpu"
-- [(set (match_operand:TF 0 "nonimmediate_operand" "=r,o")
-- (match_operand:TF 1 "input_operand" "orG,rG"))]
-+ [(set (match_operand:TF 0 "nonimmediate_operand" "= r, o")
-+ (match_operand:TF 1 "input_operand" "orG,rG"))]
- "! TARGET_FPU
- && TARGET_ARCH64
- && (register_operand (operands[0], TFmode)
-Index: gcc/config/sparc/sparc.h
-===================================================================
---- a/src/gcc/config/sparc/sparc.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/sparc/sparc.h (.../branches/gcc-4_6-branch)
-@@ -408,6 +408,7 @@
- %{mcpu=sparclite:-Asparclite} \
- %{mcpu=sparclite86x:-Asparclite} \
- %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
-+%{mcpu=v8:-Av8} \
- %{mv8plus:-Av8plus} \
- %{mcpu=v9:-Av9} \
- %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
-Index: gcc/config/i386/i386.md
-===================================================================
---- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_6-branch)
-@@ -1960,7 +1960,7 @@
-
- (define_insn "*movdi_internal_rex64"
- [(set (match_operand:DI 0 "nonimmediate_operand"
-- "=r,r ,r,m ,!m,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
-+ "=r,r ,r,m ,!o,*y,*y,?r ,m ,?*Ym,?*y,*x,*x,?r ,m,?*Yi,*x,?*x,?*Ym")
- (match_operand:DI 1 "general_operand"
- "Z ,rem,i,re,n ,C ,*y,*Ym,*y,r ,m ,C ,*x,*Yi,*x,r ,m ,*Ym,*x"))]
- "TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
-@@ -2905,7 +2905,7 @@
-
- (define_insn "*movdf_internal_rex64"
- [(set (match_operand:DF 0 "nonimmediate_operand"
-- "=f,m,f,r ,m,!r,!m,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
-+ "=f,m,f,r ,m,!r,!o,Y2*x,Y2*x,Y2*x,m ,Yi,r ")
- (match_operand:DF 1 "general_operand"
- "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]))
-@@ -5103,7 +5103,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(set (match_dup 0) (float:MODEF (match_dup 1)))])
-
- (define_split
-@@ -5116,7 +5116,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(set (match_dup 2) (match_dup 1))
- (set (match_dup 0) (float:MODEF (match_dup 2)))])
-
-@@ -5207,7 +5207,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(const_int 0)]
- {
- rtx op1 = operands[1];
-@@ -5248,7 +5248,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(const_int 0)]
- {
- operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
-@@ -5270,7 +5270,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(const_int 0)]
- {
- rtx op1 = operands[1];
-@@ -5314,7 +5314,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(const_int 0)]
- {
- operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
-@@ -5375,7 +5375,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(set (match_dup 0) (float:MODEF (match_dup 1)))])
-
- (define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_sse_nointerunit"
-@@ -5410,7 +5410,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(set (match_dup 2) (match_dup 1))
- (set (match_dup 0) (float:MODEF (match_dup 2)))])
-
-@@ -5423,7 +5423,7 @@
- && reload_completed
- && (SSE_REG_P (operands[0])
- || (GET_CODE (operands[0]) == SUBREG
-- && SSE_REG_P (operands[0])))"
-+ && SSE_REG_P (SUBREG_REG (operands[0]))))"
- [(set (match_dup 0) (float:MODEF (match_dup 1)))])
-
- (define_insn "*float<SSEMODEI24:mode><X87MODEF:mode>2_i387_with_temp"
-@@ -14625,7 +14625,7 @@
- emit_insn (gen_sse4_1_round<mode>2
- (operands[0], operands[1], GEN_INT (0x04)));
- else
-- ix86_expand_rint (operand0, operand1);
-+ ix86_expand_rint (operands[0], operands[1]);
- }
- else
- {
-@@ -14649,9 +14649,9 @@
- if (optimize_insn_for_size_p ())
- FAIL;
- if (TARGET_64BIT || (<MODE>mode != DFmode))
-- ix86_expand_round (operand0, operand1);
-+ ix86_expand_round (operands[0], operands[1]);
- else
-- ix86_expand_rounddf_32 (operand0, operand1);
-+ ix86_expand_rounddf_32 (operands[0], operands[1]);
- DONE;
- })
-
-@@ -14796,7 +14796,7 @@
- {
- if (optimize_insn_for_size_p ())
- FAIL;
-- ix86_expand_lround (operand0, operand1);
-+ ix86_expand_lround (operands[0], operands[1]);
- DONE;
- })
-
-@@ -14871,9 +14871,9 @@
- emit_insn (gen_sse4_1_round<mode>2
- (operands[0], operands[1], GEN_INT (0x01)));
- else if (TARGET_64BIT || (<MODE>mode != DFmode))
-- ix86_expand_floorceil (operand0, operand1, true);
-+ ix86_expand_floorceil (operands[0], operands[1], true);
- else
-- ix86_expand_floorceildf_32 (operand0, operand1, true);
-+ ix86_expand_floorceildf_32 (operands[0], operands[1], true);
- }
- else
- {
-@@ -15053,7 +15053,7 @@
- {
- if (TARGET_64BIT && optimize_insn_for_size_p ())
- FAIL;
-- ix86_expand_lfloorceil (operand0, operand1, true);
-+ ix86_expand_lfloorceil (operands[0], operands[1], true);
- DONE;
- })
-
-@@ -15128,9 +15128,9 @@
- else if (optimize_insn_for_size_p ())
- FAIL;
- else if (TARGET_64BIT || (<MODE>mode != DFmode))
-- ix86_expand_floorceil (operand0, operand1, false);
-+ ix86_expand_floorceil (operands[0], operands[1], false);
- else
-- ix86_expand_floorceildf_32 (operand0, operand1, false);
-+ ix86_expand_floorceildf_32 (operands[0], operands[1], false);
- }
- else
- {
-@@ -15308,7 +15308,7 @@
- "SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH
- && !flag_trapping_math"
- {
-- ix86_expand_lfloorceil (operand0, operand1, false);
-+ ix86_expand_lfloorceil (operands[0], operands[1], false);
- DONE;
- })
-
-@@ -15383,9 +15383,9 @@
- else if (optimize_insn_for_size_p ())
- FAIL;
- else if (TARGET_64BIT || (<MODE>mode != DFmode))
-- ix86_expand_trunc (operand0, operand1);
-+ ix86_expand_trunc (operands[0], operands[1]);
- else
-- ix86_expand_truncdf_32 (operand0, operand1);
-+ ix86_expand_truncdf_32 (operands[0], operands[1]);
- }
- else
- {
-@@ -18285,8 +18285,8 @@
- (match_operand:SI 3 "const_int_operand" "i")]
- UNSPECV_LWPVAL_INTRINSIC)]
- "TARGET_LWP"
-- "/* Avoid unused variable warning. */
-- (void) operand0;")
-+ ;; Avoid unused variable warning.
-+ "(void) operands[0];")
-
- (define_insn "*lwp_lwpval<mode>3_1"
- [(unspec_volatile [(match_operand:SWI48 0 "register_operand" "r")
-Index: gcc/config/i386/sse.md
-===================================================================
---- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_6-branch)
-@@ -4521,15 +4521,14 @@
- [(set (match_operand:V4DF 0 "register_operand" "=x,x")
- (vec_select:V4DF
- (vec_concat:V8DF
-- (match_operand:V4DF 1 "nonimmediate_operand" "xm,x")
-- (match_operand:V4DF 2 "nonimmediate_operand" " 1,xm"))
-+ (match_operand:V4DF 1 "nonimmediate_operand" " x,m")
-+ (match_operand:V4DF 2 "nonimmediate_operand" "xm,1"))
- (parallel [(const_int 0) (const_int 4)
- (const_int 2) (const_int 6)])))]
-- "TARGET_AVX
-- && (!MEM_P (operands[1]) || rtx_equal_p (operands[1], operands[2]))"
-+ "TARGET_AVX"
- "@
-- vmovddup\t{%1, %0|%0, %1}
-- vunpcklpd\t{%2, %1, %0|%0, %1, %2}"
-+ vunpcklpd\t{%2, %1, %0|%0, %1, %2}
-+ vmovddup\t{%1, %0|%0, %1}"
- [(set_attr "type" "sselog")
- (set_attr "prefix" "vex")
- (set_attr "mode" "V4DF")])
-Index: gcc/config/i386/avxintrin.h
-===================================================================
---- a/src/gcc/config/i386/avxintrin.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/i386/avxintrin.h (.../branches/gcc-4_6-branch)
-@@ -759,7 +759,7 @@
-
- #ifdef __x86_64__
- extern __inline __m256i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
--_mm256_insert_epi64 (__m256i __X, int __D, int const __N)
-+_mm256_insert_epi64 (__m256i __X, long long __D, int const __N)
- {
- __m128i __Y = _mm256_extractf128_si256 (__X, __N >> 1);
- __Y = _mm_insert_epi64 (__Y, __D, __N % 2);
-Index: gcc/config/i386/i386.c
-===================================================================
---- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_6-branch)
-@@ -16329,7 +16329,6 @@
- basic_block bb = BLOCK_FOR_INSN (insn);
- int distance = 0;
- df_ref *def_rec;
-- enum attr_type insn_type;
-
- if (insn != BB_HEAD (bb))
- {
-@@ -16345,8 +16344,8 @@
- && (regno1 == DF_REF_REGNO (*def_rec)
- || regno2 == DF_REF_REGNO (*def_rec)))
- {
-- insn_type = get_attr_type (prev);
-- if (insn_type != TYPE_LEA)
-+ if (recog_memoized (prev) < 0
-+ || get_attr_type (prev) != TYPE_LEA)
- goto done;
- }
- }
-@@ -16385,8 +16384,8 @@
- && (regno1 == DF_REF_REGNO (*def_rec)
- || regno2 == DF_REF_REGNO (*def_rec)))
- {
-- insn_type = get_attr_type (prev);
-- if (insn_type != TYPE_LEA)
-+ if (recog_memoized (prev) < 0
-+ || get_attr_type (prev) != TYPE_LEA)
- goto done;
- }
- }
-Index: gcc/config/avr/libgcc.S
-===================================================================
---- a/src/gcc/config/avr/libgcc.S (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/avr/libgcc.S (.../branches/gcc-4_6-branch)
-@@ -582,7 +582,16 @@
- push r17
- push r28
- push r29
-+#if defined (__AVR_HAVE_8BIT_SP__)
-+;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
-+;; so this lines are dead code. To make it work, devices without
-+;; SP_H must get their own multilib(s), see PR51345.
- in r28,__SP_L__
-+ sub r28,r26
-+ clr r29
-+ out __SP_L__,r28
-+#else
-+ in r28,__SP_L__
- in r29,__SP_H__
- sub r28,r26
- sbc r29,r27
-@@ -591,6 +600,7 @@
- out __SP_H__,r29
- out __SREG__,__tmp_reg__
- out __SP_L__,r28
-+#endif
- #if defined (__AVR_HAVE_EIJMP_EICALL__)
- eijmp
- #else
-@@ -625,6 +635,15 @@
- ldd r16,Y+4
- ldd r17,Y+3
- ldd r26,Y+2
-+#if defined (__AVR_HAVE_8BIT_SP__)
-+;; FIXME: __AVR_HAVE_8BIT_SP__ is set on device level, not on core level
-+;; so this lines are dead code. To make it work, devices without
-+;; SP_H must get their own multilib(s).
-+ ldd r29,Y+1
-+ add r28,r30
-+ out __SP_L__,r28
-+ mov r28, r26
-+#else
- ldd r27,Y+1
- add r28,r30
- adc r29,__zero_reg__
-@@ -635,6 +654,7 @@
- out __SP_L__,r28
- mov_l r28, r26
- mov_h r29, r27
-+#endif
- ret
- .endfunc
- #endif /* defined (L_epilogue) */
-Index: gcc/config/avr/avr.md
-===================================================================
---- a/src/gcc/config/avr/avr.md (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/avr/avr.md (.../branches/gcc-4_6-branch)
-@@ -299,7 +299,7 @@
- [(set (match_operand:HI 0 "stack_register_operand" "=q")
- (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
- UNSPECV_WRITE_SP_IRQ_OFF))]
-- ""
-+ "!AVR_HAVE_8BIT_SP"
- "out __SP_H__, %B1
- out __SP_L__, %A1"
- [(set_attr "length" "2")
-@@ -309,7 +309,7 @@
- [(set (match_operand:HI 0 "stack_register_operand" "=q")
- (unspec_volatile:HI [(match_operand:HI 1 "register_operand" "r")]
- UNSPECV_WRITE_SP_IRQ_ON))]
-- ""
-+ "!AVR_HAVE_8BIT_SP"
- "cli
- out __SP_H__, %B1
- sei
-Index: gcc/config/avr/avr-devices.c
-===================================================================
---- a/src/gcc/config/avr/avr-devices.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/avr/avr-devices.c (.../branches/gcc-4_6-branch)
-@@ -70,7 +70,7 @@
- { "attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0x0060, "tn2313a" },
- { "attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0x0060, "tn24" },
- { "attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0x0060, "tn24a" },
-- { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 1, 0x0060, "tn4313" },
-+ { "attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0x0060, "tn4313" },
- { "attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0x0060, "tn44" },
- { "attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0x0060, "tn44a" },
- { "attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0x0060, "tn84" },
-@@ -88,7 +88,7 @@
- { "attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0x0100, "tn87" },
- { "attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0x0100, "tn48" },
- { "attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0x0100, "tn88" },
-- { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 1, 0x0060, "86401" },
-+ { "at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0x0060, "86401" },
- /* Classic, > 8K, <= 64K. */
- { "avr3", ARCH_AVR3, NULL, 0, 0x0060, "43355" },
- { "at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0x0060, "43355" },
-Index: gcc/config/avr/avr.c
-===================================================================
---- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/avr/avr.c (.../branches/gcc-4_6-branch)
-@@ -1879,9 +1879,12 @@
- }
- else if (test_hard_reg_class (STACK_REG, src))
- {
-- *l = 2;
-- return (AS2 (in,%A0,__SP_L__) CR_TAB
-- AS2 (in,%B0,__SP_H__));
-+ *l = 2;
-+ return AVR_HAVE_8BIT_SP
-+ ? (AS2 (in,%A0,__SP_L__) CR_TAB
-+ AS1 (clr,%B0))
-+ : (AS2 (in,%A0,__SP_L__) CR_TAB
-+ AS2 (in,%B0,__SP_H__));
- }
-
- if (AVR_HAVE_MOVW)
-@@ -5173,10 +5176,10 @@
-
- default_file_start ();
-
--/* fprintf (asm_out_file, "\t.arch %s\n", avr_mcu_name);*/
-- fputs ("__SREG__ = 0x3f\n"
-- "__SP_H__ = 0x3e\n"
-- "__SP_L__ = 0x3d\n", asm_out_file);
-+ fputs ("__SREG__ = 0x3f\n", asm_out_file);
-+ if (!AVR_HAVE_8BIT_SP)
-+ fputs ("__SP_H__ = 0x3e\n", asm_out_file);
-+ fputs ("__SP_L__ = 0x3d\n", asm_out_file);
-
- fputs ("__tmp_reg__ = 0\n"
- "__zero_reg__ = 1\n", asm_out_file);
-Index: gcc/config/rs6000/rs6000.c
-===================================================================
---- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_6-branch)
-@@ -2612,6 +2612,7 @@
- off. */
- rs6000_altivec_abi = 1;
- TARGET_ALTIVEC_VRSAVE = 1;
-+ rs6000_current_abi = ABI_DARWIN;
-
- if (DEFAULT_ABI == ABI_DARWIN
- && TARGET_64BIT)
-@@ -6824,6 +6825,7 @@
- #if TARGET_MACHO
- && DEFAULT_ABI == ABI_DARWIN
- && (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
-+ && machopic_symbol_defined_p (x)
- #else
- && DEFAULT_ABI == ABI_V4
- && !flag_pic
-@@ -20227,7 +20229,7 @@
- {
- /* This blockage is needed so that sched doesn't decide to move
- the sp change before the register restores. */
-- if (frame_reg_rtx != sp_reg_rtx
-+ if (DEFAULT_ABI == ABI_V4
- || (TARGET_SPE_ABI
- && info->spe_64bit_regs_used != 0
- && info->first_gp_reg_save != 32))
-@@ -20644,56 +20646,52 @@
- {
- int i;
- rtx spe_save_area_ptr;
--
-+ int save_ptr_to_sp;
-+ int ool_adjust = 0;
-+
- /* Determine whether we can address all of the registers that need
-- to be saved with an offset from the stack pointer that fits in
-+ to be saved with an offset from frame_reg_rtx that fits in
- the small const field for SPE memory instructions. */
-- int spe_regs_addressable_via_sp
-- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
-- + (32 - info->first_gp_reg_save - 1) * reg_size)
-+ int spe_regs_addressable
-+ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
-+ + reg_size * (32 - info->first_gp_reg_save - 1))
- && saving_GPRs_inline);
- int spe_offset;
--
-- if (spe_regs_addressable_via_sp)
-+
-+ if (spe_regs_addressable)
- {
- spe_save_area_ptr = frame_reg_rtx;
-+ save_ptr_to_sp = info->total_size - sp_offset;
- spe_offset = info->spe_gp_save_offset + sp_offset;
- }
- else
- {
- /* Make r11 point to the start of the SPE save area. We need
- to be careful here if r11 is holding the static chain. If
-- it is, then temporarily save it in r0. We would use r0 as
-- our base register here, but using r0 as a base register in
-- loads and stores means something different from what we
-- would like. */
-- int ool_adjust = (saving_GPRs_inline
-- ? 0
-- : (info->first_gp_reg_save
-- - (FIRST_SAVRES_REGISTER+1))*8);
-- HOST_WIDE_INT offset = (info->spe_gp_save_offset
-- + sp_offset - ool_adjust);
-+ it is, then temporarily save it in r0. */
-+ int offset;
-
-+ if (!saving_GPRs_inline)
-+ ool_adjust = 8 * (info->first_gp_reg_save
-+ - (FIRST_SAVRES_REGISTER + 1));
-+ offset = info->spe_gp_save_offset + sp_offset - ool_adjust;
-+ spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
-+ save_ptr_to_sp = info->total_size - sp_offset + offset;
-+ spe_offset = 0;
-+
- if (using_static_chain_p)
- {
- rtx r0 = gen_rtx_REG (Pmode, 0);
- gcc_assert (info->first_gp_reg_save > 11);
--
-- emit_move_insn (r0, gen_rtx_REG (Pmode, 11));
-+
-+ emit_move_insn (r0, spe_save_area_ptr);
- }
--
-- spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
-- insn = emit_insn (gen_addsi3 (spe_save_area_ptr,
-- frame_reg_rtx,
-- GEN_INT (offset)));
-- /* We need to make sure the move to r11 gets noted for
-- properly outputting unwind information. */
-- if (!saving_GPRs_inline)
-- rs6000_frame_related (insn, frame_reg_rtx, offset,
-- NULL_RTX, NULL_RTX);
-- spe_offset = 0;
-+ emit_insn (gen_addsi3 (spe_save_area_ptr,
-+ frame_reg_rtx, GEN_INT (offset)));
-+ if (REGNO (frame_reg_rtx) == 11)
-+ sp_offset = -info->spe_gp_save_offset + ool_adjust;
- }
--
-+
- if (saving_GPRs_inline)
- {
- for (i = 0; i < 32 - info->first_gp_reg_save; i++)
-@@ -20705,36 +20703,34 @@
- /* We're doing all this to ensure that the offset fits into
- the immediate offset of 'evstdd'. */
- gcc_assert (SPE_CONST_OFFSET_OK (reg_size * i + spe_offset));
--
-+
- offset = GEN_INT (reg_size * i + spe_offset);
- addr = gen_rtx_PLUS (Pmode, spe_save_area_ptr, offset);
- mem = gen_rtx_MEM (V2SImode, addr);
--
-+
- insn = emit_move_insn (mem, reg);
--
-- rs6000_frame_related (insn, spe_save_area_ptr,
-- info->spe_gp_save_offset
-- + sp_offset + reg_size * i,
-- offset, const0_rtx);
-+
-+ rs6000_frame_related (insn,
-+ spe_save_area_ptr, save_ptr_to_sp,
-+ NULL_RTX, NULL_RTX);
- }
- }
- else
- {
- rtx par;
-
-- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
-- 0, reg_mode,
-+ par = rs6000_make_savres_rtx (info, spe_save_area_ptr,
-+ ool_adjust, reg_mode,
- /*savep=*/true, /*gpr=*/true,
- /*lr=*/false);
- insn = emit_insn (par);
-- rs6000_frame_related (insn, frame_ptr_rtx, info->total_size,
-+ rs6000_frame_related (insn, spe_save_area_ptr, save_ptr_to_sp,
- NULL_RTX, NULL_RTX);
- }
--
--
-+
- /* Move the static chain pointer back. */
-- if (using_static_chain_p && !spe_regs_addressable_via_sp)
-- emit_move_insn (gen_rtx_REG (Pmode, 11), gen_rtx_REG (Pmode, 0));
-+ if (using_static_chain_p && !spe_regs_addressable)
-+ emit_move_insn (spe_save_area_ptr, gen_rtx_REG (Pmode, 0));
- }
- else if (!WORLD_SAVE_P (info) && !saving_GPRs_inline)
- {
-@@ -20743,10 +20739,12 @@
- /* Need to adjust r11 (r12) if we saved any FPRs. */
- if (info->first_fp_reg_save != 64)
- {
-- rtx dest_reg = gen_rtx_REG (reg_mode, DEFAULT_ABI == ABI_AIX
-- ? 12 : 11);
-- rtx offset = GEN_INT (sp_offset
-- + (-8 * (64-info->first_fp_reg_save)));
-+ rtx dest_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
-+ int save_off = 8 * (64 - info->first_fp_reg_save);
-+ rtx offset = GEN_INT (sp_offset - save_off);
-+
-+ if (REGNO (dest_reg) == REGNO (frame_reg_rtx))
-+ sp_offset = save_off;
- emit_insn (gen_add3_insn (dest_reg, frame_reg_rtx, offset));
- }
-
-@@ -21622,40 +21620,39 @@
- && info->first_gp_reg_save != 32)
- {
- /* Determine whether we can address all of the registers that need
-- to be saved with an offset from the stack pointer that fits in
-- the small const field for SPE memory instructions. */
-- int spe_regs_addressable_via_sp
-- = (SPE_CONST_OFFSET_OK(info->spe_gp_save_offset + sp_offset
-- + (32 - info->first_gp_reg_save - 1) * reg_size)
-+ to be saved with an offset from frame_reg_rtx that fits in
-+ the small const field for SPE memory instructions. */
-+ int spe_regs_addressable
-+ = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + sp_offset
-+ + reg_size * (32 - info->first_gp_reg_save - 1))
- && restoring_GPRs_inline);
- int spe_offset;
-+ int ool_adjust = 0;
-
-- if (spe_regs_addressable_via_sp)
-+ if (spe_regs_addressable)
- spe_offset = info->spe_gp_save_offset + sp_offset;
- else
-- {
-+ {
- rtx old_frame_reg_rtx = frame_reg_rtx;
-- /* Make r11 point to the start of the SPE save area. We worried about
-- not clobbering it when we were saving registers in the prologue.
-- There's no need to worry here because the static chain is passed
-- anew to every function. */
-- int ool_adjust = (restoring_GPRs_inline
-- ? 0
-- : (info->first_gp_reg_save
-- - (FIRST_SAVRES_REGISTER+1))*8);
-+ /* Make r11 point to the start of the SPE save area. We worried about
-+ not clobbering it when we were saving registers in the prologue.
-+ There's no need to worry here because the static chain is passed
-+ anew to every function. */
-
-- if (frame_reg_rtx == sp_reg_rtx)
-- frame_reg_rtx = gen_rtx_REG (Pmode, 11);
-- emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
-+ if (!restoring_GPRs_inline)
-+ ool_adjust = 8 * (info->first_gp_reg_save
-+ - (FIRST_SAVRES_REGISTER + 1));
-+ frame_reg_rtx = gen_rtx_REG (Pmode, 11);
-+ emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
- GEN_INT (info->spe_gp_save_offset
- + sp_offset
- - ool_adjust)));
- /* Keep the invariant that frame_reg_rtx + sp_offset points
- at the top of the stack frame. */
-- sp_offset = -info->spe_gp_save_offset;
-+ sp_offset = -info->spe_gp_save_offset + ool_adjust;
-
-- spe_offset = 0;
-- }
-+ spe_offset = 0;
-+ }
-
- if (restoring_GPRs_inline)
- {
-@@ -21695,8 +21692,8 @@
- {
- rtx par;
-
-- par = rs6000_make_savres_rtx (info, gen_rtx_REG (Pmode, 11),
-- 0, reg_mode,
-+ par = rs6000_make_savres_rtx (info, frame_reg_rtx,
-+ ool_adjust, reg_mode,
- /*savep=*/false, /*gpr=*/true,
- /*lr=*/true);
- emit_jump_insn (par);
-@@ -21717,12 +21714,12 @@
- sp_offset, can_use_exit);
- else
- {
-- emit_insn (gen_add3_insn (gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX
-- ? 12 : 11),
-- frame_reg_rtx,
-+ rtx src_reg = gen_rtx_REG (Pmode, DEFAULT_ABI == ABI_AIX ? 12 : 11);
-+
-+ emit_insn (gen_add3_insn (src_reg, frame_reg_rtx,
- GEN_INT (sp_offset - info->fp_size)));
-- if (REGNO (frame_reg_rtx) == 11)
-- sp_offset += info->fp_size;
-+ if (REGNO (frame_reg_rtx) == REGNO (src_reg))
-+ sp_offset = info->fp_size;
- }
-
- par = rs6000_make_savres_rtx (info, frame_reg_rtx,
-Index: gcc/config/darwin.c
-===================================================================
---- a/src/gcc/config/darwin.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/darwin.c (.../branches/gcc-4_6-branch)
-@@ -1753,19 +1753,51 @@
- return (!strncmp ((const char *)p, "_OBJC_", 6));
- }
-
--/* LTO support for Mach-O. */
-+/* LTO support for Mach-O.
-
--/* Section names for LTO sections. */
--static unsigned int lto_section_names_offset = 0;
-+ This version uses three mach-o sections to encapsulate the (unlimited
-+ number of) lto sections.
-
--/* This is the obstack which we use to allocate the many strings. */
--static struct obstack lto_section_names_obstack;
-+ __GNU_LTO, __lto_sections contains the concatented GNU LTO section data.
-+ __GNU_LTO, __section_names contains the GNU LTO section names.
-+ __GNU_LTO, __section_index contains an array of values that index these.
-
--/* Segment name for LTO sections. */
-+ Indexed thus:
-+ <section offset from the start of __GNU_LTO, __lto_sections>,
-+ <section length>
-+ <name offset from the start of __GNU_LTO, __section_names,
-+ <name length>.
-+
-+ At present, for both m32 and m64 mach-o files each of these fields is
-+ represented by a uint32_t. This is because, AFAICT, a mach-o object
-+ cannot exceed 4Gb because the section_64 offset field (see below) is 32bits.
-+
-+ uint32_t offset;
-+ "offset An integer specifying the offset to this section in the file." */
-+
-+/* Count lto section numbers. */
-+static unsigned int lto_section_num = 0;
-+
-+/* A vector of information about LTO sections, at present, we only have
-+ the name. TODO: see if we can get the data length somehow. */
-+typedef struct GTY (()) darwin_lto_section_e {
-+ const char *sectname;
-+} darwin_lto_section_e ;
-+DEF_VEC_O(darwin_lto_section_e);
-+DEF_VEC_ALLOC_O(darwin_lto_section_e, gc);
-+
-+static GTY (()) VEC (darwin_lto_section_e, gc) * lto_section_names;
-+
-+/* Segment for LTO data. */
- #define LTO_SEGMENT_NAME "__GNU_LTO"
-
--/* Section name for LTO section names section. */
--#define LTO_NAMES_SECTION "__section_names"
-+/* Section wrapper scheme (used here to wrap the unlimited number of LTO
-+ sections into three Mach-O ones).
-+ NOTE: These names MUST be kept in sync with those in
-+ libiberty/simple-object-mach-o. */
-+#define LTO_SECTS_SECTION "__wrapper_sects"
-+#define LTO_NAMES_SECTION "__wrapper_names"
-+#define LTO_INDEX_SECTION "__wrapper_index"
-
- /* File to temporarily store LTO data. This is appended to asm_out_file
- in darwin_end_file. */
-@@ -1808,37 +1840,38 @@
- unsigned int flags,
- tree decl ATTRIBUTE_UNUSED)
- {
-- /* LTO sections go in a special segment __GNU_LTO. We want to replace the
-- section name with something we can use to represent arbitrary-length
-- names (section names in Mach-O are at most 16 characters long). */
-+ /* LTO sections go in a special section that encapsulates the (unlimited)
-+ number of GNU LTO sections within a single mach-o one. */
- if (strncmp (name, LTO_SECTION_NAME_PREFIX,
- strlen (LTO_SECTION_NAME_PREFIX)) == 0)
- {
-+ darwin_lto_section_e e;
- /* We expect certain flags to be set... */
- gcc_assert ((flags & (SECTION_DEBUG | SECTION_NAMED))
- == (SECTION_DEBUG | SECTION_NAMED));
-
-- /* Add the section name to the things to output when we end the
-- current assembler output file.
-- This is all not very efficient, but that doesn't matter -- this
-- shouldn't be a hot path in the compiler... */
-- obstack_1grow (&lto_section_names_obstack, '\t');
-- obstack_grow (&lto_section_names_obstack, ".ascii ", 7);
-- obstack_1grow (&lto_section_names_obstack, '"');
-- obstack_grow (&lto_section_names_obstack, name, strlen (name));
-- obstack_grow (&lto_section_names_obstack, "\\0\"\n", 4);
--
-- /* Output the dummy section name. */
-- fprintf (asm_out_file, "\t# %s\n", name);
-- fprintf (asm_out_file, "\t.section %s,__%08X,regular,debug\n",
-- LTO_SEGMENT_NAME, lto_section_names_offset);
--
-- /* Update the offset for the next section name. Make sure we stay
-- within reasonable length. */
-- lto_section_names_offset += strlen (name) + 1;
-- gcc_assert (lto_section_names_offset > 0
-- && lto_section_names_offset < ((unsigned) 1 << 31));
-- }
-+ /* Switch to our combined section. */
-+ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
-+ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
-+ /* Output a label for the start of this sub-section. */
-+ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# %s\n",
-+ lto_section_num, name);
-+ /* We have to jump through hoops to get the values of the intra-section
-+ offsets... */
-+ fprintf (asm_out_file, "\t.set L$gnu$lto$offs%d,L_GNU_LTO%d-L_GNU_LTO0\n",
-+ lto_section_num, lto_section_num);
-+ fprintf (asm_out_file,
-+ "\t.set L$gnu$lto$size%d,L_GNU_LTO%d-L_GNU_LTO%d\n",
-+ lto_section_num, lto_section_num+1, lto_section_num);
-+ lto_section_num++;
-+ e.sectname = xstrdup (name);
-+ /* Keep the names, we'll need to make a table later.
-+ TODO: check that we do not revisit sections, that would break
-+ the assumption of how this is done. */
-+ if (lto_section_names == NULL)
-+ lto_section_names = VEC_alloc (darwin_lto_section_e, gc, 16);
-+ VEC_safe_push (darwin_lto_section_e, gc, lto_section_names, &e);
-+ }
- else if (strncmp (name, "__DWARF,", 8) == 0)
- darwin_asm_dwarf_section (name, flags, decl);
- else
-@@ -2711,16 +2744,12 @@
- darwin_asm_output_dwarf_delta (file, size, lab, sname);
- }
-
--/* Called from the within the TARGET_ASM_FILE_START for each target.
-- Initialize the stuff we need for LTO long section names support. */
-+/* Called from the within the TARGET_ASM_FILE_START for each target. */
-
- void
- darwin_file_start (void)
- {
-- /* We fill this obstack with the complete section text for the lto section
-- names to write in darwin_file_end. */
-- obstack_init (&lto_section_names_obstack);
-- lto_section_names_offset = 0;
-+ /* Nothing to do. */
- }
-
- /* Called for the TARGET_ASM_FILE_END hook.
-@@ -2731,8 +2760,6 @@
- void
- darwin_file_end (void)
- {
-- const char *lto_section_names;
--
- machopic_finish (asm_out_file);
- if (strcmp (lang_hooks.name, "GNU C++") == 0)
- {
-@@ -2762,6 +2789,13 @@
- lto_asm_txt = buf = (char *) xmalloc (n + 1);
- while (fgets (lto_asm_txt, n, lto_asm_out_file))
- fputs (lto_asm_txt, asm_out_file);
-+ /* Put a termination label. */
-+ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
-+ LTO_SEGMENT_NAME, LTO_SECTS_SECTION);
-+ fprintf (asm_out_file, "L_GNU_LTO%d:\t;# end of lto\n",
-+ lto_section_num);
-+ /* Make sure our termination label stays in this section. */
-+ fputs ("\t.space\t1\n", asm_out_file);
- }
-
- /* Remove the temporary file. */
-@@ -2770,21 +2804,50 @@
- free (lto_asm_out_name);
- }
-
-- /* Finish the LTO section names obstack. Don't output anything if
-- there are no recorded section names. */
-- obstack_1grow (&lto_section_names_obstack, '\0');
-- lto_section_names = XOBFINISH (&lto_section_names_obstack, const char *);
-- if (strlen (lto_section_names) > 0)
-+ /* Output the names and indices. */
-+ if (lto_section_names && VEC_length (darwin_lto_section_e, lto_section_names))
- {
-- fprintf (asm_out_file,
-- "\t.section %s,%s,regular,debug\n",
-+ int count;
-+ darwin_lto_section_e *ref;
-+ /* For now, we'll make the offsets 4 bytes and unaligned - we'll fix
-+ the latter up ourselves. */
-+ const char *op = integer_asm_op (4,0);
-+
-+ /* Emit the names. */
-+ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
- LTO_SEGMENT_NAME, LTO_NAMES_SECTION);
-- fprintf (asm_out_file,
-- "\t# Section names in %s are offsets into this table\n",
-- LTO_SEGMENT_NAME);
-- fprintf (asm_out_file, "%s\n", lto_section_names);
-+ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
-+ {
-+ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\n", count);
-+ /* We have to jump through hoops to get the values of the intra-section
-+ offsets... */
-+ fprintf (asm_out_file,
-+ "\t.set L$gnu$lto$noff%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME0\n",
-+ count, count);
-+ fprintf (asm_out_file,
-+ "\t.set L$gnu$lto$nsiz%d,L_GNU_LTO_NAME%d-L_GNU_LTO_NAME%d\n",
-+ count, count+1, count);
-+ fprintf (asm_out_file, "\t.asciz\t\"%s\"\n", ref->sectname);
-+ }
-+ fprintf (asm_out_file, "L_GNU_LTO_NAME%d:\t;# end\n", lto_section_num);
-+ /* make sure our termination label stays in this section. */
-+ fputs ("\t.space\t1\n", asm_out_file);
-+
-+ /* Emit the Index. */
-+ fprintf (asm_out_file, "\t.section %s,%s,regular,debug\n",
-+ LTO_SEGMENT_NAME, LTO_INDEX_SECTION);
-+ fputs ("\t.align\t2\n", asm_out_file);
-+ fputs ("# Section offset, Section length, Name offset, Name length\n",
-+ asm_out_file);
-+ FOR_EACH_VEC_ELT (darwin_lto_section_e, lto_section_names, count, ref)
-+ {
-+ fprintf (asm_out_file, "%s L$gnu$lto$offs%d\t;# %s\n",
-+ op, count, ref->sectname);
-+ fprintf (asm_out_file, "%s L$gnu$lto$size%d\n", op, count);
-+ fprintf (asm_out_file, "%s L$gnu$lto$noff%d\n", op, count);
-+ fprintf (asm_out_file, "%s L$gnu$lto$nsiz%d\n", op, count);
-+ }
- }
-- obstack_free (&lto_section_names_obstack, NULL);
-
- /* If we have section anchors, then we must prevent the linker from
- re-arranging data. */
-Index: gcc/config/arm/arm.c
-===================================================================
---- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_6-branch)
-@@ -9812,6 +9812,9 @@
- rtx base_reg_rtx = NULL;
- int i, stm_case;
-
-+ /* Write back of base register is currently only supported for Thumb 1. */
-+ int base_writeback = TARGET_THUMB1;
-+
- /* Can only handle up to MAX_LDM_STM_OPS insns at present, though could be
- easily extended if required. */
- gcc_assert (nops >= 2 && nops <= MAX_LDM_STM_OPS);
-@@ -9869,7 +9872,9 @@
- /* If it isn't an integer register, then we can't do this. */
- if (unsorted_regs[i] < 0
- || (TARGET_THUMB1 && unsorted_regs[i] > LAST_LO_REGNUM)
-- || (TARGET_THUMB2 && unsorted_regs[i] == base_reg)
-+ /* The effects are unpredictable if the base register is
-+ both updated and stored. */
-+ || (base_writeback && unsorted_regs[i] == base_reg)
- || (TARGET_THUMB2 && unsorted_regs[i] == SP_REGNUM)
- || unsorted_regs[i] > 14)
- return 0;
-@@ -19571,39 +19576,34 @@
- emit_move_insn (mem, tmp2);
- }
-
--/* Set up operands for a register copy from src to dest, taking care not to
-- clobber registers in the process.
-- FIXME: This has rather high polynomial complexity (O(n^3)?) but shouldn't
-- be called with a large N, so that should be OK. */
-+/* Set up OPERANDS for a register copy from SRC to DEST, taking care
-+ not to early-clobber SRC registers in the process.
-
-+ We assume that the operands described by SRC and DEST represent a
-+ decomposed copy of OPERANDS[1] into OPERANDS[0]. COUNT is the
-+ number of components into which the copy has been decomposed. */
- void
- neon_disambiguate_copy (rtx *operands, rtx *dest, rtx *src, unsigned int count)
- {
-- unsigned int copied = 0, opctr = 0;
-- unsigned int done = (1 << count) - 1;
-- unsigned int i, j;
-+ unsigned int i;
-
-- while (copied != done)
-+ if (!reg_overlap_mentioned_p (operands[0], operands[1])
-+ || REGNO (operands[0]) < REGNO (operands[1]))
- {
- for (i = 0; i < count; i++)
-- {
-- int good = 1;
--
-- for (j = 0; good && j < count; j++)
-- if (i != j && (copied & (1 << j)) == 0
-- && reg_overlap_mentioned_p (src[j], dest[i]))
-- good = 0;
--
-- if (good)
-- {
-- operands[opctr++] = dest[i];
-- operands[opctr++] = src[i];
-- copied |= 1 << i;
-- }
-- }
-+ {
-+ operands[2 * i] = dest[i];
-+ operands[2 * i + 1] = src[i];
-+ }
- }
--
-- gcc_assert (opctr == count * 2);
-+ else
-+ {
-+ for (i = 0; i < count; i++)
-+ {
-+ operands[2 * i] = dest[count - i - 1];
-+ operands[2 * i + 1] = src[count - i - 1];
-+ }
-+ }
- }
-
- /* Expand an expression EXP that calls a built-in function,
-Index: gcc/config/arm/arm.md
-===================================================================
---- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_6-branch)
-@@ -3272,7 +3272,7 @@
- bool need_else;
-
- if (which_alternative != 0 || operands[3] != const0_rtx
-- || (code != PLUS && code != MINUS && code != IOR && code != XOR))
-+ || (code != PLUS && code != IOR && code != XOR))
- need_else = true;
- else
- need_else = false;
-Index: gcc/config/pa/pa.c
-===================================================================
---- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/pa/pa.c (.../branches/gcc-4_6-branch)
-@@ -1863,6 +1863,11 @@
- /* Handle the most common case: storing into a register. */
- else if (register_operand (operand0, mode))
- {
-+ /* Legitimize TLS symbol references. This happens for references
-+ that aren't a legitimate constant. */
-+ if (PA_SYMBOL_REF_TLS_P (operand1))
-+ operand1 = legitimize_tls_address (operand1);
-+
- if (register_operand (operand1, mode)
- || (GET_CODE (operand1) == CONST_INT
- && cint_ok_for_move (INTVAL (operand1)))
-Index: gcc/config/pa/pa.h
-===================================================================
---- a/src/gcc/config/pa/pa.h (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/config/pa/pa.h (.../branches/gcc-4_6-branch)
-@@ -848,6 +848,9 @@
- && (NEW_HP_ASSEMBLER \
- || TARGET_GAS \
- || GET_CODE (X) != LABEL_REF) \
-+ && (!PA_SYMBOL_REF_TLS_P (X) \
-+ || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC \
-+ && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC)) \
- && (!TARGET_64BIT \
- || GET_CODE (X) != CONST_DOUBLE) \
- && (!TARGET_64BIT \
-Index: gcc/reload1.c
-===================================================================
---- a/src/gcc/reload1.c (.../tags/gcc_4_6_2_release)
-+++ b/src/gcc/reload1.c (.../branches/gcc-4_6-branch)
-@@ -3899,6 +3899,10 @@
- if (XEXP (x, 0))
- set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
-
-+ for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
-+ if (XEXP (x, 0))
-+ set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
-+
- for_each_eh_label (set_initial_eh_label_offset);
- }
-
-Index: zlib/configure
-===================================================================
---- a/src/zlib/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/zlib/configure (.../branches/gcc-4_6-branch)
-@@ -8600,7 +8600,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9516,7 +9516,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9534,7 +9534,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: zlib/ChangeLog
-===================================================================
---- a/src/zlib/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/zlib/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libstdc++-v3/configure
-===================================================================
---- a/src/libstdc++-v3/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/configure (.../branches/gcc-4_6-branch)
-@@ -9698,7 +9698,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -10614,7 +10614,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -10632,7 +10632,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -12522,7 +12522,7 @@
- esac
- ;;
-
-- freebsd[12]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- ld_shlibs_CXX=no
-@@ -14297,7 +14297,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -14315,7 +14315,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libstdc++-v3/include/debug/unordered_map
-===================================================================
---- a/src/libstdc++-v3/include/debug/unordered_map (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/debug/unordered_map (.../branches/gcc-4_6-branch)
-@@ -276,6 +276,10 @@
- }
-
- iterator
-+ erase(iterator __it)
-+ { return erase(const_iterator(__it)); }
-+
-+ iterator
- erase(const_iterator __first, const_iterator __last)
- {
- __glibcxx_check_erase_range(__first, __last);
-@@ -558,6 +562,10 @@
- }
-
- iterator
-+ erase(iterator __it)
-+ { return erase(const_iterator(__it)); }
-+
-+ iterator
- erase(const_iterator __first, const_iterator __last)
- {
- __glibcxx_check_erase_range(__first, __last);
-Index: libstdc++-v3/include/debug/unordered_set
-===================================================================
---- a/src/libstdc++-v3/include/debug/unordered_set (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/debug/unordered_set (.../branches/gcc-4_6-branch)
-@@ -269,6 +269,10 @@
- }
-
- iterator
-+ erase(iterator __it)
-+ { return erase(const_iterator(__it)); }
-+
-+ iterator
- erase(const_iterator __first, const_iterator __last)
- {
- __glibcxx_check_erase_range(__first, __last);
-@@ -539,6 +543,10 @@
- }
-
- iterator
-+ erase(iterator __it)
-+ { return erase(const_iterator(__it)); }
-+
-+ iterator
- erase(const_iterator __first, const_iterator __last)
- {
- __glibcxx_check_erase_range(__first, __last);
-Index: libstdc++-v3/include/debug/map.h
-===================================================================
---- a/src/libstdc++-v3/include/debug/map.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/debug/map.h (.../branches/gcc-4_6-branch)
-@@ -273,6 +273,10 @@
- this->_M_invalidate_if(_Equal(__position.base()));
- return iterator(_Base::erase(__position.base()), this);
- }
-+
-+ iterator
-+ erase(iterator __position)
-+ { return erase(const_iterator(__position)); }
- #else
- void
- erase(iterator __position)
-Index: libstdc++-v3/include/debug/multimap.h
-===================================================================
---- a/src/libstdc++-v3/include/debug/multimap.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/debug/multimap.h (.../branches/gcc-4_6-branch)
-@@ -254,6 +254,10 @@
- this->_M_invalidate_if(_Equal(__position.base()));
- return iterator(_Base::erase(__position.base()), this);
- }
-+
-+ iterator
-+ erase(iterator __position)
-+ { return erase(const_iterator(__position)); }
- #else
- void
- erase(iterator __position)
-Index: libstdc++-v3/include/std/complex
-===================================================================
---- a/src/libstdc++-v3/include/std/complex (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/std/complex (.../branches/gcc-4_6-branch)
-@@ -1,7 +1,7 @@
- // The template and inlines for the -*- C++ -*- complex number classes.
-
- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
--// 2006, 2007, 2008, 2009, 2010
-+// 2006, 2007, 2008, 2009, 2010, 2011
- // Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
-@@ -1695,12 +1695,9 @@
- std::complex<_Tp>
- __complex_acosh(const std::complex<_Tp>& __z)
- {
-- std::complex<_Tp> __t((__z.real() - __z.imag())
-- * (__z.real() + __z.imag()) - _Tp(1.0),
-- _Tp(2.0) * __z.real() * __z.imag());
-- __t = std::sqrt(__t);
--
-- return std::log(__t + __z);
-+ // Kahan's formula.
-+ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
-+ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
- }
-
- #if _GLIBCXX_USE_C99_COMPLEX_TR1
-Index: libstdc++-v3/include/profile/map.h
-===================================================================
---- a/src/libstdc++-v3/include/profile/map.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/profile/map.h (.../branches/gcc-4_6-branch)
-@@ -326,6 +326,10 @@
- __profcxx_map_to_unordered_map_erase(this, size(), 1);
- return __i;
- }
-+
-+ iterator
-+ erase(iterator __position)
-+ { return erase(const_iterator(__position)); }
- #else
- void
- erase(iterator __position)
-Index: libstdc++-v3/include/profile/multimap.h
-===================================================================
---- a/src/libstdc++-v3/include/profile/multimap.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/profile/multimap.h (.../branches/gcc-4_6-branch)
-@@ -225,6 +225,10 @@
- iterator
- erase(const_iterator __position)
- { return iterator(_Base::erase(__position)); }
-+
-+ iterator
-+ erase(iterator __position)
-+ { return iterator(_Base::erase(__position)); }
- #else
- void
- erase(iterator __position)
-Index: libstdc++-v3/include/bits/hashtable.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/hashtable.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/bits/hashtable.h (.../branches/gcc-4_6-branch)
-@@ -440,6 +440,11 @@
- iterator
- erase(const_iterator);
-
-+ // LWG 2059.
-+ iterator
-+ erase(iterator __it)
-+ { return erase(const_iterator(__it)); }
-+
- size_type
- erase(const key_type&);
-
-Index: libstdc++-v3/include/bits/stl_map.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_map.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/bits/stl_map.h (.../branches/gcc-4_6-branch)
-@@ -612,6 +612,11 @@
- iterator
- erase(const_iterator __position)
- { return _M_t.erase(__position); }
-+
-+ // LWG 2059.
-+ iterator
-+ erase(iterator __position)
-+ { return _M_t.erase(__position); }
- #else
- /**
- * @brief Erases an element from a %map.
-Index: libstdc++-v3/include/bits/stl_multimap.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_multimap.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/bits/stl_multimap.h (.../branches/gcc-4_6-branch)
-@@ -533,6 +533,11 @@
- iterator
- erase(const_iterator __position)
- { return _M_t.erase(__position); }
-+
-+ // LWG 2059.
-+ iterator
-+ erase(iterator __position)
-+ { return _M_t.erase(__position); }
- #else
- /**
- * @brief Erases an element from a %multimap.
-Index: libstdc++-v3/include/bits/stl_tree.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-4_6-branch)
-@@ -760,6 +760,16 @@
- _M_erase_aux(__position);
- return __result._M_const_cast();
- }
-+
-+ // LWG 2059.
-+ iterator
-+ erase(iterator __position)
-+ {
-+ iterator __result = __position;
-+ ++__result;
-+ _M_erase_aux(__position);
-+ return __result;
-+ }
- #else
- void
- erase(iterator __position)
-Index: libstdc++-v3/include/tr1/complex
-===================================================================
---- a/src/libstdc++-v3/include/tr1/complex (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/tr1/complex (.../branches/gcc-4_6-branch)
-@@ -185,12 +185,9 @@
- std::complex<_Tp>
- __complex_acosh(const std::complex<_Tp>& __z)
- {
-- std::complex<_Tp> __t((__z.real() - __z.imag())
-- * (__z.real() + __z.imag()) - _Tp(1.0),
-- _Tp(2.0) * __z.real() * __z.imag());
-- __t = std::sqrt(__t);
--
-- return std::log(__t + __z);
-+ // Kahan's formula.
-+ return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
-+ + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
- }
-
- #if _GLIBCXX_USE_C99_COMPLEX_TR1
-Index: libstdc++-v3/include/tr1/poly_hermite.tcc
-===================================================================
---- a/src/libstdc++-v3/include/tr1/poly_hermite.tcc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/include/tr1/poly_hermite.tcc (.../branches/gcc-4_6-branch)
-@@ -1,6 +1,6 @@
- // Special functions -*- C++ -*-
-
--// Copyright (C) 2006, 2007, 2008, 2009, 2010
-+// Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011
- // Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library. This library is free
-@@ -84,7 +84,7 @@
- unsigned int __i;
- for (__H_nm2 = __H_0, __H_nm1 = __H_1, __i = 2; __i <= __n; ++__i)
- {
-- __H_n = 2 * (__x * __H_nm1 + (__i - 1) * __H_nm2);
-+ __H_n = 2 * (__x * __H_nm1 - (__i - 1) * __H_nm2);
- __H_nm2 = __H_nm1;
- __H_nm1 = __H_n;
- }
-Index: libstdc++-v3/ChangeLog
-===================================================================
---- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,55 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
-+2011-11-16 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR libstdc++/51142
-+ * include/debug/unordered_map (unordered_map<>::erase(iterator),
-+ unordered_multimap<>::erase(iterator)): Add, consistently with
-+ LWG 2059.
-+ * include/debug/unordered_set (unordered_set<>::erase(iterator),
-+ unordered_multiset<>::erase(iterator)): Likewise.
-+ * include/debug/map.h (map<>::erase(iterator)): Likewise.
-+ * include/debug/multimap.h (multimap<>::erase(iterator)): Likewise.
-+ * include/profile/map.h (map<>::erase(iterator)): Likewise.
-+ * include/profile/multimap.h (multimap<>::erase(iterator)): Likewise.
-+ * include/bits/hashtable.h (_Hashtable<>::erase(iterator)): Likewise.
-+ * include/bits/stl_map.h (map<>::erase(iterator)): Likewise.
-+ * include/bits/stl_multimap.h (multimap<>::erase(iterator)): Likewise.
-+ * include/bits/stl_tree.h (_Rb_tree<>::erase(iterator)): Likewise.
-+ * testsuite/23_containers/unordered_map/erase/51142.cc: New.
-+ * testsuite/23_containers/multimap/modifiers/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/set/modifiers/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/unordered_multimap/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/unordered_set/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/multiset/modifiers/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/unordered_multiset/erase/51142.cc: Likewise.
-+ * testsuite/23_containers/map/modifiers/erase/51142.cc: Likewise.
-+
-+2011-11-15 Jason Dick <dickphd@gmail.com>
-+
-+ PR libstdc++/51133
-+ * include/tr1/poly_hermite.tcc (__poly_hermite_recursion): Fix
-+ wrong sign in recursion relation.
-+
-+2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
-+ Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR libstdc++/50880
-+ * include/std/complex (__complex_acosh): Fix in a better way,
-+ use Kahan's formula.
-+ * include/tr1/complex (__complex_acosh): Likewise.
-+
-+2011-11-02 Richard B. Kreckel <kreckel@ginac.de>
-+ Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR libstdc++/50880
-+ * include/std/complex (__complex_acosh): Fix for __z.real() < 0.
-+ * include/tr1/complex (__complex_acosh): Likewise.
-+ * testsuite/26_numerics/complex/50880.cc: New.
-+ * testsuite/tr1/8_c_compatibility/complex/50880.cc: Likewise.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libstdc++-v3/testsuite/26_numerics/complex/50880.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/26_numerics/complex/50880.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,53 @@
-+// { 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 <complex>
-+#include <testsuite_hooks.h>
-+
-+template<typename T>
-+ void test01_do()
-+ {
-+ bool test __attribute__((unused)) = true;
-+
-+ const std::complex<T> ca(T(-2), T(2));
-+ const std::complex<T> cb(T(-2), T(0));
-+ const std::complex<T> cc(T(-2), T(-2));
-+
-+ std::complex<T> cra = std::acosh(ca);
-+ std::complex<T> crb = std::acosh(cb);
-+ std::complex<T> crc = std::acosh(cc);
-+
-+ VERIFY( cra.real() > T(0) );
-+ VERIFY( crb.real() > T(0) );
-+ VERIFY( crc.real() > T(0) );
-+ }
-+
-+// libstdc++/50880
-+void test01()
-+{
-+ test01_do<float>();
-+ test01_do<double>();
-+ test01_do<long double>();
-+}
-+
-+int main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,51 @@
-+// 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 <tr1/complex>
-+#include <testsuite_hooks.h>
-+
-+template<typename T>
-+ void test01_do()
-+ {
-+ bool test __attribute__((unused)) = true;
-+
-+ const std::complex<T> ca(T(-2), T(2));
-+ const std::complex<T> cb(T(-2), T(0));
-+ const std::complex<T> cc(T(-2), T(-2));
-+
-+ std::complex<T> cra = std::tr1::acosh(ca);
-+ std::complex<T> crb = std::tr1::acosh(cb);
-+ std::complex<T> crc = std::tr1::acosh(cc);
-+
-+ VERIFY( cra.real() > T(0) );
-+ VERIFY( crb.real() > T(0) );
-+ VERIFY( crc.real() > T(0) );
-+ }
-+
-+// libstdc++/50880
-+void test01()
-+{
-+ test01_do<float>();
-+ test01_do<double>();
-+ test01_do<long double>();
-+}
-+
-+int main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <unordered_map>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator==(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::unordered_map<X, int>& s, X x)
-+{
-+ std::unordered_map<X, int>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/multimap/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <map>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator<(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::multimap<X, int>& s, X x)
-+{
-+ std::multimap<X, int>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/set/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <set>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator<(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::set<X>& s, X x)
-+{
-+ std::set<X>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multimap/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <unordered_map>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator==(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::unordered_multimap<X, int>& s, X x)
-+{
-+ std::unordered_multimap<X, int>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <unordered_set>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator==(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::unordered_set<X>& s, X x)
-+{
-+ std::unordered_set<X>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/multiset/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <set>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator<(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::multiset<X>& s, X x)
-+{
-+ std::multiset<X>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_multiset/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <unordered_set>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator==(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::unordered_multiset<X>& s, X x)
-+{
-+ std::unordered_multiset<X>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/map/modifiers/erase/51142.cc (.../branches/gcc-4_6-branch)
-@@ -0,0 +1,38 @@
-+// 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/>.
-+//
-+
-+// { dg-do compile }
-+// { dg-options "-std=gnu++0x" }
-+
-+#include <map>
-+
-+struct X
-+{
-+ template<typename T>
-+ X(T&) {}
-+};
-+
-+bool operator<(const X&, const X&) { return false; }
-+
-+// LWG 2059.
-+void erasor(std::map<X, int>& s, X x)
-+{
-+ std::map<X, int>::iterator it = s.find(x);
-+ if (it != s.end())
-+ s.erase(it);
-+}
-Index: configure.ac
-===================================================================
---- a/src/configure.ac (.../tags/gcc_4_6_2_release)
-+++ b/src/configure.ac (.../branches/gcc-4_6-branch)
-@@ -2428,10 +2428,6 @@
- extra_arflags_for_target=" -X32_64"
- extra_nmflags_for_target=" -B -X32_64"
- ;;
-- *-*-darwin[[3-9]]*)
-- # ranlib before Darwin10 requires the -c flag to look at common symbols.
-- extra_ranlibflags_for_target=" -c"
-- ;;
- mips*-*-pe | sh*-*-pe | *arm-wince-pe)
- target_makefile_frag="config/mt-wince"
- ;;
-Index: libobjc/configure
-===================================================================
---- a/src/libobjc/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libobjc/configure (.../branches/gcc-4_6-branch)
-@@ -8797,7 +8797,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9713,7 +9713,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9731,7 +9731,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libobjc/ChangeLog
-===================================================================
---- a/src/libobjc/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libobjc/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libgfortran/configure
-===================================================================
---- a/src/libgfortran/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libgfortran/configure (.../branches/gcc-4_6-branch)
-@@ -10326,7 +10326,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -11242,7 +11242,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -11260,7 +11260,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -14162,7 +14162,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds_FC='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_FC=yes
- hardcode_minus_L_FC=yes
-@@ -14870,7 +14870,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -14888,7 +14888,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libgfortran/ChangeLog
-===================================================================
---- a/src/libgfortran/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libada/Makefile.in
-===================================================================
---- a/src/libada/Makefile.in (.../tags/gcc_4_6_2_release)
-+++ b/src/libada/Makefile.in (.../branches/gcc-4_6-branch)
-@@ -70,6 +70,7 @@
- version := $(shell cat $(srcdir)/../gcc/BASE-VER)
- libsubdir := $(libdir)/gcc/$(target_noncanonical)/$(version)$(MULTISUBDIR)
- ADA_RTS_DIR=$(GCC_DIR)/ada/rts$(subst /,_,$(MULTISUBDIR))
-+ADA_RTS_SUBDIR=./rts$(subst /,_,$(MULTISUBDIR))
-
- # exeext should not be used because it's the *host* exeext. We're building
- # a *target* library, aren't we?!? Likewise for CC. Still, provide bogus
-@@ -96,10 +97,10 @@
- "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)"
-
- # Rules to build gnatlib.
--.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared oscons
-+.PHONY: gnatlib gnatlib-plain gnatlib-sjlj gnatlib-zcx gnatlib-shared osconstool
- gnatlib: @default_gnatlib_target@
-
--gnatlib-plain: oscons $(GCC_DIR)/ada/Makefile
-+gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
- test -f stamp-libada || \
- $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) gnatlib \
- && touch stamp-libada
-@@ -108,7 +109,7 @@
- $(LN_S) $(ADA_RTS_DIR) adainclude
- $(LN_S) $(ADA_RTS_DIR) adalib
-
--gnatlib-sjlj gnatlib-zcx gnatlib-shared: oscons $(GCC_DIR)/ada/Makefile
-+gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
- test -f stamp-libada || \
- $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) $@ \
- && touch stamp-libada
-@@ -117,8 +118,8 @@
- $(LN_S) $(ADA_RTS_DIR) adainclude
- $(LN_S) $(ADA_RTS_DIR) adalib
-
--oscons:
-- $(MAKE) -C $(GCC_DIR) $(LIBADA_FLAGS_TO_PASS) ada/s-oscons.ads
-+osconstool:
-+ $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
-
- install-gnatlib: $(GCC_DIR)/ada/Makefile
- $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) install-gnatlib
-Index: libada/ChangeLog
-===================================================================
---- a/src/libada/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libada/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,9 @@
-+2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ Backport from mainline r181319
-+ Makefile.in: Change dependency on oscons to depend on the generator
-+ tool.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libmudflap/configure
-===================================================================
---- a/src/libmudflap/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libmudflap/configure (.../branches/gcc-4_6-branch)
-@@ -8818,7 +8818,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9731,7 +9731,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9749,7 +9749,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libmudflap/ChangeLog
-===================================================================
---- a/src/libmudflap/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libmudflap/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: boehm-gc/ChangeLog
-===================================================================
---- a/src/boehm-gc/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/boehm-gc/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: boehm-gc/configure
-===================================================================
---- a/src/boehm-gc/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/boehm-gc/configure (.../branches/gcc-4_6-branch)
-@@ -9604,7 +9604,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -10520,7 +10520,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -10538,7 +10538,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -12428,7 +12428,7 @@
- esac
- ;;
-
-- freebsd[12]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- ld_shlibs_CXX=no
-@@ -14203,7 +14203,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -14221,7 +14221,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libiberty/ChangeLog
-===================================================================
---- a/src/libiberty/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libiberty/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,17 @@
-+2011-11-13 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/48108
-+ Backport from mainline r180523
-+ * simple-object-mach-o.c (GNU_WRAPPER_SECTS, GNU_WRAPPER_INDEX,
-+ GNU_WRAPPER_NAMES): New macros.
-+ (simple_object_mach_o_segment): Handle wrapper scheme.
-+ (simple_object_mach_o_write_section_header): Allow the segment name
-+ to be supplied.
-+ (simple_object_mach_o_write_segment): Handle wrapper scheme. Ensure
-+ that the top-level segment name in the load command is empty.
-+ (simple_object_mach_o_write_to_file): Determine the number of
-+ sections during segment output, use that in writing the header.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libiberty/simple-object-mach-o.c
-===================================================================
---- a/src/libiberty/simple-object-mach-o.c (.../tags/gcc_4_6_2_release)
-+++ b/src/libiberty/simple-object-mach-o.c (.../branches/gcc-4_6-branch)
-@@ -1,5 +1,5 @@
- /* simple-object-mach-o.c -- routines to manipulate Mach-O object files.
-- Copyright 2010 Free Software Foundation, Inc.
-+ Copyright 2010, 2011 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
- This program is free software; you can redistribute it and/or modify it
-@@ -174,6 +174,15 @@
-
- #define GNU_SECTION_NAMES "__section_names"
-
-+/* A GNU-specific extension to wrap multiple sections using three
-+ mach-o sections within a given segment. The section '__wrapper_sects'
-+ is subdivided according to the index '__wrapper_index' and each sub
-+ sect is named according to the names supplied in '__wrapper_names'. */
-+
-+#define GNU_WRAPPER_SECTS "__wrapper_sects"
-+#define GNU_WRAPPER_INDEX "__wrapper_index"
-+#define GNU_WRAPPER_NAMES "__wrapper_names"
-+
- /* Private data for an simple_object_read. */
-
- struct simple_object_mach_o_read
-@@ -214,8 +223,19 @@
- unsigned int reserved;
- };
-
--/* See if we have a Mach-O file. */
-+/* See if we have a Mach-O MH_OBJECT file:
-
-+ A standard MH_OBJECT (from as) will have three load commands:
-+ 0 - LC_SEGMENT/LC_SEGMENT64
-+ 1 - LC_SYMTAB
-+ 2 - LC_DYSYMTAB
-+
-+ The LC_SEGMENT/LC_SEGMENT64 will introduce a single anonymous segment
-+ containing all the sections.
-+
-+ Files written by simple-object will have only the segment command
-+ (no symbol tables). */
-+
- static void *
- simple_object_mach_o_match (
- unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
-@@ -356,9 +376,30 @@
- }
- }
-
--/* Handle a segment in a Mach-O file. Return 1 if we should continue,
-- 0 if the caller should return. */
-+/* Handle a segment in a Mach-O Object file.
-
-+ This will callback to the function pfn for each "section found" the meaning
-+ of which depends on gnu extensions to mach-o:
-+
-+ If we find mach-o sections (with the segment name as specified) which also
-+ contain: a 'sects' wrapper, an index, and a name table, we expand this into
-+ as many sections as are specified in the index. In this case, there will
-+ be a callback for each of these.
-+
-+ We will also allow an extension that permits long names (more than 16
-+ characters) to be used with mach-o. In this case, the section name has
-+ a specific format embedding an index into a name table, and the file must
-+ contain such name table.
-+
-+ Return 1 if we should continue, 0 if the caller should return. */
-+
-+#define SOMO_SECTS_PRESENT 0x01
-+#define SOMO_INDEX_PRESENT 0x02
-+#define SOMO_NAMES_PRESENT 0x04
-+#define SOMO_LONGN_PRESENT 0x08
-+#define SOMO_WRAPPING (SOMO_SECTS_PRESENT | SOMO_INDEX_PRESENT \
-+ | SOMO_NAMES_PRESENT)
-+
- static int
- simple_object_mach_o_segment (simple_object_read *sobj, off_t offset,
- const unsigned char *segbuf,
-@@ -378,9 +419,20 @@
- unsigned int nsects;
- unsigned char *secdata;
- unsigned int i;
-+ unsigned int gnu_sections_found;
- unsigned int strtab_index;
-+ unsigned int index_index;
-+ unsigned int nametab_index;
-+ unsigned int sections_index;
- char *strtab;
-+ char *nametab;
-+ unsigned char *index;
- size_t strtab_size;
-+ size_t nametab_size;
-+ size_t index_size;
-+ unsigned int n_wrapped_sects;
-+ size_t wrapper_sect_size;
-+ off_t wrapper_sect_offset;
-
- fetch_32 = (omr->is_big_endian
- ? simple_object_fetch_big_32
-@@ -409,6 +461,8 @@
- nsects));
- }
-
-+ /* Fetch the section headers from the segment command. */
-+
- secdata = XNEWVEC (unsigned char, nsects * sechdrsize);
- if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize,
- secdata, nsects * sechdrsize, errmsg, err))
-@@ -417,9 +471,13 @@
- return 0;
- }
-
-- /* Scan for a __section_names section. This is in effect a GNU
-- extension that permits section names longer than 16 chars. */
-+ /* Scan for special sections that signal GNU extensions to the format. */
-
-+ gnu_sections_found = 0;
-+ index_index = nsects;
-+ sections_index = nsects;
-+ strtab_index = nsects;
-+ nametab_index = nsects;
- for (i = 0; i < nsects; ++i)
- {
- size_t nameoff;
-@@ -427,19 +485,104 @@
- nameoff = i * sechdrsize + segname_offset;
- if (strcmp ((char *) secdata + nameoff, omr->segment_name) != 0)
- continue;
-+
- nameoff = i * sechdrsize + sectname_offset;
-- if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
-- break;
-+ if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_NAMES) == 0)
-+ {
-+ nametab_index = i;
-+ gnu_sections_found |= SOMO_NAMES_PRESENT;
-+ }
-+ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_INDEX) == 0)
-+ {
-+ index_index = i;
-+ gnu_sections_found |= SOMO_INDEX_PRESENT;
-+ }
-+ else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_SECTS) == 0)
-+ {
-+ sections_index = i;
-+ gnu_sections_found |= SOMO_SECTS_PRESENT;
-+ }
-+ else if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
-+ {
-+ strtab_index = i;
-+ gnu_sections_found |= SOMO_LONGN_PRESENT;
-+ }
- }
-
-- strtab_index = i;
-- if (strtab_index >= nsects)
-+ /* If any of the special wrapper section components is present, then
-+ they all should be. */
-+
-+ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
- {
-- strtab = NULL;
-- strtab_size = 0;
-+ off_t nametab_offset;
-+ off_t index_offset;
-+
-+ if ((gnu_sections_found & SOMO_WRAPPING) != SOMO_WRAPPING)
-+ {
-+ *errmsg = "GNU Mach-o section wrapper: required section missing";
-+ *err = 0; /* No useful errno. */
-+ XDELETEVEC (secdata);
-+ return 0;
-+ }
-+
-+ /* Fetch the name table. */
-+
-+ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
-+ secdata + nametab_index * sechdrsize,
-+ &nametab_offset, &nametab_size);
-+ nametab = XNEWVEC (char, nametab_size);
-+ if (!simple_object_internal_read (sobj->descriptor,
-+ sobj->offset + nametab_offset,
-+ (unsigned char *) nametab, nametab_size,
-+ errmsg, err))
-+ {
-+ XDELETEVEC (nametab);
-+ XDELETEVEC (secdata);
-+ return 0;
-+ }
-+
-+ /* Fetch the index. */
-+
-+ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
-+ secdata + index_index * sechdrsize,
-+ &index_offset, &index_size);
-+ index = XNEWVEC (unsigned char, index_size);
-+ if (!simple_object_internal_read (sobj->descriptor,
-+ sobj->offset + index_offset,
-+ index, index_size,
-+ errmsg, err))
-+ {
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
-+ XDELETEVEC (secdata);
-+ return 0;
-+ }
-+
-+ /* The index contains 4 unsigned ints per sub-section:
-+ sub-section offset/length, sub-section name/length.
-+ We fix this for both 32 and 64 bit mach-o for now, since
-+ other fields limit the maximum size of an object to 4G. */
-+ n_wrapped_sects = index_size / 16;
-+
-+ /* Get the parameters for the wrapper too. */
-+ simple_object_mach_o_section_info (omr->is_big_endian, is_32,
-+ secdata + sections_index * sechdrsize,
-+ &wrapper_sect_offset,
-+ &wrapper_sect_size);
- }
- else
- {
-+ index = NULL;
-+ index_size = 0;
-+ nametab = NULL;
-+ nametab_size = 0;
-+ n_wrapped_sects = 0;
-+ }
-+
-+ /* If we have a long names section, fetch it. */
-+
-+ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
-+ {
- off_t strtab_offset;
-
- simple_object_mach_o_section_info (omr->is_big_endian, is_32,
-@@ -452,52 +595,120 @@
- errmsg, err))
- {
- XDELETEVEC (strtab);
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
- XDELETEVEC (secdata);
- return 0;
- }
- }
-+ else
-+ {
-+ strtab = NULL;
-+ strtab_size = 0;
-+ strtab_index = nsects;
-+ }
-
- /* Process the sections. */
-
- for (i = 0; i < nsects; ++i)
- {
- const unsigned char *sechdr;
-- char namebuf[MACH_O_NAME_LEN + 1];
-+ char namebuf[MACH_O_NAME_LEN * 2 + 2];
- char *name;
- off_t secoffset;
- size_t secsize;
-+ int l;
-
-- if (i == strtab_index)
-+ sechdr = secdata + i * sechdrsize;
-+
-+ /* We've already processed the long section names. */
-+
-+ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0
-+ && i == strtab_index)
- continue;
-
-- sechdr = secdata + i * sechdrsize;
-+ /* We only act on the segment named. */
-
- if (strcmp ((char *) sechdr + segname_offset, omr->segment_name) != 0)
- continue;
-
-- memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
-- namebuf[MACH_O_NAME_LEN] = '\0';
-+ /* Process sections associated with the wrapper. */
-
-- name = &namebuf[0];
-- if (strtab != NULL && name[0] == '_' && name[1] == '_')
-+ if ((gnu_sections_found & SOMO_WRAPPING) != 0)
- {
-- unsigned long stringoffset;
-+ if (i == nametab_index || i == index_index)
-+ continue;
-
-- if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
-+ if (i == sections_index)
- {
-- if (stringoffset >= strtab_size)
-+ unsigned int j;
-+ for (j = 0; j < n_wrapped_sects; ++j)
- {
-- *errmsg = "section name offset out of range";
-- *err = 0;
-- XDELETEVEC (strtab);
-- XDELETEVEC (secdata);
-- return 0;
-+ unsigned int subsect_offset, subsect_length, name_offset;
-+ subsect_offset = (*fetch_32) (index + 16 * j);
-+ subsect_length = (*fetch_32) (index + 16 * j + 4);
-+ name_offset = (*fetch_32) (index + 16 * j + 8);
-+ /* We don't need the name_length yet. */
-+
-+ secoffset = wrapper_sect_offset + subsect_offset;
-+ secsize = subsect_length;
-+ name = nametab + name_offset;
-+
-+ if (!(*pfn) (data, name, secoffset, secsize))
-+ {
-+ *errmsg = NULL;
-+ *err = 0;
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
-+ XDELETEVEC (strtab);
-+ XDELETEVEC (secdata);
-+ return 0;
-+ }
- }
--
-- name = strtab + stringoffset;
-+ continue;
- }
- }
-
-+ if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
-+ {
-+ memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
-+ namebuf[MACH_O_NAME_LEN] = '\0';
-+
-+ name = &namebuf[0];
-+ if (strtab != NULL && name[0] == '_' && name[1] == '_')
-+ {
-+ unsigned long stringoffset;
-+
-+ if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
-+ {
-+ if (stringoffset >= strtab_size)
-+ {
-+ *errmsg = "section name offset out of range";
-+ *err = 0;
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
-+ XDELETEVEC (strtab);
-+ XDELETEVEC (secdata);
-+ return 0;
-+ }
-+
-+ name = strtab + stringoffset;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ /* Otherwise, make a name like __segment,__section as per the
-+ convention in mach-o asm. */
-+ name = &namebuf[0];
-+ memset (namebuf, 0, MACH_O_NAME_LEN * 2 + 2);
-+ memcpy (namebuf, (char *) sechdr + segname_offset, MACH_O_NAME_LEN);
-+ l = strlen (namebuf);
-+ namebuf[l] = ',';
-+ memcpy (namebuf + l + 1, (char *) sechdr + sectname_offset,
-+ MACH_O_NAME_LEN);
-+ }
-+
- simple_object_mach_o_section_info (omr->is_big_endian, is_32, sechdr,
- &secoffset, &secsize);
-
-@@ -505,12 +716,16 @@
- {
- *errmsg = NULL;
- *err = 0;
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
- return 0;
- }
- }
-
-+ XDELETEVEC (index);
-+ XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
-
-@@ -724,9 +939,9 @@
- simple_object_mach_o_write_section_header (simple_object_write *sobj,
- int descriptor,
- size_t sechdr_offset,
-- const char *name, size_t secaddr,
-- size_t secsize, size_t offset,
-- unsigned int align,
-+ const char *name, const char *segn,
-+ size_t secaddr, size_t secsize,
-+ size_t offset, unsigned int align,
- const char **errmsg, int *err)
- {
- struct simple_object_mach_o_attributes *attrs =
-@@ -748,7 +963,7 @@
- strncpy ((char *) hdr + offsetof (struct mach_o_section_32, sectname),
- name, MACH_O_NAME_LEN);
- strncpy ((char *) hdr + offsetof (struct mach_o_section_32, segname),
-- sobj->segment_name, MACH_O_NAME_LEN);
-+ segn, MACH_O_NAME_LEN);
- set_32 (hdr + offsetof (struct mach_o_section_32, addr), secaddr);
- set_32 (hdr + offsetof (struct mach_o_section_32, size), secsize);
- set_32 (hdr + offsetof (struct mach_o_section_32, offset), offset);
-@@ -773,7 +988,7 @@
- strncpy ((char *) hdr + offsetof (struct mach_o_section_64, sectname),
- name, MACH_O_NAME_LEN);
- strncpy ((char *) hdr + offsetof (struct mach_o_section_64, segname),
-- sobj->segment_name, MACH_O_NAME_LEN);
-+ segn, MACH_O_NAME_LEN);
- set_64 (hdr + offsetof (struct mach_o_section_64, addr), secaddr);
- set_64 (hdr + offsetof (struct mach_o_section_64, size), secsize);
- set_32 (hdr + offsetof (struct mach_o_section_64, offset), offset);
-@@ -793,11 +1008,25 @@
- sechdrsize, errmsg, err);
- }
-
--/* Write out the single segment and the sections of a Mach-O file. */
-+/* Write out the single (anonymous) segment containing the sections of a Mach-O
-+ Object file.
-
-+ As a GNU extension to mach-o, when the caller specifies a segment name in
-+ sobj->segment_name, all the sections passed will be output under a single
-+ mach-o section header. The caller's sections are indexed within this
-+ 'wrapper' section by a table stored in a second mach-o section. Finally,
-+ arbitrary length section names are permitted by the extension and these are
-+ stored in a table in a third mach-o section.
-+
-+ Note that this is only likely to make any sense for the __GNU_LTO segment
-+ at present.
-+
-+ If the wrapper extension is not in force, we assume that the section name
-+ is in the form __SEGMENT_NAME,__section_name as per Mach-O asm. */
-+
- static int
- simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor,
-- size_t nsects, const char **errmsg,
-+ size_t *nsects, const char **errmsg,
- int *err)
- {
- struct simple_object_mach_o_attributes *attrs =
-@@ -814,6 +1043,10 @@
- simple_object_write_section *section;
- unsigned char hdrbuf[sizeof (struct mach_o_segment_command_64)];
- unsigned char *hdr;
-+ size_t nsects_in;
-+ unsigned int *index;
-+ char *snames;
-+ unsigned int sect;
-
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
-@@ -834,19 +1067,62 @@
- sechdrsize = sizeof (struct mach_o_section_64);
- }
-
-+ name_offset = 0;
-+ *nsects = nsects_in = 0;
-+
-+ /* Count the number of sections we start with. */
-+
-+ for (section = sobj->sections; section != NULL; section = section->next)
-+ nsects_in++;
-+
-+ if (sobj->segment_name != NULL)
-+ {
-+ /* We will only write 3 sections: wrapped data, index and names. */
-+
-+ *nsects = 3;
-+
-+ /* The index has four entries per wrapped section:
-+ Section Offset, length, Name offset, length.
-+ Where the offsets are based at the start of the wrapper and name
-+ sections respectively.
-+ The values are stored as 32 bit int for both 32 and 64 bit mach-o
-+ since the size of a mach-o MH_OBJECT cannot exceed 4G owing to
-+ other constraints. */
-+
-+ index = XNEWVEC (unsigned int, nsects_in * 4);
-+
-+ /* We now need to figure out the size of the names section. This just
-+ stores the names as null-terminated c strings, packed without any
-+ alignment padding. */
-+
-+ for (section = sobj->sections, sect = 0; section != NULL;
-+ section = section->next, sect++)
-+ {
-+ index[sect*4+2] = name_offset;
-+ index[sect*4+3] = strlen (section->name) + 1;
-+ name_offset += strlen (section->name) + 1;
-+ }
-+ snames = XNEWVEC (char, name_offset);
-+ }
-+ else
-+ {
-+ *nsects = nsects_in;
-+ index = NULL;
-+ snames = NULL;
-+ }
-+
- sechdr_offset = hdrsize + seghdrsize;
-- cmdsize = seghdrsize + nsects * sechdrsize;
-+ cmdsize = seghdrsize + *nsects * sechdrsize;
- offset = hdrsize + cmdsize;
-- name_offset = 0;
- secaddr = 0;
-
-- for (section = sobj->sections; section != NULL; section = section->next)
-+ for (section = sobj->sections, sect = 0;
-+ section != NULL; section = section->next, sect++)
- {
- size_t mask;
- size_t new_offset;
- size_t secsize;
- struct simple_object_write_section_buffer *buffer;
-- char namebuf[MACH_O_NAME_LEN + 1];
-
- mask = (1U << section->align) - 1;
- new_offset = offset + mask;
-@@ -877,39 +1153,126 @@
- secsize += buffer->size;
- }
-
-- snprintf (namebuf, sizeof namebuf, "__%08X", name_offset);
-+ if (sobj->segment_name != NULL)
-+ {
-+ index[sect*4+0] = (unsigned int) offset;
-+ index[sect*4+1] = secsize;
-+ /* Stash the section name in our table. */
-+ memcpy (snames + index[sect * 4 + 2], section->name,
-+ index[sect * 4 + 3]);
-+ }
-+ else
-+ {
-+ char namebuf[MACH_O_NAME_LEN + 1];
-+ char segnbuf[MACH_O_NAME_LEN + 1];
-+ char *comma;
-+
-+ /* Try to extract segment,section from the input name. */
-+
-+ memset (namebuf, 0, sizeof namebuf);
-+ memset (segnbuf, 0, sizeof segnbuf);
-+ comma = strchr (section->name, ',');
-+ if (comma != NULL)
-+ {
-+ int len = comma - section->name;
-+ len = len > MACH_O_NAME_LEN ? MACH_O_NAME_LEN : len;
-+ strncpy (namebuf, section->name, len);
-+ strncpy (segnbuf, comma + 1, MACH_O_NAME_LEN);
-+ }
-+ else /* just try to copy the name, leave segment blank. */
-+ strncpy (namebuf, section->name, MACH_O_NAME_LEN);
-+
-+ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
-+ sechdr_offset,
-+ namebuf, segnbuf,
-+ secaddr, secsize,
-+ offset,
-+ section->align,
-+ errmsg, err))
-+ return 0;
-+ sechdr_offset += sechdrsize;
-+ }
-+
-+ offset += secsize;
-+ secaddr += secsize;
-+ }
-+
-+ if (sobj->segment_name != NULL)
-+ {
-+ size_t secsize;
-+ unsigned int i;
-+
-+ /* Write the section header for the wrapper. */
-+ /* Account for any initial aligment - which becomes the alignment for this
-+ created section. */
-+
-+ secsize = (offset - index[0]);
- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
-- sechdr_offset, namebuf,
-- secaddr, secsize, offset,
-- section->align,
-+ sechdr_offset,
-+ GNU_WRAPPER_SECTS,
-+ sobj->segment_name,
-+ 0 /*secaddr*/,
-+ secsize, index[0],
-+ sobj->sections->align,
- errmsg, err))
- return 0;
-
-+ /* Subtract the wrapper section start from the begining of each sub
-+ section. */
-+
-+ for (i = 1; i < nsects_in; ++i)
-+ index[4 * i] -= index[0];
-+ index[0] = 0;
-+
- sechdr_offset += sechdrsize;
-- offset += secsize;
-- name_offset += strlen (section->name) + 1;
-- secaddr += secsize;
-- }
-
-- /* Write out the section names. */
-+ /* Write out the section names.
-+ ... the header ...
-+ name_offset contains the length of the section. It is not aligned. */
-
-- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
-- sechdr_offset,
-- GNU_SECTION_NAMES, secaddr,
-- name_offset, offset, 0,
-- errmsg, err))
-- return 0;
-+ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
-+ sechdr_offset,
-+ GNU_WRAPPER_NAMES,
-+ sobj->segment_name,
-+ 0 /*secaddr*/,
-+ name_offset,
-+ offset,
-+ 0, errmsg, err))
-+ return 0;
-
-- for (section = sobj->sections; section != NULL; section = section->next)
-- {
-- size_t namelen;
-+ /* ... and the content.. */
-+ if (!simple_object_internal_write (descriptor, offset,
-+ (const unsigned char *) snames,
-+ name_offset, errmsg, err))
-+ return 0;
-
-- namelen = strlen (section->name) + 1;
-+ sechdr_offset += sechdrsize;
-+ secaddr += name_offset;
-+ offset += name_offset;
-+
-+ /* Now do the index, we'll align this to 4 bytes although the read code
-+ will handle unaligned. */
-+
-+ offset += 3;
-+ offset &= ~0x03;
-+ if (!simple_object_mach_o_write_section_header (sobj, descriptor,
-+ sechdr_offset,
-+ GNU_WRAPPER_INDEX,
-+ sobj->segment_name,
-+ 0 /*secaddr*/,
-+ nsects_in * 16,
-+ offset,
-+ 2, errmsg, err))
-+ return 0;
-+
-+ /* ... and the content.. */
- if (!simple_object_internal_write (descriptor, offset,
-- (const unsigned char *) section->name,
-- namelen, errmsg, err))
-+ (const unsigned char *) index,
-+ nsects_in*16, errmsg, err))
- return 0;
-- offset += namelen;
-+
-+ XDELETEVEC (index);
-+ XDELETEVEC (snames);
- }
-
- /* Write out the segment header. */
-@@ -923,9 +1286,8 @@
- MACH_O_LC_SEGMENT);
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, cmdsize),
- cmdsize);
-- strncpy (((char *) hdr
-- + offsetof (struct mach_o_segment_command_32, segname)),
-- sobj->segment_name, MACH_O_NAME_LEN);
-+ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
-+ is left empty. */
- /* vmaddr left as zero. */
- /* vmsize left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, fileoff),
-@@ -935,7 +1297,7 @@
- /* maxprot left as zero. */
- /* initprot left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, nsects),
-- nsects);
-+ *nsects);
- /* flags left as zero. */
- }
- else
-@@ -951,9 +1313,8 @@
- MACH_O_LC_SEGMENT);
- set_32 (hdr + offsetof (struct mach_o_segment_command_64, cmdsize),
- cmdsize);
-- strncpy (((char *) hdr
-- + offsetof (struct mach_o_segment_command_64, segname)),
-- sobj->segment_name, MACH_O_NAME_LEN);
-+ /* MH_OBJECTS have a single, anonymous, segment - so the segment name
-+ is left empty. */
- /* vmaddr left as zero. */
- /* vmsize left as zero. */
- set_64 (hdr + offsetof (struct mach_o_segment_command_64, fileoff),
-@@ -963,7 +1324,7 @@
- /* maxprot left as zero. */
- /* initprot left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_64, nsects),
-- nsects);
-+ *nsects);
- /* flags left as zero. */
- #endif
- }
-@@ -978,23 +1339,17 @@
- simple_object_mach_o_write_to_file (simple_object_write *sobj, int descriptor,
- int *err)
- {
-- size_t nsects;
-- simple_object_write_section *section;
-+ size_t nsects = 0;
- const char *errmsg;
-
-- /* Start at 1 for symbol_names section. */
-- nsects = 1;
-- for (section = sobj->sections; section != NULL; section = section->next)
-- ++nsects;
-+ if (!simple_object_mach_o_write_segment (sobj, descriptor, &nsects,
-+ &errmsg, err))
-+ return errmsg;
-
- if (!simple_object_mach_o_write_header (sobj, descriptor, nsects,
- &errmsg, err))
- return errmsg;
-
-- if (!simple_object_mach_o_write_segment (sobj, descriptor, nsects,
-- &errmsg, err))
-- return errmsg;
--
- return NULL;
- }
-
-Index: ChangeLog
-===================================================================
---- a/src/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,13 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * libtool.m4: Additional FreeBSD 10 fixes.
-+
-+2011-11-18 Iain Sandoe <iains@gcc.gnu.org>
-+
-+ PR target/49992
-+ * configure.ac: Remove ranlib special-casing for Darwin.
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: lto-plugin/configure
-===================================================================
---- a/src/lto-plugin/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/lto-plugin/configure (.../branches/gcc-4_6-branch)
-@@ -8733,7 +8733,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9646,7 +9646,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9664,7 +9664,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: lto-plugin/ChangeLog
-===================================================================
---- a/src/lto-plugin/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/lto-plugin/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libffi/configure
-===================================================================
---- a/src/libffi/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libffi/configure (.../branches/gcc-4_6-branch)
-@@ -9001,7 +9001,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9914,7 +9914,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9932,7 +9932,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libffi/ChangeLog
-===================================================================
---- a/src/libffi/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libffi/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libssp/configure
-===================================================================
---- a/src/libssp/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libssp/configure (.../branches/gcc-4_6-branch)
-@@ -8864,7 +8864,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -9780,7 +9780,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -9798,7 +9798,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libssp/ChangeLog
-===================================================================
---- a/src/libssp/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libssp/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,7 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libjava/libltdl/configure
-===================================================================
---- a/src/libjava/libltdl/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/libltdl/configure (.../branches/gcc-4_6-branch)
-@@ -7355,7 +7355,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -7968,7 +7968,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libjava/libltdl/ChangeLog
-===================================================================
---- a/src/libjava/libltdl/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/libltdl/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,8 @@
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * acinclude.m4: Additional FreeBSD 10 fixes.
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libjava/libltdl/acinclude.m4
-===================================================================
---- a/src/libjava/libltdl/acinclude.m4 (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/libltdl/acinclude.m4 (.../branches/gcc-4_6-branch)
-@@ -1377,7 +1377,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[[01]]* | freebsdelf3.[[01]]*)
-@@ -3035,7 +3035,7 @@
- ;;
- esac
- ;;
-- freebsd[[12]]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before switch to ELF
- _LT_AC_TAGVAR(ld_shlibs, $1)=no
- ;;
-@@ -5669,7 +5669,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- _LT_AC_TAGVAR(hardcode_direct, $1)=yes
- _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-Index: libjava/configure.ac
-===================================================================
---- a/src/libjava/configure.ac (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/configure.ac (.../branches/gcc-4_6-branch)
-@@ -1060,7 +1060,7 @@
- *-*-cygwin*)
- # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
- ;;
-- *-*-freebsd[[1234]]*)
-+ *-*-freebsd[[34]].*)
- # Before FreeBSD 5, it didn't have -lpthread (or any library which
- # merely adds pthread_* functions) but it does have a -pthread switch
- # which is required at link-time to select -lc_r *instead* of -lc.
-Index: libjava/classpath/config.rpath
-===================================================================
---- a/src/libjava/classpath/config.rpath (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/classpath/config.rpath (.../branches/gcc-4_6-branch)
-@@ -361,7 +361,7 @@
- hardcode_libdir_flag_spec='-R$libdir'
- hardcode_direct=yes
- ;;
-- freebsd2*)
-+ freebsd2.*)
- hardcode_direct=yes
- hardcode_minus_L=yes
- ;;
-@@ -533,7 +533,7 @@
- ;;
- freebsd* | dragonfly*)
- case "$host_os" in
-- freebsd[123]*)
-+ freebsd[23].*)
- library_names_spec='$libname$shrext$versuffix' ;;
- *)
- library_names_spec='$libname$shrext' ;;
-Index: libjava/classpath/configure
-===================================================================
---- a/src/libjava/classpath/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/classpath/configure (.../branches/gcc-4_6-branch)
-@@ -10025,7 +10025,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -10941,7 +10941,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -10959,7 +10959,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -14225,7 +14225,7 @@
- esac
- ;;
-
-- freebsd[12]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- ld_shlibs_CXX=no
-@@ -16000,7 +16000,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -16018,7 +16018,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-Index: libjava/classpath/ChangeLog.gcj
-===================================================================
---- a/src/libjava/classpath/ChangeLog.gcj (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/classpath/ChangeLog.gcj (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,9 @@
-+2011-11-29 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * config.rpath (ld_shlibs): Fix detection of FreeBSD-10 and up.
-+ (libname_spec): Likewise.
-+ * configure: Regenerate with autoconf -I ../../.
-+
- 2011-02-13 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * config.rpath, ltcf-c.sh, ltcf-gcj.sh, ltconfig: Remove
-Index: libjava/ChangeLog
-===================================================================
---- a/src/libjava/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,16 @@
-+2011-11-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR bootstrap/50888
-+ * prims.cc: Don't include ctype.h.
-+ (c_isspace): Define.
-+ (next_property_key, next_property_value): Use it instead
-+ of isspace.
-+
-+2011-11-20 Andreas Tobler <andreast@fgznet.ch>
-+
-+ * configure.ac: Fix FreeBSD 10 detection.
-+ * configure: Regenerate.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: libjava/prims.cc
-===================================================================
---- a/src/libjava/prims.cc (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/prims.cc (.../branches/gcc-4_6-branch)
-@@ -38,7 +38,6 @@
- #endif
-
- #ifndef DISABLE_GETENV_PROPERTIES
--#include <ctype.h>
- #include <java-props.h>
- #define PROCESS_GCJ_PROPERTIES process_gcj_properties()
- #else
-@@ -985,6 +984,8 @@
-
- #ifndef DISABLE_GETENV_PROPERTIES
-
-+#define c_isspace(c) (memchr (" \t\n\r\v\f", c, 6) != NULL)
-+
- static char *
- next_property_key (char *s, size_t *length)
- {
-@@ -993,7 +994,7 @@
- JvAssert (s);
-
- // Skip over whitespace
-- while (isspace (*s))
-+ while (c_isspace (*s))
- s++;
-
- // If we've reached the end, return NULL. Also return NULL if for
-@@ -1005,7 +1006,7 @@
-
- // Determine the length of the property key.
- while (s[l] != 0
-- && ! isspace (s[l])
-+ && ! c_isspace (s[l])
- && s[l] != ':'
- && s[l] != '=')
- {
-@@ -1027,19 +1028,19 @@
-
- JvAssert (s);
-
-- while (isspace (*s))
-+ while (c_isspace (*s))
- s++;
-
- if (*s == ':'
- || *s == '=')
- s++;
-
-- while (isspace (*s))
-+ while (c_isspace (*s))
- s++;
-
- // Determine the length of the property value.
- while (s[l] != 0
-- && ! isspace (s[l])
-+ && ! c_isspace (s[l])
- && s[l] != ':'
- && s[l] != '=')
- {
-Index: libjava/configure
-===================================================================
---- a/src/libjava/configure (.../tags/gcc_4_6_2_release)
-+++ b/src/libjava/configure (.../branches/gcc-4_6-branch)
-@@ -11560,7 +11560,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct=yes
- hardcode_minus_L=yes
-@@ -12476,7 +12476,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -12494,7 +12494,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -14384,7 +14384,7 @@
- esac
- ;;
-
-- freebsd[12]*)
-+ freebsd2.*)
- # C++ shared libraries reported to be fairly broken before
- # switch to ELF
- ld_shlibs_CXX=no
-@@ -16159,7 +16159,7 @@
- objformat=`/usr/bin/objformat`
- else
- case $host_os in
-- freebsd[123]*) objformat=aout ;;
-+ freebsd[23].*) objformat=aout ;;
- *) objformat=elf ;;
- esac
- fi
-@@ -16177,7 +16177,7 @@
- esac
- shlibpath_var=LD_LIBRARY_PATH
- case $host_os in
-- freebsd2*)
-+ freebsd2.*)
- shlibpath_overrides_runpath=yes
- ;;
- freebsd3.[01]* | freebsdelf3.[01]*)
-@@ -18520,7 +18520,7 @@
- ;;
-
- # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-- freebsd2*)
-+ freebsd2.*)
- archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
- hardcode_direct_GCJ=yes
- hardcode_minus_L_GCJ=yes
-@@ -20715,7 +20715,7 @@
- *-*-cygwin*)
- # Don't set THREADLIBS here. Cygwin doesn't have -lpthread.
- ;;
-- *-*-freebsd[1234]*)
-+ *-*-freebsd[34].*)
- # Before FreeBSD 5, it didn't have -lpthread (or any library which
- # merely adds pthread_* functions) but it does have a -pthread switch
- # which is required at link-time to select -lc_r *instead* of -lc.
-Index: maintainer-scripts/ChangeLog
-===================================================================
---- a/src/maintainer-scripts/ChangeLog (.../tags/gcc_4_6_2_release)
-+++ b/src/maintainer-scripts/ChangeLog (.../branches/gcc-4_6-branch)
-@@ -1,3 +1,8 @@
-+2011-11-23 Gerald Pfeifer <gerald@pfeifer.com>
-+
-+ * update_web_docs_svn: Make $DOCSDIR group writable after
-+ creating it.
-+
- 2011-10-26 Release Manager
-
- * GCC 4.6.2 released.
-Index: maintainer-scripts/update_web_docs_svn
-===================================================================
---- a/src/maintainer-scripts/update_web_docs_svn (.../tags/gcc_4_6_2_release)
-+++ b/src/maintainer-scripts/update_web_docs_svn (.../branches/gcc-4_6-branch)
-@@ -93,6 +93,7 @@
-
- if [ ! -d $DOCSDIR ]; then
- mkdir $DOCSDIR
-+ chmod g+w $DOCSDIR
- fi
-
- if [ -z "$RELEASE" ]; then