aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2016-11-14 11:08:49 +0100
committerYvan Roux <yvan.roux@linaro.org>2016-11-15 08:50:52 +0000
commit28192592ae19dc5ba0996503fbb87c2d7f7be769 (patch)
tree5a574b72d96a2748b3012b407581295592c58788
parent157a219d57b8ea803b58c0e70a05dff3cfd18d31 (diff)
Merge branches/gcc-6-branch rev 242371.
Change-Id: Ia4fb8e9e94629da786722b5e68605dc8bb971741
-rw-r--r--gcc/ChangeLog308
-rw-r--r--gcc/DATESTAMP2
-rw-r--r--gcc/ada/ChangeLog30
-rw-r--r--gcc/ada/gcc-interface/Make-lang.in3
-rw-r--r--gcc/ada/gcc-interface/decl.c3
-rw-r--r--gcc/ada/gcc-interface/utils2.c10
-rw-r--r--gcc/ada/system-darwin-ppc64.ads1
-rw-r--r--gcc/ada/system-linux-armeb.ads1
-rw-r--r--gcc/ada/system-linux-mips.ads1
-rw-r--r--gcc/ada/system-linux-mips64el.ads1
-rw-r--r--gcc/ada/system-linux-mipsel.ads1
-rw-r--r--gcc/ada/system-linux-sparcv9.ads1
-rw-r--r--gcc/ada/system-rtems.ads1
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-pretty-print.c13
-rw-r--r--gcc/c/ChangeLog8
-rw-r--r--gcc/c/c-typeck.c20
-rw-r--r--gcc/config.gcc10
-rw-r--r--gcc/config/i386/bmiintrin.h10
-rw-r--r--gcc/config/i386/i386-builtin-types.def4
-rw-r--r--gcc/config/i386/i386.c138
-rw-r--r--gcc/config/i386/i386.md172
-rw-r--r--gcc/config/i386/lzcntintrin.h10
-rw-r--r--gcc/config/pa/pa.h16
-rw-r--r--gcc/config/pa/pa.md30
-rw-r--r--gcc/config/s390/s390.md12
-rw-r--r--gcc/config/sparc/sparc-c.c4
-rw-r--r--gcc/config/sparc/sparc.c5
-rw-r--r--gcc/config/sparc/sparc.md87
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/class.c15
-rw-r--r--gcc/explow.c8
-rw-r--r--gcc/fold-const.c6
-rw-r--r--gcc/fortran/ChangeLog111
-rw-r--r--gcc/fortran/arith.c18
-rw-r--r--gcc/fortran/dependency.c23
-rw-r--r--gcc/fortran/frontend-passes.c24
-rw-r--r--gcc/fortran/interface.c3
-rw-r--r--gcc/fortran/match.c111
-rw-r--r--gcc/fortran/parse.c11
-rw-r--r--gcc/fortran/primary.c4
-rw-r--r--gcc/fortran/resolve.c17
-rw-r--r--gcc/fortran/symbol.c2
-rw-r--r--gcc/fortran/trans-expr.c26
-rw-r--r--gcc/fortran/trans-intrinsic.c19
-rw-r--r--gcc/fortran/trans-stmt.c3
-rw-r--r--gcc/gcov.c2
-rw-r--r--gcc/gimple-ssa-strength-reduction.c29
-rw-r--r--gcc/gimplify.c23
-rw-r--r--gcc/incpath.c5
-rw-r--r--gcc/ipa-icf.c5
-rw-r--r--gcc/lto/ChangeLog9
-rw-r--r--gcc/lto/lto.c4
-rw-r--r--gcc/po/ChangeLog20
-rw-r--r--gcc/po/es.po2024
-rw-r--r--gcc/po/fr.po465
-rw-r--r--gcc/ree.c10
-rw-r--r--gcc/testsuite/ChangeLog305
-rw-r--r--gcc/testsuite/c-c++-common/pr72747-1.c16
-rw-r--r--gcc/testsuite/c-c++-common/pr72747-2.c18
-rw-r--r--gcc/testsuite/g++.dg/ext/flexary18.C213
-rw-r--r--gcc/testsuite/g++.dg/ext/flexary19.C343
-rw-r--r--gcc/testsuite/g++.dg/gcov/gcov-16.C10
-rw-r--r--gcc/testsuite/g++.dg/pr77550.C298
-rw-r--r--gcc/testsuite/g++.dg/pr78229.C24
-rw-r--r--gcc/testsuite/g++.dg/torture/pr77745.C24
-rw-r--r--gcc/testsuite/g++.dg/tree-ssa/pr77943.C25
-rw-r--r--gcc/testsuite/gcc.dg/Woverride-init-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/Woverride-init-2.c10
-rw-r--r--gcc/testsuite/gcc.dg/init-excess-2.c47
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77648-1.c24
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77648-2.c22
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77768.c13
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77839.c29
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77916.c20
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77937-1.c15
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr77937-2.c18
-rw-r--r--gcc/testsuite/gcc.target/aarch64/pr78038.c28
-rw-r--r--gcc/testsuite/gcc.target/i386/bmi-6.c1
-rw-r--r--gcc/testsuite/gcc.target/i386/mask-unpack.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr65105-1.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr65105-2.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr65105-3.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr65105-5.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr67761.c2
-rw-r--r--gcc/testsuite/gcc.target/i386/pr77991.c19
-rw-r--r--gcc/testsuite/gcc.target/i386/pr78037.c21
-rw-r--r--gcc/testsuite/gcc.target/i386/pr78057.c42
-rw-r--r--gcc/testsuite/gcc.target/i386/pr78262.c32
-rw-r--r--gcc/testsuite/gcc.target/i386/pr78310.c15
-rw-r--r--gcc/testsuite/gcc.target/s390/pr77822.c307
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_with_source_22.f0348
-rw-r--r--gcc/testsuite/gfortran.dg/allocate_with_source_23.f0367
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_47.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/dependency_49.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_t_9.f41
-rw-r--r--gcc/testsuite/gfortran.dg/matmul_11.f9014
-rw-r--r--gcc/testsuite/gfortran.dg/pr67219.f908
-rw-r--r--gcc/testsuite/gfortran.dg/pr71895.f9010
-rw-r--r--gcc/testsuite/gfortran.dg/pr77763.f906
-rw-r--r--gcc/testsuite/gfortran.dg/pr77978_1.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/pr77978_2.f905
-rw-r--r--gcc/testsuite/gfortran.dg/pr77978_3.f9023
-rw-r--r--gcc/testsuite/gfortran.dg/pr78092.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/proc_ptr_49.f9050
-rw-r--r--gcc/testsuite/gfortran.dg/string_length_3.f9019
-rw-r--r--gcc/testsuite/gfortran.dg/submodule_18.f0849
-rw-r--r--gcc/testsuite/gfortran.dg/submodule_19.f0859
-rw-r--r--gcc/testsuite/gfortran.dg/warn_conversion_9.f907
-rw-r--r--gcc/testsuite/gfortran.dg/where_5.f9015
-rw-r--r--gcc/testsuite/gfortran.dg/where_6.f9015
-rw-r--r--gcc/testsuite/gnat.dg/lto21.adb10
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg1.ads10
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg2.adb30
-rw-r--r--gcc/testsuite/gnat.dg/lto21_pkg2.ads5
-rw-r--r--gcc/testsuite/gnat.dg/opt59.adb49
-rw-r--r--gcc/testsuite/gnat.dg/opt59_pkg.adb20
-rw-r--r--gcc/testsuite/gnat.dg/opt59_pkg.ads11
-rw-r--r--gcc/testsuite/gnat.dg/renaming11.adb12
-rw-r--r--gcc/testsuite/gnat.dg/renaming11.ads19
-rw-r--r--gcc/testsuite/lib/gcov.exp28
-rw-r--r--gcc/testsuite/lib/target-supports.exp4
-rw-r--r--gcc/tree-ssa-pre.c47
-rw-r--r--gcc/tree-ssa-sccvn.c60
-rw-r--r--gcc/tree-ssa-structalias.c97
-rw-r--r--gcc/tree-ssa-tail-merge.c5
-rw-r--r--gcc/tree-vect-stmts.c96
-rw-r--r--gcc/tree-vrp.c33
-rw-r--r--gcc/tree.c31
-rw-r--r--gcc/tree.h7
-rw-r--r--libcpp/po/ChangeLog4
-rw-r--r--libcpp/po/eo.po13
-rw-r--r--libgcc/ChangeLog8
-rw-r--r--libgcc/unwind-c.c1
-rw-r--r--libgfortran/ChangeLog7
-rw-r--r--libgfortran/io/transfer.c3
-rw-r--r--libgo/go/time/time_test.go7
-rw-r--r--libstdc++-v3/ChangeLog162
-rw-r--r--libstdc++-v3/doc/html/manual/bugs.html3
-rw-r--r--libstdc++-v3/doc/html/manual/source_organization.html179
-rw-r--r--libstdc++-v3/doc/html/manual/status.html6
-rw-r--r--libstdc++-v3/doc/xml/manual/appendix_contributing.xml183
-rw-r--r--libstdc++-v3/doc/xml/manual/intro.xml6
-rw-r--r--libstdc++-v3/doc/xml/manual/status_cxx2011.xml14
-rw-r--r--libstdc++-v3/include/bits/allocator.h9
-rw-r--r--libstdc++-v3/include/bits/unique_ptr.h16
-rw-r--r--libstdc++-v3/include/experimental/algorithm10
-rw-r--r--libstdc++-v3/include/experimental/functional8
-rw-r--r--libstdc++-v3/include/experimental/optional169
-rw-r--r--libstdc++-v3/include/experimental/propagate_const2
-rw-r--r--libstdc++-v3/include/experimental/string_view2
-rw-r--r--libstdc++-v3/include/std/functional10
-rw-r--r--libstdc++-v3/testsuite/20_util/allocator/void.cc40
-rw-r--r--libstdc++-v3/testsuite/20_util/function/77322.cc26
-rw-r--r--libstdc++-v3/testsuite/20_util/function/cons/72820.cc28
-rw-r--r--libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc2
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc4
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc21
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc23
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc28
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc26
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc73
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc11
-rw-r--r--libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc28
-rw-r--r--libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc4
-rw-r--r--libstdc++-v3/testsuite/experimental/algorithm/sample.cc1
-rw-r--r--libstdc++-v3/testsuite/experimental/optional/77288.cc406
-rw-r--r--libstdc++-v3/testsuite/experimental/optional/assignment/5.cc11
-rw-r--r--libstdc++-v3/testsuite/experimental/optional/cons/77727.cc51
-rw-r--r--libstdc++-v3/testsuite/experimental/optional/cons/value.cc27
170 files changed, 6389 insertions, 2198 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3b4cfbaef6e..ca5547b83e5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,309 @@
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * ipa-icf.c (sem_function::merge): Do not create a wrapper also if the
+ original function needs a static chain.
+
+2016-11-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78310
+ * config/i386/i386.md (rotate to rotatex splitter): Avoid overflow
+ when calculating operand 2.
+ (rotate to rotatex zext splitter): Ditto.
+
+2016-11-11 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ PR target/77822
+ * config/s390/s390.md ("extzv", "*extzv<mode>_zEC12")
+ ("*extzv<mode>_z10"): Check validity of zero_extend arguments.
+
+2016-11-09 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78262
+ * config/i386/i386.md (*<shift_insn><mode>3_doubleword): Mark
+ operand 0 as earlyclobber.
+ (*ashl<mode>3_doubleword): Ditto for all operand 0 alternatives.
+
+2016-11-07 Peter Bergner <bergner@vnet.ibm.com>
+
+ Backport from trunk
+ 2016-11-07 Peter Bergner <bergner@vnet.ibm.com>
+
+ * config.gcc (powerpc*-*-*, rs6000*-*-*): Remove setting of
+ INCLUDE_EXTRA_SPEC for Advance Toolchain builds.
+
+2016-11-06 Jack Howarth <howarth.at.gcc@gmail.com>
+
+ PR driver/78206
+ * incpath.c: (remove_dup(): Also silently ignore EPERM.
+
+2016-11-07 Richard Biener <rguenther@suse.de>
+
+ PR target/78229
+ * config/i386/i386.c (ix86_gimple_fold_builtin): Do not adjust
+ EH info.
+
+2016-11-03 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
+ 2016-08-12 Martin Liska <mliska@suse.cz>
+ Adam Fineman <afineman@afineman.com>
+
+ * gcov.c (process_file): Create .gcov file when .gcda
+ file is missing.
+
+2016-11-03 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-09-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77768
+ * tree-ssa-sccvn.c (visit_reference_op_store): Properly deal
+ with stores to a place we know has a constant value.
+ * tree-vrp.c (set_defs_to_varying): New helper avoiding
+ writing to vr_const_varying.
+ (vrp_initialize): Call it.
+ (vrp_visit_stmt): Likewise.
+ (evrp_dom_walker::before_dom_children): Likewise.
+ * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
+ Handle stores to readonly memory when removing redundant stores.
+
+2016-11-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ Backport from mainline
+ 2016-10-17 Eric Botcazou <ebotcazou@adacore.com>
+
+ * explow.c (validize_mem): Do not modify the argument in-place.
+
+2016-11-02 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ Backport from trunk
+ 2016-10-26 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ PR middle-end/72747
+ * gimplify.c (gimplify_init_constructor): Move emit of constructor
+ assignment to earlier in the if/else logic.
+
+2016-11-02 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-11-02 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/78047
+ * tree-ssa-structalias.c (push_fields_onto_fieldstack): Initialize
+ fake field at offset zero conservatively regarding to may_have_pointers.
+
+ 2016-10-07 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77879
+ * tree-ssa-structalias.c (handle_const_call): Properly handle
+ NRV return slots.
+ (handle_pure_call): Likewise.
+
+ 2016-10-06 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77839
+ * tree-ssa-sccvn.c (set_ssa_val_to): Forbid value -> constant value
+ lattice transition.
+
+ 2016-09-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77745
+ * tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
+ When removing redundant stores make sure to check compatibility
+ of the TBAA state for downstream accesses.
+ * tree-ssa-sccvn.c (visit_reference_op_store): Likewise for when
+ value-numbering virtual operands for store matches.
+
+ 2016-09-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77648
+ * tree-ssa-structalias.c (process_constraint): Handle all DEREF
+ with complex RHS.
+ (make_transitive_closure_constraints): Adjust comment.
+ (make_any_offset_constraints): New function.
+ (handle_rhs_call): Make sure to first expand a pointer to all
+ subfields before transitively closing it.
+ (handle_const_call): Likewise. Properly expand returned
+ pointers as well.
+ (handle_pure_call): Likewise.
+
+2016-11-01 John David Anglin <danglin@gcc.gnu.org>
+
+ PR target/78166
+ * config/pa/pa.md: Add new shift/add patterns to handle
+ (plus (mult (reg) (mem_shadd_operand)) (reg)) source operand.
+
+2016-11-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ Backport from mainline
+ 2016-10-21 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/78038
+ * ree.c (get_defs): Return NULL if a defining insn for REG cannot
+ be deduced to set REG through the RTL structure.
+ (make_defs_and_copies_lists): Return false on a failing get_defs call.
+
+2016-10-29 John David Anglin <danglin@gcc.gnu.org>
+
+ * config/pa/pa.h (BIGGEST_ALIGNMENT): Adjust comment.
+ (MALLOC_ABI_ALIGNMENT): Define.
+
+2016-10-28 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/78128
+ PR middle-end/71002
+ * fold-const.c (make_bit_field_ref): Only adjust alias set
+ when the original alias set was zero.
+
+2016-10-26 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+ 2016-10-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78057
+ * config/i386/i386.c: Include fold-const-call.h, tree-vrp.h
+ and tree-ssanames.h.
+ (ix86_fold_builtin): Fold IX86_BUILTIN_[LT]ZCNT{16,32,64}
+ with INTEGER_CST argument.
+ (ix86_gimple_fold_builtin): New function.
+ (TARGET_GIMPLE_FOLD_BUILTIN): Define.
+
+ Backport from mainline
+ 2016-10-20 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78037
+ * config/i386/bmiintrin.h (__tzcnt_u16): Call __builtin_ia32_tzcnt_u16.
+ (__tzcnt_u32, _tzcnt_u32): Call __builtin_ia32_tzcnt_u32.
+ (__tzcnt_u64, _tzcnt_u64): Call __builtin_ia32_tzcnt_u64.
+ * config/i386/lzcntintrin.h (__lzcnt_u16): Call
+ __builtin_ia32_lzcnt_u16.
+ (__lzcnt_u32, _lzcnt_u32): Call __builtin_ia32_lzcnt_u32.
+ (__lzcnt_u64, _lzcnt_u64): Call __builtin_ia32_lzcnt_u64.
+ * config/i386/i386.md (UNSPEC_LZCNT, UNSPEC_TZCNT): New unspecs.
+ (ctz<mode>2, *ctz<mode>2): Use SWI48 mode iterator.
+ (bmi_tzcnt_<mode>): New expander.
+ (*bmi_tzcnt_<mode>_falsedep_1): New define_insn_and_split pattern.
+ (*bmi_tzcnt_<mode>_falsedep, *bmi_tzcnt_<mode>): New insn patterns.
+ (clz<mode>2_lzcnt, *clz<mode>2_lzcnt): Use SWI48 mode iterator.
+ (lzcnt_<mode>): New expander.
+ (*lzcnt_<mode>_falsedep_1): New define_insn_and_split pattern.
+ (*lzcnt_<mode>_falsedep, *lzcnt_<mode>): New insn patterns.
+ * config/i386/i386-builtin-types.def (UINT_FTYPE_UINT): New.
+ (UINT64_FTYPE_UINT64): New.
+ * config/i386/i386-builtin.def (__builtin_clzs): Remove description.
+ (__builtin_ia32_lzcnt_u16): New description.
+ (__builtin_ia32_lzcnt_u32): Ditto.
+ (__builtin_ia32_lzcnt_u64): Ditto.
+ (__builtin_ctzs): Remove description.
+ (__builtin_ia32_tzcnt_u16): New description.
+ (__builtin_ia32_tzcnt_u32): Ditto.
+ (__builtin_ia32_tzcnt_u64): Ditto.
+ * config/i386/i386.c (ix86_expand_args_builtin): Handle
+ UINT_FTYPE_UINT and UINT64_FTYPE_UINT64.
+
+2016-10-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree.h (wi::fits_to_tree_p): Accept only 0 and 1 for boolean types.
+ * tree.c (int_fits_type_p): Likewise. Adjust head comment.
+
+2016-10-24 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ Backport from mainline
+ 2016-09-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR tree-optimization/77550
+ * tree-vect-stmts.c (create_array_ref): Change parameters.
+ (get_group_alias_ptr_type): New function.
+ (vectorizable_store, vectorizable_load): Use get_group_alias_ptr_type.
+
+2016-10-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2016-10-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/77916
+ * gimple-ssa-strength-reduction.c (create_add_on_incoming_edge):
+ Don't allow a MINUS_EXPR for pointer arithmetic for either known
+ or unknown strides.
+ (record_increment): Increments of -1 for unknown strides just use
+ a multiply initializer like other negative values.
+ (analyze_increments): Remove stopgap solution for -1 increment
+ applied to pointer arithmetic.
+ (insert_initializers): Requirement of initializer for -1 should be
+ based on pointer-typedness of the candidate basis.
+
+2016-10-23 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.md (cpu_feature): Minor tweak.
+ (enabled): Likewise.
+ (movsi_insn, movdi_insn_sp32, movdi_insn_sp64, movsf_insn,
+ movdf_insn_sp32, movdf_insn_sp64, zero_extendsidi2_insn_sp64,
+ sign_extendsidi2_insn, mov<VM32:mode>_insn, mov<VM64:mode>_insn_sp64,
+ mov<VM64:mode>_insn_sp32, not_<code><mode>, nand<mode>_vis,
+ <code>_not1<mode>_vi, <code>_not2<mode>_vis, one_cmpl<mode>2,
+ fcmp<code><GCM:gcm_name>, pdistn<mode>_vis): Likewise.
+
+2016-10-23 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc-c.c (sparc_target_macros): Replace TARGET_64BIT
+ with TARGET_ARCH64. Define __VIS to 0x400 if TARGET_VIS4.
+
+2016-10-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/77991
+ * config/i386/i386.c (legitimize_tls_address)
+ <case TLS_MODEL_INITIAL_EXEC>: For TARGET_64BIT || TARGET_ANY_GNU_TLS
+ convert dest to Pmode if different than Pmode.
+
+2016-10-18 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ Backport from mainline
+ 2016-10-11 Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ * tree-vrp.c (vrp_intersect_ranges_1): Allocate bitmap before
+ copying.
+
+2016-10-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2016-10-12 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/77937
+ * gimple-ssa-strength-reduction.c (analyze_increments): Use
+ POINTER_TYPE_P on the candidate type to determine whether
+ candidates in this chain require pointer arithmetic.
+
+ 2016-10-13 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/77937
+ * gimple-ssa-strength-reduction.c (analyze_increments): Set cost
+ to infinite when we have a pointer with an increment of -1.
+
+2016-10-17 Martin Liska <mliska@suse.cz>
+
+ Backported from mainline
+ 2016-10-13 Martin Liska <mliska@suse.cz>
+
+ PR tree-optimization/77943
+ * tree-ssa-tail-merge.c (merge_stmts_p): Do not merge BBs with
+ a different EH landing pads.
+
+2016-10-17 Eric Botcazou <ebotcazou@adacore.com>
+
+ PR bootstrap/77995
+ Backport from mainline
+ 2016-10-11 Eric Botcazou <ebotcazou@adacore.com>
+
+ * tree.h (build_complex_type): Add second parameter with default.
+ * tree.c (build_complex_type): Add NAMED second parameter and adjust
+ recursive call. Create a TYPE_DECL only if NAMED is true.
+ (build_common_tree_nodes): Pass true in calls to build_complex_type.
+
+2016-10-16 Eric Botcazou <ebotcazou@adacore.com>
+
+ * config/sparc/sparc.c (sparc_expand_vector_init): Only accept literal
+ constants in CONST_VECTORs.
+
2016-10-15 Eric Botcazou <ebotcazou@adacore.com>
* config/sparc/sparc.c (sparc_expand_vec_perm_bmask): Use a scratch
@@ -63,7 +369,7 @@
Use <round_constraint> as operand 1 constraint.
2016-10-06 James Clarke <jrtc27@jrtc27.com>
- Eric Botcazou <ebotcazou@adacore.com>
+ Eric Botcazou <ebotcazou@adacore.com>
PR target/77759
* config/sparc/sparc.c (classify_data_t): Remove int_regs field.
diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP
index a476ea143bc..293bb6dda98 100644
--- a/gcc/DATESTAMP
+++ b/gcc/DATESTAMP
@@ -1 +1 @@
-20161016
+20161114
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6df84984edc..d0144c0f951 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,7 +1,33 @@
-2016-10-16 Eric Botcazou <ebotcazou@adacore.com>
+2016-11-13 Bob Duff <duff@adacore.com>
+
+ * gcc-interface/decl.c (gnat_to_gnu_entity): In assertion about known
+ Esize, protect with !is_type and change !Unknown_Esize to Known_Esize.
+
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/utils2.c (gnat_protect_expr): Also protect only the
+ address if the expression is the component of a dereference.
+ Do not use a reference type for the final temporary reference.
+
+2016-11-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Backport from mainline
- 2016-10-16 Eric Botcazou <ebotcazou@adacore.com>
+ 2016-10-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * gcc-interface/Make-lang.in (lang_checks_parallelized): New target.
+ (check_gnat_parallelize): Likewise.
+
+2016-10-17 Eric Botcazou <ebotcazou@adacore.com>
+
+ * system-darwin-ppc64.ads (Support_64_Bit_Divides): Delete.
+ * system-linux-armeb.ads (Support_64_Bit_Divides): Likewise.
+ * system-linux-mips.ads (Support_64_Bit_Divides): Likewise.
+ * system-linux-mips64el.ads (Support_64_Bit_Divides): Likewise.
+ * system-linux-mipsel.ads (Support_64_Bit_Divides): Likewise.
+ * system-linux-sparcv9.ads (Support_64_Bit_Divides): Likewise.
+ * system-rtems.ads (Support_64_Bit_Divides): Likewise.
+
+2016-10-16 Eric Botcazou <ebotcazou@adacore.com>
* system-aix.ads (Always_Compatible_Rep): Change to False.
* system-aix64.ads (Always_Compatible_Rep): Likewise.
diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in
index a8ce6722491..ab8e76e8fc4 100644
--- a/gcc/ada/gcc-interface/Make-lang.in
+++ b/gcc/ada/gcc-interface/Make-lang.in
@@ -863,6 +863,9 @@ ada.stagefeedback: stagefeedback-start
-$(MV) ada/stamp-* stagefeedback/ada
lang_checks += check-gnat
+lang_checks_parallelized += check-gnat
+# For description see the check_$lang_parallelize comment in gcc/Makefile.in.
+check_gnat_parallelize = 1000
check-ada: check-acats check-gnat
check-ada-subtargets: check-acats-subtargets check-gnat-subtargets
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 6f2b0bbfd2d..f531b53c17b 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -349,7 +349,8 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
must be specified unless it was specified by the programmer. Exceptions
are for access-to-protected-subprogram types and all access subtypes, as
another GNAT type is used to lay out the GCC type for them. */
- gcc_assert (!Unknown_Esize (gnat_entity)
+ gcc_assert (!is_type
+ || Known_Esize (gnat_entity)
|| Has_Size_Clause (gnat_entity)
|| (!IN (kind, Numeric_Kind)
&& !IN (kind, Enumeration_Kind)
diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c
index 400ade54d1d..e2030de88a0 100644
--- a/gcc/ada/gcc-interface/utils2.c
+++ b/gcc/ada/gcc-interface/utils2.c
@@ -2565,6 +2565,12 @@ gnat_protect_expr (tree exp)
return t;
}
+ /* Likewise if we're indirectly referencing part of something. */
+ if (code == COMPONENT_REF
+ && TREE_CODE (TREE_OPERAND (exp, 0)) == INDIRECT_REF)
+ return build3 (code, type, gnat_protect_expr (TREE_OPERAND (exp, 0)),
+ TREE_OPERAND (exp, 1), NULL_TREE);
+
/* If this is a COMPONENT_REF of a fat pointer, save the entire fat pointer.
This may be more efficient, but will also allow us to more easily find
the match for the PLACEHOLDER_EXPR. */
@@ -2584,9 +2590,7 @@ gnat_protect_expr (tree exp)
/* Otherwise reference, protect the address and dereference. */
return
build_unary_op (INDIRECT_REF, type,
- save_expr (build_unary_op (ADDR_EXPR,
- build_reference_type (type),
- exp)));
+ save_expr (build_unary_op (ADDR_EXPR, NULL_TREE, exp)));
}
/* This is equivalent to stabilize_reference_1 in tree.c but we take an extra
diff --git a/gcc/ada/system-darwin-ppc64.ads b/gcc/ada/system-darwin-ppc64.ads
index 29cc18726ea..b0967a0abeb 100644
--- a/gcc/ada/system-darwin-ppc64.ads
+++ b/gcc/ada/system-darwin-ppc64.ads
@@ -138,7 +138,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := False;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Atomic_Primitives : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
diff --git a/gcc/ada/system-linux-armeb.ads b/gcc/ada/system-linux-armeb.ads
index 6c08d428624..2f3dd705c7d 100644
--- a/gcc/ada/system-linux-armeb.ads
+++ b/gcc/ada/system-linux-armeb.ads
@@ -142,7 +142,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-linux-mips.ads b/gcc/ada/system-linux-mips.ads
index c1ddf1f6ef2..45bc999de4e 100644
--- a/gcc/ada/system-linux-mips.ads
+++ b/gcc/ada/system-linux-mips.ads
@@ -134,7 +134,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-linux-mips64el.ads b/gcc/ada/system-linux-mips64el.ads
index 1433a8e3676..c1d2bb1505e 100644
--- a/gcc/ada/system-linux-mips64el.ads
+++ b/gcc/ada/system-linux-mips64el.ads
@@ -134,7 +134,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-linux-mipsel.ads b/gcc/ada/system-linux-mipsel.ads
index 18003a20e86..a13733d5cd9 100644
--- a/gcc/ada/system-linux-mipsel.ads
+++ b/gcc/ada/system-linux-mipsel.ads
@@ -134,7 +134,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-linux-sparcv9.ads b/gcc/ada/system-linux-sparcv9.ads
index eeede3e56b9..fe0e7cb3f86 100644
--- a/gcc/ada/system-linux-sparcv9.ads
+++ b/gcc/ada/system-linux-sparcv9.ads
@@ -134,7 +134,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := True;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/ada/system-rtems.ads b/gcc/ada/system-rtems.ads
index 14c08fe5fa3..ce1ce2bda3a 100644
--- a/gcc/ada/system-rtems.ads
+++ b/gcc/ada/system-rtems.ads
@@ -153,7 +153,6 @@ private
Stack_Check_Default : constant Boolean := False;
Stack_Check_Probes : constant Boolean := False;
Stack_Check_Limits : constant Boolean := False;
- Support_64_Bit_Divides : constant Boolean := True;
Support_Aggregates : constant Boolean := True;
Support_Composite_Assign : constant Boolean := True;
Support_Composite_Compare : constant Boolean := True;
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index f21e176ac87..6248e6c2e78 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2016-10-28 Aldy Hernandez <aldyh@redhat.com>
+
+ PR debug/77773
+ * c-pretty-print.c (simple_type_specifier): Do not dereference `t'
+ if NULL.
+
2016-09-27 Richard Biener <rguenther@suse.de>
Backport from mainline
diff --git a/gcc/c-family/c-pretty-print.c b/gcc/c-family/c-pretty-print.c
index 704d21daaaa..6a23b0b4a8c 100644
--- a/gcc/c-family/c-pretty-print.c
+++ b/gcc/c-family/c-pretty-print.c
@@ -344,14 +344,17 @@ c_pretty_printer::simple_type_specifier (tree t)
else
{
int prec = TYPE_PRECISION (t);
+ tree common_t;
if (ALL_FIXED_POINT_MODE_P (TYPE_MODE (t)))
- t = c_common_type_for_mode (TYPE_MODE (t), TYPE_SATURATING (t));
+ common_t = c_common_type_for_mode (TYPE_MODE (t),
+ TYPE_SATURATING (t));
else
- t = c_common_type_for_mode (TYPE_MODE (t), TYPE_UNSIGNED (t));
- if (TYPE_NAME (t))
+ common_t = c_common_type_for_mode (TYPE_MODE (t),
+ TYPE_UNSIGNED (t));
+ if (common_t && TYPE_NAME (common_t))
{
- simple_type_specifier (t);
- if (TYPE_PRECISION (t) != prec)
+ simple_type_specifier (common_t);
+ if (TYPE_PRECISION (common_t) != prec)
{
pp_colon (this);
pp_decimal_int (this, prec);
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index ed09d22be15..a3837c24b04 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-05 Martin Sebor <msebor@redhat.com>
+
+ Backport from trunk.
+ PR c/71115
+ * c-typeck.c (error_init): Use
+ expansion_point_location_if_in_system_header.
+ (warning_init): Same.
+
2016-08-22 Release Manager
* GCC 6.2.0 released.
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 09cca41adef..2bea8166a95 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -5876,16 +5876,21 @@ error_init (location_t loc, const char *gmsgid)
component name is taken from the spelling stack. */
static void
-pedwarn_init (location_t location, int opt, const char *gmsgid)
+pedwarn_init (location_t loc, int opt, const char *gmsgid)
{
char *ofwhat;
bool warned;
+ /* Use the location where a macro was expanded rather than where
+ it was defined to make sure macros defined in system headers
+ but used incorrectly elsewhere are diagnosed. */
+ source_location exploc = expansion_point_location_if_in_system_header (loc);
+
/* The gmsgid may be a format string with %< and %>. */
- warned = pedwarn (location, opt, gmsgid);
+ warned = pedwarn (exploc, opt, gmsgid);
ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
if (*ofwhat && warned)
- inform (location, "(near initialization for %qs)", ofwhat);
+ inform (exploc, "(near initialization for %qs)", ofwhat);
}
/* Issue a warning for a bad initializer component.
@@ -5900,11 +5905,16 @@ warning_init (location_t loc, int opt, const char *gmsgid)
char *ofwhat;
bool warned;
+ /* Use the location where a macro was expanded rather than where
+ it was defined to make sure macros defined in system headers
+ but used incorrectly elsewhere are diagnosed. */
+ source_location exploc = expansion_point_location_if_in_system_header (loc);
+
/* The gmsgid may be a format string with %< and %>. */
- warned = warning_at (loc, opt, gmsgid);
+ warned = warning_at (exploc, opt, gmsgid);
ofwhat = print_spelling ((char *) alloca (spelling_length () + 1));
if (*ofwhat && warned)
- inform (loc, "(near initialization for %qs)", ofwhat);
+ inform (exploc, "(near initialization for %qs)", ofwhat);
}
/* If TYPE is an array type and EXPR is a parenthesized string
diff --git a/gcc/config.gcc b/gcc/config.gcc
index bbb3c5d19f6..7a0d8e87193 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -4202,16 +4202,6 @@ case "${target}" in
(at="/opt/$with_advance_toolchain"
echo "/* Use Advance Toolchain $at */"
echo
- echo "#ifndef USE_AT_INCLUDE_FILES"
- echo "#define USE_AT_INCLUDE_FILES 1"
- echo "#endif"
- echo
- echo "#if USE_AT_INCLUDE_FILES"
- echo "#undef INCLUDE_EXTRA_SPEC"
- echo "#define INCLUDE_EXTRA_SPEC" \
- "\"-isystem $at/include\""
- echo "#endif"
- echo
echo "#undef LINK_OS_EXTRA_SPEC32"
echo "#define LINK_OS_EXTRA_SPEC32" \
"\"%(link_os_new_dtags)" \
diff --git a/gcc/config/i386/bmiintrin.h b/gcc/config/i386/bmiintrin.h
index a838a927be9..3ebe6d7d508 100644
--- a/gcc/config/i386/bmiintrin.h
+++ b/gcc/config/i386/bmiintrin.h
@@ -37,7 +37,7 @@
extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u16 (unsigned short __X)
{
- return __builtin_ctzs (__X);
+ return __builtin_ia32_tzcnt_u16 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
@@ -97,13 +97,13 @@ _blsr_u32 (unsigned int __X)
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u32 (unsigned int __X)
{
- return __builtin_ctz (__X);
+ return __builtin_ia32_tzcnt_u32 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_tzcnt_u32 (unsigned int __X)
{
- return __builtin_ctz (__X);
+ return __builtin_ia32_tzcnt_u32 (__X);
}
@@ -165,13 +165,13 @@ _blsr_u64 (unsigned long long __X)
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__tzcnt_u64 (unsigned long long __X)
{
- return __builtin_ctzll (__X);
+ return __builtin_ia32_tzcnt_u64 (__X);
}
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_tzcnt_u64 (unsigned long long __X)
{
- return __builtin_ctzll (__X);
+ return __builtin_ia32_tzcnt_u64 (__X);
}
#endif /* __x86_64__ */
diff --git a/gcc/config/i386/i386-builtin-types.def b/gcc/config/i386/i386-builtin-types.def
index 86139db4abd..e055232a44c 100644
--- a/gcc/config/i386/i386-builtin-types.def
+++ b/gcc/config/i386/i386-builtin-types.def
@@ -201,9 +201,11 @@ DEF_FUNCTION_TYPE (INT, PCCHAR)
DEF_FUNCTION_TYPE (INT64, INT64)
DEF_FUNCTION_TYPE (INT64, V2DF)
DEF_FUNCTION_TYPE (INT64, V4SF)
-DEF_FUNCTION_TYPE (UINT64, INT)
+DEF_FUNCTION_TYPE (UINT, UINT)
DEF_FUNCTION_TYPE (UINT16, UINT16)
+DEF_FUNCTION_TYPE (UINT64, INT)
DEF_FUNCTION_TYPE (UINT64, PUNSIGNED)
+DEF_FUNCTION_TYPE (UINT64, UINT64)
DEF_FUNCTION_TYPE (V16QI, PCCHAR)
DEF_FUNCTION_TYPE (V16QI, V16QI)
DEF_FUNCTION_TYPE (V2DF, PCDOUBLE)
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index defc60d3032..b38def5b3e3 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -76,6 +76,8 @@ along with GCC; see the file COPYING3. If not see
#include "case-cfn-macros.h"
#include "regrename.h"
#include "dojump.h"
+#include "fold-const-call.h"
+#include "tree-ssanames.h"
/* This file should be included last. */
#include "target-def.h"
@@ -15507,7 +15509,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
base = get_thread_pointer (tp_mode,
for_mov || !TARGET_TLS_DIRECT_SEG_REFS);
off = force_reg (tp_mode, off);
- return gen_rtx_PLUS (tp_mode, base, off);
+ dest = gen_rtx_PLUS (tp_mode, base, off);
+ if (tp_mode != Pmode)
+ dest = convert_to_mode (Pmode, dest, 1);
}
else
{
@@ -32354,7 +32358,10 @@ enum ix86_builtins
IX86_BUILTIN_LWPINS32,
IX86_BUILTIN_LWPINS64,
- IX86_BUILTIN_CLZS,
+ /* LZCNT */
+ IX86_BUILTIN_LZCNT16,
+ IX86_BUILTIN_LZCNT32,
+ IX86_BUILTIN_LZCNT64,
/* RTM */
IX86_BUILTIN_XBEGIN,
@@ -32378,7 +32385,9 @@ enum ix86_builtins
/* BMI instructions. */
IX86_BUILTIN_BEXTR32,
IX86_BUILTIN_BEXTR64,
- IX86_BUILTIN_CTZS,
+ IX86_BUILTIN_TZCNT16,
+ IX86_BUILTIN_TZCNT32,
+ IX86_BUILTIN_TZCNT64,
/* TBM instructions. */
IX86_BUILTIN_BEXTRI32,
@@ -33766,12 +33775,18 @@ static const struct builtin_description bdesc_args[] =
{ OPTION_MASK_ISA_AVX2, CODE_FOR_avx2_lshrvv8si, "__builtin_ia32_psrlv8si", IX86_BUILTIN_PSRLVV8SI, UNKNOWN, (int) V8SI_FTYPE_V8SI_V8SI },
{ OPTION_MASK_ISA_AVX2, CODE_FOR_avx2_lshrvv4si, "__builtin_ia32_psrlv4si", IX86_BUILTIN_PSRLVV4SI, UNKNOWN, (int) V4SI_FTYPE_V4SI_V4SI },
- { OPTION_MASK_ISA_LZCNT, CODE_FOR_clzhi2_lzcnt, "__builtin_clzs", IX86_BUILTIN_CLZS, UNKNOWN, (int) UINT16_FTYPE_UINT16 },
+ /* LZCNT */
+ { OPTION_MASK_ISA_LZCNT, CODE_FOR_lzcnt_hi, "__builtin_ia32_lzcnt_u16", IX86_BUILTIN_LZCNT16, UNKNOWN, (int) UINT16_FTYPE_UINT16 },
+ { OPTION_MASK_ISA_LZCNT, CODE_FOR_lzcnt_si, "__builtin_ia32_lzcnt_u32", IX86_BUILTIN_LZCNT32, UNKNOWN, (int) UINT_FTYPE_UINT },
+ { OPTION_MASK_ISA_LZCNT | OPTION_MASK_ISA_64BIT, CODE_FOR_lzcnt_di, "__builtin_ia32_lzcnt_u64", IX86_BUILTIN_LZCNT64, UNKNOWN, (int) UINT64_FTYPE_UINT64 },
/* BMI */
{ OPTION_MASK_ISA_BMI, CODE_FOR_bmi_bextr_si, "__builtin_ia32_bextr_u32", IX86_BUILTIN_BEXTR32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT },
{ OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi_bextr_di, "__builtin_ia32_bextr_u64", IX86_BUILTIN_BEXTR64, UNKNOWN, (int) UINT64_FTYPE_UINT64_UINT64 },
- { OPTION_MASK_ISA_BMI, CODE_FOR_ctzhi2, "__builtin_ctzs", IX86_BUILTIN_CTZS, UNKNOWN, (int) UINT16_FTYPE_UINT16 },
+
+ { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_tzcnt_hi, "__builtin_ia32_tzcnt_u16", IX86_BUILTIN_TZCNT16, UNKNOWN, (int) UINT16_FTYPE_UINT16 },
+ { OPTION_MASK_ISA_BMI, CODE_FOR_bmi_tzcnt_si, "__builtin_ia32_tzcnt_u32", IX86_BUILTIN_TZCNT32, UNKNOWN, (int) UINT_FTYPE_UINT },
+ { OPTION_MASK_ISA_BMI | OPTION_MASK_ISA_64BIT, CODE_FOR_bmi_tzcnt_di, "__builtin_ia32_tzcnt_u64", IX86_BUILTIN_TZCNT64, UNKNOWN, (int) UINT64_FTYPE_UINT64 },
/* TBM */
{ OPTION_MASK_ISA_TBM, CODE_FOR_tbm_bextri_si, "__builtin_ia32_bextri_u32", IX86_BUILTIN_BEXTRI32, UNKNOWN, (int) UINT_FTYPE_UINT_UINT },
@@ -37544,11 +37559,49 @@ ix86_fold_builtin (tree fndecl, int n_args,
{
enum ix86_builtins fn_code = (enum ix86_builtins)
DECL_FUNCTION_CODE (fndecl);
- if (fn_code == IX86_BUILTIN_CPU_IS
- || fn_code == IX86_BUILTIN_CPU_SUPPORTS)
+ switch (fn_code)
{
+ case IX86_BUILTIN_CPU_IS:
+ case IX86_BUILTIN_CPU_SUPPORTS:
gcc_assert (n_args == 1);
return fold_builtin_cpu (fndecl, args);
+
+ case IX86_BUILTIN_TZCNT16:
+ case IX86_BUILTIN_TZCNT32:
+ case IX86_BUILTIN_TZCNT64:
+ gcc_assert (n_args == 1);
+ if (TREE_CODE (args[0]) == INTEGER_CST)
+ {
+ tree type = TREE_TYPE (TREE_TYPE (fndecl));
+ tree arg = args[0];
+ if (fn_code == IX86_BUILTIN_TZCNT16)
+ arg = fold_convert (short_unsigned_type_node, arg);
+ if (integer_zerop (arg))
+ return build_int_cst (type, TYPE_PRECISION (TREE_TYPE (arg)));
+ else
+ return fold_const_call (CFN_CTZ, type, arg);
+ }
+ break;
+
+ case IX86_BUILTIN_LZCNT16:
+ case IX86_BUILTIN_LZCNT32:
+ case IX86_BUILTIN_LZCNT64:
+ gcc_assert (n_args == 1);
+ if (TREE_CODE (args[0]) == INTEGER_CST)
+ {
+ tree type = TREE_TYPE (TREE_TYPE (fndecl));
+ tree arg = args[0];
+ if (fn_code == IX86_BUILTIN_LZCNT16)
+ arg = fold_convert (short_unsigned_type_node, arg);
+ if (integer_zerop (arg))
+ return build_int_cst (type, TYPE_PRECISION (TREE_TYPE (arg)));
+ else
+ return fold_const_call (CFN_CLZ, type, arg);
+ }
+ break;
+
+ default:
+ break;
}
}
@@ -37559,6 +37612,70 @@ ix86_fold_builtin (tree fndecl, int n_args,
return NULL_TREE;
}
+/* Fold a MD builtin (use ix86_fold_builtin for folding into
+ constant) in GIMPLE. */
+
+bool
+ix86_gimple_fold_builtin (gimple_stmt_iterator *gsi)
+{
+ gimple *stmt = gsi_stmt (*gsi);
+ tree fndecl = gimple_call_fndecl (stmt);
+ gcc_checking_assert (fndecl && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_MD);
+ int n_args = gimple_call_num_args (stmt);
+ enum ix86_builtins fn_code = (enum ix86_builtins) DECL_FUNCTION_CODE (fndecl);
+ tree decl = NULL_TREE;
+ tree arg0;
+
+ switch (fn_code)
+ {
+ case IX86_BUILTIN_TZCNT32:
+ decl = builtin_decl_implicit (BUILT_IN_CTZ);
+ goto fold_tzcnt_lzcnt;
+
+ case IX86_BUILTIN_TZCNT64:
+ decl = builtin_decl_implicit (BUILT_IN_CTZLL);
+ goto fold_tzcnt_lzcnt;
+
+ case IX86_BUILTIN_LZCNT32:
+ decl = builtin_decl_implicit (BUILT_IN_CLZ);
+ goto fold_tzcnt_lzcnt;
+
+ case IX86_BUILTIN_LZCNT64:
+ decl = builtin_decl_implicit (BUILT_IN_CLZLL);
+ goto fold_tzcnt_lzcnt;
+
+ fold_tzcnt_lzcnt:
+ gcc_assert (n_args == 1);
+ arg0 = gimple_call_arg (stmt, 0);
+ if (TREE_CODE (arg0) == SSA_NAME && decl && gimple_call_lhs (stmt))
+ {
+ int prec = TYPE_PRECISION (TREE_TYPE (arg0));
+ /* If arg0 is provably non-zero, optimize into generic
+ __builtin_c[tl]z{,ll} function the middle-end handles
+ better. */
+ if (!expr_not_equal_to (arg0, wi::zero (prec)))
+ return false;
+
+ location_t loc = gimple_location (stmt);
+ gimple *g = gimple_build_call (decl, 1, arg0);
+ gimple_set_location (g, loc);
+ tree lhs = make_ssa_name (integer_type_node);
+ gimple_call_set_lhs (g, lhs);
+ gsi_insert_before (gsi, g, GSI_SAME_STMT);
+ g = gimple_build_assign (gimple_call_lhs (stmt), NOP_EXPR, lhs);
+ gimple_set_location (g, loc);
+ gsi_replace (gsi, g, false);
+ return true;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
/* Make builtins to detect cpu type and features supported. NAME is
the builtin name, CODE is the builtin code, and FTYPE is the function
type of the builtin. */
@@ -38520,8 +38637,10 @@ ix86_expand_args_builtin (const struct builtin_description *d,
case FLOAT128_FTYPE_FLOAT128:
case FLOAT_FTYPE_FLOAT:
case INT_FTYPE_INT:
- case UINT64_FTYPE_INT:
+ case UINT_FTYPE_UINT:
case UINT16_FTYPE_UINT16:
+ case UINT64_FTYPE_INT:
+ case UINT64_FTYPE_UINT64:
case INT64_FTYPE_INT64:
case INT64_FTYPE_V4SF:
case INT64_FTYPE_V2DF:
@@ -54586,6 +54705,9 @@ ix86_addr_space_zero_address_valid (addr_space_t as)
#undef TARGET_FOLD_BUILTIN
#define TARGET_FOLD_BUILTIN ix86_fold_builtin
+#undef TARGET_GIMPLE_FOLD_BUILTIN
+#define TARGET_GIMPLE_FOLD_BUILTIN ix86_gimple_fold_builtin
+
#undef TARGET_COMPARE_VERSION_PRIORITY
#define TARGET_COMPARE_VERSION_PRIORITY ix86_compare_version_priority
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 8bc1b8a6bcf..99a80d3d291 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -174,7 +174,11 @@
;; For CRC32 support
UNSPEC_CRC32
+ ;; For LZCNT suppoprt
+ UNSPEC_LZCNT
+
;; For BMI support
+ UNSPEC_TZCNT
UNSPEC_BEXTR
;; For BMI2 support
@@ -9680,7 +9684,7 @@
"ix86_expand_binary_operator (ASHIFT, <MODE>mode, operands); DONE;")
(define_insn "*ashl<mode>3_doubleword"
- [(set (match_operand:DWI 0 "register_operand" "=&r,r")
+ [(set (match_operand:DWI 0 "register_operand" "=&r,&r")
(ashift:DWI (match_operand:DWI 1 "reg_or_pm1_operand" "n,0")
(match_operand:QI 2 "nonmemory_operand" "<S>c,<S>c")))
(clobber (reg:CC FLAGS_REG))]
@@ -10313,7 +10317,7 @@
(set_attr "mode" "<MODE>")])
(define_insn_and_split "*<shift_insn><mode>3_doubleword"
- [(set (match_operand:DWI 0 "register_operand" "=r")
+ [(set (match_operand:DWI 0 "register_operand" "=&r")
(any_shiftrt:DWI (match_operand:DWI 1 "register_operand" "0")
(match_operand:QI 2 "nonmemory_operand" "<S>c")))
(clobber (reg:CC FLAGS_REG))]
@@ -10878,8 +10882,9 @@
[(set (match_dup 0)
(rotatert:SWI48 (match_dup 1) (match_dup 2)))]
{
- operands[2]
- = GEN_INT (GET_MODE_BITSIZE (<MODE>mode) - INTVAL (operands[2]));
+ int bitsize = GET_MODE_BITSIZE (<MODE>mode);
+
+ operands[2] = GEN_INT ((bitsize - INTVAL (operands[2])) % bitsize);
})
(define_split
@@ -10945,8 +10950,9 @@
[(set (match_dup 0)
(zero_extend:DI (rotatert:SI (match_dup 1) (match_dup 2))))]
{
- operands[2]
- = GEN_INT (GET_MODE_BITSIZE (SImode) - INTVAL (operands[2]));
+ int bitsize = GET_MODE_BITSIZE (SImode);
+
+ operands[2] = GEN_INT ((bitsize - INTVAL (operands[2])) % bitsize);
})
(define_split
@@ -12810,9 +12816,9 @@
(define_expand "ctz<mode>2"
[(parallel
- [(set (match_operand:SWI248 0 "register_operand")
- (ctz:SWI248
- (match_operand:SWI248 1 "nonimmediate_operand")))
+ [(set (match_operand:SWI48 0 "register_operand")
+ (ctz:SWI48
+ (match_operand:SWI48 1 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))])])
; False dependency happens when destination is only updated by tzcnt,
@@ -12860,8 +12866,8 @@
(set_attr "mode" "<MODE>")])
(define_insn "*ctz<mode>2"
- [(set (match_operand:SWI248 0 "register_operand" "=r")
- (ctz:SWI248 (match_operand:SWI248 1 "nonimmediate_operand" "rm")))
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (ctz:SWI48 (match_operand:SWI48 1 "nonimmediate_operand" "rm")))
(clobber (reg:CC FLAGS_REG))]
""
{
@@ -12886,15 +12892,78 @@
(const_string "0")))
(set_attr "mode" "<MODE>")])
+;; Version of tzcnt that is expanded from intrinsics. This version provides
+;; operand size as output when source operand is zero.
+
+(define_expand "bmi_tzcnt_<mode>"
+ [(parallel
+ [(set (match_operand:SWI248 0 "register_operand")
+ (unspec:SWI248
+ [(match_operand:SWI248 1 "nonimmediate_operand")]
+ UNSPEC_TZCNT))
+ (clobber (reg:CC FLAGS_REG))])]
+ "TARGET_BMI")
+
+; False dependency happens when destination is only updated by tzcnt,
+; lzcnt or popcnt. There is no false dependency when destination is
+; also used in source.
+(define_insn_and_split "*bmi_tzcnt_<mode>_falsedep_1"
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (unspec:SWI48
+ [(match_operand:SWI48 1 "nonimmediate_operand" "rm")]
+ UNSPEC_TZCNT))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI
+ && TARGET_AVOID_FALSE_DEP_FOR_BMI && optimize_function_for_speed_p (cfun)"
+ "#"
+ "&& reload_completed"
+ [(parallel
+ [(set (match_dup 0)
+ (unspec:SWI48 [(match_dup 1)] UNSPEC_TZCNT))
+ (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)
+ (clobber (reg:CC FLAGS_REG))])]
+{
+ if (!reg_mentioned_p (operands[0], operands[1]))
+ ix86_expand_clear (operands[0]);
+})
+
+(define_insn "*bmi_tzcnt_<mode>_falsedep"
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (unspec:SWI48
+ [(match_operand:SWI48 1 "nonimmediate_operand" "rm")]
+ UNSPEC_TZCNT))
+ (unspec [(match_operand:SWI48 2 "register_operand" "0")]
+ UNSPEC_INSN_FALSE_DEP)
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"
+ [(set_attr "type" "alu1")
+ (set_attr "prefix_0f" "1")
+ (set_attr "prefix_rep" "1")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "*bmi_tzcnt_<mode>"
+ [(set (match_operand:SWI248 0 "register_operand" "=r")
+ (unspec:SWI248
+ [(match_operand:SWI248 1 "nonimmediate_operand" "rm")]
+ UNSPEC_TZCNT))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_BMI"
+ "tzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"
+ [(set_attr "type" "alu1")
+ (set_attr "prefix_0f" "1")
+ (set_attr "prefix_rep" "1")
+ (set_attr "mode" "<MODE>")])
+
(define_expand "clz<mode>2"
[(parallel
- [(set (match_operand:SWI248 0 "register_operand")
- (minus:SWI248
+ [(set (match_operand:SWI48 0 "register_operand")
+ (minus:SWI48
(match_dup 2)
- (clz:SWI248 (match_operand:SWI248 1 "nonimmediate_operand"))))
+ (clz:SWI48 (match_operand:SWI48 1 "nonimmediate_operand"))))
(clobber (reg:CC FLAGS_REG))])
(parallel
- [(set (match_dup 0) (xor:SWI248 (match_dup 0) (match_dup 2)))
+ [(set (match_dup 0) (xor:SWI48 (match_dup 0) (match_dup 2)))
(clobber (reg:CC FLAGS_REG))])]
""
{
@@ -12908,9 +12977,9 @@
(define_expand "clz<mode>2_lzcnt"
[(parallel
- [(set (match_operand:SWI248 0 "register_operand")
- (clz:SWI248
- (match_operand:SWI248 1 "nonimmediate_operand")))
+ [(set (match_operand:SWI48 0 "register_operand")
+ (clz:SWI48
+ (match_operand:SWI48 1 "nonimmediate_operand")))
(clobber (reg:CC FLAGS_REG))])]
"TARGET_LZCNT")
@@ -12947,8 +13016,8 @@
(set_attr "mode" "<MODE>")])
(define_insn "*clz<mode>2_lzcnt"
- [(set (match_operand:SWI248 0 "register_operand" "=r")
- (clz:SWI248 (match_operand:SWI248 1 "nonimmediate_operand" "rm")))
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (clz:SWI48 (match_operand:SWI48 1 "nonimmediate_operand" "rm")))
(clobber (reg:CC FLAGS_REG))]
"TARGET_LZCNT"
"lzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"
@@ -12956,6 +13025,69 @@
(set_attr "type" "bitmanip")
(set_attr "mode" "<MODE>")])
+;; Version of lzcnt that is expanded from intrinsics. This version provides
+;; operand size as output when source operand is zero.
+
+(define_expand "lzcnt_<mode>"
+ [(parallel
+ [(set (match_operand:SWI248 0 "register_operand")
+ (unspec:SWI248
+ [(match_operand:SWI248 1 "nonimmediate_operand")]
+ UNSPEC_LZCNT))
+ (clobber (reg:CC FLAGS_REG))])]
+ "TARGET_LZCNT")
+
+; False dependency happens when destination is only updated by tzcnt,
+; lzcnt or popcnt. There is no false dependency when destination is
+; also used in source.
+(define_insn_and_split "*lzcnt_<mode>_falsedep_1"
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (unspec:SWI48
+ [(match_operand:SWI48 1 "nonimmediate_operand" "rm")]
+ UNSPEC_LZCNT))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_LZCNT
+ && TARGET_AVOID_FALSE_DEP_FOR_BMI && optimize_function_for_speed_p (cfun)"
+ "#"
+ "&& reload_completed"
+ [(parallel
+ [(set (match_dup 0)
+ (unspec:SWI48 [(match_dup 1)] UNSPEC_LZCNT))
+ (unspec [(match_dup 0)] UNSPEC_INSN_FALSE_DEP)
+ (clobber (reg:CC FLAGS_REG))])]
+{
+ if (!reg_mentioned_p (operands[0], operands[1]))
+ ix86_expand_clear (operands[0]);
+})
+
+(define_insn "*lzcnt_<mode>_falsedep"
+ [(set (match_operand:SWI48 0 "register_operand" "=r")
+ (unspec:SWI48
+ [(match_operand:SWI48 1 "nonimmediate_operand" "rm")]
+ UNSPEC_LZCNT))
+ (unspec [(match_operand:SWI48 2 "register_operand" "0")]
+ UNSPEC_INSN_FALSE_DEP)
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_LZCNT"
+ "lzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"
+ [(set_attr "type" "alu1")
+ (set_attr "prefix_0f" "1")
+ (set_attr "prefix_rep" "1")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "*lzcnt_<mode>"
+ [(set (match_operand:SWI248 0 "register_operand" "=r")
+ (unspec:SWI248
+ [(match_operand:SWI248 1 "nonimmediate_operand" "rm")]
+ UNSPEC_LZCNT))
+ (clobber (reg:CC FLAGS_REG))]
+ "TARGET_LZCNT"
+ "lzcnt{<imodesuffix>}\t{%1, %0|%0, %1}"
+ [(set_attr "type" "alu1")
+ (set_attr "prefix_0f" "1")
+ (set_attr "prefix_rep" "1")
+ (set_attr "mode" "<MODE>")])
+
;; BMI instructions.
(define_insn "*bmi_andn_<mode>"
[(set (match_operand:SWI48 0 "register_operand" "=r,r")
diff --git a/gcc/config/i386/lzcntintrin.h b/gcc/config/i386/lzcntintrin.h
index 413267ac21c..6d9d3b2c046 100644
--- a/gcc/config/i386/lzcntintrin.h
+++ b/gcc/config/i386/lzcntintrin.h
@@ -38,32 +38,32 @@
extern __inline unsigned short __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__lzcnt16 (unsigned short __X)
{
- return __builtin_clzs (__X);
+ return __builtin_ia32_lzcnt_u16 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__lzcnt32 (unsigned int __X)
{
- return __builtin_clz (__X);
+ return __builtin_ia32_lzcnt_u32 (__X);
}
extern __inline unsigned int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_lzcnt_u32 (unsigned int __X)
{
- return __builtin_clz (__X);
+ return __builtin_ia32_lzcnt_u32 (__X);
}
#ifdef __x86_64__
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
__lzcnt64 (unsigned long long __X)
{
- return __builtin_clzll (__X);
+ return __builtin_ia32_lzcnt_u64 (__X);
}
extern __inline unsigned long long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_lzcnt_u64 (unsigned long long __X)
{
- return __builtin_clzll (__X);
+ return __builtin_ia32_lzcnt_u64 (__X);
}
#endif
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index e1d826730fd..742d0f9b569 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -298,9 +298,23 @@ typedef struct GTY(()) machine_function
/* A bit-field declared as `int' forces `int' alignment for the struct. */
#define PCC_BITFIELD_TYPE_MATTERS 1
-/* No data type wants to be aligned rounder than this. */
+/* No data type wants to be aligned rounder than this. The long double
+ type has 16-byte alignment on the 64-bit target even though it was never
+ implemented in hardware. The software implementation only needs 8-byte
+ alignment. This matches the biggest alignment of the HP compilers. */
#define BIGGEST_ALIGNMENT (2 * BITS_PER_WORD)
+/* Alignment, in bits, a C conformant malloc implementation has to provide.
+ The HP-UX malloc implementation provides a default alignment of 8 bytes.
+ It should be 16 bytes on the 64-bit target since long double has 16-byte
+ alignment. It can be increased with mallopt but it's non critical since
+ long double was never implemented in hardware. The glibc implementation
+ currently provides 8-byte alignment. It should be 16 bytes since various
+ POSIX types such as pthread_mutex_t require 16-byte alignment. Again,
+ this is non critical since 16-byte alignment is no longer needed for
+ atomic operations. */
+#define MALLOC_ABI_ALIGNMENT (TARGET_SOM ? 64 : 128)
+
/* Get around hp-ux assembler bug, and make strcpy of constants fast. */
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
(TREE_CODE (EXP) == STRING_CST \
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index 2c52465ca8d..8ac0192844b 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -6249,6 +6249,21 @@
(set_attr "length" "4")])
(define_insn ""
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (plus:SI (mult:SI (match_operand:SI 2 "register_operand" "r")
+ (match_operand:SI 3 "mem_shadd_operand" ""))
+ (match_operand:SI 1 "register_operand" "r")))]
+ ""
+ "*
+{
+ int shift_val = exact_log2 (INTVAL (operands[3]));
+ operands[3] = GEN_INT (shift_val);
+ return \"{sh%o3addl %2,%1,%0|shladd,l %2,%o3,%1,%0}\";
+}"
+ [(set_attr "type" "binary")
+ (set_attr "length" "4")])
+
+(define_insn ""
[(set (match_operand:DI 0 "register_operand" "=r")
(plus:DI (ashift:DI (match_operand:DI 2 "register_operand" "r")
(match_operand:DI 3 "shadd_operand" ""))
@@ -6258,6 +6273,21 @@
[(set_attr "type" "binary")
(set_attr "length" "4")])
+(define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (plus:DI (mult:DI (match_operand:DI 2 "register_operand" "r")
+ (match_operand:DI 3 "mem_shadd_operand" ""))
+ (match_operand:DI 1 "register_operand" "r")))]
+ "TARGET_64BIT"
+ "*
+{
+ int shift_val = exact_log2 (INTVAL (operands[3]));
+ operands[3] = GEN_INT (shift_val);
+ return \"shladd,l %2,%o3,%1,%0\";
+}"
+ [(set_attr "type" "binary")
+ (set_attr "length" "4")])
+
(define_expand "ashlsi3"
[(set (match_operand:SI 0 "register_operand" "")
(ashift:SI (match_operand:SI 1 "lhs_lshift_operand" "")
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index b3d43701968..899ed626ded 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -3708,6 +3708,10 @@
(clobber (reg:CC CC_REGNUM))])]
"TARGET_Z10"
{
+ if (!IN_RANGE (INTVAL (operands[3]), 0, GET_MODE_BITSIZE (DImode) - 1)
+ || !IN_RANGE (INTVAL (operands[3]) + INTVAL (operands[2]), 1,
+ GET_MODE_BITSIZE (DImode)))
+ FAIL;
/* Starting with zEC12 there is risbgn not clobbering CC. */
if (TARGET_ZEC12)
{
@@ -3726,7 +3730,9 @@
(match_operand:GPR 1 "register_operand" "d")
(match_operand 2 "const_int_operand" "") ; size
(match_operand 3 "const_int_operand" "")))] ; start]
- "TARGET_ZEC12"
+ "TARGET_ZEC12
+ && IN_RANGE (INTVAL (operands[3]), 0, GET_MODE_BITSIZE (DImode) - 1)
+ && IN_RANGE (INTVAL (operands[3]) + INTVAL (operands[2]), 1, GET_MODE_BITSIZE (DImode))"
"risbgn\t%0,%1,64-%2,128+63,<bitsize>+%3+%2" ; dst, src, start, end, shift
[(set_attr "op_type" "RIE")])
@@ -3737,7 +3743,9 @@
(match_operand 2 "const_int_operand" "") ; size
(match_operand 3 "const_int_operand" ""))) ; start
(clobber (reg:CC CC_REGNUM))]
- "TARGET_Z10"
+ "TARGET_Z10
+ && IN_RANGE (INTVAL (operands[3]), 0, GET_MODE_BITSIZE (DImode) - 1)
+ && IN_RANGE (INTVAL (operands[3]) + INTVAL (operands[2]), 1, GET_MODE_BITSIZE (DImode))"
"risbg\t%0,%1,64-%2,128+63,<bitsize>+%3+%2" ; dst, src, start, end, shift
[(set_attr "op_type" "RIE")
(set_attr "z10prop" "z10_super_E1")])
diff --git a/gcc/config/sparc/sparc-c.c b/gcc/config/sparc/sparc-c.c
index d9f9c15d2e3..8af031299c4 100644
--- a/gcc/config/sparc/sparc-c.c
+++ b/gcc/config/sparc/sparc-c.c
@@ -29,7 +29,7 @@ sparc_target_macros (void)
{
builtin_define_std ("sparc");
- if (TARGET_64BIT)
+ if (TARGET_ARCH64)
{
cpp_assert (parse_in, "cpu=sparc64");
cpp_assert (parse_in, "machine=sparc64");
@@ -43,7 +43,7 @@ sparc_target_macros (void)
if (TARGET_VIS4)
{
cpp_define (parse_in, "__VIS__=0x400");
- cpp_define (parse_in, "__VIS__=0x400");
+ cpp_define (parse_in, "__VIS=0x400");
}
else if (TARGET_VIS3)
{
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index 2e8c2d03f01..e3b79d8bc9c 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -12270,14 +12270,13 @@ sparc_expand_vector_init (rtx target, rtx vals)
const machine_mode inner_mode = GET_MODE_INNER (mode);
const int n_elts = GET_MODE_NUNITS (mode);
int i, n_var = 0;
- bool all_same;
+ bool all_same = true;
rtx mem;
- all_same = true;
for (i = 0; i < n_elts; i++)
{
rtx x = XVECEXP (vals, 0, i);
- if (!CONSTANT_P (x))
+ if (!(CONST_SCALAR_INT_P (x) || CONST_DOUBLE_P (x) || CONST_FIXED_P (x)))
n_var++;
if (i > 0 && !rtx_equal_p (x, XVECEXP (vals, 0, 0)))
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index 6f9490c110b..7c8ea8c7d5f 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -248,12 +248,13 @@
(symbol_ref "TARGET_SPARCLET") (const_string "sparclet")]
(const_string "v7"))))
-(define_attr "cpu_feature" "none,fpu,fpunotv9,v9,vis,vis3,vis4" (const_string "none"))
+(define_attr "cpu_feature" "none,fpu,fpunotv9,v9,vis,vis3,vis4"
+ (const_string "none"))
(define_attr "enabled" ""
(cond [(eq_attr "cpu_feature" "none") (const_int 1)
(eq_attr "cpu_feature" "fpu") (symbol_ref "TARGET_FPU")
- (eq_attr "cpu_feature" "fpunotv9") (symbol_ref "TARGET_FPU && ! TARGET_V9")
+ (eq_attr "cpu_feature" "fpunotv9") (symbol_ref "TARGET_FPU && !TARGET_V9")
(eq_attr "cpu_feature" "v9") (symbol_ref "TARGET_V9")
(eq_attr "cpu_feature" "vis") (symbol_ref "TARGET_VIS")
(eq_attr "cpu_feature" "vis3") (symbol_ref "TARGET_VIS3")
@@ -478,8 +479,7 @@
(const_string "true")
] (const_string "false")))
-;; True if the instruction executes in the V3 pipeline, in M7 and
-;; later processors.
+;; True if the instruction executes in the V3 pipeline, in M7 and later processors.
(define_attr "v3pipe" "false,true" (const_string "false"))
(define_delay (eq_attr "type" "call")
@@ -1464,8 +1464,8 @@
fzeros\t%0
fones\t%0"
[(set_attr "type" "*,*,load,store,vismv,vismv,fpmove,fpload,fpstore,visl,visl")
- (set_attr "v3pipe" "*,*,*,*,true,true,*,*,*,true,true")
- (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")])
+ (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")
+ (set_attr "v3pipe" "*,*,*,*,true,true,*,*,*,true,true")])
(define_insn "*movsi_lo_sum"
[(set (match_operand:SI 0 "register_operand" "=r")
@@ -1630,10 +1630,10 @@
fzero\t%0
fone\t%0"
[(set_attr "type" "store,store,store,load,*,*,*,*,fpstore,fpload,*,*,fpmove,*,*,*,fpload,fpstore,visl,visl")
- (set_attr "v3pipe" "false, false, false, false,false,false,false,false,false,false,false,false,false,false,false,false,false,false, true, true")
(set_attr "length" "*,2,*,*,2,2,2,2,*,*,2,2,*,2,2,2,*,*,*,*")
(set_attr "fptype" "*,*,*,*,*,*,*,*,*,*,*,*,double,*,*,*,*,*,double,double")
- (set_attr "cpu_feature" "v9,*,*,*,*,*,*,*,fpu,fpu,fpu,fpu,v9,fpunotv9,vis3,vis3,fpu,fpu,vis,vis")])
+ (set_attr "cpu_feature" "v9,*,*,*,*,*,*,*,fpu,fpu,fpu,fpu,v9,fpunotv9,vis3,vis3,fpu,fpu,vis,vis")
+ (set_attr "v3pipe" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,true,true")])
(define_insn "*movdi_insn_sp64"
[(set (match_operand:DI 0 "nonimmediate_operand" "=r,r,r, m, r,*e,?*e,?*e,?W,b,b")
@@ -1654,9 +1654,9 @@
fzero\t%0
fone\t%0"
[(set_attr "type" "*,*,load,store,vismv,vismv,fpmove,fpload,fpstore,visl,visl")
- (set_attr "v3pipe" "*, *, *, *, *, *, *, *, *, true, true")
(set_attr "fptype" "*,*,*,*,*,*,double,*,*,double,double")
- (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")])
+ (set_attr "cpu_feature" "*,*,*,*,vis3,vis3,*,*,*,vis,vis")
+ (set_attr "v3pipe" "*,*,*,*,*,*,*,*,*,true,true")])
(define_expand "movdi_pic_label_ref"
[(set (match_dup 3) (high:DI
@@ -2218,8 +2218,8 @@
}
}
[(set_attr "type" "visl,visl,fpmove,*,*,*,vismv,vismv,fpload,load,fpstore,store")
- (set_attr "v3pipe" "true, true, *, *, *, *, true, true, *, *, *, *")
- (set_attr "cpu_feature" "vis,vis,fpu,*,*,*,vis3,vis3,fpu,*,fpu,*")])
+ (set_attr "cpu_feature" "vis,vis,fpu,*,*,*,vis3,vis3,fpu,*,fpu,*")
+ (set_attr "v3pipe" "true,true,*,*,*,*,true,true,*,*,*,*")])
;; The following 3 patterns build SFmode constants in integer registers.
@@ -2287,10 +2287,10 @@
#
#"
[(set_attr "type" "visl,visl,fpmove,*,*,*,fpload,store,fpstore,load,store,*,*,*,*")
- (set_attr "v3pipe" "true, true, *, *, *, *, *, *, *, *, *, *, *, *, *")
(set_attr "length" "*,*,*,2,2,2,*,*,*,*,*,2,2,2,2")
(set_attr "fptype" "double,double,double,*,*,*,*,*,*,*,*,*,*,*,*")
- (set_attr "cpu_feature" "vis,vis,v9,fpunotv9,vis3,vis3,fpu,v9,fpu,*,*,fpu,*,*,fpu")])
+ (set_attr "cpu_feature" "vis,vis,v9,fpunotv9,vis3,vis3,fpu,v9,fpu,*,*,fpu,*,*,fpu")
+ (set_attr "v3pipe" "true,true,*,*,*,*,*,*,*,*,*,*,*,*,*")])
(define_insn "*movdf_insn_sp64"
[(set (match_operand:DF 0 "nonimmediate_operand" "=b,b,e,*r, e, e,W, *r,*r, m,*r")
@@ -2311,10 +2311,10 @@
stx\t%r1, %0
#"
[(set_attr "type" "visl,visl,fpmove,vismv,vismv,load,store,*,load,store,*")
- (set_attr "v3pipe" "true, true, *, *, *, *, *, *, *, *, *")
(set_attr "length" "*,*,*,*,*,*,*,*,*,*,2")
(set_attr "fptype" "double,double,double,double,double,*,*,*,*,*,*")
- (set_attr "cpu_feature" "vis,vis,fpu,vis3,vis3,fpu,fpu,*,*,*,*")])
+ (set_attr "cpu_feature" "vis,vis,fpu,vis3,vis3,fpu,fpu,*,*,*,*")
+ (set_attr "v3pipe" "true,true,*,*,*,*,*,*,*,*,*")])
;; This pattern builds DFmode constants in integer registers.
(define_split
@@ -2993,8 +2993,8 @@
lduw\t%1, %0
movstouw\t%1, %0"
[(set_attr "type" "shift,load,*")
- (set_attr "v3pipe" "*,*,true")
- (set_attr "cpu_feature" "*,*,vis3")])
+ (set_attr "cpu_feature" "*,*,vis3")
+ (set_attr "v3pipe" "*,*,true")])
(define_insn_and_split "*zero_extendsidi2_insn_sp32"
[(set (match_operand:DI 0 "register_operand" "=r")
@@ -3308,9 +3308,9 @@
ldsw\t%1, %0
movstosw\t%1, %0"
[(set_attr "type" "shift,sload,*")
- (set_attr "v3pipe" "*,*,true")
(set_attr "us3load_type" "*,3cycle,*")
- (set_attr "cpu_feature" "*,*,vis3")])
+ (set_attr "cpu_feature" "*,*,vis3")
+ (set_attr "v3pipe" "*,*,true")])
;; Special pattern for optimizing bit-field compares. This is needed
@@ -7794,7 +7794,8 @@
(define_mode_iterator VM64 [V1DI V2SI V4HI V8QI])
(define_mode_iterator VMALL [V1SI V2HI V4QI V1DI V2SI V4HI V8QI])
-(define_mode_attr vbits [(V2SI "32") (V4HI "16") (V1SI "32s") (V2HI "16s") (V8QI "8")])
+(define_mode_attr vbits [(V2SI "32") (V4HI "16") (V1SI "32s") (V2HI "16s")
+ (V8QI "8")])
(define_mode_attr vconstr [(V1SI "f") (V2HI "f") (V4QI "f")
(V1DI "e") (V2SI "e") (V4HI "e") (V8QI "e")])
(define_mode_attr vfptype [(V1SI "single") (V2HI "single") (V4QI "single")
@@ -7829,8 +7830,8 @@
movstouw\t%1, %0
movwtos\t%1, %0"
[(set_attr "type" "visl,visl,vismv,fpload,fpstore,store,load,store,*,vismv,vismv")
- (set_attr "v3pipe" "true,true,true,false,false,false,false,false,false,true,true")
- (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,*,vis3,vis3")])
+ (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,*,vis3,vis3")
+ (set_attr "v3pipe" "true,true,true,*,*,*,*,*,*,true,true")])
(define_insn "*mov<VM64:mode>_insn_sp64"
[(set (match_operand:VM64 0 "nonimmediate_operand" "=e,e,e,e,m,m,*r, m,*r, e,*r")
@@ -7852,8 +7853,8 @@
movxtod\t%1, %0
mov\t%1, %0"
[(set_attr "type" "visl,visl,vismv,fpload,fpstore,store,load,store,vismv,vismv,*")
- (set_attr "v3pipe" "true, true, true, false, false, false, false, false, false, false, false")
- (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,vis3,vis3,*")])
+ (set_attr "cpu_feature" "vis,vis,vis,*,*,*,*,*,vis3,vis3,*")
+ (set_attr "v3pipe" "true,true,true,*,*,*,*,*,*,*,*")])
(define_insn "*mov<VM64:mode>_insn_sp32"
[(set (match_operand:VM64 0 "nonimmediate_operand" "=e,e,e,*r, f,e,m,m,U,T, o,*r")
@@ -7876,9 +7877,9 @@
#
#"
[(set_attr "type" "visl,visl,vismv,*,*,fpload,fpstore,store,load,store,*,*")
- (set_attr "v3pipe" "true, true, true, false, false, false, false, false, false, false, false, false")
(set_attr "length" "*,*,*,2,2,*,*,*,*,*,2,2")
- (set_attr "cpu_feature" "vis,vis,vis,vis3,vis3,*,*,*,*,*,*,*")])
+ (set_attr "cpu_feature" "vis,vis,vis,vis3,vis3,*,*,*,*,*,*,*")
+ (set_attr "v3pipe" "true,true,true,*,*,*,*,*,*,*,*,*")])
(define_split
[(set (match_operand:VM64 0 "memory_operand" "")
@@ -7973,8 +7974,8 @@
"TARGET_VIS"
"f<vlinsn><vlsuf>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
(define_insn "*not_<code><mode>3"
[(set (match_operand:VL 0 "register_operand" "=<vconstr>")
@@ -7983,8 +7984,8 @@
"TARGET_VIS"
"f<vlninsn><vlsuf>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
;; (ior (not (op1)) (not (op2))) is the canonical form of NAND.
(define_insn "*nand<mode>_vis"
@@ -7994,8 +7995,8 @@
"TARGET_VIS"
"fnand<vlsuf>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
(define_code_iterator vlnotop [ior and])
@@ -8006,8 +8007,8 @@
"TARGET_VIS"
"f<vlinsn>not1<vlsuf>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
(define_insn "*<code>_not2<mode>_vis"
[(set (match_operand:VL 0 "register_operand" "=<vconstr>")
@@ -8016,8 +8017,8 @@
"TARGET_VIS"
"f<vlinsn>not2<vlsuf>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
(define_insn "one_cmpl<mode>2"
[(set (match_operand:VL 0 "register_operand" "=<vconstr>")
@@ -8025,8 +8026,8 @@
"TARGET_VIS"
"fnot1<vlsuf>\t%1, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "<vfptype>")])
+ (set_attr "fptype" "<vfptype>")
+ (set_attr "v3pipe" "true")])
;; Hard to generate VIS instructions. We have builtins for these.
@@ -8392,8 +8393,8 @@
"TARGET_VIS"
"fcmp<code><GCM:gcm_name>\t%1, %2, %0"
[(set_attr "type" "visl")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "double")
+ (set_attr "v3pipe" "true")])
(define_insn "fpcmp<code>8<P:mode>_vis"
[(set (match_operand:P 0 "register_operand" "=r")
@@ -8650,8 +8651,8 @@
"TARGET_VIS3"
"pdistn\t%1, %2, %0"
[(set_attr "type" "pdistn")
- (set_attr "v3pipe" "true")
- (set_attr "fptype" "double")])
+ (set_attr "fptype" "double")
+ (set_attr "v3pipe" "true")])
(define_insn "fmean16_vis"
[(set (match_operand:V4HI 0 "register_operand" "=e")
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c7341d179a6..7b7fa876f1b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2016-11-05 Martin Sebor <msebor@redhat.com>
+
+ PR c++/78039
+ * class.c (diagnose_flexarrays): Avoid rejecting an invalid flexible
+ array member with a hard error when it is followed by another member
+ in a different struct, and instead issue just a pedantic warning.
+
2016-10-14 Martin Sebor <msebor@redhat.com>
PR c++/71912
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 01bca79e813..0935f6e10b4 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -6960,7 +6960,20 @@ diagnose_flexarrays (tree t, const flexmems_t *fmem)
location_t loc = DECL_SOURCE_LOCATION (fmem->array);
diagd = true;
- error_at (loc, msg, fmem->array, t);
+ /* For compatibility with GCC 6.2 and 6.1 reject with an error
+ a flexible array member of a plain struct that's followed
+ by another member only if they are both members of the same
+ struct. Otherwise, issue just a pedantic warning. See bug
+ 71921 for details. */
+ if (fmem->after[0]
+ && (!TYPE_BINFO (t)
+ || 0 == BINFO_N_BASE_BINFOS (TYPE_BINFO (t)))
+ && DECL_CONTEXT (fmem->array) != DECL_CONTEXT (fmem->after[0])
+ && !ANON_AGGR_TYPE_P (DECL_CONTEXT (fmem->array))
+ && !ANON_AGGR_TYPE_P (DECL_CONTEXT (fmem->after[0])))
+ pedwarn (loc, OPT_Wpedantic, msg, fmem->array, t);
+ else
+ error_at (loc, msg, fmem->array, t);
/* In the unlikely event that the member following the flexible
array member is declared in a different class, or the member
diff --git a/gcc/explow.c b/gcc/explow.c
index 5afd5530d1e..c59d0011f32 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -492,9 +492,8 @@ memory_address_addr_space (machine_mode mode, rtx x, addr_space_t as)
return x;
}
-/* If REF is a MEM with an invalid address, change it into a valid address.
- Pass through anything else unchanged. REF must be an unshared rtx and
- the function may modify it in-place. */
+/* Convert a mem ref into one with a valid memory address.
+ Pass through anything else unchanged. */
rtx
validize_mem (rtx ref)
@@ -506,7 +505,8 @@ validize_mem (rtx ref)
MEM_ADDR_SPACE (ref)))
return ref;
- return replace_equiv_address (ref, XEXP (ref, 0), true);
+ /* Don't alter REF itself, since that is probably a stack slot. */
+ return replace_equiv_address (ref, XEXP (ref, 0));
}
/* If X is a memory reference to a member of an object block, try rewriting
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 6396f5bae34..ffee7bfb863 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3787,11 +3787,11 @@ make_bit_field_ref (location_t loc, tree inner, tree orig_inner, tree type,
{
tree result, bftype;
- if (get_alias_set (inner) != get_alias_set (orig_inner))
+ alias_set_type iset = get_alias_set (orig_inner);
+ if (iset == 0 && get_alias_set (inner) != iset)
inner = fold_build2 (MEM_REF, TREE_TYPE (inner),
build_fold_addr_expr (inner),
- build_int_cst
- (reference_alias_ptr_type (orig_inner), 0));
+ build_int_cst (ptr_type_node, 0));
if (bitpos == 0 && !reversep)
{
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 15e6ea2505b..57673367489 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,108 @@
+2016-11-07 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78221
+ * arith.c (gfc_complex2real): Change gfc_warning_now to
+ gfc_warning.
+
+2016-11-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/69544
+ PR fortran/78178
+ * match.c (match_simple_where): Fill in locus for assigment
+ in simple WHERE statement.
+ (gfc_match_where): Likewise.
+
+2016-10-31 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/71902
+ * frontend-passes.c (realloc_string_callback): Also check for the
+ lhs being deferred. Name temporary variable "realloc_string".
+
+2016-10-30 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/67219
+ * arith.c (gfc_int2real): Change gfc_warning_now
+ to gfc_warning.
+ * primary.c (match_complex_constant): If there
+ is no comma, throw away any warning which might have
+ been issued by gfc_int2real.
+
+2016-10-28 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/71891
+ * symbol.c (gfc_type_compatible): Fix typo.
+
+2016-10-26 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/78092
+ * trans-intrinsic.c (gfc_conv_intrinsic_sizeof): Fix reference to an
+ array element of type CLASS.
+
+2016-10-26 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78108
+ * resolve.c (resolve_typebound_intrinsic_op): For submodules
+ suppress the error and return if the same procedure symbol
+ is added more than once to the interface.
+
+2016-10-24 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/71895
+ * interface.c (gfc_compare_derived_types): Convert gcc_assert()
+ to a gfc_internal_error() to prevent an ICE.
+
+2016-10-23 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/77763
+ * parse.c (parse_spec): Allow STRUCTURE in BLOCK DATA. Sort
+ case labels.
+
+2016-10-23 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/61420
+ PR fortran/78013
+ * resolve.c (resolve_variable): Obtain the typespec for a
+ variable expression, when the variable is a function result
+ that is a procedure pointer.
+
+2016-10-23 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78021
+ * gfc_compare_functions: Strings with different lengths in
+ argument lists compare unequal.
+
+2016-10-23 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ Backported from trunk
+ PR fortran/72832
+ * trans-expr.c (gfc_copy_class_to_class): Add generation of
+ runtime array bounds check.
+ * trans-intrinsic.c (gfc_conv_intrinsic_size): Add a crutch to
+ get the descriptor of a function returning a class object.
+ * trans-stmt.c (gfc_trans_allocate): Use the array spec on the
+ array to allocate instead of the array spec from source=.
+
+2016-10-17 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/77978
+ * match.c (gfc_match_stopcode): Fix error reporting for several
+ deficiencies in matching stop-codes.
+
+2016-10-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/77915
+ * frontend-passes.c (inline_matmul_assign): Return early if
+ inside a FORALL statement.
+
2016-10-11 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/77942
@@ -40,7 +145,7 @@
PR fortran/69514
* array.c (gfc_match_array_constructor): If type-spec is present,
- walk the array constructor performing possible conversions for
+ walk the array constructor performing possible conversions for
numeric types.
PR fortran/69867
@@ -95,7 +200,7 @@
* trans-common.c: Handle array elements in equivalence when
the lower and upper bounds of array spec are NULL.
- PR fortran/77429
+ PR fortran/77429
* dependency.c (gfc_check_dependency): Convert gcc_assert() to
a conditional and possible call to gfc_internal_error().
@@ -111,7 +216,7 @@
* intrinsic.c (add_functions): Use correct keyword.
PR fortran/77612
- * decl.c (char_len_param_value): Check parent namespace for
+ * decl.c (char_len_param_value): Check parent namespace for
seen_implicit_none.
PR fortran/77694
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
index 47a5504699f..e849f598df1 100644
--- a/gcc/fortran/arith.c
+++ b/gcc/fortran/arith.c
@@ -2072,11 +2072,11 @@ gfc_int2real (gfc_expr *src, int kind)
if (warn_conversion
&& wprecision_int_real (src->value.integer, result->value.real))
- gfc_warning_now (OPT_Wconversion, "Change of value in conversion "
- "from %qs to %qs at %L",
- gfc_typename (&src->ts),
- gfc_typename (&result->ts),
- &src->where);
+ gfc_warning (OPT_Wconversion, "Change of value in conversion "
+ "from %qs to %qs at %L",
+ gfc_typename (&src->ts),
+ gfc_typename (&result->ts),
+ &src->where);
return result;
}
@@ -2369,10 +2369,10 @@ gfc_complex2real (gfc_expr *src, int kind)
/* See if we discarded an imaginary part. */
if (mpfr_cmp_si (mpc_imagref (src->value.complex), 0) != 0)
{
- gfc_warning_now (w, "Non-zero imaginary part discarded "
- "in conversion from %qs to %qs at %L",
- gfc_typename(&src->ts), gfc_typename (&result->ts),
- &src->where);
+ gfc_warning (w, "Non-zero imaginary part discarded "
+ "in conversion from %qs to %qs at %L",
+ gfc_typename(&src->ts), gfc_typename (&result->ts),
+ &src->where);
did_warn = true;
}
diff --git a/gcc/fortran/dependency.c b/gcc/fortran/dependency.c
index 12e5d133151..a735a8caae8 100644
--- a/gcc/fortran/dependency.c
+++ b/gcc/fortran/dependency.c
@@ -226,9 +226,26 @@ gfc_dep_compare_functions (gfc_expr *e1, gfc_expr *e2, bool impure_ok)
if ((args1->expr == NULL) ^ (args2->expr == NULL))
return -2;
- if (args1->expr != NULL && args2->expr != NULL
- && gfc_dep_compare_expr (args1->expr, args2->expr) != 0)
- return -2;
+ if (args1->expr != NULL && args2->expr != NULL)
+ {
+ gfc_expr *e1, *e2;
+ e1 = args1->expr;
+ e2 = args2->expr;
+
+ if (gfc_dep_compare_expr (e1, e2) != 0)
+ return -2;
+
+ /* Special case: String arguments which compare equal can have
+ different lengths, which makes them different in calls to
+ procedures. */
+
+ if (e1->expr_type == EXPR_CONSTANT
+ && e1->ts.type == BT_CHARACTER
+ && e2->expr_type == EXPR_CONSTANT
+ && e2->ts.type == BT_CHARACTER
+ && e1->value.character.length != e2->value.character.length)
+ return -2;
+ }
args1 = args1->next;
args2 = args2->next;
diff --git a/gcc/fortran/frontend-passes.c b/gcc/fortran/frontend-passes.c
index 60c3a70524a..d26a8ab7325 100644
--- a/gcc/fortran/frontend-passes.c
+++ b/gcc/fortran/frontend-passes.c
@@ -164,19 +164,34 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
gfc_expr *expr1, *expr2;
gfc_code *co = *c;
gfc_expr *n;
+ gfc_ref *ref;
+ bool found_substr;
if (co->op != EXEC_ASSIGN)
return 0;
expr1 = co->expr1;
if (expr1->ts.type != BT_CHARACTER || expr1->rank != 0
- || !expr1->symtree->n.sym->attr.allocatable)
+ || !gfc_expr_attr(expr1).allocatable
+ || !expr1->ts.deferred)
return 0;
expr2 = gfc_discard_nops (co->expr2);
if (expr2->expr_type != EXPR_VARIABLE)
return 0;
+ found_substr = false;
+ for (ref = expr2->ref; ref; ref = ref->next)
+ {
+ if (ref->type == REF_SUBSTRING)
+ {
+ found_substr = true;
+ break;
+ }
+ }
+ if (!found_substr)
+ return 0;
+
if (!gfc_check_dependency (expr1, expr2, true))
return 0;
@@ -190,7 +205,7 @@ realloc_string_callback (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
current_code = c;
inserted_block = NULL;
changed_statement = NULL;
- n = create_var (expr2, "trim");
+ n = create_var (expr2, "realloc_string");
co->expr2 = n;
return 0;
}
@@ -2843,6 +2858,11 @@ inline_matmul_assign (gfc_code **c, int *walk_subtrees,
if (in_where)
return 0;
+ /* The BLOCKS generated for the temporary variables and FORALL don't
+ mix. */
+ if (forall_level > 0)
+ return 0;
+
/* For now don't do anything in OpenMP workshare, it confuses
its translation, which expects only the allowed statements in there.
We should figure out how to parallelize this eventually. */
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 5366aa8c0ad..91fd177d9f5 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -517,7 +517,8 @@ gfc_compare_derived_types (gfc_symbol *derived1, gfc_symbol *derived2)
if (derived1 == derived2)
return 1;
- gcc_assert (derived1 && derived2);
+ if (!derived1 || !derived2)
+ gfc_internal_error ("gfc_compare_derived_types: invalid derived type");
/* MAP and anonymous STRUCTURE types have internal names of the form
mM* and sS* (we can get away this this because source names are converted
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index f3a4a43a34c..eed3f618005 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -2725,20 +2725,92 @@ gfc_match_cycle (void)
}
-/* Match a number or character constant after an (ERROR) STOP or PAUSE
- statement. */
+/* Match a stop-code after an (ERROR) STOP or PAUSE statement. The
+ requirements for a stop-code differ in the standards.
+
+Fortran 95 has
+
+ R840 stop-stmt is STOP [ stop-code ]
+ R841 stop-code is scalar-char-constant
+ or digit [ digit [ digit [ digit [ digit ] ] ] ]
+
+Fortran 2003 matches Fortran 95 except R840 and R841 are now R849 and R850.
+Fortran 2008 has
+
+ R855 stop-stmt is STOP [ stop-code ]
+ R856 allstop-stmt is ALL STOP [ stop-code ]
+ R857 stop-code is scalar-default-char-constant-expr
+ or scalar-int-constant-expr
+
+For free-form source code, all standards contain a statement of the form:
+
+ A blank shall be used to separate names, constants, or labels from
+ adjacent keywords, names, constants, or labels.
+
+A stop-code is not a name, constant, or label. So, under Fortran 95 and 2003,
+
+ STOP123
+
+is valid, but it is invalid Fortran 2008. */
static match
gfc_match_stopcode (gfc_statement st)
{
- gfc_expr *e;
+ gfc_expr *e = NULL;
match m;
+ bool f95, f03;
- e = NULL;
+ /* Set f95 for -std=f95. */
+ f95 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
+ | GFC_STD_F2008_OBS);
+
+ /* Set f03 for -std=f2003. */
+ f03 = gfc_option.allow_std == (GFC_STD_F95_OBS | GFC_STD_F95 | GFC_STD_F77
+ | GFC_STD_F2008_OBS | GFC_STD_F2003);
+
+ /* Look for a blank between STOP and the stop-code for F2008 or later. */
+ if (gfc_current_form != FORM_FIXED && !(f95 || f03))
+ {
+ char c = gfc_peek_ascii_char ();
+
+ /* Look for end-of-statement. There is no stop-code. */
+ if (c == '\n' || c == '!' || c == ';')
+ goto done;
+
+ if (c != ' ')
+ {
+ gfc_error ("Blank required in %s statement near %C",
+ gfc_ascii_statement (st));
+ return MATCH_ERROR;
+ }
+ }
if (gfc_match_eos () != MATCH_YES)
{
- m = gfc_match_init_expr (&e);
+ int stopcode;
+ locus old_locus;
+
+ /* First look for the F95 or F2003 digit [...] construct. */
+ old_locus = gfc_current_locus;
+ m = gfc_match_small_int (&stopcode);
+ if (m == MATCH_YES && (f95 || f03))
+ {
+ if (stopcode < 0)
+ {
+ gfc_error ("STOP code at %C cannot be negative");
+ return MATCH_ERROR;
+ }
+
+ if (stopcode > 99999)
+ {
+ gfc_error ("STOP code at %C contains too many digits");
+ return MATCH_ERROR;
+ }
+ }
+
+ /* Reset the locus and now load gfc_expr. */
+ gfc_current_locus = old_locus;
+ m = gfc_match_expr (&e);
if (m == MATCH_ERROR)
goto cleanup;
if (m == MATCH_NO)
@@ -2779,6 +2851,22 @@ gfc_match_stopcode (gfc_statement st)
if (e != NULL)
{
+ gfc_simplify_expr (e, 0);
+
+ /* Test for F95 and F2003 style STOP stop-code. */
+ if (e->expr_type != EXPR_CONSTANT && (f95 || f03))
+ {
+ gfc_error ("STOP code at %L must be a scalar CHARACTER constant or "
+ "digit[digit[digit[digit[digit]]]]", &e->where);
+ goto cleanup;
+ }
+
+ /* Use the machinery for an initialization expression to reduce the
+ stop-code to a constant. */
+ gfc_init_expr_flag = true;
+ gfc_reduce_init_expr (e);
+ gfc_init_expr_flag = false;
+
if (!(e->ts.type == BT_CHARACTER || e->ts.type == BT_INTEGER))
{
gfc_error ("STOP code at %L must be either INTEGER or CHARACTER type",
@@ -2788,8 +2876,7 @@ gfc_match_stopcode (gfc_statement st)
if (e->rank != 0)
{
- gfc_error ("STOP code at %L must be scalar",
- &e->where);
+ gfc_error ("STOP code at %L must be scalar", &e->where);
goto cleanup;
}
@@ -2801,8 +2888,7 @@ gfc_match_stopcode (gfc_statement st)
goto cleanup;
}
- if (e->ts.type == BT_INTEGER
- && e->ts.kind != gfc_default_integer_kind)
+ if (e->ts.type == BT_INTEGER && e->ts.kind != gfc_default_integer_kind)
{
gfc_error ("STOP code at %L must be default integer KIND=%d",
&e->where, (int) gfc_default_integer_kind);
@@ -2810,6 +2896,8 @@ gfc_match_stopcode (gfc_statement st)
}
}
+done:
+
switch (st)
{
case ST_STOP:
@@ -6010,6 +6098,7 @@ match_simple_where (void)
c->next = XCNEW (gfc_code);
*c->next = new_st;
+ c->next->loc = gfc_current_locus;
gfc_clear_new_st ();
new_st.op = EXEC_WHERE;
@@ -6066,8 +6155,12 @@ gfc_match_where (gfc_statement *st)
c = gfc_get_code (EXEC_WHERE);
c->expr1 = expr;
+ /* Put in the assignment. It will not be processed by add_statement, so we
+ need to copy the location here. */
+
c->next = XCNEW (gfc_code);
*c->next = new_st;
+ c->next->loc = gfc_current_locus;
gfc_clear_new_st ();
new_st.op = EXEC_WHERE;
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 3dd25397c4d..49da3d44b1c 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -3559,17 +3559,18 @@ loop:
/* Fortran 2008, C1116. */
switch (st)
{
- case ST_DATA_DECL:
+ case ST_ATTR_DECL:
case ST_COMMON:
case ST_DATA:
- case ST_TYPE:
+ case ST_DATA_DECL:
+ case ST_DERIVED_DECL:
case ST_END_BLOCK_DATA:
- case ST_ATTR_DECL:
case ST_EQUIVALENCE:
- case ST_PARAMETER:
case ST_IMPLICIT:
case ST_IMPLICIT_NONE:
- case ST_DERIVED_DECL:
+ case ST_PARAMETER:
+ case ST_STRUCTURE_DECL:
+ case ST_TYPE:
case ST_USE:
break;
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index c2faa0f3e10..c9bb223ec1c 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1353,6 +1353,10 @@ match_complex_constant (gfc_expr **result)
if (gfc_match_char (',') == MATCH_NO)
{
+ /* It is possible that gfc_int2real issued a warning when
+ converting an integer to real. Throw this away here. */
+
+ gfc_clear_warning ();
gfc_pop_error (&old_error);
m = MATCH_NO;
goto cleanup;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 34998554706..ea0284fa9ef 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5105,6 +5105,11 @@ resolve_variable (gfc_expr *e)
if (sym->ts.type != BT_UNKNOWN)
gfc_variable_attr (e, &e->ts);
+ else if (sym->attr.flavor == FL_PROCEDURE
+ && sym->attr.function && sym->result
+ && sym->result->ts.type != BT_UNKNOWN
+ && sym->result->attr.proc_pointer)
+ e->ts = sym->result->ts;
else
{
/* Must be a simple variable reference. */
@@ -12522,7 +12527,17 @@ resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
&& p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
{
gfc_interface *head, *intr;
- if (!gfc_check_new_interface (derived->ns->op[op], target_proc, p->where))
+
+ /* Preempt 'gfc_check_new_interface' for submodules, where the
+ mechanism for handling module procedures winds up resolving
+ operator interfaces twice and would otherwise cause an error. */
+ for (intr = derived->ns->op[op]; intr; intr = intr->next)
+ if (intr->sym == target_proc
+ && target_proc->attr.used_in_submodule)
+ return true;
+
+ if (!gfc_check_new_interface (derived->ns->op[op],
+ target_proc, p->where))
return false;
head = derived->ns->op[op];
intr = gfc_get_interface ();
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 0ee7decffd4..050c281335f 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -4861,7 +4861,7 @@ gfc_type_compatible (gfc_typespec *ts1, gfc_typespec *ts2)
&& !is_union1 && !is_union2)
return (ts1->type == ts2->type);
- if ((is_derived1 && is_derived2) || (is_union1 && is_union1))
+ if ((is_derived1 && is_derived2) || (is_union1 && is_union2))
return gfc_compare_derived_types (ts1->u.derived, ts2->u.derived);
if (is_derived1 && is_class2)
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 18358a4e030..6b61b16f969 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1166,6 +1166,7 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems, bool unlimited)
stmtblock_t body;
stmtblock_t ifbody;
gfc_loopinfo loop;
+ tree orig_nelems = nelems; /* Needed for bounds check. */
gfc_init_block (&body);
tmp = fold_build2_loc (input_location, MINUS_EXPR,
@@ -1193,6 +1194,31 @@ gfc_copy_class_to_class (tree from, tree to, tree nelems, bool unlimited)
}
vec_safe_push (args, to_ref);
+ /* Add bounds check. */
+ if ((gfc_option.rtcheck & GFC_RTCHECK_BOUNDS) > 0 && is_from_desc)
+ {
+ char *msg;
+ const char *name = "<<unknown>>";
+ tree from_len;
+
+ if (DECL_P (to))
+ name = (const char *)(DECL_NAME (to)->identifier.id.str);
+
+ from_len = gfc_conv_descriptor_size (from_data, 1);
+ tmp = fold_build2_loc (input_location, NE_EXPR,
+ boolean_type_node, from_len, orig_nelems);
+ msg = xasprintf ("Array bound mismatch for dimension %d "
+ "of array '%s' (%%ld/%%ld)",
+ 1, name);
+
+ gfc_trans_runtime_check (true, false, tmp, &body,
+ &gfc_current_locus, msg,
+ fold_convert (long_integer_type_node, orig_nelems),
+ fold_convert (long_integer_type_node, from_len));
+
+ free (msg);
+ }
+
tmp = build_call_vec (fcn_type, fcn, args);
/* Build the body of the loop. */
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 1aaf4e256bb..fea26d15d0f 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -5815,9 +5815,20 @@ gfc_conv_intrinsic_size (gfc_se * se, gfc_expr * expr)
if (actual->expr->ts.type == BT_CLASS)
gfc_add_class_array_ref (actual->expr);
- argse.want_pointer = 1;
argse.data_not_needed = 1;
- gfc_conv_expr_descriptor (&argse, actual->expr);
+ if (gfc_is_alloc_class_array_function (actual->expr))
+ {
+ /* For functions that return a class array conv_expr_descriptor is not
+ able to get the descriptor right. Therefore this special case. */
+ gfc_conv_expr_reference (&argse, actual->expr);
+ argse.expr = gfc_build_addr_expr (NULL_TREE,
+ gfc_class_data_get (argse.expr));
+ }
+ else
+ {
+ argse.want_pointer = 1;
+ gfc_conv_expr_descriptor (&argse, actual->expr);
+ }
gfc_add_block_to_block (&se->pre, &argse.pre);
gfc_add_block_to_block (&se->post, &argse.post);
arg1 = gfc_evaluate_now (argse.expr, &se->pre);
@@ -5967,7 +5978,9 @@ gfc_conv_intrinsic_sizeof (gfc_se *se, gfc_expr *expr)
TREE_OPERAND (argse.expr, 0), 0)))
|| GFC_DECL_CLASS (TREE_OPERAND (argse.expr, 0)))))
byte_size = gfc_class_vtab_size_get (TREE_OPERAND (argse.expr, 0));
- else if (arg->rank > 0)
+ else if (arg->rank > 0
+ || (arg->rank == 0
+ && arg->ref && arg->ref->type == REF_COMPONENT))
/* The scalarizer added an additional temp. To get the class' vptr
one has to look at the original backend_decl. */
byte_size = gfc_class_vtab_size_get (
diff --git a/gcc/fortran/trans-stmt.c b/gcc/fortran/trans-stmt.c
index 727d72f6095..dcf17694920 100644
--- a/gcc/fortran/trans-stmt.c
+++ b/gcc/fortran/trans-stmt.c
@@ -5476,7 +5476,8 @@ gfc_trans_allocate (gfc_code * code)
desc = tmp;
tmp = gfc_class_data_get (tmp);
}
- e3_is = E3_DESC;
+ if (code->ext.alloc.arr_spec_from_expr3)
+ e3_is = E3_DESC;
}
else
desc = !is_coarray ? se.expr
diff --git a/gcc/gcov.c b/gcc/gcov.c
index 417b4f42e71..50061c7d56e 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -725,7 +725,7 @@ process_file (const char *file_name)
fns = fn->next;
fn->next = NULL;
- if (fn->counts)
+ if (fn->counts || no_data_file)
{
unsigned src = fn->src;
unsigned line = fn->line;
diff --git a/gcc/gimple-ssa-strength-reduction.c b/gcc/gimple-ssa-strength-reduction.c
index 46ee7a75b76..479ae731b0a 100644
--- a/gcc/gimple-ssa-strength-reduction.c
+++ b/gcc/gimple-ssa-strength-reduction.c
@@ -2155,35 +2155,41 @@ create_add_on_incoming_edge (slsr_cand_t c, tree basis_name,
basis_type = TREE_TYPE (basis_name);
lhs = make_temp_ssa_name (basis_type, NULL, "slsr");
+ /* Occasionally people convert integers to pointers without a
+ cast, leading us into trouble if we aren't careful. */
+ enum tree_code plus_code
+ = POINTER_TYPE_P (basis_type) ? POINTER_PLUS_EXPR : PLUS_EXPR;
+
if (known_stride)
{
tree bump_tree;
- enum tree_code code = PLUS_EXPR;
+ enum tree_code code = plus_code;
widest_int bump = increment * wi::to_widest (c->stride);
- if (wi::neg_p (bump))
+ if (wi::neg_p (bump) && !POINTER_TYPE_P (basis_type))
{
code = MINUS_EXPR;
bump = -bump;
}
- bump_tree = wide_int_to_tree (basis_type, bump);
+ tree stride_type = POINTER_TYPE_P (basis_type) ? sizetype : basis_type;
+ bump_tree = wide_int_to_tree (stride_type, bump);
new_stmt = gimple_build_assign (lhs, code, basis_name, bump_tree);
}
else
{
int i;
- bool negate_incr = (!address_arithmetic_p && wi::neg_p (increment));
+ bool negate_incr = !POINTER_TYPE_P (basis_type) && wi::neg_p (increment);
i = incr_vec_index (negate_incr ? -increment : increment);
gcc_assert (i >= 0);
if (incr_vec[i].initializer)
{
- enum tree_code code = negate_incr ? MINUS_EXPR : PLUS_EXPR;
+ enum tree_code code = negate_incr ? MINUS_EXPR : plus_code;
new_stmt = gimple_build_assign (lhs, code, basis_name,
incr_vec[i].initializer);
}
else if (increment == 1)
- new_stmt = gimple_build_assign (lhs, PLUS_EXPR, basis_name, c->stride);
+ new_stmt = gimple_build_assign (lhs, plus_code, basis_name, c->stride);
else if (increment == -1)
new_stmt = gimple_build_assign (lhs, MINUS_EXPR, basis_name,
c->stride);
@@ -2501,13 +2507,13 @@ record_increment (slsr_cand_t c, widest_int increment, bool is_phi_adjust)
/* Optimistically record the first occurrence of this increment
as providing an initializer (if it does); we will revise this
opinion later if it doesn't dominate all other occurrences.
- Exception: increments of -1, 0, 1 never need initializers;
+ Exception: increments of 0, 1 never need initializers;
and phi adjustments don't ever provide initializers. */
if (c->kind == CAND_ADD
&& !is_phi_adjust
&& c->index == increment
&& (wi::gts_p (increment, 1)
- || wi::lts_p (increment, -1))
+ || wi::lts_p (increment, 0))
&& (gimple_assign_rhs_code (c->cand_stmt) == PLUS_EXPR
|| gimple_assign_rhs_code (c->cand_stmt) == POINTER_PLUS_EXPR))
{
@@ -2818,10 +2824,9 @@ analyze_increments (slsr_cand_t first_dep, machine_mode mode, bool speed)
else if (incr == 0
|| incr == 1
|| (incr == -1
- && (gimple_assign_rhs_code (first_dep->cand_stmt)
- != POINTER_PLUS_EXPR)))
+ && !POINTER_TYPE_P (first_dep->cand_type)))
incr_vec[i].cost = COST_NEUTRAL;
-
+
/* FORNOW: If we need to add an initializer, give up if a cast from
the candidate's type to its stride's type can lose precision.
This could eventually be handled better by expressly retaining the
@@ -3108,7 +3113,7 @@ insert_initializers (slsr_cand_t c)
if (!profitable_increment_p (i)
|| incr == 1
|| (incr == -1
- && gimple_assign_rhs_code (c->cand_stmt) != POINTER_PLUS_EXPR)
+ && (!POINTER_TYPE_P (lookup_cand (c->basis)->cand_type)))
|| incr == 0)
continue;
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 7857a5edcc2..80ac0498b48 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -4189,24 +4189,23 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
if (ret == GS_ERROR)
return GS_ERROR;
- else if (want_value)
+ /* If we have gimplified both sides of the initializer but have
+ not emitted an assignment, do so now. */
+ if (*expr_p)
+ {
+ tree lhs = TREE_OPERAND (*expr_p, 0);
+ tree rhs = TREE_OPERAND (*expr_p, 1);
+ gassign *init = gimple_build_assign (lhs, rhs);
+ gimplify_seq_add_stmt (pre_p, init);
+ }
+ if (want_value)
{
*expr_p = object;
return GS_OK;
}
else
{
- /* If we have gimplified both sides of the initializer but have
- not emitted an assignment, do so now. */
- if (*expr_p)
- {
- tree lhs = TREE_OPERAND (*expr_p, 0);
- tree rhs = TREE_OPERAND (*expr_p, 1);
- gassign *init = gimple_build_assign (lhs, rhs);
- gimplify_seq_add_stmt (pre_p, init);
- *expr_p = NULL;
- }
-
+ *expr_p = NULL;
return GS_ALL_DONE;
}
}
diff --git a/gcc/incpath.c b/gcc/incpath.c
index ea40f4a9323..952d5c4727d 100644
--- a/gcc/incpath.c
+++ b/gcc/incpath.c
@@ -253,8 +253,9 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
if (stat (cur->name, &st))
{
- /* Dirs that don't exist are silently ignored, unless verbose. */
- if (errno != ENOENT)
+ /* Dirs that don't exist or have denied permissions are
+ silently ignored, unless verbose. */
+ if ((errno != ENOENT) && (errno != EPERM))
cpp_errno (pfile, CPP_DL_ERROR, cur->name);
else
{
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 3c04b5abc32..8a18c2be194 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -1185,11 +1185,12 @@ sem_function::merge (sem_item *alias_item)
fprintf (dump_file,
"Wrapper cannot be created because of COMDAT\n");
}
- else if (DECL_STATIC_CHAIN (alias->decl))
+ else if (DECL_STATIC_CHAIN (alias->decl)
+ || DECL_STATIC_CHAIN (original->decl))
{
if (dump_file)
fprintf (dump_file,
- "Can not create wrapper of nested functions.\n");
+ "Cannot create wrapper of nested function.\n");
}
/* TODO: We can also deal with variadic functions never calling
VA_START. */
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 152230c3270..cb3510c5d48 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,12 @@
+2016-11-02 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-10-31 Richard Biener <rguenther@suse.de>
+
+ PR lto/78129
+ * lto.c (do_whole_program_analysis): Bail out after errors
+ from WPA analysis.
+
2016-08-22 Release Manager
* GCC 6.2.0 released.
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index af735cb1793..0494b8bf6aa 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -3099,6 +3099,10 @@ do_whole_program_analysis (void)
execute_ipa_pass_list (g->get_passes ()->all_regular_ipa_passes);
+ /* When WPA analysis raises errors, do not bother to output anything. */
+ if (seen_error ())
+ return;
+
if (symtab->dump_file)
{
fprintf (symtab->dump_file, "Optimized ");
diff --git a/gcc/po/ChangeLog b/gcc/po/ChangeLog
index 0c37488ff45..ac46d9d77b5 100644
--- a/gcc/po/ChangeLog
+++ b/gcc/po/ChangeLog
@@ -1,3 +1,23 @@
+2016-11-12 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po: Update.
+
+2016-11-11 Joseph Myers <joseph@codesourcery.com>
+
+ * fr.po: Update.
+
+2016-11-07 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po: Update.
+
+2016-11-05 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po: Update.
+
+2016-11-01 Joseph Myers <joseph@codesourcery.com>
+
+ * es.po: Update.
+
2016-10-10 Joseph Myers <joseph@codesourcery.com>
* sv.po: Update.
diff --git a/gcc/po/es.po b/gcc/po/es.po
index 5049cc3c407..7a650ff048d 100644
--- a/gcc/po/es.po
+++ b/gcc/po/es.po
@@ -1,22 +1,46 @@
# Mensajes en español para gcc-4.7.2.
-# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2016 Free Software Foundation, Inc.
# This file is distributed under the same license as the gcc package.
# Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+# Antonio Ceballos Roa <aceballos@gmail.com>, 2016
#
# Agradezco a Juan Cuquejo Mira por sus comentarios sobre esta traducción
#
+# Glosario
+#
+# array - TBD
+# asan - asan
+# bug - error
+# callback - callback
+# cse - TBD
+# demangled - mutilado
+# hardware - hardware
+# hotness - calentura
+# insns - TBD
+# instruction - instrucción
+# iv optimization - optimización iv
+# omp (OpenMP) - omp
+# OS - S.O.
+# reallocate - reubicar
+# report - informe TODO
+# scheduler - planificador
+# SSA - SSA
+# statement - sentencia
+# ubsan - ubsan
+#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 4.7.2\n"
+"Project-Id-Version: gcc 6.2.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-08-19 21:03+0000\n"
-"PO-Revision-Date: 2012-09-24 13:50-0500\n"
-"Last-Translator: Cristian Othón Martínez Vera <cfuga@cfuga.mx>\n"
-"Language-Team: Spanish <es@li.org>\n"
+"PO-Revision-Date: 2016-11-12 12:35+0100\n"
+"Last-Translator: Antonio Ceballos <aceballos@gmail.com>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cfgrtl.c:2656
@@ -120,24 +144,18 @@ msgid "compilation terminated due to -fmax-errors=%u.\n"
msgstr "compilación terminada debido a -fmax-errors=%u.\n"
#: diagnostic.c:481
-#, fuzzy, c-format
-#| msgid ""
-#| "Please submit a full bug report,\n"
-#| "with preprocessed source if appropriate.\n"
-#| "See %s for instructions.\n"
+#, c-format
msgid ""
"Please submit a full bug report,\n"
"with preprocessed source if appropriate.\n"
msgstr ""
-"Por favor envíe un reporte completo de bichos,\n"
+"Por favor, envíe un informe completo de errores,\n"
"con el código preprocesado si es apropiado.\n"
-"Vea %s para más instrucciones.\n"
#: diagnostic.c:487
-#, fuzzy, c-format
-#| msgid "Use fp double instructions"
+#, c-format
msgid "See %s for instructions.\n"
-msgstr "Usa instrucciones fp double"
+msgstr "Véase %s para instrucciones.\n"
#: diagnostic.c:496
#, c-format
@@ -285,19 +303,19 @@ msgstr "Opciones:\n"
#, fuzzy
#| msgid " -pass-exit-codes Exit with highest error code from a phase\n"
msgid " -pass-exit-codes Exit with highest error code from a phase.\n"
-msgstr " -pass-exit-codes Sale con el código de error más alto de una fase\n"
+msgstr " -pass-exit-codes Sale con el código de error más alto de una fase.\n"
#: gcc.c:3385
#, fuzzy
#| msgid " --help Display this information\n"
msgid " --help Display this information.\n"
-msgstr " --help Muestra esta información\n"
+msgstr " --help Muestra esta información.\n"
#: gcc.c:3386
#, fuzzy
#| msgid " --target-help Display target specific command line options\n"
msgid " --target-help Display target specific command line options.\n"
-msgstr " --target-help Muestra opciones de línea de órdenes específicas del objetivo\n"
+msgstr " --target-help Muestra opciones de línea de órdenes específicas del objetivo.\n"
#: gcc.c:3387
#, fuzzy
@@ -627,12 +645,12 @@ msgstr "controlador gcc versión %s %sejecutando gcc versión %s\n"
#: gcc.c:6683 gcc.c:6895
#, c-format
msgid "The bug is not reproducible, so it is likely a hardware or OS problem.\n"
-msgstr ""
+msgstr "El error no es repetible, por lo que probablemente sea un problema de hardware o de S.O.\n"
#: gcc.c:6819
#, c-format
msgid "Preprocessed source stored into %s file, please attach this to your bugreport.\n"
-msgstr ""
+msgstr "Fuente preprocesada almacenada en el fichero %s; por favor, adjúntelo a su informe de errores.\n"
#: gcc.c:7761
#, c-format
@@ -656,7 +674,7 @@ msgid ""
"For bug reporting instructions, please see:\n"
msgstr ""
"\n"
-"Para instrucciones de reporte de bichos, por favor vea:\n"
+"Para instrucciones de informe de errores, por favor vea:\n"
#: gcc.c:7899 gcov-tool.c:525
#, c-format
@@ -723,111 +741,106 @@ msgstr ""
#: gcov-tool.c:166
#, c-format
msgid " merge [options] <dir1> <dir2> Merge coverage file contents\n"
-msgstr ""
+msgstr " merge [opciones] <dir1> <dir2> Mezcla el contenido del fichero de cobertura\n"
#: gcov-tool.c:167 gcov-tool.c:261 gcov-tool.c:417
-#, fuzzy, c-format
-#| msgid " -v, --version Print version number, then exit\n"
+#, c-format
msgid " -v, --verbose Verbose mode\n"
-msgstr " -v, --version Muestra el número de versión, y finaliza\n"
+msgstr " -v, --verbose Modo expresivo\n"
#: gcov-tool.c:168 gcov-tool.c:262
-#, fuzzy, c-format
-#| msgid " -n, --no-output Do not create an output file\n"
+#, c-format
msgid " -o, --output <dir> Output directory\n"
-msgstr " -n, --no-output No crea un fichero de salida\n"
+msgstr " -o, --output <dir> Directorio de salida\n"
#: gcov-tool.c:169
#, c-format
msgid " -w, --weight <w1,w2> Set weights (float point values)\n"
-msgstr ""
+msgstr " -w, --weight <p1,p2> Establece los pesos (valores de coma flotante)\n"
#: gcov-tool.c:185
#, c-format
msgid "Merge subcomand usage:"
-msgstr ""
+msgstr "Modo de empleo de la suborden de mezcla:"
#: gcov-tool.c:260
#, c-format
msgid " rewrite [options] <dir> Rewrite coverage file contents\n"
-msgstr ""
+msgstr " rewrite [opciones] <dir> Reescribe el contenido del fichero de cobertura\n"
#: gcov-tool.c:263
#, c-format
msgid " -s, --scale <float or simple-frac> Scale the profile counters\n"
-msgstr ""
+msgstr " -s, --scale <float o frac-simple> Escala los contadores de perfil\n"
#: gcov-tool.c:264
#, c-format
msgid " -n, --normalize <long long> Normalize the profile\n"
-msgstr ""
+msgstr " -n, --normalize <long long> Normaliza el perfil\n"
#: gcov-tool.c:281
#, c-format
msgid "Rewrite subcommand usage:"
-msgstr ""
+msgstr "Modo de empleo de la suborden de reescritura:"
#: gcov-tool.c:326
#, c-format
msgid "scaling cannot co-exist with normalization, skipping\n"
-msgstr ""
+msgstr "escalado y normalización no pueden coexistir; se omite\n"
#: gcov-tool.c:339 gcov-tool.c:349
#, c-format
msgid "incorrect format in scaling, using 1/1\n"
-msgstr ""
+msgstr "formato de escalado incorrecto; se utiliza 1/1\n"
#: gcov-tool.c:359
#, c-format
msgid "normalization cannot co-exist with scaling\n"
-msgstr ""
+msgstr "normalización y escalado no pueden coexistir\n"
#: gcov-tool.c:416
#, c-format
msgid " overlap [options] <dir1> <dir2> Compute the overlap of two profiles\n"
-msgstr ""
+msgstr " overlap [opciones] <dir1> <dir2> Calcula el solapamiento de dos perfiles\n"
#: gcov-tool.c:418
-#, fuzzy, c-format
-#| msgid " -h, --help Print this help, then exit\n"
+#, c-format
msgid " -h, --hotonly Only print info for hot objects/functions\n"
-msgstr " -h, --help Muestra esta información, y finaliza\n"
+msgstr " -h, --hotonly Solo imprime información sobre objetos y funciones calientes\n"
#: gcov-tool.c:419
-#, fuzzy, c-format
-#| msgid " -p Enable function profiling\n"
+#, c-format
msgid " -f, --function Print function level info\n"
-msgstr " -p Activar el análisis de perfil de funciones\n"
+msgstr " -f, --function Imprime información sobre el nivel de funciones\n"
#: gcov-tool.c:420
-#, fuzzy, c-format
-#| msgid " -h, --help Print this help, then exit\n"
+#, c-format
msgid " -F, --fullname Print full filename\n"
-msgstr " -h, --help Muestra esta información, y finaliza\n"
+msgstr " -F, --fullname Imprime el nombre de fichero completo\n"
#: gcov-tool.c:421
-#, fuzzy, c-format
-#| msgid " -h, --help Print this help, then exit\n"
+#, c-format
msgid " -o, --object Print object level info\n"
-msgstr " -h, --help Muestra esta información, y finaliza\n"
+msgstr " -o, --object Imprime información sobre el nivel de objetos\n"
#: gcov-tool.c:422
#, c-format
msgid " -t <float>, --hot_threshold <float> Set the threshold for hotness\n"
-msgstr ""
+msgstr " -t <float>, --hot_threshold <float> Establece el umbral de calentura\n"
#: gcov-tool.c:442
#, c-format
msgid "Overlap subcomand usage:"
-msgstr ""
+msgstr "Modo de empleo de la suborden de solapamiento:"
#: gcov-tool.c:508
-#, fuzzy, c-format
-#| msgid "Usage: %s [OPTIONS]... CLASSNAMEmain [OUTFILE]\n"
+#, c-format
msgid ""
"Usage: %s [OPTION]... SUB_COMMAND [OPTION]...\n"
"\n"
-msgstr "Modo de empleo: %s [OPCIONES]... NOMBRECLASEmain [FICHERO-SALIDA]\n"
+msgstr ""
+"Modo de empleo: %s [OPCIÓN]... SUB_ORDEN [OPCIÓN]...\n"
+"\n"
#: gcov-tool.c:509
#, c-format
@@ -835,6 +848,8 @@ msgid ""
"Offline tool to handle gcda counts\n"
"\n"
msgstr ""
+"Herramienta «offline» para manejar contadores de gcda\n"
+"\n"
#: gcov-tool.c:510
#, fuzzy, c-format
@@ -856,7 +871,7 @@ msgid ""
"%s.\n"
msgstr ""
"\n"
-"Para instrucciones de reporte de bichos, por favor vea:\n"
+"Para instrucciones de informe de errores, por favor vea:\n"
"%s.\n"
#: gcov-tool.c:526
@@ -936,7 +951,7 @@ msgstr " -f, --function-summaries Muestra sumarios para cada función\n"
#: gcov.c:481
#, c-format
msgid " -i, --intermediate-format Output .gcov file in intermediate text format\n"
-msgstr ""
+msgstr " -t, --intermediate-format Fichero de salida .gcov en formato de texto intermedio\n"
#: gcov.c:482
#, c-format
@@ -950,7 +965,7 @@ msgstr ""
#: gcov.c:484
#, c-format
msgid " -m, --demangled-names Output demangled function names\n"
-msgstr ""
+msgstr " -m, --demangled-names Nombres de función mutilados de salida\n"
#: gcov.c:485
#, c-format
@@ -1327,30 +1342,27 @@ msgstr "no se pueden generar recargas para:"
#. What to print when a switch has no documentation.
#: opts.c:184
-#, fuzzy
-#| msgid "This switch lacks documentation"
msgid "This option lacks documentation."
-msgstr "Esta opción carece de documentación"
+msgstr "Esta opción carece de documentación."
#: opts.c:185
msgid "Uses of this option are diagnosed."
-msgstr ""
+msgstr "Los usos de esta opción están diagnosticados."
#: opts.c:1061
#, c-format
msgid "default %d minimum %d maximum %d"
-msgstr ""
+msgstr "predeterminado %d mínimo %d máximo %d"
#: opts.c:1128
#, c-format
msgid "Same as %s. Use the latter option instead."
-msgstr ""
+msgstr "Igual que %s. Utilice, en cambio, la última opción."
#: opts.c:1136
-#, fuzzy, c-format
-#| msgid "(%s %s %s %s %s"
+#, c-format
msgid "%s Same as %s."
-msgstr "(%s %s %s %s %s"
+msgstr "%s Igual que %s."
#: opts.c:1207
msgid "[default]"
@@ -1435,7 +1447,7 @@ msgstr "Plugins"
#: plugin.c:828
#, c-format
msgid "*** WARNING *** there are active plugins, do not report this as a bug unless you can reproduce it without enabling any plugins.\n"
-msgstr "*** AVISO *** hay plugins activos, no reporte esto como un bicho a menos que pueda reproducirlo sin activar ningún plugin.\n"
+msgstr "*** AVISO *** hay plugins activos, no informe esto como un error a menos que pueda reproducirlo sin activar ningún plugin.\n"
#. It's the compiler's fault.
#: reload1.c:6113
@@ -1636,10 +1648,8 @@ msgid "callee refers to comdat-local symbols"
msgstr ""
#: cif-code.def:125
-#, fuzzy
-#| msgid "optimization level attribute mismatch"
msgid "function attribute mismatch"
-msgstr "no coincide el atributo de nivel de optimización"
+msgstr "no coincide el atributo de función"
#: cif-code.def:129
#, fuzzy
@@ -1648,10 +1658,8 @@ msgid "caller function contains cilk spawn"
msgstr "función inválida en la declaración call"
#: cif-code.def:133
-#, fuzzy
-#| msgid "Unreachable statement"
msgid "unreachable"
-msgstr "Declaración inalcanzable"
+msgstr "inalcanzable"
#. The remainder are real diagnostic types.
#: diagnostic.def:33
@@ -1701,10 +1709,9 @@ msgid "permerror: "
msgstr "errorperm: "
#: params.def:49
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated outcome of branch considered predictable"
+#, no-c-format
msgid "Maximal estimated outcome of branch considered predictable."
-msgstr "Salida estimada maximal de la ramificación considerada predecible"
+msgstr "Salida estimada máxima de la ramificación considerada predecible."
#: params.def:54
#, no-c-format
@@ -1712,695 +1719,592 @@ msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-sin
msgstr ""
#: params.def:71
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions in a single function eligible for inlining."
-msgstr "El número máximo de instrucciones en una sola función elegible para inclusión en línea"
+msgstr "El número máximo de instrucciones en una sola función elegible para inclusión en línea."
#: params.def:83
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions when automatically inlining"
+#, no-c-format
msgid "The maximum number of instructions when automatically inlining."
-msgstr "El número máximo de instrucciones cuando se hace inclusión en línea automáticamente"
+msgstr "El número máximo de instrucciones cuando se hace inclusión en línea automáticamente."
#: params.def:88
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions inline function can grow to via recursive inlining."
-msgstr "El número máximo de instrucciones que una función incluída en línea puede crecer a través de inclusión en línea recursiva"
+msgstr "El número máximo de instrucciones que una función incluida en línea puede crecer a través de inclusión en línea recursiva."
#: params.def:93
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions non-inline function can grow to via recursive inlining"
+#, no-c-format
msgid "The maximum number of instructions non-inline function can grow to via recursive inlining."
-msgstr "El número máximo de instrucciones que una función que no se incluye en línea puede crecer a través de inclusión en línea recursiva"
+msgstr "El número máximo de instrucciones que una función que no se incluye en línea puede crecer a través de inclusión en línea recursiva."
#: params.def:98
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for inline functions."
-msgstr "La máxima profundidad para la inclusión en línea recursiva para funciones incluídas en línea"
+msgstr "La máxima profundidad para la inclusión en línea recursiva para funciones incluídas en línea."
#: params.def:103
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of recursive inlining for non-inline functions"
+#, no-c-format
msgid "The maximum depth of recursive inlining for non-inline functions."
-msgstr "La máxima profundidad para la inclusión en línea recursiva para funciones que no son incluídas en línea"
+msgstr "La máxima profundidad para la inclusión en línea recursiva para funciones que no son incluídas en línea."
#: params.def:108
-#, fuzzy, no-c-format
-#| msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
+#, no-c-format
msgid "Inline recursively only when the probability of call being executed exceeds the parameter."
-msgstr "Incluir en línea recursivamente sólo cuando la probabilidad de que la llamada se ejecute exceda el parámetro"
+msgstr "Incluir en línea recursivamente solo cuando la probabilidad de que la llamada se ejecute exceda el parámetro."
#: params.def:116
-#, fuzzy, no-c-format
-#| msgid "The maximum number of nested indirect inlining performed by early inliner"
+#, no-c-format
msgid "The maximum number of nested indirect inlining performed by early inliner."
-msgstr "El número máximo de inclusiones de instrucciones en línea anidadas realizado por el inlineador temprano"
+msgstr "El número máximo de inclusiones de instrucciones en línea anidadas realizado por el inlineador temprano."
#: params.def:122
-#, fuzzy, no-c-format
-#| msgid "Probability that COMDAT function will be shared with different compilation unit"
+#, no-c-format
msgid "Probability that COMDAT function will be shared with different compilation unit."
-msgstr "Probabilidad de que la función COMDAT se comparta con diferentes unidades de compilación"
+msgstr "Probabilidad de que la función COMDAT se comparta con diferentes unidades de compilación."
#: params.def:128
-#, fuzzy, no-c-format
-#| msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen"
+#, no-c-format
msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen."
-msgstr "Probabilidad máxima de la entrada BB de la región de división (en porcentaje relativo a la entrada BB de la función) para que suceda la inclusión en línea parcial"
+msgstr "Probabilidad máxima de la entrada BB de la región de división (en porcentaje relativo a la entrada BB de la función) para que suceda la inclusión en línea parcial."
#: params.def:135
-#, fuzzy, no-c-format
-#| msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling"
+#, no-c-format
msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling."
-msgstr "Si se usa -fvariable-expansion-in-unroller, el número máximo de veces que una variable individual se expandirá durante el desenrollo de bucles"
+msgstr "Si se usa -fvariable-expansion-in-unroller, el número máximo de veces que una variable individual se expandirá durante el desenrollo de bucles."
#: params.def:141
-#, fuzzy, no-c-format
-#| msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization"
+#, no-c-format
msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization."
-msgstr "Si se usa -ftree-vectorize, el límite de bucle minimal de un bucle para considerarse en la vectorización"
+msgstr "Si se usa -ftree-vectorize, el límite de bucle mínimo de un bucle para considerarse en la vectorización."
#: params.def:152
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to fill a delay slot"
+#, no-c-format
msgid "The maximum number of instructions to consider to fill a delay slot."
-msgstr "El número máximo de instrucciones para considerar el llenado de una ranura de retraso"
+msgstr "El número máximo de instrucciones para considerar el llenado de una ranura de retraso."
#: params.def:163
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to find accurate live register information"
+#, no-c-format
msgid "The maximum number of instructions to consider to find accurate live register information."
-msgstr "El número máximo de instruccions para considerar la búsqueda de información de registros en vivo exacta"
+msgstr "El número máximo de instrucciones para considerar la búsqueda de información de registros en vivo exacta."
#: params.def:173
-#, fuzzy, no-c-format
-#| msgid "The maximum length of scheduling's pending operations list"
+#, no-c-format
msgid "The maximum length of scheduling's pending operations list."
-msgstr "La longitud máxima de la lista de operaciones pendientes del calendarizador"
+msgstr "La longitud máxima de la lista de operaciones pendientes del planificador."
#: params.def:180
#, fuzzy, no-c-format
#| msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop"
msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop."
-msgstr "El número máximo de intentos hacia atrás que debe hacer el calendarizador cuando calendarice un bucle módulo"
+msgstr "El número máximo de intentos hacia atrás que debe hacer el planificador cuando planifique un bucle módulo"
#: params.def:185
-#, fuzzy, no-c-format
-#| msgid "The size of function body to be considered large"
+#, no-c-format
msgid "The size of function body to be considered large."
-msgstr "El tamaño del cuerpo de la función a considerar grande"
+msgstr "El tamaño del cuerpo de la función que será considerado grande."
#: params.def:189
-#, fuzzy, no-c-format
-#| msgid "Maximal growth due to inlining of large function (in percent)"
+#, no-c-format
msgid "Maximal growth due to inlining of large function (in percent)."
-msgstr "Crecimiento de código maximal causado por la inclusión en línea de una función grande (en porcentaje)"
+msgstr "Máximo crecimiento causado por la inclusión en línea de una función grande (en porcentaje)."
#: params.def:193
-#, fuzzy, no-c-format
-#| msgid "The size of translation unit to be considered large"
+#, no-c-format
msgid "The size of translation unit to be considered large."
-msgstr "El tamaño de la unidad de traducción a considerar grande"
+msgstr "El tamaño de la unidad de traducción que será considerado grande."
#: params.def:197
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the inlining (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the inlining (in percent)."
-msgstr "Cuánto puede crecer la unidad de compilación dada a causa de la inclusión en línea (en porcentaje)"
+msgstr "Cuánto puede crecer la unidad de compilación dada a causa de la inclusión en línea (en porcentaje)."
#: params.def:201
-#, fuzzy, no-c-format
-#| msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)"
+#, no-c-format
msgid "How much can given compilation unit grow because of the interprocedural constant propagation (in percent)."
-msgstr "Cuánto puede crecer la unidad de compilación dada a causa de la propagación constante interprocedural (en porcentaje)"
+msgstr "Cuánto puede crecer la unidad de compilación dada a causa de la propagación constante interprocedural (en porcentaje)."
#: params.def:205
-#, fuzzy, no-c-format
-#| msgid "Maximal estimated growth of function body caused by early inlining of single call"
+#, no-c-format
msgid "Maximal estimated growth of function body caused by early inlining of single call."
-msgstr "El crecimiento estimado maximal del cuerpo de la función causado por la inclusión en línea temprano de una sola llamada"
+msgstr "Máximo crecimiento estimado del cuerpo de la función causado por la inclusión temprana en línea de una sola llamada."
#: params.def:209
-#, fuzzy, no-c-format
-#| msgid "The size of stack frame to be considered large"
+#, no-c-format
msgid "The size of stack frame to be considered large."
-msgstr "El tamaño del marco de la pila a considerar grande"
+msgstr "El tamaño del marco de la pila que será considerado grande."
#: params.def:213
-#, fuzzy, no-c-format
-#| msgid "Maximal stack frame growth due to inlining (in percent)"
+#, no-c-format
msgid "Maximal stack frame growth due to inlining (in percent)."
-msgstr "Crecimiento de marco de pila maximal causado por la inclusión en línea (en porcentaje)"
+msgstr "Máximo crecimiento de marco de pila causado por la inclusión en línea (en porcentaje)."
#: params.def:220
-#, fuzzy, no-c-format
-#| msgid "The maximum amount of memory to be allocated by GCSE"
+#, no-c-format
msgid "The maximum amount of memory to be allocated by GCSE."
-msgstr "La cantidad máxima de memoria a ser asignada por GCSE"
+msgstr "La cantidad máxima de memoria a ser asignada por GCSE."
#: params.def:227
-#, fuzzy, no-c-format
-#| msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
+#, no-c-format
msgid "The maximum ratio of insertions to deletions of expressions in GCSE."
-msgstr "La tasa máxima de inserciones para borrados de expresiones en GCSE"
+msgstr "La tasa máxima de inserciones para borrados de expresiones en GCSE."
#: params.def:238
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio for performing partial redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio for performing partial redundancy elimination after reload."
-msgstr "La tasa de intervalo para realizar la eliminación parcial de redundancia después de la recarga"
+msgstr "La tasa de intervalo para realizar la eliminación parcial de redundancia después de la recarga."
#: params.def:245
-#, fuzzy, no-c-format
-#| msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload"
+#, no-c-format
msgid "The threshold ratio of critical edges execution count that permit performing redundancy elimination after reload."
-msgstr "La tasa de intervalo para la cuenta de ejecución de bordes críticos que permitan la eliminación de redundancia después de la recarga"
+msgstr "La tasa de intervalo para la cuenta de ejecución de bordes críticos que permitan la eliminación de redundancia después de la recarga."
#: params.def:253
-#, fuzzy, no-c-format
-#| msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations"
+#, no-c-format
msgid "Scaling factor in calculation of maximum distance an expression can be moved by GCSE optimizations."
-msgstr "Factor de escala en el cálculo de la distancia máxima a la cual se puede mover una expresión por optimizaciones GCSE"
+msgstr "Factor de escala en el cálculo de la distancia máxima a la cual se puede mover una expresión por optimizaciones GCSE."
#: params.def:259
-#, fuzzy, no-c-format
-#| msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel"
+#, no-c-format
msgid "Cost at which GCSE optimizations will not constraint the distance an expression can travel."
-msgstr "Costo al cual las optimizaciones GCSE no restringirán la distancia que puede viajar una expresión"
+msgstr "Costo al cual las optimizaciones GCSE no restringirán la distancia que puede viajar una expresión."
#: params.def:267
-#, fuzzy, no-c-format
-#| msgid "Maximum depth of search in the dominator tree for expressions to hoist"
+#, no-c-format
msgid "Maximum depth of search in the dominator tree for expressions to hoist."
-msgstr "Profundidad máxima de la búsqueda en el árbol dominador por expresiones para levantar"
+msgstr "Profundidad máxima de la búsqueda en el árbol dominador por expresiones para levantar."
#: params.def:275
#, no-c-format
msgid "Maximum depth of sqrt chains to use when synthesizing exponentiation by a real constant."
-msgstr ""
+msgstr "Máxima profundidad de cadenas sqrt que se utilizará cuando se sintetice la exponenciación mediante una constante real."
#: params.def:287
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop."
-msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle"
+msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle."
#: params.def:293
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to consider to unroll in a loop on average"
+#, no-c-format
msgid "The maximum number of instructions to consider to unroll in a loop on average."
-msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle en promedio"
+msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle en promedio."
#: params.def:298
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unrollings of a single loop"
+#, no-c-format
msgid "The maximum number of unrollings of a single loop."
-msgstr "El número máximo de desenrollos de un solo bucle"
+msgstr "El número máximo de desenrollos de un solo bucle."
#: params.def:303
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop."
-msgstr "El número máximo de insns en un bucle pelado"
+msgstr "El número máximo de insns en un bucle pelado."
#: params.def:308
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop"
+#, no-c-format
msgid "The maximum number of peelings of a single loop."
-msgstr "El número máximo de pelados en un solo bucle"
+msgstr "El número máximo de pelados en un solo bucle."
#: params.def:313
-#, fuzzy, no-c-format
-#| msgid "The maximum number of iterations through CFG to extend regions"
+#, no-c-format
msgid "The maximum number of branches on the path through the peeled sequence."
-msgstr "El número máximo de iteraciones a través de CFG para extender regiones"
+msgstr "El número máximo de ramificaciones en la ruta hacia una secuencia pelada."
#: params.def:318
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a completely peeled loop"
+#, no-c-format
msgid "The maximum number of insns of a completely peeled loop."
-msgstr "El número máximo de insns en un bucle completamente pelado"
+msgstr "El número máximo de insns en un bucle completamente pelado."
#: params.def:323
-#, fuzzy, no-c-format
-#| msgid "The maximum number of peelings of a single loop that is peeled completely"
+#, no-c-format
msgid "The maximum number of peelings of a single loop that is peeled completely."
-msgstr "El número máximo de pelados en un solo bucle que está completamente pelado"
+msgstr "El número máximo de pelados en un solo bucle que está completamente pelado."
#: params.def:328
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of a peeled loop that rolls only once"
+#, no-c-format
msgid "The maximum number of insns of a peeled loop that rolls only once."
-msgstr "El número máximo de insns en un bucle pelado que se enrolla solamente una vez"
+msgstr "El número máximo de insns en un bucle pelado que se enrolla solamente una vez."
#: params.def:333
-#, fuzzy, no-c-format
-#| msgid "The maximum depth of a loop nest we completely peel"
+#, no-c-format
msgid "The maximum depth of a loop nest we completely peel."
-msgstr "La profundidad máxima de un bucle anidado que nosotros pelamos completamente"
+msgstr "La profundidad máxima de un bucle anidado que nosotros pelamos completamente."
#: params.def:339
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "The maximum number of insns of an unswitched loop."
-msgstr "El número máximo de insns en un bucle sin switch"
+msgstr "El número máximo de insns en un bucle sin switch."
#: params.def:344
-#, fuzzy, no-c-format
-#| msgid "The maximum number of unswitchings in a single loop"
+#, no-c-format
msgid "The maximum number of unswitchings in a single loop."
-msgstr "El número máximo de eliminación de opciones en un solo bucle"
+msgstr "El número máximo de eliminación de opciones en un solo bucle."
#: params.def:351
-#, fuzzy, no-c-format
-#| msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates"
+#, no-c-format
msgid "Bound on the number of iterations the brute force # of iterations analysis algorithm evaluates."
-msgstr "Límite en el número de iteraciones que evalúa el algoritmo de análisis de # de iteraciones de fuerza bruta"
+msgstr "Límite en el número de iteraciones que evalúa el algoritmo de análisis de número de iteraciones de fuerza bruta."
#: params.def:357
-#, fuzzy, no-c-format
-#| msgid "Bound on the cost of an expression to compute the number of iterations"
+#, no-c-format
msgid "Bound on the cost of an expression to compute the number of iterations."
-msgstr "Límite en el costo de una expresión para computar el número de iteraciones"
+msgstr "Límite en el coste de una expresión para calcular el número de iteraciones."
#: params.def:363
-#, fuzzy, no-c-format
-#| msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop"
+#, no-c-format
msgid "A factor for tuning the upper bound that swing modulo scheduler uses for scheduling a loop."
-msgstr "Un factor para ajustar el límite superior que el calendarizador de cambio de módulo utiliza para calendarizar un bucle"
+msgstr "Factor para ajustar el límite superior que el planificador de cambio de módulo utiliza para planificar un bucle."
#: params.def:368
#, no-c-format
msgid "The minimum value of stage count that swing modulo scheduler will generate."
-msgstr "El valor mínimo de la cuenta de etapa que el calendarizador módulo swing generará."
+msgstr "El valor mínimo de la cuenta de etapa que el planificador módulo swing generará."
#: params.def:372
-#, fuzzy, no-c-format
-#| msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA"
+#, no-c-format
msgid "The number of cycles the swing modulo scheduler considers when checking conflicts using DFA."
-msgstr "El número de ciclos que el calendarizador de cambio de módulo considera al revisar conflictos utilizando DFA"
+msgstr "El número de ciclos que el planificador de cambio de módulo considera al revisar conflictos utilizando DFA."
#: params.def:376
-#, fuzzy, no-c-format
-#| msgid "A threshold on the average loop count considered by the swing modulo scheduler"
+#, no-c-format
msgid "A threshold on the average loop count considered by the swing modulo scheduler."
-msgstr "Un intervalo en la cuenta promedio de bucles considerado por el calendarizador de cambio de módulo"
+msgstr "Umbral en el número promedio de bucles considerado por el planificador de cambio de módulo."
#: params.def:381
#, no-c-format
msgid "A basic block profile count is considered hot if it contributes to the given permillage of the entire profiled execution."
-msgstr ""
+msgstr "El número de perfiles de bloque básicos se considera caliente si contribuye al pormillaje dado de la ejecución perfilada completa."
#: params.def:386
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block needs to have to be considered hot."
-msgstr "La selección de fracción de la frecuencia maximal de ejecuciones de bloque básico en el bloque básico de función dado que necesita para ser considerado caliente"
+msgstr "La selección de fracción de la frecuencia máxima de ejecuciones de bloque básico en la función dada que el bloque básico necesita para ser considerado caliente."
#: params.def:391
#, no-c-format
msgid "The minimum fraction of profile runs a given basic block execution count must be not to be considered unlikely."
-msgstr ""
+msgstr "Fracción mínima de ejecuciones de perfil que el número de ejecuciones de un bloque básico dado no debe alcanzar para ser considerado improbable."
#: params.def:396
-#, fuzzy, no-c-format
-#| msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment"
+#, no-c-format
msgid "Select fraction of the maximal frequency of executions of basic block in function given basic block get alignment."
-msgstr "La selección de fracción de la frecuencia maximal de ejecuciones de bloque básico en el bloque básico de función para alinear"
+msgstr "Selección de fracción de la frecuencia máxima de ejecuciones de bloque básico en la función dada para la que el bloque básico consigue alinear."
#: params.def:401
-#, fuzzy, no-c-format
-#| msgid "Loops iterating at least selected number of iterations will get loop alignement."
+#, no-c-format
msgid "Loops iterating at least selected number of iterations will get loop alignement.."
msgstr "Iterar ciclos por lo menos el número seleccionado de iteraciones que logrará alineación de bucles."
#: params.def:417
-#, fuzzy, no-c-format
-#| msgid "The maximum number of loop iterations we predict statically"
+#, no-c-format
msgid "The maximum number of loop iterations we predict statically."
-msgstr "El número máximo de iteraciones de bucle que se predicen estáticamente"
+msgstr "El número máximo de iteraciones de bucle que se predicen estáticamente."
#: params.def:430
#, no-c-format
msgid "Set the estimated probability in percentage for builtin expect. The default value is 90% probability."
-msgstr ""
+msgstr "Establece la probabilidad estimada en porcentaje de la expectativa incorporada. El valor predeterminado es 90% de probabilidad."
#: params.def:434
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is available."
-msgstr "El porcentaje de la función, evaluado por la frecuencia de ejecución, que debe ser cubierto por la información de rastreo. Se utiliza cuando está disponible la retroalimentación del análisis de perfil"
+msgstr "El porcentaje de la función, ponderado por la frecuencia de ejecución, que debe ser cubierto por la información de rastreo. Se utiliza cuando está disponible la retroalimentación del análisis de perfil."
#: params.def:438
-#, fuzzy, no-c-format
-#| msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available"
+#, no-c-format
msgid "The percentage of function, weighted by execution frequency, that must be covered by trace formation. Used when profile feedback is not available."
-msgstr "El porcentaje de la función, evaluado por la frecuencia de ejecución, que debe ser cubierto por la información de rastreo. Se utiliza cuando la retroalimentación de análisis de perfil no está disponible"
+msgstr "El porcentaje de la función, ponderado por la frecuencia de ejecución, que debe ser cubierto por la información de rastreo. Se utiliza cuando la retroalimentación de análisis de perfil no está disponible."
#: params.def:442
-#, fuzzy, no-c-format
-#| msgid "Maximal code growth caused by tail duplication (in percent)"
+#, no-c-format
msgid "Maximal code growth caused by tail duplication (in percent)."
-msgstr "Crecimiento de código maximal causado por duplicación de colas (en porcentaje)"
+msgstr "Máximo crecimiento de código causado por duplicación de colas (en porcentaje)."
#: params.def:446
-#, fuzzy, no-c-format
-#| msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)"
+#, no-c-format
msgid "Stop reverse growth if the reverse probability of best edge is less than this threshold (in percent)."
-msgstr "Detener el crecimiento inverso si la probabilidad reversa del mejor borde es menor a este intervalo (en porcentaje)"
+msgstr "Detener el crecimiento inverso si la probabilidad inversa del mejor borde es menor que este umbral (en porcentaje)."
#: params.def:450
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is available."
-msgstr "Detener el crecimiento hacia adelante si la probabilidad del mejor borde es menor que este intervalo (en porcentaje). Se utiliza cuando la retroalimentación de análisis de perfil está disponible"
+msgstr "Detener el crecimiento hacia adelante si la probabilidad del mejor borde es menor que este umbral (en porcentaje). Se utiliza cuando la retroalimentación de análisis de perfil está disponible."
#: params.def:454
-#, fuzzy, no-c-format
-#| msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available"
+#, no-c-format
msgid "Stop forward growth if the probability of best edge is less than this threshold (in percent). Used when profile feedback is not available."
-msgstr "Detener el crecimiento hacia adelante si la probabilidad del mejor borde es menor a este intervalo (en porcentaje). Se utiliza cuando la retroalimentación de análisis de perfil no está disponible"
+msgstr "Detener el crecimiento hacia adelante si la probabilidad del mejor borde es menor que este umbral (en porcentaje). Se utiliza cuando la retroalimentación de análisis de perfil no está disponible."
#: params.def:460
-#, fuzzy, no-c-format
-#| msgid "The maximum number of incoming edges to consider for crossjumping"
+#, no-c-format
msgid "The maximum number of incoming edges to consider for crossjumping."
-msgstr "El número máximo de bordes de entrada para considerar el salto cruzado"
+msgstr "El número máximo de bordes entrantes para considerar el salto cruzado."
#: params.def:466
-#, fuzzy, no-c-format
-#| msgid "The minimum number of matching instructions to consider for crossjumping"
+#, no-c-format
msgid "The minimum number of matching instructions to consider for crossjumping."
-msgstr "El número máximo de instrucciones coincidentes para considerar el salto cruzado"
+msgstr "El número máximo de instrucciones coincidentes para considerar el salto cruzado."
#: params.def:472
-#, fuzzy, no-c-format
-#| msgid "The maximum expansion factor when copying basic blocks"
+#, no-c-format
msgid "The maximum expansion factor when copying basic blocks."
-msgstr "El factor de expansión máximo al copiar bloques básicos"
+msgstr "El factor de expansión máximo al copiar bloques básicos."
# 'desfactorizar' no me gusta. ¿Alguna sugerencia? - cfuga
#: params.def:478
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns to duplicate when unfactoring computed gotos"
+#, no-c-format
msgid "The maximum number of insns to duplicate when unfactoring computed gotos."
-msgstr "El número máximo de insns a duplicar al desfactorizar gotos calculados"
+msgstr "El número máximo de insns a duplicar al desfactorizar gotos calculados."
#: params.def:484
-#, fuzzy, no-c-format
-#| msgid "The maximum length of path considered in cse"
+#, no-c-format
msgid "The maximum length of path considered in cse."
-msgstr "La longitud máxima de la ruta considerada en cse"
+msgstr "La longitud máxima de la ruta considerada en cse."
#: params.def:488
-#, fuzzy, no-c-format
-#| msgid "The maximum instructions CSE process before flushing"
+#, no-c-format
msgid "The maximum instructions CSE process before flushing."
-msgstr "El número máximo de instrucciones que CSE procesa antes de descargar"
+msgstr "El número máximo de instrucciones que CSE procesa antes de descargar."
#: params.def:495
-#, fuzzy, no-c-format
-#| msgid "The minimum cost of an expensive expression in the loop invariant motion"
+#, no-c-format
msgid "The minimum cost of an expensive expression in the loop invariant motion."
-msgstr "El costo mínimo de una expresión costosa en el movimiento invariante del bucle"
+msgstr "El coste mínimo de una expresión costosa en el movimiento invariante del bucle."
#: params.def:504
-#, fuzzy, no-c-format
-#| msgid "Bound on number of candidates below that all candidates are considered in iv optimizations"
+#, no-c-format
msgid "Bound on number of candidates below that all candidates are considered in iv optimizations."
-msgstr "Límite en el número de candidatos bajo el cual todos los candidatos se consideran en optimizaciones iv"
+msgstr "Límite en el número de candidatos bajo el cual todos los candidatos se consideran en optimizaciones iv."
#: params.def:512
-#, fuzzy, no-c-format
-#| msgid "Bound on number of iv uses in loop optimized in iv optimizations"
+#, no-c-format
msgid "Bound on number of iv uses in loop optimized in iv optimizations."
-msgstr "Límite en el número de usos de iv en bucles optimizados en optimizaciones iv"
+msgstr "Límite en el número de usos de iv en bucles optimizados en optimizaciones iv."
#: params.def:520
-#, fuzzy, no-c-format
-#| msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
+#, no-c-format
msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization."
-msgstr "Si el número de candidatos en el conjunto es menor, siempre se tratará de eliminar ivs sin usar durante su optimización"
+msgstr "Si el número de candidatos en el conjunto es menor, siempre se tratará de eliminar los ivs sin usar durante su optimización."
#: params.def:525
-#, fuzzy, no-c-format
-#| msgid "Bound on size of expressions used in the scalar evolutions analyzer"
+#, no-c-format
msgid "Bound on size of expressions used in the scalar evolutions analyzer."
-msgstr "Límite en el tamaño de expresiones usadas en el analizador escalar de evoluciones"
+msgstr "Límite en el tamaño de expresiones usadas en el analizador escalar de evoluciones."
#: params.def:530
-#, fuzzy, no-c-format
-#| msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer"
+#, no-c-format
msgid "Bound on the complexity of the expressions in the scalar evolutions analyzer."
-msgstr "Límite en la complejidad de expresiones en el analizador escalar de evoluciones"
+msgstr "Límite en la complejidad de expresiones en el analizador escalar de evoluciones."
#: params.def:535
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alignment check."
-msgstr "Límite en el número de revisiones de tiempo de ejecución insertadas por las versiones de bucle del vectorizador para revisión de alineación"
+msgstr "Límite en el número de revisiones de tiempo de ejecución insertadas por las versiones de bucle del vectorizador para revisión de alineación."
#: params.def:540
-#, fuzzy, no-c-format
-#| msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check"
+#, no-c-format
msgid "Bound on number of runtime checks inserted by the vectorizer's loop versioning for alias check."
-msgstr "Límite en el número de revisiones de tiempo de ejecución insertadas por las versiones de bucle del vectorizador para revisión de alias"
+msgstr "Límite en el número de revisiones de tiempo de ejecución insertadas por las versiones de bucle del vectorizador para revisión de alias."
#: params.def:545
#, no-c-format
msgid "Max number of loop peels to enhancement alignment of data references in a loop."
-msgstr ""
+msgstr "Número máximo de pelados de bucle para alineación de mejora de las referencias de datos en un bucle."
#: params.def:550
-#, fuzzy, no-c-format
-#| msgid "The maximum memory locations recorded by cselib"
+#, no-c-format
msgid "The maximum memory locations recorded by cselib."
-msgstr "El número máximo de ubicaciones grabadas por cselib"
+msgstr "El número máximo de ubicaciones grabadas por cselib."
#: params.def:563
-#, fuzzy, no-c-format
-#| msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap"
+#, no-c-format
msgid "Minimum heap expansion to trigger garbage collection, as a percentage of the total size of the heap."
-msgstr "Expansión mínima de la pila para iniciar la recolección de basura, como un porcentaje del tamaño total de la pila"
+msgstr "Expansión mínima de la pila para iniciar la recolección de basura, como un porcentaje del tamaño total de la pila."
#: params.def:568
-#, fuzzy, no-c-format
-#| msgid "Minimum heap size before we start collecting garbage, in kilobytes"
+#, no-c-format
msgid "Minimum heap size before we start collecting garbage, in kilobytes."
-msgstr "Tamaño mínimo de la pila antes de comenzar a recolectar basura, en kilobytes"
+msgstr "Tamaño mínimo de la pila antes de comenzar a recolectar basura, en kilobytes."
#: params.def:576
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions to search backward when looking for equivalent reload"
+#, no-c-format
msgid "The maximum number of instructions to search backward when looking for equivalent reload."
-msgstr "El número máximo de instrucciones para buscar hacia atrás al buscar por una recarga equivalente"
+msgstr "El número máximo de instrucciones para buscar hacia atrás al buscar por una recarga equivalente."
#: params.def:581
-#, fuzzy, no-c-format
-#| msgid "Target block's relative execution frequency (as a percentage) required to sink a statement"
+#, no-c-format
msgid "Target block's relative execution frequency (as a percentage) required to sink a statement."
-msgstr "Frecuencia de ejecución relativa al bloque objetivo (como un porcentaje) requerida para hundir una declaración"
+msgstr "Frecuencia de ejecución relativa al bloque objetivo (como un porcentaje) requerida para hundir una declaración."
#: params.def:586 params.def:596
-#, fuzzy, no-c-format
-#| msgid "The maximum number of blocks in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of blocks in a region to be considered for interblock scheduling."
-msgstr "El número máximo de bloques en una región para ser considerada para interbloqueo"
+msgstr "El número máximo de bloques en una región para ser considerada para planificación de interbloqueo."
#: params.def:591 params.def:601
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns in a region to be considered for interblock scheduling"
+#, no-c-format
msgid "The maximum number of insns in a region to be considered for interblock scheduling."
-msgstr "El número máximo de insns en una región para ser consideradas para calendarización de interbloqueo"
+msgstr "El número máximo de insns en una región para ser consideradas para planificación de interbloqueo"
#: params.def:606
-#, fuzzy, no-c-format
-#| msgid "The minimum probability of reaching a source block for interblock speculative scheduling"
+#, no-c-format
msgid "The minimum probability of reaching a source block for interblock speculative scheduling."
-msgstr "La probabilidad mínima de alcanzar un bloque fuente para la calendarización especulativa entre bloques"
+msgstr "La probabilidad mínima de alcanzar un bloque fuente para la planificación especulativa entre bloques."
#: params.def:611
-#, fuzzy, no-c-format
-#| msgid "The maximum number of iterations through CFG to extend regions"
+#, no-c-format
msgid "The maximum number of iterations through CFG to extend regions."
-msgstr "El número máximo de iteraciones a través de CFG para extender regiones"
+msgstr "El número máximo de iteraciones a través de CFG para extender regiones."
#: params.def:616
-#, fuzzy, no-c-format
-#| msgid "The maximum conflict delay for an insn to be considered for speculative motion"
+#, no-c-format
msgid "The maximum conflict delay for an insn to be considered for speculative motion."
-msgstr "El retraso de conflicto máximo para una insn para ser considerada para movimiento especulativo"
+msgstr "El retraso máximo de conflicto para que una insn sea considerada para movimiento especulativo."
#: params.def:621
#, no-c-format
msgid "The minimal probability of speculation success (in percents), so that speculative insn will be scheduled."
msgstr "La probabilidad mínima de éxito de especulación (en porcentaje), para que esa insn especulativa se calendarize."
+# TODO Mejorar traducción de 'across it'.
#: params.def:626
#, no-c-format
msgid "The minimum probability an edge must have for the scheduler to save its state across it."
-msgstr ""
+msgstr "Probabilidad mínima que debe tener un borde para que el planificador guarde su estado a través de él."
#: params.def:631
-#, fuzzy, no-c-format
-#| msgid "The maximum size of the lookahead window of selective scheduling"
+#, no-c-format
msgid "The maximum size of the lookahead window of selective scheduling."
-msgstr "El tamaño máximo de la ventana de búsqueda hacia adelante de la calendarización selectiva"
+msgstr "El tamaño máximo de la ventana de búsqueda hacia adelante de la planificación selectiva."
#: params.def:636
-#, fuzzy, no-c-format
-#| msgid "Maximum number of times that an insn could be scheduled"
+#, no-c-format
msgid "Maximum number of times that an insn could be scheduled."
-msgstr "El número máximo de veces que se puede calendarizar una insns"
+msgstr "El número máximo de veces que se puede planificar una insns."
#: params.def:641
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in the ready list that are considered eligible for renaming"
+#, no-c-format
msgid "Maximum number of instructions in the ready list that are considered eligible for renaming."
-msgstr "El número máximo de instrucciones en la lista ready que se consideran elegibles para renombrado"
+msgstr "El número máximo de instrucciones en la lista ready que se consideran elegibles para renombrado."
#: params.def:646
-#, fuzzy, no-c-format
-#| msgid "Minimal distance between possibly conflicting store and load"
+#, no-c-format
msgid "Minimal distance between possibly conflicting store and load."
-msgstr "La distancia mínima entre store y load en posible conflicto"
+msgstr "La distancia mínima entre store y load en posible conflicto."
#: params.def:651
#, no-c-format
msgid "Hardware autoprefetcher scheduler model control flag. Number of lookahead cycles the model looks into; at '0' only enable instruction sorting heuristic. Disabled by default."
-msgstr ""
+msgstr "Indicador de control del modelo de planificador de prebuscador automático hardware. Número de ciclos hacia delante que el modelo examina: con '0' solo se activa la heurística de ordenación de instrucciones. Desactivado de forma predeterminada."
#: params.def:656
-#, fuzzy, no-c-format
-#| msgid "The maximum number of RTL nodes that can be recorded as combiner's last value"
+#, no-c-format
msgid "The maximum number of RTL nodes that can be recorded as combiner's last value."
-msgstr "El número máximo de nodos RTL que se pueden grabar como el último valor del combinador"
+msgstr "El número máximo de nodos RTL que se pueden grabar como el último valor del combinador."
#: params.def:661
-#, fuzzy, no-c-format
-#| msgid "The maximum number of incoming edges to consider for crossjumping"
+#, no-c-format
msgid "The maximum number of insns combine tries to combine."
-msgstr "El número máximo de bordes de entrada para considerar el salto cruzado"
+msgstr "El número máximo de intentos de combinar insns para combinar."
#: params.def:670
-#, fuzzy, no-c-format
-#| msgid "The upper bound for sharing integer constants"
+#, no-c-format
msgid "The upper bound for sharing integer constants."
-msgstr "El límite superior para compartir constantes enteras"
+msgstr "El límite superior para compartir constantes enteras."
#: params.def:675
-#, fuzzy, no-c-format
-#| msgid "The lower bound for a buffer to be considered for stack smashing protection"
+#, no-c-format
msgid "The lower bound for a buffer to be considered for stack smashing protection."
-msgstr "El límite inferior para considerar un almacenamiento temporal para protección contra destrucción de pila"
+msgstr "El límite inferior para considerar un almacenamiento temporal para protección contra destrucción de pila."
#: params.def:680
#, no-c-format
msgid "The minimum size of variables taking part in stack slot sharing when not optimizing."
-msgstr ""
+msgstr "Tamaño mínimo de las variables que participan en la compartición de ranuras de pila cuando no hay optimización."
#: params.def:699
-#, fuzzy, no-c-format
-#| msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps"
+#, no-c-format
msgid "Maximum number of statements allowed in a block that needs to be duplicated when threading jumps."
-msgstr "Número máximo de sentencias permitidas en un bloque que necesitan ser duplicadas al hacer hilos de saltos"
+msgstr "Número máximo de sentencias permitidas en un bloque que necesitan ser duplicadas al hacer hilos de saltos."
#: params.def:708
-#, fuzzy, no-c-format
-#| msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable"
+#, no-c-format
msgid "Maximum number of fields in a structure before pointer analysis treats the structure as a single variable."
-msgstr "El número máximo de campos en una estructura antes de que el análisis de punteros trate a la estructura como una sola variable"
+msgstr "El número máximo de campos en una estructura antes de que el análisis de punteros trate a la estructura como una sola variable."
#: params.def:713
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass"
+#, no-c-format
msgid "The maximum number of instructions ready to be issued to be considered by the scheduler during the first scheduling pass."
-msgstr "El número máximo de instrucciones listas para ser ejecutadas para ser consideradas por el calendarizador durante el primer paso de calendarización"
+msgstr "El número máximo de instrucciones listas para ser ejecutadas que el planificador tendrá en cuenta durante el primer paso de planificación."
#: params.def:719
-#, fuzzy, no-c-format
-#| msgid "Maximum number of active local stores in RTL dead store elimination"
+#, no-c-format
msgid "Maximum number of active local stores in RTL dead store elimination."
-msgstr "Número máximo de almacenamientos locales activos en la eliminación de almacenamiento muerto RTL"
+msgstr "Número máximo de almacenamientos locales activos en la eliminación de almacenamiento muerto RTL."
#: params.def:729
-#, fuzzy, no-c-format
-#| msgid "The number of insns executed before prefetch is completed"
+#, no-c-format
msgid "The number of insns executed before prefetch is completed."
-msgstr "El número de insns ejecutadas antes de completar la precarga"
+msgstr "El número de insns ejecutadas antes de completar la precarga."
#: params.def:736
-#, fuzzy, no-c-format
-#| msgid "The number of prefetches that can run at the same time"
+#, no-c-format
msgid "The number of prefetches that can run at the same time."
-msgstr "El número de precargas que se pueden ejecutar simultánamente"
+msgstr "El número de precargas que se pueden ejecutar simultánamente."
#: params.def:743
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache"
+#, no-c-format
msgid "The size of L1 cache."
-msgstr "El tamaño del caché L1"
+msgstr "El tamaño del caché L1i."
#: params.def:750
-#, fuzzy, no-c-format
-#| msgid "The size of L1 cache line"
+#, no-c-format
msgid "The size of L1 cache line."
-msgstr "El tamaño de la línea del caché L1"
+msgstr "El tamaño de la línea del caché L1."
#: params.def:757
-#, fuzzy, no-c-format
-#| msgid "The size of L2 cache"
+#, no-c-format
msgid "The size of L2 cache."
-msgstr "El tamaño del caché L2"
+msgstr "El tamaño del caché L2."
#: params.def:768
-#, fuzzy, no-c-format
-#| msgid "Whether to use canonical types"
+#, no-c-format
msgid "Whether to use canonical types."
-msgstr "Decide si se usan tipos canónicos"
+msgstr "Decide si se usan tipos canónicos."
#: params.def:773
-#, fuzzy, no-c-format
-#| msgid "Maximum length of partial antic set when performing tree pre optimization"
+#, no-c-format
msgid "Maximum length of partial antic set when performing tree pre optimization."
-msgstr "Longitud máxima del conjunto antic parcial al realizar pre optimización de árbol"
+msgstr "Longitud máxima del conjunto antic parcial al realizar pre optimización de árbol."
#: params.def:783
-#, fuzzy, no-c-format
-#| msgid "Maximum size of a SCC before SCCVN stops processing a function"
+#, no-c-format
msgid "Maximum size of a SCC before SCCVN stops processing a function."
-msgstr "Tamaño máxmo de un SCC antes de que SCCVN detenga el procesamiento de una función"
+msgstr "Tamaño máxmo de un SCC antes de que SCCVN detenga el procesamiento de una función."
#: params.def:794
#, no-c-format
msgid "Maximum number of disambiguations to perform per memory access."
-msgstr ""
+msgstr "Número máximo de desambiguaciones que realizar por cada acceso a memoria."
#: params.def:799
-#, fuzzy, no-c-format
-#| msgid "Max loops number for regional RA"
+#, no-c-format
msgid "Max loops number for regional RA."
-msgstr "Número de bucles máximo para el RA regional"
+msgstr "Número de bucles máximo para el RA regional."
#: params.def:804
-#, fuzzy, no-c-format
-#| msgid "Max size of conflict table in MB"
+#, no-c-format
msgid "Max size of conflict table in MB."
-msgstr "Tamaño máximo de la tabla de conflictos en MB"
+msgstr "Tamaño máximo de la tabla de conflictos en MB."
#: params.def:809
-#, fuzzy, no-c-format
-#| msgid "The number of registers in each class kept unused by loop invariant motion"
+#, no-c-format
msgid "The number of registers in each class kept unused by loop invariant motion."
-msgstr "El número de registros conservados sin uso en cada clase por el movimiento invariante del bucle"
+msgstr "El número de registros conservados sin uso en cada clase por el movimiento invariante del bucle."
#: params.def:814
#, no-c-format
msgid "The max number of reload pseudos which are considered during spilling a non-reload pseudo."
-msgstr ""
+msgstr "El número máximo de pseudos de recarga que se tienen en cuenta durante el vaciado de pseudos de no recarga."
#: params.def:819
#, no-c-format
@@ -2408,63 +2312,54 @@ msgid "Minimal fall-through edge probability in percentage used to add BB to inh
msgstr ""
#: params.def:827
-#, fuzzy, no-c-format
-#| msgid "The maximum ratio between array size and switch branches for a switch conversion to take place"
+#, no-c-format
msgid "The maximum ratio between array size and switch branches for a switch conversion to take place."
-msgstr "La tasa máxima entre el tamaño de la matriz y las ramificaciones switch para que tome lugar una conversión switch"
+msgstr "La tasa máxima entre el tamaño de la matriz y las ramificaciones switch para que tenga lugar una conversión switch."
#: params.def:835
-#, fuzzy, no-c-format
-#| msgid "size of tiles for loop blocking"
+#, no-c-format
msgid "size of tiles for loop blocking."
-msgstr "tamaño de bloques para el bloqueo de bucles"
+msgstr "tamaño de bloques para el bloqueo de bucles."
#: params.def:842
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of parameters in a SCoP."
-msgstr "número máximo de parámetros en un SCoP"
+msgstr "número máximo de parámetros en un SCoP."
#: params.def:849
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "maximum number of basic blocks per function to be analyzed by Graphite."
-msgstr "número máximo de bloques básicos por función para analizar con Graphite"
+msgstr "número máximo de bloques básicos por función para analizar con Graphite."
#: params.def:856
-#, fuzzy, no-c-format
-#| msgid "maximum number of parameters in a SCoP"
+#, no-c-format
msgid "maximum number of arrays per scop."
-msgstr "número máximo de parámetros en un SCoP"
+msgstr "número máximo de arrays por scop."
#: params.def:863
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "minimal number of loops per function to be analyzed by Graphite."
-msgstr "número máximo de bloques básicos por función para analizar con Graphite"
+msgstr "número mínimo de bucles por función para analizar con Graphite."
#: params.def:868
-#, fuzzy, no-c-format
-#| msgid "The maximum number of insns of an unswitched loop"
+#, no-c-format
msgid "maximum number of isl operations, 0 means unlimited"
-msgstr "El número máximo de insns en un bucle sin switch"
+msgstr "número máximo de operaciones isl; 0 significa que no hay límite"
#: params.def:874
-#, fuzzy, no-c-format
-#| msgid "Maximum number of datarefs in loop for building loop data dependencies"
+#, no-c-format
msgid "Maximum number of datarefs in loop for building loop data dependencies."
-msgstr "Número máximo de referencia de datos en bucles para construir dependencia de datos de bucles"
+msgstr "Número máximo de referencia de datos en bucles para construir dependencias de datos de bucles."
#: params.def:881
-#, fuzzy, no-c-format
-#| msgid "Max basic blocks number in loop for loop invariant motion"
+#, no-c-format
msgid "Max basic blocks number in loop for loop invariant motion."
-msgstr "Número máximo de bloques básicos en el bucle para el movimiento invariante de bucle"
+msgstr "Número máximo de bloques básicos en bucles para movimiento invariante de bucle."
#: params.def:889
#, no-c-format
msgid "use internal function id in profile lookup."
-msgstr ""
+msgstr "utilizar id de función interno en búsqueda de perfil."
#: params.def:897
#, no-c-format
@@ -2472,179 +2367,159 @@ msgid "track topn target addresses in indirect-call profile."
msgstr ""
#: params.def:903
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of instructions in basic block to be considered for SLP vectorization."
-msgstr "El número máximo de instrucciones en bloque básico que se consideran para vectorización SLP"
+msgstr "El número máximo de instrucciones en bloque básico que se consideran para vectorización SLP."
#: params.def:908
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count"
+#, no-c-format
msgid "Min. ratio of insns to prefetches to enable prefetching for a loop with an unknown trip count."
-msgstr "Tasa mínima de insns a precargar para activar la precarga para un bucle con una cuenta de viajes desconocida"
+msgstr "Tasa mínima de insns a precargar para activar la precarga para un bucle con una cuenta de viajes desconocida."
#: params.def:914
-#, fuzzy, no-c-format
-#| msgid "Min. ratio of insns to mem ops to enable prefetching in a loop"
+#, no-c-format
msgid "Min. ratio of insns to mem ops to enable prefetching in a loop."
-msgstr "Tasa mínima de insns a ops de mem para activar la precarga en un bucle"
+msgstr "Tasa mínima de insns a ops de mem para activar la precarga en un bucle."
#: params.def:921
-#, fuzzy, no-c-format
-#| msgid "Max. size of var tracking hash tables"
+#, no-c-format
msgid "Max. size of var tracking hash tables."
-msgstr "Tamaño máximo de las tablas de dispersión de rastreo de variables"
+msgstr "Tamaño máximo de las tablas de dispersión de rastreo de variables."
#: params.def:929
-#, fuzzy, no-c-format
-#| msgid "Max. recursion depth for expanding var tracking expressions"
+#, no-c-format
msgid "Max. recursion depth for expanding var tracking expressions."
-msgstr "Profundidad máxima de recursión para expandir expresiones de rastreo de variables"
+msgstr "Profundidad máxima de recursión para expandir expresiones de rastreo de variables."
#: params.def:937
#, no-c-format
msgid "Max. size of loc list for which reverse ops should be added."
-msgstr ""
+msgstr "Máximo tamaño de lista loc para que deban añadirse ops inversas."
#: params.def:944
-#, fuzzy, no-c-format
-#| msgid "The minimum UID to be used for a nondebug insn"
+#, no-c-format
msgid "The minimum UID to be used for a nondebug insn."
-msgstr "El UID mínimo a usar para una insn que no es de depuración"
+msgstr "El UID mínimo a usar para una insn que no es de depuración."
#: params.def:949
-#, fuzzy, no-c-format
-#| msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with"
+#, no-c-format
msgid "Maximum allowed growth of size of new parameters ipa-sra replaces a pointer to an aggregate with."
-msgstr "El crecimiento máximo permitido de tamaño de los parámetros nuevos ipa-sra que reemplazan un puntero a un agregado con"
+msgstr "El crecimiento máximo permitido de tamaño de los parámetros nuevos ipa-sra que reemplazan un puntero a un agregado con."
#: params.def:955
-#, fuzzy, no-c-format
-#| msgid "Size in bytes after which thread-local aggregates should be instrumented with the logging functions instead of save/restore pairs"
+#, no-c-format
msgid "Size in bytes after which thread-local aggregates should be instrumented with the logging functions instead of save/restore pairs."
-msgstr "Tamaño en bytes después del cual los agregados thread-local se deben instrumentar con las funciones de registro en lugar de pares save/restore"
+msgstr "Tamaño en bytes después del cual los agregados thread-local se deben instrumentar con las funciones de registro en lugar de pares save/restore."
#: params.def:962
#, no-c-format
msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for speed."
-msgstr ""
+msgstr "Máximo tamaño, en unidades de almacenamiento, de un agregado para tenerlo en cuenta en escalarización cuando se compila para velocidad."
#: params.def:968
#, no-c-format
msgid "Maximum size, in storage units, of an aggregate which should be considered for scalarization when compiling for size."
-msgstr ""
+msgstr "Máximo tamaño, en unidades de almacenamiento, de un agregado para tenerlo en cuenta en escalarización cuando se compila para tamaño."
#: params.def:974
-#, fuzzy, no-c-format
-#| msgid "Maximum size of a list of values associated with each parameter for interprocedural constant propagation"
+#, no-c-format
msgid "Maximum size of a list of values associated with each parameter for interprocedural constant propagation."
-msgstr "Tamaño máximo de una lista de valores asociada con cada parámetro para propagación constante entre procedimientos"
+msgstr "Tamaño máximo de una lista de valores asociada con cada parámetro para propagación constante entre procedimientos."
#: params.def:980
-#, fuzzy, no-c-format
-#| msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone."
+#, no-c-format
msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone.."
-msgstr "Rango de evaluación de oportunidad ipa-cp que aún se considera benéfico para clonar."
+msgstr "Rango de evaluación de oportunidad ipa-cp que aún se considera beneficioso para clonar.."
#: params.def:986
#, no-c-format
msgid "Percentage penalty the recursive functions will receive when they are evaluated for cloning.."
-msgstr ""
+msgstr "Penalización porcentual que recibirán las funciones recursivas cuando se evalúen para clonación.."
#: params.def:992
#, no-c-format
msgid "Percentage penalty functions containg a single call to another function will receive when they are evaluated for cloning.."
-msgstr ""
+msgstr "Penalización porcentual que recibirán las funciones que contien una sola llamada a otra función cuando se evalúen para clonación.."
#: params.def:998
#, no-c-format
msgid "Maximum number of aggregate content items for a parameter in jump functions and lattices."
-msgstr ""
+msgstr "Número máximo de elementos de contenido agregado de un parámetro en funciones de salto y celosías."
#: params.def:1004
#, no-c-format
msgid "Compile-time bonus IPA-CP assigns to candidates which make loop bounds or strides known.."
-msgstr ""
+msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan a conocer los límites o los pasos de los bucles.."
#: params.def:1010
#, no-c-format
msgid "Compile-time bonus IPA-CP assigns to candidates which make an array index known.."
-msgstr ""
+msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan conocer el índice de un array.."
#: params.def:1016
#, no-c-format
msgid "Maximum number of statements that will be visited by IPA formal parameter analysis based on alias analysis in any given function."
-msgstr ""
+msgstr "Número máximo de sentencias que visitará el análisis de parámetros formales de IPA basado en el análisis de alias de una función dada."
#: params.def:1024
-#, fuzzy, no-c-format
-#| msgid "Number of partitions the program should be split to"
+#, no-c-format
msgid "Number of partitions the program should be split to."
-msgstr "Número de particiones en las que se debe dividir el programa"
+msgstr "Número de particiones en las que se debe dividir el programa."
#: params.def:1029
-#, fuzzy, no-c-format
-#| msgid "Minimal size of a partition for LTO (in estimated instructions)"
+#, no-c-format
msgid "Minimal size of a partition for LTO (in estimated instructions)."
-msgstr "Tamaño minimal de una partición para LTO (en instrucciones estimadas)"
+msgstr "Tamaño minimal de una partición para LTO (en instrucciones estimadas)."
#: params.def:1036
-#, fuzzy, no-c-format
-#| msgid "Maximum number of namespaces to search for alternatives when name lookup fails"
+#, no-c-format
msgid "Maximum number of namespaces to search for alternatives when name lookup fails."
-msgstr "Número máximo de espacios de nombres a buscar por alternativas cuando falla la búsqueda de nombre"
+msgstr "Número máximo de espacios de nombres a buscar por alternativas cuando falla la búsqueda de nombre."
#: params.def:1043
-#, fuzzy, no-c-format
-#| msgid "Maximum number of conditional store pairs that can be sunk"
+#, no-c-format
msgid "Maximum number of conditional store pairs that can be sunk."
-msgstr "El número máximo de pares de almacenamiento condicional que se pueden hundir"
+msgstr "Número máximo de pares de almacenamiento condicional que se pueden hundir."
#: params.def:1051
-#, fuzzy, no-c-format
-#| msgid "The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine"
+#, no-c-format
msgid "The smallest number of different values for which it is best to use a jump-table instead of a tree of conditional branches, if 0, use the default for the machine."
-msgstr "El número más pequeño de valores diferentes para los cuales es mejor usar una tabla-salto en lugar de un árbol de ramificaciones condicionales; si es 0, usa el valor por defecto para la máquina"
+msgstr "El número más pequeño de valores diferentes para los cuales es mejor usar una tabla-salto en lugar de un árbol de ramificaciones condicionales; si es 0, usa el valor por defecto para la máquina."
#: params.def:1059
-#, fuzzy, no-c-format
-#| msgid "Allow new data races on stores to be introduced"
+#, no-c-format
msgid "Allow new data races on stores to be introduced."
-msgstr "Permite que se introduzcan carreras de datos nuevos en stores"
+msgstr "Permite que se introduzcan carreras de datos nuevos en stores."
#: params.def:1065
-#, fuzzy, no-c-format
-#| msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic."
+#, no-c-format
msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic.."
-msgstr "Establece el número máximo de instrucciones ejecutadas en paralelo en el árbol de reasociación. Si es 0, usa la heurística dependiente del objetivo."
+msgstr "Establece el número máximo de instrucciones ejecutadas en paralelo en el árbol de reasociación. Si es 0, usa la heurística dependiente del objetivo.."
#: params.def:1071
-#, fuzzy, no-c-format
-#| msgid "Maximum amount of similar bbs to compare a bb with"
+#, no-c-format
msgid "Maximum amount of similar bbs to compare a bb with."
-msgstr "Cantidad máxima de bbs similares con las cuales comparar un bb"
+msgstr "Cantidad máxima de bbs similares con las cuales comparar un bb."
#: params.def:1076
-#, fuzzy, no-c-format
-#| msgid "Maximum amount of iterations of the pass over a function"
+#, no-c-format
msgid "Maximum amount of iterations of the pass over a function."
-msgstr "Cantidad máxima de iteraciones del paso sobre una función"
+msgstr "Cantidad máxima de iteraciones del paso sobre una función."
#: params.def:1083
-#, fuzzy, no-c-format
-#| msgid "Maximum number of strings for which strlen optimization pass will track string lengths"
+#, no-c-format
msgid "Maximum number of strings for which strlen optimization pass will track string lengths."
-msgstr "Número máximo de cadenas para las que el paso de optimización de strlen rastreará longitudes de cadenas"
+msgstr "Número máximo de cadenas para las que el paso de optimización de strlen rastreará longitudes de cadenas."
#: params.def:1090
#, no-c-format
msgid "Which -fsched-pressure algorithm to apply."
-msgstr ""
+msgstr "Qué algoritmo -fsched-pressure aplicar."
#: params.def:1096
#, no-c-format
msgid "Maximum length of candidate scans for straight-line strength reduction."
-msgstr ""
+msgstr "Longitud máxima de los rastreos de candidatos para reducción de fuerza de línea directa."
#: params.def:1102
#, fuzzy, no-c-format
@@ -2684,81 +2559,77 @@ msgstr ""
#: params.def:1132
#, no-c-format
msgid "Use callbacks instead of inline code if number of accesses in function becomes greater or equal to this number."
-msgstr ""
+msgstr "Utiliza callbacks en lugar de código en línea si el número de accesos en la función se hace mayor o igual que este número."
#: params.def:1138
-#, fuzzy, no-c-format
-#| msgid "Maximum number of namespaces to search for alternatives when name lookup fails"
+#, no-c-format
msgid "Maximum number of nested calls to search for control dependencies during uninitialized variable analysis."
-msgstr "Número máximo de espacios de nombres a buscar por alternativas cuando falla la búsqueda de nombre"
+msgstr "Número máximo de llamadas anidadas para buscar dependencias de control durante el análisis de variables sin inicializar."
#: params.def:1144
#, no-c-format
msgid "Maximum number of statements to be included into a single static constructor generated by Pointer Bounds Checker."
-msgstr ""
+msgstr "Número máximo de sentencias que se incluirán en un único constructor estático generado mediante comprobador de límites de puntero."
#: params.def:1150
#, no-c-format
msgid "Scale factor to apply to the number of statements in a threading path when comparing to the number of (scaled) blocks."
-msgstr ""
+msgstr "Factor de escala que se aplicará al número de sentencias en un camino de hilo cuando se compara con el número de bloques (escaladas)."
#: params.def:1155
#, no-c-format
msgid "Maximum number of arguments a PHI may have before the FSM threader will not try to thread through its block."
-msgstr ""
+msgstr "Número máximo de argumentos que un PHI puede tener antes de que el hilador FSM no intente hacer hilo a través de su bloque."
#: params.def:1160
#, no-c-format
msgid "Scale factor to apply to the number of blocks in a threading path when comparing to the number of (scaled) statements."
-msgstr ""
+msgstr "Factor de escala que se aplicará al número de bloques en un camibo de hilo cuando se compara con el número de sentencias (escaladas)."
#: params.def:1165
#, no-c-format
msgid "Maximum number of instructions to copy when duplicating blocks on a finite state automaton jump thread path."
-msgstr ""
+msgstr "Número máximo de instrucciones que se copiarán cuando se dupliquen bloques en un camino de hilo de salto de máquina de estados."
#: params.def:1170
-#, fuzzy, no-c-format
-#| msgid "maximum number of basic blocks per function to be analyzed by Graphite"
+#, no-c-format
msgid "Maximum number of basic blocks on a finite state automaton jump thread path."
-msgstr "número máximo de bloques básicos por función para analizar con Graphite"
+msgstr "Número máximo de bloques básicos en un camino de hilo de salto de máquina de estados."
#: params.def:1175
-#, fuzzy, no-c-format
-#| msgid "Maximum number of nops to insert for a hint (Default 2)"
+#, no-c-format
msgid "Maximum number of new jump thread paths to create for a finite state automaton."
-msgstr "Número máximo de nops a insertar para una pista (Por defecto 2)"
+msgstr "Número máximo de caminos de hilo de salto nuevos que se crearán para una máquina de estados."
#: params.def:1180
#, no-c-format
msgid "Chunk size of omp schedule for loops parallelized by parloops."
-msgstr ""
+msgstr "Tamaño de la porción de planificación omp para bucles paralelizadps por parloops."
#: params.def:1185
#, no-c-format
msgid "Schedule type of omp schedule for loops parallelized by parloops (static, dynamic, guided, auto, runtime)."
-msgstr ""
+msgstr "Tipo de planificación de planificación omp para bucles paralelizados por parloops (estático, dinámico, guiado, auto, en tiempo de ejecución)."
#: params.def:1192
#, no-c-format
msgid "Maximum recursion depth allowed when querying a property of an SSA name."
-msgstr ""
+msgstr "Máxima profundidad permitida de recursividad cuando se consulta una propiedad de un nombre SSA."
#: params.def:1198
-#, fuzzy, no-c-format
-#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization"
+#, no-c-format
msgid "Maximum number of insns in a basic block to consider for RTL if-conversion."
-msgstr "El número máximo de instrucciones en bloque básico que se consideran para vectorización SLP"
+msgstr "Número máximo de insns en bloque básico que se consideran para conversión-if RTL."
#: params.def:1204
#, no-c-format
msgid "Level of hsa debug stores verbosity"
-msgstr ""
+msgstr "Nivel de expresividad de los almacenes de depuración hsa"
#: params.def:1209
#, no-c-format
msgid "Maximum number of may-defs visited when devirtualizing speculatively"
-msgstr ""
+msgstr "Número máximo de definiciones posibles visitadas cuando se desvirtualiza especulativamente"
#: c-family/c-format.c:417
msgid "format"
@@ -3043,16 +2914,15 @@ msgstr "No se admite el operando para el código '%c'"
#: config/aarch64/aarch64.c:4492 config/aarch64/aarch64.c:4504
#: config/aarch64/aarch64.c:4515 config/aarch64/aarch64.c:4538
#: config/aarch64/aarch64.c:4591 config/aarch64/aarch64.c:4794
-#, fuzzy, c-format
-#| msgid "invalid operand for code '%c'"
+#, c-format
msgid "invalid operand for '%%%c'"
-msgstr "operando inválido para el código '%c'"
+msgstr "operando no válido para '%%%c'"
#: config/aarch64/aarch64.c:4558 config/aarch64/aarch64.c:4571
#: config/aarch64/aarch64.c:4581
#, c-format
msgid "incompatible floating point / vector register operand for '%%%c'"
-msgstr ""
+msgstr "coma flotante incompatible / operando de registro de vector para '%%%c'"
#: config/aarch64/aarch64.c:4627 config/arm/arm.c:22504
#, c-format
@@ -3060,22 +2930,19 @@ msgid "missing operand"
msgstr "falta un operando"
#: config/aarch64/aarch64.c:4689
-#, fuzzy, c-format
-#| msgid "invalid insn:"
+#, c-format
msgid "invalid constant"
-msgstr "insn inválida:"
+msgstr "constante no válida"
#: config/aarch64/aarch64.c:4692
-#, fuzzy, c-format
-#| msgid "invalid %%d operand"
+#, c-format
msgid "invalid operand"
-msgstr "operando %%d inválido"
+msgstr "operando no válido"
#: config/aarch64/aarch64.c:4805
-#, fuzzy, c-format
-#| msgid "invalid operand code '%c'"
+#, c-format
msgid "invalid operand prefix '%%%c'"
-msgstr "código de operando '%c' inválido"
+msgstr "prefijo de operando no válido '%%%c'"
#: config/alpha/alpha.c:5102 config/i386/i386.c:17140
#: config/rs6000/rs6000.c:21150 config/sparc/sparc.c:8749
@@ -3308,7 +3175,7 @@ msgstr "error interno del compilador. Dirección errónea:"
#: config/avr/avr.c:2418
#, c-format
msgid "Unsupported code '%c' for fixed-point:"
-msgstr ""
+msgstr "Código '%c' no admitido para coma fija:"
#: config/avr/avr.c:2426
msgid "internal compiler error. Unknown mode:"
@@ -3340,18 +3207,17 @@ msgid "internal compiler error. Incorrect shift:"
msgstr "error interno del compilador. Desplazamiento incorrecto:"
#: config/avr/avr.c:7975
-#, fuzzy
-#| msgid "unsupported version"
msgid "unsupported fixed-point conversion"
-msgstr "versión sin soporte"
+msgstr "conversión de coma fija no admitida"
#: config/avr/driver-avr.c:71
-#, fuzzy, c-format
-#| msgid "unknown spec function %qs"
+#, c-format
msgid ""
"Running spec function '%s' with %d args\n"
"\n"
-msgstr "función de especificación %qs desconocida"
+msgstr ""
+"función de especificación '%s' con %d args\n"
+"\n"
#: config/avr/driver-avr.c:118
#, c-format
@@ -3360,6 +3226,9 @@ msgid ""
"'%s': specfile='%s'\n"
"\n"
msgstr ""
+"'%s': mmcu='%s'\n"
+"'%s': specfile='%s'\n"
+"\n"
#: config/bfin/bfin.c:1385
#, c-format
@@ -3894,7 +3763,7 @@ msgstr "Pruebe ejecutar '%s' en el intérprete de órdenes para elevar su límit
#: config/rs6000/rs6000.c:3959
msgid "-maltivec=le not allowed for big-endian targets"
-msgstr ""
+msgstr "-maltivec=le no permitida para destinos big-endian"
#: config/rs6000/rs6000.c:3971
msgid "-mvsx requires hardware floating point"
@@ -3917,30 +3786,24 @@ msgid "-mno-altivec disables vsx"
msgstr "-mno-altivec desactiva vsx"
#: config/rs6000/rs6000.c:4129
-#, fuzzy
-#| msgid "--resource requires -o"
msgid "-mquad-memory requires 64-bit mode"
-msgstr "--resource requiere -o"
+msgstr "-mquad-memory requiere modo de 64 bits"
#: config/rs6000/rs6000.c:4132
msgid "-mquad-memory-atomic requires 64-bit mode"
-msgstr ""
+msgstr "-mquad-memory-atomic requiere modo de 64 bits"
#: config/rs6000/rs6000.c:4144
-#, fuzzy
-#| msgid "Generate code in little endian mode"
msgid "-mquad-memory is not available in little endian mode"
-msgstr "Genera código en modo little endian"
+msgstr "-mquad-memory no está disponible en modo little endian"
#: config/rs6000/rs6000.c:4212
-#, fuzzy
-#| msgid "--resource requires -o"
msgid "-mtoc-fusion requires 64-bit"
-msgstr "--resource requiere -o"
+msgstr "-mtoc-fusion requiere 64 bits"
#: config/rs6000/rs6000.c:4219
msgid "-mtoc-fusion requires medium/large code model"
-msgstr ""
+msgstr "-mtoc-fusion requiere modelo de código medio/grande"
#: config/rs6000/rs6000.c:9919
msgid "bad move"
@@ -3948,13 +3811,12 @@ msgstr "move erróneo"
#: config/rs6000/rs6000.c:20411
msgid "Bad 128-bit move"
-msgstr ""
+msgstr "Movimiento de 128 bits erróneo"
#: config/rs6000/rs6000.c:20602
-#, fuzzy, c-format
-#| msgid "invalid %%H value"
+#, c-format
msgid "invalid %%e value"
-msgstr "valor %%H inválido"
+msgstr "valor %%e no válido"
#: config/rs6000/rs6000.c:20623
#, c-format
@@ -4028,59 +3890,55 @@ msgstr "valor %%y inválido, pruebe usando la restricción 'Z'"
#: config/rs6000/rs6000.c:21814
msgid "__float128 and __ibm128 cannot be used in the same expression"
-msgstr ""
+msgstr "__float128 y __ibm128 no pueden utilizarse en la misma expresión"
#: config/rs6000/rs6000.c:21820
msgid "__ibm128 and long double cannot be used in the same expression"
-msgstr ""
+msgstr "__ibm128 y long double no pueden utilizarse en la misma expresión"
#: config/rs6000/rs6000.c:21826
msgid "__float128 and long double cannot be used in the same expression"
-msgstr ""
+msgstr "__float128 y long double no pueden utilizarse en la misma expresión"
#: config/rs6000/rs6000.c:35706
msgid "AltiVec argument passed to unprototyped function"
msgstr "Se pasó un argumento Altivec a una función sin prototipo"
#: config/rs6000/rs6000.c:37429
-#, fuzzy
-#| msgid "Do not generate code for a Sun FPA"
msgid "Could not generate addis value for fusion"
-msgstr "No generar código para un FPA de Sun"
+msgstr "No se ha podido generar valor addis para fusión"
#: config/rs6000/rs6000.c:37501
-#, fuzzy
-#| msgid "unable to generate reloads for:"
msgid "Unable to generate load/store offset for fusion"
-msgstr "no se pueden generar recargas para:"
+msgstr "No se puede generar desplazamiento de carga/almacenamiento para fusión"
#: config/rs6000/rs6000.c:37605
msgid "Bad GPR fusion"
-msgstr ""
+msgstr "Fusión GPR errónea"
#: config/rs6000/rs6000.c:37823
msgid "emit_fusion_p9_load, bad reg #1"
-msgstr ""
+msgstr "emit_fusion_p9_load, reg #1 erróneo"
#: config/rs6000/rs6000.c:37860
msgid "emit_fusion_p9_load, bad reg #2"
-msgstr ""
+msgstr "emit_fusion_p9_load, reg #2 erróneo"
#: config/rs6000/rs6000.c:37863
msgid "emit_fusion_p9_load not MEM"
-msgstr ""
+msgstr "emit_fusion_p9_load no MEM"
#: config/rs6000/rs6000.c:37901
msgid "emit_fusion_p9_store, bad reg #1"
-msgstr ""
+msgstr "emit_fusion_p9_store, reg #1 erróneo"
#: config/rs6000/rs6000.c:37938
msgid "emit_fusion_p9_store, bad reg #2"
-msgstr ""
+msgstr "emit_fusion_p9_store, reg #2 erróneo"
#: config/rs6000/rs6000.c:37941
msgid "emit_fusion_p9_store not MEM"
-msgstr ""
+msgstr "emit_fusion_p9_store no MEM"
#: config/s390/s390.c:7168
#, c-format
@@ -4159,30 +4017,24 @@ msgid "invalid expression for output modifier '%c'"
msgstr "expresión inválida para el modificador de salida '%c'"
#: config/s390/s390.c:11377
-#, fuzzy
-#| msgid "AltiVec argument passed to unprototyped function"
msgid "Vector argument passed to unprototyped function"
-msgstr "Se pasó un argumento Altivec a una función sin prototipo"
+msgstr "Se pasó un argumento vector a una función sin prototipo"
#: config/s390/s390.c:15036
-#, fuzzy
-#| msgid "pointer targets in return differ in signedness"
msgid "types differ in signess"
-msgstr "el puntero que apunta en la devolución difiere en signo"
+msgstr "los tipos difieren en el signo"
#: config/s390/s390.c:15046
msgid "binary operator does not support two vector bool operands"
-msgstr ""
+msgstr "el operador binario no admite dos operadores bool vector"
#: config/s390/s390.c:15049
-#, fuzzy
-#| msgid "profiling does not support code models other than medlow"
msgid "binary operator does not support vector bool operand"
-msgstr "el análisis de perfil no soporta modelos de código que no sean medlow"
+msgstr "el operador binario no admite operador bool vector"
#: config/s390/s390.c:15057
msgid "binary operator does not support mixing vector bool with floating point vector operands"
-msgstr ""
+msgstr "el operador binario no admite que se mezclen operandos bool vector y vector de coma flotante"
#: config/sh/sh.c:1313
#, c-format
@@ -4444,7 +4296,7 @@ msgstr "el desplazamiento de dirección no es una constante"
#: c/c-objc-common.c:160
msgid "aka"
-msgstr ""
+msgstr "también conocido como"
#: c/c-objc-common.c:187
msgid "({anonymous})"
@@ -4548,21 +4400,19 @@ msgstr "se esperaba %<:%>"
#: c/c-parser.c:5185 cp/semantics.c:613
msgid "Cilk array notation cannot be used as a computed goto expression"
-msgstr ""
+msgstr "La notaicón de array de Cilk no puede utilizarse como una expresión goto calculada"
#: c/c-parser.c:5244
-#, fuzzy
-#| msgid "expression %qE of abstract class type %qT cannot be used in throw-expression"
msgid "Cilk array notation cannot be used for a throw expression"
-msgstr "no se puede usar la expresión %qE del tipo de clase abstracta %qT en las expresiones throw"
+msgstr "La notaicón de array de Cilk no puede utilizarse para expresiones throw"
#: c/c-parser.c:5556 cp/semantics.c:1136
msgid "Cilk array notation cannot be used as a condition for switch statement"
-msgstr ""
+msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias switch"
#: c/c-parser.c:5605 cp/semantics.c:791
msgid "Cilk array notation cannot be used as a condition for while statement"
-msgstr ""
+msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias while"
#: c/c-parser.c:5656 cp/parser.c:26897
#, gcc-internal-format
@@ -4571,11 +4421,11 @@ msgstr "se esperaba %<while%>"
#: c/c-parser.c:5663 cp/semantics.c:850
msgid "Cilk array notation cannot be used as a condition for a do-while statement"
-msgstr ""
+msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias do-while"
#: c/c-parser.c:5866 cp/semantics.c:969
msgid "Cilk array notation cannot be used in a condition for a for-loop"
-msgstr ""
+msgstr "La notaicón de array de Cilk no puede utilizarse para sentencias do-while"
#: c/c-parser.c:7497
msgid "expected %<.%>"
@@ -4724,21 +4574,19 @@ msgstr "<expresión-throw>"
#: cp/error.c:2115
msgid "<ubsan routine call>"
-msgstr ""
+msgstr "<llamada a rutina ubsan>"
#: cp/error.c:2572
msgid "<unparsed>"
msgstr "<sidecodificar>"
#: cp/error.c:2723
-#, fuzzy
-#| msgid "<lambda"
msgid "<lambda>"
-msgstr "<lambda"
+msgstr "<lambda>"
#: cp/error.c:2766
msgid "*this"
-msgstr ""
+msgstr "*this"
#: cp/error.c:2776
msgid "<expression error>"
@@ -4998,30 +4846,24 @@ msgid "arguments '%s' and '%s' for intrinsic '%s'"
msgstr "argumentos '%s' y '%s' para el intrínseco '%s'"
#: fortran/error.c:871
-#, fuzzy
-#| msgid "Fortran 2008 obsolescent feature: ENTRY statement at %C"
msgid "Fortran 2008 obsolescent feature:"
-msgstr "Característica obsoleta de Fortran 2008: declaración ENTRY en %C"
+msgstr "Característica obsoleta de Fortran 2008:"
#: fortran/error.c:880
msgid "GNU Extension:"
-msgstr ""
+msgstr "Extensión GNU:"
#: fortran/error.c:883
msgid "Legacy Extension:"
-msgstr ""
+msgstr "Extensión antigua:"
#: fortran/error.c:886
-#, fuzzy
-#| msgid "Obsolescent feature: Computed GOTO at %C"
msgid "Obsolescent feature:"
-msgstr "Característica obsoleta: GOTO computado en %C"
+msgstr "Característica obsoleta:"
#: fortran/error.c:889
-#, fuzzy
-#| msgid "expected operator"
msgid "Deleted feature:"
-msgstr "operador inesperado"
+msgstr "Característica borrada:"
#: fortran/expr.c:622
#, c-format
@@ -5060,10 +4902,8 @@ msgid "Nonnegative width required"
msgstr "Se requiere una anchura que no sea negativa"
#: fortran/io.c:552
-#, fuzzy
-#| msgid "Unexpected element '%c' in format string at %L"
msgid "Unexpected element %qc in format string at %L"
-msgstr "Elemento '%c' inesperado en la cadena de formato en %L"
+msgstr "Elemento %qc inesperado en la cadena de formato en %L"
#: fortran/io.c:554
msgid "Unexpected end of format string"
@@ -5078,10 +4918,8 @@ msgid "Missing leading left parenthesis"
msgstr "Falta el paréntesis izquierdo inicial"
#: fortran/io.c:604
-#, fuzzy
-#| msgid "Left parenthesis required after '*'"
msgid "Left parenthesis required after %<*%>"
-msgstr "Se requiere paréntesis izquierdo después de '*'"
+msgstr "Se requiere paréntesis izquierdo después de %<*%>"
#: fortran/io.c:635
msgid "Expected P edit descriptor"
@@ -5254,34 +5092,24 @@ msgid "elemental procedure"
msgstr "procedimiento elemental"
#: fortran/resolve.c:2254
-#, fuzzy
-#| msgid "invalid type argument"
msgid "allocatable argument"
-msgstr "argumento de tipo inválido"
+msgstr "argumento asignable"
#: fortran/resolve.c:2259
-#, fuzzy
-#| msgid "not enough arguments"
msgid "asynchronous argument"
-msgstr "faltan argumentos"
+msgstr "argumento asíncrono"
#: fortran/resolve.c:2264
-#, fuzzy
-#| msgid "invalid PHI argument"
msgid "optional argument"
-msgstr "argumento PHI inválido"
+msgstr "argumento opcional"
#: fortran/resolve.c:2269
-#, fuzzy
-#| msgid "pointer assignment"
msgid "pointer argument"
-msgstr "asignación de puntero"
+msgstr "argumento puntero"
#: fortran/resolve.c:2274
-#, fuzzy
-#| msgid "too many arguments"
msgid "target argument"
-msgstr "demasiados argumentos"
+msgstr "argumento destino"
#: fortran/resolve.c:2279
#, fuzzy
@@ -5290,10 +5118,8 @@ msgid "value argument"
msgstr "argumento de tipo inválido"
#: fortran/resolve.c:2284
-#, fuzzy
-#| msgid "no arguments"
msgid "volatile argument"
-msgstr "sin argumentos"
+msgstr "argumento volátil"
#: fortran/resolve.c:2289
#, fuzzy
@@ -5302,16 +5128,12 @@ msgid "assumed-shape argument"
msgstr "no coinciden los argumentos"
#: fortran/resolve.c:2294
-#, fuzzy
-#| msgid "mismatched arguments"
msgid "assumed-rank argument"
-msgstr "no coinciden los argumentos"
+msgstr "se asume argumento de rango"
#: fortran/resolve.c:2299
-#, fuzzy
-#| msgid "array assignment"
msgid "coarray argument"
-msgstr "asignación de matriz"
+msgstr "argumento de coarray"
#: fortran/resolve.c:2304
#, fuzzy
@@ -5320,14 +5142,12 @@ msgid "parametrized derived type argument"
msgstr "no se han implementado las estructuras parametrizadas"
#: fortran/resolve.c:2309
-#, fuzzy
-#| msgid "no arguments"
msgid "polymorphic argument"
-msgstr "sin argumentos"
+msgstr "argumento polimórfico"
#: fortran/resolve.c:2314
msgid "NO_ARG_CHECK attribute"
-msgstr ""
+msgstr "atributo NO_ARG_CHECK"
#. As assumed-type is unlimited polymorphic (cf. above).
#. See also TS 29113, Note 6.1.
@@ -5339,13 +5159,11 @@ msgstr "argumento de tipo inválido"
#: fortran/resolve.c:2332
msgid "array result"
-msgstr ""
+msgstr "resultado array"
#: fortran/resolve.c:2337
-#, fuzzy
-#| msgid "Coindexed allocatable object at %L"
msgid "pointer or allocatable result"
-msgstr "Objeto alojable coindizado en %L"
+msgstr "puntero o resultado asignable"
#: fortran/resolve.c:2344
#, fuzzy
@@ -5365,16 +5183,14 @@ msgid "Invalid context for NULL() pointer at %%L"
msgstr "Contexto inválido para el puntero NULL() en %%L"
#: fortran/resolve.c:3574
-#, fuzzy, c-format
-#| msgid "Operand of unary numeric operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of unary numeric operator %%<%s%%> at %%L is %s"
-msgstr "El operando del operador numérico unario '%s' en %%L es %s"
+msgstr "El operando del operador numérico unitario %%<%s%%> en %%L es %s"
#: fortran/resolve.c:3590
-#, fuzzy, c-format
-#| msgid "Operands of binary numeric operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s"
-msgstr "Los operandos del operador binario numérico '%s' en %%L son %s/%s"
+msgstr "Los operandos del operador numérico binario %%<%s%%> en %%L son %s/%s"
#: fortran/resolve.c:3605
#, c-format
@@ -5382,10 +5198,9 @@ msgid "Operands of string concatenation operator at %%L are %s/%s"
msgstr "Los operandos del operador de concatenación de cadenas en %%L son %s/%s"
#: fortran/resolve.c:3624
-#, fuzzy, c-format
-#| msgid "Operands of logical operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of logical operator %%<%s%%> at %%L are %s/%s"
-msgstr "Los operandos del operador lógico '%s' en %%L son %s/%s"
+msgstr "Los operandos del operador lógico %%<%s%%> en %%L son %s/%s"
#: fortran/resolve.c:3638
#, c-format
@@ -5402,28 +5217,24 @@ msgid "Logicals at %%L must be compared with %s instead of %s"
msgstr "Los lógicos en %%L se deben comparar con %s en lugar de %s"
#: fortran/resolve.c:3709
-#, fuzzy, c-format
-#| msgid "Operands of comparison operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of comparison operator %%<%s%%> at %%L are %s/%s"
-msgstr "Los operandos del operador de comparación '%s' en %%L son %s/%s"
+msgstr "Los operandos del operador de comparación %%<%s%%> en %%L son %s/%s"
#: fortran/resolve.c:3717
-#, fuzzy, c-format
-#| msgid "Unknown operator '%s' at %%L"
+#, c-format
msgid "Unknown operator %%<%s%%> at %%L"
-msgstr "Operador '%s' desconocido en %%L"
+msgstr "Operador %%<%s%%> desconocido en %%L"
#: fortran/resolve.c:3720
-#, fuzzy, c-format
-#| msgid "Operand of user operator '%s' at %%L is %s"
+#, c-format
msgid "Operand of user operator %%<%s%%> at %%L is %s"
-msgstr "El operando del operador de usuario '%s' en %%L es %s"
+msgstr "El operando del operador de usuario %%<%s%%> en %%L es %s"
#: fortran/resolve.c:3724
-#, fuzzy, c-format
-#| msgid "Operands of user operator '%s' at %%L are %s/%s"
+#, c-format
msgid "Operands of user operator %%<%s%%> at %%L are %s/%s"
-msgstr "Los operandos del operador de usuario '%s' en %%L son %s/%s"
+msgstr "Los operandos del operador de usuario %%<%s%%> en %%L son %s/%s"
#: fortran/resolve.c:3812
#, c-format
@@ -5500,7 +5311,7 @@ msgstr "El objetivo del remapeo de rango es demasiado pequeño (%ld < %ld)"
#: fortran/trans-expr.c:9375
msgid "Assignment of scalar to unallocated array"
-msgstr ""
+msgstr "Asignación de escalar a un array sin espacio asignado"
#: fortran/trans-intrinsic.c:897
#, c-format
@@ -5769,7 +5580,7 @@ msgid ""
"For bug reporting instructions, please see:\n"
"%s.\n"
msgstr ""
-"Para instrucciones de reporte de bichos, por favor vea:\n"
+"Para instrucciones de informe de errores, por favor vea:\n"
"%s.\n"
#: java/jcf-dump.c:1258 java/jcf-dump.c:1326
@@ -5813,16 +5624,12 @@ msgid "<unnamed>"
msgstr "<sinnombre>"
#: gcc.c:747 gcc.c:751 gcc.c:806
-#, fuzzy
-#| msgid "-m%s not supported in this configuration"
msgid "-gz is not supported in this configuration"
-msgstr "no se admite -m%s en esta configuración"
+msgstr "no se admite -gz en esta configuración"
#: gcc.c:757 gcc.c:817
-#, fuzzy
-#| msgid "ifunc is not supported in this configuration"
msgid "-gz=zlib is not supported in this configuration"
-msgstr "ifunc no se admite en esta configuración"
+msgstr "no se admite -gz=zlib en esta configuración"
#: gcc.c:961
msgid "-fuse-linker-plugin is not supported in this configuration"
@@ -5830,11 +5637,11 @@ msgstr "-fuse-linker-plugin no se admite en esta configuración"
#: gcc.c:976
msgid "cannot specify -static with -fsanitize=address"
-msgstr ""
+msgstr "no se puede especificar -static con -fsanitize=address"
#: gcc.c:978
msgid "cannot specify -static with -fsanitize=thread"
-msgstr ""
+msgstr "no se puede especificar -static con -fsanitize=thread"
#: gcc.c:1122 ada/gcc-interface/lang-specs.h:33 java/jvspec.c:79
msgid "-pg and -fomit-frame-pointer are incompatible"
@@ -5964,14 +5771,12 @@ msgid "-msingle-float and -msoft-float cannot both be specified"
msgstr "no se pueden especificar -msingle-float y -msoft-float al mismo tiempo"
#: config/moxie/moxiebox.h:43
-#, fuzzy
-#| msgid "Assume target CPU is configured as little endian"
msgid "this target is little-endian"
-msgstr "Asume que el CPU destino está configurado como little endian"
+msgstr "este destino es little endian"
#: config/nios2/elf.h:44
msgid "You need a C startup file for -msys-crt0="
-msgstr ""
+msgstr "Se necesita un fichero de arranque de C para -msys-crt0="
#: config/pa/pa-hpux10.h:102 config/pa/pa-hpux10.h:105
#: config/pa/pa-hpux10.h:113 config/pa/pa-hpux10.h:116
@@ -6076,276 +5881,193 @@ msgid "objc++-cpp-output is deprecated; please use objective-c++-cpp-output inst
msgstr "objc++-cpp-output es obsoleto; pr favor use en su lugar objective-c++-cpp-output"
#: fortran/lang.opt:146
-#, fuzzy
-#| msgid "-J<directory>\tPut MODULE files in 'directory'"
msgid "-J<directory>\tPut MODULE files in 'directory'."
-msgstr "-J<directorio>\tColoca los ficheros MODULE en el 'directorio'"
+msgstr "-J<directorio>\tColoca los ficheros MODULE en el 'directorio'."
#: fortran/lang.opt:198
-#, fuzzy
-#| msgid "Warn about possible aliasing of dummy arguments"
msgid "Warn about possible aliasing of dummy arguments."
-msgstr "Avisa sobre posibles aliases de argumentos de relleno"
+msgstr "Avisa sobre posibles aliases de argumentos de relleno."
#: fortran/lang.opt:202
-#, fuzzy
-#| msgid "Warn about alignment of COMMON blocks"
msgid "Warn about alignment of COMMON blocks."
-msgstr "Avisa sobre la alineación de bloques COMMON"
+msgstr "Avisa sobre la alineación de bloques COMMON."
#: fortran/lang.opt:206
-#, fuzzy
-#| msgid "Warn about missing ampersand in continued character constants"
msgid "Warn about missing ampersand in continued character constants."
-msgstr "Avisa sobre '&' faltantes en las literales de carácter continuadas"
+msgstr "Avisa sobre '&' faltantes en las literales de carácter continuadas."
#: fortran/lang.opt:210
-#, fuzzy
-#| msgid "Warn about creation of array temporaries"
msgid "Warn about creation of array temporaries."
-msgstr "Avisa sobre la creación de matrices temporales"
+msgstr "Avisa sobre la creación de matrices temporales."
#: fortran/lang.opt:214
msgid "Warn if the type of a variable might be not interoperable with C."
-msgstr ""
+msgstr "Avisa si el tipo de una variable podría no ser interoperable con C."
#: fortran/lang.opt:222
-#, fuzzy
-#| msgid "Warn about truncated character expressions"
msgid "Warn about truncated character expressions."
-msgstr "Avisa sobre expresiones de carácter truncadas"
+msgstr "Avisa sobre expresiones de carácter truncadas."
#: fortran/lang.opt:226
msgid "Warn about equality comparisons involving REAL or COMPLEX expressions."
-msgstr ""
+msgstr "Avisa sobre comparaciones de igualdad que involucran expresiones REAL o COMPLEX."
#: fortran/lang.opt:234
-#, fuzzy
-#| msgid "Warn about most implicit conversions"
msgid "Warn about most implicit conversions."
-msgstr "Avisa sobre la mayoría de las conversiones implícitas"
+msgstr "Avisa sobre la mayoría de las conversiones implícitas."
#: fortran/lang.opt:242
-#, fuzzy
-#| msgid "Warn about function call elimination"
msgid "Warn about function call elimination."
-msgstr "Avisa sobre la eliminación de llamadas de función"
+msgstr "Avisa sobre la eliminación de llamadas de función."
#: fortran/lang.opt:246
-#, fuzzy
-#| msgid "Warn about calls with implicit interface"
msgid "Warn about calls with implicit interface."
-msgstr "Avisa sobre llamadas con interfaz implícita"
+msgstr "Avisa sobre llamadas con interfaz implícita."
#: fortran/lang.opt:250
-#, fuzzy
-#| msgid "Warn about called procedures not explicitly declared"
msgid "Warn about called procedures not explicitly declared."
-msgstr "Avisa sobre procedimientos llamados que no están declarados explícitamente"
+msgstr "Avisa sobre procedimientos llamados que no están declarados explícitamente."
#: fortran/lang.opt:254
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about constant integer divisions with truncated results."
-msgstr "Avisa sobre la división entera por cero en tiempo de compilación"
+msgstr "Avisa sobre divisiones enteras constantes con resultados truncados."
#: fortran/lang.opt:258
-#, fuzzy
-#| msgid "Warn about truncated source lines"
msgid "Warn about truncated source lines."
-msgstr "Avisa sobre líneas de código truncadas"
+msgstr "Avisa sobre líneas de código truncadas."
#: fortran/lang.opt:262
-#, fuzzy
-#| msgid "Warn on intrinsics not part of the selected standard"
msgid "Warn on intrinsics not part of the selected standard."
-msgstr "Avisa sobre intrínsecos que no son parte del estándar seleccionado"
+msgstr "Avisa sobre intrínsecos que no son parte del estándar seleccionado."
#: fortran/lang.opt:274
-#, fuzzy
-#| msgid "Warn about format strings that are not literals"
msgid "Warn about USE statements that have no ONLY qualifier."
-msgstr "Avisa sobre el uso de cadenas de formato que no son literales"
+msgstr "Avisa sobre sentencias USE sin cualificador ONLY."
#: fortran/lang.opt:286
-#, fuzzy
-#| msgid "Warn about real-literal-constants with 'q' exponent-letter"
msgid "Warn about real-literal-constants with 'q' exponent-letter."
-msgstr "Avisa sobre constantes-literales-reales con letra-exponente 'q'"
+msgstr "Avisa sobre constantes-literales-reales con letra-exponente 'q'."
#: fortran/lang.opt:290
-#, fuzzy
-#| msgid "Warn when a register variable is declared volatile"
msgid "Warn when a left-hand-side array variable is reallocated."
-msgstr "Avisa cuando una variable de registro se declara volatile"
+msgstr "Avisa cuando una variable de array al lado izquierdo es reubicada."
#: fortran/lang.opt:294
-#, fuzzy
-#| msgid "Warn when a register variable is declared volatile"
msgid "Warn when a left-hand-side variable is reallocated."
-msgstr "Avisa cuando una variable de registro se declara volatile"
+msgstr "Avisa cuando una variable al lado izquierdo es reubicada."
#: fortran/lang.opt:298
-#, fuzzy
-#| msgid "Target expression in pointer assignment at %L must deliver a pointer result"
msgid "Warn if the pointer in a pointer assignment might outlive its target."
-msgstr "La expresión objetivo en la asignación de puntero en %L debe entregar un resultado puntero"
+msgstr "Avisa si el puntero en una asignación a puntero podría sobrevivir a lo apuntado."
#: fortran/lang.opt:306
-#, fuzzy
-#| msgid "Warn about \"suspicious\" constructs"
msgid "Warn about \"suspicious\" constructs."
-msgstr "Avisa sobre construcciones \"sospechosas\" "
+msgstr "Avisa sobre construcciones \"sospechosas\"."
#: fortran/lang.opt:310
-#, fuzzy
-#| msgid "Permit nonconforming uses of the tab character"
msgid "Permit nonconforming uses of the tab character."
-msgstr "Permite usos no conformes del carácter tabulador"
+msgstr "Permite usos no conformes del carácter tabulador."
#: fortran/lang.opt:314
-#, fuzzy
-#| msgid "Warn about underflow of numerical constant expressions"
msgid "Warn about underflow of numerical constant expressions."
-msgstr "Avisa sobre desbordamiento por debajo de expresiones numéricas constantes"
+msgstr "Avisa sobre desbordamiento por debajo de expresiones numéricas constantes."
#: fortran/lang.opt:322
-#, fuzzy
-#| msgid "Warn if a user-procedure has the same name as an intrinsic"
msgid "Warn if a user-procedure has the same name as an intrinsic."
-msgstr "Avisa si un procedimiento de usuario tiene el mismo nombre que un intrínseco"
+msgstr "Avisa si un procedimiento de usuario tiene el mismo nombre que un intrínseco."
#: fortran/lang.opt:330
msgid "Warn about unused dummy arguments."
msgstr "Avisa sobre posibles argumentos de relleno sin uso."
#: fortran/lang.opt:334
-#, fuzzy
-#| msgid "Warn about zero-length formats"
msgid "Warn about zero-trip DO loops."
-msgstr "Avisa sobre formatos de longitud cero"
+msgstr "Avisa sobre bucles DO de cero vueltas."
#: fortran/lang.opt:338
-#, fuzzy
-#| msgid "Enable preprocessing"
msgid "Enable preprocessing."
-msgstr "Habilita el preprocesamiento"
+msgstr "Habilita el preprocesamiento."
#: fortran/lang.opt:346
-#, fuzzy
-#| msgid "Disable preprocessing"
msgid "Disable preprocessing."
-msgstr "Desactiva el preprocesamiento"
+msgstr "Desactiva el preprocesamiento."
#: fortran/lang.opt:354
-#, fuzzy
-#| msgid "Eliminate multiple function invokations also for impure functions"
msgid "Eliminate multiple function invokations also for impure functions."
-msgstr "También elimina invocaciones múltiples de función para funciones impure"
+msgstr "También elimina invocaciones múltiples de función para funciones impure."
#: fortran/lang.opt:358
-#, fuzzy
-#| msgid "Enable alignment of COMMON blocks"
msgid "Enable alignment of COMMON blocks."
-msgstr "Activa la alineación de bloques COMMON"
+msgstr "Activa la alineación de bloques COMMON."
#: fortran/lang.opt:362
-#, fuzzy
-#| msgid "All intrinsics procedures are available regardless of selected standard"
msgid "All intrinsics procedures are available regardless of selected standard."
-msgstr "Todos los procedimientos intrínsecos están disponibles sin importar el estándar seleccionado"
+msgstr "Todos los procedimientos intrínsecos están disponibles sin importar el estándar seleccionado."
#: fortran/lang.opt:370
-#, fuzzy
-#| msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements"
msgid "Do not treat local variables and COMMON blocks as if they were named in SAVE statements."
-msgstr "No trata las variables locales y los bloques COMMON como si fueran nombrados en declaraciones SAVE"
+msgstr "No trata las variables locales y los bloques COMMON como si fueran nombrados en declaraciones SAVE."
#: fortran/lang.opt:374
-#, fuzzy
-#| msgid "Specify that backslash in string introduces an escape character"
msgid "Specify that backslash in string introduces an escape character."
-msgstr "Especifica que la barra invertida en una cadena introduce un carácter de escape"
+msgstr "Especifica que la barra invertida en una cadena introduce un carácter de escape."
#: fortran/lang.opt:378
-#, fuzzy
-#| msgid "Produce a backtrace when a runtime error is encountered"
msgid "Produce a backtrace when a runtime error is encountered."
-msgstr "Produce un rastreo hacia atrás cuando se encuentra un error en tiempo de ejecución"
+msgstr "Produce un rastreo hacia atrás cuando se encuentra un error en tiempo de ejecución."
#: fortran/lang.opt:382
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS."
-msgstr "-fblas-matmul-limit=<n>\tTamaño de la matriz más pequeña para la cual matmul usará BLAS"
+msgstr "-fblas-matmul-limit=<n>\tTamaño de la matriz más pequeña para la cual matmul usará BLAS."
#: fortran/lang.opt:386
-#, fuzzy
-#| msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument"
msgid "Produce a warning at runtime if a array temporary has been created for a procedure argument."
-msgstr "Produce un aviso en tiempo de ejecución si se ha creado una matriz temporal para un argumento de procedimiento"
+msgstr "Produce un aviso en tiempo de ejecución si se ha creado una matriz temporal para un argumento de procedimiento."
#: fortran/lang.opt:390
msgid "-fconvert=<big-endian|little-endian|native|swap> The endianness used for unformatted files."
-msgstr ""
+msgstr "-fconvert=<big-endian|little-endian|native|swap> El endianness empleado en ficheros sin formato."
#: fortran/lang.opt:393
-#, fuzzy, c-format
-#| msgid "Unrecognized option to -finit-real: %s"
+#, c-format
msgid "Unrecognized option to endianess value: %qs"
-msgstr "No se reconoce la opción para -finit-real: %s"
+msgstr "No se reconoce la opción como valor de endianess: %qs"
#: fortran/lang.opt:409
-#, fuzzy
-#| msgid "Use the Cray Pointer extension"
msgid "Use the Cray Pointer extension."
-msgstr "Usa la extensión Puntero Cray"
+msgstr "Usa la extensión Puntero Cray."
#: fortran/lang.opt:413
-#, fuzzy
-#| msgid "Ignore 'D' in column one in fixed form"
msgid "Ignore 'D' in column one in fixed form."
-msgstr "Ignora 'D' en la columna uno en formato fija"
+msgstr "Ignora 'D' en la columna uno en formato fija."
#: fortran/lang.opt:417
-#, fuzzy
-#| msgid "Treat lines with 'D' in column one as comments"
msgid "Treat lines with 'D' in column one as comments."
-msgstr "Trata las líneas con 'D' en la columna uno como comentarios"
+msgstr "Trata las líneas con 'D' en la columna uno como comentarios."
#: fortran/lang.opt:421
-#, fuzzy
-#| msgid "Enable Plan 9 language extensions"
msgid "Enable all DEC language extensions."
-msgstr "Activa las extensiones de lenguaje de Plan9"
+msgstr "Activa todas las extensiones del lenguaje DEC."
#: fortran/lang.opt:425
msgid "Enable support for DEC STRUCTURE/RECORD."
-msgstr ""
+msgstr "Activa el soporte para STRUCTURE/RECORD de DEC."
#: fortran/lang.opt:429
-#, fuzzy
-#| msgid "Set the default double precision kind to an 8 byte wide type"
msgid "Set the default double precision kind to an 8 byte wide type."
-msgstr "Establece el género de doble precisión por defecto a un tipo de 8 bytes de anchura"
+msgstr "Establece el género de doble precisión por defecto a un tipo de 8 bytes de tamaño."
#: fortran/lang.opt:433
-#, fuzzy
-#| msgid "Set the default integer kind to an 8 byte wide type"
msgid "Set the default integer kind to an 8 byte wide type."
-msgstr "Establece el género entero por defecto a un tipo de 8 bytes de anchura"
+msgstr "Establece el género entero por defecto a un tipo de 8 bytes de tamaño."
#: fortran/lang.opt:437
-#, fuzzy
-#| msgid "Set the default real kind to an 8 byte wide type"
msgid "Set the default real kind to an 8 byte wide type."
-msgstr "Establece el género real por defecto a un tipo de 8 bytes de anchura"
+msgstr "Establece el género real por defecto a un tipo de 8 bytes de tamaño."
#: fortran/lang.opt:441
-#, fuzzy
-#| msgid "Allow dollar signs in entity names"
msgid "Allow dollar signs in entity names."
-msgstr "Permite signos de dólar en nombres de entidades"
+msgstr "Permite signos de dólar en nombres de entidades."
#: fortran/lang.opt:445 config/alpha/alpha.opt:31 common.opt:732
#: common.opt:920 common.opt:924 common.opt:928 common.opt:932 common.opt:1421
@@ -6355,172 +6077,117 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "No hace nada. Preservado por compatibilidad hacia atrás."
#: fortran/lang.opt:449
-#, fuzzy
-#| msgid "Display the code tree after parsing"
msgid "Display the code tree after parsing."
-msgstr "Muestra el árbol del código después de la decodificación"
+msgstr "Muestra el árbol del código después de analizar."
#: fortran/lang.opt:453
-#, fuzzy
-#| msgid "Display the code tree after front end optimization"
msgid "Display the code tree after front end optimization."
-msgstr "Muestra el árbol del código después de la optimización del frente"
+msgstr "Muestra el árbol del código después de la optimización del frente."
#: fortran/lang.opt:457
-#, fuzzy
-#| msgid "Display the code tree after parsing; deprecated option"
msgid "Display the code tree after parsing; deprecated option."
-msgstr "Muestra el árbol del código después de la decodificación; opción obsoleta"
+msgstr "Muestra el árbol del código después de analizar; opción obsoleta."
#: fortran/lang.opt:461
-#, fuzzy
-#| msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays"
msgid "Specify that an external BLAS library should be used for matmul calls on large-size arrays."
-msgstr "Especifica que se debe usar una librería BLAS externa para llamadas matmul en matrices de gran tamaño"
+msgstr "Especifica que se debe usar una librería BLAS externa para llamadas matmul en matrices de gran tamaño."
#: fortran/lang.opt:465
-#, fuzzy
-#| msgid "Use f2c calling convention"
msgid "Use f2c calling convention."
-msgstr "Usar la convención de llamada f2c"
+msgstr "Usar el convenio de llamada f2c."
#: fortran/lang.opt:469
-#, fuzzy
-#| msgid "Assume that the source file is fixed form"
msgid "Assume that the source file is fixed form."
-msgstr "Asume que el fichero fuente es de formato fijo"
+msgstr "Asume que el fichero fuente es de formato fijo."
#: fortran/lang.opt:473
-#, fuzzy
-#| msgid "Interpret any INTEGER(4) as an INTEGER(8)"
msgid "Interpret any INTEGER(4) as an INTEGER(8)."
-msgstr "Interpreta cualquier INTEGER(4) como INTEGER(8)"
+msgstr "Interpreta cualquier INTEGER(4) como INTEGER(8)."
#: fortran/lang.opt:477 fortran/lang.opt:481
-#, fuzzy
-#| msgid "Specify where to find the compiled intrinsic modules"
msgid "Specify where to find the compiled intrinsic modules."
-msgstr "Especifica dónde se encuentran los módulos intrínsecos compilados"
+msgstr "Especifica dónde se encuentran los módulos intrínsecos compilados."
#: fortran/lang.opt:485
-#, fuzzy
-#| msgid "Allow arbitrary character line width in fixed mode"
msgid "Allow arbitrary character line width in fixed mode."
-msgstr "Permite ancho de línea de carácter arbitrario en formato fijo"
+msgstr "Permite ancho de línea de carácter arbitrario en formato fijo."
#: fortran/lang.opt:489
-#, fuzzy
-#| msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode"
msgid "-ffixed-line-length-<n>\tUse n as character line width in fixed mode."
-msgstr "-ffixed-line-length-<n>\tUsa n como ancho de línea de carácter en modo fijo"
+msgstr "-ffixed-line-length-<n>\tUsa n como ancho de línea de carácter en modo fijo."
#: fortran/lang.opt:493
-#, fuzzy
-#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
msgid "-ffpe-trap=[...]\tStop on following floating point exceptions."
-msgstr "-ffpe-trap=[...]\tPara en las siguientes excepciones de coma flotante"
+msgstr "-ffpe-trap=[...]\tPara en las siguientes excepciones de coma flotante."
#: fortran/lang.opt:497
-#, fuzzy
-#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions."
-msgstr "-ffpe-trap=[...]\tPara en las siguientes excepciones de coma flotante"
+msgstr "-ffpe-summary=[...]\tImprime el resumen de las siguientes excepciones de coma flotante."
#: fortran/lang.opt:501
-#, fuzzy
-#| msgid "Assume that the source file is free form"
msgid "Assume that the source file is free form."
-msgstr "Asume que el fichero fuente es de formato libre"
+msgstr "Asume que el fichero fuente es de formato libre."
#: fortran/lang.opt:505
-#, fuzzy
-#| msgid "Allow arbitrary character line width in free mode"
msgid "Allow arbitrary character line width in free mode."
-msgstr "Permite ancho de línea de carácter arbitrario en formato libre"
+msgstr "Permite ancho de línea de carácter arbitrario en formato libre."
#: fortran/lang.opt:509
-#, fuzzy
-#| msgid "-ffree-line-length-<n>\tUse n as character line width in free mode"
msgid "-ffree-line-length-<n>\tUse n as character line width in free mode."
-msgstr "-ffree-line-length-<n>\tUsa n como ancho de línea de carácter en modo libre"
+msgstr "-ffree-line-length-<n>\tUsa n como ancho de línea de carácter en modo libre."
#: fortran/lang.opt:513
-#, fuzzy
-#| msgid "Enable front end optimization"
msgid "Enable front end optimization."
-msgstr "Activa las optimizaciones del frente"
+msgstr "Activa las optimizaciones del frente."
#: fortran/lang.opt:517
-#, fuzzy
-#| msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements"
msgid "Specify that no implicit typing is allowed, unless overridden by explicit IMPLICIT statements."
-msgstr "Especifica que no se permiten tipos implícitos, a menos que se sobreescriban con sentencias IMPLICIT explícitas"
+msgstr "Especifica que no se permiten tipos implícitos, a menos que se sobreescriban con sentencias IMPLICIT explícitas."
#: fortran/lang.opt:521
-#, fuzzy
-#| msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n"
msgid "-finit-character=<n>\tInitialize local character variables to ASCII value n."
-msgstr "-finit-character=<n>\tInicializa las variables de carácter locales al valor ASCII n"
+msgstr "-finit-character=<n>\tInicializa las variables de carácter locales al valor ASCII n."
#: fortran/lang.opt:525
-#, fuzzy
-#| msgid "-finit-integer=<n>\tInitialize local integer variables to n"
msgid "-finit-integer=<n>\tInitialize local integer variables to n."
-msgstr "-finit-integer=<n>\tInicializa las variables enteras locales a n"
+msgstr "-finit-integer=<n>\tInicializa las variables enteras locales a n."
#: fortran/lang.opt:529
-#, fuzzy
-#| msgid "Initialize local variables to zero (from g77)"
msgid "Initialize local variables to zero (from g77)."
-msgstr "Inicializa las variables locales a cero (de g77)"
+msgstr "Inicializa las variables locales a cero (de g77)."
#: fortran/lang.opt:533
-#, fuzzy
-#| msgid "-finit-logical=<true|false>\tInitialize local logical variables"
msgid "-finit-logical=<true|false>\tInitialize local logical variables."
-msgstr "-finit-logical=<true|false>\tInicializa las variables lógicas locales"
+msgstr "-finit-logical=<true|false>\tInicializa las variables lógicas locales."
#: fortran/lang.opt:537
-#, fuzzy
-#| msgid "-finit-real=<zero|nan|inf|-inf>\tInitialize local real variables"
msgid "-finit-real=<zero|snan|nan|inf|-inf>\tInitialize local real variables."
-msgstr "-finit-real=<zero|nan|inf|-inf>\tInicializa las variables reales locales"
+msgstr "-finit-real=<zero|nan|inf|-inf>\tInicializa las variables reales locales."
#: fortran/lang.opt:540
-#, fuzzy, c-format
-#| msgid "Unrecognized option to -finit-real: %s"
+#, c-format
msgid "Unrecognized option to floating-point init value: %qs"
-msgstr "No se reconoce la opción para -finit-real: %s"
+msgstr "No se reconoce la opción para para valor inicial de coma flotante: %qs"
#: fortran/lang.opt:559
-#, fuzzy
-#| msgid "-fblas-matmul-limit=<n>\tSize of the smallest matrix for which matmul will use BLAS"
msgid "-finline-matmul-limit=<n>\tSpecify the size of the largest matrix for which matmul will be inlined."
-msgstr "-fblas-matmul-limit=<n>\tTamaño de la matriz más pequeña para la cual matmul usará BLAS"
+msgstr "-finline-matmul-limit=<n>\tEspecifica el tamaño de la matriz más grande para la cual matmul se usará en linea."
#: fortran/lang.opt:563
-#, fuzzy
-#| msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor"
msgid "-fmax-array-constructor=<n>\tMaximum number of objects in an array constructor."
-msgstr "-fmax-array-constructor=<n>\tNúmero máximo de objetos en un constructor de matriz"
+msgstr "-fmax-array-constructor=<n>\tNúmero máximo de objetos en un constructor de matriz."
#: fortran/lang.opt:567
-#, fuzzy
-#| msgid "-fmax-identifier-length=<n>\tMaximum identifier length"
msgid "-fmax-identifier-length=<n>\tMaximum identifier length."
-msgstr "-fmax-identifier-length=<n>\tLongitud máxima de identificador"
+msgstr "-fmax-identifier-length=<n>\tLongitud máxima de identificador."
#: fortran/lang.opt:571
-#, fuzzy
-#| msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords"
msgid "-fmax-subrecord-length=<n>\tMaximum length for subrecords."
-msgstr "-fmax-subrecord-length=<n>\tLongitud máxima de los subregistros"
+msgstr "-fmax-subrecord-length=<n>\tLongitud máxima de los subregistros."
#: fortran/lang.opt:575
-#, fuzzy
-#| msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack"
msgid "-fmax-stack-var-size=<n>\tSize in bytes of the largest array that will be put on the stack."
-msgstr "-fmax-stack-var-size=<n>\tTamaño en bytes de la matriz más grande que se colocará en la pila"
+msgstr "-fmax-stack-var-size=<n>\tTamaño en bytes de la matriz más grande que se colocará en la pila."
#: fortran/lang.opt:579
msgid "Put all local arrays on stack."
@@ -6531,124 +6198,85 @@ msgid "Set default accessibility of module entities to PRIVATE."
msgstr "Establece la accesibilidad por defecto de las entidades de módulo a PRIVATE."
#: fortran/lang.opt:603
-#, fuzzy
-#| msgid "Try to lay out derived types as compactly as possible"
msgid "Try to lay out derived types as compactly as possible."
-msgstr "Trata de acomodar los tipos derivados tan compactos como sea posible"
+msgstr "Trata de acomodar los tipos derivados tan compactos como sea posible."
#: fortran/lang.opt:611
-#, fuzzy
-#| msgid "Protect parentheses in expressions"
msgid "Protect parentheses in expressions."
-msgstr "Protege paréntesis en las expresiones"
+msgstr "Protege paréntesis en las expresiones."
#: fortran/lang.opt:615
-#, fuzzy
-#| msgid "Enable range checking during compilation"
msgid "Enable range checking during compilation."
-msgstr "Permite la revisión de rango durante la compilación"
+msgstr "Permite la revisión de rango durante la compilación."
#: fortran/lang.opt:619
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(8)"
msgid "Interpret any REAL(4) as a REAL(8)."
-msgstr "Interpreta cualquier REAL(4) como un REAL(8)"
+msgstr "Interpreta cualquier REAL(4) como un REAL(8)."
#: fortran/lang.opt:623
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(10)"
msgid "Interpret any REAL(4) as a REAL(10)."
-msgstr "Interpreta cualquier REAL(4) como un REAL(10)"
+msgstr "Interpreta cualquier REAL(4) como un REAL(10)."
#: fortran/lang.opt:627
-#, fuzzy
-#| msgid "Interpret any REAL(4) as a REAL(16)"
msgid "Interpret any REAL(4) as a REAL(16)."
-msgstr "Interpreta cualquier REAL(4) como un REAL(16)"
+msgstr "Interpreta cualquier REAL(4) como un REAL(16)."
#: fortran/lang.opt:631
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(4)"
msgid "Interpret any REAL(8) as a REAL(4)."
-msgstr "Interpreta cualquier REAL(8) como un REAL(4)"
+msgstr "Interpreta cualquier REAL(8) como un REAL(4)."
#: fortran/lang.opt:635
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(10)"
msgid "Interpret any REAL(8) as a REAL(10)."
-msgstr "Interpreta cualquier REAL(8) como un REAL(10)"
+msgstr "Interpreta cualquier REAL(8) como un REAL(10)."
#: fortran/lang.opt:639
-#, fuzzy
-#| msgid "Interpret any REAL(8) as a REAL(16)"
msgid "Interpret any REAL(8) as a REAL(16)."
-msgstr "Interpreta cualquier REAL(8) como un REAL(16)"
+msgstr "Interpreta cualquier REAL(8) como un REAL(16)."
#: fortran/lang.opt:643
-#, fuzzy
-#| msgid "Reallocate the LHS in assignments"
msgid "Reallocate the LHS in assignments."
-msgstr "Reubica el lado derecho en las asignaciones"
+msgstr "Reubica el lado derecho en las asignaciones."
#: fortran/lang.opt:647
-#, fuzzy
-#| msgid "Use a 4-byte record marker for unformatted files"
msgid "Use a 4-byte record marker for unformatted files."
-msgstr "Usa un marcador de registro de 4-byte para los ficheros sin formato"
+msgstr "Usa un marcador de registro de 4 bytes para los ficheros sin formato."
#: fortran/lang.opt:651
-#, fuzzy
-#| msgid "Use an 8-byte record marker for unformatted files"
msgid "Use an 8-byte record marker for unformatted files."
-msgstr "Usa un marcador de registro de 8-byte para los ficheros sin formato"
+msgstr "Usa un marcador de registro de 8 bytes para los ficheros sin formato."
#: fortran/lang.opt:655
-#, fuzzy
-#| msgid "Allocate local variables on the stack to allow indirect recursion"
msgid "Allocate local variables on the stack to allow indirect recursion."
-msgstr "Almacena las variables locales en la pila para permitir la recursión indirecta"
+msgstr "Almacena las variables locales en la pila para permitir recursividad indirecta."
#: fortran/lang.opt:659
-#, fuzzy
-#| msgid "Copy array sections into a contiguous block on procedure entry"
msgid "Copy array sections into a contiguous block on procedure entry."
-msgstr "Copia las secciones de matriz en un bloque contiguo en la entrada de procedimiento"
+msgstr "Copia las secciones de matriz en un bloque contiguo en la entrada de procedimiento."
#: fortran/lang.opt:663
-#, fuzzy
-#| msgid "-fcoarray=[...]\tSpecify which coarray parallelization should be used"
msgid "-fcoarray=<none|single|lib>\tSpecify which coarray parallelization should be used."
-msgstr "-fcoarray=[...]\tEspecifica cuál paralelización de comatriz se debe usar"
+msgstr "-fcoarray=[...]\tEspecifica qué paralelización de comatriz se debe usar."
#: fortran/lang.opt:666
-#, fuzzy, c-format
-#| msgid "unrecognized option %<-%s%>"
+#, c-format
msgid "Unrecognized option: %qs"
-msgstr "no se reconoce la opción %<-%s%>"
+msgstr "No se reconoce la opción: %qs"
#: fortran/lang.opt:679
-#, fuzzy
-#| msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed"
msgid "-fcheck=[...]\tSpecify which runtime checks are to be performed."
-msgstr "-fcheck=[...]\tEspecifica cuáles revisiones de tiempo de ejecución se realizarán"
+msgstr "-fcheck=[...]\tEspecifica qué revisiones de tiempo de ejecución se realizarán."
#: fortran/lang.opt:683
-#, fuzzy
-#| msgid "Append a second underscore if the name already contains an underscore"
msgid "Append a second underscore if the name already contains an underscore."
-msgstr "Agrega un segundo guión bajo si el nombre ya tiene un guión bajo"
+msgstr "Agrega un segundo guión bajo si el nombre ya tiene un guión bajo."
#: fortran/lang.opt:691
-#, fuzzy
-#| msgid "Apply negative sign to zero values"
msgid "Apply negative sign to zero values."
-msgstr "Aplica signo negativo a valores cero"
+msgstr "Aplica signo negativo a valores cero."
#: fortran/lang.opt:695
-#, fuzzy
-#| msgid "Append underscores to externally visible names"
msgid "Append underscores to externally visible names."
-msgstr "Agrega subrayado a los nombres visibles externamente"
+msgstr "Agrega subrayado a los nombres visibles externamente."
#: fortran/lang.opt:699 c-family/c.opt:1155 c-family/c.opt:1179
#: c-family/c.opt:1409 config/pa/pa.opt:42 config/pa/pa.opt:66
@@ -6660,46 +6288,32 @@ msgid "Does nothing. Preserved for backward compatibility."
msgstr "No hace nada. Se preserva por compatibilidad hacia atrás."
#: fortran/lang.opt:739
-#, fuzzy
-#| msgid "Statically link the GNU Fortran helper library (libgfortran)"
msgid "Statically link the GNU Fortran helper library (libgfortran)."
-msgstr "Enlaza estáticamente la biblioteca de ayuda de GNU Fortran (libgfortran)"
+msgstr "Enlaza estáticamente la biblioteca de ayuda de GNU Fortran (libgfortran)."
#: fortran/lang.opt:743
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2003 standard"
msgid "Conform to the ISO Fortran 2003 standard."
-msgstr "Conforma al estándar ISO Fortran 2003"
+msgstr "Conforma al estándar ISO Fortran 2003."
#: fortran/lang.opt:747
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard"
msgid "Conform to the ISO Fortran 2008 standard."
-msgstr "Conforma al estándar ISO Fortran 2008"
+msgstr "Conforma al estándar ISO Fortran 2008."
#: fortran/lang.opt:751
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 2008 standard including TS 29113"
msgid "Conform to the ISO Fortran 2008 standard including TS 29113."
-msgstr "Conforma al estándar ISO Fortran 2008 incluyendo TS 29113"
+msgstr "Conforma al estándar ISO Fortran 2008 incluyendo TS 29113."
#: fortran/lang.opt:755
-#, fuzzy
-#| msgid "Conform to the ISO Fortran 95 standard"
msgid "Conform to the ISO Fortran 95 standard."
-msgstr "Conforma al estándar ISO Fortran 95"
+msgstr "Conforma al estándar ISO Fortran 95."
#: fortran/lang.opt:759
-#, fuzzy
-#| msgid "Conform to nothing in particular"
msgid "Conform to nothing in particular."
-msgstr "Conforma a nada en particular"
+msgstr "No conforma a nada en particular."
#: fortran/lang.opt:763
-#, fuzzy
-#| msgid "Accept extensions to support legacy code"
msgid "Accept extensions to support legacy code."
-msgstr "Acepta las extensiones para dar soporte a código de legado"
+msgstr "Acepta las extensiones para dar soporte a código heredado."
#: c-family/c.opt:43 c-family/c.opt:46 c-family/c.opt:181
#, c-format
@@ -6728,88 +6342,60 @@ msgid "missing path after %qs"
msgstr "falta una ruta después de %qs"
#: c-family/c.opt:182
-#, fuzzy
-#| msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>"
msgid "-A<question>=<answer>\tAssert the <answer> to <question>. Putting '-' before <question> disables the <answer> to <question>."
-msgstr "-A<pregunta>=<resp>\tRelaciona la <resp>uesta a la <pregunta>. Al colocar '-' antes de la <pregunta> desactiva la <resp>uesta a la <pregunta>"
+msgstr "-A<pregunta>=<resp>\tRelaciona la <resp>uesta a la <pregunta>. Al colocar '-' antes de la <pregunta> desactiva la <resp>uesta a la <pregunta>."
#: c-family/c.opt:186
-#, fuzzy
-#| msgid "Do not discard comments"
msgid "Do not discard comments."
-msgstr "No descarta comentarios"
+msgstr "No descarta comentarios."
#: c-family/c.opt:190
-#, fuzzy
-#| msgid "Do not discard comments in macro expansions"
msgid "Do not discard comments in macro expansions."
-msgstr "No descarta comentarios en expansiones de macro"
+msgstr "No descarta comentarios en expansiones de macro."
#: c-family/c.opt:194
-#, fuzzy
-#| msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1"
msgid "-D<macro>[=<val>]\tDefine a <macro> with <val> as its value. If just <macro> is given, <val> is taken to be 1."
-msgstr "-D<macro>[=<val>]\tDefine una <macro> con <val> como su valor. Si sólo se da la <macro>, <val> se toma como 1"
+msgstr "-D<macro>[=<val>]\tDefine una <macro> con <val> como su valor. Si sólo se da la <macro>, <val> se toma como 1."
#: c-family/c.opt:201
-#, fuzzy
-#| msgid "-F <dir>\tAdd <dir> to the end of the main framework include path"
msgid "-F <dir>\tAdd <dir> to the end of the main framework include path."
-msgstr "-F <dir>\tAgrega el <dir>ectorio al final de la ruta de inclusión del marco de trabajo principal"
+msgstr "-F <dir>\tAgrega el <dir>ectorio al final de la ruta de inclusión del marco de trabajo principal."
#: c-family/c.opt:205
-#, fuzzy
-#| msgid "Print the name of header files as they are used"
msgid "Print the name of header files as they are used."
-msgstr "Muestra los nombres de los ficheros de encabezado mientras se utilizan"
+msgstr "Muestra los nombres de los ficheros de cabecera mientras se utilizan."
#: c-family/c.opt:209
-#, fuzzy
-#| msgid "-I <dir>\tAdd <dir> to the end of the main include path"
msgid "-I <dir>\tAdd <dir> to the end of the main include path."
-msgstr "-I <dir>\tAgrega el <dir>ectorio al final de la ruta de inclusión principal"
+msgstr "-I <dir>\tAgrega el <dir>ectorio al final de la ruta de inclusión principal."
#: c-family/c.opt:213
-#, fuzzy
-#| msgid "Generate make dependencies"
msgid "Generate make dependencies."
-msgstr "Genera dependencias de make"
+msgstr "Genera dependencias de make."
#: c-family/c.opt:217
-#, fuzzy
-#| msgid "Generate make dependencies and compile"
msgid "Generate make dependencies and compile."
-msgstr "Genera dependencias de make y compila"
+msgstr "Genera dependencias de make y compila."
#: c-family/c.opt:221
-#, fuzzy
-#| msgid "-MF <file>\tWrite dependency output to the given file"
msgid "-MF <file>\tWrite dependency output to the given file."
-msgstr "-MF <fichero>\tEscribe la salida de dependencias al fichero dado"
+msgstr "-MF <fichero>\tEscribe la salida de dependencias al fichero dado."
#: c-family/c.opt:225
-#, fuzzy
-#| msgid "Treat missing header files as generated files"
msgid "Treat missing header files as generated files."
-msgstr "Trata los ficheros de encabezado faltantes como ficheros generados"
+msgstr "Trata los ficheros de cabecera faltantes como ficheros generados"
#: c-family/c.opt:229
-#, fuzzy
-#| msgid "Like -M but ignore system header files"
msgid "Like -M but ignore system header files."
-msgstr "Como -M pero descarta los ficheros de encabezado del sistema"
+msgstr "Como -M pero descarta los ficheros de cabecera del sistema."
#: c-family/c.opt:233
-#, fuzzy
-#| msgid "Like -MD but ignore system header files"
msgid "Like -MD but ignore system header files."
-msgstr "Como -MD pero descarta los ficheros de encabezado del sistema"
+msgstr "Como -MD pero descarta los ficheros de cabecera del sistema."
#: c-family/c.opt:237
-#, fuzzy
-#| msgid "Generate phony targets for all headers"
msgid "Generate phony targets for all headers."
-msgstr "Genera objetivos de prueba para todos los encabezados"
+msgstr "Genera objetivos de prueba para todas las cabecerasa."
#: c-family/c.opt:240 c-family/c.opt:244
#, c-format
@@ -6817,522 +6403,376 @@ msgid "missing makefile target after %qs"
msgstr "falta un fichero make objetivo después de %qs"
#: c-family/c.opt:241
-#, fuzzy
-#| msgid "-MQ <target>\tAdd a MAKE-quoted target"
msgid "-MQ <target>\tAdd a MAKE-quoted target."
-msgstr "-MQ <objetivo>\tAgrega un objetivo tipo-MAKE"
+msgstr "-MQ <objetivo>\tAgrega un objetivo tipo-MAKE."
#: c-family/c.opt:245
-#, fuzzy
-#| msgid "-MT <target>\tAdd an unquoted target"
msgid "-MT <target>\tAdd an unquoted target."
-msgstr "-MT <objetivo>\tAgrega un objetivo no citado"
+msgstr "-MT <objetivo>\tAgrega un objetivo no citado."
#: c-family/c.opt:249
-#, fuzzy
-#| msgid "Do not generate #line directives"
msgid "Do not generate #line directives."
-msgstr "No genera directivas #line"
+msgstr "No genera directivas #line."
#: c-family/c.opt:253
-#, fuzzy
-#| msgid "-U<macro>\tUndefine <macro>"
msgid "-U<macro>\tUndefine <macro>."
-msgstr "-U<macro>\tBorra la definición de <macro>"
+msgstr "-U<macro>\tBorra la definición de <macro>."
#: c-family/c.opt:257
-#, fuzzy
-#| msgid "Warn about things that will change when compiling with an ABI-compliant compiler"
msgid "Warn about things that will change when compiling with an ABI-compliant compiler."
-msgstr "Avisa sobre cosas que cambiarán cuando se compile con un compilador que cumpla con la ABI"
+msgstr "Avisa sobre cosas que cambiarán cuando se compile con un compilador que cumpla con la ABI."
#: c-family/c.opt:261
msgid "Warn about things that change between the current -fabi-version and the specified version."
-msgstr ""
+msgstr "Avisa sobre cosas que varían entre la -fabi-version actual y la versión especificada."
#: c-family/c.opt:265
msgid "Warn if a subobject has an abi_tag attribute that the complete object type does not have."
-msgstr ""
+msgstr "Avisa si un subojeto tiene un atributo abi_tag que el objeto completo no tiene."
#: c-family/c.opt:272
-#, fuzzy
-#| msgid "Warn about suspicious uses of memory addresses"
msgid "Warn about suspicious uses of memory addresses."
-msgstr "Avisa sobre usos sospechosos de direcciones de memoria"
+msgstr "Avisa sobre usos sospechosos de direcciones de memoria."
#: c-family/c.opt:276 ada/gcc-interface/lang.opt:57
-#, fuzzy
-#| msgid "Enable most warning messages"
msgid "Enable most warning messages."
-msgstr "Activa casi todos los mensajes de aviso"
+msgstr "Activa casi todos los mensajes de aviso."
#: c-family/c.opt:288
-#, fuzzy
-#| msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector"
msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector."
-msgstr "Avisa cuando se intercepte una asignación Objective-C por el recolector de basura"
+msgstr "Avisa cuando se intercepte una asignación Objective-C por el recolector de basura."
#: c-family/c.opt:292
-#, fuzzy
-#| msgid "Warn about casting functions to incompatible types"
msgid "Warn about casting functions to incompatible types."
-msgstr "Avisa por funciones de conversión a tipos incompatibles"
+msgstr "Advierte de funciones de conversión a tipos incompatibles."
#: c-family/c.opt:296
msgid "Warn about boolean expression compared with an integer value different from true/false."
-msgstr ""
+msgstr "Advierte de expresiones booleanas comparadas con valores enteros distintos de verdadero/falso."
#: c-family/c.opt:300
msgid "Warn when __builtin_frame_address or __builtin_return_address is used unsafely."
-msgstr ""
+msgstr "Avisa cuando __builtin_frame_address o __builtin_return_address se usan de forma no segura."
#: c-family/c.opt:304
-#, fuzzy
-#| msgid "Warn when a built-in preprocessor macro is undefined or redefined"
msgid "Warn when a built-in preprocessor macro is undefined or redefined."
-msgstr "Avisa cuando una macro de preprocesador interna está sin definir o redefinida"
+msgstr "Avisa cuando una macro de preprocesador interna está sin definir o redefinida."
#: c-family/c.opt:308
-#, fuzzy
-#| msgid "Warn about features not present in traditional C"
msgid "Warn about features not present in ISO C90, but present in ISO C99."
-msgstr "Avisa sobre características no presentes en C tradicional"
+msgstr "Avisa sobre características no presentes en ISO C90, pero presentes en ISO C99."
#: c-family/c.opt:312
-#, fuzzy
-#| msgid "Warn about features not present in traditional C"
msgid "Warn about features not present in ISO C99, but present in ISO C11."
-msgstr "Avisa sobre características no presentes en C tradicional"
+msgstr "Avisa sobre características no presentes en ISO C99, pero presentes en ISO C11."
#: c-family/c.opt:316
-#, fuzzy
-#| msgid "Warn about C constructs that are not in the common subset of C and C++"
msgid "Warn about C constructs that are not in the common subset of C and C++."
-msgstr "Avisa sobre construcciones C que no están en el subconjunto común de C y C++"
+msgstr "Avisa sobre construcciones C que no están en el subconjunto común de C y C++."
#: c-family/c.opt:323
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011."
-msgstr "Avisa sobre constructores de C++ cuyos significados difieren entre ISO C++ 1998 e ISO C++ 2011"
+msgstr "Avisa sobre constructores de C++ cuyos significados difieren entre ISO C++ 1998 e ISO C++ 2011."
#: c-family/c.opt:327
-#, fuzzy
-#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
msgid "Warn about C++ constructs whose meaning differs between ISO C++ 2011 and ISO C++ 2014."
-msgstr "Avisa sobre constructores de C++ cuyos significados difieren entre ISO C++ 1998 e ISO C++ 2011"
+msgstr "Avisa sobre constructores de C++ cuyos significados difieren entre ISO C++ 2011 e ISO C++ 2014."
#: c-family/c.opt:331
-#, fuzzy
-#| msgid "Warn about casts which discard qualifiers"
msgid "Warn about casts which discard qualifiers."
-msgstr "Avisa sobre conversiones que descartan calificadores"
+msgstr "Avisa sobre conversiones que descartan calificadores."
#: c-family/c.opt:335
-#, fuzzy
-#| msgid "Warn about subscripts whose type is \"char\""
msgid "Warn about subscripts whose type is \"char\"."
-msgstr "Avisa sobre subíndices cuyo tipo es \"char\""
+msgstr "Avisa sobre subíndices cuyo tipo es \"char\"."
#: c-family/c.opt:339
msgid "Warn about memory access errors found by Pointer Bounds Checker."
-msgstr ""
+msgstr "Advierte de errores de acceso a memoria encontrados por el Comprobador de Límites de Punteros."
#: c-family/c.opt:343
-#, fuzzy
-#| msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\""
msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"."
-msgstr "Avisa sobre variables que pueden cambiar por \"longjmp\" o \"vfork\""
+msgstr "Avisa sobre variables que pueden cambiar por \"longjmp\" o \"vfork\"."
#: c-family/c.opt:347
-#, fuzzy
-#| msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line"
msgid "Warn about possibly nested block comments, and C++ comments spanning more than one physical line."
-msgstr "Avisa sobre la posibilidad de bloques de comentarios anidados, y comentarios de C++ que abarquen más de una línea física"
+msgstr "Avisa sobre la posibilidad de bloques de comentarios anidados y comentarios de C++ que abarquen más de una línea física."
#: c-family/c.opt:351
-#, fuzzy
-#| msgid "Synonym for -Wcomment"
msgid "Synonym for -Wcomment."
-msgstr "Sinónimo de -Wcomment"
+msgstr "Sinónimo de -Wcomment."
#: c-family/c.opt:355
msgid "Warn for conditionally-supported constructs."
-msgstr ""
+msgstr "Advierte de construcciones admitidas de forma condicional."
#: c-family/c.opt:359
-#, fuzzy
-#| msgid "Warn for implicit type conversions that may change a value"
msgid "Warn for implicit type conversions that may change a value."
-msgstr "Avisa cuando hay conversiones de tipo implícitas que pueden cambiar un valor"
+msgstr "Avisa cuando hay conversiones de tipo implícitas que pueden cambiar un valor."
#: c-family/c.opt:363
-#, fuzzy
-#| msgid "Warn for converting NULL from/to a non-pointer type"
msgid "Warn for converting NULL from/to a non-pointer type."
-msgstr "Avisa cuando se convierte NULL de/a un tipo que no es puntero"
+msgstr "Avisa cuando se convierte NULL de/a un tipo que no es puntero."
#: c-family/c.opt:371
-#, fuzzy
-#| msgid "Warn when all constructors and destructors are private"
msgid "Warn when all constructors and destructors are private."
-msgstr "Avisa cuando todos los constructores y destructores son privados"
+msgstr "Avisa cuando todos los constructores y destructores son privados."
#: c-family/c.opt:375
msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage."
-msgstr ""
+msgstr "Advierte del uso de __TIME__, __DATE__ y __TIMESTAMP__."
#: c-family/c.opt:379
-#, fuzzy
-#| msgid "Warn when a declaration is found after a statement"
msgid "Warn when a declaration is found after a statement."
-msgstr "Avisa cuando se encuentra una declaración después de una declaración"
+msgstr "Avisa cuando se encuentra una declaración después de una sentencia."
#: c-family/c.opt:383
-#, fuzzy
-#| msgid "dereferencing pointer to incomplete type"
msgid "Warn when deleting a pointer to incomplete type."
-msgstr "puntero deferenciado a tipo de dato incompleto"
+msgstr "Avisa cuando se borra un puntero a un tipo incompleto."
#: c-family/c.opt:387
-#, fuzzy
-#| msgid "Warn about deleting polymorphic objects with non-virtual destructors"
msgid "Warn about deleting polymorphic objects with non-virtual destructors."
-msgstr "Avisa al borrar objetos polimórficos con destructores que no son virtuales"
+msgstr "Avisa al borrar objetos polimórficos con destructores que no son virtuales."
#: c-family/c.opt:391
-#, fuzzy
-#| msgid "Warn if a deprecated compiler feature, class, method, or field is used"
msgid "Warn if a deprecated compiler feature, class, method, or field is used."
-msgstr "Avisa si se usa una opción de compilador, clase, método o campo obsoletos"
+msgstr "Avisa si se usa una opción de compilador, clase, método o campo obsoletos."
#: c-family/c.opt:395
-#, fuzzy
-#| msgid "Warn about possibly missing braces around initializers"
msgid "Warn about positional initialization of structs requiring designated initializers."
-msgstr "Avisa sobre posibles llaves faltantes alrededor de los inicializadores"
+msgstr "Advierte de inicializaciones posicionales de estructuras que requieren inicializadores designados."
#: c-family/c.opt:399
msgid "Warn if qualifiers on arrays which are pointer targets are discarded."
-msgstr ""
+msgstr "Avisa si se descartan los cualificadores de arrays que son destinos de punteros."
#: c-family/c.opt:403
-#, fuzzy
-#| msgid "Warn whenever type qualifiers are ignored."
msgid "Warn if type qualifiers on pointers are discarded."
-msgstr "Avisa cada vez que se ignoran los calificadores de tipo."
+msgstr "Avisa si se ignoran los calificadores de tipo sobre punteros."
#: c-family/c.opt:407
-#, fuzzy
-#| msgid "Warn about compile-time integer division by zero"
msgid "Warn about compile-time integer division by zero."
-msgstr "Avisa sobre la división entera por cero en tiempo de compilación"
+msgstr "Avisa sobre la división entera por cero en tiempo de compilación."
#: c-family/c.opt:411
msgid "Warn about duplicated conditions in an if-else-if chain."
-msgstr ""
+msgstr "Advierte de condiciones duplicadas en cadenas if-else-if."
#: c-family/c.opt:415
-#, fuzzy
-#| msgid "Warn about violations of Effective C++ style rules"
msgid "Warn about violations of Effective C++ style rules."
-msgstr "Avisa sobre violaciones de reglas de estilo de Effective C++"
+msgstr "Avisa sobre violaciones de reglas de estilo de Effective C++."
#: c-family/c.opt:419
-#, fuzzy
-#| msgid "Warn about an empty body in an if or else statement"
msgid "Warn about an empty body in an if or else statement."
-msgstr "Avisa sobre un cuerpo vacío en una declaración if o else"
+msgstr "Avisa sobre un cuerpo vacío en una declaración if o else."
#: c-family/c.opt:423
-#, fuzzy
-#| msgid "Warn about stray tokens after #elif and #endif"
msgid "Warn about stray tokens after #elif and #endif."
-msgstr "Avisa sobre elementos sobrantes después de #elif y #endif"
+msgstr "Avisa sobre elementos sobrantes después de #elif y #endif."
#: c-family/c.opt:427
-#, fuzzy
-#| msgid "Warn about comparison of different enum types"
msgid "Warn about comparison of different enum types."
-msgstr "Avisar sobre comparación de tipos enum diferentes"
+msgstr "Avisar sobre comparación de tipos enum diferentes."
#: c-family/c.opt:435
-#, fuzzy
-#| msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead"
msgid "This switch is deprecated; use -Werror=implicit-function-declaration instead."
-msgstr "Esta opción es obsoleta; utilice en su lugar -Werror=implicit-function-declaration"
+msgstr "Esta opción es obsoleta; utilice en su lugar -Werror=implicit-function-declaration."
#: c-family/c.opt:439
-#, fuzzy
-#| msgid "Warn for implicit type conversions that may change a value"
msgid "Warn for implicit type conversions that cause loss of floating point precision."
-msgstr "Avisa cuando hay conversiones de tipo implícitas que pueden cambiar un valor"
+msgstr "Avisa cuando hay conversiones de tipo implícitas que provocan pérdida de precisión en coma flotante."
#: c-family/c.opt:443
-#, fuzzy
-#| msgid "Warn if testing floating point numbers for equality"
msgid "Warn if testing floating point numbers for equality."
-msgstr "Avisa si se prueban números de coma flotante para equidad"
+msgstr "Avisa si se está probando la igualdad de números de coma flotante."
#: c-family/c.opt:447 c-family/c.opt:479
-#, fuzzy
-#| msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
msgid "Warn about printf/scanf/strftime/strfmon format string anomalies."
-msgstr "Avisa sobre anomalías de cadena de formato de printf/scanf/strftime/strfmon"
+msgstr "Advierte de anomalías de cadena de formato de printf/scanf/strftime/strfmon."
#: c-family/c.opt:451
-#, fuzzy
-#| msgid "Warn about format strings that contain NUL bytes"
msgid "Warn about format strings that contain NUL bytes."
-msgstr "Avisa sobre las cadenas de formato que contengan bytes NUL"
+msgstr "Advierte de cadenas de formato que contengan bytes NUL."
#: c-family/c.opt:455
-#, fuzzy
-#| msgid "Warn if passing too many arguments to a function for its format string"
msgid "Warn if passing too many arguments to a function for its format string."
-msgstr "Avisa si se pasan demasiados argumentos a una función para su cadena de formato"
+msgstr "Avisa si se pasan demasiados argumentos a una función para su cadena de formato."
#: c-family/c.opt:459
-#, fuzzy
-#| msgid "Warn about format strings that are not literals"
msgid "Warn about format strings that are not literals."
-msgstr "Avisa sobre el uso de cadenas de formato que no son literales"
+msgstr "Avisa sobre el uso de cadenas de formato que no son literales."
#: c-family/c.opt:463
-#, fuzzy
-#| msgid "Warn about possible security problems with format functions"
msgid "Warn about possible security problems with format functions."
-msgstr "Avisa sobre posibles problemas de seguridad con funciones de formato"
+msgstr "Avisa sobre posibles problemas de seguridad con funciones de formato."
#: c-family/c.opt:467
-#, fuzzy
-#| msgid "Warn about possible security problems with format functions"
msgid "Warn about sign differences with format functions."
-msgstr "Avisa sobre posibles problemas de seguridad con funciones de formato"
+msgstr "Advierte de diferencias de signo en funciones de formato."
#: c-family/c.opt:471
-#, fuzzy
-#| msgid "Warn about strftime formats yielding 2-digit years"
msgid "Warn about strftime formats yielding 2-digit years."
-msgstr "Avisa sobre formatos de strftime que producen dos dígitos para el año"
+msgstr "Avisa sobre formatos de strftime que producen dos dígitos para el año."
#: c-family/c.opt:475
-#, fuzzy
-#| msgid "Warn about zero-length formats"
msgid "Warn about zero-length formats."
-msgstr "Avisa sobre formatos de longitud cero"
+msgstr "Avisa sobre formatos de longitud cero."
#: c-family/c.opt:483
msgid "Warn whenever type qualifiers are ignored."
msgstr "Avisa cada vez que se ignoran los calificadores de tipo."
#: c-family/c.opt:487
-#, fuzzy
-#| msgid "Warn whenever type qualifiers are ignored."
msgid "Warn whenever attributes are ignored."
-msgstr "Avisa cada vez que se ignoran los calificadores de tipo."
+msgstr "Avisa cada vez que se ignoran los atributos."
#: c-family/c.opt:491
msgid "Warn when there is a conversion between pointers that have incompatible types."
-msgstr ""
+msgstr "Avisa cuando hay conversión entre punteros de tipos incompatibles."
#: c-family/c.opt:495
-#, fuzzy
-#| msgid "Warn about variables which are initialized to themselves"
msgid "Warn about variables which are initialized to themselves."
-msgstr "Avisa sobre variables que se inicialicen ellas mismas"
+msgstr "Avisa sobre variables que se inicialicen ellas mismas."
#: c-family/c.opt:499
-#, fuzzy
-#| msgid "Warn about implicit declarations"
msgid "Warn about implicit declarations."
-msgstr "Avisa sobre declaraciones implícitas"
+msgstr "Avisa sobre declaraciones implícitas."
#: c-family/c.opt:503
-#, fuzzy
-#| msgid "Warn about implicit conversions from \"float\" to \"double\""
msgid "Warn about implicit conversions from \"float\" to \"double\"."
-msgstr "Avisa sobre conversiones implícitas de \"float\" a \"double\""
+msgstr "Avisa sobre conversiones implícitas de \"float\" a \"double\"."
#: c-family/c.opt:507
-#, fuzzy
-#| msgid "Warn about implicit function declarations"
msgid "Warn about implicit function declarations."
-msgstr "Avisa sobre la declaración implícita de funciones"
+msgstr "Avisa sobre la declaración implícita de funciones."
#: c-family/c.opt:511
-#, fuzzy
-#| msgid "Warn when a declaration does not specify a type"
msgid "Warn when a declaration does not specify a type."
-msgstr "Avisa cuando una declaración no especifique un tipo"
+msgstr "Avisa cuando una declaración no especifique un tipo."
#: c-family/c.opt:518
msgid "Warn about C++11 inheriting constructors when the base has a variadic constructor."
-msgstr ""
+msgstr "Advierte de constructores heredados de C++11 cuando la base tiene constructor variádico."
#: c-family/c.opt:522
msgid "Warn about incompatible integer to pointer and pointer to integer conversions."
-msgstr ""
+msgstr "Advierte de conversiones de entero a puntero y viceversa incompatibles."
#: c-family/c.opt:526
-#, fuzzy
-#| msgid "Warn when there is a cast to a pointer from an integer of a different size"
msgid "Warn when there is a cast to a pointer from an integer of a different size."
-msgstr "Avisa cuando hay una conversión a puntero desde un entero de tamaño diferente"
+msgstr "Avisa cuando hay una conversión a puntero desde un entero de tamaño diferente."
#: c-family/c.opt:530
-#, fuzzy
-#| msgid "Warn about invalid uses of the \"offsetof\" macro"
msgid "Warn about invalid uses of the \"offsetof\" macro."
-msgstr "Avisa sobre usos inválidos de la macro \"offsetof\""
+msgstr "Advierte de usos no válidos de la macro \"offsetof\"."
#: c-family/c.opt:534
-#, fuzzy
-#| msgid "Warn about PCH files that are found but not used"
msgid "Warn about PCH files that are found but not used."
-msgstr "Avisa sobre ficheros PCH que se encuentran pero no se usan"
+msgstr "Avisa sobre ficheros PCH que se encuentran pero no se usan."
#: c-family/c.opt:538
-#, fuzzy
-#| msgid "Warn when a jump misses a variable initialization"
msgid "Warn when a jump misses a variable initialization."
-msgstr "Avisa cuando un salto pierde una inicialización de variable"
+msgstr "Avisa cuando un salto pierde la inicialización de una variable."
#: c-family/c.opt:542
msgid "Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore."
-msgstr ""
+msgstr "Avisa cuando una cadena o un carácter literal va seguido de un sufijo ud que no empieza por guión bajo."
#: c-family/c.opt:546
-#, fuzzy
-#| msgid "Warn when a logical operator is suspiciously always evaluating to true or false"
msgid "Warn when a logical operator is suspiciously always evaluating to true or false."
-msgstr "Avisa cuando un operador lógico sospechosamente evalúa siempre como verdadero o falso"
+msgstr "Avisa cuando un operador lógico sospechosamente evalúa siempre como verdadero o falso."
#: c-family/c.opt:550
msgid "Warn when logical not is used on the left hand side operand of a comparison."
-msgstr ""
+msgstr "Avisa cuando el no lógico se utiliza en el operando izquierdo de una comparación."
#: c-family/c.opt:554
-#, fuzzy
-#| msgid "Do not warn about using \"long long\" when -pedantic"
msgid "Do not warn about using \"long long\" when -pedantic."
-msgstr "No avisa sobre el uso de \"long long\" cuando se use -pedantic"
+msgstr "No avisa sobre el uso de \"long long\" cuando se use -pedantic."
#: c-family/c.opt:558
-#, fuzzy
-#| msgid "Warn about suspicious declarations of \"main\""
msgid "Warn about suspicious declarations of \"main\"."
-msgstr "Avisa sobre declaraciones sospechosas de \"main\""
+msgstr "Avisa sobre declaraciones sospechosas de \"main\"."
#: c-family/c.opt:566
msgid "Warn about suspicious calls to memset where the third argument is constant literal zero and the second is not."
-msgstr ""
+msgstr "Advierte de llamadas sospechosas a memset en las que el tercer argumento es el cero literal constante y el segundo no lo es."
#: c-family/c.opt:570
-#, fuzzy
-#| msgid "Warn when the packed attribute has no effect on struct layout"
msgid "Warn when the indentation of the code does not reflect the block structure."
-msgstr "Avisa cuando el atributo packed no tiene efecto en la disposición de un struct"
+msgstr "Avisa cuando el sangrado del código no refleja la estructura de bloque."
#: c-family/c.opt:574
-#, fuzzy
-#| msgid "Warn about possibly missing braces around initializers"
msgid "Warn about possibly missing braces around initializers."
-msgstr "Avisa sobre posibles llaves faltantes alrededor de los inicializadores"
+msgstr "Avisa sobre posibles llaves faltantes alrededor de los inicializadores."
#: c-family/c.opt:578
-#, fuzzy
-#| msgid "Warn about global functions without previous declarations"
msgid "Warn about global functions without previous declarations."
-msgstr "Avisa sobre funciones globales sin declaraciones previas"
+msgstr "Avisa sobre funciones globales sin declaraciones previas."
#: c-family/c.opt:582
-#, fuzzy
-#| msgid "Warn about missing fields in struct initializers"
msgid "Warn about missing fields in struct initializers."
-msgstr "Avisa sobre campos faltantes en los inicializadores de struct"
+msgstr "Avisa sobre campos faltantes en los inicializadores de struct."
#: c-family/c.opt:586
msgid "Warn on direct multiple inheritance."
-msgstr ""
+msgstr "Advierte de la herencia múltiple directa."
#: c-family/c.opt:590
-#, fuzzy
-#| msgid "Warn on calls to these functions"
msgid "Warn on namespace definition."
-msgstr "Avisa en las llamadas a estas funciones"
+msgstr "Advierta de la definición de espacios de nombres."
#: c-family/c.opt:594
-#, fuzzy
-#| msgid "Warn about missing fields in struct initializers"
msgid "Warn about missing sized deallocation functions."
-msgstr "Avisa sobre campos faltantes en los inicializadores de struct"
+msgstr "Advierte de funciones de desasignación con tamaño ausentes."
#: c-family/c.opt:598
msgid "Warn about suspicious length parameters to certain string functions if the argument uses sizeof."
-msgstr ""
+msgstr "Advierte de parámetros de longitud sospechosa para determinadas funciones de cadenas si el argumento utiliza sizeof."
#: c-family/c.opt:602
msgid "Warn when sizeof is applied on a parameter declared as an array."
-msgstr ""
+msgstr "Avisa cuando se aplica sizeof a parámetros declarados como array."
#: c-family/c.opt:606
-#, fuzzy
-#| msgid "Warn about functions which might be candidates for format attributes"
msgid "Warn about functions which might be candidates for format attributes."
-msgstr "Avisa por funciones que pueden ser candidatas para atributos de formato"
+msgstr "Advierte de funciones que pueden ser candidatas para atributos de formato."
#: c-family/c.opt:610
msgid "Suggest that the override keyword be used when the declaration of a virtual"
-msgstr ""
+msgstr "Sugiere utilizar la palabra reservada override cuando en la declaración de una virtual."
#: c-family/c.opt:615
-#, fuzzy
-#| msgid "Warn about enumerated switches, with no default, missing a case"
msgid "Warn about enumerated switches, with no default, missing a case."
-msgstr "Avisa sobre switches enumerados, sin valor por defecto, que carezcan de un case"
+msgstr "Avisa sobre switches enumerados, sin valor por defecto, en los que falte un case."
#: c-family/c.opt:619
-#, fuzzy
-#| msgid "Warn about enumerated switches missing a \"default:\" statement"
msgid "Warn about enumerated switches missing a \"default:\" statement."
-msgstr "Avisa sobre switches enumerados que carezcan de una declaración \"default:\""
+msgstr "Avisa sobre switches enumerados que carezcan de una declaración \"default:\"."
#: c-family/c.opt:623
-#, fuzzy
-#| msgid "Warn about all enumerated switches missing a specific case"
msgid "Warn about all enumerated switches missing a specific case."
-msgstr "Avisa sobre todos los switches enumerados que carezcan de un case específico"
+msgstr "Avisa sobre todos los switches enumerados que carezcan de un case específico."
#: c-family/c.opt:627
-#, fuzzy
-#| msgid "Warn about truncated character expressions"
msgid "Warn about switches with boolean controlling expression."
-msgstr "Avisa sobre expresiones de carácter truncadas"
+msgstr "Avisa sobre switches cuya expresión de control sea booleana."
#: c-family/c.opt:631
-#, fuzzy
-#| msgid "for template declaration %q+D"
msgid "Warn on primary template declaration."
-msgstr "para la declaración de plantilla %q+D"
+msgstr "Avisa en la declaración de la plantilla primeraria."
#: c-family/c.opt:639
-#, fuzzy
-#| msgid "Warn about user-specified include directories that do not exist"
msgid "Warn about user-specified include directories that do not exist."
-msgstr "Avisa sobre directorios de inclusión definidos por el usuario que no existen"
+msgstr "Avisa sobre directorios de inclusión definidos por el usuario que no existen."
#: c-family/c.opt:643
-#, fuzzy
-#| msgid "Warn about function parameters declared without a type specifier in K&R-style functions"
msgid "Warn about function parameters declared without a type specifier in K&R-style functions."
-msgstr "Avisa sobre parámetros de función declarados sin un especificador de tipo en funciones de estilo K&R"
+msgstr "Avisa sobre parámetros de función declarados sin un especificador de tipo en funciones de estilo K&R."
#: c-family/c.opt:647
-#, fuzzy
-#| msgid "Warn about global functions without prototypes"
msgid "Warn about global functions without prototypes."
-msgstr "Avisa sobre funciones globales sin prototipos"
+msgstr "Avisa sobre funciones globales sin prototipos."
#: c-family/c.opt:650 c-family/c.opt:1024 c-family/c.opt:1031
#: c-family/c.opt:1205 c-family/c.opt:1224 c-family/c.opt:1247
@@ -7347,16 +6787,12 @@ msgid "switch %qs is no longer supported"
msgstr "la opción %qs ya no se admite"
#: c-family/c.opt:654
-#, fuzzy
-#| msgid "Warn about use of multi-character character constants"
msgid "Warn about use of multi-character character constants."
-msgstr "Avisa sobre el uso de constantes de carácter multicaracteres"
+msgstr "Avisa sobre el uso de constantes de carácter multicaracteres."
#: c-family/c.opt:658
-#, fuzzy
-#| msgid "Warn about narrowing conversions within { } that are ill-formed in C++11"
msgid "Warn about narrowing conversions within { } that are ill-formed in C++11."
-msgstr "Avisa sobre conversiones que estrechan dentro de { } que están mal formadas en C++11"
+msgstr "Avisa sobre conversiones que estrechan dentro de { } que están mal formadas en C++11."
#: c-family/c.opt:662
#, fuzzy
@@ -8264,7 +7700,7 @@ msgstr "Asume que los valores de tipo de enumeración están siempre dentro del
#, fuzzy
#| msgid "-ftabstop=<number>\tDistance between tab stops for column reporting"
msgid "-ftabstop=<number>\tDistance between tab stops for column reporting."
-msgstr "-ftabstop=<número>\tDistancia entre topes de tabulador para reportes en columnas"
+msgstr "-ftabstop=<número>\tDistancia entre topes de tabulador para informes en columnas"
#: c-family/c.opt:1507
#, fuzzy
@@ -9494,13 +8930,13 @@ msgstr "Especifica el tamaño de bit para los desplazamientos TLS inmediatos"
#, fuzzy
#| msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
msgid "-march=ARCH\tUse features of architecture ARCH."
-msgstr "-mcpu=CPU\tUsa las características y el código de calendarizador para el CPU dado"
+msgstr "-mcpu=CPU\tUsa las características y el código de planificador para el CPU dado"
#: config/aarch64/aarch64.opt:124
#, fuzzy
#| msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
msgid "-mcpu=CPU\tUse features of and optimize for CPU."
-msgstr "-mcpu=CPU\tUsa las características y el código de calendarizador para el CPU dado"
+msgstr "-mcpu=CPU\tUsa las características y el código de planificador para el CPU dado"
#: config/aarch64/aarch64.opt:128
msgid "-mtune=CPU\tOptimize for CPU."
@@ -9704,7 +9140,7 @@ msgstr "Especifica el tamaño de bit para los desplazamientos TLS inmediatos"
#, fuzzy
#| msgid "Schedule code for given CPU"
msgid "Schedule code for given CPU."
-msgstr "Código de calendarizador para el CPU dado"
+msgstr "Código de planificador para el CPU dado"
#: config/ia64/ia64.opt:126
msgid "Known Itanium CPUs (for use with the -mtune= option):"
@@ -10660,7 +10096,7 @@ msgstr ""
#, fuzzy
#| msgid "Do dispatch scheduling if processor is bdver1 or bdver2 and Haifa scheduling"
msgid "Do dispatch scheduling if processor is bdver1, bdver2, bdver3, bdver4"
-msgstr "Despacha al calendarizador si el procesador es bdver1 o bdver2 y la calendarización es Haifa"
+msgstr "Despacha al planificador si el procesador es bdver1 o bdver2 y la calendarización es Haifa"
#: config/i386/i386.opt:582
msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
@@ -12235,7 +11671,7 @@ msgstr ""
#, fuzzy
#| msgid "Use features of and schedule code for given CPU"
msgid "Use features of and schedule code for given CPU."
-msgstr "Usa las características y el código de calendarizador para el CPU dado"
+msgstr "Usa las características y el código de planificador para el CPU dado"
#: config/sparc/sparc.opt:206
#, fuzzy
@@ -12653,13 +12089,13 @@ msgstr "se usa long double de precisión extendida de IBM"
#, fuzzy
#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
msgid "-mcpu=\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=\tUsa las características y el código de calendarizador para el CPU dado"
+msgstr "-mcpu=\tUsa las características y el código de planificador para el CPU dado"
#: config/rs6000/rs6000.opt:414
#, fuzzy
#| msgid "-mtune=\tSchedule code for given CPU"
msgid "-mtune=\tSchedule code for given CPU."
-msgstr "-mtune=\tCódigo de calendarizador para el CPU dado"
+msgstr "-mtune=\tCódigo de planificador para el CPU dado"
#: config/rs6000/rs6000.opt:418
#, fuzzy
@@ -13113,7 +12549,7 @@ msgstr "Emite rdval en lugar de rduniq para un puntero thread"
#, fuzzy
#| msgid "Use features of and schedule given CPU"
msgid "Use features of and schedule given CPU."
-msgstr "Usa las características y el calendarizador del CPU dado"
+msgstr "Usa las características y el planificador del CPU dado"
#: config/alpha/alpha.opt:110
#, fuzzy
@@ -13153,7 +12589,7 @@ msgstr "Compila con longs y punteros de 32 bit, el cual es el único admitido"
#, fuzzy
#| msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
msgid "-mcpu=CPU\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=CPU\tUsa las características y el código de calendarizador para el CPU dado"
+msgstr "-mcpu=CPU\tUsa las características y el código de planificador para el CPU dado"
#: config/tilepro/tilepro.opt:32
msgid "Known TILEPro CPUs (for use with the -mcpu= option):"
@@ -14039,7 +13475,7 @@ msgstr "Usa las optimización de búsqueda de tabla para divisiones enteras smal
#, fuzzy
#| msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU"
msgid "-mcpu=PROCESSOR\t\tUse features of and schedule code for given CPU."
-msgstr "-mcpu=PROCESADOR\t\tUsa las características y el código de calendarizador para el CPU dado"
+msgstr "-mcpu=PROCESADOR\t\tUsa las características y el código de planificador para el CPU dado"
#: config/microblaze/microblaze.opt:56
#, fuzzy
@@ -14369,7 +13805,7 @@ msgstr "Permite establecer los GPRs al resultado de las comparaciones"
#, fuzzy
#| msgid "Change the amount of scheduler lookahead"
msgid "Change the amount of scheduler lookahead."
-msgstr "Cambia la cantidad de vista hacia adelante del calendarizador"
+msgstr "Cambia la cantidad de vista hacia adelante del planificador"
#: config/frv/frv.opt:219
#, fuzzy
@@ -14423,7 +13859,7 @@ msgstr "Apunta al procesador AM34"
#, fuzzy
#| msgid "Work around hardware multiply bug"
msgid "Work around hardware multiply bug."
-msgstr "Evita el bicho de multiplicación de hardware"
+msgstr "Evita el error de multiplicación de hardware"
#: config/mn10300/mn10300.opt:55
#, fuzzy
@@ -14591,7 +14027,7 @@ msgstr "Junto con -fpic y -fPIC, no utiliza referencias GOTPLT"
#, fuzzy
#| msgid "Work around bug in multiplication instruction"
msgid "Work around bug in multiplication instruction."
-msgstr "Evita el bicho en la instrucción de multiplicación"
+msgstr "Evita el error en la instrucción de multiplicación"
#: config/cris/cris.opt:51
#, fuzzy
@@ -18036,7 +17472,7 @@ msgstr "Permite el movimiento especulativo de más loads"
#, fuzzy
#| msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler"
msgid "-fsched-verbose=<number>\tSet the verbosity level of the scheduler."
-msgstr "-fsched-verbose=<número>\tEstablece el nivel de detalle del calendarizador"
+msgstr "-fsched-verbose=<número>\tEstablece el nivel de detalle del planificador"
#: common.opt:2031
#, fuzzy
@@ -18118,37 +17554,37 @@ msgstr "-fsched-stalled-insns-dep=<número>\tEstablece la revisión de distancia
#, fuzzy
#| msgid "Enable the group heuristic in the scheduler"
msgid "Enable the group heuristic in the scheduler."
-msgstr "Activa la heurística de grupo en el calendarizador"
+msgstr "Activa la heurística de grupo en el planificador"
#: common.opt:2100
#, fuzzy
#| msgid "Enable the critical path heuristic in the scheduler"
msgid "Enable the critical path heuristic in the scheduler."
-msgstr "Activa la heurística de ruta crítica en el calendarizador"
+msgstr "Activa la heurística de ruta crítica en el planificador"
#: common.opt:2104
#, fuzzy
#| msgid "Enable the speculative instruction heuristic in the scheduler"
msgid "Enable the speculative instruction heuristic in the scheduler."
-msgstr "Activa la heurística de instrucción especulativa en el calendarizador"
+msgstr "Activa la heurística de instrucción especulativa en el planificador"
#: common.opt:2108
#, fuzzy
#| msgid "Enable the rank heuristic in the scheduler"
msgid "Enable the rank heuristic in the scheduler."
-msgstr "Activa la heurística de rango en el calendarizador"
+msgstr "Activa la heurística de rango en el planificador"
#: common.opt:2112
#, fuzzy
#| msgid "Enable the last instruction heuristic in the scheduler"
msgid "Enable the last instruction heuristic in the scheduler."
-msgstr "Activa la heurística de última instrucción en el calendarizador"
+msgstr "Activa la heurística de última instrucción en el planificador"
#: common.opt:2116
#, fuzzy
#| msgid "Enable the dependent count heuristic in the scheduler"
msgid "Enable the dependent count heuristic in the scheduler."
-msgstr "Activa la heurística de cuenta dependiente en el calendarizador"
+msgstr "Activa la heurística de cuenta dependiente en el planificador"
#: common.opt:2120
#, fuzzy
@@ -24102,7 +23538,7 @@ msgstr "se solicitó seguimiento de variables, pero no se admite este formato de
#: toplev.c:1471
#, gcc-internal-format
msgid "var-tracking-assignments changes selective scheduling"
-msgstr "las asignaciones-de-rastreo-de-variable cambian el calendarizador selectivo"
+msgstr "las asignaciones-de-rastreo-de-variable cambian el planificador selectivo"
#: toplev.c:1497
#, gcc-internal-format
@@ -37228,17 +36664,17 @@ msgstr "se usaron al mismo tiempo %<long%> y %<void%> en los especificadores de
#: c/c-parser.c:12101 cp/parser.c:31327
#, gcc-internal-format
msgid "schedule %<runtime%> does not take a %<chunk_size%> parameter"
-msgstr "el calendarizador %<runtime%> no toma un parámetro %<chunk_size%>"
+msgstr "el planificador %<runtime%> no toma un parámetro %<chunk_size%>"
#: c/c-parser.c:12105 cp/parser.c:31330
#, gcc-internal-format
msgid "schedule %<auto%> does not take a %<chunk_size%> parameter"
-msgstr "el calendarizador %<auto%> no toma un parámetro %<chunk_size%>"
+msgstr "el planificador %<auto%> no toma un parámetro %<chunk_size%>"
#: c/c-parser.c:12127 cp/parser.c:31350
#, gcc-internal-format
msgid "invalid schedule kind"
-msgstr "género de calendarizador inválido"
+msgstr "género de planificador inválido"
#: c/c-parser.c:12188
#, fuzzy, gcc-internal-format
@@ -37292,7 +36728,7 @@ msgstr "%Hel argumento de collapse necesita ser una expresión entera constante
#, fuzzy, gcc-internal-format
#| msgid "invalid schedule kind"
msgid "invalid depend kind"
-msgstr "género de calendarizador inválido"
+msgstr "género de planificador inválido"
#: c/c-parser.c:12768 cp/parser.c:31917
#, fuzzy, gcc-internal-format
@@ -37304,13 +36740,13 @@ msgstr "máscara inválida"
#, fuzzy, gcc-internal-format
#| msgid "invalid schedule kind"
msgid "invalid dist_schedule kind"
-msgstr "género de calendarizador inválido"
+msgstr "género de planificador inválido"
#: c/c-parser.c:12931
#, fuzzy, gcc-internal-format
#| msgid "invalid schedule kind"
msgid "invalid proc_bind kind"
-msgstr "género de calendarizador inválido"
+msgstr "género de planificador inválido"
#: c/c-parser.c:13144 cp/parser.c:32292
#, fuzzy, gcc-internal-format
@@ -68207,10 +67643,10 @@ msgstr "se crea un selector para el método %qE que no existe"
#~ msgstr "%Hdemasiadas cláusulas %qs"
#~ msgid "%Hschedule %<runtime%> does not take a %<chunk_size%> parameter"
-#~ msgstr "%Hel calendarizador %<runtime%> no toma un parámetro %<chunk_size%>"
+#~ msgstr "%Hel planificador %<runtime%> no toma un parámetro %<chunk_size%>"
#~ msgid "%Hschedule %<auto%> does not take a %<chunk_size%> parameter"
-#~ msgstr "%Hel calendarizador %<auto%> no toma un parámetro %<chunk_size%>"
+#~ msgstr "%Hel planificador %<auto%> no toma un parámetro %<chunk_size%>"
#~ msgid "%H%qs is not valid for %qs"
#~ msgstr "%H%qs no es válido para %qs"
diff --git a/gcc/po/fr.po b/gcc/po/fr.po
index 9ce8382869d..900e126d526 100644
--- a/gcc/po/fr.po
+++ b/gcc/po/fr.po
@@ -6,46 +6,47 @@
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
# François-Xavier Coudert <fxcoudert@gmail.com>, 2008.
# Stéphane Aulery <lkppo@free.fr>, 2015, 2016.
+# Frédéric Marchal <fmarchal@perso.be>, 2016.
#
# Vocabulaire utilisé
-# lvalue = membre gauche
-# deprecated = obsolète
-# out of range = hors des limites
-# range = gamme
-# scope = porté, champ
-# shadowing = masquer
-# embedded PIC = PIC enchâssé
-# CPU = processeur
-# structure with
-# flexible member = structure ayant un membre flexible
-# flag = fanion
-# forward
-# declaration = déclaration anticipée
-# token = élément lexical (dans le contexte du parsing)
-# to subscript = indicer
-# top-level = hors de toute fonction
-# member function = fonction membre
-# template = patron (apparaît dans plusieurs dictionnaires)
+# lvalue = membre gauche
+# deprecated = obsolète
+# out of range = hors des limites
+# range = gamme
+# scope = porté, champ
+# shadowing = masquer
+# embedded PIC = PIC enchâssé
+# CPU = processeur
+# structure with
+# flexible member = structure ayant un membre flexible
+# flag = fanion
+# forward
+# declaration = déclaration anticipée
+# token = élément lexical (dans le contexte du parsing)
+# to subscript = indicer
+# top-level = hors de toute fonction
+# member function = fonction membre
+# template = patron (apparaît dans plusieurs dictionnaires)
#
# Pas traduit:
-# thread
+# thread
#
# J'ai des doutes pour :
-# inline = enligne (pas systématiquement)
+# inline = enligne (pas systématiquement)
# oui dans le contexte du langage C par exemple MR
# non autrement ...de manière générale MR
-# section attribute attribut de section OK MR
-# wide char caractère long ...non mieux caractère large MR
-# plus conforme à l'esprit.
+# section attribute = attribut de section OK MR
+# wide char = caractère long ...non mieux caractère large MR
+# plus conforme à l'esprit.
#
# ------
-# literals littéral, ou mot composé ?
+# literals = littéral, ou mot composé ?
# msgid "ISO C89 forbids compound literals"
# msgstr "le C89 ISO interdit les mots composés"
#
-# symbol table table des symboles ou table de symbole
-# command map carte des commandes
-# Combiner combinateur
+# symbol table = table des symboles ou table de symbole
+# command map = carte des commandes
+# Combiner = combinateur
# msgid ""
# ";; Combiner statistics: %d attempts, %d substitutions (%d requiring new space),\n"
# ";; %d successes.\n"
@@ -55,33 +56,33 @@
# ";; %d succès.\n"
# "\n"
#
-# promote promouvoir
+# promote = promouvoir
# msgid "the left operand of \"%s\" changes sign when promoted"
# msgstr "L'opérande gauche de « %s » change de signe lors de sa promotion"
#
-# include guards ???
+# include guards = ???
# msgid "Multiple include guards may be useful for:\n"
# msgstr "De multiples balises pour les inclusions peuvent être utiles pour :\n"
#
#
-# universal-character-name ???
+# universal-character-name = ???
# msgid "incomplete universal-character-name"
# msgid "non-hex digit '%c' in universal-character-name"
# msgid "universal-character-name on EBCDIC target"
#
-# poisoning empoisonnement
+# poisoning = empoisonnement
# msgid "poisoning existing macro \"%s\""
# msgstr "empoisonnement de la macro existente « %s »"
# MR 9-jan 2004: poisoning etc... transformé par corruption corrompu etc..
# MR 24-mai 2004: poison etc...suite au msg concernant le #pragma once et #pragma poison
#
# Autres règles:
-# - j'ai ajouté un adjectif par rapport à l'anglais si le message est
-# une phrase avec verbe conjugé.
-# - ISO est considéré comme un adjectif dans « C ISO »
+# - j'ai ajouté un adjectif par rapport à l'anglais si le message est
+# une phrase avec verbe conjugé.
+# - ISO est considéré comme un adjectif dans « C ISO »
#
# Erreurs corrigées:
-# librairies, assumer
+# librairies, assumer
#
# A faire:
# - s/en ligne/en-ligne/ modifié 9-janv-2004 MR
@@ -122,16 +123,17 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: gcc 6.1.0\n"
+"Project-Id-Version: gcc 6.2.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-08-19 21:03+0000\n"
-"PO-Revision-Date: 2016-06-02 00:10+0200\n"
-"Last-Translator: Stéphane Aulery <lkppo@free.fr>\n"
+"PO-Revision-Date: 2016-11-11 19:21+0100\n"
+"Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cfgrtl.c:2656
@@ -212,12 +214,12 @@ msgstr "propagation de const / copie désactivée"
#: diagnostic.c:210
#, c-format
msgid "%s: all warnings being treated as errors"
-msgstr "%s : les avertissements sont traités comme des erreurs"
+msgstr "%s : tous les avertissements sont traités comme des erreurs"
#: diagnostic.c:215
#, c-format
msgid "%s: some warnings being treated as errors"
-msgstr "%s : les avertissements sont traités comme des erreurs"
+msgstr "%s : certains avertissements sont traités comme des erreurs"
#: diagnostic.c:290 input.c:169 c-family/c-opts.c:1310 cp/error.c:1196
#: fortran/cpp.c:576 fortran/error.c:996 fortran/error.c:1016
@@ -260,9 +262,9 @@ msgstr "%s:%d: embrouillé par les erreurs précédentes, abandon\n"
# FIXME
#: diagnostic.c:1309
-#, c-format
+#, fuzzy, c-format
msgid "Internal compiler error: Error reporting routines re-entered.\n"
-msgstr "erreur interne au compilateur : routine de rapport d’erreur préemptée.\n"
+msgstr "Erreur interne du compilateur : Erreur en rapportant les routines ré-entrées.\n"
#: final.c:1192
msgid "negative insn length"
@@ -274,7 +276,7 @@ msgstr "n'a pu séparer insn"
#: final.c:3402
msgid "invalid 'asm': "
-msgstr "asm invalide : "
+msgstr "« asm » invalide : "
#: final.c:3531
#, c-format
@@ -304,7 +306,7 @@ msgstr "%%-code invalide"
#: final.c:3804
#, c-format
msgid "'%%l' operand isn't a label"
-msgstr "l’opérande « %%l » n'est pas une étiquette"
+msgstr "l'opérande « %%l » n'est pas une étiquette"
#. We can't handle floating point constants;
#. PRINT_OPERAND must handle them.
@@ -412,15 +414,15 @@ msgstr " Afficher les types spécifiques des options d
#: gcc.c:3390
msgid " (Use '-v --help' to display command line options of sub-processes).\n"
-msgstr " (Utiliser « -v --help » pour afficher les options de la ligne de commande des sous-processus).\n"
+msgstr " (Utilisez « -v --help » pour afficher les options de la ligne de commande des sous-processus).\n"
#: gcc.c:3391
msgid " --version Display compiler version information.\n"
-msgstr " --help Afficher des informations sur la version du compilateur.\n"
+msgstr " --version Afficher des informations sur la version du compilateur.\n"
#: gcc.c:3392
msgid " -dumpspecs Display all of the built in spec strings.\n"
-msgstr " -dumpspecs Afficher tous les chaînes de specs internes.\n"
+msgstr " -dumpspecs Afficher toutes les chaînes de specs internes.\n"
#: gcc.c:3393
msgid " -dumpversion Display the version of the compiler.\n"
@@ -440,11 +442,11 @@ msgstr " -print-libgcc-file-name Afficher le nom de la bibliothèque accompagn
#: gcc.c:3397
msgid " -print-file-name=<lib> Display the full path to library <lib>.\n"
-msgstr " -print-file-name=<lib> Afficher le chemin d’accès complet vers la bibliothèque <lib>.\n"
+msgstr " -print-file-name=<lib> Afficher le chemin complet vers la bibliothèque <lib>.\n"
#: gcc.c:3398
msgid " -print-prog-name=<prog> Display the full path to compiler component <prog>.\n"
-msgstr " -print-prog-name=<prog> Afficher le chemin d’accès complet vers le composant du compilateur <prog>.\n"
+msgstr " -print-prog-name=<prog> Afficher le chemin complet vers le composant <prog> du compilateur.\n"
#: gcc.c:3399
msgid ""
@@ -469,7 +471,7 @@ msgstr ""
#: gcc.c:3406
msgid " -print-multi-os-directory Display the relative path to OS libraries.\n"
-msgstr " -print-multi-os-directory Afficher le chemin relatif du répertoire vers les bibliothèques de l’OS.\n"
+msgstr " -print-multi-os-directory Afficher le chemin relatif vers les bibliothèques de l’OS.\n"
#: gcc.c:3407
msgid " -print-sysroot Display the target libraries directory.\n"
@@ -481,7 +483,7 @@ msgstr " -print-sysroot-headers-suffix Afficher le suffixe de la racine systèm
#: gcc.c:3409
msgid " -Wa,<options> Pass comma-separated <options> on to the assembler.\n"
-msgstr " -Wa,<options> Passer les <options> séparées par des virgules à l’assembleur.\n"
+msgstr " -Wa,<options> Passer les <options> séparées par des virgules à l'assembleur.\n"
#: gcc.c:3410
msgid " -Wp,<options> Pass comma-separated <options> on to the preprocessor.\n"
@@ -493,15 +495,15 @@ msgstr " -Wl,<options> Passer les <options> séparées par des virgu
#: gcc.c:3412
msgid " -Xassembler <arg> Pass <arg> on to the assembler.\n"
-msgstr " -Xassembler <argument> Passer l’<argument> à l’assembleur.\n"
+msgstr " -Xassembler <argument> Passer l'<argument> à l'assembleur.\n"
#: gcc.c:3413
msgid " -Xpreprocessor <arg> Pass <arg> on to the preprocessor.\n"
-msgstr " -Xpreprocessor <argument> Passer l’<argument> au préprocesseur.\n"
+msgstr " -Xpreprocessor <argument> Passer l'<argument> au préprocesseur.\n"
#: gcc.c:3414
msgid " -Xlinker <arg> Pass <arg> on to the linker.\n"
-msgstr " -Xlinker <argument> Passer l’<argument> à l’éditeur de liens.\n"
+msgstr " -Xlinker <argument> Passer l’<argument> à l'éditeur de liens.\n"
#: gcc.c:3415
msgid " -save-temps Do not delete intermediate files.\n"
@@ -509,13 +511,15 @@ msgstr " -save-temps Ne pas détruire les fichiers intermédiaires
#: gcc.c:3416
msgid " -save-temps=<arg> Do not delete intermediate files.\n"
-msgstr " -save-temps=<arg> Ne pas détruire les fichiers intermédiaires.\n"
+msgstr " -save-temps=<arg> Ne pas effacer les fichiers intermédiaires.\n"
#: gcc.c:3417
msgid ""
" -no-canonical-prefixes Do not canonicalize paths when building relative\n"
" prefixes to other gcc components.\n"
msgstr ""
+" -no-canonical-prefixes Ne pas normaliser les chemins lors de la compilation\n"
+" de préfixes relatifs à d'autres composants de gcc.\n"
#: gcc.c:3420
msgid " -pipe Use pipes rather than intermediate files.\n"
@@ -527,17 +531,19 @@ msgstr " -time Mesurer le temps d'exécution de chaque sous-
#: gcc.c:3422
msgid " -specs=<file> Override built-in specs with the contents of <file>.\n"
-msgstr " -specs=<fichier> Écraser les specs internes à l'aide du contenu du <fichier>.\n"
+msgstr " -specs=<fichier> Remplacer les specs internes par le contenu du <fichier>.\n"
#: gcc.c:3423
msgid " -std=<standard> Assume that the input sources are for <standard>.\n"
-msgstr " -std=<standard> Présumer que les fichiers sources respectent le <standard>.\n"
+msgstr " -std=<standard> Supposer que les fichiers sources respectent le <standard>.\n"
#: gcc.c:3424
msgid ""
" --sysroot=<directory> Use <directory> as the root directory for headers\n"
" and libraries.\n"
msgstr ""
+" --sysroot=<répertoire> Utiliser <répertoire> comme répertoire racine pour les\n"
+" en-têtes et les bibliothèques.\n"
#: gcc.c:3427
msgid " -B <directory> Add <directory> to the compiler's search paths.\n"
@@ -553,15 +559,15 @@ msgstr " -### Identique à -v mais les options et les comma
#: gcc.c:3430
msgid " -E Preprocess only; do not compile, assemble or link.\n"
-msgstr " -E Pré-traiter seulement ; ne pas compiler, assembler ou éditer les liens.\n"
+msgstr " -E Pré-traitement seul ; ne pas compiler, assembler ou éditer les liens.\n"
#: gcc.c:3431
msgid " -S Compile only; do not assemble or link.\n"
-msgstr " -S Compiler seulement ; ne pas assembler ou éditer les liens.\n"
+msgstr " -S Compilation seule ; ne pas assembler ou éditer les liens.\n"
#: gcc.c:3432
msgid " -c Compile and assemble, but do not link.\n"
-msgstr " -S Compiler et assembler, mais ne pas éditer les liens.\n"
+msgstr " -c Compiler et assembler, mais ne pas éditer les liens.\n"
#: gcc.c:3433
msgid " -o <file> Place the output into <file>.\n"
@@ -569,11 +575,11 @@ msgstr " -o <fichier> Placer la sortie dans le <fichier>.\n"
#: gcc.c:3434
msgid " -pie Create a position independent executable.\n"
-msgstr " -pipe Créer un exécutable à chargement aléatoire en mémoire (PIE).\n"
+msgstr " -pie Créer un exécutable indépendant de la position en mémoire (PIE).\n"
#: gcc.c:3435
msgid " -shared Create a shared library.\n"
-msgstr " -shared Créer une bibliothèque partagée.\n"
+msgstr " -shared Créer une bibliothèque partagée.\n"
#: gcc.c:3436
msgid ""
@@ -582,7 +588,7 @@ msgid ""
" 'none' means revert to the default behavior of\n"
" guessing the language based on the file's extension.\n"
msgstr ""
-" -x <langage> Spécifier le langage des fichiers suivants d'entrée.\n"
+" -x <langage> Spécifier le langage des fichiers d'entrée suivants.\n"
" Les langages permis sont: c c++ assembler none\n"
" « none » signifiant d'utiliser le comportement par défaut\n"
" en tentant d'identifier le langage par l'extension du fichier.\n"
@@ -597,7 +603,7 @@ msgid ""
msgstr ""
"\n"
"Options débutant par -g, -f, -m, -O, -W, ou --param sont automatiquement\n"
-" passés aux divers sous-processus invoqués par %s. Afin de passer\n"
+" passées aux divers sous-processus invoqués par %s. Afin de passer\n"
" les autres options à ces processus l'option -W<lettre> doit être utilisé.\n"
#: gcc.c:5877
@@ -628,17 +634,17 @@ msgstr "gcc version %s %s\n"
#: gcc.c:6610
#, c-format
msgid "gcc driver version %s %sexecuting gcc version %s\n"
-msgstr "version du pilote gcc %s %s exécutant le version %s de gcc\n"
+msgstr "pilote gcc version %s %sexécutant gcc version %s\n"
#: gcc.c:6683 gcc.c:6895
#, c-format
msgid "The bug is not reproducible, so it is likely a hardware or OS problem.\n"
-msgstr ""
+msgstr "Le bogue n'est pas reproductible, donc c'est probablement un problème matériel ou dans l'OS.\n"
#: gcc.c:6819
#, c-format
msgid "Preprocessed source stored into %s file, please attach this to your bugreport.\n"
-msgstr ""
+msgstr "La source convertie par le préprocesseur a été stockée dans le fichier %s, veuillez l'attacher à votre rapport d'anomalie.\n"
#: gcc.c:7761
#, c-format
@@ -648,12 +654,12 @@ msgstr "installés: %s%s\n"
#: gcc.c:7764
#, c-format
msgid "programs: %s\n"
-msgstr "programmes : %s\n"
+msgstr "programmes: %s\n"
#: gcc.c:7766
#, c-format
msgid "libraries: %s\n"
-msgstr "libraries : %s\n"
+msgstr "bibliothèques: %s\n"
#: gcc.c:7883
#, c-format
@@ -662,7 +668,7 @@ msgid ""
"For bug reporting instructions, please see:\n"
msgstr ""
"\n"
-"Pour les instructions afin de rapporter des anomales, SVP consulter :\n"
+"Pour les instructions afin de rapporter des anomalies, consultez :\n"
#: gcc.c:7899 gcov-tool.c:525
#, c-format
@@ -681,8 +687,8 @@ msgid ""
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
"\n"
msgstr ""
-"Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a PAS\n"
-"GARANTIE; ni implicite pour le MARCHANDAGE ou pour un BUT PARTICULIER.\n"
+"Ce logiciel est libre; voir les sources pour les conditions de copie. Il n'y a\n"
+"AUCUNE GARANTIE, pas même pour la COMMERCIALISATION ni L'ADÉQUATION À UNE TÂCHE PARTICULIÈRE.\n"
"\n"
#: gcc.c:8208
@@ -693,6 +699,10 @@ msgid ""
"==============\n"
"\n"
msgstr ""
+"\n"
+"Options du lieur\n"
+"================\n"
+"\n"
#: gcc.c:8209
#, c-format
@@ -700,6 +710,8 @@ msgid ""
"Use \"-Wl,OPTION\" to pass \"OPTION\" to the linker.\n"
"\n"
msgstr ""
+"Utilisez « -Wl,OPTION » pour passer « OPTION » au lieur.\n"
+"\n"
#: gcc.c:9501
#, c-format
@@ -708,7 +720,7 @@ msgid ""
"=================\n"
"\n"
msgstr ""
-"Options de l’assembleur\n"
+"Options de l'assembleur\n"
"=======================\n"
"\n"
@@ -718,11 +730,13 @@ msgid ""
"Use \"-Wa,OPTION\" to pass \"OPTION\" to the assembler.\n"
"\n"
msgstr ""
+"Utilisez « -Wa,OPTION » pour passer « OPTION » à l'assembleur.\n"
+"\n"
#: gcov-tool.c:166
#, c-format
msgid " merge [options] <dir1> <dir2> Merge coverage file contents\n"
-msgstr ""
+msgstr " merge [options] <rép1> <rép2> Fusionner les contenus des fichiers de couverture\n"
#: gcov-tool.c:167 gcov-tool.c:261 gcov-tool.c:417
#, c-format
@@ -732,87 +746,87 @@ msgstr " -v, --verbose Mode verbeux\n"
#: gcov-tool.c:168 gcov-tool.c:262
#, c-format
msgid " -o, --output <dir> Output directory\n"
-msgstr " -o, --output <dir> Répertoire de sortie\n"
+msgstr " -o, --output <rép> Répertoire de sortie\n"
#: gcov-tool.c:169
#, c-format
msgid " -w, --weight <w1,w2> Set weights (float point values)\n"
-msgstr ""
+msgstr " -w, --weight <p1,p2> Définir les poids (valeurs décimales)\n"
#: gcov-tool.c:185
#, c-format
msgid "Merge subcomand usage:"
-msgstr ""
+msgstr "Utilisation de la sous-commande de fusion:"
#: gcov-tool.c:260
#, c-format
msgid " rewrite [options] <dir> Rewrite coverage file contents\n"
-msgstr ""
+msgstr " rewrite [options] <rép> Réécrire le contenu des fichiers de couverture\n"
#: gcov-tool.c:263
#, c-format
msgid " -s, --scale <float or simple-frac> Scale the profile counters\n"
-msgstr ""
+msgstr " -s, --scale <décimal ou frac simple> Met à l'échelle les compteurs de profils\n"
#: gcov-tool.c:264
#, c-format
msgid " -n, --normalize <long long> Normalize the profile\n"
-msgstr ""
+msgstr " -n, --normalize <long long> Normalise le profil\n"
#: gcov-tool.c:281
#, c-format
msgid "Rewrite subcommand usage:"
-msgstr ""
+msgstr "Utilisation de la sous-commande de réécriture:"
#: gcov-tool.c:326
#, c-format
msgid "scaling cannot co-exist with normalization, skipping\n"
-msgstr ""
+msgstr "la mise à l'échelle s'oppose à la normalisation, ignoré\n"
#: gcov-tool.c:339 gcov-tool.c:349
#, c-format
msgid "incorrect format in scaling, using 1/1\n"
-msgstr ""
+msgstr "format incorrect dans la mise à l'échelle, utilise 1/1\n"
#: gcov-tool.c:359
#, c-format
msgid "normalization cannot co-exist with scaling\n"
-msgstr ""
+msgstr "la normalisation s'oppose à la mise à l'échelle\n"
#: gcov-tool.c:416
#, c-format
msgid " overlap [options] <dir1> <dir2> Compute the overlap of two profiles\n"
-msgstr ""
+msgstr " overlap [options] <rép1> <rép2> Calcule le recouvrement de deux profils\n"
#: gcov-tool.c:418
#, c-format
msgid " -h, --hotonly Only print info for hot objects/functions\n"
-msgstr " -h, --hotonly afficher seulement les informations sur les fonctions/objets chargés (hot)\n"
+msgstr " -h, --hotonly Afficher seulement les informations sur les fonctions/objets chargés (hot)\n"
#: gcov-tool.c:419
#, c-format
msgid " -f, --function Print function level info\n"
-msgstr " -f, --function afficher les informations sur le niveau de fonction\n"
+msgstr " -f, --function Afficher les informations au niveau de la fonction\n"
#: gcov-tool.c:420
#, c-format
msgid " -F, --fullname Print full filename\n"
-msgstr " -F, --fullname afficher les noms de fichier au complet\n"
+msgstr " -F, --fullname Afficher le nom complet du fichier\n"
#: gcov-tool.c:421
#, c-format
msgid " -o, --object Print object level info\n"
-msgstr " -o, --object afficher les informations sur le niveau d'objet\n"
+msgstr " -o, --object Afficher les informations au niveau de l'objet\n"
#: gcov-tool.c:422
#, c-format
msgid " -t <float>, --hot_threshold <float> Set the threshold for hotness\n"
-msgstr ""
+msgstr " -t <décimal>, --hot_threshold <décimal> Change le seuil pour déclarer une fonction ou objet « hot »\n"
#: gcov-tool.c:442
#, c-format
msgid "Overlap subcomand usage:"
-msgstr ""
+msgstr "Utilisation de la sous-commande de recouvrement:"
#: gcov-tool.c:508
#, c-format
@@ -829,16 +843,18 @@ msgid ""
"Offline tool to handle gcda counts\n"
"\n"
msgstr ""
+"Outil hors ligne pour gérer les décomptes gcda\n"
+"\n"
#: gcov-tool.c:510
#, c-format
msgid " -h, --help Print this help, then exit\n"
-msgstr " -h, --help afficher cette aide, et quitter\n"
+msgstr " -h, --help Afficher cette aide, et quitter\n"
#: gcov-tool.c:511
#, c-format
msgid " -v, --version Print version number, then exit\n"
-msgstr " -v, --version afficher le numéro de version, et quitter\n"
+msgstr " -v, --version Afficher le numéro de version, et quitter\n"
#: gcov-tool.c:515 gcov.c:492
#, c-format
@@ -848,7 +864,7 @@ msgid ""
"%s.\n"
msgstr ""
"\n"
-"Pour les instructions afin de rapporter des anomales, SVP consulter :\n"
+"Pour les instructions afin de rapporter des anomalies, consultez :\n"
"%s.\n"
#: gcov-tool.c:526
@@ -864,9 +880,9 @@ msgid ""
"FITNESS FOR A PARTICULAR PURPOSE.\n"
"\n"
msgstr ""
-"Ce logiciel est libre; voir les sources pour les conditions de copie. \n"
-"Il n'y a PAS GARANTIE; ni implicite pour le MARCHANDAGE ou\n"
-"pour un BUT PARTICULIER.\n"
+"Ce logiciel est libre; voir les sources pour les conditions de copie.\n"
+"Il n'y a AUCUNE GARANTIE; pas même pour la COMMERCIALISATION ni\n"
+"L'ADÉQUATION À UNE TÂCHE PARTICULIÈRE.\n"
"\n"
#: gcov.c:472
@@ -884,23 +900,23 @@ msgid ""
"Print code coverage information.\n"
"\n"
msgstr ""
-"Produire les informations de la couverture du code.\n"
+"Afficher les informations de couverture du code.\n"
"\n"
#: gcov.c:474
#, c-format
msgid " -h, --help Print this help, then exit\n"
-msgstr " -h, --help afficher l'aide mémoire\n"
+msgstr " -h, --help Afficher cette aide puis quitter\n"
#: gcov.c:475
#, c-format
msgid " -a, --all-blocks Show information for every basic block\n"
-msgstr " -a, --all-blocks afficher l'information pour chaque bloc de base\n"
+msgstr " -a, --all-blocks Afficher l'information pour chaque bloc de base\n"
#: gcov.c:476
#, c-format
msgid " -b, --branch-probabilities Include branch probabilities in output\n"
-msgstr " -b, --branch-probabilities inclure les probabilités de branchement dans la sortie\n"
+msgstr " -b, --branch-probabilities Inclure les probabilités de branchement dans la sortie\n"
#: gcov.c:477
#, c-format
@@ -908,23 +924,23 @@ msgid ""
" -c, --branch-counts Output counts of branches taken\n"
" rather than percentages\n"
msgstr ""
-" -c, --branch-counts donner le décompte de branchements pris\n"
+" -c, --branch-counts Afficher le décompte des branchements pris\n"
" plutôt que les pourcentages\n"
#: gcov.c:479
#, c-format
msgid " -d, --display-progress Display progress information\n"
-msgstr " -d, --display-progress afficher les informations de progression\n"
+msgstr " -d, --display-progress Afficher les informations de progression\n"
#: gcov.c:480
#, c-format
msgid " -f, --function-summaries Output summaries for each function\n"
-msgstr " -f, --function-summaries produire un sommaire pour chaque fonction\n"
+msgstr " -f, --function-summaries Produire des résumés pour chaque fonction\n"
#: gcov.c:481
#, c-format
msgid " -i, --intermediate-format Output .gcov file in intermediate text format\n"
-msgstr ""
+msgstr " -i, --intermediate-format Sortir le fichier .gcov dans un format texte intermédiaire\n"
#: gcov.c:482
#, c-format
@@ -932,48 +948,48 @@ msgid ""
" -l, --long-file-names Use long output file names for included\n"
" source files\n"
msgstr ""
-" -l, --long-file-names utiliser des longs noms de fichiers pour\n"
-" les fichier sources d'inclusion\n"
+" -l, --long-file-names Utiliser des noms longs pour les fichiers de\n"
+" sortie des fichiers sources inclus\n"
#: gcov.c:484
#, c-format
msgid " -m, --demangled-names Output demangled function names\n"
-msgstr ""
+msgstr " -m, --demangled-names Afficher les noms de fonctions sans la décoration des noms\n"
#: gcov.c:485
#, c-format
msgid " -n, --no-output Do not create an output file\n"
-msgstr " -n, --no-output ne créer de fichier de sortie\n"
+msgstr " -n, --no-output Ne pas créer de fichier de sortie\n"
#: gcov.c:486
#, c-format
msgid " -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
-msgstr " -o, --object-directory RÉP|FICHIERS rechercher les fichiers objets dans le RÉPertoire ou appelés FICHIERS\n"
+msgstr " -o, --object-directory RÉP|FICHIERS Rechercher les fichiers objets dans le RÉPertoire ou appelés FICHIERS\n"
#: gcov.c:487
#, c-format
msgid " -p, --preserve-paths Preserve all pathname components\n"
-msgstr " -p, --preserve-paths préserver tous les composants des chemins d'accès\n"
+msgstr " -p, --preserve-paths Préserver tous les composants des chemins d'accès\n"
#: gcov.c:488
#, c-format
msgid " -r, --relative-only Only show data for relative sources\n"
-msgstr " -r, --relative-only afficher seulement les données relatives aux sources\n"
+msgstr " -r, --relative-only Afficher seulement les données des sources relatives\n"
#: gcov.c:489
#, c-format
msgid " -s, --source-prefix DIR Source prefix to elide\n"
-msgstr ""
+msgstr " -s, --source-prefix RÉP Préfixe a retirer des sources\n"
#: gcov.c:490
#, c-format
msgid " -u, --unconditional-branches Show unconditional branch counts too\n"
-msgstr " -u, --unconditional-branches afficher les compteurs de branchement inconditionnel aussi\n"
+msgstr " -u, --unconditional-branches Afficher aussi les compteurs de branchements inconditionnels\n"
#: gcov.c:491
#, c-format
msgid " -v, --version Print version number, then exit\n"
-msgstr " -v, --version exécuter le numéro de <version> de gcc, si installée\n"
+msgstr " -v, --version Afficher le numéro de version puis quitter\n"
#: gcov.c:502
#, c-format
@@ -1010,17 +1026,17 @@ msgstr "\n"
#: gcov.c:856
#, c-format
msgid "Cannot open intermediate output file %s\n"
-msgstr "Impossible d'ouvrir le fichier intermédiaire de sortie « %s »\n"
+msgstr "Impossible d'ouvrir le fichier de sortie intermédiaire %s\n"
#: gcov.c:1139
#, c-format
msgid "%s:source file is newer than notes file '%s'\n"
-msgstr "%s : fichier source est plus récent que le fichier de notes « %s »\n"
+msgstr "%s: fichier source est plus récent que le fichier de notes « %s »\n"
#: gcov.c:1144
#, c-format
msgid "(the message is displayed only once per source file)\n"
-msgstr ""
+msgstr "(le message est affiché une seule fois par fichier source)\n"
#: gcov.c:1169
#, c-format
@@ -1030,87 +1046,87 @@ msgstr "%s: Impossible d'ouvrir le fichier de notes\n"
#: gcov.c:1175
#, c-format
msgid "%s:not a gcov notes file\n"
-msgstr "%s : n'est pas un fichier de notes gcov\n"
+msgstr "%s: n'est pas un fichier de notes gcov\n"
#: gcov.c:1188
#, c-format
msgid "%s:version '%.4s', prefer '%.4s'\n"
-msgstr "%s : version « %.4s », préfère « %.4s »\n"
+msgstr "%s: version « %.4s », préférée « %.4s »\n"
#: gcov.c:1234
#, c-format
msgid "%s:already seen blocks for '%s'\n"
-msgstr "%s : blocs déjà vus pour « %s »\n"
+msgstr "%s: blocs déjà vus pour « %s »\n"
#: gcov.c:1365
#, c-format
msgid "%s:corrupted\n"
-msgstr "%s : corrompu\n"
+msgstr "%s: corrompu\n"
#: gcov.c:1372
#, c-format
msgid "%s:no functions found\n"
-msgstr "%s: aucune fonction repérée\n"
+msgstr "%s: aucune fonction trouvée\n"
#: gcov.c:1391
#, c-format
msgid "%s:cannot open data file, assuming not executed\n"
-msgstr "%s : ne peut ouvrir le fichier de données, supposé non exécuté\n"
+msgstr "%s: ne peut ouvrir le fichier de données, supposé non exécuté\n"
#: gcov.c:1398
#, c-format
msgid "%s:not a gcov data file\n"
-msgstr "%s : n'est pas un fichier de données gcov\n"
+msgstr "%s: pas un fichier de données gcov\n"
#: gcov.c:1411
#, c-format
msgid "%s:version '%.4s', prefer version '%.4s'\n"
-msgstr "%s : version « %.4s », préfère la version « %.4s »\n"
+msgstr "%s: version « %.4s », version préférée « %.4s »\n"
#: gcov.c:1417
#, c-format
msgid "%s:stamp mismatch with notes file\n"
-msgstr "%s : estampille ne concorde par avec le fichier de notes\n"
+msgstr "%s: l'estampille ne concorde par avec le fichier de notes\n"
#: gcov.c:1452
#, c-format
msgid "%s:unknown function '%u'\n"
-msgstr "%s : fonction inconnue « %u »\n"
+msgstr "%s: fonction inconnue « %u »\n"
#: gcov.c:1466
#, c-format
msgid "%s:profile mismatch for '%s'\n"
-msgstr "%s : profile ne concorde pas pour « %s »\n"
+msgstr "%s: profile ne concorde pas pour « %s »\n"
#: gcov.c:1485
#, c-format
msgid "%s:overflowed\n"
-msgstr "%s : débordement\n"
+msgstr "%s: débordement\n"
#: gcov.c:1531
#, c-format
msgid "%s:'%s' lacks entry and/or exit blocks\n"
-msgstr "%s : « %s » manque de blocs d'entrée et/ou de sortie\n"
+msgstr "%s: il manque les blocs d'entrée ou de sortie de « %s »\n"
#: gcov.c:1536
#, c-format
msgid "%s:'%s' has arcs to entry block\n"
-msgstr "%s : « %s » possède des arcs vers un bloc d'entrée\n"
+msgstr "%s: « %s » possède des arcs vers un bloc d'entrée\n"
#: gcov.c:1544
#, c-format
msgid "%s:'%s' has arcs from exit block\n"
-msgstr "%s : « %s » possèdes des arcs à partir du bloc de sortie\n"
+msgstr "%s: « %s » possède des arcs à partir du bloc de sortie\n"
#: gcov.c:1752
#, c-format
msgid "%s:graph is unsolvable for '%s'\n"
-msgstr "%s : graphe n'a pas de solution pour « %s »\n"
+msgstr "%s: le graphe n'a pas de solution pour « %s »\n"
#: gcov.c:1860
#, c-format
msgid "Lines executed:%s of %d\n"
-msgstr "Lignes exécutées: %s de %d\n"
+msgstr "Lignes exécutées: %s sur %d\n"
#: gcov.c:1863
#, c-format
@@ -1125,12 +1141,12 @@ msgstr "%s « %s »\n"
#: gcov.c:1878
#, c-format
msgid "Branches executed:%s of %d\n"
-msgstr "Branchements exécutés : %s de %d\n"
+msgstr "Branchements exécutés: %s sur %d\n"
#: gcov.c:1882
#, c-format
msgid "Taken at least once:%s of %d\n"
-msgstr "Branchements pris au moins une fois : %s de %d\n"
+msgstr "Pris au moins une fois: %s sur %d\n"
#: gcov.c:1888
#, c-format
@@ -1140,7 +1156,7 @@ msgstr "Pas de branchement\n"
#: gcov.c:1890
#, c-format
msgid "Calls executed:%s of %d\n"
-msgstr "Appels exécutés : %s de %d\n"
+msgstr "Appels exécutés: %s sur %d\n"
#: gcov.c:1894
#, c-format
@@ -1150,39 +1166,37 @@ msgstr "Pas d'appel\n"
#: gcov.c:2142
#, c-format
msgid "%s:no lines for '%s'\n"
-msgstr "%s : pas de ligne pour « %s »\n"
+msgstr "%s: pas de ligne pour « %s »\n"
#: gcov.c:2336
#, c-format
msgid "call %2d returned %s\n"
msgstr "appel %2d a retourné %s\n"
-# FIXME: c'est de l'assembleur ?
#: gcov.c:2341
#, c-format
msgid "call %2d never executed\n"
-msgstr "call %2d n'est jamais été exécuté\n"
+msgstr "appel %2d jamais exécuté\n"
#: gcov.c:2346
#, c-format
msgid "branch %2d taken %s%s\n"
-msgstr "branchement %2d a pris %s%s\n"
+msgstr "branchement %2d pris %s%s\n"
#: gcov.c:2351
#, c-format
msgid "branch %2d never executed\n"
-msgstr "branchement %2d n'a jamais été exécuté\n"
+msgstr "branchement %2d jamais exécuté\n"
#: gcov.c:2356
#, c-format
msgid "unconditional %2d taken %s\n"
-msgstr "inconditionnel %2d a pris %s\n"
+msgstr "inconditionnel %2d pris %s\n"
-# FIXME: c'est de l'assembleur ?
#: gcov.c:2359
#, c-format
msgid "unconditional %2d never executed\n"
-msgstr "inconditionnel %2d n'a jamais été exécuté\n"
+msgstr "inconditionnel %2d jamais exécuté\n"
#: gcov.c:2424
#, c-format
@@ -1200,12 +1214,12 @@ msgstr "GCSE désactivé"
#: gimple-ssa-isolate-paths.c:440 c/c-typeck.c:9773
#, gcc-internal-format
msgid "function returns address of local variable"
-msgstr "cette fonction retourne l'adresse d'une variable locale"
+msgstr "la fonction retourne l'adresse d'une variable locale"
#: gimple-ssa-isolate-paths.c:442 gimple-ssa-isolate-paths.c:287
#, gcc-internal-format
msgid "function may return address of local variable"
-msgstr "cette fonction peut retourner l'adresse d'une variable locale"
+msgstr "la fonction peut retourner l'adresse d'une variable locale"
#: incpath.c:72
#, c-format
@@ -1240,24 +1254,24 @@ msgstr "Fin de la liste de recherche.\n"
#. Opening quotation mark.
#: intl.c:62
msgid "`"
-msgstr ""
+msgstr "« "
#. Closing quotation mark.
#: intl.c:65
msgid "'"
-msgstr ""
+msgstr " »"
#: ipa-pure-const.c:187
msgid "function might be candidate for attribute %<%s%>"
-msgstr "fonction peut être une candidate pour l'attribut %<%s%>"
+msgstr "la fonction peut être une candidate pour l'attribut %<%s%>"
#: ipa-pure-const.c:188
msgid "function might be candidate for attribute %<%s%> if it is known to return normally"
-msgstr "fonction peut être une candidate possible pour l'attribut %<%s%> si elle connue pour returner normallement"
+msgstr "la fonction pourrait être une candidate pour l'attribut %<%s%> si elle est connue pour retourner normalement"
#: langhooks.c:373
msgid "At top level:"
-msgstr "Hors de toute fonction :"
+msgstr "Au plus haut niveau:"
#: langhooks.c:393 cp/error.c:3315
#, c-format
@@ -1271,33 +1285,33 @@ msgstr "Dans la fonction %qs"
#: langhooks.c:448 cp/error.c:3268
msgid " inlined from %qs at %r%s:%d:%d%R"
-msgstr ""
+msgstr " mis en ligne depuis %qs à %r%s:%d:%d%R"
# FRONT
#: langhooks.c:453 cp/error.c:3273
msgid " inlined from %qs at %r%s:%d%R"
-msgstr ""
+msgstr " mis en ligne depuis %qs à %r%s:%d%R"
#: langhooks.c:459 cp/error.c:3279
#, c-format
msgid " inlined from %qs"
-msgstr ""
+msgstr " mis en ligne depuis %qs"
#: loop-iv.c:3041 tree-ssa-loop-niter.c:2319
msgid "assuming that the loop is not infinite"
-msgstr ""
+msgstr "suppose que la boucle n'est pas infinie"
#: loop-iv.c:3042 tree-ssa-loop-niter.c:2320
msgid "cannot optimize possibly infinite loops"
-msgstr ""
+msgstr "impossible d'optimiser des boucles peut-être infinies"
#: loop-iv.c:3050 tree-ssa-loop-niter.c:2324
msgid "assuming that the loop counter does not overflow"
-msgstr ""
+msgstr "suppose que le compteur de la boucle ne déborde pas"
#: loop-iv.c:3051 tree-ssa-loop-niter.c:2325
msgid "cannot optimize loop, the loop counter may overflow"
-msgstr ""
+msgstr "impossible d'optimiser la boucle car le compteur de la boucle peut déborder"
#: lra-assigns.c:1417 reload1.c:2089
msgid "this is the insn:"
@@ -1310,34 +1324,34 @@ msgstr "incapable de générer des recharges pour:"
#. What to print when a switch has no documentation.
#: opts.c:184
msgid "This option lacks documentation."
-msgstr "Cette option manque de documentation."
+msgstr "Il manque la documentation pour cette option."
#: opts.c:185
msgid "Uses of this option are diagnosed."
-msgstr ""
+msgstr "Les utilisations de cette option sont diagnostiquées."
#: opts.c:1061
#, c-format
msgid "default %d minimum %d maximum %d"
-msgstr ""
+msgstr "par défaut %d minimum %d maximum %d"
#: opts.c:1128
#, c-format
msgid "Same as %s. Use the latter option instead."
-msgstr ""
+msgstr "Comme %s. Utilisez plutôt cette dernière option."
#: opts.c:1136
#, c-format
msgid "%s Same as %s."
-msgstr ""
+msgstr "%s Comme %s."
#: opts.c:1207
msgid "[default]"
-msgstr ""
+msgstr "[par défaut]"
#: opts.c:1218
msgid "[enabled]"
-msgstr ""
+msgstr "[activé]"
#: opts.c:1218
msgid "[disabled]"
@@ -1346,17 +1360,17 @@ msgstr "[désactivé]"
#: opts.c:1237
#, c-format
msgid " No options with the desired characteristics were found\n"
-msgstr ""
+msgstr " Aucune option avec les caractéristiques désirées a été trouvée\n"
#: opts.c:1246
#, c-format
msgid " None found. Use --help=%s to show *all* the options supported by the %s front-end.\n"
-msgstr ""
+msgstr " Aucune trouvée. Utilisez --help=%s pour voir *toutes* les options acceptées par l'interface %s.\n"
#: opts.c:1252
#, c-format
msgid " All options with the desired characteristics have already been displayed\n"
-msgstr ""
+msgstr " Toutes les options avec les caractéristiques désirées ont déjà été affichées\n"
#: opts.c:1337
msgid "The following options are target specific"
@@ -1380,15 +1394,15 @@ msgstr "L'option --param reconnaît les paramètres suivant"
#: opts.c:1355
msgid "The following options are specific to just the language "
-msgstr "Les options suivantes sont spécifiques au langage "
+msgstr "Les options suivantes sont uniquement spécifiques au langage "
#: opts.c:1357
msgid "The following options are supported by the language "
-msgstr "Les options suivantes sont prises en charge pour le langage "
+msgstr "Les options suivantes sont prises en charge par le langage "
#: opts.c:1368
msgid "The following options are not documented"
-msgstr "Les options suivantes sont non documentées"
+msgstr "Les options suivantes ne sont pas documentées"
#: opts.c:1370
msgid "The following options take separate arguments"
@@ -1396,11 +1410,11 @@ msgstr "Les options suivantes prennent des arguments séparées"
#: opts.c:1372
msgid "The following options take joined arguments"
-msgstr "Les options suivantes prennent des arguments communs"
+msgstr "Les options suivantes prennent des arguments groupés"
#: opts.c:1383
msgid "The following options are language-related"
-msgstr "Les options suivantes concernent les langages"
+msgstr "Les options suivantes concernent des langages"
#: plugin.c:796
msgid "Event"
@@ -1413,12 +1427,12 @@ msgstr "Extensions"
#: plugin.c:828
#, c-format
msgid "*** WARNING *** there are active plugins, do not report this as a bug unless you can reproduce it without enabling any plugins.\n"
-msgstr ""
+msgstr "*** ATTENTION *** il y a des extensions actives, ne rapportez pas ceci comme un bogue à moins de savoir le reproduire sans activer les extensions.\n"
#. It's the compiler's fault.
#: reload1.c:6113
msgid "could not find a spill register"
-msgstr "ne peut repérer un registre de déversement"
+msgstr "n'a pu trouver un registre de déversement"
#. It's the compiler's fault.
#: reload1.c:8009
@@ -1427,7 +1441,7 @@ msgstr "mode VOID sur une sortie"
#: reload1.c:8770
msgid "failure trying to reload:"
-msgstr ""
+msgstr "échec en essayant de recharger:"
#: rtl-error.c:116
msgid "unrecognizable insn:"
@@ -1463,7 +1477,7 @@ msgstr "collect: recompilation de %s\n"
#: tlink.c:627
#, c-format
msgid "collect: tweaking %s in %s\n"
-msgstr "collect: tordage de %s dans %s\n"
+msgstr "collect: ajuste %s dans %s\n"
#: tlink.c:844
#, c-format
@@ -1497,7 +1511,7 @@ msgstr "GMP version %s, MPFR version %s, MPC version %s, isl version %s\n"
#: toplev.c:646
#, c-format
msgid "%s%swarning: %s header version %s differs from library version %s.\n"
-msgstr ""
+msgstr "%s%savertissement: l'en-tête %s version %s diffère de la version %s de la bibliothèque.\n"
#: toplev.c:648
#, c-format
@@ -1510,41 +1524,41 @@ msgstr "options passées : "
#: toplev.c:850
msgid "options enabled: "
-msgstr "options autorisées : "
+msgstr "options activées : "
#: tree-diagnostic.c:295 c/c-decl.c:5203 c/c-typeck.c:6818 cp/error.c:682
#: cp/error.c:995 c-family/c-pretty-print.c:408
#, gcc-internal-format
msgid "<anonymous>"
-msgstr "<anonymous>"
+msgstr "<anonyme>"
#: cif-code.def:39
msgid "function not considered for inlining"
-msgstr "fonction n'a pas été retenue pour l'enlignage"
+msgstr "fonction pas retenue pour être mise en ligne"
#: cif-code.def:43
msgid "caller is not optimized"
-msgstr ""
+msgstr "l'appelant n'est pas optimisé"
#: cif-code.def:47
msgid "function body not available"
-msgstr "corps de la fonction n'est pas disponible"
+msgstr "le corps de la fonction n'est pas disponible"
#: cif-code.def:51
msgid "redefined extern inline functions are not considered for inlining"
-msgstr "fonctions externes enlignes redéfinies n'ont pas été retenues pour l'enlignage"
+msgstr "les fonctions externes enlignes redéfinies ne sont pas retenues pour être mises en ligne"
#: cif-code.def:56
msgid "function not inlinable"
-msgstr "fonction ne peut être enligne"
+msgstr "la fonction ne peut être mise en ligne"
#: cif-code.def:60
msgid "function body can be overwritten at link time"
-msgstr "le corps de la fonction peut être remplacé durant l’édition de liaison"
+msgstr "le corps de la fonction peut être écrasé durant l'édition de liens"
#: cif-code.def:64
msgid "function not inline candidate"
-msgstr "la fonction n’est pas une candidate à l'enlignage"
+msgstr "la fonction n’est pas une candidate à la mise en ligne"
#: cif-code.def:68
msgid "--param large-function-growth limit reached"
@@ -1568,51 +1582,47 @@ msgstr "--param inline-unit-growth limite atteinte"
#: cif-code.def:80
msgid "recursive inlining"
-msgstr "enlignage récursif"
+msgstr "mise en ligne récursive"
#: cif-code.def:84
msgid "call is unlikely and code size would grow"
-msgstr ""
+msgstr "l'appel est improbable et la taille du code augmenterait"
#: cif-code.def:88
msgid "function not declared inline and code size would grow"
-msgstr ""
+msgstr "la fonction n'est pas déclarée en ligne et la taille du code augmenterait"
#: cif-code.def:92
msgid "mismatched arguments"
msgstr "arguments non concordantes"
#: cif-code.def:96
-#, fuzzy
-#| msgid "redefined extern inline functions are not considered for inlining"
msgid "originally indirect function call not considered for inlining"
-msgstr "fonctions externes enlignes redéfinies n'ont pas été retenues pour l'enlignage"
+msgstr "l'appel de fonction initialement indirect n'est pas pris en compte pour la mise en ligne"
#: cif-code.def:100
msgid "indirect function call with a yet undetermined callee"
-msgstr ""
+msgstr "appel de fonction indirect vers un appelé encore à déterminer"
#: cif-code.def:104
msgid "exception handling personality mismatch"
-msgstr ""
+msgstr "désaccord sur la personnalité du traitement de l'exception"
#: cif-code.def:109
-#, fuzzy
-#| msgid "Enable exception handling"
msgid "non-call exception handling mismatch"
-msgstr "Autoriser le traitement des exceptions"
+msgstr "désaccord sur le traitement de l'exception sans appel"
#: cif-code.def:113
msgid "target specific option mismatch"
-msgstr "option spécifique de cible incohérente"
+msgstr "option spécifique à la cible incohérente"
#: cif-code.def:117
msgid "optimization level attribute mismatch"
-msgstr "attribut de niveau d’optimisation incohérent"
+msgstr "incohérence d'un attribut au niveau de l'optimisation"
#: cif-code.def:121
msgid "callee refers to comdat-local symbols"
-msgstr ""
+msgstr "l'appelé fait référence à des symboles locaux à comdat"
#: cif-code.def:125
msgid "function attribute mismatch"
@@ -1620,13 +1630,12 @@ msgstr "attribut de fonction incohérent"
#: cif-code.def:129
#, fuzzy
-#| msgid "your function will be miscompiled"
msgid "caller function contains cilk spawn"
-msgstr "votre fonction sera mal compilée"
+msgstr "la fonction appelante contient du généré cilk"
#: cif-code.def:133
msgid "unreachable"
-msgstr "introuvable"
+msgstr "inatteignable"
#. The remainder are real diagnostic types.
#: diagnostic.def:33
@@ -1678,86 +1687,82 @@ msgstr "permerreur : "
#: params.def:49
#, no-c-format
msgid "Maximal estimated outcome of branch considered predictable."
-msgstr ""
+msgstr "Estimation maximale de la conclusion de branches considérées prévisibles."
#: params.def:54
#, no-c-format
msgid "The minimal estimated speedup allowing inliner to ignore inline-insns-single and inline-isnsns-auto."
-msgstr ""
+msgstr "L'estimation de l'accélération minimale permettant au code de mise en ligne d'ignorer inline-insns-single et inline-isnsns-auto."
#: params.def:71
#, no-c-format
msgid "The maximum number of instructions in a single function eligible for inlining."
-msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne."
+msgstr "Le nombre maximum d'instructions dans une seule fonction éligible à la mise en ligne."
#: params.def:83
#, no-c-format
msgid "The maximum number of instructions when automatically inlining."
-msgstr "Le nombre maximum d'instructions lorsqu'automatiquement de type enligne."
+msgstr "Le nombre maximum d'instructions lors de la mise en ligne automatique."
#: params.def:88
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions inline function can grow to via recursive inlining."
-msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne"
+msgstr "Le nombre maximum d'instructions auquel une fonction en ligne peut grandir par la mise en ligne récursive."
#: params.def:93
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions in a single function eligible for inlining"
+#, no-c-format
msgid "The maximum number of instructions non-inline function can grow to via recursive inlining."
-msgstr "Le nombre maximum d'instructions dans une fonction simple éligible au type enligne"
+msgstr "Le nombre maximum d'instructions auquel une fonction pas en ligne peut grandir par la mise en ligne récursive."
#: params.def:98
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions for the RTL inliner"
+#, no-c-format
msgid "The maximum depth of recursive inlining for inline functions."
-msgstr "Le nombre maximum d'instructions pour la fonction d'enlignage RTL"
+msgstr "La profondeur maximum de mise en ligne récursive pour les fonctions en ligne."
#: params.def:103
#, no-c-format
msgid "The maximum depth of recursive inlining for non-inline functions."
-msgstr ""
+msgstr "La profondeur maximum de mise en ligne récursive pour les fonctions pas en ligne."
#: params.def:108
#, no-c-format
msgid "Inline recursively only when the probability of call being executed exceeds the parameter."
-msgstr ""
+msgstr "Mettre en ligne récursif uniquement quand la probabilité que l'appel soit exécuté dépasse le paramètre."
#: params.def:116
-#, fuzzy, no-c-format
-#| msgid "The maximum number of instructions for the RTL inliner"
+#, no-c-format
msgid "The maximum number of nested indirect inlining performed by early inliner."
-msgstr "Le nombre maximum d'instructions pour la fonction d'enlignage RTL"
+msgstr "Le nombre maximum de mises en ligne indirectes imbriquées réalisées par les premiers mis en ligne."
#: params.def:122
#, no-c-format
msgid "Probability that COMDAT function will be shared with different compilation unit."
-msgstr ""
+msgstr "Probabilité qu'une fonction COMDAT soit partagée avec des unités de compilation différentes."
#: params.def:128
#, no-c-format
msgid "Maximum probability of the entry BB of split region (in percent relative to entry BB of the function) to make partial inlining happen."
-msgstr ""
+msgstr "Probabilité maximum que l'entrée B8 d'une région scindée (en pourcent relatif à l'entrée B8 de la fonction) pour réaliser la mise en ligne partielle."
#: params.def:135
#, no-c-format
msgid "If -fvariable-expansion-in-unroller is used, the maximum number of times that an individual variable will be expanded during loop unrolling."
-msgstr ""
+msgstr "Si -fvariable-expansion-in-unroller est utilisé, le nombre maximum de fois qu'une variable individuelle sera développée pendant le dépliage de la boucle."
#: params.def:141
#, no-c-format
msgid "If -ftree-vectorize is used, the minimal loop bound of a loop to be considered for vectorization."
-msgstr ""
+msgstr "Si -ftree-vectorize est utilisé, la limite minimale de boucle d'une boucle prise en compte pour la vectorisation."
#: params.def:152
#, no-c-format
msgid "The maximum number of instructions to consider to fill a delay slot."
-msgstr "Le nombre maximum d'instructions à considérer pour remplir une slot délai."
+msgstr "Le nombre maximum d'instructions à considérer pour remplir un créneau de délai."
#: params.def:163
#, no-c-format
msgid "The maximum number of instructions to consider to find accurate live register information."
-msgstr "Le nombre maximum d'instructions à considérer pour repérer un registre d'information actif et précis."
+msgstr "Le nombre maximum d'instructions à considérer pour trouver les informations correctes d'un registre actif."
#: params.def:173
#, no-c-format
diff --git a/gcc/ree.c b/gcc/ree.c
index 4627b4f99b5..d50baca30db 100644
--- a/gcc/ree.c
+++ b/gcc/ree.c
@@ -481,6 +481,14 @@ get_defs (rtx_insn *insn, rtx reg, vec<rtx_insn *> *dest)
return NULL;
if (DF_REF_INSN_INFO (ref_link->ref) == NULL)
return NULL;
+ /* As global regs are assumed to be defined at each function call
+ dataflow can report a call_insn as being a definition of REG.
+ But we can't do anything with that in this pass so proceed only
+ if the instruction really sets REG in a way that can be deduced
+ from the RTL structure. */
+ if (global_regs[REGNO (reg)]
+ && !set_of (reg, DF_REF_INSN (ref_link->ref)))
+ return NULL;
}
if (dest)
@@ -579,7 +587,7 @@ make_defs_and_copies_lists (rtx_insn *extend_insn, const_rtx set_pat,
/* Initialize the work list. */
if (!get_defs (extend_insn, src_reg, &state->work_list))
- gcc_unreachable ();
+ return false;
is_insn_visited = XCNEWVEC (bool, max_insn_uid);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 3c7cbe8982a..8c8cf5ff4ba 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,276 @@
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/renaming11.ad[sb]: New test.
+
+2016-11-13 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/lto21.adb: New test.
+ * gnat.dg/lto21_pkg1.ads: New helper.
+ * gnat.dg/lto21_pkg2.ad[sb]: Likewise.
+
+2016-11-11 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78310
+ * gcc.target/i386/pr78310.c: New test.
+
+2016-11-11 Dominik Vogt <vogt@linux.vnet.ibm.com>
+
+ PR target/77822
+ * gcc.target/s390/pr77822.c: New test for PR/77822.
+
+2016-11-09 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78262
+ * gcc.target/i386/pr78262.c: New test.
+
+2016-11-07 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78221
+ * gfortran.dg/warn_conversion_9.f90: New test.
+
+2016-11-07 Richard Biener <rguenther@suse.de>
+
+ PR target/78229
+ * g++.dg/pr78229.C: New testcase.
+
+2016-11-05 Martin Sebor <msebor@redhat.com>
+
+ Backport from trunk.
+ PR c/71115
+ * gcc.dg/init-excess-2.c: New test.
+ * gcc.dg/Woverride-init-1.c: Adjust.
+ * gcc.dg/Woverride-init-2.c: Same.
+
+2016-11-05 Martin Sebor <msebor@redhat.com>
+
+ PR c++/78039
+ * g++.dg/ext/flexary18.C: New test.
+ * g++.dg/ext/flexary19.C: New test.
+
+2016-11-03 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ Backport from mainline
+ 2016-10-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ PR target/77483
+ * gcc.target/i386/mask-unpack.c (dg-options): Add -mno-stackrealign.
+ * gcc.target/i386/pr65105-1.c: Likewise.
+ * gcc.target/i386/pr65105-2.c: Likewise.
+ * gcc.target/i386/pr65105-3.c: Likewise.
+ * gcc.target/i386/pr65105-5.c: Likewise.
+ * gcc.target/i386/pr67761.c: Likewise.
+
+2016-11-03 Martin Liska <mliska@suse.cz>
+
+ Backport from mainline
+ 2016-08-12 Martin Liska <mliska@suse.cz>
+
+ * g++.dg/gcov/gcov-16.C: New test.
+ * lib/gcov.exp: Support new argument for run-gcov function.
+
+2016-11-03 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-09-29 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77768
+ * gcc.dg/torture/pr77768.c: New testcase.
+
+2016-11-02 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/69544
+ PR fortran/78178
+ * gfortran.dg/where_5.f90: New test.
+ * gfortran.dg/where_6.f90: New test.
+
+2016-11-02 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ Backport from trunk
+ 2016-10-26 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ PR middle-end/72747
+ * c-c++-common/pr72747-1.c: New test.
+ * c-c++-common/pr72747-2.c: Likewise.
+
+2016-11-02 Richard Biener <rguenther@suse.de>
+
+ Backport from mainline
+ 2016-10-06 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77839
+ * gcc.dg/torture/pr77839.c: New testcase.
+
+ 2016-09-27 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77745
+ * g++.dg/torture/pr77745.C: New testcase.
+
+ 2016-09-21 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/77648
+ * gcc.dg/torture/pr77648-1.c: New testcase.
+ * gcc.dg/torture/pr77648-2.c: Likewise.
+
+2016-11-02 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * lib/target-supports.exp (check_gc_sections_available): Use
+ -print-prog-name=ld to determine linker used.
+
+2016-11-01 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ Backport from mainline
+ 2016-10-21 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/78038
+ * gcc.target/aarch64/pr78038.c: New test.
+
+2016-10-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78123
+ * gfortran.dg/fmt_t_9.f: New test.
+
+2016-10-31 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/71902
+ * gfortran.dg/dependency_47.f90: New test.
+ * gfortran.dg/dependency_49.f90: New test.
+
+2016-10-30 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/67219
+ * gfortran.dg/pr67219.f90: New test.
+
+2016-10-26 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/78092
+ * gfortran.dg/pr78092.f90: New test.
+
+2016-10-26 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78108
+ * gfortran.dg/submodule_18.f08: New test.
+ * gfortran.dg/submodule_19.f08: New test.
+
+2016-10-26 Uros Bizjak <ubizjak@gmail.com>
+
+ * gcc.target/i386/bmi-6.c: XFAIL.
+
+ Backport from mainline
+ 2016-10-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/78057
+ * gcc.target/i386/pr78057.c: New test.
+
+ Backport from mainline
+ 2016-10-20 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/78037
+ * gcc.target/i386/pr78037.c: New test.
+
+2016-10-25 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/opt59.adb: New test.
+ * gnat.dg/opt59_pkg.ad[sb]: New helper.
+
+2016-10-24 Bernd Edlinge <bernd.edlinger@hotmail.de>
+
+ Backport from mainline r240313, r240355, r240573
+ 2016-09-21 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR tree-optimization/77550
+ * g++.dg/pr77550.C: New test.
+
+ 2016-09-22 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ * g++.dg/pr77550.C: Use __SIZE_TYPE__.
+
+ 2016-09-28 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR c++/77748
+ * g++.dg/pr77550.C: Avoid undefined behavior.
+
+2016-10-24 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/71895
+ * gfortran.dg/pr71895.f90: New test.
+
+2016-10-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2016-10-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/77916
+ * gcc.dg/torture/pr77916.c: New.
+
+2016-10-23 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/77763
+ * gfortran.dg/pr77763.f90
+
+2016-10-23 Paul Thomas <pault@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/61420
+ PR fortran/78013
+ * gfortran.dg/proc_ptr_49.f90: New test.
+
+2016-10-23 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/78021
+ * gfortran.dg/string_length_3.f90: New test.
+
+2016-10-23 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ Backported from trunk
+ PR fortran/72832
+ * gfortran.dg/allocate_with_source_22.f03: New test.
+ * gfortran.dg/allocate_with_source_23.f03: New test. Expected to
+ fail.
+
+2016-10-19 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/77991
+ * gcc.target/i386/pr77991.c: New test.
+
+2016-10-17 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ Backported from trunk
+ PR fortran/77978
+ * gfortran.dg/pr77978_1.f90: New test.
+ * gfortran.dg/pr77978_2.f90: Ditto.
+ * gfortran.dg/pr77978_3.f90: Ditto.
+
+
+2016-10-17 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ Backport from mainline
+ 2016-10-13 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
+
+ PR tree-optimization/77937
+ * gcc.dg/torture/pr77937-1.c: New.
+ * gcc.dg/torture/pr77937-2.c: New.
+
+2016-10-17 Martin Liska <mliska@suse.cz>
+
+ Backported from mainline
+ 2016-10-13 Martin Liska <mliska@suse.cz>
+
+ PR tree-optimization/77943
+ * g++.dg/tree-ssa/pr77943.C: New test.
+
+2016-10-16 Thomas Koenig <tkoenig@gcc.gnu.org>
+
+ Backport from trunk
+ PR fortran/77915
+ * gfortran.dg/matmul_11.f90: New test.
+
2016-10-15 Eric Botcazou <ebotcazou@adacore.com>
* gcc.target/sparc/bmaskbshuf.c: Rename to...
@@ -14,20 +287,20 @@
* g++.dg/ext/flexary18.C: New test.
* g++.dg/torture/pr64312.C: Add a dg-error directive to an ill-formed
regression test.
- * g++.dg/compat/struct-layout-1_generate.c (subfield): Add argument.
- Avoid generating a flexible array member in an array.
+ * g++.dg/compat/struct-layout-1_generate.c (subfield): Add argument.
+ Avoid generating a flexible array member in an array.
2016-10-13 Andrew Senkevich <andrew.senkevich@intel.com>
Backport from trunk
- * testsuite/gcc.target/i386/pcommit-1.c: Deleted test.
- * testsuite/gcc.target/i386/sse-12.c: Deleted -pcommit option.
- * testsuite/gcc.target/i386/sse-13.c: Ditto.
- * testsuite/gcc.target/i386/sse-14.c: Ditto.
- * testsuite/gcc.target/i386/sse-22.c: Ditto.
- * testsuite/gcc.target/i386/sse-23.c: Ditto.
- * testsuite/g++.dg/other/i386-2.C: Ditto.
- * testsuite/g++.dg/other/i386-3.C: Ditto.
+ * gcc.target/i386/pcommit-1.c: Deleted test.
+ * gcc.target/i386/sse-12.c: Deleted -pcommit option.
+ * gcc.target/i386/sse-13.c: Ditto.
+ * gcc.target/i386/sse-14.c: Ditto.
+ * gcc.target/i386/sse-22.c: Ditto.
+ * gcc.target/i386/sse-23.c: Ditto.
+ * g++.dg/other/i386-2.C: Ditto.
+ * g++.dg/other/i386-3.C: Ditto.
2016-10-11 Steven G. Kargl <kargl@gcc.gnu.org>
@@ -63,7 +336,7 @@
* gfortran.dg/proc_ptr_comp_20.f90: Ditto.
2016-10-06 James Clarke <jrtc27@jrtc27.com>
- Eric Botcazou <ebotcazou@adacore.com>
+ Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/other/pr77759.C: New test.
@@ -2131,7 +2404,7 @@
* g++.dg/cpp1y/vla13.C: Same.
* g++.dg/cpp1y/vla14.C: Same.
* g++.dg/cpp1y/vla3.C: Same.
- * gcc/testsuite/g++.dg/init/array24.C: Same.
+ * g++.dg/init/array24.C: Same.
* g++.dg/ubsan/vla-1.C: Same.
2016-04-14 Marek Polacek <polacek@redhat.com>
@@ -2163,7 +2436,7 @@
* g++.dg/cpp1y/vla13.C: New test.
* g++.dg/cpp1y/vla14.C: New test.
* g++.dg/cpp1y/vla3.C: Restore deleted test.
- * gcc/testsuite/g++.dg/init/array24.C: Fully brace VLA initializer.
+ * g++.dg/init/array24.C: Fully brace VLA initializer.
* g++.dg/ubsan/vla-1.C: Disable exceptions.
2016-04-13 Jakub Jelinek <jakub@redhat.com>
@@ -2191,8 +2464,8 @@
2016-04-13 Marek Polacek <polacek@redhat.com>
PR c/70436
- * testsuite/gcc.dg/Wparentheses-12.c: New test.
- * testsuite/gcc.dg/Wparentheses-13.c: New test.
+ * gcc.dg/Wparentheses-12.c: New test.
+ * gcc.dg/Wparentheses-13.c: New test.
2016-04-13 Ilya Enkovich <ilya.enkovich@intel.com>
@@ -2439,7 +2712,7 @@
2016-04-06 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/70398
- * testsuite/gcc.target/aarch64/pr70398.c: New.
+ * gcc.target/aarch64/pr70398.c: New.
2016-04-06 Eric Botcazou <ebotcazou@adacore.com>
diff --git a/gcc/testsuite/c-c++-common/pr72747-1.c b/gcc/testsuite/c-c++-common/pr72747-1.c
new file mode 100644
index 00000000000..e87069df0f6
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr72747-1.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -fdump-tree-gimple" } */
+
+/* PR 72747: Test that cascaded definition is happening for constant vectors. */
+
+#include <altivec.h>
+
+int main (int argc, char *argv[])
+{
+ __vector int v1,v2;
+ v1 = v2 = vec_splats ((int) 42);
+ return 0;
+}
+/* { dg-final { scan-tree-dump-times " v2 = { 42, 42, 42, 42 }" 1 "gimple" } } */
+
diff --git a/gcc/testsuite/c-c++-common/pr72747-2.c b/gcc/testsuite/c-c++-common/pr72747-2.c
new file mode 100644
index 00000000000..24a43649907
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr72747-2.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-c -maltivec -fdump-tree-gimple" } */
+
+/* PR 72747: test that cascaded definition is happening for non constants. */
+
+void foo ()
+{
+ extern int i;
+ __vector int v,w;
+ v = w = (vector int) { i };
+}
+
+int main (int argc, char *argv[])
+{
+ return 0;
+}
+/* { dg-final { scan-tree-dump-times " w = " 1 "gimple" } } */
diff --git a/gcc/testsuite/g++.dg/ext/flexary18.C b/gcc/testsuite/g++.dg/ext/flexary18.C
new file mode 100644
index 00000000000..ccdd33aeece
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/flexary18.C
@@ -0,0 +1,213 @@
+// PR c++/71912 - [6/7 regression] flexible array in struct in union rejected
+// { dg-do compile }
+// { dg-additional-options "-Wpedantic -Wno-error=pedantic" }
+
+#if __cplusplus
+
+namespace pr71912 {
+
+#endif
+
+struct foo {
+ int a;
+ char s[]; // { dg-message "array member .char pr71912::foo::s \\\[\\\]. declared here" }
+};
+
+struct bar {
+ double d;
+ char t[];
+};
+
+struct baz {
+ union {
+ struct foo f;
+ struct bar b;
+ }
+ // The definition of struct foo is fine but the use of struct foo
+ // in the definition of u below is what's invalid and must be clearly
+ // diagnosed.
+ u; // { dg-warning "invalid use of .struct pr71912::foo. with a flexible array member in .struct pr71912::baz." }
+};
+
+struct xyyzy {
+ union {
+ struct {
+ int a;
+ char s[]; // { dg-message "declared here" }
+ } f;
+ struct {
+ double d;
+ char t[];
+ } b;
+ } u; // { dg-warning "invalid use" }
+};
+
+struct baz b;
+struct xyyzy x;
+
+#if __cplusplus
+
+}
+
+#endif
+
+// The following definitions aren't strictly valid but, like those above,
+// are accepted for compatibility with GCC (in C mode). They are benign
+// in that the flexible array member is at the highest offset within
+// the outermost type and doesn't overlap with other members except for
+// those of the union.
+union UnionStruct1 {
+ struct { int n1, a[]; } s;
+ int n2;
+};
+
+union UnionStruct2 {
+ struct { int n1, a1[]; } s1;
+ struct { int n2, a2[]; } s2;
+ int n3;
+};
+
+union UnionStruct3 {
+ struct { int n1, a1[]; } s1;
+ struct { double n2, a2[]; } s2;
+ char n3;
+};
+
+union UnionStruct4 {
+ struct { int n1, a1[]; } s1;
+ struct { struct { int n2, a2[]; } s2; } s3;
+ char n3;
+};
+
+union UnionStruct5 {
+ struct { struct { int n1, a1[]; } s1; } s2; // { dg-warning "invalid use" }
+ struct { double n2, a2[]; } s3;
+ char n3;
+};
+
+union UnionStruct6 {
+ struct { struct { int n1, a1[]; } s1; } s2; // { dg-warning "invalid use" }
+ struct { struct { int n2, a2[]; } s3; } s4;
+ char n3;
+};
+
+union UnionStruct7 {
+ struct { int n1, a1[]; } s1;
+ struct { double n2, a2[]; } s2;
+ struct { struct { int n3, a3[]; } s3; } s4;
+};
+
+union UnionStruct8 {
+ struct { int n1, a1[]; } s1;
+ struct { struct { int n2, a2[]; } s2; } s3;
+ struct { struct { int n3, a3[]; } s4; } s5;
+};
+
+union UnionStruct9 {
+ struct { struct { int n1, a1[]; } s1; } s2; // { dg-warning "invalid use" }
+ struct { struct { int n2, a2[]; } s3; } s4;
+ struct { struct { int n3, a3[]; } s5; } s6;
+};
+
+struct StructUnion1 {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-message "declared here" }
+ struct { double n2, a2[]; } s2;
+ char n3;
+ } u; // { dg-warning "invalid use" }
+};
+
+// The following are invalid and rejected.
+struct StructUnion2 {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-warning "not at end" }
+ } u;
+ char n3; // { dg-message "next member" }
+};
+
+struct StructUnion3 {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-warning "not at end" }
+ struct { double n2, a2[]; } s2;
+ } u;
+ char n3; // { dg-message "next member" }
+};
+
+struct StructUnion4 {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-warning "not at end" }
+ } u1;
+ union {
+ struct { double n2, a2[]; } s2;
+ } u2; // { dg-message "next member" }
+};
+
+struct StructUnion5 {
+ union {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-message "declared here" }
+ } u1;
+ union { struct { int n2, a2[]; } s2; } u2;
+ } u; // { dg-warning "invalid use" }
+};
+
+struct StructUnion6 {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-message "declared here" }
+ union { struct { int n2, a2[]; } s2; } u2;
+ } u; // { dg-warning "invalid use" }
+};
+
+struct StructUnion7 {
+ union {
+ union {
+ struct { double n2, a2[]; } s2; // { dg-message "declared here" }
+ } u2;
+ struct { int n1, a1[]; } s1;
+ } u; // { dg-warning "invalid use" }
+};
+
+struct StructUnion8 {
+ struct {
+ union {
+ union {
+ struct { int n1, a1[]; } s1; // { dg-warning "not at end" }
+ } u1;
+ union {
+ struct { double n2, a2[]; } s2;
+ } u2;
+ } u;
+ } s1;
+
+ struct {
+ union {
+ union {
+ struct { int n1, a1[]; } s1;
+ } u1;
+ union {
+ struct { double n2, a2[]; } s2;
+ } u2;
+ } u; } s2; // { dg-message "next member" }
+};
+
+struct StructUnion9 { // { dg-message "in the definition" }
+ struct A1 {
+ union B1 {
+ union C1 {
+ struct Sx1 { int n1, a1[]; } sx1; // { dg-warning "not at end" }
+ } c1;
+ union D1 {
+ struct Sx2 { double n2, a2[]; } sx2;
+ } d1;
+ } b1; // { dg-warning "invalid use" }
+ } a1;
+
+ struct A2 {
+ union B2 {
+ union C2 {
+ struct Sx3 { int n3, a3[]; } sx3; // { dg-message "declared here" }
+ } c2;
+ union D2 { struct Sx4 { double n4, a4[]; } sx4; } d2;
+ } b2; // { dg-warning "invalid use" }
+ } a2; // { dg-message "next member" }
+};
diff --git a/gcc/testsuite/g++.dg/ext/flexary19.C b/gcc/testsuite/g++.dg/ext/flexary19.C
new file mode 100644
index 00000000000..27d08ec225d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/flexary19.C
@@ -0,0 +1,343 @@
+// { dg-do compile }
+// { dg-additional-options "-Wpedantic -Wno-error=pedantic" }
+
+// Verify that flexible array members are recognized as either valid
+// or invalid in anonymous structs (a G++ extension) and C++ anonymous
+// unions as well as in structs and unions that look anonymous but
+// aren't.
+struct S1
+{
+ int i;
+
+ // The following declares a named data member of an unnamed struct
+ // (i.e., it is not an anonymous struct).
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s;
+};
+
+struct S2
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s[1];
+};
+
+struct S3
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s[];
+};
+
+struct S4
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s[2];
+};
+
+struct S5
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s[1][2];
+};
+
+struct S6
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s[][2];
+};
+
+struct S7
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } *s;
+};
+
+struct S8
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } **s;
+};
+
+struct S9
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } *s[1];
+};
+
+struct S10
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } *s[];
+};
+
+struct S11
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } **s[1];
+};
+
+struct S12
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } **s[];
+};
+
+struct S13
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } **s[2];
+};
+
+struct S14
+{
+ int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } &s;
+};
+
+struct S15
+{
+ int i;
+
+ typedef struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } T15;
+};
+
+struct S16
+{
+ int i;
+
+ struct { // { dg-warning "invalid use" }
+ // A flexible array as a sole member of an anonymous struct is
+ // rejected with an error in C mode but emits just a pedantic
+ // warning in C++. Other than excessive pedantry there is no
+ // reason to reject it.
+ int a[];
+ }; // { dg-warning "anonymous struct" }
+};
+
+struct S17
+{
+ int i;
+
+ union { // anonymous union
+ int a[]; // { dg-error "flexible array member in union" }
+ };
+};
+
+struct S18
+{
+ int i;
+
+ struct {
+ int j, a[]; // { dg-message "declared here" }
+ } s; // { dg-warning "invalid use" }
+};
+
+struct S19
+{
+ int i;
+
+ struct { // { dg-warning "invalid use" }
+ int j, a[]; // { dg-message "declared here" }
+ }; // { dg-warning "anonymous struct" }
+};
+
+struct S20
+{
+ static int i;
+ typedef int A[];
+
+ struct {
+ int j;
+ A a; // { dg-message "declared here" }
+ } s; // { dg-warning "invalid use" }
+};
+
+struct S21
+{
+ static int i;
+ typedef int A[];
+
+ struct { // { dg-warning "invalid use" }
+ int j;
+ A a; // { dg-message "declared here" }
+ }; // { dg-warning "anonymous struct" }
+};
+
+struct S22
+{
+ struct S22S {
+ static int i;
+
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s;
+};
+
+struct S23
+{
+ struct {
+ static int i; // { dg-error "static data member" }
+
+ int a[]; // { dg-error "in an otherwise empty" }
+ }; // { dg-warning "anonymous struct" }
+};
+
+struct S24
+{
+ static int i;
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s;
+};
+
+struct S25
+{
+ int i;
+
+ struct {
+ int j, a[]; // { dg-message "declared here" }
+ } s; // { dg-warning "invalid use" }
+
+ // Verify that a static data member of the enclosing class doesn't
+ // cause infinite recursion or some such badness.
+ static S25 s2;
+};
+
+struct S26
+{
+ template <class>
+ struct S26S {
+ static int a;
+ };
+
+ struct {
+ int a[]; // { dg-error "in an otherwise empty" }
+ } s;
+};
+
+struct S27
+{
+ S27 *p;
+ int a[];
+};
+
+struct S28
+{
+ struct A {
+ struct B {
+ S28 *ps28;
+ A *pa;
+ B *pb;
+ } b, *pb;
+ A *pa;
+ } a, *pa;
+
+ S28::A *pa2;
+ S28::A::B *pb;
+
+ int flexarray[];
+};
+
+// Verify that the notes printed along with the warnings point to the types
+// or members they should point to and mention the correct relationships
+// with the flexible array members.
+namespace Notes
+{
+union A
+{
+ struct {
+ struct {
+ int i, a[]; // { dg-message "declared here" }
+ } c; // { dg-warning "invalid use" }
+ } d;
+ int j;
+};
+
+union B
+{
+ struct {
+ struct { // { dg-warning "invalid use" }
+ int i, a[]; // { dg-message "declared here" }
+ }; // { dg-warning "anonymous struct" }
+ }; // { dg-warning "anonymous struct" }
+ int j;
+};
+
+}
+
+typedef struct Opaque* P29;
+struct S30 { P29 p; };
+struct S31 { S30 s; };
+
+typedef struct { } S32;
+typedef struct { S32 *ps32; } S33;
+typedef struct
+{
+ S33 *ps33;
+} S34;
+
+struct S35
+{
+ struct A {
+ int i1, a1[];
+ };
+
+ struct B {
+ int i2, a2[];
+ };
+
+ typedef struct {
+ int i3, a3[];
+ } C;
+
+ typedef struct {
+ int i4, a4[];
+ } D;
+
+ typedef A A2;
+ typedef B B2;
+ typedef C C2;
+ typedef D D2;
+};
+
diff --git a/gcc/testsuite/g++.dg/gcov/gcov-16.C b/gcc/testsuite/g++.dg/gcov/gcov-16.C
new file mode 100644
index 00000000000..f09d4060cbd
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gcov/gcov-16.C
@@ -0,0 +1,10 @@
+// PR gcov-profile/64634
+// { dg-options "-fprofile-arcs -ftest-coverage" }
+// { dg-do run { target native } }
+
+int main()
+{
+ return 0; /* count(#####) */
+}
+
+// { dg-final { run-gcov remove-gcda gcov-16.C } }
diff --git a/gcc/testsuite/g++.dg/pr77550.C b/gcc/testsuite/g++.dg/pr77550.C
new file mode 100644
index 00000000000..a1064737a67
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr77550.C
@@ -0,0 +1,298 @@
+// { dg-do run }
+// { dg-options "-std=c++14 -O3" }
+
+#define enum enum __attribute((mode(SI)))
+namespace std {
+typedef int size_t;
+inline namespace __cxx11 {}
+template <typename...> using _Require = void;
+template <typename> using __void_t = void;
+template <typename, typename, template <typename...> class, typename...>
+struct A {
+ using type = int;
+};
+template <typename _Default, template <typename...> class _Op,
+ typename... _Args>
+struct A<_Default, __void_t<_Op<_Args...>>, _Op, _Args...> {
+ using type = _Op<_Args...>;
+};
+template <typename _Default, template <typename...> class _Op,
+ typename... _Args>
+using __detected_or = A<_Default, void, _Op, _Args...>;
+template <typename _Default, template <typename...> class _Op,
+ typename... _Args>
+using __detected_or_t = typename __detected_or<_Default, _Op, _Args...>::type;
+template <template <typename...> class _Default,
+ template <typename...> class _Op, typename... _Args>
+using __detected_or_t_ = __detected_or_t<_Default<_Args...>, _Op, _Args...>;
+template <typename _InputIterator> void __distance(_InputIterator p1) { ++p1; }
+template <typename _InputIterator>
+void distance(_InputIterator p1, _InputIterator) {
+ __distance(p1);
+}
+template <typename, typename> using __replace_first_arg_t = int;
+struct B {
+ template <typename _Up> using rebind = _Up *;
+};
+template <typename, typename> using __ptr_rebind = B;
+template <typename _Tp> _Tp max(_Tp p1, _Tp) { return p1; }
+}
+void *operator new(__SIZE_TYPE__, void *p2) { return p2; }
+template <typename _Tp> struct C {
+ typedef _Tp *pointer;
+ pointer allocate(int p1) {
+ return static_cast<_Tp *>(operator new(p1 * sizeof(_Tp)));
+ }
+ template <typename _Up> void construct(_Up *p1) { new (p1) _Up; }
+};
+namespace std {
+template <typename _Tp> using __allocator_base = C<_Tp>;
+template <typename _Tp> struct allocator : __allocator_base<_Tp> {
+ typedef __SIZE_TYPE__ size_type;
+ template <typename _Tp1> struct rebind { typedef allocator<_Tp1> other; };
+};
+struct D {
+ template <typename _Alloc, typename _Up>
+ using __rebind = typename _Alloc::template rebind<_Up>::other;
+ template <typename _Tp> using __pointer = typename _Tp::pointer;
+ template <typename _Tp> using __c_pointer = typename _Tp::const_pointer;
+ template <typename _Tp> using __size_type = typename _Tp::size_type;
+};
+template <typename _Alloc, typename _Up>
+using __alloc_rebind =
+ __detected_or_t_<__replace_first_arg_t, D::__rebind, _Alloc, _Up>;
+template <typename _Alloc> struct K : D {
+ typedef _Alloc value_type;
+ using pointer = __detected_or_t<value_type, __pointer, _Alloc>;
+ using const_pointer =
+ __detected_or_t<__ptr_rebind<pointer, value_type>, __c_pointer>;
+ using size_type = __detected_or_t<int, __size_type, _Alloc>;
+ template <typename _Tp> using rebind_alloc = __alloc_rebind<_Alloc, _Tp>;
+ template <typename _Tp> static _Require<> _S_construct(_Tp p1) {
+ _Alloc __a;
+ __a.construct(p1);
+ }
+ static pointer allocate(_Alloc p1, size_type p2) { return p1.allocate(p2); }
+ template <typename _Tp, typename _Args>
+ static auto construct(_Alloc, _Tp p2, _Args) {
+ _S_construct(p2);
+ }
+};
+}
+template <typename _Alloc> struct O : std::K<_Alloc> {
+ template <typename _Tp> struct rebind {
+ typedef typename std::K<_Alloc>::template rebind_alloc<_Tp> other;
+ };
+};
+namespace std {
+template <typename _ForwardIterator, typename _Tp, typename _Allocator>
+void __uninitialized_fill_a(_ForwardIterator p1, _ForwardIterator, _Tp,
+ _Allocator p4) try {
+ O<_Allocator>::construct(p4, p1, 0);
+} catch (...) {
+}
+size_t __deque_buf_size(size_t p1) { return 1 ? 512 / p1 : 0; }
+template <typename _Tp, typename _Ref, typename> struct F {
+ template <typename _Up> using __ptr_to = B::rebind<_Up>;
+ template <typename _CvTp> using __iter = F<_Tp, _CvTp &, __ptr_to<_CvTp>>;
+ typedef __ptr_to<_Tp> _Elt_pointer;
+ typedef __ptr_to<_Elt_pointer> _Map_pointer;
+ _Elt_pointer _M_cur;
+ _Elt_pointer _M_first;
+ _Elt_pointer _M_last;
+ _Map_pointer _M_node;
+ F() {}
+ F(__iter<_Tp> &p1) : _M_cur(p1._M_cur), _M_node(p1._M_node) {}
+ _Ref operator*() { return *_M_cur; }
+ void operator++() {
+ _M_set_node(_M_node + 1);
+ _M_cur = _M_first;
+ }
+ void _M_set_node(_Map_pointer p1) {
+ _M_node = p1;
+ _M_first = *p1;
+ _M_last = _M_first;
+ }
+};
+template <typename _Tp, typename _Ref, typename _Ptr>
+int operator==(F<_Tp, _Ref, _Ptr> p1, F<_Tp, _Ref, _Ptr> p2) {
+ return p1._M_cur == p2._M_cur;
+}
+template <typename _Tp, typename _Ref, typename _Ptr>
+int operator!=(F<_Tp, _Ref, _Ptr> p1, F<_Tp, _Ref, _Ptr> p2) {
+ return !(p1 == p2);
+}
+template <typename _Tp, typename _Alloc> struct _Deque_base {
+ typedef typename _Alloc::template rebind<_Tp>::other _Tp_alloc_type;
+ typedef O<_Tp_alloc_type> _Alloc_traits;
+ typedef typename _Alloc_traits::pointer _Ptr;
+ typedef typename _Alloc_traits::template rebind<_Ptr>::other _Map_alloc_type;
+ typedef F<_Tp, _Tp &, _Ptr> iterator;
+ typedef F<_Tp, _Tp &, typename _Alloc_traits::const_pointer> const_iterator;
+ _Deque_base(_Alloc p1, size_t) : _M_impl(p1) { _M_initialize_map(0); }
+ ~_Deque_base() noexcept;
+ typedef typename iterator::_Map_pointer _Map_pointer;
+ struct L : _Tp_alloc_type {
+ _Map_pointer _M_map;
+ size_t _M_map_size;
+ iterator _M_start;
+ iterator _M_finish;
+ L(_Tp_alloc_type) {}
+ };
+ _Tp_alloc_type _M_get_Tp_allocator() { return _M_impl; }
+ _Ptr _M_allocate_node() { return O<_Tp_alloc_type>::allocate(_M_impl, 1); }
+ _Map_pointer _M_allocate_map(size_t p1) {
+ _Map_alloc_type __map_alloc;
+ return O<_Map_alloc_type>::allocate(__map_alloc, p1);
+ }
+ void _M_initialize_map(size_t);
+ void _M_create_nodes(_Map_pointer, _Map_pointer);
+ enum { _S_initial_map_size = 8 };
+ L _M_impl;
+};
+template <typename _Tp, typename _Alloc>
+_Deque_base<_Tp, _Alloc>::~_Deque_base() noexcept {}
+template <typename _Tp, typename _Alloc>
+void _Deque_base<_Tp, _Alloc>::_M_initialize_map(size_t) {
+ size_t __num_nodes(__deque_buf_size(sizeof(_Tp)));
+ _M_impl._M_map_size = max((size_t)_S_initial_map_size, 0);
+ _M_impl._M_map = _M_allocate_map(_M_impl._M_map_size);
+ _Map_pointer __nstart(_M_impl._M_map);
+ _Map_pointer __nfinish = __nstart + __num_nodes;
+ try {
+ _M_create_nodes(__nstart, __nfinish);
+ } catch (...) {
+ }
+ _M_impl._M_start._M_set_node(__nstart);
+ _M_impl._M_finish._M_set_node(__nfinish - 1);
+ _M_impl._M_start._M_cur = _M_impl._M_start._M_first;
+ _M_impl._M_finish._M_cur = _M_impl._M_finish._M_first;
+}
+template <typename _Tp, typename _Alloc>
+void _Deque_base<_Tp, _Alloc>::_M_create_nodes(_Map_pointer __nstart,
+ _Map_pointer __nfinish) {
+ _Map_pointer __cur;
+ try {
+ for (__cur = __nstart; __cur < __nfinish; ++__cur)
+ *__cur = _M_allocate_node();
+ } catch (...) {
+ }
+}
+template <typename _Tp, typename _Alloc = allocator<_Tp>>
+struct deque : _Deque_base<_Tp, _Alloc> {
+ typedef _Deque_base<_Tp, _Alloc> _Base;
+ typedef typename _Base::_Map_pointer _Map_pointer;
+ typedef _Tp value_type;
+ typedef typename _Base::const_iterator const_iterator;
+ typedef size_t size_type;
+ typedef _Alloc allocator_type;
+ using _Base::_M_get_Tp_allocator;
+ deque(size_type, value_type __value, allocator_type __a = allocator_type())
+ : _Base(__a, 0) {
+ _M_fill_initialize(__value);
+ }
+ const_iterator begin() { return this->_M_impl._M_start; }
+ const_iterator end() { return this->_M_impl._M_finish; }
+ void _M_fill_initialize(const value_type &);
+};
+template <typename _Container> auto begin(_Container p1) { return p1.begin(); }
+template <typename _Container> auto end(_Container p1) { return p1.end(); }
+template <typename _Container> auto cbegin(_Container p1) { return begin(p1); }
+template <typename _Container> auto cend(_Container p1) { return end(p1); }
+template <typename _Tp, typename _Alloc>
+void deque<_Tp, _Alloc>::_M_fill_initialize(const value_type &) {
+ _Map_pointer __cur;
+ try {
+ for (__cur = this->_M_impl._M_start._M_node;
+ __cur < this->_M_impl._M_finish._M_node; ++__cur)
+ __uninitialized_fill_a(*__cur, *__cur, 0, _M_get_Tp_allocator());
+ } catch (...) {
+ }
+}
+template <class> struct char_traits;
+namespace __cxx11 {
+template <typename _CharT, typename = char_traits<_CharT>,
+ typename = allocator<_CharT>>
+struct basic_string;
+typedef basic_string<char> string;
+}
+template <> struct char_traits<char> {
+ typedef char char_type;
+ static int compare(char_type, char_type *p2, size_t p3) {
+ return __builtin_memcmp(0, p2, p3);
+ }
+};
+namespace __cxx11 {
+template <typename, typename, typename> struct basic_string {
+ typedef O<allocator<char>> _Alloc_traits;
+ typedef _Alloc_traits::size_type size_type;
+ typedef _Alloc_traits::pointer pointer;
+ struct _Alloc_hider {
+ _Alloc_hider(pointer, allocator<char> && = allocator<char>());
+ } _M_dataplus;
+ size_type _M_string_length = 0;
+ enum { _S_local_capacity = 15 } _M_local_buf[_S_local_capacity];
+ basic_string() : _M_dataplus(0) {}
+ basic_string(const basic_string &) : _M_dataplus(0) {}
+ size_type size() { return _M_string_length; }
+ char *data() const {}
+};
+//template<> basic_string<char, std::char_traits<char>, std::allocator<char>>::
+//_Alloc_hider::_Alloc_hider(char*, std::allocator<char>&&) {}
+extern "C" void
+_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderC1EPcOS3_ (...) {}
+}
+template <typename _CharT>
+int operator==(basic_string<_CharT> &p1, const basic_string<_CharT> &p2) {
+ return p1.size() && char_traits<_CharT>::compare(0, p2.data(), p1.size());
+}
+}
+struct G {
+ template <class Facade> static void increment(Facade p1) { p1.increment(); }
+};
+template <class Derived> struct H {
+ Derived derived() { return *static_cast<Derived *>(this); }
+ void operator++() {
+ Derived __trans_tmp_1 = derived();
+ G::increment(__trans_tmp_1);
+ }
+};
+template <class Derived> struct I { typedef H<Derived> type; };
+template <class Derived, class Base> struct M : I<Derived>::type {
+ M(Base p1) : m_iterator(p1) {}
+ Base base() { return m_iterator; }
+ Base &base_reference() { return m_iterator; }
+ Base m_iterator;
+};
+template <class, class> struct N;
+template <class Predicate, class Iterator> struct J {
+ typedef M<N<Predicate, Iterator>, Iterator> type;
+};
+template <class Predicate, class Iterator>
+struct N : J<Predicate, Iterator>::type {
+ typedef typename J<Predicate, Iterator>::type super_t;
+ N(Predicate p1, Iterator p2, Iterator p3)
+ : super_t(p2), m_predicate(p1), m_end(p3) {}
+ void increment() {
+ while (this->base() != m_end && !m_predicate(*this->base()))
+ ++this->base_reference();
+ }
+ Predicate m_predicate;
+ Iterator m_end;
+};
+template <class Predicate, class Iterator>
+N<Predicate, Iterator> make_filter_iterator(Predicate p1, Iterator p2,
+ Iterator p3) {
+ return N<Predicate, Iterator>(p1, p2, p3);
+}
+struct Foo {
+ std::string bar;
+};
+int main() {
+ std::deque<Foo> foos(0, {});
+ std::string test;
+ auto p = [test](auto &foo) { return foo.bar == test; };
+ auto begin = make_filter_iterator(p, cbegin(foos), cend(foos));
+ auto end = make_filter_iterator(p, cend(foos), cend(foos));
+ distance(begin, end);
+}
diff --git a/gcc/testsuite/g++.dg/pr78229.C b/gcc/testsuite/g++.dg/pr78229.C
new file mode 100644
index 00000000000..a52141b6b83
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr78229.C
@@ -0,0 +1,24 @@
+/* { dg-do compile { target x86_64-*-* i?86-*-* } } */
+/* { dg-options "-O2 -mbmi -w" } */
+
+void a();
+inline int b(int c) {
+ int d = c;
+ return __builtin_ia32_tzcnt_u32(d);
+}
+struct e {};
+int f, g, h;
+void fn3() {
+ float j;
+ &j;
+ {
+ e k;
+ while (h) {
+ if (g == 0)
+ continue;
+ int i = b(g);
+ f = i;
+ }
+ a();
+ }
+}
diff --git a/gcc/testsuite/g++.dg/torture/pr77745.C b/gcc/testsuite/g++.dg/torture/pr77745.C
new file mode 100644
index 00000000000..59d86b5c501
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr77745.C
@@ -0,0 +1,24 @@
+// { dg-do run }
+
+inline void* operator new(__SIZE_TYPE__, void* __p) noexcept { return __p; }
+
+long foo(char *c1, char *c2)
+{
+ long *p1 = new (c1) long;
+ *p1 = 100;
+ long long *p2 = new (c2) long long;
+ *p2 = 200;
+ long *p3 = new (c2) long;
+ *p3 = 200;
+ return *p1;
+}
+int main()
+{
+ union {
+ char c;
+ long l;
+ long long ll;
+ } c;
+ if (foo(&c.c, &c.c) != 200)
+ __builtin_abort();
+}
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr77943.C b/gcc/testsuite/g++.dg/tree-ssa/pr77943.C
new file mode 100644
index 00000000000..ef7954a98d2
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr77943.C
@@ -0,0 +1,25 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -std=c++11" } */
+
+void thrower[[gnu::noinline]]() {
+ throw 1;
+}
+
+inline void fatal() noexcept {thrower();}
+inline void notFatal() {thrower();}
+
+void func(bool callFatal) {
+ if (callFatal) {
+ fatal();
+ } else {
+ notFatal();
+ }
+}
+
+int main(int argc, const char* argv[]) {
+ try {
+ bool callFatal = argc > 1;
+ func(callFatal);
+ } catch (...) {
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/Woverride-init-1.c b/gcc/testsuite/gcc.dg/Woverride-init-1.c
index 29eca3095cd..b01d8a29dcc 100644
--- a/gcc/testsuite/gcc.dg/Woverride-init-1.c
+++ b/gcc/testsuite/gcc.dg/Woverride-init-1.c
@@ -10,19 +10,19 @@ union u { char a; long long b; };
struct s s0 = {
.a = 1,
.b = 2,
- .a = 3, /* { dg-warning "initialized field overwritten|near init" } */
- 4, /* { dg-warning "initialized field overwritten|near init" } */
+ .a = 3, /* { dg-warning "initialized field overwritten" } */
+ 4, /* { dg-warning "initialized field overwritten" } */
5
};
union u u0 = {
.a = 1,
- .b = 2, /* { dg-warning "initialized field overwritten|near init" } */
- .a = 3 }; /* { dg-warning "initialized field overwritten|near init" } */
+ .b = 2, /* { dg-warning "initialized field overwritten" } */
+ .a = 3 }; /* { dg-warning "initialized field overwritten" } */
int a[5] = {
[0] = 1,
[1] = 2,
- [0] = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ [0] = 3, /* { dg-warning "initialized field overwritten" } */
[2] = 4
};
diff --git a/gcc/testsuite/gcc.dg/Woverride-init-2.c b/gcc/testsuite/gcc.dg/Woverride-init-2.c
index c5490b5ad35..d0ece89eb6d 100644
--- a/gcc/testsuite/gcc.dg/Woverride-init-2.c
+++ b/gcc/testsuite/gcc.dg/Woverride-init-2.c
@@ -10,19 +10,19 @@ union u { char a; long long b; };
struct s s0 = {
.a = 1,
.b = 2,
- .a = 3, /* { dg-warning "initialized field overwritten|near init" } */
- 4, /* { dg-warning "initialized field overwritten|near init" } */
+ .a = 3, /* { dg-warning "initialized field overwritten" } */
+ 4, /* { dg-warning "initialized field overwritten" } */
5
};
union u u0 = {
.a = 1,
- .b = 2, /* { dg-warning "initialized field overwritten|near init" } */
- .a = 3 }; /* { dg-warning "initialized field overwritten|near init" } */
+ .b = 2, /* { dg-warning "initialized field overwritten" } */
+ .a = 3 }; /* { dg-warning "initialized field overwritten" } */
int a[5] = {
[0] = 1,
[1] = 2,
- [0] = 3, /* { dg-warning "initialized field overwritten|near init" } */
+ [0] = 3, /* { dg-warning "initialized field overwritten" } */
[2] = 4
};
diff --git a/gcc/testsuite/gcc.dg/init-excess-2.c b/gcc/testsuite/gcc.dg/init-excess-2.c
new file mode 100644
index 00000000000..1bf0a96a880
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/init-excess-2.c
@@ -0,0 +1,47 @@
+/* Test for diagnostics about excess initializers when using a macro
+ defined in a system header:
+ c/71115 - Missing warning: excess elements in struct initializer. */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+#include <stddef.h>
+
+int* a[1] = {
+ 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
+
+const char str[1] = {
+ 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
+
+struct S {
+ int *a;
+} s = {
+ 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
+
+struct __attribute__ ((designated_init)) S2 {
+ int *a;
+} s2 = {
+ NULL /* { dg-warning "positional initialization|near init" } */
+};
+
+union U {
+ int *a;
+} u = {
+ 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
+
+int __attribute__ ((vector_size (16))) ivec = {
+ 0, 0, 0, 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
+
+int* scal = {
+ 0,
+ NULL /* { dg-warning "excess elements|near init" } */
+};
diff --git a/gcc/testsuite/gcc.dg/torture/pr77648-1.c b/gcc/testsuite/gcc.dg/torture/pr77648-1.c
new file mode 100644
index 00000000000..3597e2ed456
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77648-1.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+
+struct S { int *p; int *q; };
+
+int **__attribute__((noinline,noclone,pure)) foo (struct S *s)
+{
+ int tem;
+ __asm__ ("" : "=g" (tem) : "g" (s->p));
+ return &s->q;
+}
+
+int main()
+{
+ struct S s;
+ int i = 1, j = 2;
+ int **x;
+ s.p = &i;
+ s.q = &j;
+ x = foo (&s);
+ **x = 7;
+ if (j != 7)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77648-2.c b/gcc/testsuite/gcc.dg/torture/pr77648-2.c
new file mode 100644
index 00000000000..1c3734d34d8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77648-2.c
@@ -0,0 +1,22 @@
+/* { dg-do run } */
+
+struct S { int *p; int *q; };
+
+int **__attribute__((noinline,noclone,const)) foo (struct S *s)
+{
+ return &s->q;
+}
+
+int main()
+{
+ struct S s;
+ int i = 1, j = 2;
+ int **x;
+ s.p = &i;
+ s.q = &j;
+ x = foo (&s);
+ **x = 7;
+ if (j != 7)
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77768.c b/gcc/testsuite/gcc.dg/torture/pr77768.c
new file mode 100644
index 00000000000..47e1484b77a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77768.c
@@ -0,0 +1,13 @@
+/* { dg-do run } */
+
+static const int a;
+int b;
+int *c, *d;
+int main()
+{
+ c = (int *)&a;
+ c == d ?: __builtin_exit(0);
+ for (; b; b++ >= (*d = a))
+ ;
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77839.c b/gcc/testsuite/gcc.dg/torture/pr77839.c
new file mode 100644
index 00000000000..b98231b56ff
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77839.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+
+void
+sd(int yn)
+{
+ while (yn < 1)
+ {
+ int hy;
+ int *n6 = &hy;
+ int **ot = &n6;
+
+ (void)ot;
+ for (yn = 0; yn < 1; ++yn)
+ {
+ int tc, wo = 0, ez = 0, b8 = 0;
+ int *ls = &wo;
+
+ (void)ls;
+ hy = 0;
+ for (tc = 0; tc < 1; ++tc)
+ {
+ ez ^= hy;
+ wo ^= ez;
+ ++b8;
+ }
+ hy += (b8 < wo);
+ }
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77916.c b/gcc/testsuite/gcc.dg/torture/pr77916.c
new file mode 100644
index 00000000000..f29f099d586
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77916.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -Wno-int-conversion" } */
+
+/* PR77916: This failed with "error: invalid (pointer) operands to plus/minus"
+ after SLSR. */
+
+typedef struct
+{
+ void *f1;
+} S;
+
+S *a;
+int b;
+
+void
+fn1 (void)
+{
+ for (; b; b++, a++)
+ a->f1 = b;
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77937-1.c b/gcc/testsuite/gcc.dg/torture/pr77937-1.c
new file mode 100644
index 00000000000..8661d24ec28
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77937-1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-march=amdfam10" { target i?86-*-* x86_64-*-* } } */
+
+int *a;
+int b, c, d;
+void fn1(char *p1, int p2) {
+ int x;
+ while (1) {
+ x = 0;
+ for (; x < 8; x++)
+ p1[0] = -a[0] * d + p1[0] * c + 1 >> b >> 1;
+ p1 += p2;
+ }
+}
diff --git a/gcc/testsuite/gcc.dg/torture/pr77937-2.c b/gcc/testsuite/gcc.dg/torture/pr77937-2.c
new file mode 100644
index 00000000000..37b4fd671eb
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr77937-2.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-options "-O3" } */
+/* { dg-additional-options "-march=amdfam10" { target i?86-*-* x86_64-*-* } } */
+
+extern int fn2(int);
+extern int fn3(int);
+int a, b, c;
+void fn1(long p1) {
+ char *d;
+ for (;; d += p1) {
+ d[0] = fn2(1 >> a);
+ fn3(0);
+ fn3(c >> a);
+ d[1] = fn3(d[1] * b + c >> a);
+ d[4] = fn3(d[4] * b + c >> a);
+ d[5] = fn3(d[5] * b + c >> a);
+ }
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/pr78038.c b/gcc/testsuite/gcc.target/aarch64/pr78038.c
new file mode 100644
index 00000000000..76d97d3b0ad
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/pr78038.c
@@ -0,0 +1,28 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+/* PR rtl-optimization/78038.
+ Make sure ree can gracefully handle extensions of the global
+ variable register after a call. */
+
+typedef void (*test_fptr_t) (void);
+void
+test_f (void)
+{
+}
+test_fptr_t test_fptr = test_f;
+
+struct test2_s
+{
+ int f;
+};
+
+register struct test2_s *g __asm__("x28");
+
+void
+do_something ()
+{
+ test_fptr ();
+ struct test2_s *p1 = 0;
+ *p1 = *g;
+}
diff --git a/gcc/testsuite/gcc.target/i386/bmi-6.c b/gcc/testsuite/gcc.target/i386/bmi-6.c
index a4489e0b5a6..e8d464636f4 100644
--- a/gcc/testsuite/gcc.target/i386/bmi-6.c
+++ b/gcc/testsuite/gcc.target/i386/bmi-6.c
@@ -1,4 +1,5 @@
/* { dg-do link } */
+/* { dg-xfail-if "PR 78057" { "*-*-*" } { "*" } { "" } } */
/* { dg-options "-O2 -mbmi" } */
#include <x86intrin.h>
diff --git a/gcc/testsuite/gcc.target/i386/mask-unpack.c b/gcc/testsuite/gcc.target/i386/mask-unpack.c
index 5905e1cf00f..4291480cfff 100644
--- a/gcc/testsuite/gcc.target/i386/mask-unpack.c
+++ b/gcc/testsuite/gcc.target/i386/mask-unpack.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-mavx512bw -mavx512dq -O3 -fopenmp-simd -fdump-tree-vect-details" } */
+/* { dg-options "-mavx512bw -mavx512dq -mno-stackrealign -O3 -fopenmp-simd -fdump-tree-vect-details" } */
/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 10 "vect" } } */
/* { dg-final { scan-assembler-not "maskmov" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr65105-1.c b/gcc/testsuite/gcc.target/i386/pr65105-1.c
index de91a20e238..b0d901c90bd 100644
--- a/gcc/testsuite/gcc.target/i386/pr65105-1.c
+++ b/gcc/testsuite/gcc.target/i386/pr65105-1.c
@@ -1,6 +1,6 @@
/* PR target/pr65105 */
/* { dg-do run { target { ia32 } } } */
-/* { dg-options "-O2 -msse2 -mtune=slm -save-temps" } */
+/* { dg-options "-O2 -msse2 -mtune=slm -mno-stackrealign -save-temps" } */
/* { dg-require-effective-target sse2 } */
/* { dg-final { scan-assembler "por" } } */
/* { dg-final { scan-assembler "pand" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr65105-2.c b/gcc/testsuite/gcc.target/i386/pr65105-2.c
index 92168942d11..8922d4eb2ed 100644
--- a/gcc/testsuite/gcc.target/i386/pr65105-2.c
+++ b/gcc/testsuite/gcc.target/i386/pr65105-2.c
@@ -1,6 +1,6 @@
/* PR target/pr65105 */
/* { dg-do compile { target { ia32 } } } */
-/* { dg-options "-O2" } */
+/* { dg-options "-O2 -mno-stackrealign" } */
/* { dg-final { scan-assembler "por" } } */
long long i1, i2, res;
diff --git a/gcc/testsuite/gcc.target/i386/pr65105-3.c b/gcc/testsuite/gcc.target/i386/pr65105-3.c
index b83989fa4d2..92d62f5da2b 100644
--- a/gcc/testsuite/gcc.target/i386/pr65105-3.c
+++ b/gcc/testsuite/gcc.target/i386/pr65105-3.c
@@ -1,6 +1,6 @@
/* PR target/pr65105 */
/* { dg-do compile { target { ia32 } } } */
-/* { dg-options "-O2 -march=slm -msse4.2" } */
+/* { dg-options "-O2 -march=slm -msse4.2 -mno-stackrealign" } */
/* { dg-final { scan-assembler "pand" } } */
/* { dg-final { scan-assembler "por" } } */
/* { dg-final { scan-assembler "ptest" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr65105-5.c b/gcc/testsuite/gcc.target/i386/pr65105-5.c
index 639bbe1eb14..cd19cbc775d 100644
--- a/gcc/testsuite/gcc.target/i386/pr65105-5.c
+++ b/gcc/testsuite/gcc.target/i386/pr65105-5.c
@@ -1,6 +1,6 @@
/* PR target/pr65105 */
/* { dg-do compile { target { ia32 } } } */
-/* { dg-options "-O2 -march=core-avx2" } */
+/* { dg-options "-O2 -march=core-avx2 -mno-stackrealign" } */
/* { dg-final { scan-assembler "pandn" } } */
/* { dg-final { scan-assembler "pxor" } } */
/* { dg-final { scan-assembler "ptest" } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr67761.c b/gcc/testsuite/gcc.target/i386/pr67761.c
index ff813f3f8b5..f392b5d7bf6 100644
--- a/gcc/testsuite/gcc.target/i386/pr67761.c
+++ b/gcc/testsuite/gcc.target/i386/pr67761.c
@@ -1,6 +1,6 @@
/* PR target/pr67761 */
/* { dg-do compile { target { ia32 } } } */
-/* { dg-options "-O2 -march=slm -g" } */
+/* { dg-options "-O2 -march=slm -mno-stackrealign -g" } */
/* { dg-final { scan-assembler "paddq" } } */
void
diff --git a/gcc/testsuite/gcc.target/i386/pr77991.c b/gcc/testsuite/gcc.target/i386/pr77991.c
new file mode 100644
index 00000000000..6784fbcb9fb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr77991.c
@@ -0,0 +1,19 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-require-effective-target maybe_x32 } */
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
+
+struct rcu_reader_data
+{
+ unsigned ctr;
+ _Bool waiting;
+}
+
+extern __thread rcu_reader;
+
+void rcu_read_lock()
+{
+ struct rcu_reader_data *x = &rcu_reader;
+ _Bool val = 0;
+
+ __atomic_store(&x->waiting, &val, 0);
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr78037.c b/gcc/testsuite/gcc.target/i386/pr78037.c
new file mode 100644
index 00000000000..d2e66ced7bc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr78037.c
@@ -0,0 +1,21 @@
+/* { dg-do run } */
+/* { dg-require-effective-target bmi } */
+/* { dg-options "-O2 -mbmi" } */
+
+#include <x86intrin.h>
+
+#include "bmi-check.h"
+
+int
+__attribute__((noinline, noclone))
+foo (int x)
+{
+ return __tzcnt_u32 (x) & 0x1f;
+}
+
+static void
+bmi_test ()
+{
+ if (foo (0) != 0)
+ abort ();
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr78057.c b/gcc/testsuite/gcc.target/i386/pr78057.c
new file mode 100644
index 00000000000..493a53332bb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr78057.c
@@ -0,0 +1,42 @@
+/* PR target/78057 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mbmi -mlzcnt -fdump-tree-optimized" } */
+
+extern void link_error (void);
+
+int
+foo (int x)
+{
+ if (__builtin_ia32_tzcnt_u16 (16) != 4
+ || __builtin_ia32_tzcnt_u16 (0) != 16
+ || __builtin_ia32_lzcnt_u16 (0x1ff) != 7
+ || __builtin_ia32_lzcnt_u16 (0) != 16
+ || __builtin_ia32_tzcnt_u32 (8) != 3
+ || __builtin_ia32_tzcnt_u32 (0) != 32
+ || __builtin_ia32_lzcnt_u32 (0x3fffffff) != 2
+ || __builtin_ia32_lzcnt_u32 (0) != 32
+#ifdef __x86_64__
+ || __builtin_ia32_tzcnt_u64 (4) != 2
+ || __builtin_ia32_tzcnt_u64 (0) != 64
+ || __builtin_ia32_lzcnt_u64 (0x1fffffff) != 35
+ || __builtin_ia32_lzcnt_u64 (0) != 64
+#endif
+ )
+ link_error ();
+ x += 2;
+ if (x == 0)
+ return 5;
+ return __builtin_ia32_tzcnt_u32 (x)
+ + __builtin_ia32_lzcnt_u32 (x)
+#ifdef __x86_64__
+ + __builtin_ia32_tzcnt_u64 (x)
+ + __builtin_ia32_lzcnt_u64 (x)
+#endif
+ ;
+}
+
+/* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
+/* { dg-final { scan-tree-dump-not "__builtin_ia32_\[lt]zcnt" "optimized" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_ctz " 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_clz " 1 "optimized" } } */
+/* { dg-final { scan-tree-dump-times "__builtin_ctzll " 1 "optimized" { target lp64 } } } */
diff --git a/gcc/testsuite/gcc.target/i386/pr78262.c b/gcc/testsuite/gcc.target/i386/pr78262.c
new file mode 100644
index 00000000000..a0ead417191
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr78262.c
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O -fschedule-insns" } */
+
+typedef unsigned char u8;
+typedef unsigned __int128 u128;
+
+static u128 u128_0;
+static u128 *p128;
+
+u128 __attribute__ ((noinline, noclone))
+foo(u8 u8_0)
+{
+ p128 = &u128_0;
+ u128_0 = u8_0;
+ u128_0 = u128_0 << 127 | u128_0 >> 1;
+ u128_0 >>= (u8)u128_0;
+ return 2 + u128_0;
+}
+
+int
+main()
+{
+ u128 x = foo(5);
+ if (p128 != &u128_0)
+ __builtin_abort();
+ if (u128_0 != ((u128)2 << 124))
+ __builtin_abort();
+ if (x != ((u128)2 << 124) + 2)
+ __builtin_abort();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr78310.c b/gcc/testsuite/gcc.target/i386/pr78310.c
new file mode 100644
index 00000000000..dfeae4c827c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr78310.c
@@ -0,0 +1,15 @@
+/* { dg-do compile { target { ! ia32 } } } */
+/* { dg-options "-O -mbmi2" } */
+
+unsigned long long a;
+int b;
+
+int
+fn1(int p1)
+{
+ p1 &= 1;
+ p1 &= (short)~p1;
+ b = a;
+ a = a << p1 | a >> (64 - p1);
+ return p1 + 1 + a;
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr77822.c b/gcc/testsuite/gcc.target/s390/pr77822.c
new file mode 100644
index 00000000000..6789152e30c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr77822.c
@@ -0,0 +1,307 @@
+/* This testcase checks that the shift operand of r*sbg instructions is in
+ range. */
+
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=zEC12 -Wno-shift-count-overflow" } */
+
+int g;
+
+void pos_ll_129 (long long b)
+{
+ if (b >> 129 & 1)
+ g = b;
+}
+
+void sizepos_ll_134 (long long b)
+{
+ if (b >> 134 & 1)
+ g = b;
+}
+
+void pos_ll_65 (long long b)
+{
+ if (b >> 65 & 1)
+ g = b;
+}
+
+void sizepos_ll_70 (long long b)
+{
+ if (b >> 70 & 1)
+ g = b;
+}
+
+void pos_ll_33 (long long b)
+{
+ if (b >> 33 & 1)
+ g = b;
+}
+
+void sizepos_ll_38 (long long b)
+{
+ if (b >> 38 & 1)
+ g = b;
+}
+
+void pos_ll_17 (long long b)
+{
+ if (b >> 17 & 1)
+ g = b;
+}
+
+void sizepos_ll_22 (long long b)
+{
+ if (b >> 22 & 1)
+ g = b;
+}
+
+void pos_ll_8 (long long b)
+{
+ if (b >> 8 & 1)
+ g = b;
+}
+
+void sizepos_ll_13 (long long b)
+{
+ if (b >> 13 & 1)
+ g = b;
+}
+
+void pos_l_129 (long b)
+{
+ if (b >> 129 & 1)
+ g = b;
+}
+
+void sizepos_l_134 (long b)
+{
+ if (b >> 134 & 1)
+ g = b;
+}
+
+void pos_l_65 (long b)
+{
+ if (b >> 65 & 1)
+ g = b;
+}
+
+void sizepos_l_70 (long b)
+{
+ if (b >> 70 & 1)
+ g = b;
+}
+
+void pos_l_33 (long b)
+{
+ if (b >> 33 & 1)
+ g = b;
+}
+
+void sizepos_l_38 (long b)
+{
+ if (b >> 38 & 1)
+ g = b;
+}
+
+void pos_l_17 (long b)
+{
+ if (b >> 17 & 1)
+ g = b;
+}
+
+void sizepos_l_22 (long b)
+{
+ if (b >> 22 & 1)
+ g = b;
+}
+
+void pos_l_8 (long b)
+{
+ if (b >> 8 & 1)
+ g = b;
+}
+
+void sizepos_l_13 (long b)
+{
+ if (b >> 13 & 1)
+ g = b;
+}
+
+void pos_i_129 (int b)
+{
+ if (b >> 129 & 1)
+ g = b;
+}
+
+void sizepos_i_134 (int b)
+{
+ if (b >> 134 & 1)
+ g = b;
+}
+
+void pos_i_65 (int b)
+{
+ if (b >> 65 & 1)
+ g = b;
+}
+
+void sizepos_i_70 (int b)
+{
+ if (b >> 70 & 1)
+ g = b;
+}
+
+void pos_i_33 (int b)
+{
+ if (b >> 33 & 1)
+ g = b;
+}
+
+void sizepos_i_38 (int b)
+{
+ if (b >> 38 & 1)
+ g = b;
+}
+
+void pos_i_17 (int b)
+{
+ if (b >> 17 & 1)
+ g = b;
+}
+
+void sizepos_i_22 (int b)
+{
+ if (b >> 22 & 1)
+ g = b;
+}
+
+void pos_i_8 (int b)
+{
+ if (b >> 8 & 1)
+ g = b;
+}
+
+void sizepos_i_13 (int b)
+{
+ if (b >> 13 & 1)
+ g = b;
+}
+
+void pos_s_129 (short b)
+{
+ if (b >> 129 & 1)
+ g = b;
+}
+
+void sizepos_s_134 (short b)
+{
+ if (b >> 134 & 1)
+ g = b;
+}
+
+void pos_s_65 (short b)
+{
+ if (b >> 65 & 1)
+ g = b;
+}
+
+void sizepos_s_70 (short b)
+{
+ if (b >> 70 & 1)
+ g = b;
+}
+
+void pos_s_33 (short b)
+{
+ if (b >> 33 & 1)
+ g = b;
+}
+
+void sizepos_s_38 (short b)
+{
+ if (b >> 38 & 1)
+ g = b;
+}
+
+void pos_s_17 (short b)
+{
+ if (b >> 17 & 1)
+ g = b;
+}
+
+void sizepos_s_22 (short b)
+{
+ if (b >> 22 & 1)
+ g = b;
+}
+
+void pos_s_8 (short b)
+{
+ if (b >> 8 & 1)
+ g = b;
+}
+
+void sizepos_s_13 (short b)
+{
+ if (b >> 13 & 1)
+ g = b;
+}
+
+void pos_c_129 (signed char b)
+{
+ if (b >> 129 & 1)
+ g = b;
+}
+
+void sizepos_c_134 (signed char b)
+{
+ if (b >> 134 & 1)
+ g = b;
+}
+
+void pos_c_65 (signed char b)
+{
+ if (b >> 65 & 1)
+ g = b;
+}
+
+void sizepos_c_70 (signed char b)
+{
+ if (b >> 70 & 1)
+ g = b;
+}
+
+void pos_c_33 (signed char b)
+{
+ if (b >> 33 & 1)
+ g = b;
+}
+
+void sizepos_c_38 (signed char b)
+{
+ if (b >> 38 & 1)
+ g = b;
+}
+
+void pos_c_17 (signed char b)
+{
+ if (b >> 17 & 1)
+ g = b;
+}
+
+void sizepos_c_22 (signed char b)
+{
+ if (b >> 22 & 1)
+ g = b;
+}
+
+void pos_c_8 (signed char b)
+{
+ if (b >> 8 & 1)
+ g = b;
+}
+
+void sizepos_c_13 (signed char b)
+{
+ if (b >> 13 & 1)
+ g = b;
+}
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_22.f03 b/gcc/testsuite/gfortran.dg/allocate_with_source_22.f03
new file mode 100644
index 00000000000..b8689f95a54
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_with_source_22.f03
@@ -0,0 +1,48 @@
+! { dg-do run }
+!
+! Test that pr72832 is fixed now.
+! Contributed by Daan van Vugt
+
+program allocate_source
+ type :: t
+ integer :: i
+ end type t
+ type, extends(t) :: tt
+ end type tt
+
+ call test_type()
+ call test_class()
+
+contains
+
+subroutine test_class()
+ class(t), allocatable, dimension(:) :: a, b
+ allocate(tt::a(1:2))
+ a(:)%i = [ 1,2 ]
+ if (size(a) /= 2) call abort()
+ if (any(a(:)%i /= [ 1,2])) call abort()
+
+ allocate(b(1:4), source=a)
+ ! b is incorrectly initialized here. This only is diagnosed when compiled
+ ! with -fcheck=bounds.
+ if (size(b) /= 4) call abort()
+ if (any(b(1:2)%i /= [ 1,2])) call abort()
+ select type (b(1))
+ class is (tt)
+ continue
+ class default
+ call abort()
+ end select
+end subroutine
+
+subroutine test_type()
+ type(t), allocatable, dimension(:) :: a, b
+ allocate(a(1:2))
+ if (size(a) /= 2) call abort()
+
+ allocate(b(1:4), source=a)
+ if (size(b) /= 4) call abort()
+end subroutine
+end program allocate_source
+
+
diff --git a/gcc/testsuite/gfortran.dg/allocate_with_source_23.f03 b/gcc/testsuite/gfortran.dg/allocate_with_source_23.f03
new file mode 100644
index 00000000000..cfe8bd80e2f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/allocate_with_source_23.f03
@@ -0,0 +1,67 @@
+! { dg-do run }
+! { dg-options "-fcheck=bounds" }
+! { dg-shouldfail "Array bounds mismatch" }
+!
+! Test that pr72832 is fixed now.
+! Contributed by Daan van Vugt
+
+program allocate_source
+ type :: t
+ integer :: i
+ end type t
+ type, extends(t) :: tt
+ end type tt
+
+ call test_type()
+ call test_class_correct()
+ call test_class_fail()
+
+contains
+
+subroutine test_class_correct()
+ class(t), allocatable, dimension(:) :: a, b
+ allocate(tt::a(1:2))
+ a(:)%i = [ 1,2 ]
+ if (size(a) /= 2) call abort()
+ if (any(a(:)%i /= [ 1,2])) call abort()
+
+ allocate(b(1:4), source=a(1))
+ if (size(b) /= 4) call abort()
+ if (any(b(:)%i /= [ 1,1,1,1])) call abort()
+ select type (b(1))
+ class is (tt)
+ continue
+ class default
+ call abort()
+ end select
+end subroutine
+
+subroutine test_class_fail()
+ class(t), allocatable, dimension(:) :: a, b
+ allocate(tt::a(1:2))
+ a(:)%i = [ 1,2 ]
+ if (size(a) /= 2) call abort()
+ if (any(a(:)%i /= [ 1,2])) call abort()
+
+ allocate(b(1:4), source=a) ! Fail expected: sizes do not conform
+ if (size(b) /= 4) call abort()
+ if (any(b(1:2)%i /= [ 1,2])) call abort()
+ select type (b(1))
+ class is (tt)
+ continue
+ class default
+ call abort()
+ end select
+end subroutine
+
+subroutine test_type()
+ type(t), allocatable, dimension(:) :: a, b
+ allocate(a(1:2))
+ if (size(a) /= 2) call abort()
+
+ allocate(b(1:4), source=a)
+ if (size(b) /= 4) call abort()
+end subroutine
+end program allocate_source
+
+
diff --git a/gcc/testsuite/gfortran.dg/dependency_47.f90 b/gcc/testsuite/gfortran.dg/dependency_47.f90
new file mode 100644
index 00000000000..4888771c183
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_47.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! Make sure there is only one instance of a temporary variable here.
+! { dg-options "-fdump-tree-original" }
+
+SUBROUTINE prtdata(ilen)
+ INTEGER :: ilen
+ character(len=ilen), allocatable :: cline(:)
+ allocate(cline(2))
+ cline(1) = 'a'
+ cline(1)(2:3) = cline(1)(1:2)
+ cline(2) = cline(1)
+ print *,c
+END SUBROUTINE prtdata
+! { dg-final { scan-tree-dump-not "__var_" "original" } }
diff --git a/gcc/testsuite/gfortran.dg/dependency_49.f90 b/gcc/testsuite/gfortran.dg/dependency_49.f90
new file mode 100644
index 00000000000..73d517e8f76
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/dependency_49.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+! PR fortran/71902 - make sure that component references are followed
+! for dependency analysis.
+program main
+ type foo
+ character(len=:), allocatable :: x
+ end type foo
+ type(foo) :: a
+ a%x = 'asdf'
+ a%x = a%x(2:3)
+ print *,a%x
+end program main
+! { dg-final { scan-tree-dump-times "__var_1" 4 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/fmt_t_9.f b/gcc/testsuite/gfortran.dg/fmt_t_9.f
new file mode 100644
index 00000000000..bfe0361d0e1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_t_9.f
@@ -0,0 +1,41 @@
+! { dg-options "-ffixed-line-length-none -std=gnu" }
+! { dg-do run }
+! PR78123 Short reads with T edit descriptor not padding correctly
+ PROGRAM tformat
+C
+ INTEGER MXFLTL
+ PARAMETER (MXFLTL = 99999)
+ INTEGER IFLGHT, NFLCYC, IFLTSQ(MXFLTL), IDXBLK, LMAX, LMIN, I
+C
+ OPEN(29, status='scratch')
+ WRITE(29, '(a)') " 1 1 1 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT 72 122 4"
+ WRITE(29, '(a)') ""
+ WRITE(29, '(a)') " 451 402012011201120112011200120112011201120112011201120111971201120112011201120112011201"
+ WRITE(29, '(a)') " 451 4020 866 866 866 866 866 866 866 866 865 866 865 866 866 866 866 866 866 866 865 866"
+ REWIND(29)
+C The error occurs in the following loop:
+ 10 CONTINUE
+ READ(29,1010 ) IDXBLK, LMAX, LMIN
+1010 FORMAT(8X,I4,T51,2I5) ! wrong if this format is used
+c write(6,fmt='("IDXBLK,LMAX,LMIN=",3I5)')IDXBLK,LMAX,LMIN
+ IF (IDXBLK .EQ. 0) GO TO 20
+ GO TO 10
+C
+ 20 CONTINUE
+ READ(29,1040,END=100) IFLGHT, NFLCYC,
+ & (IFLTSQ(I), I=1,NFLCYC)
+1040 FORMAT(I5,I5,2X,(T13,20I4))
+c write(6,fmt='(2i6)') IFLGHT,NFLCYC
+c write(6,fmt='(20I4)') (IFLTSQ(I), I=1,NFLCYC)
+c write(6,*) "Program is correct"
+ close(29)
+ if (IFLGHT.ne.451) call abort
+ if (NFLCYC.ne.40) call abort
+ stop
+C
+ 100 CONTINUE
+C write(6,*) "End of file encountered (wrong)"
+ close (29)
+ call abort
+ STOP
+ END
diff --git a/gcc/testsuite/gfortran.dg/matmul_11.f90 b/gcc/testsuite/gfortran.dg/matmul_11.f90
new file mode 100644
index 00000000000..6907fa14bcd
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/matmul_11.f90
@@ -0,0 +1,14 @@
+! { dg-do compile }
+! { dg-options "-ffrontend-optimize -fdump-tree-original" }
+! PR 77915 - ICE of matmul with forall.
+program x
+ integer, parameter :: d = 3
+ real,dimension(d,d,d) :: cube,xcube
+ real, dimension(d,d) :: cmatrix
+ integer :: i,j
+ forall(i=1:d,j=1:d)
+ xcube(i,j,:) = matmul(cmatrix,cube(i,j,:))
+ end forall
+end program x
+
+! { dg-final { scan-tree-dump-times "_gfortran_matmul" 1 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/pr67219.f90 b/gcc/testsuite/gfortran.dg/pr67219.f90
new file mode 100644
index 00000000000..26d5f3f5cae
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr67219.f90
@@ -0,0 +1,8 @@
+! { dg-do compile }
+! PR 67149 - this used to throw a spurious error.
+function foo(bar)
+ integer(8) :: foo
+ integer(4), intent(in) :: bar
+ integer(4), parameter :: huge_4 = huge(0_4)
+ foo = (huge_4 - int(bar,kind=8))
+end function
diff --git a/gcc/testsuite/gfortran.dg/pr71895.f90 b/gcc/testsuite/gfortran.dg/pr71895.f90
new file mode 100644
index 00000000000..e5d40026d03
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr71895.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+program p
+ type t
+ integer :: n
+ end type
+ type(t) :: x
+ class(t) :: y ! { dg-error "must be dummy, allocatable or pointer" }
+ print *, extends_type_of(x, y)
+ print *, extends_type_of(y, x)
+end
diff --git a/gcc/testsuite/gfortran.dg/pr77763.f90 b/gcc/testsuite/gfortran.dg/pr77763.f90
new file mode 100644
index 00000000000..b48dc988601
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr77763.f90
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-options "-fdec" }
+block data
+ structure /s1/
+ end structure
+end block data
diff --git a/gcc/testsuite/gfortran.dg/pr77978_1.f90 b/gcc/testsuite/gfortran.dg/pr77978_1.f90
new file mode 100644
index 00000000000..a158f1b7872
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr77978_1.f90
@@ -0,0 +1,23 @@
+! { dg-do compile }
+! { dg-options "-std=f95" }
+subroutine a1
+ integer, parameter :: i = -666
+ stop i ! { dg-error "cannot be negative" }
+end subroutine a1
+
+subroutine a2
+ stop -666 ! { dg-error "cannot be negative" }
+end subroutine a2
+
+subroutine a3
+ integer, parameter :: i = 123456
+ stop i ! { dg-error "too many digits" }
+end subroutine a3
+
+subroutine a4
+ stop 123456 ! { dg-error "too many digits" }
+end subroutine a4
+
+!subroutine a5
+! stop merge(667,668,.true.)
+!end subroutine a5
diff --git a/gcc/testsuite/gfortran.dg/pr77978_2.f90 b/gcc/testsuite/gfortran.dg/pr77978_2.f90
new file mode 100644
index 00000000000..d6f2e78cf43
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr77978_2.f90
@@ -0,0 +1,5 @@
+! { dg-do compile }
+! { dg-options "-std=f2008" }
+subroutine a1
+ stop666 ! { dg-error "Blank required in STOP" }
+end subroutine a1
diff --git a/gcc/testsuite/gfortran.dg/pr77978_3.f90 b/gcc/testsuite/gfortran.dg/pr77978_3.f90
new file mode 100644
index 00000000000..0a3557be64a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr77978_3.f90
@@ -0,0 +1,23 @@
+! { dg-do compile }
+! { dg-options "-std=f2008" }
+subroutine a1
+ integer, parameter :: i = -666
+ stop i
+end subroutine a1
+
+subroutine a2
+ stop -666
+end subroutine a2
+
+subroutine a3
+ integer, parameter :: i = 123456
+ stop i
+end subroutine a3
+
+subroutine a4
+ stop 123456
+end subroutine a4
+
+subroutine a5
+ stop merge(667,668,.true.)
+end subroutine a5
diff --git a/gcc/testsuite/gfortran.dg/pr78092.f90 b/gcc/testsuite/gfortran.dg/pr78092.f90
new file mode 100644
index 00000000000..ba615d14c9a
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr78092.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+program test_stuff
+
+ implicit none
+
+ integer :: ivar1(2,3), ivar2
+
+ ivar1 = 6
+ call poly_sizeof(ivar1, ivar2)
+
+ if (ivar2 /= 4) call abort
+
+ contains
+
+ subroutine poly_sizeof(arg1,arg2)
+ class(*), intent(in) :: arg1(:,:)
+ integer, intent(out) :: arg2
+ arg2 = sizeof(arg1(1,1))
+ end subroutine
+
+end program test_stuff
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_49.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_49.f90
new file mode 100644
index 00000000000..cb540a4f548
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/proc_ptr_49.f90
@@ -0,0 +1,50 @@
+! { dg-do compile }
+!
+! Tests the fix for PRs 78013 and 61420, both of which gave a
+! no IMPLICIT type message for the procedure pointer at assignment.
+!
+module m
+
+ implicit none
+
+ abstract interface
+ function I_f() result( r )
+ real :: r
+ end function I_f
+ end interface
+
+ type, abstract :: a_t
+ private
+ procedure(I_f), nopass, pointer :: m_f => null()
+ contains
+ private
+ procedure, pass(this), public :: f => get_f
+ end type a_t
+
+contains
+
+ function get_f( this ) result( f_ptr ) ! Error message here.
+ class(a_t), intent(in) :: this
+ procedure(I_f), pointer :: f_ptr
+ f_ptr => this%m_f ! Error here :-)
+ end function get_f
+
+end module m
+
+module test
+ implicit none
+
+ type functions
+ contains
+ procedure, nopass :: get_pf => get_it ! Error here
+ end type
+
+ class(functions), allocatable :: f
+
+contains
+
+ function get_it() ! Error message here.
+ procedure (real), pointer :: get_it
+ end function
+
+end module
diff --git a/gcc/testsuite/gfortran.dg/string_length_3.f90 b/gcc/testsuite/gfortran.dg/string_length_3.f90
new file mode 100644
index 00000000000..e745eb9fdfa
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/string_length_3.f90
@@ -0,0 +1,19 @@
+! { dg-do run }
+! { dg-options "-ffrontend-optimize -fdump-tree-original" }
+! PR 78021 - calls to mylen were folded after shortening the
+! argument list.
+
+PROGRAM test_o_char
+ implicit none
+ integer :: n
+ n = mylen('c') + mylen('c ')
+ if (n /= 5) call abort
+CONTAINS
+
+ FUNCTION mylen(c)
+ CHARACTER(len=*),INTENT(in) :: c
+ INTEGER :: mylen
+ mylen=LEN(c)
+ END FUNCTION mylen
+END PROGRAM test_o_char
+! { dg-final { scan-tree-dump-times "__var" 0 "original" } }
diff --git a/gcc/testsuite/gfortran.dg/submodule_18.f08 b/gcc/testsuite/gfortran.dg/submodule_18.f08
new file mode 100644
index 00000000000..14fac75635c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/submodule_18.f08
@@ -0,0 +1,49 @@
+! { dg-do run }
+!
+! Tests the fix for PR78108 in which an error was
+! triggered by the module procedures being added twice
+! to the operator interfaces.
+!
+! Contributed by Damian Rouson <damian@sourceryinstitute.org>
+!
+module foo_interface
+ implicit none
+ type foo
+ integer :: x
+ contains
+ procedure :: add
+ generic :: operator(+) => add
+ procedure :: mult
+ generic :: operator(*) => mult
+ end type
+ interface
+ integer module function add(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ end function
+ integer module function mult(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ end function
+ end interface
+end module
+submodule(foo_interface) foo_implementation
+contains
+ integer module function add(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ add = lhs % x + rhs % x
+ end function
+ integer module function mult(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ mult = lhs % x * rhs % x
+ end function
+end submodule
+
+ use foo_interface
+ type(foo) :: a = foo (42)
+ type(foo) :: b = foo (99)
+ if (a + b .ne. 141) call abort
+ if (a * b .ne. 4158) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/submodule_19.f08 b/gcc/testsuite/gfortran.dg/submodule_19.f08
new file mode 100644
index 00000000000..bc840081436
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/submodule_19.f08
@@ -0,0 +1,59 @@
+! { dg-do compile }
+!
+! Tests the fix for PR78108 in which an error was triggered by the
+! generic operator being resolved more than once in submodules. This
+! test checks that the error is triggered when the specific procedure
+! really is inserted more than once in the interface.
+!
+! Note that adding the extra interface to the module produces two
+! errors; the one below and 'Duplicate EXTERNAL attribute specified at (1)'
+!
+! Contributed by Damian Rouson <damian@sourceryinstitute.org>
+!
+module foo_interface
+ implicit none
+ type foo
+ integer :: x
+ contains
+ procedure :: add
+ generic :: operator(+) => add
+ procedure :: mult
+ generic :: operator(*) => mult
+ end type
+ interface
+ integer module function add(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ end function
+ integer module function mult(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ end function
+ end interface
+end module
+submodule(foo_interface) foo_implementation
+ interface operator (+)
+ integer module function add(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ end function ! { dg-error "is already present in the interface" }
+ end interface
+contains
+ integer module function add(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ add = lhs % x + rhs % x
+ end function
+ integer module function mult(lhs,rhs)
+ implicit none
+ class(foo), intent(in) :: lhs,rhs
+ mult = lhs % x * rhs % x
+ end function
+end submodule
+
+ use foo_interface
+ type(foo) :: a = foo (42)
+ type(foo) :: b = foo (99)
+ if (a + b .ne. 141) call abort
+ if (a * b .ne. 4158) call abort
+end
diff --git a/gcc/testsuite/gfortran.dg/warn_conversion_9.f90 b/gcc/testsuite/gfortran.dg/warn_conversion_9.f90
new file mode 100644
index 00000000000..794eeef99b6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/warn_conversion_9.f90
@@ -0,0 +1,7 @@
+! { dg-do compile }
+! { dg-options "-Wconversion" }
+! PR 78221 - used to give a spurious warning
+complex, parameter :: i = (0.,1.)
+complex :: t
+t = (i)
+end
diff --git a/gcc/testsuite/gfortran.dg/where_5.f90 b/gcc/testsuite/gfortran.dg/where_5.f90
new file mode 100644
index 00000000000..5ada63d6a5d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/where_5.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-Wcharacter-truncation" }
+subroutine where_ice (i,j)
+
+ implicit none
+
+ character(8) :: y(10,10,2)
+
+ integer :: i
+ integer :: j
+
+ character(12) :: txt(5)
+ where (txt(1:3) /= '' ) y(1:3,i,j) = txt(1:3) ! { dg-warning "CHARACTER expression will be truncated" }
+
+end subroutine where_ice
diff --git a/gcc/testsuite/gfortran.dg/where_6.f90 b/gcc/testsuite/gfortran.dg/where_6.f90
new file mode 100644
index 00000000000..c7c43db8423
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/where_6.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-Wcharacter-truncation" }
+subroutine where_ice (i,j)
+
+ implicit none
+
+ character(8) :: y(10,10,2)
+
+ integer :: i
+ integer :: j
+
+ character(12) :: txt(5)
+ if (.true.) where (txt(1:3) /= '' ) y(1:3,i,j) = txt(1:3) ! { dg-warning "CHARACTER expression will be truncated" }
+
+end subroutine where_ice
diff --git a/gcc/testsuite/gnat.dg/lto21.adb b/gcc/testsuite/gnat.dg/lto21.adb
new file mode 100644
index 00000000000..fe6fb2734b5
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21.adb
@@ -0,0 +1,10 @@
+-- { dg-do run }
+-- { dg-options "-O3 -flto" { target lto } }
+
+with Lto21_Pkg1;
+with Lto21_Pkg2; use Lto21_Pkg2;
+
+procedure Lto21 is
+begin
+ Proc;
+end;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg1.ads b/gcc/testsuite/gnat.dg/lto21_pkg1.ads
new file mode 100644
index 00000000000..000a568c6c9
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg1.ads
@@ -0,0 +1,10 @@
+with Ada.Containers.Vectors;
+with Lto21_Pkg2;
+
+package Lto21_Pkg1 is
+
+ pragma Suppress (Tampering_Check);
+
+ package Vect1 is new Ada.Containers.Vectors (Positive, Natural);
+
+end Lto21_Pkg1;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg2.adb b/gcc/testsuite/gnat.dg/lto21_pkg2.adb
new file mode 100644
index 00000000000..5d38102d8f2
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg2.adb
@@ -0,0 +1,30 @@
+with Ada.Containers; use Ada.Containers;
+with Ada.Containers.Hashed_Maps;
+with Ada.Containers.Vectors;
+
+package body Lto21_Pkg2 is
+
+ pragma Suppress (Tampering_Check);
+
+ procedure Proc is
+
+ function Hash (Syd : Natural) return Hash_Type is (Hash_Type'Mod (Syd));
+
+ package Vect2 is new Vectors (Positive, Natural);
+
+ package Maps is
+ new Hashed_Maps (Natural, Vect2.Vector, Hash, "=", Vect2."=");
+
+ procedure Nested (M : Maps.Map) is
+ use Maps;
+ procedure Inner (Position : Cursor) is null;
+ begin
+ Iterate (M, Inner'Access);
+ end;
+
+ M : Maps.Map;
+ begin
+ Nested (M);
+ end;
+
+end Lto21_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/lto21_pkg2.ads b/gcc/testsuite/gnat.dg/lto21_pkg2.ads
new file mode 100644
index 00000000000..935b3b71e8a
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/lto21_pkg2.ads
@@ -0,0 +1,5 @@
+package Lto21_Pkg2 is
+
+ procedure Proc;
+
+end Lto21_Pkg2;
diff --git a/gcc/testsuite/gnat.dg/opt59.adb b/gcc/testsuite/gnat.dg/opt59.adb
new file mode 100644
index 00000000000..29665f4ac64
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt59.adb
@@ -0,0 +1,49 @@
+-- { dg-do run }
+-- { dg-options "-O" }
+
+with Opt59_Pkg; use Opt59_Pkg;
+
+procedure Opt59 is
+
+ type Enum is (Zero, One, Two);
+
+ function Has_True (V : Boolean_Vector) return Boolean is
+ begin
+ for I in V'Range loop
+ if V (I) then
+ return True;
+ end if;
+ end loop;
+ return False;
+ end;
+
+ Data1 : constant Boolean_Vector := Get_BV1;
+ Data2 : constant Boolean_Vector := Get_BV2;
+ Result : Boolean_Vector;
+
+ function F return Enum is
+ Res : Enum := Zero;
+ Set1 : constant Boolean := Has_True (Data1);
+ Set2 : constant Boolean := Has_True (Data2);
+ begin
+ if Set1 then
+ Res := Two;
+ elsif Set2 then
+ Res := One;
+ end if;
+ return Res;
+ end;
+
+ Val : constant Enum := F;
+
+begin
+
+ for I in Result'Range loop
+ Result (I) := Data1 (I) or Data2 (I);
+ end loop;
+
+ if Val /= Zero then
+ Test (Val = Two);
+ end if;
+
+end;
diff --git a/gcc/testsuite/gnat.dg/opt59_pkg.adb b/gcc/testsuite/gnat.dg/opt59_pkg.adb
new file mode 100644
index 00000000000..16a183b47e5
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt59_pkg.adb
@@ -0,0 +1,20 @@
+package body Opt59_Pkg is
+
+ function Get_BV1 return Boolean_Vector is
+ begin
+ return (others => True);
+ end;
+
+ function Get_BV2 return Boolean_Vector is
+ begin
+ return (others => False);
+ end;
+
+ procedure Test (B : Boolean) is
+ begin
+ if not B then
+ raise Program_Error;
+ end if;
+ end;
+
+end Opt59_Pkg;
diff --git a/gcc/testsuite/gnat.dg/opt59_pkg.ads b/gcc/testsuite/gnat.dg/opt59_pkg.ads
new file mode 100644
index 00000000000..f5628be9863
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/opt59_pkg.ads
@@ -0,0 +1,11 @@
+package Opt59_Pkg is
+
+ type Boolean_Vector is array (1 .. 8) of Boolean;
+
+ function Get_BV1 return Boolean_Vector;
+
+ function Get_BV2 return Boolean_Vector;
+
+ procedure Test (B : Boolean);
+
+end Opt59_Pkg;
diff --git a/gcc/testsuite/gnat.dg/renaming11.adb b/gcc/testsuite/gnat.dg/renaming11.adb
new file mode 100644
index 00000000000..c9241c28d82
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming11.adb
@@ -0,0 +1,12 @@
+-- { dg-do compile }
+
+package body Renaming11 is
+
+ function F (Arg: Ptr3) return Integer is
+ V : Ptr1 renames Arg.all.all;
+ I : Integer renames V.A(1);
+ begin
+ return I;
+ end;
+
+end Renaming11;
diff --git a/gcc/testsuite/gnat.dg/renaming11.ads b/gcc/testsuite/gnat.dg/renaming11.ads
new file mode 100644
index 00000000000..d3dda72ede7
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/renaming11.ads
@@ -0,0 +1,19 @@
+package Renaming11 is
+
+ subtype Index_Type is Integer range 1..10;
+
+ type Arr is array (Index_Type range <>) of Integer;
+
+ type Rec (Min : Index_Type; Max : Index_Type) is record
+ A : Arr (Min .. Max);
+ end record;
+
+ type Ptr1 is access Rec;
+
+ type Ptr2 is access Ptr1;
+
+ type Ptr3 is access Ptr2;
+
+ function F (Arg : Ptr3) return Integer;
+
+end Renaming11;
diff --git a/gcc/testsuite/lib/gcov.exp b/gcc/testsuite/lib/gcov.exp
index dfc1301cd33..02bc6b92c14 100644
--- a/gcc/testsuite/lib/gcov.exp
+++ b/gcc/testsuite/lib/gcov.exp
@@ -20,15 +20,27 @@
global GCOV
#
+# clean-gcov-file -- delete a working file the compiler creates for gcov
+#
+# TESTCASE is the name of the test.
+# SUFFIX is file suffix
+
+proc clean-gcov-file { testcase suffix } {
+ set basename [file tail $testcase]
+ set base [file rootname $basename]
+ remote_file host delete $base.$suffix
+}
+
+#
# clean-gcov -- delete the working files the compiler creates for gcov
#
# TESTCASE is the name of the test.
#
proc clean-gcov { testcase } {
- set basename [file tail $testcase]
- set base [file rootname $basename]
- remote_file host delete $base.gcno $base.gcda \
- $basename.gcov $base.h.gcov
+ clean-gcov-file $testcase "gcno"
+ clean-gcov-file $testcase "gcda"
+ clean-gcov-file $testcase "gcov"
+ clean-gcov-file $testcase "h.gcov"
}
#
@@ -305,6 +317,7 @@ proc run-gcov { args } {
set gcov_verify_branches 0
set gcov_verify_lines 1
set gcov_verify_intermediate 0
+ set gcov_remove_gcda 0
set xfailed 0
foreach a $args {
@@ -317,6 +330,8 @@ proc run-gcov { args } {
set gcov_verify_calls 0
set gcov_verify_branches 0
set gcov_verify_lines 0
+ } elseif { $a == "remove-gcda" } {
+ set gcov_remove_gcda 1
} elseif { $gcov_args == "" } {
set gcov_args $a
} else {
@@ -332,6 +347,11 @@ proc run-gcov { args } {
# Extract the test file name from the arguments.
set testcase [lindex $gcov_args end]
+ if { $gcov_remove_gcda } {
+ verbose "Removing $testcase.gcda"
+ clean-gcov-file $testcase "gcda"
+ }
+
verbose "Running $GCOV $testcase" 2
set testcase [remote_download host $testcase]
set result [remote_exec host $GCOV $gcov_args]
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 0a60e08b585..7f0dc5723fb 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -462,9 +462,7 @@ proc check_gc_sections_available { } {
}
# Check if the ld used by gcc supports --gc-sections.
- set gcc_spec [${tool}_target_compile "-dumpspecs" "" "none" ""]
- regsub ".*\n\\*linker:\[ \t\]*\n(\[^ \t\n\]*).*" "$gcc_spec" {\1} linker
- set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=$linker" "" "none" ""] 0]
+ set gcc_ld [lindex [${tool}_target_compile "-print-prog-name=ld" "" "none" ""] 0]
set ld_output [remote_exec host "$gcc_ld" "--help"]
if { [ string first "--gc-sections" $ld_output ] >= 0 } {
set gc_sections_available_saved 1
diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c
index c35806a9332..dea04804a88 100644
--- a/gcc/tree-ssa-pre.c
+++ b/gcc/tree-ssa-pre.c
@@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see
#include "ipa-utils.h"
#include "tree-cfgcleanup.h"
#include "langhooks.h"
+#include "alias.h"
/* TODO:
@@ -4224,26 +4225,36 @@ eliminate_dom_walker::before_dom_children (basic_block b)
&& !is_gimple_reg (gimple_assign_lhs (stmt))
&& (TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME
|| is_gimple_min_invariant (gimple_assign_rhs1 (stmt))))
- {
- tree val;
+ {
+ tree val;
tree rhs = gimple_assign_rhs1 (stmt);
- val = vn_reference_lookup (gimple_assign_lhs (stmt),
- gimple_vuse (stmt), VN_WALK, NULL, false);
- if (TREE_CODE (rhs) == SSA_NAME)
- rhs = VN_INFO (rhs)->valnum;
- if (val
- && operand_equal_p (val, rhs, 0))
- {
- if (dump_file && (dump_flags & TDF_DETAILS))
- {
- fprintf (dump_file, "Deleted redundant store ");
- print_gimple_stmt (dump_file, stmt, 0, 0);
- }
+ vn_reference_t vnresult;
+ val = vn_reference_lookup (lhs, gimple_vuse (stmt), VN_WALKREWRITE,
+ &vnresult, false);
+ if (TREE_CODE (rhs) == SSA_NAME)
+ rhs = VN_INFO (rhs)->valnum;
+ if (val
+ && operand_equal_p (val, rhs, 0))
+ {
+ /* We can only remove the later store if the former aliases
+ at least all accesses the later one does or if the store
+ was to readonly memory storing the same value. */
+ alias_set_type set = get_alias_set (lhs);
+ if (! vnresult
+ || vnresult->set == set
+ || alias_set_subset_of (set, vnresult->set))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Deleted redundant store ");
+ print_gimple_stmt (dump_file, stmt, 0, 0);
+ }
- /* Queue stmt for removal. */
- el_to_remove.safe_push (stmt);
- continue;
- }
+ /* Queue stmt for removal. */
+ el_to_remove.safe_push (stmt);
+ continue;
+ }
+ }
}
/* If this is a control statement value numbering left edges
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index db0161e9cd7..0d78f6db43b 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -3103,6 +3103,23 @@ set_ssa_val_to (tree from, tree to)
}
return false;
}
+ else if (currval != VN_TOP
+ && ! is_gimple_min_invariant (currval)
+ && is_gimple_min_invariant (to))
+ {
+ if (dump_file && (dump_flags & TDF_DETAILS))
+ {
+ fprintf (dump_file, "Forcing VARYING instead of changing "
+ "value number of ");
+ print_generic_expr (dump_file, from, 0);
+ fprintf (dump_file, " from ");
+ print_generic_expr (dump_file, currval, 0);
+ fprintf (dump_file, " (non-constant) to ");
+ print_generic_expr (dump_file, to, 0);
+ fprintf (dump_file, " (constant)\n");
+ }
+ to = from;
+ }
else if (TREE_CODE (to) == SSA_NAME
&& SSA_NAME_OCCURS_IN_ABNORMAL_PHI (to))
to = from;
@@ -3458,7 +3475,7 @@ visit_reference_op_store (tree lhs, tree op, gimple *stmt)
{
bool changed = false;
vn_reference_t vnresult = NULL;
- tree result, assign;
+ tree assign;
bool resultsame = false;
tree vuse = gimple_vuse (stmt);
tree vdef = gimple_vdef (stmt);
@@ -3482,31 +3499,40 @@ visit_reference_op_store (tree lhs, tree op, gimple *stmt)
Otherwise, the vdefs for the store are used when inserting into
the table, since the store generates a new memory state. */
- result = vn_reference_lookup (lhs, vuse, VN_NOWALK, NULL, false);
-
- if (result)
+ vn_reference_lookup (lhs, vuse, VN_NOWALK, &vnresult, false);
+ if (vnresult
+ && vnresult->result)
{
+ tree result = vnresult->result;
if (TREE_CODE (result) == SSA_NAME)
result = SSA_VAL (result);
resultsame = expressions_equal_p (result, op);
+ if (resultsame)
+ {
+ /* If the TBAA state isn't compatible for downstream reads
+ we cannot value-number the VDEFs the same. */
+ alias_set_type set = get_alias_set (lhs);
+ if (vnresult->set != set
+ && ! alias_set_subset_of (set, vnresult->set))
+ resultsame = false;
+ }
}
- if ((!result || !resultsame)
+ if (!resultsame)
+ {
/* Only perform the following when being called from PRE
which embeds tail merging. */
- && default_vn_walk_kind == VN_WALK)
- {
- assign = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, op);
- vn_reference_lookup (assign, vuse, VN_NOWALK, &vnresult, false);
- if (vnresult)
+ if (default_vn_walk_kind == VN_WALK)
{
- VN_INFO (vdef)->use_processed = true;
- return set_ssa_val_to (vdef, vnresult->result_vdef);
+ assign = build2 (MODIFY_EXPR, TREE_TYPE (lhs), lhs, op);
+ vn_reference_lookup (assign, vuse, VN_NOWALK, &vnresult, false);
+ if (vnresult)
+ {
+ VN_INFO (vdef)->use_processed = true;
+ return set_ssa_val_to (vdef, vnresult->result_vdef);
+ }
}
- }
- if (!result || !resultsame)
- {
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "No store match\n");
@@ -3519,9 +3545,7 @@ visit_reference_op_store (tree lhs, tree op, gimple *stmt)
/* Have to set value numbers before insert, since insert is
going to valueize the references in-place. */
if (vdef)
- {
- changed |= set_ssa_val_to (vdef, vdef);
- }
+ changed |= set_ssa_val_to (vdef, vdef);
/* Do not insert structure copies into the tables. */
if (is_gimple_min_invariant (op)
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c
index 477e604a415..07736e33923 100644
--- a/gcc/tree-ssa-structalias.c
+++ b/gcc/tree-ssa-structalias.c
@@ -3017,7 +3017,7 @@ process_constraint (constraint_t t)
process_constraint (new_constraint (tmplhs, rhs));
process_constraint (new_constraint (lhs, tmplhs));
}
- else if (rhs.type == ADDRESSOF && lhs.type == DEREF)
+ else if ((rhs.type != SCALAR || rhs.offset != 0) && lhs.type == DEREF)
{
/* Split into tmp = &rhs, *lhs = tmp */
struct constraint_expr tmplhs;
@@ -3740,7 +3740,7 @@ make_transitive_closure_constraints (varinfo_t vi)
{
struct constraint_expr lhs, rhs;
- /* VAR = *VAR; */
+ /* VAR = *(VAR + UNKNOWN); */
lhs.type = SCALAR;
lhs.var = vi->id;
lhs.offset = 0;
@@ -3750,6 +3750,23 @@ make_transitive_closure_constraints (varinfo_t vi)
process_constraint (new_constraint (lhs, rhs));
}
+/* Add constraints to that the solution of VI has all subvariables added. */
+
+static void
+make_any_offset_constraints (varinfo_t vi)
+{
+ struct constraint_expr lhs, rhs;
+
+ /* VAR = VAR + UNKNOWN; */
+ lhs.type = SCALAR;
+ lhs.var = vi->id;
+ lhs.offset = 0;
+ rhs.type = SCALAR;
+ rhs.var = vi->id;
+ rhs.offset = UNKNOWN_OFFSET;
+ process_constraint (new_constraint (lhs, rhs));
+}
+
/* Temporary storage for fake var decls. */
struct obstack fake_var_decl_obstack;
@@ -3895,15 +3912,12 @@ handle_rhs_call (gcall *stmt, vec<ce_s> *results)
&& (flags & EAF_NOESCAPE))
{
varinfo_t uses = get_call_use_vi (stmt);
+ varinfo_t tem = new_var_info (NULL_TREE, "callarg", true);
+ make_constraint_to (tem->id, arg);
+ make_any_offset_constraints (tem);
if (!(flags & EAF_DIRECT))
- {
- varinfo_t tem = new_var_info (NULL_TREE, "callarg", true);
- make_constraint_to (tem->id, arg);
- make_transitive_closure_constraints (tem);
- make_copy_constraint (uses, tem->id);
- }
- else
- make_constraint_to (uses->id, arg);
+ make_transitive_closure_constraints (tem);
+ make_copy_constraint (uses, tem->id);
returns_uses = true;
}
else if (flags & EAF_NOESCAPE)
@@ -3913,6 +3927,7 @@ handle_rhs_call (gcall *stmt, vec<ce_s> *results)
varinfo_t clobbers = get_call_clobber_vi (stmt);
varinfo_t tem = new_var_info (NULL_TREE, "callarg", true);
make_constraint_to (tem->id, arg);
+ make_any_offset_constraints (tem);
if (!(flags & EAF_DIRECT))
make_transitive_closure_constraints (tem);
make_copy_constraint (uses, tem->id);
@@ -3938,7 +3953,7 @@ handle_rhs_call (gcall *stmt, vec<ce_s> *results)
if (returns_uses)
{
rhsc.var = get_call_use_vi (stmt)->id;
- rhsc.offset = 0;
+ rhsc.offset = UNKNOWN_OFFSET;
rhsc.type = SCALAR;
results->safe_push (rhsc);
}
@@ -4041,30 +4056,58 @@ handle_const_call (gcall *stmt, vec<ce_s> *results)
{
struct constraint_expr rhsc;
unsigned int k;
+ bool need_uses = false;
/* Treat nested const functions the same as pure functions as far
as the static chain is concerned. */
if (gimple_call_chain (stmt))
{
varinfo_t uses = get_call_use_vi (stmt);
- make_transitive_closure_constraints (uses);
make_constraint_to (uses->id, gimple_call_chain (stmt));
+ need_uses = true;
+ }
+
+ /* And if we applied NRV the address of the return slot escapes as well. */
+ if (gimple_call_return_slot_opt_p (stmt)
+ && gimple_call_lhs (stmt) != NULL_TREE
+ && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
+ {
+ varinfo_t uses = get_call_use_vi (stmt);
+ auto_vec<ce_s> tmpc;
+ get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc);
+ make_constraints_to (uses->id, tmpc);
+ need_uses = true;
+ }
+
+ if (need_uses)
+ {
+ varinfo_t uses = get_call_use_vi (stmt);
+ make_any_offset_constraints (uses);
+ make_transitive_closure_constraints (uses);
rhsc.var = uses->id;
rhsc.offset = 0;
rhsc.type = SCALAR;
results->safe_push (rhsc);
}
- /* May return arguments. */
+ /* May return offsetted arguments. */
+ varinfo_t tem = NULL;
+ if (gimple_call_num_args (stmt) != 0)
+ tem = new_var_info (NULL_TREE, "callarg", true);
for (k = 0; k < gimple_call_num_args (stmt); ++k)
{
tree arg = gimple_call_arg (stmt, k);
auto_vec<ce_s> argc;
- unsigned i;
- struct constraint_expr *argp;
get_constraint_for_rhs (arg, &argc);
- FOR_EACH_VEC_ELT (argc, i, argp)
- results->safe_push (*argp);
+ make_constraints_to (tem->id, argc);
+ }
+ if (tem)
+ {
+ ce_s ce;
+ ce.type = SCALAR;
+ ce.var = tem->id;
+ ce.offset = UNKNOWN_OFFSET;
+ results->safe_push (ce);
}
/* May return addresses of globals. */
@@ -4091,6 +4134,7 @@ handle_pure_call (gcall *stmt, vec<ce_s> *results)
if (!uses)
{
uses = get_call_use_vi (stmt);
+ make_any_offset_constraints (uses);
make_transitive_closure_constraints (uses);
}
make_constraint_to (uses->id, arg);
@@ -4102,11 +4146,28 @@ handle_pure_call (gcall *stmt, vec<ce_s> *results)
if (!uses)
{
uses = get_call_use_vi (stmt);
+ make_any_offset_constraints (uses);
make_transitive_closure_constraints (uses);
}
make_constraint_to (uses->id, gimple_call_chain (stmt));
}
+ /* And if we applied NRV the address of the return slot. */
+ if (gimple_call_return_slot_opt_p (stmt)
+ && gimple_call_lhs (stmt) != NULL_TREE
+ && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
+ {
+ if (!uses)
+ {
+ uses = get_call_use_vi (stmt);
+ make_any_offset_constraints (uses);
+ make_transitive_closure_constraints (uses);
+ }
+ auto_vec<ce_s> tmpc;
+ get_constraint_for_address_of (gimple_call_lhs (stmt), &tmpc);
+ make_constraints_to (uses->id, tmpc);
+ }
+
/* Pure functions may return call-used and nonlocal memory. */
if (uses)
{
@@ -5484,7 +5545,7 @@ push_fields_onto_fieldstack (tree type, vec<fieldoff_s> *fieldstack,
&& offset + foff != 0)
{
fieldoff_s e
- = {0, offset + foff, false, false, false, false, NULL_TREE};
+ = {0, offset + foff, false, false, true, false, NULL_TREE};
pair = fieldstack->safe_push (e);
}
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index 3df41fd08fc..a75044ea9c5 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -204,6 +204,7 @@ along with GCC; see the file COPYING3. If not see
#include "params.h"
#include "tree-ssa-sccvn.h"
#include "cfgloop.h"
+#include "tree-eh.h"
/* Describes a group of bbs with the same successors. The successor bbs are
cached in succs, and the successor edge flags are cached in succ_flags.
@@ -1222,6 +1223,10 @@ merge_stmts_p (gimple *stmt1, gimple *stmt2)
if (is_tm_ending (stmt1))
return false;
+ /* Verify EH landing pads. */
+ if (lookup_stmt_eh_lp_fn (cfun, stmt1) != lookup_stmt_eh_lp_fn (cfun, stmt2))
+ return false;
+
if (is_gimple_call (stmt1)
&& gimple_call_internal_p (stmt1))
switch (gimple_call_internal_fn (stmt1))
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 44b2e138326..4839efb0f40 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -162,11 +162,10 @@ write_vector_array (gimple *stmt, gimple_stmt_iterator *gsi, tree vect,
(and its group). */
static tree
-create_array_ref (tree type, tree ptr, struct data_reference *first_dr)
+create_array_ref (tree type, tree ptr, tree alias_ptr_type)
{
- tree mem_ref, alias_ptr_type;
+ tree mem_ref;
- alias_ptr_type = reference_alias_ptr_type (DR_REF (first_dr));
mem_ref = build2 (MEM_REF, type, ptr, build_int_cst (alias_ptr_type, 0));
/* Arrays have the same alignment as their type. */
set_ptr_info_alignment (get_ptr_info (ptr), TYPE_ALIGN_UNIT (type), 0);
@@ -5179,6 +5178,35 @@ perm_mask_for_reverse (tree vectype)
return vect_gen_perm_mask_checked (vectype, sel);
}
+/* Function get_group_alias_ptr_type.
+
+ Return the alias type for the group starting at FIRST_STMT. */
+
+static tree
+get_group_alias_ptr_type (gimple *first_stmt)
+{
+ struct data_reference *first_dr, *next_dr;
+ gimple *next_stmt;
+
+ first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt));
+ next_stmt = GROUP_NEXT_ELEMENT (vinfo_for_stmt (first_stmt));
+ while (next_stmt)
+ {
+ next_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (next_stmt));
+ if (get_alias_set (DR_REF (first_dr))
+ != get_alias_set (DR_REF (next_dr)))
+ {
+ if (dump_enabled_p ())
+ dump_printf_loc (MSG_NOTE, vect_location,
+ "conflicting alias set types.\n");
+ return ptr_type_node;
+ }
+ next_stmt = GROUP_NEXT_ELEMENT (vinfo_for_stmt (next_stmt));
+ }
+ return reference_alias_ptr_type (DR_REF (first_dr));
+}
+
+
/* Function vectorizable_store.
Check if STMT defines a non scalar data-ref (array/pointer/structure) that
@@ -5233,6 +5261,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
enum vect_def_type scatter_idx_dt = vect_unknown_def_type;
enum vect_def_type scatter_src_dt = vect_unknown_def_type;
gimple *new_stmt;
+ tree ref_type;
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
return false;
@@ -5596,12 +5625,15 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
/* VEC_NUM is the number of vect stmts to be created for this
group. */
vec_num = group_size;
+
+ ref_type = get_group_alias_ptr_type (first_stmt);
}
else
{
first_stmt = stmt;
first_dr = dr;
group_size = vec_num = 1;
+ ref_type = reference_alias_ptr_type (DR_REF (first_dr));
}
if (dump_enabled_p ())
@@ -5628,7 +5660,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
(unshare_expr (DR_BASE_ADDRESS (first_dr)),
size_binop (PLUS_EXPR,
convert_to_ptrofftype (unshare_expr (DR_OFFSET (first_dr))),
- convert_to_ptrofftype (DR_INIT(first_dr))));
+ convert_to_ptrofftype (DR_INIT (first_dr))));
stride_step = fold_convert (sizetype, unshare_expr (DR_STEP (first_dr)));
/* For a store with loop-invariant (but other than power-of-2)
@@ -5681,7 +5713,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
prev_stmt_info = NULL;
- alias_off = build_int_cst (reference_alias_ptr_type (DR_REF (first_dr)), 0);
+ alias_off = build_int_cst (ref_type, 0);
next_stmt = first_stmt;
for (g = 0; g < group_size; g++)
{
@@ -5883,11 +5915,10 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
&& integer_zerop (DR_OFFSET (first_dr))
&& integer_zerop (DR_INIT (first_dr))
&& alias_sets_conflict_p (get_alias_set (aggr_type),
- get_alias_set (DR_REF (first_dr))))
+ get_alias_set (TREE_TYPE (ref_type))))
{
dataref_ptr = unshare_expr (DR_BASE_ADDRESS (first_dr));
- dataref_offset = build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0);
+ dataref_offset = build_int_cst (ref_type, 0);
inv_p = false;
}
else
@@ -5938,7 +5969,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
/* Emit:
MEM_REF[...all elements...] = STORE_LANES (VEC_ARRAY). */
- data_ref = create_array_ref (aggr_type, dataref_ptr, first_dr);
+ data_ref = create_array_ref (aggr_type, dataref_ptr, ref_type);
new_stmt = gimple_build_call_internal (IFN_STORE_LANES, 1, vec_array);
gimple_call_set_lhs (new_stmt, data_ref);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
@@ -5976,8 +6007,7 @@ vectorizable_store (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
dataref_ptr,
dataref_offset
? dataref_offset
- : build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0));
+ : build_int_cst (ref_type, 0));
align = TYPE_ALIGN_UNIT (vectype);
if (aligned_access_p (first_dr))
misalign = 0;
@@ -6200,7 +6230,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
tree dataref_offset = NULL_TREE;
gimple *ptr_incr = NULL;
int ncopies;
- int i, j, group_size = -1, group_gap_adj;
+ int i, j, group_size, group_gap_adj;
tree msq = NULL_TREE, lsq;
tree offset = NULL_TREE;
tree byte_offset = NULL_TREE;
@@ -6227,6 +6257,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
int gather_scale = 1;
enum vect_def_type gather_dt = vect_unknown_def_type;
vec_info *vinfo = stmt_info->vinfo;
+ tree ref_type;
if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
return false;
@@ -6694,10 +6725,19 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
gcc_assert (!nested_in_vect_loop);
if (slp && grouped_load)
- first_dr = STMT_VINFO_DATA_REF
- (vinfo_for_stmt (GROUP_FIRST_ELEMENT (stmt_info)));
+ {
+ first_stmt = GROUP_FIRST_ELEMENT (stmt_info);
+ first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt));
+ group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
+ ref_type = get_group_alias_ptr_type (first_stmt);
+ }
else
- first_dr = dr;
+ {
+ first_stmt = stmt;
+ first_dr = dr;
+ group_size = 1;
+ ref_type = reference_alias_ptr_type (DR_REF (first_dr));
+ }
stride_base
= fold_build_pointer_plus
@@ -6741,7 +6781,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
prev_stmt_info = NULL;
running_off = offvar;
- alias_off = build_int_cst (reference_alias_ptr_type (DR_REF (first_dr)), 0);
+ alias_off = build_int_cst (ref_type, 0);
int nloads = nunits;
tree ltype = TREE_TYPE (vectype);
auto_vec<tree> dr_chain;
@@ -6833,6 +6873,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
if (grouped_load)
{
first_stmt = GROUP_FIRST_ELEMENT (stmt_info);
+ group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
/* For SLP vectorization we directly vectorize a subchain
without permutation. */
if (slp && ! SLP_TREE_LOAD_PERMUTATION (slp_node).exists ())
@@ -6858,7 +6899,6 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
return true;
}
first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt));
- group_size = GROUP_SIZE (vinfo_for_stmt (first_stmt));
group_gap_adj = 0;
/* VEC_NUM is the number of vect stmts to be created for this group. */
@@ -6876,6 +6916,8 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
}
else
vec_num = group_size;
+
+ ref_type = get_group_alias_ptr_type (first_stmt);
}
else
{
@@ -6883,6 +6925,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
first_dr = dr;
group_size = vec_num = 1;
group_gap_adj = 0;
+ ref_type = reference_alias_ptr_type (DR_REF (first_dr));
}
alignment_support_scheme = vect_supportable_dr_alignment (first_dr, false);
@@ -7043,13 +7086,12 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
&& integer_zerop (DR_OFFSET (first_dr))
&& integer_zerop (DR_INIT (first_dr))
&& alias_sets_conflict_p (get_alias_set (aggr_type),
- get_alias_set (DR_REF (first_dr)))
+ get_alias_set (TREE_TYPE (ref_type)))
&& (alignment_support_scheme == dr_aligned
|| alignment_support_scheme == dr_unaligned_supported))
{
dataref_ptr = unshare_expr (DR_BASE_ADDRESS (first_dr));
- dataref_offset = build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0);
+ dataref_offset = build_int_cst (ref_type, 0);
inv_p = false;
}
else if (first_stmt_for_drptr
@@ -7095,7 +7137,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
/* Emit:
VEC_ARRAY = LOAD_LANES (MEM_REF[...all elements...]). */
- data_ref = create_array_ref (aggr_type, dataref_ptr, first_dr);
+ data_ref = create_array_ref (aggr_type, dataref_ptr, ref_type);
new_stmt = gimple_build_call_internal (IFN_LOAD_LANES, 1, data_ref);
gimple_call_set_lhs (new_stmt, vec_array);
vect_finish_stmt_generation (stmt, new_stmt, gsi);
@@ -7131,8 +7173,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
= fold_build2 (MEM_REF, vectype, dataref_ptr,
dataref_offset
? dataref_offset
- : build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0));
+ : build_int_cst (ref_type, 0));
align = TYPE_ALIGN_UNIT (vectype);
if (alignment_support_scheme == dr_aligned)
{
@@ -7188,8 +7229,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
vect_finish_stmt_generation (stmt, new_stmt, gsi);
data_ref
= build2 (MEM_REF, vectype, ptr,
- build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0));
+ build_int_cst (ref_type, 0));
vec_dest = vect_create_destination_var (scalar_dest,
vectype);
new_stmt = gimple_build_assign (vec_dest, data_ref);
@@ -7214,8 +7254,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
vect_finish_stmt_generation (stmt, new_stmt, gsi);
data_ref
= build2 (MEM_REF, vectype, ptr,
- build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0));
+ build_int_cst (ref_type, 0));
break;
}
case dr_explicit_realign_optimized:
@@ -7231,8 +7270,7 @@ vectorizable_load (gimple *stmt, gimple_stmt_iterator *gsi, gimple **vec_stmt,
vect_finish_stmt_generation (stmt, new_stmt, gsi);
data_ref
= build2 (MEM_REF, vectype, new_temp,
- build_int_cst (reference_alias_ptr_type
- (DR_REF (first_dr)), 0));
+ build_int_cst (ref_type, 0));
break;
default:
gcc_unreachable ();
diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c
index 79bf09a9df8..4033c9c7e0e 100644
--- a/gcc/tree-vrp.c
+++ b/gcc/tree-vrp.c
@@ -717,6 +717,23 @@ get_value_range (const_tree var)
return vr;
}
+/* Set value-ranges of all SSA names defined by STMT to varying. */
+
+static void
+set_defs_to_varying (gimple *stmt)
+{
+ ssa_op_iter i;
+ tree def;
+ FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
+ {
+ value_range *vr = get_value_range (def);
+ /* Avoid writing to vr_const_varying get_value_range may return. */
+ if (vr->type != VR_VARYING)
+ set_value_range_to_varying (vr);
+ }
+}
+
+
/* Return true, if VAL1 and VAL2 are equal values for VRP purposes. */
static inline bool
@@ -7007,10 +7024,7 @@ vrp_initialize (void)
prop_set_simulate_again (stmt, true);
else if (!stmt_interesting_for_vrp (stmt))
{
- ssa_op_iter i;
- tree def;
- FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
- set_value_range_to_varying (get_value_range (def));
+ set_defs_to_varying (stmt);
prop_set_simulate_again (stmt, false);
}
else
@@ -7957,9 +7971,6 @@ vrp_visit_switch_stmt (gswitch *stmt, edge *taken_edge_p)
static enum ssa_prop_result
vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p)
{
- tree def;
- ssa_op_iter iter;
-
if (dump_file && (dump_flags & TDF_DETAILS))
{
fprintf (dump_file, "\nVisiting statement:\n");
@@ -7977,8 +7988,7 @@ vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p)
/* All other statements produce nothing of interest for VRP, so mark
their outputs varying and prevent further simulation. */
- FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF)
- set_value_range_to_varying (get_value_range (def));
+ set_defs_to_varying (stmt);
return SSA_PROP_VARYING;
}
@@ -8582,7 +8592,10 @@ vrp_intersect_ranges_1 (value_range *vr0, value_range *vr1)
if (vr0->equiv && vr1->equiv && vr0->equiv != vr1->equiv)
bitmap_ior_into (vr0->equiv, vr1->equiv);
else if (vr1->equiv && !vr0->equiv)
- bitmap_copy (vr0->equiv, vr1->equiv);
+ {
+ vr0->equiv = BITMAP_ALLOC (NULL);
+ bitmap_copy (vr0->equiv, vr1->equiv);
+ }
}
static void
diff --git a/gcc/tree.c b/gcc/tree.c
index 1b472cc0560..f484372367a 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -8659,10 +8659,15 @@ build_offset_type (tree basetype, tree type)
return t;
}
-/* Create a complex type whose components are COMPONENT_TYPE. */
+/* Create a complex type whose components are COMPONENT_TYPE.
+
+ If NAMED is true, the type is given a TYPE_NAME. We do not always
+ do so because this creates a DECL node and thus make the DECL_UIDs
+ dependent on the type canonicalization hashtable, which is GC-ed,
+ so the DECL_UIDs would not be stable wrt garbage collection. */
tree
-build_complex_type (tree component_type)
+build_complex_type (tree component_type, bool named)
{
tree t;
inchash::hash hstate;
@@ -8689,11 +8694,11 @@ build_complex_type (tree component_type)
SET_TYPE_STRUCTURAL_EQUALITY (t);
else if (TYPE_CANONICAL (component_type) != component_type)
TYPE_CANONICAL (t)
- = build_complex_type (TYPE_CANONICAL (component_type));
+ = build_complex_type (TYPE_CANONICAL (component_type), named);
}
/* We need to create a name, since complex is a fundamental type. */
- if (! TYPE_NAME (t))
+ if (!TYPE_NAME (t) && named)
{
const char *name;
if (component_type == char_type_node)
@@ -8967,8 +8972,8 @@ get_narrower (tree op, int *unsignedp_ptr)
return win;
}
-/* Returns true if integer constant C has a value that is permissible
- for type TYPE (an INTEGER_TYPE). */
+/* Return true if integer constant C has a value that is permissible
+ for TYPE, an integral type. */
bool
int_fits_type_p (const_tree c, const_tree type)
@@ -8977,6 +8982,11 @@ int_fits_type_p (const_tree c, const_tree type)
bool ok_for_low_bound, ok_for_high_bound;
signop sgn_c = TYPE_SIGN (TREE_TYPE (c));
+ /* Short-circuit boolean types since various transformations assume that
+ they can only take values 0 and 1. */
+ if (TREE_CODE (type) == BOOLEAN_TYPE)
+ return integer_zerop (c) || integer_onep (c);
+
retry:
type_low_bound = TYPE_MIN_VALUE (type);
type_high_bound = TYPE_MAX_VALUE (type);
@@ -10242,10 +10252,11 @@ build_common_tree_nodes (bool signed_char)
SET_TYPE_MODE (dfloat128_type_node, TDmode);
dfloat128_ptr_type_node = build_pointer_type (dfloat128_type_node);
- complex_integer_type_node = build_complex_type (integer_type_node);
- complex_float_type_node = build_complex_type (float_type_node);
- complex_double_type_node = build_complex_type (double_type_node);
- complex_long_double_type_node = build_complex_type (long_double_type_node);
+ complex_integer_type_node = build_complex_type (integer_type_node, true);
+ complex_float_type_node = build_complex_type (float_type_node, true);
+ complex_double_type_node = build_complex_type (double_type_node, true);
+ complex_long_double_type_node = build_complex_type (long_double_type_node,
+ true);
/* Make fixed-point nodes based on sat/non-sat and signed/unsigned. */
#define MAKE_FIXED_TYPE_NODE(KIND,SIZE) \
diff --git a/gcc/tree.h b/gcc/tree.h
index c39b58e1a6d..cc308278a45 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4006,7 +4006,7 @@ extern tree build_varargs_function_type_array (tree, int, tree *);
extern tree build_method_type_directly (tree, tree, tree);
extern tree build_method_type (tree, tree);
extern tree build_offset_type (tree, tree);
-extern tree build_complex_type (tree);
+extern tree build_complex_type (tree, bool named = false);
extern tree array_type_nelts (const_tree);
extern tree value_member (tree, tree);
@@ -5289,6 +5289,11 @@ template <typename T>
bool
wi::fits_to_tree_p (const T &x, const_tree type)
{
+ /* Short-circuit boolean types since various transformations assume that
+ they can only take values 0 and 1. */
+ if (TREE_CODE (type) == BOOLEAN_TYPE)
+ return eq_p (x, 0) || eq_p (x, 1);
+
if (TYPE_SIGN (type) == UNSIGNED)
return eq_p (x, zext (x, TYPE_PRECISION (type)));
else
diff --git a/libcpp/po/ChangeLog b/libcpp/po/ChangeLog
index 254a268a6bf..529f8538dfa 100644
--- a/libcpp/po/ChangeLog
+++ b/libcpp/po/ChangeLog
@@ -1,3 +1,7 @@
+2016-10-29 Joseph Myers <joseph@codesourcery.com>
+
+ * eo.po: Update.
+
2016-08-22 Release Manager
* GCC 6.2.0 released.
diff --git a/libcpp/po/eo.po b/libcpp/po/eo.po
index c9d947030ad..3b063910a65 100644
--- a/libcpp/po/eo.po
+++ b/libcpp/po/eo.po
@@ -5,17 +5,18 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: cpplib 6.1-b20160131\n"
+"Project-Id-Version: cpplib 6.1.0\n"
"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
"POT-Creation-Date: 2016-04-21 15:24+0000\n"
-"PO-Revision-Date: 2016-02-12 13:14-0300\n"
+"PO-Revision-Date: 2016-10-28 21:47-0300\n"
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
"Language: eo\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.10\n"
+"X-Generator: Poedit 1.5.4\n"
#: charset.c:674
#, c-format
@@ -272,7 +273,7 @@ msgstr "\"%s\" post # ne estas pozitiva entjero"
#: directives.c:1061
#, c-format
msgid "file \"%s\" linemarker ignored due to incorrect nesting"
-msgstr ""
+msgstr "linimarkilo de dosiero \"%s\" estis preteratentata pro malkorekta nesto"
#: directives.c:1120 directives.c:1122 directives.c:1124 directives.c:1710
#, c-format
@@ -433,10 +434,8 @@ msgid "invalid prefix \"0b\" for floating constant"
msgstr "malvalida prefikso \"0b\" por glitkoma konstanto"
#: expr.c:555
-#, fuzzy
-#| msgid "use of C++11 hexadecimal floating constant"
msgid "use of C++1z hexadecimal floating constant"
-msgstr "uzo de deksesuma glitkoma konstanto de C++11"
+msgstr "uzo de deksesuma glitkoma konstanto de C++1z"
#: expr.c:558
msgid "use of C99 hexadecimal floating constant"
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index d8bfed02ae8..9c30e9757de 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,11 @@
+2016-11-07 Florian Weimer <fweimer@redhat.com>
+
+ Backport from mainline
+ 2016-10-24 Florian Weimer <fweimer@redhat.com>
+
+ PR libgcc/78064
+ * unwind-c.c: Include auto-target.h.
+
2016-09-28 Joseph Myers <joseph@codesourcery.com>
Backport from mainline
diff --git a/libgcc/unwind-c.c b/libgcc/unwind-c.c
index 5835aadf232..b05f376118c 100644
--- a/libgcc/unwind-c.c
+++ b/libgcc/unwind-c.c
@@ -26,6 +26,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#include "tconfig.h"
#include "tsystem.h"
+#include "auto-target.h"
#include "unwind.h"
#define NO_SIZE_OF_ENCODED_VALUE
#include "unwind-pe.h"
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 9a087114ac4..1efa9c229d0 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,10 @@
+2016-10-31 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ Backport from trunk
+ PR libgfortran/78123
+ * io/transfer.c (formatted_transfer_scalar_read): Clear seen_eor
+ only if we have tabbed to left of current position.
+
2016-09-29 Jerry DeLisle <jvdelisle@gcc.gnu.org>
Backport from trunk
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index e458114f217..42d8b030cab 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1434,7 +1434,8 @@ formatted_transfer_scalar_read (st_parameter_dt *dtp, bt type, void *p, int kind
dtp->u.p.current_unit->bytes_left -= dtp->u.p.sf_seen_eor;
dtp->u.p.skips -= dtp->u.p.sf_seen_eor;
bytes_used = pos;
- dtp->u.p.sf_seen_eor = 0;
+ if (dtp->u.p.pending_spaces == 0)
+ dtp->u.p.sf_seen_eor = 0;
}
if (dtp->u.p.skips < 0)
{
diff --git a/libgo/go/time/time_test.go b/libgo/go/time/time_test.go
index a925e98a838..db73ec79601 100644
--- a/libgo/go/time/time_test.go
+++ b/libgo/go/time/time_test.go
@@ -939,8 +939,11 @@ func TestLoadFixed(t *testing.T) {
// but Go and most other systems use "east is positive".
// So GMT+1 corresponds to -3600 in the Go zone, not +3600.
name, offset := Now().In(loc).Zone()
- if name != "GMT+1" || offset != -1*60*60 {
- t.Errorf("Now().In(loc).Zone() = %q, %d, want %q, %d", name, offset, "GMT+1", -1*60*60)
+ // The zone abbreviation is "-01" since tzdata-2016g, and "GMT+1"
+ // on earlier versions; we accept both. (Issue #17276).
+ if !(name == "GMT+1" || name == "-01") || offset != -1*60*60 {
+ t.Errorf("Now().In(loc).Zone() = %q, %d, want %q or %q, %d",
+ name, offset, "GMT+1", "-01", -1*60*60)
}
}
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4cd5404c7b9..3383e7e40ca 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,165 @@
+2016-10-24 Ville Voutilainen <ville.voutilainen@gmail.com>
+
+ Backport from mainline:
+
+ 2016-10-24 Ville Voutilainen <ville.voutilainen@gmail.com>
+ Cross-port the latest resolution of LWG2756 and some
+ bug-fixes to experimental::optional.
+ PR libstdc++/77288
+ PR libstdc++/77727
+ * include/experimental/optional (_Optional_base):
+ Remove constructors that take a _Tp.
+ (__is_optional_impl, __is_optional): Remove.
+ (__converts_from_optional): New.
+ (optional(_Up&&)): Fix constraints, call base with in_place.
+ (optional(const optional<_Up>&)): Fix constraints, use emplace.
+ (optional(optional<_Up>&&)): Likewise.
+ (operator=(_Up&&)): Fix constraints.
+ (operator=(const optional<_Up>&)): Likewise.
+ (operator=(optional<_Up>&&)): Likewise.
+ (emplace(_Args&&...)): Constrain.
+ (emplace(initializer_list<_Up>, _Args&&...)): Likewise.
+ * testsuite/experimental/optional/77288.cc: New.
+ * testsuite/experimental/optional/assignment/5.cc: Adjust.
+ * testsuite/experimental/optional/cons/77727.cc: New.
+ * testsuite/experimental/optional/cons/value.cc: Adjust.
+
+2016-10-20 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/78052
+ * include/bits/allocator.h (allocator<void>::construct)
+ (allocator<void>::destroy): Define.
+ * testsuite/20_util/allocator/void.cc: New test.
+
+2016-10-19 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/20_util/unique_ptr/cons/cv_qual.cc: Move negative tests
+ to new file.
+ * testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc: New file. Fix
+ test for incompatible deleters to not also use incompatible types.
+ Add tests for incompatible array types.
+
+ PR libstdc++/77990
+ * include/bits/unique_ptr.h (unique_ptr::unique_ptr(pointer)): Set
+ pointer member after value-initialization of tuple.
+ * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Adjust dg-errors.
+ * testsuite/20_util/unique_ptr/cons/77990.cc: New test.
+ * testsuite/20_util/unique_ptr/cons/cv_qual.cc: Adjust dg-error.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/77987
+ * include/bits/unique_ptr.h (unique_ptr<T[], D>::reset<U>(U)): Copy
+ value to pointer of the correct type to swap, to support conversions
+ allowed by LWG 2118 / N4089.
+ * testsuite/20_util/unique_ptr/assign/assign_neg.cc: Move test for
+ incompatible deleters from ...
+ * testsuite/20_util/unique_ptr/assign/cv_qual.cc: ... here.
+ * testsuite/20_util/unique_ptr/modifiers/cv_qual.cc: Move tests for
+ incompatible pointers to ...
+ * testsuite/20_util/unique_ptr/modifiers/reset_neg.cc: ... here. Move
+ destructor definition to base class. Test for invalid derived-to-base
+ conversion.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/20_util/function/77322.cc: Remove effective-target from
+ dg-do directive.
+ * testsuite/20_util/function/cons/72820.cc: Likewise.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-10 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/appendix_contributing.xml (contrib.organization):
+ Replace <literallayout> with nested <variablelist> elements. Update
+ some more outdated text.
+ * doc/html/*: Regenerate.
+
+ Backport from mainline:
+ 2016-10-10 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/appendix_contributing.xml (contrib.organization):
+ Describe other subdirectories and add markup. Remove outdated
+ reference to check-script target.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-10 Jonathan Wakely <jwakely@redhat.com>
+
+ * doc/xml/manual/status_cxx2011.xml: Correct C++11 status.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-13 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/26_numerics/random/default_random_engine.cc: Use VERIFY
+ instead of assert.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-11 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/experimental/string_view (basic_string_view::_S_compare):
+ Remove redundant const from return type.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-13 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/experimental/functional (boyer_moore_searcher)
+ (__boyer_moore_map_base, __boyer_moore_array_base): Qualify containers
+ with _GLIBCXX_STD_C.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-10-13 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/experimental/propagate_const (element_type): Qualify
+ declval.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-08-22 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/77322
+ * doc/xml/manual/intro.xml: Document DR 2062 change.
+ * include/std/functional (function::swap): Add noexcept.
+ (swap(function<Res(Args...)&, function<Res(Args...)&)): Likewise.
+ * testsuite/20_util/function/77322.cc: New test.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-08-17 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/20_util/reference_wrapper/invoke-2.cc: Fix invalid dg-do
+ directive and use effective target instead of dg-options.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ Backport from mainline:
+ 2016-08-06 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/72820
+ * include/std/functional (_Function_base::_Base_manager::_M_clone):
+ Qualify new operator.
+ * testsuite/20_util/function/cons/72820.cc: New test.
+
+2016-10-17 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/77994
+ * include/experimental/algorithm (experimental::sample): Convert size
+ argument to iterator difference type. Fix invalid use of input
+ iterator. Defend against overloaded comma operator.
+
2016-10-05 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/70101
diff --git a/libstdc++-v3/doc/html/manual/bugs.html b/libstdc++-v3/doc/html/manual/bugs.html
index 65ffc01a45b..30769833785 100644
--- a/libstdc++-v3/doc/html/manual/bugs.html
+++ b/libstdc++-v3/doc/html/manual/bugs.html
@@ -366,6 +366,9 @@
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2059" target="_top">2059</a>:
<span class="emphasis"><em>C++0x ambiguity problem with map::erase</em></span>
</span></dt><dd><p>Add additional overloads.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2062" target="_top">2062</a>:
+ <span class="emphasis"><em>2062. Effect contradictions w/o no-throw guarantee of <code class="code">std::function</code> swaps</em></span>
+ </span></dt><dd><p>Add <code class="code">noexcept</code> to swap functions.
</p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#2063" target="_top">2063</a>:
<span class="emphasis"><em>Contradictory requirements for string move assignment</em></span>
</span></dt><dd><p>Respect propagation trait for move assignment.
diff --git a/libstdc++-v3/doc/html/manual/source_organization.html b/libstdc++-v3/doc/html/manual/source_organization.html
index 1ff2397cf5a..a956b507b9b 100644
--- a/libstdc++-v3/doc/html/manual/source_organization.html
+++ b/libstdc++-v3/doc/html/manual/source_organization.html
@@ -3,94 +3,97 @@
Contributing
</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
- The unpacked source directory of libstdc++ contains the files
- needed to create the GNU C++ Library.
- </p><div class="literallayout"><p><br />
-It has subdirectories:<br />
-<br />
-  doc<br />
-    Files in HTML and text format that document usage, quirks of the<br />
-    implementation, and contributor checklists.<br />
-<br />
-  include<br />
-    All header files for the C++ library are within this directory,<br />
-    modulo specific runtime-related files that are in the libsupc++<br />
-    directory.<br />
-<br />
-    include/std<br />
-      Files meant to be found by #include &lt;name&gt; directives in<br />
-      standard-conforming user programs.<br />
-<br />
-    include/c<br />
-      Headers intended to directly include standard C headers.<br />
-      [NB: this can be enabled via --enable-cheaders=c]<br />
-<br />
-    include/c_global<br />
-      Headers intended to include standard C headers in<br />
-      the global namespace, and put select names into the std::<br />
-      namespace.  [NB: this is the default, and is the same as<br />
-      --enable-cheaders=c_global]<br />
-<br />
-    include/c_std<br />
-      Headers intended to include standard C headers<br />
-      already in namespace std, and put select names into the std::<br />
-      namespace.  [NB: this is the same as --enable-cheaders=c_std]<br />
-<br />
-    include/bits<br />
-      Files included by standard headers and by other files in<br />
-      the bits directory.<br />
-<br />
-    include/backward<br />
-      Headers provided for backward compatibility, such as &lt;iostream.h&gt;.<br />
-      They are not used in this library.<br />
-<br />
-    include/ext<br />
-      Headers that define extensions to the standard library.  No<br />
-      standard header refers to any of them.<br />
-<br />
-  scripts<br />
-    Scripts that are used during the configure, build, make, or test<br />
-    process.<br />
-<br />
-  src<br />
-    Files that are used in constructing the library, but are not<br />
-    installed.<br />
-<br />
-  testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]<br />
-    Test programs are here, and may be used to begin to exercise the<br />
-    library.  Support for "make check" and "make check-install" is<br />
-    complete, and runs through all the subdirectories here when this<br />
-    command is issued from the build directory.  Please note that<br />
-    "make check" requires DejaGNU 1.4 or later to be installed.  Please<br />
-    note that "make check-script" calls the script mkcheck, which<br />
-    requires bash, and which may need the paths to bash adjusted to<br />
-    work properly, as /bin/bash is assumed.<br />
-<br />
-Other subdirectories contain variant versions of certain files<br />
-that are meant to be copied or linked by the configure script.<br />
-Currently these are:<br />
-<br />
-  config/abi<br />
-  config/cpu<br />
-  config/io<br />
-  config/locale<br />
-  config/os<br />
-<br />
-In addition, a subdirectory holds the convenience library libsupc++.<br />
-<br />
-  libsupc++<br />
-    Contains the runtime library for C++, including exception<br />
-    handling and memory allocation and deallocation, RTTI, terminate<br />
-    handlers, etc.<br />
-<br />
-Note that glibc also has a bits/ subdirectory.  We will either<br />
-need to be careful not to collide with names in its bits/<br />
-directory; or rename bits to (e.g.) cppbits/.<br />
-<br />
-In files throughout the system, lines marked with an "XXX" indicate<br />
-a bug or incompletely-implemented feature.  Lines marked "XXX MT"<br />
-indicate a place that may require attention for multi-thread safety.<br />
-  </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. 
+ The <code class="filename">libstdc++-v3</code> directory in the
+ GCC sources contains the files needed to create the GNU C++ Library.
+ </p><p>
+It has subdirectories:
+</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="filename">doc</code></span></dt><dd>
+ Files in HTML and text format that document usage, quirks of the
+ implementation, and contributor checklists.
+ </dd><dt><span class="term"><code class="filename">include</code></span></dt><dd>
+ All header files for the C++ library are within this directory,
+ modulo specific runtime-related files that are in the libsupc++
+ directory.
+
+ <div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="filename">include/std</code></span></dt><dd>
+ Files meant to be found by <code class="code">#include &lt;name&gt;</code> directives
+ in standard-conforming user programs.
+ </dd><dt><span class="term"><code class="filename">include/c</code></span></dt><dd>
+ Headers intended to directly include standard C headers.
+ [NB: this can be enabled via <code class="option">--enable-cheaders=c</code>]
+ </dd><dt><span class="term"><code class="filename">include/c_global</code></span></dt><dd>
+ Headers intended to include standard C headers in
+ the global namespace, and put select names into the <code class="code">std::</code>
+ namespace. [NB: this is the default, and is the same as
+ <code class="option">--enable-cheaders=c_global</code>]
+ </dd><dt><span class="term"><code class="filename">include/c_std</code></span></dt><dd>
+ Headers intended to include standard C headers
+ already in namespace std, and put select names into the <code class="code">std::</code>
+ namespace. [NB: this is the same as
+ <code class="option">--enable-cheaders=c_std</code>]
+ </dd><dt><span class="term"><code class="filename">include/bits</code></span></dt><dd>
+ Files included by standard headers and by other files in
+ the bits directory.
+ </dd><dt><span class="term"><code class="filename">include/backward</code></span></dt><dd>
+ Headers provided for backward compatibility, such as
+ <code class="filename">&lt;backward/hash_map&gt;</code>.
+ They are not used in this library.
+ </dd><dt><span class="term"><code class="filename">include/ext</code></span></dt><dd>
+ Headers that define extensions to the standard library. No
+ standard header refers to any of them, in theory (there are some
+ exceptions).
+ </dd></dl></div></dd><dt><span class="term"><code class="filename">scripts</code></span></dt><dd>
+ Scripts that are used during the configure, build, make, or test
+ process.
+ </dd><dt><span class="term"><code class="filename">src</code></span></dt><dd>
+ Files that are used in constructing the library, but are not
+ installed.
+
+ <div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="filename">src/c++98</code></span></dt><dd>
+ Source files compiled using <code class="option">-std=gnu++98</code>.
+ </dd><dt><span class="term"><code class="filename">src/c++11</code></span></dt><dd>
+ Source files compiled using <code class="option">-std=gnu++11</code>.
+ </dd><dt><span class="term"><code class="filename">src/filesystem</code></span></dt><dd>
+ Source files for the Filesystem TS.
+ </dd><dt><span class="term"><code class="filename">src/shared</code></span></dt><dd>
+ Source code included by other files under both
+ <code class="filename">src/c++98</code> and
+ <code class="filename">src/c++11</code></dd></dl></div></dd><dt><span class="term"><code class="filename">testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]</code></span></dt><dd>
+ Test programs are here, and may be used to begin to exercise the
+ library. Support for "make check" and "make check-install" is
+ complete, and runs through all the subdirectories here when this
+ command is issued from the build directory. Please note that
+ "make check" requires DejaGNU 1.4 or later to be installed.
+ </dd></dl></div><p>
+Other subdirectories contain variant versions of certain files
+that are meant to be copied or linked by the configure script.
+Currently these are:
+</p><div class="literallayout"><p><code class="filename">config/abi</code><br />
+<code class="filename">config/allocator</code><br />
+<code class="filename">config/cpu</code><br />
+<code class="filename">config/io</code><br />
+<code class="filename">config/locale</code><br />
+<code class="filename">config/os</code><br />
+</p></div><p>
+</p><p>
+In addition, a subdirectory holds the convenience library libsupc++.
+</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="filename">libsupc++</code></span></dt><dd>
+ Contains the runtime library for C++, including exception
+ handling and memory allocation and deallocation, RTTI, terminate
+ handlers, etc.
+ </dd></dl></div><p>
+Note that glibc also has a <code class="filename">bits/</code>
+subdirectory. We need to be careful not to collide with names in its
+<code class="filename">bits/</code> directory. For example
+<code class="filename">&lt;bits/std_mutex.h&gt;</code> has to be
+renamed from <code class="filename">&lt;bits/mutex.h&gt;</code>.
+Another solution would be to rename <code class="filename">bits</code>
+to (e.g.) <code class="filename">cppbits</code>.
+</p><p>
+In files throughout the system, lines marked with an "XXX" indicate
+a bug or incompletely-implemented feature. Lines marked "XXX MT"
+indicate a place that may require attention for multi-thread safety.
+</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. 
Contributing
 </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html> \ No newline at end of file
diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html
index ea30b51bb29..a7def2bb3d7 100644
--- a/libstdc++-v3/doc/html/manual/status.html
+++ b/libstdc++-v3/doc/html/manual/status.html
@@ -186,8 +186,7 @@ This page describes the C++11 support in the GCC 6 series.
<span class="emphasis"><em>23</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Containers</em></span>
- </td></tr><tr><td align="left">23.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2</td><td align="left">Container requirements</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.2.1</td><td align="left">General container requirements</td><td align="left">Partial</td><td align="left"><code class="code">list</code> does not meet the requirements
- relating to allocator use and propagation.</td></tr><tr><td align="left">23.2.2</td><td align="left">Container data races</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3</td><td align="left">Sequence containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.4</td><td align="left">Associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.5</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">forward_list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">23.3.5</td><td align="left">Class template <code class="code">list</code></td><td align="left">Partial</td><td align="left">Incomplete allocator support.</td></tr><tr><td align="left">23.3.6</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.7</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.4.4</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.5</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.6</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.7</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5</td><td align="left">Unordered associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.5.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.5</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.6</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.7</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6</td><td align="left">Container adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.6.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">23.1</td><td align="left">General</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2</td><td align="left">Container requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.2.1</td><td align="left">General container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.2</td><td align="left">Container data races</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.3</td><td align="left">Sequence containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.4</td><td align="left">Associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.2.5</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3</td><td align="left">Sequence containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.3.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.3</td><td align="left">Class template <code class="code">deque</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.4</td><td align="left">Class template <code class="code">forward_list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.5</td><td align="left">Class template <code class="code">list</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.6</td><td align="left">Class template <code class="code">vector</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.3.7</td><td align="left">Class <code class="code">vector&lt;bool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4</td><td align="left">Associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.4.4</td><td align="left">Class template <code class="code">map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.5</td><td align="left">Class template <code class="code">multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.6</td><td align="left">Class template <code class="code">set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.4.7</td><td align="left">Class template <code class="code">multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5</td><td align="left">Unordered associative containers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.5.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.5</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.6</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.5.7</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6</td><td align="left">Container adaptors</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">23.6.1</td><td align="left">Class template <code class="code">queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.2</td><td align="left">Class template <code class="code">priority_queue</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">23.6.3</td><td align="left">Class template <code class="code">stack</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>24</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Iterators</em></span>
@@ -215,8 +214,7 @@ This page describes the C++11 support in the GCC 6 series.
<span class="emphasis"><em>30</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Thread support</em></span>
- </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left">On POSIX sytems these types are only defined if the OS
- supports the POSIX Timeouts option. </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.8</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.9</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ </td></tr><tr><td align="left">30.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.2</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.3</td><td align="left">Threads</td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">30.3.1</td><td align="left">Class <code class="code">thread</code></td><td align="left">Partial</td><td align="left"><code class="code">thread::id</code> comparisons not well-defined</td></tr><tr><td align="left">30.3.2</td><td align="left">Namespace <code class="code">this_thread</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4</td><td align="left">Mutual exclusion</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1</td><td align="left">Mutex requirements</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2</td><td align="left">Mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.1</td><td align="left">Class <code class="code">mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.2.2</td><td align="left">Class <code class="code">recursive_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3</td><td align="left">Timed mutex types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.1</td><td align="left">Class <code class="code">timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.1.3.2</td><td align="left">Class <code class="code">recursive_timed_mutex</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2</td><td align="left">Locks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.2.1</td><td align="left">Class template <code class="code">lock_guard</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.2.2</td><td align="left">Class template <code class="code">unique_lock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.3</td><td align="left">Generic locking algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4</td><td align="left">Call once</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.4.4.1</td><td align="left">Struct <code class="code">once_flag</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.4.4.2</td><td align="left">Function <code class="code">call_once</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5</td><td align="left">Condition variables</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.1</td><td align="left">Class <code class="code">condition_variable</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.5.2</td><td align="left">Class <code class="code">condition_variable_any</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6</td><td align="left">Futures</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.1</td><td align="left">Overview</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">30.6.2</td><td align="left">Error handling</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.3</td><td align="left">Class <code class="code">future_error</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.4</td><td align="left">Shared state</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.5</td><td align="left">Class template <code class="code">promise</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.6</td><td align="left">Class template <code class="code">future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.7</td><td align="left">Class template <code class="code">shared_future</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.8</td><td align="left">Function template <code class="code">async</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">30.6.9</td><td align="left">Class template <code class="code">packaged_task</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
<span class="emphasis"><em>Appendix D</em></span>
</td><td colspan="3" align="left">
<span class="emphasis"><em>Compatibility features</em></span>
diff --git a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
index d7df13c28ab..1ee848ff672 100644
--- a/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
+++ b/libstdc++-v3/doc/xml/manual/appendix_contributing.xml
@@ -199,96 +199,199 @@
<para>
- The unpacked source directory of libstdc++ contains the files
- needed to create the GNU C++ Library.
+ The <filename class="directory">libstdc++-v3</filename> directory in the
+ GCC sources contains the files needed to create the GNU C++ Library.
</para>
- <literallayout class="normal">
+<para>
It has subdirectories:
+</para>
- doc
+<variablelist>
+ <varlistentry>
+ <term><filename class="directory">doc</filename></term>
+ <listitem>
Files in HTML and text format that document usage, quirks of the
implementation, and contributor checklists.
+ </listitem>
+ </varlistentry>
- include
+ <varlistentry>
+ <term><filename class="directory">include</filename></term>
+ <listitem>
All header files for the C++ library are within this directory,
modulo specific runtime-related files that are in the libsupc++
directory.
- include/std
- Files meant to be found by #include &lt;name&gt; directives in
- standard-conforming user programs.
+ <variablelist>
+ <varlistentry>
+ <term><filename class="directory">include/std</filename></term>
+ <listitem>
+ Files meant to be found by <code>#include &lt;name&gt;</code> directives
+ in standard-conforming user programs.
+ </listitem>
+ </varlistentry>
- include/c
+ <varlistentry>
+ <term><filename class="directory">include/c</filename></term>
+ <listitem>
Headers intended to directly include standard C headers.
- [NB: this can be enabled via --enable-cheaders=c]
+ [NB: this can be enabled via <option>--enable-cheaders=c</option>]
+ </listitem>
+ </varlistentry>
- include/c_global
+ <varlistentry>
+ <term><filename class="directory">include/c_global</filename></term>
+ <listitem>
Headers intended to include standard C headers in
- the global namespace, and put select names into the std::
+ the global namespace, and put select names into the <code>std::</code>
namespace. [NB: this is the default, and is the same as
- --enable-cheaders=c_global]
+ <option>--enable-cheaders=c_global</option>]
+ </listitem>
+ </varlistentry>
- include/c_std
+ <varlistentry>
+ <term><filename class="directory">include/c_std</filename></term>
+ <listitem>
Headers intended to include standard C headers
- already in namespace std, and put select names into the std::
- namespace. [NB: this is the same as --enable-cheaders=c_std]
+ already in namespace std, and put select names into the <code>std::</code>
+ namespace. [NB: this is the same as
+ <option>--enable-cheaders=c_std</option>]
+ </listitem>
+ </varlistentry>
- include/bits
+ <varlistentry>
+ <term><filename class="directory">include/bits</filename></term>
+ <listitem>
Files included by standard headers and by other files in
the bits directory.
+ </listitem>
+ </varlistentry>
- include/backward
- Headers provided for backward compatibility, such as &lt;iostream.h&gt;.
+ <varlistentry>
+ <term><filename class="directory">include/backward</filename></term>
+ <listitem>
+ Headers provided for backward compatibility, such as
+ <filename class="headerfile">&lt;backward/hash_map&gt;</filename>.
They are not used in this library.
+ </listitem>
+ </varlistentry>
- include/ext
+ <varlistentry>
+ <term><filename class="directory">include/ext</filename></term>
+ <listitem>
Headers that define extensions to the standard library. No
- standard header refers to any of them.
-
- scripts
+ standard header refers to any of them, in theory (there are some
+ exceptions).
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename class="directory">scripts</filename></term>
+ <listitem>
Scripts that are used during the configure, build, make, or test
process.
+ </listitem>
+ </varlistentry>
- src
+ <varlistentry>
+ <term><filename class="directory">src</filename></term>
+ <listitem>
Files that are used in constructing the library, but are not
installed.
- testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]
+ <variablelist>
+ <varlistentry>
+ <term><filename class="directory">src/c++98</filename></term>
+ <listitem>
+ Source files compiled using <option>-std=gnu++98</option>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename class="directory">src/c++11</filename></term>
+ <listitem>
+ Source files compiled using <option>-std=gnu++11</option>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename class="directory">src/filesystem</filename></term>
+ <listitem>
+ Source files for the Filesystem TS.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename class="directory">src/shared</filename></term>
+ <listitem>
+ Source code included by other files under both
+ <filename class="directory">src/c++98</filename> and
+ <filename class="directory">src/c++11</filename>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename class="directory">testsuites/[backward, demangle, ext, performance, thread, 17_* to 30_*]</filename></term>
+ <listitem>
Test programs are here, and may be used to begin to exercise the
library. Support for "make check" and "make check-install" is
complete, and runs through all the subdirectories here when this
command is issued from the build directory. Please note that
- "make check" requires DejaGNU 1.4 or later to be installed. Please
- note that "make check-script" calls the script mkcheck, which
- requires bash, and which may need the paths to bash adjusted to
- work properly, as /bin/bash is assumed.
+ "make check" requires DejaGNU 1.4 or later to be installed.
+ </listitem>
+ </varlistentry>
+</variablelist>
+<para>
Other subdirectories contain variant versions of certain files
that are meant to be copied or linked by the configure script.
Currently these are:
+<literallayout><filename class="directory">config/abi</filename>
+<filename class="directory">config/allocator</filename>
+<filename class="directory">config/cpu</filename>
+<filename class="directory">config/io</filename>
+<filename class="directory">config/locale</filename>
+<filename class="directory">config/os</filename>
+</literallayout>
+</para>
- config/abi
- config/cpu
- config/io
- config/locale
- config/os
-
+<para>
In addition, a subdirectory holds the convenience library libsupc++.
+</para>
- libsupc++
+<variablelist>
+<varlistentry>
+ <term><filename class="directory">libsupc++</filename></term>
+ <listitem>
Contains the runtime library for C++, including exception
handling and memory allocation and deallocation, RTTI, terminate
handlers, etc.
+ </listitem>
+</varlistentry>
+</variablelist>
-Note that glibc also has a bits/ subdirectory. We will either
-need to be careful not to collide with names in its bits/
-directory; or rename bits to (e.g.) cppbits/.
+<para>
+Note that glibc also has a <filename class="directory">bits/</filename>
+subdirectory. We need to be careful not to collide with names in its
+<filename class="directory">bits/</filename> directory. For example
+<filename class="headerfile">&lt;bits/std_mutex.h&gt;</filename> has to be
+renamed from <filename class="headerfile">&lt;bits/mutex.h&gt;</filename>.
+Another solution would be to rename <filename class="directory">bits</filename>
+to (e.g.) <filename class="directory">cppbits</filename>.
+</para>
+<para>
In files throughout the system, lines marked with an "XXX" indicate
a bug or incompletely-implemented feature. Lines marked "XXX MT"
indicate a place that may require attention for multi-thread safety.
- </literallayout>
+</para>
</section>
diff --git a/libstdc++-v3/doc/xml/manual/intro.xml b/libstdc++-v3/doc/xml/manual/intro.xml
index 2aa9ba7a896..f8deaeb6168 100644
--- a/libstdc++-v3/doc/xml/manual/intro.xml
+++ b/libstdc++-v3/doc/xml/manual/intro.xml
@@ -850,6 +850,12 @@ requirements of the license of GCC.
<listitem><para>Add additional overloads.
</para></listitem></varlistentry>
+ <varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#2062">2062</link>:
+ <emphasis>2062. Effect contradictions w/o no-throw guarantee of <code>std::function</code> swaps</emphasis>
+ </term>
+ <listitem><para>Add <code>noexcept</code> to swap functions.
+ </para></listitem></varlistentry>
+
<varlistentry><term><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../ext/lwg-defects.html#2063">2063</link>:
<emphasis>Contradictory requirements for string move assignment</emphasis>
</term>
diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
index e6d0f0622c0..3795aabd2be 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
@@ -1340,12 +1340,10 @@ This page describes the C++11 support in the GCC 6 series.
<entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>23.2.1</entry>
<entry>General container requirements</entry>
- <entry>Partial</entry>
- <entry><code>list</code> does not meet the requirements
- relating to allocator use and propagation.</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>23.2.2</entry>
@@ -1396,11 +1394,10 @@ This page describes the C++11 support in the GCC 6 series.
<entry/>
</row>
<row>
- <?dbhtml bgcolor="#B0B0B0" ?>
<entry>23.3.5</entry>
<entry>Class template <code>list</code></entry>
- <entry>Partial</entry>
- <entry>Incomplete allocator support.</entry>
+ <entry>Y</entry>
+ <entry/>
</row>
<row>
<entry>23.3.6</entry>
@@ -2349,8 +2346,7 @@ This page describes the C++11 support in the GCC 6 series.
<entry>30.4.1.3</entry>
<entry>Timed mutex types</entry>
<entry/>
- <entry>On POSIX sytems these types are only defined if the OS
- supports the POSIX Timeouts option. </entry>
+ <entry/>
</row>
<row>
<entry>30.4.1.3.1</entry>
diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index 984d80075bc..52223beabf4 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -82,6 +82,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#define __cpp_lib_allocator_is_always_equal 201411
typedef true_type is_always_equal;
+
+ template<typename _Up, typename... _Args>
+ void
+ construct(_Up* __p, _Args&&... __args)
+ { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
+
+ template<typename _Up>
+ void
+ destroy(_Up* __p) { __p->~_Up(); }
#endif
};
diff --git a/libstdc++-v3/include/bits/unique_ptr.h b/libstdc++-v3/include/bits/unique_ptr.h
index db31b54a432..8e302877f78 100644
--- a/libstdc++-v3/include/bits/unique_ptr.h
+++ b/libstdc++-v3/include/bits/unique_ptr.h
@@ -168,9 +168,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
*/
explicit
unique_ptr(pointer __p) noexcept
- : _M_t(__p, deleter_type())
- { static_assert(!is_pointer<deleter_type>::value,
- "constructed with null function pointer deleter"); }
+ : _M_t()
+ {
+ std::get<0>(_M_t) = __p;
+ static_assert(!is_pointer<deleter_type>::value,
+ "constructed with null function pointer deleter");
+ }
/** Takes ownership of a pointer.
*
@@ -610,10 +613,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
void
reset(_Up __p) noexcept
{
+ pointer __ptr = __p;
using std::swap;
- swap(std::get<0>(_M_t), __p);
- if (__p != nullptr)
- get_deleter()(__p);
+ swap(std::get<0>(_M_t), __ptr);
+ if (__ptr != nullptr)
+ get_deleter()(__ptr);
}
void reset(nullptr_t = nullptr) noexcept
diff --git a/libstdc++-v3/include/experimental/algorithm b/libstdc++-v3/include/experimental/algorithm
index 0ba6311e952..ee3e5eba61b 100644
--- a/libstdc++-v3/include/experimental/algorithm
+++ b/libstdc++-v3/include/experimental/algorithm
@@ -68,9 +68,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__distrib_type __d{};
_Size __sample_sz = 0;
while (__first != __last && __sample_sz != __n)
- __out[__sample_sz++] = *__first++;
+ {
+ __out[__sample_sz++] = *__first;
+ ++__first;
+ }
for (auto __pop_sz = __sample_sz; __first != __last;
- ++__first, ++__pop_sz)
+ ++__first, (void)++__pop_sz)
{
const auto __k = __d(__g, __param_type{0, __pop_sz});
if (__k < __n)
@@ -123,9 +126,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static_assert(is_integral<_Distance>::value,
"sample size must be an integer type");
+ typename iterator_traits<_PopulationIterator>::difference_type __d = __n;
return std::experimental::__sample(
__first, __last, __pop_cat{}, __out, __samp_cat{},
- __n, std::forward<_UniformRandomNumberGenerator>(__g));
+ __d, std::forward<_UniformRandomNumberGenerator>(__g));
}
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/include/experimental/functional b/libstdc++-v3/include/experimental/functional
index 6a21caf340a..430a3931b29 100644
--- a/libstdc++-v3/include/experimental/functional
+++ b/libstdc++-v3/include/experimental/functional
@@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Pred
_M_pred() const { return _M_bad_char.key_eq(); }
- std::unordered_map<_Key, _Tp, _Hash, _Pred> _M_bad_char;
+ _GLIBCXX_STD_C::unordered_map<_Key, _Tp, _Hash, _Pred> _M_bad_char;
};
template<typename _Tp, size_t _Len, typename _Pred>
@@ -128,7 +128,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _RAIter, typename _Unused>
__boyer_moore_array_base(_RAIter __pat, size_t __patlen,
_Unused&&, _Pred&& __pred)
- : _M_bad_char{ std::array<_Tp, _Len>{}, std::move(__pred) }
+ : _M_bad_char{ _GLIBCXX_STD_C::array<_Tp, _Len>{}, std::move(__pred) }
{
std::get<0>(_M_bad_char).fill(__patlen);
if (__patlen > 0)
@@ -156,7 +156,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
const _Pred&
_M_pred() const { return std::get<1>(_M_bad_char); }
- std::tuple<std::array<_Tp, _Len>, _Pred> _M_bad_char;
+ std::tuple<_GLIBCXX_STD_C::array<_Tp, _Len>, _Pred> _M_bad_char;
};
template<typename _Pred>
@@ -229,7 +229,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_RAIter _M_pat;
_RAIter _M_pat_end;
- std::vector<__diff_type> _M_good_suffix;
+ _GLIBCXX_STD_C::vector<__diff_type> _M_good_suffix;
};
template<typename _RAIter, typename _Hash
diff --git a/libstdc++-v3/include/experimental/optional b/libstdc++-v3/include/experimental/optional
index 35577188194..bf07cdf0fbc 100644
--- a/libstdc++-v3/include/experimental/optional
+++ b/libstdc++-v3/include/experimental/optional
@@ -214,12 +214,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
: _Optional_base{} { }
// Constructors for engaged optionals.
- constexpr _Optional_base(const _Tp& __t)
- : _M_payload(__t), _M_engaged(true) { }
-
- constexpr _Optional_base(_Tp&& __t)
- : _M_payload(std::move(__t)), _M_engaged(true) { }
-
template<typename... _Args>
constexpr explicit _Optional_base(in_place_t, _Args&&... __args)
: _M_payload(std::forward<_Args>(__args)...), _M_engaged(true) { }
@@ -356,12 +350,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr _Optional_base(nullopt_t) noexcept
: _Optional_base{} { }
- constexpr _Optional_base(const _Tp& __t)
- : _M_payload(__t), _M_engaged(true) { }
-
- constexpr _Optional_base(_Tp&& __t)
- : _M_payload(std::move(__t)), _M_engaged(true) { }
-
template<typename... _Args>
constexpr explicit _Optional_base(in_place_t, _Args&&... __args)
: _M_payload(std::forward<_Args>(__args)...), _M_engaged(true) { }
@@ -474,19 +462,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Tp>
class optional;
- template<typename>
- struct __is_optional_impl : false_type
- { };
-
- template<typename _Tp>
- struct __is_optional_impl<optional<_Tp>> : true_type
- { };
-
- template<typename _Tp>
- struct __is_optional
- : public __is_optional_impl<std::remove_cv_t<std::remove_reference_t<_Tp>>>
- { };
-
+ template<typename _Tp, typename _Up>
+ using __converts_from_optional =
+ __or_<is_constructible<_Tp, const optional<_Up>&>,
+ is_constructible<_Tp, optional<_Up>&>,
+ is_constructible<_Tp, const optional<_Up>&&>,
+ is_constructible<_Tp, optional<_Up>&&>,
+ is_convertible<const optional<_Up>&, _Tp>,
+ is_convertible<optional<_Up>&, _Tp>,
+ is_convertible<const optional<_Up>&&, _Tp>,
+ is_convertible<optional<_Up>&&, _Tp>>;
+
+ template<typename _Tp, typename _Up>
+ using __assigns_from_optional =
+ __or_<is_assignable<_Tp&, const optional<_Up>&>,
+ is_assignable<_Tp&, optional<_Up>&>,
+ is_assignable<_Tp&, const optional<_Up>&&>,
+ is_assignable<_Tp&, optional<_Up>&&>>;
/**
* @brief Class template for optional values.
@@ -522,75 +514,75 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr optional() = default;
// Converting constructors for engaged optionals.
- template <typename _Up,
+ template <typename _Up = _Tp,
enable_if_t<__and_<
- __not_<is_same<_Tp, _Up>>,
+ __not_<is_same<optional<_Tp>, decay_t<_Up>>>,
is_constructible<_Tp, _Up&&>,
is_convertible<_Up&&, _Tp>
>::value, bool> = true>
constexpr optional(_Up&& __t)
- : _Base(_Tp(std::forward<_Up>(__t))) { }
+ : _Base(in_place, std::forward<_Up>(__t)) { }
- template <typename _Up,
+ template <typename _Up = _Tp,
enable_if_t<__and_<
- __not_<is_same<_Tp, _Up>>,
- is_constructible<_Tp, _Up&&>,
- __not_<is_convertible<_Up&&, _Tp>>
- >::value, bool> = false>
+ __not_<is_same<optional<_Tp>, decay_t<_Up>>>,
+ is_constructible<_Tp, _Up&&>,
+ __not_<is_convertible<_Up&&, _Tp>>
+ >::value, bool> = false>
explicit constexpr optional(_Up&& __t)
- : _Base(_Tp(std::forward<_Up>(__t))) { }
+ : _Base(in_place, std::forward<_Up>(__t)) { }
template <typename _Up,
enable_if_t<__and_<
__not_<is_same<_Tp, _Up>>,
- __not_<is_constructible<
- _Tp, const optional<_Up>&>>,
- __not_<is_convertible<
- const optional<_Up>&, _Tp>>,
is_constructible<_Tp, const _Up&>,
- is_convertible<const _Up&, _Tp>
+ is_convertible<const _Up&, _Tp>,
+ __not_<__converts_from_optional<_Tp, _Up>>
>::value, bool> = true>
constexpr optional(const optional<_Up>& __t)
- : _Base(__t ? optional<_Tp>(*__t) : optional<_Tp>()) { }
+ {
+ if (__t)
+ emplace(*__t);
+ }
template <typename _Up,
enable_if_t<__and_<
__not_<is_same<_Tp, _Up>>,
- __not_<is_constructible<
- _Tp, const optional<_Up>&>>,
- __not_<is_convertible<
- const optional<_Up>&, _Tp>>,
is_constructible<_Tp, const _Up&>,
- __not_<is_convertible<const _Up&, _Tp>>
+ __not_<is_convertible<const _Up&, _Tp>>,
+ __not_<__converts_from_optional<_Tp, _Up>>
>::value, bool> = false>
explicit constexpr optional(const optional<_Up>& __t)
- : _Base(__t ? optional<_Tp>(*__t) : optional<_Tp>()) { }
+ {
+ if (__t)
+ emplace(*__t);
+ }
template <typename _Up,
enable_if_t<__and_<
__not_<is_same<_Tp, _Up>>,
- __not_<is_constructible<
- _Tp, optional<_Up>&&>>,
- __not_<is_convertible<
- optional<_Up>&&, _Tp>>,
is_constructible<_Tp, _Up&&>,
- is_convertible<_Up&&, _Tp>
+ is_convertible<_Up&&, _Tp>,
+ __not_<__converts_from_optional<_Tp, _Up>>
>::value, bool> = true>
constexpr optional(optional<_Up>&& __t)
- : _Base(__t ? optional<_Tp>(std::move(*__t)) : optional<_Tp>()) { }
+ {
+ if (__t)
+ emplace(std::move(*__t));
+ }
template <typename _Up,
enable_if_t<__and_<
__not_<is_same<_Tp, _Up>>,
- __not_<is_constructible<
- _Tp, optional<_Up>&&>>,
- __not_<is_convertible<
- optional<_Up>&&, _Tp>>,
is_constructible<_Tp, _Up&&>,
- __not_<is_convertible<_Up&&, _Tp>>
+ __not_<is_convertible<_Up&&, _Tp>>,
+ __not_<__converts_from_optional<_Tp, _Up>>
>::value, bool> = false>
explicit constexpr optional(optional<_Up>&& __t)
- : _Base(__t ? optional<_Tp>(std::move(*__t)) : optional<_Tp>()) { }
+ {
+ if (__t)
+ emplace(std::move(*__t));
+ }
// [X.Y.4.3] (partly) Assignment.
optional&
@@ -600,18 +592,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- template<typename _Up,
- enable_if_t<__and_<
- __not_<is_same<_Up, nullopt_t>>,
- __not_<__is_optional<_Up>>>::value,
- bool> = true>
- optional&
+ template<typename _Up = _Tp>
+ enable_if_t<__and_<
+ __not_<is_same<optional<_Tp>, decay_t<_Up>>>,
+ is_constructible<_Tp, _Up>,
+ __not_<__and_<is_scalar<_Tp>,
+ is_same<_Tp, decay_t<_Up>>>>,
+ is_assignable<_Tp&, _Up>>::value,
+ optional&>
operator=(_Up&& __u)
{
- static_assert(__and_<is_constructible<_Tp, _Up>,
- is_assignable<_Tp&, _Up>>(),
- "Cannot assign to value type from argument");
-
if (this->_M_is_engaged())
this->_M_get() = std::forward<_Up>(__u);
else
@@ -620,17 +610,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- template<typename _Up,
- enable_if_t<__and_<
- __not_<is_same<_Tp, _Up>>>::value,
- bool> = true>
- optional&
+ template<typename _Up>
+ enable_if_t<__and_<
+ __not_<is_same<_Tp, _Up>>,
+ is_constructible<_Tp, const _Up&>,
+ is_assignable<_Tp&, _Up>,
+ __not_<__converts_from_optional<_Tp, _Up>>,
+ __not_<__assigns_from_optional<_Tp, _Up>>
+ >::value,
+ optional&>
operator=(const optional<_Up>& __u)
{
- static_assert(__and_<is_constructible<_Tp, _Up>,
- is_assignable<_Tp&, _Up>>(),
- "Cannot assign to value type from argument");
-
if (__u)
{
if (this->_M_is_engaged())
@@ -645,17 +635,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return *this;
}
- template<typename _Up,
- enable_if_t<__and_<
- __not_<is_same<_Tp, _Up>>>::value,
- bool> = true>
- optional&
+ template<typename _Up>
+ enable_if_t<__and_<
+ __not_<is_same<_Tp, _Up>>,
+ is_constructible<_Tp, _Up>,
+ is_assignable<_Tp&, _Up>,
+ __not_<__converts_from_optional<_Tp, _Up>>,
+ __not_<__assigns_from_optional<_Tp, _Up>>
+ >::value,
+ optional&>
operator=(optional<_Up>&& __u)
{
- static_assert(__and_<is_constructible<_Tp, _Up>,
- is_assignable<_Tp&, _Up>>(),
- "Cannot assign to value type from argument");
-
if (__u)
{
if (this->_M_is_engaged())
@@ -672,18 +662,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename... _Args>
- void
+ enable_if_t<is_constructible<_Tp, _Args&&...>::value>
emplace(_Args&&... __args)
{
- static_assert(is_constructible<_Tp, _Args&&...>(),
- "Cannot emplace value type from arguments");
-
this->_M_reset();
this->_M_construct(std::forward<_Args>(__args)...);
}
template<typename _Up, typename... _Args>
- enable_if_t<is_constructible<_Tp, initializer_list<_Up>&,
+ enable_if_t<is_constructible<_Tp, initializer_list<_Up>&,
_Args&&...>::value>
emplace(initializer_list<_Up> __il, _Args&&... __args)
{
diff --git a/libstdc++-v3/include/experimental/propagate_const b/libstdc++-v3/include/experimental/propagate_const
index 15ffe4ac6ad..e1fb4e49198 100644
--- a/libstdc++-v3/include/experimental/propagate_const
+++ b/libstdc++-v3/include/experimental/propagate_const
@@ -63,7 +63,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class propagate_const
{
public:
- typedef remove_reference_t<decltype(*declval<_Tp&>())> element_type;
+ typedef remove_reference_t<decltype(*std::declval<_Tp&>())> element_type;
private:
template <typename _Up>
diff --git a/libstdc++-v3/include/experimental/string_view b/libstdc++-v3/include/experimental/string_view
index 8cb8c1ffa1c..c1dfef0e3bf 100644
--- a/libstdc++-v3/include/experimental/string_view
+++ b/libstdc++-v3/include/experimental/string_view
@@ -420,7 +420,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
private:
- static constexpr const int
+ static constexpr int
_S_compare(size_type __n1, size_type __n2) noexcept
{
return difference_type{__n1 - __n2} > std::numeric_limits<int>::max()
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index 6f95b4b5f29..0eee18ab64e 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -1568,7 +1568,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
static void
_M_clone(_Any_data& __dest, const _Any_data& __source, true_type)
{
- new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
+ ::new (__dest._M_access()) _Functor(__source._M_access<_Functor>());
}
// Clone a function object that is not location-invariant or
@@ -1649,7 +1649,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
private:
static void
_M_init_functor(_Any_data& __functor, _Functor&& __f, true_type)
- { new (__functor._M_access()) _Functor(std::move(__f)); }
+ { ::new (__functor._M_access()) _Functor(std::move(__f)); }
static void
_M_init_functor(_Any_data& __functor, _Functor&& __f, false_type)
@@ -2020,7 +2020,7 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
* Swap the targets of @c this function object and @a __f. This
* function will not throw an %exception.
*/
- void swap(function& __x)
+ void swap(function& __x) noexcept
{
std::swap(_M_functor, __x._M_functor);
std::swap(_M_manager, __x._M_manager);
@@ -2233,9 +2233,11 @@ _GLIBCXX_MEM_FN_TRAITS(&&, false_type, true_type)
*
* This function will not throw an %exception.
*/
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+ // 2062. Effect contradictions w/o no-throw guarantee of std::function swaps
template<typename _Res, typename... _Args>
inline void
- swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y)
+ swap(function<_Res(_Args...)>& __x, function<_Res(_Args...)>& __y) noexcept
{ __x.swap(__y); }
_GLIBCXX_END_NAMESPACE_VERSION
diff --git a/libstdc++-v3/testsuite/20_util/allocator/void.cc b/libstdc++-v3/testsuite/20_util/allocator/void.cc
new file mode 100644
index 00000000000..34f3beb1345
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/allocator/void.cc
@@ -0,0 +1,40 @@
+// Copyright (C) 2016 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-options "-std=gnu++11" }
+
+#include <memory>
+#include <testsuite_hooks.h>
+
+template class std::allocator<void>;
+
+void
+test01()
+{
+ int i;
+ using alloc_type = std::allocator<void>;
+ alloc_type a;
+ std::allocator_traits<alloc_type>::construct(a, &i, 42);
+ VERIFY( i == 42 );
+ std::allocator_traits<alloc_type>::destroy(a, &i);
+}
+
+int
+main()
+{
+ test01();
+}
diff --git a/libstdc++-v3/testsuite/20_util/function/77322.cc b/libstdc++-v3/testsuite/20_util/function/77322.cc
new file mode 100644
index 00000000000..52abdf6b205
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/77322.cc
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 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-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <functional>
+
+// PR libstdc++/77322
+std::function<void()> f, g;
+static_assert( noexcept(f.swap(g)), "member swap is noexcept" );
+static_assert( noexcept(swap(f, g)), "non-member swap is noexcept" );
diff --git a/libstdc++-v3/testsuite/20_util/function/cons/72820.cc b/libstdc++-v3/testsuite/20_util/function/cons/72820.cc
new file mode 100644
index 00000000000..1e4e0e8aabf
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/function/cons/72820.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 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-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <functional>
+
+struct foo {
+ void operator()() { }
+ static void* operator new(std::size_t, void* p);
+};
+
+std::function<void()> f = foo{};
diff --git a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
index 89b81ac94a0..3492c744a04 100644
--- a/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
+++ b/libstdc++-v3/testsuite/20_util/reference_wrapper/invoke-2.cc
@@ -1,5 +1,5 @@
// { dg-options "-std=gnu++11" }
-// { dg-do compile}
+// { dg-do compile }
// Copyright (C) 2011-2016 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
index 16ff8aee650..785f9ad4cfd 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/48635_neg.cc
@@ -43,10 +43,10 @@ void f()
std::unique_ptr<int, D&> ud(nullptr, d);
ub = std::move(ud); // { dg-error "no match" }
ub2 = ud; // { dg-error "no match" }
-// { dg-error "no type" "" { target *-*-* } 269 }
+// { dg-error "no type" "" { target *-*-* } 272 }
std::unique_ptr<int[], B&> uba(nullptr, b);
std::unique_ptr<int[], D&> uda(nullptr, d);
uba = std::move(uda); // { dg-error "no match" }
-// { dg-error "no type" "" { target *-*-* } 537 }
+// { dg-error "no type" "" { target *-*-* } 540 }
}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
index 6482016e02b..a44eff5fbcb 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/assign_neg.cc
@@ -49,4 +49,25 @@ test03()
std::unique_ptr<int[2]> p2 = p1; // { dg-error "deleted" }
}
+struct base_pointer { operator base*() const { return nullptr; } };
+
+template<typename T>
+struct deleter
+{
+ deleter() = default;
+ template<typename U>
+ deleter(const deleter<U>) { }
+ typedef T pointer;
+ void operator()(T) const { }
+};
+
+void
+test04()
+{
+ // Disallow conversions from incompatible deleter
+ std::unique_ptr<derived[], deleter<base_pointer>> p;
+ std::unique_ptr<base[], deleter<base*>> upA;
+ upA = std::move(p); // { dg-error "no match" }
+}
+
// { dg-prune-output "include" }
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
index 640a3b7d907..605149c5b78 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/assign/cv_qual.cc
@@ -66,26 +66,3 @@ test03()
std::unique_ptr<const volatile A[]> cvA;
cvA = std::move(upA);
}
-
-struct A_pointer { operator A*() const { return nullptr; } };
-
-template<typename T>
-struct deleter
-{
- deleter() = default;
- template<typename U>
- deleter(const deleter<U>) { }
- typedef T pointer;
- void operator()(T) const { }
-};
-
-void
-test04()
-{
- // Disallow conversions from incompatible deleter
- std::unique_ptr<B[], deleter<A_pointer>> p;
- std::unique_ptr<A[], deleter<A*>> upA;
- upA = std::move(p); // { dg-error "no match" }
- // { dg-error "no type" "" { target *-*-* } 537 }
- // { dg-error "no matching function" "" { target *-*-* } 614 }
-}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc
new file mode 100644
index 00000000000..1acc3135d3b
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/77990.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 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-options "-std=gnu++11" }
+// { dg-do compile }
+
+#include <memory>
+
+struct D {
+ D() = default;
+ D(const D&) = delete;
+ void operator()(int*);
+};
+std::unique_ptr<int, D> p((int*)nullptr); // PR libstdc++/77990
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc
index 078ecbb49eb..6e190713707 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual.cc
@@ -100,30 +100,4 @@ test07()
std::unique_ptr<const A[]> cA2((A*)p);
std::unique_ptr<volatile A[]> vA2((A*)p);
std::unique_ptr<const volatile A[]> cvA2((A*)p);
- // Disallow conversions from user-defined pointer-like types
- // for the array version
- std::unique_ptr<A[]> upA3(p); // { dg-error "no matching function" }
- std::unique_ptr<const A[]> cA3(p); // { dg-error "no matching function" }
- std::unique_ptr<volatile A[]> vA3(p); // { dg-error "no matching function" }
- std::unique_ptr<const volatile A[]> cvA3(p); // { dg-error "no matching function" }
- // { dg-error "no type" "" { target *-*-* } 445 }
}
-
-template<typename T>
-struct deleter
-{
- deleter() = default;
- template<typename U>
- deleter(const deleter<U>) { }
- typedef T pointer;
- void operator()(T) const { }
-};
-
-void
-test08()
-{
- // Disallow conversions from non-assignable deleter
- std::unique_ptr<B[], deleter<A_pointer>> p;
- std::unique_ptr<A[], deleter<A*>> upA(std::move(p)); // { dg-error "no matching function" }
-}
-
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc
new file mode 100644
index 00000000000..285a0b994c9
--- /dev/null
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/cons/cv_qual_neg.cc
@@ -0,0 +1,73 @@
+// { dg-options "-std=gnu++11" }
+// { dg-do compile }
+
+// Copyright (C) 2016 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/>.
+
+// 20.7.1 Class template unique_ptr [unique.ptr]
+
+#include <memory>
+
+struct A { virtual ~A() = default; };
+
+struct B : A { };
+
+// Construction from objects with different cv-qualification
+
+struct A_pointer { operator A*() const { return nullptr; } };
+
+void
+test07()
+{
+ A_pointer p;
+ // Disallow conversions from user-defined pointer-like types
+ // for the array version
+ std::unique_ptr<A[]> upA3(p); // { dg-error "no matching function" }
+ std::unique_ptr<const A[]> cA3(p); // { dg-error "no matching function" }
+ std::unique_ptr<volatile A[]> vA3(p); // { dg-error "no matching function" }
+ std::unique_ptr<const volatile A[]> cvA3(p); // { dg-error "no matching function" }
+ // { dg-error "no type" "" { target *-*-* } 448 }
+}
+
+template<typename T>
+struct deleter
+{
+ deleter() = default;
+ template<typename U>
+ deleter(const deleter<U>) { }
+ typedef T pointer;
+ void operator()(T) const { }
+};
+
+void
+test08()
+{
+ // Disallow conversions from non-assignable deleter
+ std::unique_ptr<A[], deleter<A_pointer>> p;
+ std::unique_ptr<A[], deleter<A*>> upA(std::move(p)); // { dg-error "no matching function" }
+}
+
+void
+test011()
+{
+ // Disallow conversions between different array types.
+ std::unique_ptr<B[]> upB;
+
+ std::unique_ptr<const A[]> cA(std::move(upB)); // { dg-error "no matching function" }
+ std::unique_ptr<volatile A[]> vA(std::move(upB)); // { dg-error "no matching function" }
+ std::unique_ptr<const volatile A[]> cvA(std::move(upB)); // { dg-error "no matching function" }
+}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
index 6bf0ce42bce..9c63fd67793 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/cv_qual.cc
@@ -87,15 +87,4 @@ test07()
vA2.reset((A*)p);
std::unique_ptr<const volatile A[]> cvA2;
cvA2.reset((A*)p);
- // Disallow conversions from user-defined pointer-like types
- // for the array version
- std::unique_ptr<A[]> upA3;
- upA3.reset(p); // { dg-error "no matching function" }
- std::unique_ptr<const A[]> cA3;
- cA3.reset(p); // { dg-error "no matching function" }
- std::unique_ptr<volatile A[]> vA3;
- vA3.reset(p); // { dg-error "no matching function" }
- std::unique_ptr<const volatile A[]> cvA3;
- cvA3.reset(p); // { dg-error "no matching function" }
- // { dg-error "no matching function" "" { target *-*-* } 614 }
}
diff --git a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
index 1a3f981eb7c..1fd7e3199b4 100644
--- a/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/unique_ptr/modifiers/reset_neg.cc
@@ -22,17 +22,37 @@
struct A
{
+ virtual ~A() { }
};
struct B : A
{
- virtual ~B() { }
};
-void test01()
+void
+test01()
{
std::unique_ptr<B[]> up;
- up.reset(new A[3]); // { dg-error "" }
+ up.reset(new A[3]); // { dg-error "no matching function" }
+
+ std::unique_ptr<A[]> up2;
+ up2.reset(new B[3]); // { dg-error "no matching function" }
}
-// { dg-prune-output "include" }
+struct A_pointer { operator A*() const { return nullptr; } };
+
+void
+test02()
+{
+ A_pointer p;
+ // Disallow conversions from user-defined pointer-like types
+ // for the array version
+ std::unique_ptr<A[]> upA3;
+ upA3.reset(p); // { dg-error "no matching function" }
+ std::unique_ptr<const A[]> cA3;
+ cA3.reset(p); // { dg-error "no matching function" }
+ std::unique_ptr<volatile A[]> vA3;
+ vA3.reset(p); // { dg-error "no matching function" }
+ std::unique_ptr<const volatile A[]> cvA3;
+ cvA3.reset(p); // { dg-error "no matching function" }
+}
diff --git a/libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc b/libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc
index d7ca5fc248b..3893bc7c715 100644
--- a/libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc
+++ b/libstdc++-v3/testsuite/26_numerics/random/default_random_engine.cc
@@ -20,7 +20,7 @@
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
-// 26.4.5 Engines and egine adaptors with predefined parameters [rand.predef]
+// 26.4.5 Engines and engine adaptors with predefined parameters [rand.predef]
// 26.4.5 [10]
#include <random>
@@ -38,7 +38,7 @@ test01()
std::minstd_rand0 b;
b.discard(9999);
- assert( a() == b() );
+ VERIFY( a() == b() );
}
int main()
diff --git a/libstdc++-v3/testsuite/experimental/algorithm/sample.cc b/libstdc++-v3/testsuite/experimental/algorithm/sample.cc
index 0349d29d9ff..98ebace7879 100644
--- a/libstdc++-v3/testsuite/experimental/algorithm/sample.cc
+++ b/libstdc++-v3/testsuite/experimental/algorithm/sample.cc
@@ -22,6 +22,7 @@
#include <sstream>
#include <forward_list>
#include <vector>
+#include <random>
#include <testsuite_hooks.h>
std::mt19937 rng;
diff --git a/libstdc++-v3/testsuite/experimental/optional/77288.cc b/libstdc++-v3/testsuite/experimental/optional/77288.cc
new file mode 100644
index 00000000000..5b6a6c8aa6a
--- /dev/null
+++ b/libstdc++-v3/testsuite/experimental/optional/77288.cc
@@ -0,0 +1,406 @@
+// { dg-options "-std=gnu++14" }
+// { dg-do run }
+
+// Copyright (C) 2016 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 moved_to of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <experimental/optional>
+#include <experimental/any>
+
+using std::experimental::optional;
+
+#include <testsuite_hooks.h>
+
+void test01()
+{
+ optional<optional<int>> nested_element;
+ optional<int> element = {};
+ nested_element = element;
+ VERIFY(nested_element);
+}
+
+template <class T>
+struct service_result
+{
+ static optional<T> get_result()
+ {
+ T sr;
+ return sr;
+ }
+
+ static optional<T> get_result_with_cond(bool cond)
+ {
+ if (cond)
+ return T{};
+ return {};
+ }
+};
+
+void test02()
+{
+ VERIFY(service_result<int>::get_result());
+ VERIFY(service_result<optional<int>>::get_result());
+ VERIFY(service_result<int>::get_result_with_cond(true));
+ VERIFY(service_result<optional<int>>::get_result_with_cond(true));
+ VERIFY(!service_result<int>::get_result_with_cond(false));
+ VERIFY(!service_result<optional<int>>::get_result_with_cond(false));
+}
+
+struct Widget
+{
+ Widget(int) {}
+ Widget(optional<int>) {}
+};
+
+
+void test03()
+{
+ optional<Widget> w;
+ w = optional<int>();
+ VERIFY(w);
+ static_assert(!std::is_assignable<optional<Widget>&,
+ optional<short>>::value);
+ w = optional<optional<int>>();
+ VERIFY(!w);
+ static_assert(!std::is_assignable<optional<Widget>&,
+ optional<optional<short>>>::value);
+
+ optional<Widget> w2{optional<int>()};
+ VERIFY(w2);
+ optional<Widget> w3 = optional<int>();
+ VERIFY(w3);
+ optional<Widget> w4{optional<short>()};
+ VERIFY(w4);
+ static_assert(!std::is_convertible<optional<short>&&,
+ optional<Widget>>::value);
+
+ optional<Widget> w6{optional<optional<int>>()};
+ VERIFY(!w6);
+ optional<Widget> w7 = optional<optional<int>>();
+ VERIFY(!w7);
+ optional<Widget> w8{optional<optional<short>>()};
+ VERIFY(!w8);
+ static_assert(!std::is_convertible<optional<optional<short>>&&,
+ optional<Widget>>::value);
+ optional<Widget> w10{optional<optional<short>>(10)};
+ VERIFY(w10);
+ optional<Widget> w11 = std::experimental::nullopt;
+ VERIFY(!w11);
+ optional<Widget> w12 = {};
+ VERIFY(!w12);
+ optional<Widget> w13{std::experimental::nullopt};
+ VERIFY(!w13);
+ optional<Widget> w14;
+ w14 = {};
+ VERIFY(!w14);
+}
+
+struct Widget2
+{
+ Widget2(int) {}
+ Widget2(optional<int>) {}
+ Widget2& operator=(int) {return *this;}
+ Widget2& operator=(optional<int>) {return *this;}
+};
+
+void test04()
+{
+ optional<Widget2> w;
+ w = optional<int>();
+ VERIFY(w);
+ w = optional<short>();
+ VERIFY(w);
+ w = optional<optional<int>>();
+ VERIFY(!w);
+ w = optional<optional<short>>();
+ VERIFY(!w);
+ w = optional<optional<short>>(10);
+ optional<Widget2> w2 = std::experimental::nullopt;
+ VERIFY(!w2);
+ optional<Widget2> w3 = {};
+ VERIFY(!w3);
+ optional<Widget2> w4{std::experimental::nullopt};
+ VERIFY(!w4);
+ optional<Widget2> w5;
+ w5 = {};
+ VERIFY(!w5);
+}
+
+struct Thingy
+{
+ Thingy(int) {}
+ Thingy(Widget) {}
+};
+
+void test05()
+{
+ optional<Thingy> ot;
+
+ static_assert(!std::is_assignable<optional<Thingy>&,
+ optional<int>>::value);
+ static_assert(std::is_assignable<optional<Thingy>&,
+ optional<short>>::value);
+ static_assert(!std::is_assignable<optional<Thingy>&,
+ optional<optional<int>>>::value);
+ ot = optional<Widget>();
+ VERIFY(!ot);
+ optional<Thingy> ot2{optional<int>()};
+ VERIFY(ot2);
+ static_assert(!std::is_convertible<optional<int>&&,
+ optional<Thingy>>::value);
+ optional<Thingy> ot3{optional<short>()};
+ VERIFY(!ot3);
+ optional<Thingy> ot4 = optional<short>();
+ VERIFY(!ot4);
+
+ optional<Thingy> ot5{optional<optional<int>>()};
+ VERIFY(!ot5);
+ static_assert(!std::is_convertible<optional<optional<int>>&&,
+ optional<Thingy>>::value);
+
+ optional<Thingy> ot7{optional<Widget>()};
+ VERIFY(!ot7);
+ optional<Thingy> ot8 = optional<Widget>();
+ VERIFY(!ot8);
+ static_assert(!std::is_constructible<optional<Thingy>,
+ optional<optional<short>>>::value);
+ static_assert(!std::is_convertible<optional<optional<short>>,
+ optional<Thingy>>::value);
+ static_assert(!std::is_assignable<optional<Thingy>&,
+ optional<optional<short>>>::value);
+ optional<Thingy> ot9 = std::experimental::nullopt;
+ VERIFY(!ot9);
+ optional<Thingy> ot10 = {};
+ VERIFY(!ot10);
+ optional<Thingy> ot11{std::experimental::nullopt};
+ VERIFY(!ot11);
+ optional<Thingy> ot12;
+ ot12 = {};
+ VERIFY(!ot12);
+}
+
+struct RvalueConstructible
+{
+ RvalueConstructible(int) {}
+ RvalueConstructible(optional<int>&&) {}
+};
+
+void test06()
+{
+ optional<int> oi;
+ optional<RvalueConstructible> ori;
+ static_assert(!std::is_assignable<optional<RvalueConstructible>&,
+ optional<int>&>::value);
+ ori = std::move(oi);
+ VERIFY(ori);
+
+ optional<optional<int>> ooi;
+ static_assert(!std::is_assignable<optional<RvalueConstructible>&,
+ optional<optional<int>>&>::value);
+ ori = std::move(ooi);
+ VERIFY(!ori);
+
+ static_assert(!std::is_constructible<optional<RvalueConstructible>,
+ optional<int>&>::value);
+ static_assert(!std::is_convertible<optional<int>&,
+ optional<RvalueConstructible>>::value);
+
+ optional<RvalueConstructible> ori2(std::move(oi));
+ VERIFY(ori2);
+ optional<RvalueConstructible> ori3 = std::move(oi);
+ VERIFY(ori3);
+
+ static_assert(!std::is_constructible<optional<RvalueConstructible>,
+ optional<optional<int>>&>::value);
+ static_assert(!std::is_convertible<optional<optional<int>>&,
+ optional<RvalueConstructible>>::value);
+ optional<RvalueConstructible> ori6(std::move(ooi));
+ VERIFY(!ori6);
+ optional<RvalueConstructible> ori7 = std::move(ooi);
+ VERIFY(!ori7);
+ optional<RvalueConstructible> ori8 = std::experimental::nullopt;
+ VERIFY(!ori8);
+ optional<RvalueConstructible> ori9 = {};
+ VERIFY(!ori9);
+ optional<RvalueConstructible> ori10{std::experimental::nullopt};
+ VERIFY(!ori10);
+ optional<RvalueConstructible> ori11;
+ ori11 = {};
+ VERIFY(!ori11);
+}
+
+struct Thingy2
+{
+ Thingy2(int) {}
+ explicit Thingy2(optional<int>) {}
+ Thingy2(Widget) {}
+};
+
+void test07()
+{
+ optional<Thingy2> ot{optional<int>{}};
+ VERIFY(ot);
+ static_assert(!std::is_convertible<optional<int>,
+ optional<Thingy2>>::value);
+ optional<Thingy2> ot2{optional<short>{}};
+ VERIFY(ot2);
+ static_assert(!std::is_convertible<optional<short>,
+ optional<Thingy2>>::value);
+ optional<Thingy2> ot3{optional<optional<int>>{}};
+ VERIFY(!ot3);
+ static_assert(!std::is_convertible<optional<optional<int>>,
+ optional<Thingy2>>::value);
+ optional<Thingy2> ot4{optional<optional<short>>{}};
+ VERIFY(!ot4);
+ static_assert(!std::is_convertible<optional<optional<short>>,
+ optional<Thingy2>>::value);
+
+ optional<Thingy2> ot5{optional<Widget>{}};
+ VERIFY(!ot5);
+ optional<Thingy2> ot6 = optional<Widget>();
+ VERIFY(!ot6);
+
+ static_assert(!std::is_assignable<optional<Thingy2>&,
+ optional<int>>::value);
+ static_assert(!std::is_assignable<optional<Thingy2>&,
+ optional<short>>::value);
+ static_assert(!std::is_assignable<optional<Thingy2>&,
+ optional<optional<int>>>::value);
+ static_assert(!std::is_assignable<optional<Thingy2>&,
+ optional<optional<short>>>::value);
+ optional<Thingy2> ot7;
+ ot = optional<Widget>();
+ VERIFY(!ot7);
+ optional<Thingy2> ot8 = std::experimental::nullopt;
+ VERIFY(!ot8);
+ optional<Thingy2> ot9 = {};
+ VERIFY(!ot9);
+ optional<Thingy2> ot10{std::experimental::nullopt};
+ VERIFY(!ot10);
+ optional<Thingy2> ot11;
+ ot11 = {};
+ VERIFY(!ot11);
+}
+
+struct Thingy3
+{
+ Thingy3(int) {}
+ template<class... Args,
+ std::enable_if_t<std::is_constructible<Widget, Args&&...>::value,
+ bool> = true>
+ explicit Thingy3(Args&&... args) {}
+ Thingy3(Widget) {}
+};
+
+void test08()
+{
+ optional<Thingy3> ot{optional<int>{}};
+ VERIFY(ot);
+ static_assert(!std::is_convertible<optional<int>,
+ optional<Thingy3>>::value);
+ optional<Thingy3> ot2{optional<short>{}};
+ VERIFY(ot2);
+ static_assert(!std::is_convertible<optional<short>,
+ optional<Thingy3>>::value);
+ optional<Thingy3> ot3{optional<optional<int>>{}};
+ VERIFY(!ot3);
+ static_assert(!std::is_convertible<optional<optional<int>>,
+ optional<Thingy3>>::value);
+ optional<Thingy3> ot4{optional<optional<short>>{}};
+ VERIFY(!ot4);
+ static_assert(!std::is_convertible<optional<optional<short>>,
+ optional<Thingy3>>::value);
+
+ optional<Thingy3> ot5{optional<Widget>{}};
+ VERIFY(!ot5);
+ optional<Thingy3> ot6 = optional<Widget>();
+ VERIFY(!ot6);
+
+ static_assert(!std::is_assignable<optional<Thingy3>&,
+ optional<int>>::value);
+ static_assert(!std::is_assignable<optional<Thingy3>&,
+ optional<short>>::value);
+ static_assert(!std::is_assignable<optional<Thingy3>&,
+ optional<optional<int>>>::value);
+ static_assert(!std::is_assignable<optional<Thingy3>&,
+ optional<optional<short>>>::value);
+ optional<Thingy3> ot7;
+ ot = optional<Widget>();
+ VERIFY(!ot7);
+ optional<Thingy3> ot8 = std::experimental::nullopt;
+ VERIFY(!ot8);
+ optional<Thingy3> ot9 = {};
+ VERIFY(!ot9);
+ optional<Thingy3> ot10{std::experimental::nullopt};
+ VERIFY(!ot10);
+ optional<Thingy3> ot11;
+ ot11 = {};
+ VERIFY(!ot11);
+}
+
+void test09()
+{
+ std::experimental::any a = 42;
+ optional<std::experimental::any> oa2 = a;
+ VERIFY(oa2);
+ VERIFY(std::experimental::any_cast<int>(*oa2) == 42);
+ optional<std::experimental::any> oa3 = oa2;
+ VERIFY(oa3);
+ VERIFY(std::experimental::any_cast<int>(*oa3) == 42);
+ optional<std::experimental::any> oa4{oa2};
+ VERIFY(oa4);
+ VERIFY(std::experimental::any_cast<int>(*oa4) == 42);
+ optional<std::experimental::any> oa5(oa2);
+ VERIFY(oa5);
+ VERIFY(std::experimental::any_cast<int>(*oa5) == 42);
+ optional<std::experimental::any> oa6;
+ VERIFY(!oa6);
+ optional<std::experimental::any> oa7 = oa6;
+ VERIFY(!oa7);
+ optional<std::experimental::any> oa8{oa6};
+ VERIFY(!oa8);
+ optional<std::experimental::any> oa9(oa6);
+ VERIFY(!oa9);
+}
+
+void test10()
+{
+ struct X {};
+ optional<int> oi(std::experimental::in_place);
+ oi = {};
+ VERIFY(bool(oi) == false);
+ optional<X> ot(std::experimental::in_place);
+ ot = {};
+ VERIFY(bool(ot) == false);
+ optional<int> oi2(std::experimental::in_place);
+ short int si = 6;
+ oi2 = si;
+}
+
+int main()
+{
+ test01();
+ test02();
+ test03();
+ test04();
+ test05();
+ test06();
+ test07();
+ test08();
+ test09();
+ test10();
+}
diff --git a/libstdc++-v3/testsuite/experimental/optional/assignment/5.cc b/libstdc++-v3/testsuite/experimental/optional/assignment/5.cc
index 0ee9740a6e6..42c1c27c886 100644
--- a/libstdc++-v3/testsuite/experimental/optional/assignment/5.cc
+++ b/libstdc++-v3/testsuite/experimental/optional/assignment/5.cc
@@ -19,6 +19,7 @@
// <http://www.gnu.org/licenses/>.
#include <experimental/optional>
+#include <vector>
#include <testsuite_hooks.h>
int counter = 0;
@@ -62,5 +63,15 @@ int main()
VERIFY( !o );
}
+ {
+ std::experimental::optional<std::vector<int>> ovi{{1, 2, 3}};
+ VERIFY(ovi->size() == 3);
+ VERIFY((*ovi)[0] == 1 && (*ovi)[1] == 2 && (*ovi)[2] == 3);
+ ovi = {4, 5, 6, 7};
+ VERIFY(ovi->size() == 4);
+ VERIFY((*ovi)[0] == 4 && (*ovi)[1] == 5 &&
+ (*ovi)[2] == 6 && (*ovi)[3] == 7);
+ }
+
VERIFY( counter == 0 );
}
diff --git a/libstdc++-v3/testsuite/experimental/optional/cons/77727.cc b/libstdc++-v3/testsuite/experimental/optional/cons/77727.cc
new file mode 100644
index 00000000000..efb2520a709
--- /dev/null
+++ b/libstdc++-v3/testsuite/experimental/optional/cons/77727.cc
@@ -0,0 +1,51 @@
+// { dg-options "-std=gnu++14" }
+// { dg-do run }
+
+// Copyright (C) 2016 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 moved_to of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <experimental/optional>
+#include <testsuite_hooks.h>
+
+
+struct NonTransferable
+{
+ int x;
+ NonTransferable(int x) : x(x) {}
+ NonTransferable(NonTransferable&&) = delete;
+ NonTransferable& operator=(NonTransferable&&) = delete;
+ operator int() {return x;}
+};
+
+int main()
+{
+ std::experimental::optional<int> oi;
+ std::experimental::optional<NonTransferable> ot(std::move(oi));
+ VERIFY(!ot);
+
+ std::experimental::optional<int> oi2;
+ std::experimental::optional<NonTransferable> ot2(oi2);
+ VERIFY(!ot);
+
+ std::experimental::optional<int> oi3{42};
+ std::experimental::optional<NonTransferable> ot3(std::move(oi3));
+ VERIFY(ot3 && *ot3 == 42);
+
+ std::experimental::optional<int> oi4{666};
+ std::experimental::optional<NonTransferable> ot4(oi4);
+ VERIFY(ot4 && *ot4 == 666);
+}
diff --git a/libstdc++-v3/testsuite/experimental/optional/cons/value.cc b/libstdc++-v3/testsuite/experimental/optional/cons/value.cc
index 123a89ede04..3006d11355f 100644
--- a/libstdc++-v3/testsuite/experimental/optional/cons/value.cc
+++ b/libstdc++-v3/testsuite/experimental/optional/cons/value.cc
@@ -255,4 +255,31 @@ int main()
std::experimental::optional<X> ox4;
ox4 = oi;
}
+
+ {
+ std::experimental::optional<std::experimental::optional<int>> ooi =
+ std::experimental::optional<int>();
+ VERIFY(bool(ooi));
+ ooi = std::experimental::optional<int>();
+ VERIFY(bool(ooi));
+ ooi = std::experimental::optional<int>(42);
+ VERIFY(bool(ooi));
+ VERIFY(bool(*ooi));
+ std::experimental::optional<std::experimental::optional<int>> ooi2 =
+ std::experimental::optional<short>();
+ VERIFY(bool(ooi2));
+ ooi2 = std::experimental::optional<short>();
+ VERIFY(bool(ooi2));
+ ooi2 = std::experimental::optional<short>(6);
+ VERIFY(bool(ooi2));
+ VERIFY(bool(*ooi2));
+ std::experimental::optional<std::experimental::optional<int>> ooi3 =
+ std::experimental::optional<int>(42);
+ VERIFY(bool(ooi3));
+ VERIFY(bool(*ooi3));
+ std::experimental::optional<std::experimental::optional<int>> ooi4 =
+ std::experimental::optional<short>(6);
+ VERIFY(bool(ooi4));
+ VERIFY(bool(*ooi4));
+ }
}