diff options
349 files changed, 15964 insertions, 7319 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cf4cfabeb82..01b10357fb9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,523 @@ -2014-01-03 Bingfeng Mei <bmei@broadcom.com> +2014-01-13 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm.h (MAX_CONDITIONAL_EXECUTE): Fix typo in description. + +2014-01-13 Eric Botcazou <ebotcazou@adacore.com> + + * builtins.c (get_object_alignment_2): Minor tweak. + * tree-ssa-loop-ivopts.c (may_be_unaligned_p): Rewrite. + +2014-01-13 Christian Bruel <christian.bruel@st.com> + + * config/sh/sh-mem.cc (sh_expand_cmpnstr): Unroll small sizes and + optimized non constant lengths. + +2014-01-13 Jakub Jelinek <jakub@redhat.com> + + PR libgomp/59194 + * omp-low.c (expand_omp_atomic_pipeline): Expand the initial + load as __atomic_load_N if possible. + +2014-01-11 David Edelsohn <dje.gcc@gmail.com> + + * config/rs6000/rs6000.c (rs6000_expand_mtfsf_builtin): Remove + target parameter. + (rs6000_expand_builtin): Adjust call. + +2014-01-11 David Edelsohn <dje.gcc@gmail.com> + + PR target/58115 + * config/rs6000/rs6000.h (SWITCHABLE_TARGET): Define. + * config/rs6000/rs6000.c: Include target-globals.h. + (rs6000_set_current_function): Instead of doing target_reinit + unconditionally, use save_target_globals_default_opts and + restore_target_globals. + + * config/rs6000/rs6000-builtin.def (mffs, mtfsf): Add builtins for + FPSCR. + * config/rs6000/rs6000.c (rs6000_expand_mtfsf_builtin): New. + (rs6000_expand_builtin): Handle mffs and mtfsf. + (rs6000_init_builtins): Define mffs and mtfsf. + * config/rs6000/rs6000.md (UNSPECV_MFFS, UNSPECV_MTFSF): New constants. + (rs6000_mffs): New pattern. + (rs6000_mtfsf): New pattern. + +2014-01-11 Bin Cheng <bin.cheng@arm.com> + + * tree-ssa-loop-ivopts.c (iv_ca_narrow): New parameter. + Start narrowing with START. Apply candidate-use pair + and check overall cost in narrowing. + (iv_ca_prune): Pass new argument. + +2014-01-10 Jeff Law <law@redhat.com> + + PR middle-end/59743 + * ree.c (combine_reaching_defs): Ensure the defining statement + occurs before the extension when optimizing extensions with + different source and destination hard registers. + +2014-01-10 Jan Hubicka <jh@suse.cz> + + PR ipa/58585 + * ipa-devirt.c (build_type_inheritance_graph): Also add types of vtables + into the type inheritance graph. + +2014-01-10 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/59754 + * ree.c (combine_reaching_defs): Disallow !SCALAR_INT_MODE_P + modes in the REGNO != REGNO case. + +2014-01-10 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + * config/rs6000/rs6000-builtin.def: Fix pasto for VPKSDUS. + +2014-01-10 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/59745 + * tree-predcom.c (tree_predictive_commoning_loop): Call + free_affine_expand_cache if giving up because components is NULL. + + * target-globals.c (save_target_globals): Allocate < 4KB structs using + GC in payload of target_globals struct instead of allocating them on + the heap and the larger structs separately using GC. + * target-globals.h (struct target_globals): Make regs, hard_regs, + reload, expmed, ira, ira_int and lra_fields GTY((atomic)) instead + of GTY((skip)) and change type to void *. + (reset_target_globals): Cast loads from those fields to corresponding + types. + +2014-01-10 Steve Ellcey <sellcey@mips.com> + + PR plugins/59335 + * Makefile.in (PLUGIN_HEADERS): Add gimplify.h, gimple-iterator.h, + gimple-ssa.h, fold-const.h, tree-cfg.h, tree-into-ssa.h, + tree-ssanames.h, print-tree.h, varasm.h, and context.h. + +2014-01-10 Richard Earnshaw <rearnsha@arm.com> + + PR target/59744 + * aarch64-modes.def (CC_Zmode): New flags mode. + * aarch64.c (aarch64_select_cc_mode): Only allow NEG when the condition + represents an equality. + (aarch64_get_condition_code): Handle CC_Zmode. + * aarch64.md (compare_neg<mode>): Restrict to equality operations. + +2014-01-10 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> + + * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC + extraction in good case. + +2014-01-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/59374 + * tree-vect-slp.c (vect_slp_analyze_bb_1): Move dependence + checking after SLP discovery. Mark stmts not participating + in any SLP instance properly. + +2014-01-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm.c (arm_new_rtx_costs): Use destination mode + when handling a SET rtx. + +2014-01-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm-cores.def (cortex-a53): Specify FL_CRC32. + (cortex-a57): Likewise. + (cortex-a57.cortex-a53): Likewise. Remove redundant flags. + +2014-01-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * config/arm/arm.c (arm_init_iwmmxt_builtins): Skip + non-iwmmxt builtins. + +2014-01-10 Jan Hubicka <hubicka@ucw.cz> + + PR ipa/58252 + PR ipa/59226 + * ipa-devirt.c record_target_from_binfo): Take as argument + stack of binfos and lookup matching one for virtual inheritance. + (possible_polymorphic_call_targets_1): Update. + +2014-01-10 Huacai Chen <chenhc@lemote.com> + + * config/mips/driver-native.c (host_detect_local_cpu): Handle new + kernel strings for Loongson-2E/2F/3A. + +2014-01-10 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/59670 + * tree-vect-data-refs.c (vect_analyze_data_refs): Check + is_gimple_call before calling gimple_call_internal_p. + +2014-01-09 Steve Ellcey <sellcey@mips.com> + + * Makefile.in (TREE_FLOW_H): Remove. + (TREE_SSA_H): Add file names from tree-flow.h. + * doc/tree-ssa.texi (Annotations): Remove reference to tree-flow.h + * tree.h: Remove tree-flow.h reference. + * hash-table.h: Remove tree-flow.h reference. + * tree-ssa-loop-niter.c (dump_affine_iv): Replace tree-flow.h + reference with tree-ssa-loop.h. + +2014-01-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + * doc/invoke.texi: Add -maltivec={be,le} options, and document + default element-order behavior for -maltivec. + * config/rs6000/rs6000.opt: Add -maltivec={be,le} options. + * config/rs6000/rs6000.c (rs6000_option_override_internal): Ensure + that -maltivec={le,be} implies -maltivec; disallow -maltivec=le + when targeting big endian, at least for now. + * config/rs6000/rs6000.h: Add #define of VECTOR_ELT_ORDER_BIG. + +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/47735 + * cfgexpand.c (expand_one_var): For SSA_NAMEs, if the underlying + var satisfies use_register_for_decl, just take into account type + alignment, rather than decl alignment. + + PR tree-optimization/59622 + * gimple-fold.c (gimple_fold_call): Fix a typo in message. For + __builtin_unreachable replace the OBJ_TYPE_REF call with a call to + __builtin_unreachable and add if needed a setter of the lhs SSA_NAME. + Don't devirtualize for inplace at all. For targets.length () == 1, + if the call is noreturn and cfun isn't in SSA form yet, clear lhs. + +2014-01-09 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.md (cpu): Remove the unused btver1. + +2014-01-09 H.J. Lu <hongjiu.lu@intel.com> + + * gdbasan.in: Put a breakpoint on __sanitizer::Report. + +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + PR target/58115 + * tree-core.h (struct target_globals): New forward declaration. + (struct tree_target_option): Add globals field. + * tree.h (TREE_TARGET_GLOBALS): Define. + (prepare_target_option_nodes_for_pch): New prototype. + * target-globals.h (struct target_globals): Define even if + !SWITCHABLE_TARGET. + * tree.c (prepare_target_option_node_for_pch, + prepare_target_option_nodes_for_pch): New functions. + * config/i386/i386.h (SWITCHABLE_TARGET): Define. + * config/i386/i386.c: Include target-globals.h. + (ix86_set_current_function): Instead of doing target_reinit + unconditionally, use save_target_globals_default_opts and + restore_target_globals. + +2014-01-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/59715 + * tree-cfg.h (split_critical_edges): Declare. + * tree-cfg.c (split_critical_edges): Export. + * tree-ssa-sink.c (execute_sink_code): Split critical edges. + +2014-01-09 Max Ostapenko <m.ostapenko@partner.samsung.com> + + * cfgexpand.c (expand_stack_vars): Optionally disable + asan stack protection. + (expand_used_vars): Likewise. + (partition_stack_vars): Likewise. + * asan.c (asan_emit_stack_protection): Optionally disable + after return stack usage. + (instrument_derefs): Optionally disable memory + access instrumentation. + (instrument_builtin_call): Likewise. + (instrument_strlen_call): Likewise. + (asan_protect_global): Optionally disable + global variables protection. + * doc/invoke.texi: Added doc for new options. + * params.def: Added new options. + * params.h: Likewise. + +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/59724 + * ifcvt.c (cond_exec_process_if_block): Don't call + flow_find_head_matching_sequence with 0 longest_match. + * cfgcleanup.c (flow_find_head_matching_sequence): Count even + non-active insns if !stop_after. + (try_head_merge_bb): Revert 2014-01-07 changes. + +2014-01-08 Jeff Law <law@redhat.com> + + * ree.c (get_sub_rtx): New function, extracted from... + (merge_def_and_ext): Here. + (combine_reaching_defs): Use get_sub_rtx. + +2014-01-08 Eric Botcazou <ebotcazou@adacore.com> + + * cgraph.h (varpool_variable_node): Do not choke on null node. + +2014-01-08 Catherine Moore <clm@codesourcery.com> + + * config/mips/mips.md (simple_return): Attempt to use JRC for microMIPS. + * config/mips/mips.h (MIPS_CALL): Attempt to use JALS for microMIPS. + +2014-01-08 Richard Sandiford <rdsandiford@googlemail.com> + + PR rtl-optimization/59137 + * reorg.c (steal_delay_list_from_target): Call update_block for + elided insns. + (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise. + +2014-01-08 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Remove + two duplicate entries. + +2014-01-08 Richard Sandiford <rdsandiford@googlemail.com> + + Revert: + 2012-10-07 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips.c (mips_truncated_op_cost): New function. + (mips_rtx_costs): Adjust test for BADDU. + * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands. + + 2012-10-02 Richard Sandiford <rdsandiford@googlemail.com> + + * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into... + (*baddu_si): ...this new pattern. + +2014-01-08 Jakub Jelinek <jakub@redhat.com> + + PR ipa/59722 + * ipa-prop.c (ipa_analyze_params_uses): Ignore uses in debug stmts. + +2014-01-08 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR middle-end/57748 + * expr.h (expand_expr_real, expand_expr_real_1): Add new parameter + inner_reference_p. + (expand_expr, expand_normal): Adjust. + * expr.c (expand_expr_real, expand_expr_real_1): Add new parameter + inner_reference_p. Use inner_reference_p to expand inner references. + (store_expr): Adjust. + * cfgexpand.c (expand_call_stmt): Adjust. + +2014-01-08 Rong Xu <xur@google.com> + + * gcov-io.c (gcov_var): Move from gcov-io.h. + (gcov_position): Ditto. + (gcov_is_error): Ditto. + (gcov_rewrite): Ditto. + * gcov-io.h: Refactor. Move gcov_var to gcov-io.h, and libgcov + only part to libgcc/libgcov.h. + +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR middle-end/59669 + * omp-low.c (simd_clone_adjust): Don't crash if def is NULL. + +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR sanitizer/59667 + * ubsan.c (ubsan_type_descriptor): Call strip_array_types on type2. + +2014-01-08 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/59649 + * stor-layout.c (get_mode_bounds): For BImode return + 0 and STORE_FLAG_VALUE. + +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59630 + * gimple.h (is_gimple_builtin_call): Remove. + (gimple_builtin_call_types_compatible_p): New. + (gimple_call_builtin_p): New overload. + * gimple.c (is_gimple_builtin_call): Remove. + (validate_call): Rename to ... + (gimple_builtin_call_types_compatible_p): ... this and export. Also + check return types. + (validate_type): New static function. + (gimple_call_builtin_p): New overload and adjust. + * gimple-fold.c (gimple_fold_builtin): Fold the return value. + (gimple_fold_call): Likewise. Use gimple_call_builtin_p. + (gimple_fold_stmt_to_constant_1): Likewise. + * tsan.c (instrument_gimple): Use gimple_call_builtin_p. + +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59471 + * gimplify.c (gimplify_expr): Gimplify register-register type + VIEW_CONVERT_EXPRs to separate stmts. + +2014-01-07 Jeff Law <law@redhat.com> + + PR middle-end/53623 + * ree.c (combine_set_extension): Handle case where source + and destination registers in an extension insn are different. + (combine_reaching_defs): Allow source and destination + registers in extension to be different under limited + circumstances. + (add_removable_extension): Remove restriction that the + source and destination registers in the extension are the + same. + (find_and_remove_re): Emit a copy from the extension's + destination to its source after the defining insn if + the source and destination registers are different. + + PR middle-end/59285 + * ifcvt.c (merge_if_block): If we are merging a block with more than + one successor with a block with no successors, remove any BARRIER + after the second block. + +2014-01-07 Dan Xio Qiang <ziyan01@163.com> + + * hw-doloop.c (reorg_loops): Release the bitmap obstack. + +2014-01-07 John David Anglin <danglin@gcc.gnu.org> + + PR target/59652 + * config/pa/pa.c (pa_legitimate_address_p): Return false before reload + for 14-bit register offsets when INT14_OK_STRICT is false. + +2014-01-07 Roland Stigge <stigge@antcom.de> + Michael Meissner <meissner@linux.vnet.ibm.com> + + PR 57386/target + * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p): + Only check TFmode for SPE constants. Don't check TImode or + TDmode. + +2014-01-07 James Greenhalgh <james.greenhalgh@arm.com> + + * config/aarch64/aarch64-elf.h (ASM_SPEC): Remove identity spec for + -mcpu. + +2014-01-07 Yufeng Zhang <yufeng.zhang@arm.com> + + * config/arm/arm.c (arm_expand_neon_args): Call expand_expr + with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned + rtx is const0_rtx or not. + +2014-01-07 Richard Sandiford <rdsandiford@googlemail.com> + + PR target/58115 + * target-globals.c (save_target_globals): Remove this_fn_optab + handling. + * toplev.c: Include optabs.h. + (target_reinit): Temporarily restore the global options if another + set of options are in force. + +2014-01-07 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/58668 + * cfgcleanup.c (flow_find_cross_jump): Don't count + any jumps if dir_p is NULL. Remove p1 variable, use active_insn_p + to determine what is counted. + (flow_find_head_matching_sequence): Use active_insn_p to determine + what is counted. + (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence + counting change. + * ifcvt.c (count_bb_insns): Use active_insn_p && !JUMP_P to + determine what is counted. + + PR tree-optimization/59643 + * tree-predcom.c (split_data_refs_to_components): If one dr is + read and one write, determine_offset fails and the write isn't + in the bad component, just put the read into the bad component. + +2014-01-07 Mike Stump <mikestump@comcast.net> + Jakub Jelinek <jakub@redhat.com> + + PR pch/59436 + * tree-core.h (struct tree_optimization_option): Change optabs + type from unsigned char * to void *. + * optabs.c (init_tree_optimization_optabs): Adjust + TREE_OPTIMIZATION_OPTABS initialization. + +2014-01-06 Jakub Jelinek <jakub@redhat.com> + + PR target/59644 + * config/i386/i386.h (struct machine_function): Add + no_drap_save_restore field. + * config/i386/i386.c (ix86_save_reg): Use + !cfun->machine->no_drap_save_restore instead of + crtl->stack_realign_needed. + (ix86_finalize_stack_realign_flags): Don't clear drap_reg unless + this function clears frame_pointer_needed. Set + cfun->machine->no_drap_save_restore if clearing frame_pointer_needed + and DRAP reg is needed. + +2014-01-06 Marek Polacek <polacek@redhat.com> + + PR c/57773 + * doc/implement-c.texi: Mention that other integer types are + permitted as bit-field types in strictly conforming mode. + +2014-01-06 Felix Yang <fei.yang0953@gmail.com> + + * modulo-sched.c (schedule_reg_moves): Clear distance1_uses if it + is newly allocated. + +2014-01-06 Richard Earnshaw <rearnsha@arm.com> + + * aarch64.c (aarch64_rtx_costs): Fix cost calculation for MADD. + +2014-01-06 Martin Jambor <mjambor@suse.cz> + + PR ipa/59008 + * ipa-cp.c (ipcp_discover_new_direct_edges): Changed param_index type + to int. + * ipa-prop.c (ipa_print_node_params): Fix indentation. + +2014-01-06 Eric Botcazou <ebotcazou@adacore.com> + + PR debug/59350 + PR debug/59510 + * var-tracking.c (add_stores): Preserve the value of the source even if + we don't record the store. + +2014-01-06 Terry Guo <terry.guo@arm.com> + + * config.gcc (arm*-*-*): Check --with-arch against arm-arches.def. + +2014-01-05 Iain Sandoe <iain@codesourcery.com> + + PR bootstrap/59541 + * config/darwin.c (darwin_function_section): Adjust return values to + correspond to optimisation changes made in r206070. + +2014-01-05 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_data_alignment): Calculate max_align + from prefetch_block tune setting. + (nocona_cost): Correct size of prefetch block to 64. + +2014-01-04 Eric Botcazou <ebotcazou@adacore.com> + + * config/arm/arm.c (arm_get_frame_offsets): Revamp long lines. + (arm_expand_epilogue_apcs_frame): Take into account the number of bytes + used to save the static chain register in the computation of the offset + from which the FP registers need to be restored. + +2014-01-04 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/59519 + * tree-vect-loop-manip.c (slpeel_update_phi_nodes_for_guard1): Don't + ICE if get_current_def (current_new_name) is already non-NULL, as long + as it is a phi result of some other phi in *new_exit_bb that has + the same argument. + + * config/i386/sse.md (avx512f_load<mode>_mask): Emit vmovup{s,d} + or vmovdqu* for misaligned_operand. + (<sse>_loadu<ssemodesuffix><avxsizesuffix><mask_name>, + <sse2_avx_avx512f>_loaddqu<mode><mask_name>): Handle <mask_applied>. + * config/i386/i386.c (ix86_expand_special_args_builtin): Set + aligned_mem for AVX512F masked aligned load and store builtins and for + non-temporal moves. + +2014-01-03 Bingfeng Mei <bmei@broadcom.com> PR tree-optimization/59651 - * tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): + * tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Address range for negative step should be added by TYPE_SIZE_UNIT. 2014-01-03 Andreas Schwab <schwab@linux-m68k.org> @@ -79,20 +595,21 @@ 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> - Update copyright years + Update copyright years. 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> * common/config/arc/arc-common.c, config/arc/arc-modes.def, config/arc/arc-protos.h, config/arc/arc.c, config/arc/arc.h, - config/arc/arc.md, config/arc/arc.opt, config/arm/arm_neon_builtins.def, - config/arm/crypto.def, config/i386/avx512cdintrin.h, - config/i386/avx512erintrin.h, config/i386/avx512fintrin.h, - config/i386/avx512pfintrin.h, config/i386/btver2.md, - config/i386/shaintrin.h, config/i386/slm.md, config/linux-protos.h, - config/linux.c, config/winnt-c.c, diagnostic-color.c, - diagnostic-color.h, gimple-ssa-isolate-paths.c, vtable-verify.c, - vtable-verify.h: Use the standard form for the copyright notice. + config/arc/arc.md, config/arc/arc.opt, + config/arm/arm_neon_builtins.def, config/arm/crypto.def, + config/i386/avx512cdintrin.h, config/i386/avx512erintrin.h, + config/i386/avx512fintrin.h, config/i386/avx512pfintrin.h, + config/i386/btver2.md, config/i386/shaintrin.h, config/i386/slm.md, + config/linux-protos.h, config/linux.c, config/winnt-c.c, + diagnostic-color.c, diagnostic-color.h, gimple-ssa-isolate-paths.c, + vtable-verify.c, vtable-verify.h: Use the standard form for the + copyright notice. 2014-01-02 Tobias Burnus <burnus@net-b.de> diff --git a/gcc/ChangeLog-2013 b/gcc/ChangeLog-2013 index 2ffd9593b54..7cf3c997752 100644 --- a/gcc/ChangeLog-2013 +++ b/gcc/ChangeLog-2013 @@ -62,19 +62,19 @@ (_mm_roundscale_ss): Ditto. (_mm_roundscale_sd): Ditto. * config/i386/i386-builtin-types.def: New types to support - new built-ins: <V2DF, V2DF, V2DF, INT, INT>, <V4SF, V4SF, V4SF, INT, INT>, - <(V4SF, V4SF, V2DF, INT>, <V2DF, V2DF, V4SF, INT>, - <V4SF, V4SF, V4SF, V4SF, IN>. - * config/i386/i386.c (enum ix86_builtins): Add IX86_BUILTIN_ADDSD_ROUND, - IX86_BUILTIN_ADDSS_ROUND, IX86_BUILTIN_CVTSD2SS_ROUND, - IX86_BUILTIN_CVTSS2SD_ROUND, IX86_BUILTIN_DIVSD_ROUND, - IX86_BUILTIN_GETEXPSD128, IX86_BUILTIN_DIVSS_ROUND, - IX86_BUILTIN_GETEXPSS128, IX86_BUILTIN_GETMANTSD128, - IX86_BUILTIN_GETMANTSS128, IX86_BUILTIN_MAXSD_ROUND, - IX86_BUILTIN_MAXSS_ROUND, IX86_BUILTIN_MINSD_ROUND, - IX86_BUILTIN_MINSS_ROUND, IX86_BUILTIN_MULSD_ROUND, - IX86_BUILTIN_MULSS_ROUND, IX86_BUILTIN_RCP14SD, - IX86_BUILTIN_RCP14SS, IX86_BUILTIN_RNDSCALESD, + new built-ins: <V2DF, V2DF, V2DF, INT, INT>, + <V4SF, V4SF, V4SF, INT, INT>, <(V4SF, V4SF, V2DF, INT>, + <V2DF, V2DF, V4SF, INT>, <V4SF, V4SF, V4SF, V4SF, IN>. + * config/i386/i386.c (enum ix86_builtins): Add + IX86_BUILTIN_ADDSD_ROUND, IX86_BUILTIN_ADDSS_ROUND, + IX86_BUILTIN_CVTSD2SS_ROUND, IX86_BUILTIN_CVTSS2SD_ROUND, + IX86_BUILTIN_DIVSD_ROUND, IX86_BUILTIN_GETEXPSD128, + IX86_BUILTIN_DIVSS_ROUND, IX86_BUILTIN_GETEXPSS128, + IX86_BUILTIN_GETMANTSD128, IX86_BUILTIN_GETMANTSS128, + IX86_BUILTIN_MAXSD_ROUND, IX86_BUILTIN_MAXSS_ROUND, + IX86_BUILTIN_MINSD_ROUND, IX86_BUILTIN_MINSS_ROUND, + IX86_BUILTIN_MULSD_ROUND, IX86_BUILTIN_MULSS_ROUND, + IX86_BUILTIN_RCP14SD, IX86_BUILTIN_RCP14SS, IX86_BUILTIN_RNDSCALESD, IX86_BUILTIN_RNDSCALESS, IX86_BUILTIN_RSQRT14SD, IX86_BUILTIN_RSQRT14SS, IX86_BUILTIN_SCALEFSD, IX86_BUILTIN_SCALEFSS, IX86_BUILTIN_SQRTSD_ROUND, @@ -752,7 +752,6 @@ (ix86_expand_int_vcond): Ditto. (ix86_expand_vec_perm): Ditto. (ix86_expand_sse_unpack): Ditto. - (ix86_constant_alignment): Ditto. (ix86_builtin_vectorized_function): Ditto. (ix86_vectorize_builtin_gather): Ditto. (avx_vpermilp_parallel): Ditto. @@ -773,15 +772,15 @@ (ix86_autovectorize_vector_sizes): Ditto. (ix86_expand_vec_perm_vpermi2): New. (ix86_vector_duplicate_value): Ditto. - (IX86_BUILTIN_SQRTPD512, IX86_BUILTIN_EXP2PS, IX86_BUILTIN_SQRTPS_NR512, - IX86_BUILTIN_GATHER3ALTDIV16SF, IX86_BUILTIN_GATHER3ALTDIV16SI, - IX86_BUILTIN_GATHER3ALTSIV8DF, IX86_BUILTIN_GATHER3ALTSIV8DI, - IX86_BUILTIN_GATHER3DIV16SF, IX86_BUILTIN_GATHER3DIV16SI, - IX86_BUILTIN_GATHER3DIV8DF, IX86_BUILTIN_GATHER3DIV8DI, - IX86_BUILTIN_GATHER3SIV16SF, IX86_BUILTIN_GATHER3SIV16SI, - IX86_BUILTIN_GATHER3SIV8DF, IX86_BUILTIN_CEILPD_VEC_PACK_SFIX512, - IX86_BUILTIN_CPYSGNPS512, IX86_BUILTIN_CPYSGNPD512, - IX86_BUILTIN_FLOORPD_VEC_PACK_SFIX512, + (IX86_BUILTIN_SQRTPD512, IX86_BUILTIN_EXP2PS, + IX86_BUILTIN_SQRTPS_NR512, IX86_BUILTIN_GATHER3ALTDIV16SF, + IX86_BUILTIN_GATHER3ALTDIV16SI, IX86_BUILTIN_GATHER3ALTSIV8DF, + IX86_BUILTIN_GATHER3ALTSIV8DI, IX86_BUILTIN_GATHER3DIV16SF, + IX86_BUILTIN_GATHER3DIV16SI, IX86_BUILTIN_GATHER3DIV8DF, + IX86_BUILTIN_GATHER3DIV8DI, IX86_BUILTIN_GATHER3SIV16SF, + IX86_BUILTIN_GATHER3SIV16SI, IX86_BUILTIN_GATHER3SIV8DF, + IX86_BUILTIN_CEILPD_VEC_PACK_SFIX512, IX86_BUILTIN_CPYSGNPS512, + IX86_BUILTIN_CPYSGNPD512, IX86_BUILTIN_FLOORPD_VEC_PACK_SFIX512, IX86_BUILTIN_ROUNDPD_AZ_VEC_PACK_SFIX512): Ditto. * config/i386/sse.md (*mov<mode>_internal): Disable SSE typeless stores vectors > 128bit (AVX*). @@ -816,10 +815,8 @@ * config/nios2/constraints.md: New file. * config/nios2/t-nios2: New file. * common/config/nios2/nios2-common.c: New file. - * doc/invoke.texi (Nios II options): Document Nios II specific - options. - * doc/md.texi (Nios II family): Document Nios II specific - constraints. + * doc/invoke.texi (Nios II options): Document Nios II specific options. + * doc/md.texi (Nios II family): Document Nios II specific constraints. * doc/extend.texi (Function Specific Option Pragmas): Document Nios II supported target pragma functionality. @@ -1076,8 +1073,8 @@ 2013-12-26 Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com> - * config/i386/i386.c (get_builtin_code_for_version): Rename AMD - CPU names M_AMD_BOBCAT to M_AMD_BTVER1 and M_AMD_JAGUAR + * config/i386/i386.c (get_builtin_code_for_version): Rename AMD + CPU names M_AMD_BOBCAT to M_AMD_BTVER1 and M_AMD_JAGUAR to M_AMD_BTVER2. (processor_model): Likewise. (arch_names_table): Likewise. @@ -3857,12 +3854,6 @@ targets like arm-none-eabi. * expr.c (expand_assignment): Handle normal fields like bit regions. -2013-12-02 Bernd Edlinger <bernd.edlinger@hotmail.de> - - PR target/58115 - * function.c (invoke_set_current_function_hook): Call - targetm.set_current_function after setting this_fn_optabs. - 2013-12-02 Richard Biener <rguenther@suse.de> PR tree-optimization/59139 diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index c88e6a62ab2..ee2701aaa83 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20140103 +20140113 diff --git a/gcc/Makefile.in b/gcc/Makefile.in index b9d84b24f4e..7926bd7584f 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -929,11 +929,10 @@ CPP_ID_DATA_H = $(CPPLIB_H) $(srcdir)/../libcpp/include/cpp-id-data.h CPP_INTERNAL_H = $(srcdir)/../libcpp/internal.h $(CPP_ID_DATA_H) TREE_DUMP_H = tree-dump.h $(SPLAY_TREE_H) $(DUMPFILE_H) TREE_PASS_H = tree-pass.h $(TIMEVAR_H) $(DUMPFILE_H) -TREE_FLOW_H = tree-flow.h tree-flow-inline.h tree-ssa-operands.h \ +TREE_SSA_H = tree-ssa.h tree-ssa-operands.h \ $(BITMAP_H) sbitmap.h $(BASIC_BLOCK_H) $(GIMPLE_H) \ $(HASHTAB_H) $(CGRAPH_H) $(IPA_REFERENCE_H) \ tree-ssa-alias.h wide-int.h -TREE_SSA_H = tree-ssa.h $(TREE_FLOW_H) PRETTY_PRINT_H = pretty-print.h $(INPUT_H) $(OBSTACK_H) TREE_PRETTY_PRINT_H = tree-pretty-print.h $(PRETTY_PRINT_H) GIMPLE_PRETTY_PRINT_H = gimple-pretty-print.h $(TREE_PRETTY_PRINT_H) @@ -3123,7 +3122,9 @@ PLUGIN_HEADERS = $(TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ cppdefault.h flags.h $(MD5_H) params.def params.h prefix.h tree-inline.h \ $(GIMPLE_PRETTY_PRINT_H) realmpfr.h \ $(IPA_PROP_H) $(TARGET_H) $(RTL_H) $(TM_P_H) $(CFGLOOP_H) $(EMIT_RTL_H) \ - version.h stringpool.h + version.h stringpool.h gimplify.h gimple-iterator.h gimple-ssa.h \ + fold-const.h tree-cfg.h tree-into-ssa.h tree-ssanames.h print-tree.h \ + varasm.h context.h # generate the 'build fragment' b-header-vars s-header-vars: Makefile diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 153b42442f2..a0570a59da9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2014-01-12 Eric Botcazou <ebotcazou@adacore.com> + + PR ada/59772 + * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type + as intermediate type. + (UI_To_gnu): Likewise. + 2014-01-03 Eric Botcazou <ebotcazou@adacore.com> * gnatvsn.ads (Current_Year): Bump to 2014. diff --git a/gcc/ada/gcc-interface/cuintp.c b/gcc/ada/gcc-interface/cuintp.c index 7ef68b628b3..e9b30b28aa5 100644 --- a/gcc/ada/gcc-interface/cuintp.c +++ b/gcc/ada/gcc-interface/cuintp.c @@ -6,7 +6,7 @@ * * * C Implementation File * * * - * Copyright (C) 1992-2013, Free Software Foundation, Inc. * + * Copyright (C) 1992-2014, Free Software Foundation, Inc. * * * * GNAT is free software; you can redistribute it and/or modify it under * * terms of the GNU General Public License as published by the Free Soft- * @@ -55,7 +55,7 @@ static tree build_cst_from_int (tree type, HOST_WIDE_INT low) { if (SCALAR_FLOAT_TYPE_P (type)) - return convert (type, build_int_cst (NULL_TREE, low)); + return convert (type, build_int_cst (gnat_type_for_size (32, 0), low)); else return build_int_cst_type (type, low); } @@ -89,19 +89,12 @@ UI_To_gnu (Uint Input, tree type) gcc_assert (Length > 0); /* The computations we perform below always require a type at least as - large as an integer not to overflow. REAL types are always fine, but + large as an integer not to overflow. FP types are always fine, but INTEGER or ENUMERAL types we are handed may be too short. We use a base integer type node for the computations in this case and will - convert the final result back to the incoming type later on. - The base integer precision must be superior than 16. */ - - if (TREE_CODE (comp_type) != REAL_TYPE - && TYPE_PRECISION (comp_type) - < TYPE_PRECISION (long_integer_type_node)) - { - comp_type = long_integer_type_node; - gcc_assert (TYPE_PRECISION (comp_type) > 16); - } + convert the final result back to the incoming type later on. */ + if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32) + comp_type = gnat_type_for_size (32, 0); gnu_base = build_cst_from_int (comp_type, Base); diff --git a/gcc/asan.c b/gcc/asan.c index e077153a969..53992a81b18 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-builder.h" #include "ubsan.h" #include "predict.h" +#include "params.h" /* AddressSanitizer finds out-of-bounds and use-after-free bugs with <2x slowdown on average. @@ -1003,7 +1004,8 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb, str_cst = asan_pp_string (&asan_pp); /* Emit the prologue sequence. */ - if (asan_frame_size > 32 && asan_frame_size <= 65536 && pbase) + if (asan_frame_size > 32 && asan_frame_size <= 65536 && pbase + && ASAN_USE_AFTER_RETURN) { use_after_return_class = floor_log2 (asan_frame_size - 1) - 5; /* __asan_stack_malloc_N guarantees alignment @@ -1239,6 +1241,9 @@ asan_needs_local_alias (tree decl) bool asan_protect_global (tree decl) { + if (!ASAN_GLOBALS) + return false; + rtx rtl, symbol; if (TREE_CODE (decl) == STRING_CST) @@ -1568,6 +1573,11 @@ static void instrument_derefs (gimple_stmt_iterator *iter, tree t, location_t location, bool is_store) { + if (is_store && !ASAN_INSTRUMENT_WRITES) + return; + if (!is_store && !ASAN_INSTRUMENT_READS) + return; + tree type, base; HOST_WIDE_INT size_in_bytes; @@ -1897,6 +1907,9 @@ instrument_strlen_call (gimple_stmt_iterator *iter) static bool instrument_builtin_call (gimple_stmt_iterator *iter) { + if (!ASAN_MEMINTRIN) + return false; + bool iter_advanced_p = false; gimple call = gsi_stmt (*iter); diff --git a/gcc/builtins.c b/gcc/builtins.c index 81bb4077598..3f9af38bbaa 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -434,7 +434,7 @@ get_object_alignment_2 (tree exp, unsigned int *alignp, alignment that can prevail. */ if (offset) { - int trailing_zeros = tree_ctz (offset); + unsigned int trailing_zeros = tree_ctz (offset); if (trailing_zeros < HOST_BITS_PER_INT) { unsigned int inner = (1U << trailing_zeros) * BITS_PER_UNIT; diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index defc0030a64..d9b69b32c41 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + PR target/58115 + * c-pch.c (c_common_write_pch): Call + prepare_target_option_nodes_for_pch. + 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> Update copyright years diff --git a/gcc/c-family/c-pch.c b/gcc/c-family/c-pch.c index e51d5b9409e..93609b610ff 100644 --- a/gcc/c-family/c-pch.c +++ b/gcc/c-family/c-pch.c @@ -180,6 +180,8 @@ c_common_write_pch (void) (*debug_hooks->handle_pch) (1); + prepare_target_option_nodes_for_pch (); + cpp_write_pch_deps (parse_in, pch_outfile); gt_pch_save (pch_outfile); diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 6cb79c0fa6f..d3b338a5b8e 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,15 @@ +2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR c++/59631 + * c-parser.c (c_parser_postfix_expression): Replaced consecutive if + statements with if-elseif statements. + +2014-01-06 Marek Polacek <polacek@redhat.com> + + PR c/57773 + * c-decl.c (check_bitfield_type_and_width): Warn for implementation + defined bit-field types only in ISO C. + 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> Update copyright years diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c index 2dee4c248c0..9c601facad2 100644 --- a/gcc/c/c-decl.c +++ b/gcc/c/c-decl.c @@ -4840,7 +4840,8 @@ check_bitfield_type_and_width (tree *type, tree *width, tree orig_name) if (!in_system_header_at (input_location) && type_mv != integer_type_node && type_mv != unsigned_type_node - && type_mv != boolean_type_node) + && type_mv != boolean_type_node + && !flag_isoc99) pedwarn (input_location, OPT_Wpedantic, "type of bit-field %qs is a GCC extension", name); diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 25fa701ebd9..2590c9be05e 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -7500,7 +7500,7 @@ c_parser_postfix_expression (c_parser *parser) expr = c_parser_postfix_expression (parser); expr.value = error_mark_node; } - if (c_parser_peek_token (parser)->keyword == RID_CILK_SPAWN) + else if (c_parser_peek_token (parser)->keyword == RID_CILK_SPAWN) { error_at (loc, "consecutive %<_Cilk_spawn%> keywords " "are not permitted"); diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index e2e407bd2de..77196ee6bf7 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -1295,7 +1295,6 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2, { rtx i1, i2, last1, last2, afterlast1, afterlast2; int ninsns = 0; - rtx p1; enum replace_direction dir, last_dir, afterlast_dir; bool follow_fallthru, did_fallthru; @@ -1323,8 +1322,9 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2, || (returnjump_p (i2) && !side_effects_p (PATTERN (i2)))) { last2 = i2; - /* Count everything except for unconditional jump as insn. */ - if (!simplejump_p (i2) && !returnjump_p (i2) && last1) + /* Count everything except for unconditional jump as insn. + Don't count any jumps if dir_p is NULL. */ + if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p) ninsns++; i2 = PREV_INSN (i2); } @@ -1375,8 +1375,7 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2, last1 = i1, last2 = i2; afterlast_dir = last_dir; last_dir = dir; - p1 = PATTERN (i1); - if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER)) + if (active_insn_p (i1)) ninsns++; } @@ -1422,7 +1421,8 @@ flow_find_cross_jump (basic_block bb1, basic_block bb2, rtx *f1, rtx *f2, /* Like flow_find_cross_jump, except start looking for a matching sequence from the head of the two blocks. Do not include jumps at the end. If STOP_AFTER is nonzero, stop after finding that many matching - instructions. */ + instructions. If STOP_AFTER is zero, count all INSN_P insns, if it is + non-zero, only count active insns. */ int flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1, @@ -1494,7 +1494,8 @@ flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1, beforelast1 = last1, beforelast2 = last2; last1 = i1, last2 = i2; - ninsns++; + if (!stop_after || active_insn_p (i1)) + ninsns++; } if (i1 == BB_END (bb1) || i2 == BB_END (bb2) diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 2ba1cf4e36e..c0cbeb3c022 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -798,7 +798,7 @@ partition_stack_vars (void) sizes, as the shorter vars wouldn't be adequately protected. Don't do that for "large" (unsupported) alignment objects, those aren't protected anyway. */ - if ((flag_sanitize & SANITIZE_ADDRESS) && isize != jsize + if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK && isize != jsize && ialign * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT) break; @@ -981,7 +981,7 @@ expand_stack_vars (bool (*pred) (size_t), struct stack_vars_data *data) if (alignb * BITS_PER_UNIT <= MAX_SUPPORTED_STACK_ALIGNMENT) { base = virtual_stack_vars_rtx; - if ((flag_sanitize & SANITIZE_ADDRESS) && pred) + if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK && pred) { HOST_WIDE_INT prev_offset = frame_offset; tree repr_decl = NULL_TREE; @@ -1160,7 +1160,7 @@ defer_stack_allocation (tree var, bool toplevel) /* If stack protection is enabled, *all* stack variables must be deferred, so that we can re-order the strings to the top of the frame. Similarly for Address Sanitizer. */ - if (flag_stack_protect || (flag_sanitize & SANITIZE_ADDRESS)) + if (flag_stack_protect || ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK)) return true; /* We handle "large" alignment via dynamic allocation. We want to handle @@ -1215,8 +1215,11 @@ expand_one_var (tree var, bool toplevel, bool really_expand) we conservatively assume it will be on stack even if VAR is eventually put into register after RA pass. For non-automatic variables, which won't be on stack, we collect alignment of - type and ignore user specified alignment. */ - if (TREE_STATIC (var) || DECL_EXTERNAL (var)) + type and ignore user specified alignment. Similarly for + SSA_NAMEs for which use_register_for_decl returns true. */ + if (TREE_STATIC (var) + || DECL_EXTERNAL (var) + || (TREE_CODE (origvar) == SSA_NAME && use_register_for_decl (var))) align = MINIMUM_ALIGNMENT (TREE_TYPE (var), TYPE_MODE (TREE_TYPE (var)), TYPE_ALIGN (TREE_TYPE (var))); @@ -1820,7 +1823,7 @@ expand_used_vars (void) expand_stack_vars (stack_protect_decl_phase_2, &data); } - if (flag_sanitize & SANITIZE_ADDRESS) + if ((flag_sanitize & SANITIZE_ADDRESS) && ASAN_STACK) /* Phase 3, any partitions that need asan protection in addition to phase 1 and 2. */ expand_stack_vars (asan_decl_phase_3, &data); @@ -2253,7 +2256,7 @@ expand_call_stmt (gimple stmt) if (lhs) expand_assignment (lhs, exp, false); else - expand_expr_real_1 (exp, const0_rtx, VOIDmode, EXPAND_NORMAL, NULL); + expand_expr (exp, const0_rtx, VOIDmode, EXPAND_NORMAL); mark_transaction_restart_calls (stmt); } diff --git a/gcc/cgraph.h b/gcc/cgraph.h index 8b25d947511..7ce54014e1e 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -1426,8 +1426,12 @@ varpool_variable_node (varpool_node *node, { varpool_node *n; - n = dyn_cast <varpool_node> (symtab_alias_ultimate_target (node, - availability)); + if (node) + n = dyn_cast <varpool_node> (symtab_alias_ultimate_target (node, + availability)); + else + n = NULL; + if (!n && availability) *availability = AVAIL_NOT_AVAILABLE; return n; diff --git a/gcc/config.gcc b/gcc/config.gcc index bd0fb635960..23657a5b0f4 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -3476,19 +3476,17 @@ case "${target}" in fi done - case "$with_arch" in - "" \ - | armv[23456] | armv2a | armv3m | armv4t | armv5t \ - | armv5te | armv6j |armv6k | armv6z | armv6zk | armv6-m \ - | armv7 | armv7-a | armv7-r | armv7-m | armv8-a \ - | iwmmxt | ep9312) - # OK - ;; - *) - echo "Unknown arch used in --with-arch=$with_arch" 1>&2 - exit 1 - ;; - esac + # See if it matches any of the entries in arm-arches.def + if [ x"$with_arch" = x ] \ + || grep "^ARM_ARCH(\"$with_arch\"," \ + ${srcdir}/config/arm/arm-arches.def \ + > /dev/null; then + # OK + true + else + echo "Unknown arch used in --with-arch=$with_arch" 1>&2 + exit 1 + fi case "$with_float" in "" \ diff --git a/gcc/config/aarch64/aarch64-elf.h b/gcc/config/aarch64/aarch64-elf.h index 7bcdc13d140..15ab630de88 100644 --- a/gcc/config/aarch64/aarch64-elf.h +++ b/gcc/config/aarch64/aarch64-elf.h @@ -144,7 +144,6 @@ #define ASM_SPEC "\ %{mbig-endian:-EB} \ %{mlittle-endian:-EL} \ -%{mcpu=*:-mcpu=%*} \ %{march=*:-march=%*} \ %(asm_cpu_spec)" \ ASM_MABI_SPEC diff --git a/gcc/config/aarch64/aarch64-modes.def b/gcc/config/aarch64/aarch64-modes.def index 3a56d622a82..1d2cc767946 100644 --- a/gcc/config/aarch64/aarch64-modes.def +++ b/gcc/config/aarch64/aarch64-modes.def @@ -24,6 +24,7 @@ CC_MODE (CC_SWP); CC_MODE (CC_ZESWP); /* zero-extend LHS (but swap to make it RHS). */ CC_MODE (CC_SESWP); /* sign-extend LHS (but swap to make it RHS). */ CC_MODE (CC_NZ); /* Only N and Z bits of condition flags are valid. */ +CC_MODE (CC_Z); /* Only Z bit of condition flags is valid. */ /* Vector modes. */ VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI. */ diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 3fd58b96104..9e507b84257 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -3326,17 +3326,24 @@ aarch64_select_cc_mode (RTX_CODE code, rtx x, rtx y) || GET_CODE (x) == NEG)) return CC_NZmode; - /* A compare with a shifted or negated operand. Because of canonicalization, + /* A compare with a shifted operand. Because of canonicalization, the comparison will have to be swapped when we emit the assembly code. */ if ((GET_MODE (x) == SImode || GET_MODE (x) == DImode) && (GET_CODE (y) == REG || GET_CODE (y) == SUBREG) && (GET_CODE (x) == ASHIFT || GET_CODE (x) == ASHIFTRT || GET_CODE (x) == LSHIFTRT - || GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND - || GET_CODE (x) == NEG)) + || GET_CODE (x) == ZERO_EXTEND || GET_CODE (x) == SIGN_EXTEND)) return CC_SWPmode; + /* Similarly for a negated operand, but we can only do this for + equalities. */ + if ((GET_MODE (x) == SImode || GET_MODE (x) == DImode) + && (GET_CODE (y) == REG || GET_CODE (y) == SUBREG) + && (code == EQ || code == NE) + && GET_CODE (x) == NEG) + return CC_Zmode; + /* A compare of a mode narrower than SI mode against zero can be done by extending the value in the comparison. */ if ((GET_MODE (x) == QImode || GET_MODE (x) == HImode) @@ -3427,6 +3434,15 @@ aarch64_get_condition_code (rtx x) } break; + case CC_Zmode: + switch (comp_code) + { + case NE: return AARCH64_NE; + case EQ: return AARCH64_EQ; + default: gcc_unreachable (); + } + break; + default: gcc_unreachable (); break; @@ -4643,12 +4659,15 @@ aarch64_rtx_costs (rtx x, int code, int outer ATTRIBUTE_UNUSED, extra_cost->mult[GET_MODE (x) == DImode].extend_add; return true; } + *cost += (rtx_cost (XEXP (op0, 0), MULT, 0, speed) + rtx_cost (XEXP (op0, 1), MULT, 1, speed) + rtx_cost (op1, PLUS, 1, speed)); if (speed) *cost += extra_cost->mult[GET_MODE (x) == DImode].add; + + return true; } *cost += (rtx_cost (new_op0, PLUS, 0, speed) diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 4e838ee847b..3b5e92e4162 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -1250,8 +1250,8 @@ ) (define_insn "*compare_neg<mode>" - [(set (reg:CC_SWP CC_REGNUM) - (compare:CC_SWP + [(set (reg:CC_Z CC_REGNUM) + (compare:CC_Z (neg:GPI (match_operand:GPI 0 "register_operand" "r")) (match_operand:GPI 1 "register_operand" "r")))] "" diff --git a/gcc/config/arm/arm-cores.def b/gcc/config/arm/arm-cores.def index d961e250e46..1e97273e51b 100644 --- a/gcc/config/arm/arm-cores.def +++ b/gcc/config/arm/arm-cores.def @@ -152,8 +152,8 @@ ARM_CORE("marvell-pj4", marvell_pj4, marvell_pj4, 7A, FL_LDSCHED, 9e) ARM_CORE("cortex-a15.cortex-a7", cortexa15cortexa7, cortexa7, 7A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex_a15) /* V8 Architecture Processors */ -ARM_CORE("cortex-a53", cortexa53, cortexa53, 8A, FL_LDSCHED, cortex_a53) -ARM_CORE("cortex-a57", cortexa57, cortexa15, 8A, FL_LDSCHED, cortex_a15) +ARM_CORE("cortex-a53", cortexa53, cortexa53, 8A, FL_LDSCHED | FL_CRC32, cortex_a53) +ARM_CORE("cortex-a57", cortexa57, cortexa15, 8A, FL_LDSCHED | FL_CRC32, cortex_a15) /* V8 big.LITTLE implementations */ -ARM_CORE("cortex-a57.cortex-a53", cortexa57cortexa53, cortexa53, 8A, FL_LDSCHED | FL_THUMB_DIV | FL_ARM_DIV, cortex_a15) +ARM_CORE("cortex-a57.cortex-a53", cortexa57cortexa53, cortexa53, 8A, FL_LDSCHED | FL_CRC32, cortex_a15) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 42450c71c27..0cb16f94b3f 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -9092,6 +9092,9 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code, { case SET: *cost = 0; + /* SET RTXs don't have a mode so we get it from the destination. */ + mode = GET_MODE (SET_DEST (x)); + if (REG_P (SET_SRC (x)) && REG_P (SET_DEST (x))) { @@ -9106,6 +9109,8 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code, in 16 bits in Thumb mode. */ if (!speed_p && TARGET_THUMB && outer_code == COND_EXEC) *cost >>= 1; + + return true; } if (CONST_INT_P (SET_SRC (x))) @@ -9113,7 +9118,6 @@ arm_new_rtx_costs (rtx x, enum rtx_code code, enum rtx_code outer_code, /* Handle CONST_INT here, since the value doesn't have a mode and we would otherwise be unable to work out the true cost. */ *cost = rtx_cost (SET_DEST (x), SET, 0, speed_p); - mode = GET_MODE (SET_DEST (x)); outer_code = SET; /* Slightly lower the cost of setting a core reg to a constant. This helps break up chains and allows for better scheduling. */ @@ -20316,8 +20320,10 @@ arm_get_frame_offsets (void) offsets->saved_args = crtl->args.pretend_args_size; /* In Thumb mode this is incorrect, but never used. */ - offsets->frame = offsets->saved_args + (frame_pointer_needed ? 4 : 0) + - arm_compute_static_chain_stack_bytes(); + offsets->frame + = (offsets->saved_args + + arm_compute_static_chain_stack_bytes () + + (frame_pointer_needed ? 4 : 0)); if (TARGET_32BIT) { @@ -20357,9 +20363,10 @@ arm_get_frame_offsets (void) } /* Saved registers include the stack frame. */ - offsets->saved_regs = offsets->saved_args + saved + - arm_compute_static_chain_stack_bytes(); + offsets->saved_regs + = offsets->saved_args + arm_compute_static_chain_stack_bytes () + saved; offsets->soft_frame = offsets->saved_regs + CALLER_INTERWORKING_SLOT_SIZE; + /* A leaf function does not need any stack alignment if it has nothing on the stack. */ if (leaf && frame_size == 0 @@ -24241,7 +24248,7 @@ arm_init_iwmmxt_builtins (void) enum machine_mode mode; tree type; - if (d->name == 0) + if (d->name == 0 || !(d->mask == FL_IWMMXT || d->mask == FL_IWMMXT2)) continue; mode = insn_data[d->icode].operand[1].mode; @@ -24838,7 +24845,11 @@ arm_expand_neon_args (rtx target, int icode, int have_retval, type_mode); } - op[argc] = expand_normal (arg[argc]); + /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P + be returned. */ + op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode, + (thisarg == NEON_ARG_MEMORY + ? EXPAND_MEMORY : EXPAND_NORMAL)); switch (thisarg) { @@ -24857,6 +24868,9 @@ arm_expand_neon_args (rtx target, int icode, int have_retval, break; case NEON_ARG_MEMORY: + /* Check if expand failed. */ + if (op[argc] == const0_rtx) + return 0; gcc_assert (MEM_P (op[argc])); PUT_MODE (op[argc], mode[argc]); /* ??? arm_neon.h uses the same built-in functions for signed @@ -27048,7 +27062,10 @@ arm_expand_epilogue_apcs_frame (bool really_return) saved_regs_mask = offsets->saved_regs_mask; /* Find the offset of the floating-point save area in the frame. */ - floats_from_frame = offsets->saved_args - offsets->frame; + floats_from_frame + = (offsets->saved_args + + arm_compute_static_chain_stack_bytes () + - offsets->frame); /* Compute how many core registers saved and how far away the floats are. */ for (i = 0; i <= LAST_ARM_REGNUM; i++) diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 409589d2dac..b815488db53 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -189,7 +189,7 @@ extern arm_cc arm_current_cc; #define ARM_INVERSE_CONDITION_CODE(X) ((arm_cc) (((int)X) ^ 1)) -/* The maximaum number of instructions that is beneficial to +/* The maximum number of instructions that is beneficial to conditionally execute. */ #undef MAX_CONDITIONAL_EXECUTE #define MAX_CONDITIONAL_EXECUTE arm_max_conditional_execute () diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 95ca5db7002..3c50e24edf2 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -3609,57 +3609,36 @@ darwin_function_section (tree decl, enum node_frequency freq, if (decl && DECL_SECTION_NAME (decl) != NULL_TREE) return get_named_section (decl, NULL, 0); - /* Default when there is no function re-ordering. */ - if (!flag_reorder_functions) - return (weak) - ? darwin_sections[text_coal_section] - : text_section; - - /* Startup code should go to startup subsection unless it is - unlikely executed (this happens especially with function splitting - where we can split away unnecessary parts of static constructors). */ - if (startup && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED) - { - /* If we do have a profile or(and) LTO phase is executed, we do not need - these ELF section. */ - if (!in_lto_p || !flag_profile_values) - return (weak) - ? darwin_sections[text_startup_coal_section] - : darwin_sections[text_startup_section]; - else - return text_section; - } + /* We always put unlikely executed stuff in the cold section. */ + if (freq == NODE_FREQUENCY_UNLIKELY_EXECUTED) + return (weak) ? darwin_sections[text_cold_coal_section] + : darwin_sections[text_cold_section]; + + /* If we have LTO *and* feedback information, then let LTO handle + the function ordering, it makes a better job (for normal, hot, + startup and exit - hence the bailout for cold above). */ + if (in_lto_p && flag_profile_values) + goto default_function_sections; + + /* Non-cold startup code should go to startup subsection. */ + if (startup) + return (weak) ? darwin_sections[text_startup_coal_section] + : darwin_sections[text_startup_section]; /* Similarly for exit. */ - if (exit && freq != NODE_FREQUENCY_UNLIKELY_EXECUTED) - return (weak) - ? darwin_sections[text_exit_coal_section] - : darwin_sections[text_exit_section]; - - /* Group cold functions together, similarly for hot code. */ - switch (freq) - { - case NODE_FREQUENCY_UNLIKELY_EXECUTED: - return (weak) - ? darwin_sections[text_cold_coal_section] - : darwin_sections[text_cold_section]; - break; - case NODE_FREQUENCY_HOT: - { - /* If we do have a profile or(and) LTO phase is executed, we do not need - these ELF section. */ - if (!in_lto_p || !flag_profile_values) - return (weak) - ? darwin_sections[text_hot_coal_section] - : darwin_sections[text_hot_section]; - break; - } - default: - return (weak) - ? darwin_sections[text_coal_section] + if (exit) + return (weak) ? darwin_sections[text_exit_coal_section] + : darwin_sections[text_exit_section]; + + /* Place hot code. */ + if (freq == NODE_FREQUENCY_HOT) + return (weak) ? darwin_sections[text_hot_coal_section] + : darwin_sections[text_hot_section]; + + /* Otherwise, default to the 'normal' non-reordered sections. */ +default_function_sections: + return (weak) ? darwin_sections[text_coal_section] : text_section; - break; - } } /* When a function is partitioned between sections, we need to insert a label diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 1d04a3c64ee..d10fe9529e4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -81,6 +81,7 @@ along with GCC; see the file COPYING3. If not see #include "wide-int.h" #include "context.h" #include "pass_manager.h" +#include "target-globals.h" static rtx legitimize_dllimport_symbol (rtx, bool); static rtx legitimize_pe_coff_extern_decl (rtx, bool); @@ -1569,7 +1570,7 @@ struct processor_costs nocona_cost = { 8, /* MMX or SSE register to integer */ 8, /* size of l1 cache. */ 1024, /* size of l2 cache. */ - 128, /* size of prefetch block */ + 64, /* size of prefetch block */ 8, /* number of parallel prefetches */ 1, /* Branch cost */ COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */ @@ -4869,16 +4870,25 @@ ix86_set_current_function (tree fndecl) { cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree)); - target_reinit (); + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); } else if (old_tree) { - struct cl_target_option *def - = TREE_TARGET_OPTION (target_option_current_node); - - cl_target_option_restore (&global_options, def); - target_reinit (); + new_tree = target_option_current_node; + cl_target_option_restore (&global_options, + TREE_TARGET_OPTION (new_tree)); + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else if (new_tree == target_option_default_node) + restore_target_globals (&default_target_globals); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); } } } @@ -9282,7 +9292,7 @@ ix86_save_reg (unsigned int regno, bool maybe_eh_return) if (crtl->drap_reg && regno == REGNO (crtl->drap_reg) - && crtl->stack_realign_needed) + && !cfun->machine->no_drap_save_restore) return true; return (df_regs_ever_live_p (regno) @@ -10520,18 +10530,6 @@ ix86_finalize_stack_realign_flags (void) return; } - /* If drap has been set, but it actually isn't live at the start - of the function and !stack_realign, there is no reason to set it up. */ - if (crtl->drap_reg && !stack_realign) - { - basic_block bb = ENTRY_BLOCK_PTR_FOR_FN (cfun)->next_bb; - if (! REGNO_REG_SET_P (DF_LR_IN (bb), REGNO (crtl->drap_reg))) - { - crtl->drap_reg = NULL_RTX; - crtl->need_drap = false; - } - } - /* If the only reason for frame_pointer_needed is that we conservatively assumed stack realignment might be needed, but in the end nothing that needed the stack alignment had been spilled, clear frame_pointer_needed @@ -10585,6 +10583,8 @@ ix86_finalize_stack_realign_flags (void) crtl->need_drap = false; } } + else + cfun->machine->no_drap_save_restore = true; frame_pointer_needed = false; stack_realign = false; @@ -26466,8 +26466,16 @@ ix86_constant_alignment (tree exp, int align) int ix86_data_alignment (tree type, int align, bool opt) { - int max_align = optimize_size ? BITS_PER_WORD - : MIN (512, MAX_OFILE_ALIGNMENT); + /* A data structure, equal or greater than the size of a cache line + (64 bytes in the Pentium 4 and other recent Intel processors, including + processors based on Intel Core microarchitecture) should be aligned + so that its base address is a multiple of a cache line size. */ + + int max_align + = MIN ((unsigned) ix86_tune_cost->prefetch_block * 8, MAX_OFILE_ALIGNMENT); + + if (max_align < BITS_PER_WORD) + max_align = BITS_PER_WORD; if (opt && AGGREGATE_TYPE_P (type) @@ -34407,6 +34415,9 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, case CODE_FOR_sse2_movntidi: case CODE_FOR_sse_movntq: case CODE_FOR_sse2_movntisi: + case CODE_FOR_avx512f_movntv16sf: + case CODE_FOR_avx512f_movntv8df: + case CODE_FOR_avx512f_movntv8di: aligned_mem = true; break; default: @@ -34431,6 +34442,24 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, klass = load; memory = 0; break; + case VOID_FTYPE_PV8DF_V8DF_QI: + case VOID_FTYPE_PV16SF_V16SF_HI: + case VOID_FTYPE_PV8DI_V8DI_QI: + case VOID_FTYPE_PV16SI_V16SI_HI: + switch (icode) + { + /* These builtins and instructions require the memory + to be properly aligned. */ + case CODE_FOR_avx512f_storev16sf_mask: + case CODE_FOR_avx512f_storev16si_mask: + case CODE_FOR_avx512f_storev8df_mask: + case CODE_FOR_avx512f_storev8di_mask: + aligned_mem = true; + break; + default: + break; + } + /* FALLTHRU */ case VOID_FTYPE_PV8SF_V8SI_V8SF: case VOID_FTYPE_PV4DF_V4DI_V4DF: case VOID_FTYPE_PV4SF_V4SI_V4SF: @@ -34439,10 +34468,6 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, case VOID_FTYPE_PV4DI_V4DI_V4DI: case VOID_FTYPE_PV4SI_V4SI_V4SI: case VOID_FTYPE_PV2DI_V2DI_V2DI: - case VOID_FTYPE_PV8DF_V8DF_QI: - case VOID_FTYPE_PV16SF_V16SF_HI: - case VOID_FTYPE_PV8DI_V8DI_QI: - case VOID_FTYPE_PV16SI_V16SI_HI: case VOID_FTYPE_PDOUBLE_V2DF_QI: case VOID_FTYPE_PFLOAT_V4SF_QI: nargs = 2; @@ -34459,6 +34484,19 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, nargs = 3; klass = load; memory = 0; + switch (icode) + { + /* These builtins and instructions require the memory + to be properly aligned. */ + case CODE_FOR_avx512f_loadv16sf_mask: + case CODE_FOR_avx512f_loadv16si_mask: + case CODE_FOR_avx512f_loadv8df_mask: + case CODE_FOR_avx512f_loadv8di_mask: + aligned_mem = true; + break; + default: + break; + } break; case VOID_FTYPE_UINT_UINT_UINT: case VOID_FTYPE_UINT64_UINT_UINT: diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index cdaab3684e1..27151f60ffa 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2419,6 +2419,9 @@ struct GTY(()) machine_function { stack below the return address. */ BOOL_BITFIELD static_chain_on_stack : 1; + /* If true, it is safe to not save/restore DRAP register. */ + BOOL_BITFIELD no_drap_save_restore : 1; + /* During prologue/epilogue generation, the current frame state. Otherwise, the frame state at the end of the prologue. */ struct machine_frame_state fs; @@ -2507,6 +2510,9 @@ extern void debug_dispatch_window (int); #define IX86_HLE_ACQUIRE (1 << 16) #define IX86_HLE_RELEASE (1 << 17) +/* For switching between functions with different target attributes. */ +#define SWITCHABLE_TARGET 1 + /* Local variables: version-control: t diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index de0b2dd771b..954bbed2f19 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -366,7 +366,7 @@ ;; Processor type. (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem, atom,slm,generic,amdfam10,bdver1,bdver2,bdver3,bdver4, - btver1,btver2" + btver2" (const (symbol_ref "ix86_schedule"))) ;; A basic instruction type. Refinements due to arguments to be diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 405f9988d9b..dfc98ba813a 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -786,8 +786,12 @@ { case MODE_V8DF: case MODE_V16SF: + if (misaligned_operand (operands[1], <MODE>mode)) + return "vmovu<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; return "vmova<ssemodesuffix>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; default: + if (misaligned_operand (operands[1], <MODE>mode)) + return "vmovdqu<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; return "vmovdqa<ssescalarsize>\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; } } @@ -936,11 +940,14 @@ false, still emit UNSPEC_LOADU insn to honor user's request for misaligned load. */ if (TARGET_AVX - && misaligned_operand (operands[1], <MODE>mode) - /* FIXME: Revisit after AVX512F merge is completed. */ - && !<mask_applied>) + && misaligned_operand (operands[1], <MODE>mode)) { - emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + rtx src = operands[1]; + if (<mask_applied>) + src = gen_rtx_VEC_MERGE (<MODE>mode, operands[1], + operands[2 * <mask_applied>], + operands[3 * <mask_applied>]); + emit_insn (gen_rtx_SET (VOIDmode, operands[0], src)); DONE; } }) @@ -1046,11 +1053,14 @@ false, still emit UNSPEC_LOADU insn to honor user's request for misaligned load. */ if (TARGET_AVX - && misaligned_operand (operands[1], <MODE>mode) - /* FIXME: Revisit after AVX512F merge is completed. */ - && !<mask_applied>) + && misaligned_operand (operands[1], <MODE>mode)) { - emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1])); + rtx src = operands[1]; + if (<mask_applied>) + src = gen_rtx_VEC_MERGE (<MODE>mode, operands[1], + operands[2 * <mask_applied>], + operands[3 * <mask_applied>]); + emit_insn (gen_rtx_SET (VOIDmode, operands[0], src)); DONE; } }) diff --git a/gcc/config/mips/driver-native.c b/gcc/config/mips/driver-native.c index 3f1a8d0151d..4c2a658c77a 100644 --- a/gcc/config/mips/driver-native.c +++ b/gcc/config/mips/driver-native.c @@ -58,11 +58,17 @@ host_detect_local_cpu (int argc, const char **argv) if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0) { if (strstr (buf, "Godson2 V0.2") != NULL - || strstr (buf, "Loongson-2 V0.2") != NULL) + || strstr (buf, "Loongson-2 V0.2") != NULL + || strstr (buf, "Loongson-2E") != NULL) cpu = "loongson2e"; else if (strstr (buf, "Godson2 V0.3") != NULL - || strstr (buf, "Loongson-2 V0.3") != NULL) + || strstr (buf, "Loongson-2 V0.3") != NULL + || strstr (buf, "Loongson-2F") != NULL) cpu = "loongson2f"; + else if (strstr (buf, "Godson3 V0.5") != NULL + || strstr (buf, "Loongson-3 V0.5") != NULL + || strstr (buf, "Loongson-3A") != NULL) + cpu = "loongson3a"; else if (strstr (buf, "SiByte SB1") != NULL) cpu = "sb1"; else if (strstr (buf, "R5000") != NULL) diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c index aa1a5ea385e..617391cdcb1 100644 --- a/gcc/config/mips/mips.c +++ b/gcc/config/mips/mips.c @@ -3634,17 +3634,6 @@ mips_set_reg_reg_cost (enum machine_mode mode) } } -/* Return the cost of an operand X that can be trucated for free. - SPEED says whether we're optimizing for size or speed. */ - -static int -mips_truncated_op_cost (rtx x, bool speed) -{ - if (GET_CODE (x) == TRUNCATE) - x = XEXP (x, 0); - return set_src_cost (x, speed); -} - /* Implement TARGET_RTX_COSTS. */ static bool @@ -4037,13 +4026,12 @@ mips_rtx_costs (rtx x, int code, int outer_code, int opno ATTRIBUTE_UNUSED, case ZERO_EXTEND: if (outer_code == SET && ISA_HAS_BADDU + && (GET_CODE (XEXP (x, 0)) == TRUNCATE + || GET_CODE (XEXP (x, 0)) == SUBREG) && GET_MODE (XEXP (x, 0)) == QImode - && GET_CODE (XEXP (x, 0)) == PLUS) + && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS) { - rtx plus = XEXP (x, 0); - *total = (COSTS_N_INSNS (1) - + mips_truncated_op_cost (XEXP (plus, 0), speed) - + mips_truncated_op_cost (XEXP (plus, 1), speed)); + *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed); return true; } *total = mips_zero_extend_cost (mode, XEXP (x, 0)); diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index acbf6a31d7f..bc9d301291c 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2529,7 +2529,9 @@ typedef struct mips_args { : TARGET_MICROMIPS && !TARGET_INTERLINK_COMPRESSED \ ? "%*" INSN "r%!\t%" #TARGET_OPNO "%/" \ : "%*" INSN "r\t%" #TARGET_OPNO "%/") \ - : MIPS_ABSOLUTE_JUMP ("%*" INSN "\t%" #TARGET_OPNO "%/")) + : TARGET_MICROMIPS && !TARGET_INTERLINK_COMPRESSED \ + ? MIPS_ABSOLUTE_JUMP ("%*" INSN "%!\t%" #TARGET_OPNO "%/") \ + : MIPS_ABSOLUTE_JUMP ("%*" INSN "\t%" #TARGET_OPNO "%/")) \ /* Similar to MIPS_CALL, but this is for MICROMIPS "j" to generate "jrc" when nop is in the delay slot of "jr". */ diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md index 4b0e3b6925e..fb47a890c4c 100644 --- a/gcc/config/mips/mips.md +++ b/gcc/config/mips/mips.md @@ -1312,20 +1312,32 @@ ;; Combiner patterns for unsigned byte-add. -(define_insn "*baddu_si" +(define_insn "*baddu_si_eb" [(set (match_operand:SI 0 "register_operand" "=d") (zero_extend:SI - (plus:QI (match_operand:QI 1 "register_operand" "d") - (match_operand:QI 2 "register_operand" "d"))))] - "ISA_HAS_BADDU" + (subreg:QI + (plus:SI (match_operand:SI 1 "register_operand" "d") + (match_operand:SI 2 "register_operand" "d")) 3)))] + "ISA_HAS_BADDU && BYTES_BIG_ENDIAN" + "baddu\\t%0,%1,%2" + [(set_attr "alu_type" "add")]) + +(define_insn "*baddu_si_el" + [(set (match_operand:SI 0 "register_operand" "=d") + (zero_extend:SI + (subreg:QI + (plus:SI (match_operand:SI 1 "register_operand" "d") + (match_operand:SI 2 "register_operand" "d")) 0)))] + "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN" "baddu\\t%0,%1,%2" [(set_attr "alu_type" "add")]) (define_insn "*baddu_di<mode>" [(set (match_operand:GPR 0 "register_operand" "=d") (zero_extend:GPR - (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d")) - (truncate:QI (match_operand:DI 2 "register_operand" "d")))))] + (truncate:QI + (plus:DI (match_operand:DI 1 "register_operand" "d") + (match_operand:DI 2 "register_operand" "d")))))] "ISA_HAS_BADDU && TARGET_64BIT" "baddu\\t%0,%1,%2" [(set_attr "alu_type" "add")]) @@ -6149,7 +6161,12 @@ (define_insn "*<optab>" [(any_return)] "" - "%*j\t$31%/" + { + if (TARGET_MICROMIPS) + return "%*jr%:\t$31"; + else + return "%*j\t$31%/"; + } [(set_attr "type" "jump") (set_attr "mode" "none")]) diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 2c4f6bfcace..c3755bfa912 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -10424,13 +10424,13 @@ pa_legitimate_address_p (enum machine_mode mode, rtx x, bool strict) /* When INT14_OK_STRICT is false, a secondary reload is needed to adjust the displacement of SImode and DImode floating point - instructions. So, we return false when STRICT is true. We + instructions but this may fail when the register also needs + reloading. So, we return false when STRICT is true. We also reject long displacements for float mode addresses since the majority of accesses will use floating point instructions that don't support 14-bit offsets. */ if (!INT14_OK_STRICT - && reload_in_progress - && strict + && (strict || !(reload_in_progress || reload_completed)) && mode != QImode && mode != HImode) return false; @@ -10490,8 +10490,7 @@ pa_legitimate_address_p (enum machine_mode mode, rtx x, bool strict) return true; if (!INT14_OK_STRICT - && reload_in_progress - && strict + && (strict || !(reload_in_progress || reload_completed)) && mode != QImode && mode != HImode) return false; diff --git a/gcc/config/rs6000/rs6000-builtin.def b/gcc/config/rs6000/rs6000-builtin.def index 4bbccbd7d82..b7b67fae1c8 100644 --- a/gcc/config/rs6000/rs6000-builtin.def +++ b/gcc/config/rs6000/rs6000-builtin.def @@ -1318,7 +1318,7 @@ BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow) BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum) BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss) BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus) -BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpkswus) +BU_P8V_AV_2 (VPKSDUS, "vpksdus", CONST, altivec_vpksdus) BU_P8V_AV_2 (VRLD, "vrld", CONST, vrotlv2di3) BU_P8V_AV_2 (VSLD, "vsld", CONST, vashlv2di3) BU_P8V_AV_2 (VSRD, "vsrd", CONST, vlshrv2di3) @@ -1752,6 +1752,14 @@ BU_SPECIAL_X (RS6000_BUILTIN_GET_TB, "__builtin_ppc_get_timebase", BU_SPECIAL_X (RS6000_BUILTIN_MFTB, "__builtin_ppc_mftb", RS6000_BTM_ALWAYS, RS6000_BTC_MISC) +BU_SPECIAL_X (RS6000_BUILTIN_MFFS, "__builtin_mffs", + RS6000_BTM_ALWAYS, RS6000_BTC_MISC) + +RS6000_BUILTIN_X (RS6000_BUILTIN_MTFSF, "__builtin_mtfsf", + RS6000_BTM_ALWAYS, + RS6000_BTC_MISC | RS6000_BTC_UNARY | RS6000_BTC_VOID, + CODE_FOR_rs6000_mtfsf) + /* Darwin CfString builtin. */ BU_SPECIAL_X (RS6000_BUILTIN_CFSTRING, "__builtin_cfstring", RS6000_BTM_ALWAYS, RS6000_BTC_MISC) diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 3f53d44c087..51968f8b7fd 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -611,10 +611,6 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = { RS6000_BTI_V4SI, RS6000_BTI_V8HI, 0, 0 }, { ALTIVEC_BUILTIN_VEC_VUPKHSH, ALTIVEC_BUILTIN_VUPKHSH, RS6000_BTI_bool_V4SI, RS6000_BTI_bool_V8HI, 0, 0 }, - { ALTIVEC_BUILTIN_VEC_UNPACKH, P8V_BUILTIN_VUPKHSW, - RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 }, - { ALTIVEC_BUILTIN_VEC_UNPACKH, P8V_BUILTIN_VUPKHSW, - RS6000_BTI_bool_V2DI, RS6000_BTI_bool_V4SI, 0, 0 }, { ALTIVEC_BUILTIN_VEC_VUPKHSH, P8V_BUILTIN_VUPKHSW, RS6000_BTI_V2DI, RS6000_BTI_V4SI, 0, 0 }, { ALTIVEC_BUILTIN_VEC_VUPKHSH, P8V_BUILTIN_VUPKHSW, diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 687f2f20795..8eeb2d6de95 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -78,6 +78,7 @@ #include "tree-vectorizer.h" #include "dumpfile.h" #include "cgraph.h" +#include "target-globals.h" #if TARGET_XCOFF #include "xcoffout.h" /* get declarations of xcoff_*_section_name */ #endif @@ -3238,6 +3239,18 @@ rs6000_option_override_internal (bool global_init_p) && !(processor_target_table[tune_index].target_enable & OPTION_MASK_HTM)) rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN; + /* -maltivec={le,be} implies -maltivec. */ + if (rs6000_altivec_element_order != 0) + rs6000_isa_flags |= OPTION_MASK_ALTIVEC; + + /* Disallow -maltivec=le in big endian mode for now. This is not + known to be useful for anyone. */ + if (BYTES_BIG_ENDIAN && rs6000_altivec_element_order == 1) + { + warning (0, N_("-maltivec=le not allowed for big-endian targets")); + rs6000_altivec_element_order = 0; + } + /* Add some warnings for VSX. */ if (TARGET_VSX) { @@ -6324,13 +6337,14 @@ rs6000_legitimate_offset_address_p (enum machine_mode mode, rtx x, break; case TFmode: - case TDmode: - case TImode: - case PTImode: if (TARGET_E500_DOUBLE) return (SPE_CONST_OFFSET_OK (offset) && SPE_CONST_OFFSET_OK (offset + 8)); + /* fall through */ + case TDmode: + case TImode: + case PTImode: extra = 8; if (!worst_case) break; @@ -11450,6 +11464,48 @@ rs6000_expand_zeroop_builtin (enum insn_code icode, rtx target) static rtx +rs6000_expand_mtfsf_builtin (enum insn_code icode, tree exp) +{ + rtx pat; + tree arg0 = CALL_EXPR_ARG (exp, 0); + tree arg1 = CALL_EXPR_ARG (exp, 1); + rtx op0 = expand_normal (arg0); + rtx op1 = expand_normal (arg1); + enum machine_mode mode0 = insn_data[icode].operand[0].mode; + enum machine_mode mode1 = insn_data[icode].operand[1].mode; + + if (icode == CODE_FOR_nothing) + /* Builtin not supported on this processor. */ + return 0; + + /* If we got invalid arguments bail out before generating bad rtl. */ + if (arg0 == error_mark_node || arg1 == error_mark_node) + return const0_rtx; + + if (GET_CODE (op0) != CONST_INT + || INTVAL (op0) > 255 + || INTVAL (op0) < 0) + { + error ("argument 1 must be an 8-bit field value"); + return const0_rtx; + } + + if (! (*insn_data[icode].operand[0].predicate) (op0, mode0)) + op0 = copy_to_mode_reg (mode0, op0); + + if (! (*insn_data[icode].operand[1].predicate) (op1, mode1)) + op1 = copy_to_mode_reg (mode1, op1); + + pat = GEN_FCN (icode) (op0, op1); + if (! pat) + return const0_rtx; + emit_insn (pat); + + return NULL_RTX; +} + + +static rtx rs6000_expand_unop_builtin (enum insn_code icode, tree exp, rtx target) { rtx pat; @@ -13256,6 +13312,12 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, : CODE_FOR_rs6000_mftb_si), target); + case RS6000_BUILTIN_MFFS: + return rs6000_expand_zeroop_builtin (CODE_FOR_rs6000_mffs, target); + + case RS6000_BUILTIN_MTFSF: + return rs6000_expand_mtfsf_builtin (CODE_FOR_rs6000_mtfsf, exp); + case ALTIVEC_BUILTIN_MASK_FOR_LOAD: case ALTIVEC_BUILTIN_MASK_FOR_STORE: { @@ -13563,6 +13625,14 @@ rs6000_init_builtins (void) NULL_TREE); def_builtin ("__builtin_ppc_mftb", ftype, RS6000_BUILTIN_MFTB); + ftype = build_function_type_list (double_type_node, NULL_TREE); + def_builtin ("__builtin_mffs", ftype, RS6000_BUILTIN_MFFS); + + ftype = build_function_type_list (void_type_node, + intSI_type_node, double_type_node, + NULL_TREE); + def_builtin ("__builtin_mtfsf", ftype, RS6000_BUILTIN_MTFSF); + #if TARGET_XCOFF /* AIX libm provides clog as __clog. */ if ((tdecl = builtin_decl_explicit (BUILT_IN_CLOG)) != NULL_TREE) @@ -31188,16 +31258,25 @@ rs6000_set_current_function (tree fndecl) { cl_target_option_restore (&global_options, TREE_TARGET_OPTION (new_tree)); - target_reinit (); + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); } else if (old_tree) { - struct cl_target_option *def - = TREE_TARGET_OPTION (target_option_current_node); - - cl_target_option_restore (&global_options, def); - target_reinit (); + new_tree = target_option_current_node; + cl_target_option_restore (&global_options, + TREE_TARGET_OPTION (new_tree)); + if (TREE_TARGET_GLOBALS (new_tree)) + restore_target_globals (TREE_TARGET_GLOBALS (new_tree)); + else if (new_tree == target_option_default_node) + restore_target_globals (&default_target_globals); + else + TREE_TARGET_GLOBALS (new_tree) + = save_target_globals_default_opts (); } } } diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 9ebe9abd3ad..fdfe1c911b5 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -468,6 +468,15 @@ extern int rs6000_vector_align[]; ? rs6000_vector_align[(MODE)] \ : (int)GET_MODE_BITSIZE ((MODE))) +/* Determine the element order to use for vector instructions. By + default we use big-endian element order when targeting big-endian, + and little-endian element order when targeting little-endian. For + programs being ported from BE Power to LE Power, it can sometimes + be useful to use big-endian element order when targeting little-endian. + This is set via -maltivec=be, for example. */ +#define VECTOR_ELT_ORDER_BIG \ + (BYTES_BIG_ENDIAN || (rs6000_altivec_element_order == 2)) + /* Alignment options for fields in structures for sub-targets following AIX-like ABI. ALIGN_POWER word-aligns FP doubles (default AIX ABI). @@ -2437,6 +2446,9 @@ extern char rs6000_reg_names[][8]; /* register names (0 vs. %r0). */ #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE, ADDR) +/* For switching between functions with different target attributes. */ +#define SWITCHABLE_TARGET 1 + /* uncomment for disabling the corresponding default options */ /* #define MACHINE_no_sched_interblock */ /* #define MACHINE_no_sched_speculative */ diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 5605dddafdb..53c34ad09cc 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -140,6 +140,8 @@ UNSPECV_ISYNC ; isync instruction UNSPECV_MFTB ; move from time base UNSPECV_NLGR ; non-local goto receiver + UNSPECV_MFFS ; Move from FPSCR + UNSPECV_MTFSF ; Move to FPSCR Fields ]) @@ -15587,6 +15589,20 @@ }) +(define_insn "rs6000_mffs" + [(set (match_operand:DF 0 "gpc_reg_operand" "=d") + (unspec_volatile:DF [(const_int 0)] UNSPECV_MFFS))] + "TARGET_HARD_FLOAT && TARGET_FPRS" + "mffs %0") + +(define_insn "rs6000_mtfsf" + [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "i") + (match_operand:DF 1 "gpc_reg_operand" "d")] + UNSPECV_MTFSF)] + "TARGET_HARD_FLOAT && TARGET_FPRS" + "mtfsf %0,%1") + + ;; Power8 fusion support for fusing an addis instruction with a D-form load of ;; a GPR. The addis instruction must be adjacent to the load, and use the same ;; register that is being loaded. The fused ops must be physically adjacent. diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt index fdbc70f9cc6..3240a7516bb 100644 --- a/gcc/config/rs6000/rs6000.opt +++ b/gcc/config/rs6000/rs6000.opt @@ -140,6 +140,14 @@ maltivec Target Report Mask(ALTIVEC) Var(rs6000_isa_flags) Use AltiVec instructions +maltivec=le +Target Report RejectNegative Var(rs6000_altivec_element_order, 1) Save +Generate Altivec instructions using little-endian element order + +maltivec=be +Target Report RejectNegative Var(rs6000_altivec_element_order, 2) +Generate Altivec instructions using big-endian element order + mhard-dfp Target Report Mask(DFP) Var(rs6000_isa_flags) Use decimal floating point instructions diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 3d480fd631b..eeccaedfb08 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -10005,16 +10005,9 @@ s390_gimplify_va_arg (tree valist, tree type, gimple_seq *pre_p, void s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) { - const int CC0 = 1 << 3; - const int CC1 = 1 << 2; - const int CC3 = 1 << 0; - rtx abort_label = gen_label_rtx (); - rtx leave_label = gen_label_rtx (); rtx retry_plus_two = gen_reg_rtx (SImode); rtx retry_reg = gen_reg_rtx (SImode); rtx retry_label = NULL_RTX; - rtx jump; - int very_unlikely = REG_BR_PROB_BASE / 100 - 1; if (retry != NULL_RTX) { @@ -10031,38 +10024,25 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb)); - jump = s390_emit_jump (abort_label, - gen_rtx_NE (VOIDmode, - gen_rtx_REG (CCRAWmode, CC_REGNUM), - gen_rtx_CONST_INT (VOIDmode, CC0))); - - JUMP_LABEL (jump) = abort_label; - LABEL_NUSES (abort_label) = 1; - add_int_reg_note (jump, REG_BR_PROB, very_unlikely); - - /* Initialize CC return value. */ - emit_move_insn (dest, const0_rtx); - - s390_emit_jump (leave_label, NULL_RTX); - LABEL_NUSES (leave_label) = 1; - emit_barrier (); - - /* Abort handler code. */ - - emit_label (abort_label); emit_move_insn (dest, gen_rtx_UNSPEC (SImode, gen_rtvec (1, gen_rtx_REG (CCRAWmode, CC_REGNUM)), UNSPEC_CC_TO_INT)); if (retry != NULL_RTX) { + const int CC0 = 1 << 3; + const int CC1 = 1 << 2; + const int CC3 = 1 << 0; + rtx jump; rtx count = gen_reg_rtx (SImode); + rtx leave_label = gen_label_rtx (); + + /* Exit for success and permanent failures. */ jump = s390_emit_jump (leave_label, gen_rtx_EQ (VOIDmode, gen_rtx_REG (CCRAWmode, CC_REGNUM), - gen_rtx_CONST_INT (VOIDmode, CC1 | CC3))); - LABEL_NUSES (leave_label) = 2; - add_int_reg_note (jump, REG_BR_PROB, very_unlikely); + gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3))); + LABEL_NUSES (leave_label) = 1; /* CC2 - transient failure. Perform retry with ppa. */ emit_move_insn (count, retry_plus_two); @@ -10073,9 +10053,8 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p) retry_reg)); JUMP_LABEL (jump) = retry_label; LABEL_NUSES (retry_label) = 1; + emit_label (leave_label); } - - emit_label (leave_label); } /* Builtins. */ diff --git a/gcc/config/sh/sh-mem.cc b/gcc/config/sh/sh-mem.cc index 3dca5f08486..e29ff775449 100644 --- a/gcc/config/sh/sh-mem.cc +++ b/gcc/config/sh/sh-mem.cc @@ -324,7 +324,6 @@ sh_expand_cmpnstr (rtx *operands) rtx addr2 = operands[2]; rtx s1_addr = copy_addr_to_reg (XEXP (addr1, 0)); rtx s2_addr = copy_addr_to_reg (XEXP (addr2, 0)); - rtx tmp0 = gen_reg_rtx (SImode); rtx tmp1 = gen_reg_rtx (SImode); rtx tmp2 = gen_reg_rtx (SImode); @@ -334,98 +333,132 @@ sh_expand_cmpnstr (rtx *operands) rtx L_end_loop_byte = gen_label_rtx (); rtx len = force_reg (SImode, operands[3]); - int constp = (CONST_INT_P (operands[3])); - int bytes = (constp ? INTVAL (operands[3]) : 0); - int witers = bytes / 4; + int constp = CONST_INT_P (operands[3]); - /* We could still loop on a register count. Not found very - convincing to optimize yet. */ - if (! constp) - return false; - - if (witers > 1) + /* Loop on a register count. */ + if (constp) { - rtx L_loop_long = gen_label_rtx (); - rtx L_end_loop_long = gen_label_rtx (); + rtx tmp0 = gen_reg_rtx (SImode); rtx tmp3 = gen_reg_rtx (SImode); rtx lenw = gen_reg_rtx (SImode); - int align = INTVAL (operands[4]); - - emit_move_insn (tmp0, const0_rtx); - - if (align < 4) - { - emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr)); - emit_insn (gen_tstsi_t (GEN_INT (3), tmp1)); - jump = emit_jump_insn (gen_branch_false (L_loop_byte)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); - } - - addr1 = adjust_automodify_address (addr1, SImode, s1_addr, 0); - addr2 = adjust_automodify_address (addr2, SImode, s2_addr, 0); - - /* word count. Do we have iterations ? */ - emit_insn (gen_lshrsi3 (lenw, len, GEN_INT (2))); - - /*start long loop. */ - emit_label (L_loop_long); - - /* tmp2 is aligned, OK to load. */ - emit_move_insn (tmp2, addr2); - emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, 4)); - - /* tmp1 is aligned, OK to load. */ - emit_move_insn (tmp1, addr1); - emit_move_insn (s1_addr, plus_constant (Pmode, s1_addr, 4)); - - /* Is there a 0 byte ? */ - emit_insn (gen_andsi3 (tmp3, tmp2, tmp1)); - - emit_insn (gen_cmpstr_t (tmp0, tmp3)); - jump = emit_jump_insn (gen_branch_true (L_end_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); - emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); - jump = emit_jump_insn (gen_branch_false (L_end_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); - - if (TARGET_SH2) - emit_insn (gen_dect (lenw, lenw)); - else - { - emit_insn (gen_addsi3 (lenw, lenw, GEN_INT (-1))); - emit_insn (gen_tstsi_t (lenw, lenw)); - } - jump = emit_jump_insn (gen_branch_false (L_loop_long)); - add_int_reg_note (jump, REG_BR_PROB, prob_likely); - - /* end loop. Reached max iterations. */ - if (bytes % 4 == 0) - { - /* Done. */ - jump = emit_jump_insn (gen_jump_compact (L_return)); - emit_barrier_after (jump); - } - else - { - /* Remaining bytes to read. */ - emit_move_insn (len, GEN_INT (bytes % 4)); - jump = emit_jump_insn (gen_jump_compact (L_loop_byte)); - emit_barrier_after (jump); - } - - emit_label (L_end_loop_long); - - /* Remaining bytes to read. */ - emit_move_insn (len, GEN_INT (4)); + rtx L_loop_long = gen_label_rtx (); + rtx L_end_loop_long = gen_label_rtx (); + rtx L_small = gen_label_rtx (); - /* Found last word. Restart it byte per byte. */ - emit_move_insn (s1_addr, plus_constant (Pmode, s1_addr, -4)); - emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, -4)); + int align = INTVAL (operands[4]); + int bytes = INTVAL (operands[3]); + int witers = bytes / 4; + + if (witers > 1) + { + addr1 = adjust_automodify_address (addr1, SImode, s1_addr, 0); + addr2 = adjust_automodify_address (addr2, SImode, s2_addr, 0); + + emit_move_insn (tmp0, const0_rtx); + + if (align < 4) + { + emit_insn (gen_iorsi3 (tmp1, s1_addr, s2_addr)); + emit_insn (gen_tstsi_t (GEN_INT (3), tmp1)); + jump = emit_jump_insn (gen_branch_false (L_loop_byte)); + add_int_reg_note (jump, REG_BR_PROB, prob_likely); + } + + /* word count. Do we have iterations ? */ + emit_insn (gen_lshrsi3 (lenw, len, GEN_INT (2))); + + /*start long loop. */ + emit_label (L_loop_long); + + /* tmp2 is aligned, OK to load. */ + emit_move_insn (tmp2, addr2); + emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, + GET_MODE_SIZE (SImode))); + + /* tmp1 is aligned, OK to load. */ + emit_move_insn (tmp1, addr1); + emit_move_insn (s1_addr, plus_constant (Pmode, s1_addr, + GET_MODE_SIZE (SImode))); + + /* Is there a 0 byte ? */ + emit_insn (gen_andsi3 (tmp3, tmp2, tmp1)); + + emit_insn (gen_cmpstr_t (tmp0, tmp3)); + jump = emit_jump_insn (gen_branch_true (L_end_loop_long)); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + + emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); + jump = emit_jump_insn (gen_branch_false (L_end_loop_long)); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + + if (TARGET_SH2) + emit_insn (gen_dect (lenw, lenw)); + else + { + emit_insn (gen_addsi3 (lenw, lenw, GEN_INT (-1))); + emit_insn (gen_tstsi_t (lenw, lenw)); + } + + jump = emit_jump_insn (gen_branch_false (L_loop_long)); + add_int_reg_note (jump, REG_BR_PROB, prob_likely); + + /* end loop. Reached max iterations. */ + if (bytes % 4 == 0) + { + /* Done. */ + jump = emit_jump_insn (gen_jump_compact (L_return)); + emit_barrier_after (jump); + } + else + { + /* Remaining bytes to read. */ + jump = emit_jump_insn (gen_jump_compact (L_small)); + emit_barrier_after (jump); + } + + emit_label (L_end_loop_long); + + /* Found last word. Restart it byte per byte. */ + bytes = 4; + emit_move_insn (s1_addr, plus_constant (Pmode, s1_addr, + -GET_MODE_SIZE (SImode))); + emit_move_insn (s2_addr, plus_constant (Pmode, s2_addr, + -GET_MODE_SIZE (SImode))); + } + + emit_label (L_small); + + gcc_assert (bytes <= 7); + + addr1 = adjust_automodify_address (addr1, QImode, s1_addr, 0); + addr2 = adjust_automodify_address (addr2, QImode, s2_addr, 0); + + while (bytes--) + { + emit_insn (gen_extendqisi2 (tmp1, addr1)); + emit_insn (gen_extendqisi2 (tmp2, addr2)); + + emit_insn (gen_cmpeqsi_t (tmp2, const0_rtx)); + jump = emit_jump_insn (gen_branch_true (L_end_loop_byte)); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + + emit_insn (gen_cmpeqsi_t (tmp1, tmp2)); + if (flag_delayed_branch) + emit_insn (gen_zero_extendqisi2 (tmp2, gen_lowpart (QImode, tmp2))); + jump = emit_jump_insn (gen_branch_false (L_end_loop_byte)); + add_int_reg_note (jump, REG_BR_PROB, prob_unlikely); + + addr1 = adjust_address (addr1, QImode, GET_MODE_SIZE (QImode)); + addr2 = adjust_address (addr2, QImode, GET_MODE_SIZE (QImode)); + } + + jump = emit_jump_insn (gen_jump_compact( L_end_loop_byte)); + emit_barrier_after (jump); } - addr1 = adjust_address (addr1, QImode, 0); - addr2 = adjust_address (addr2, QImode, 0); + addr1 = adjust_automodify_address (addr1, QImode, s1_addr, 0); + addr2 = adjust_automodify_address (addr2, QImode, s2_addr, 0); emit_label (L_loop_byte); diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 70211081dbf..9213de72d1b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,61 @@ +2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR c++/59631 + * parser.c (cp_parser_postfix_expression): Added a new if-statement + and replaced an existing if-statement with else-if statement. + Changed an existing error message wording to match the one from the C + parser. + +2014-01-08 Jason Merrill <jason@redhat.com> + + PR c++/59614 + * class.c (abi_tag_data): Add tags field. + (check_abi_tags): Initialize it. + (find_abi_tags_r): Support collecting missing tags. + (mark_type_abi_tags): Don't look at template args. + (inherit_targ_abi_tags): New. + (check_bases_and_members): Use it. + * cp-tree.h (ABI_TAG_IMPLICIT): New. + * mangle.c (write_abi_tags): Check it. + +2014-01-07 Jason Merrill <jason@redhat.com> + + PR c++/58856 + * pt.c (num_innermost_template_parms): New. + (get_underlying_template): Use it. + + PR c++/58965 + * mangle.c (write_guarded_var_name): Handle null DECL_NAME. + +2014-01-07 Paolo Carlini <paolo.carlini@oracle.com> + + * semantics.c (trait_expr_value, [CPTK_IS_BASE_OF]): Implement + the letter of 20.11.6 about Base and Derived naming the same + class type modulo cv-qualifiers. + +2014-01-06 Adam Butcher <adam@jessamine.co.uk> + + PR c++/59635 + * lambda.c (maybe_add_lambda_conv_op): Handle marking conversion + function as unimplemented for generic lambdas with varargs. + + PR c++/59636 + * parser.c (cp_parser_template_parameter): Early out with + error_mark_node if parameter declaration was not parsed. + + PR c++/59629 + * parser.c (cp_parser_lambda_expression): Save/reset/restore + auto_is_implicit_function_template_parm_p around lambda body. + + PR c++/59638 + * parser.c (cp_parser_init_declarator): Undo fully implicit + template parameter list when declarator is not a function. + +2014-01-03 Marc Glisse <marc.glisse@inria.fr> + + PR c++/58950 + * cvt.c (convert_to_void): Handle VEC_PERM_EXPR and VEC_COND_EXPR. + 2014-01-03 Tobias Burnus <burnus@net-b.de> PR c++/58567 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 1f07b97a615..4dbe3a67b8c 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -1341,14 +1341,20 @@ struct abi_tag_data { tree t; tree subob; + // error_mark_node to get diagnostics; otherwise collect missing tags here + tree tags; }; static tree -find_abi_tags_r (tree *tp, int */*walk_subtrees*/, void *data) +find_abi_tags_r (tree *tp, int *walk_subtrees, void *data) { if (!OVERLOAD_TYPE_P (*tp)) return NULL_TREE; + /* walk_tree shouldn't be walking into any subtrees of a RECORD_TYPE + anyway, but let's make sure of it. */ + *walk_subtrees = false; + if (tree attributes = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (*tp))) { struct abi_tag_data *p = static_cast<struct abi_tag_data*>(data); @@ -1359,7 +1365,20 @@ find_abi_tags_r (tree *tp, int */*walk_subtrees*/, void *data) tree id = get_identifier (TREE_STRING_POINTER (tag)); if (!IDENTIFIER_MARKED (id)) { - if (TYPE_P (p->subob)) + if (p->tags != error_mark_node) + { + /* We're collecting tags from template arguments. */ + tree str = build_string (IDENTIFIER_LENGTH (id), + IDENTIFIER_POINTER (id)); + p->tags = tree_cons (NULL_TREE, str, p->tags); + ABI_TAG_IMPLICIT (p->tags) = true; + + /* Don't inherit this tag multiple times. */ + IDENTIFIER_MARKED (id) = true; + } + + /* Otherwise we're diagnosing missing tags. */ + else if (TYPE_P (p->subob)) { warning (OPT_Wabi_tag, "%qT does not have the %E abi tag " "that base %qT has", p->t, tag, p->subob); @@ -1398,22 +1417,6 @@ mark_type_abi_tags (tree t, bool val) IDENTIFIER_MARKED (id) = val; } } - - /* Also mark ABI tags from template arguments. */ - if (CLASSTYPE_TEMPLATE_INFO (t)) - { - tree args = CLASSTYPE_TI_ARGS (t); - for (int i = 0; i < TMPL_ARGS_DEPTH (args); ++i) - { - tree level = TMPL_ARGS_LEVEL (args, i+1); - for (int j = 0; j < TREE_VEC_LENGTH (level); ++j) - { - tree arg = TREE_VEC_ELT (level, j); - if (CLASS_TYPE_P (arg)) - mark_type_abi_tags (arg, val); - } - } - } } /* Check that class T has all the abi tags that subobject SUBOB has, or @@ -1425,13 +1428,50 @@ check_abi_tags (tree t, tree subob) mark_type_abi_tags (t, true); tree subtype = TYPE_P (subob) ? subob : TREE_TYPE (subob); - struct abi_tag_data data = { t, subob }; + struct abi_tag_data data = { t, subob, error_mark_node }; cp_walk_tree_without_duplicates (&subtype, find_abi_tags_r, &data); mark_type_abi_tags (t, false); } +void +inherit_targ_abi_tags (tree t) +{ + if (CLASSTYPE_TEMPLATE_INFO (t) == NULL_TREE) + return; + + mark_type_abi_tags (t, true); + + tree args = CLASSTYPE_TI_ARGS (t); + struct abi_tag_data data = { t, NULL_TREE, NULL_TREE }; + for (int i = 0; i < TMPL_ARGS_DEPTH (args); ++i) + { + tree level = TMPL_ARGS_LEVEL (args, i+1); + for (int j = 0; j < TREE_VEC_LENGTH (level); ++j) + { + tree arg = TREE_VEC_ELT (level, j); + data.subob = arg; + cp_walk_tree_without_duplicates (&arg, find_abi_tags_r, &data); + } + } + + // If we found some tags on our template arguments, add them to our + // abi_tag attribute. + if (data.tags) + { + tree attr = lookup_attribute ("abi_tag", TYPE_ATTRIBUTES (t)); + if (attr) + TREE_VALUE (attr) = chainon (data.tags, TREE_VALUE (attr)); + else + TYPE_ATTRIBUTES (t) + = tree_cons (get_identifier ("abi_tag"), data.tags, + TYPE_ATTRIBUTES (t)); + } + + mark_type_abi_tags (t, false); +} + /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P, and NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of the bases. */ @@ -5432,6 +5472,9 @@ check_bases_and_members (tree t) bool saved_nontrivial_dtor; tree fn; + /* Pick up any abi_tags from our template arguments before checking. */ + inherit_targ_abi_tags (t); + /* By default, we use const reference arguments and generate default constructors. */ cant_have_const_ctor = 0; diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index bdae500d374..96af562f245 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -65,6 +65,7 @@ c-common.h, not after. TARGET_EXPR_IMPLICIT_P (in TARGET_EXPR) TEMPLATE_PARM_PARAMETER_PACK (in TEMPLATE_PARM_INDEX) ATTR_IS_DEPENDENT (in the TREE_LIST for an attribute) + ABI_TAG_IMPLICIT (in the TREE_LIST for the argument of abi_tag) CONSTRUCTOR_IS_DIRECT_INIT (in CONSTRUCTOR) LAMBDA_EXPR_CAPTURES_THIS_P (in LAMBDA_EXPR) DECLTYPE_FOR_LAMBDA_CAPTURE (in DECLTYPE_TYPE) @@ -2589,6 +2590,10 @@ struct GTY((variable_size)) lang_decl { must be applied at instantiation time. */ #define ATTR_IS_DEPENDENT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE)) +/* In a TREE_LIST in the argument of attribute abi_tag, indicates that the tag + was inherited from a template parameter, not explicitly indicated. */ +#define ABI_TAG_IMPLICIT(NODE) TREE_LANG_FLAG_0 (TREE_LIST_CHECK (NODE)) + extern tree decl_shadowed_for_var_lookup (tree); extern void decl_shadowed_for_var_insert (tree, tree); diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index ca8e7632466..b413ee854e6 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -1402,7 +1402,9 @@ convert_to_void (tree expr, impl_conv_void implicit, tsubst_flags_t complain) || code == PREDECREMENT_EXPR || code == PREINCREMENT_EXPR || code == POSTDECREMENT_EXPR - || code == POSTINCREMENT_EXPR))) + || code == POSTINCREMENT_EXPR)) + || code == VEC_PERM_EXPR + || code == VEC_COND_EXPR) && (complain & tf_warning)) warning_at (loc, OPT_Wunused_value, "value computed is not used"); } diff --git a/gcc/cp/lambda.c b/gcc/cp/lambda.c index 1855716532a..8bb820d0c3b 100644 --- a/gcc/cp/lambda.c +++ b/gcc/cp/lambda.c @@ -970,7 +970,7 @@ maybe_add_lambda_conv_op (tree type) the conversion op is used. */ if (varargs_function_p (callop)) { - DECL_DELETED_FN (fn) = 1; + DECL_DELETED_FN (STRIP_TEMPLATE (fn)) = 1; return; } diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index b607811df12..a1ea7c69a84 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1339,6 +1339,8 @@ write_abi_tags (tree tags) for (tree t = tags; t; t = TREE_CHAIN (t)) { + if (ABI_TAG_IMPLICIT (t)) + continue; tree str = TREE_VALUE (t); vec_safe_push (vec, str); } @@ -3770,7 +3772,8 @@ mangle_conv_op_name_for_type (const tree type) static void write_guarded_var_name (const tree variable) { - if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0) + if (DECL_NAME (variable) + && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0) /* The name of a guard variable for a reference temporary should refer to the reference, not the temporary. */ write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4); diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index c99c1fcb645..c3016bcda4b 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5803,7 +5803,13 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, postfix_expression = cp_parser_postfix_expression (parser, false, false, false, false, &idk); - if (saved_in_statement & IN_CILK_SPAWN) + if (!flag_enable_cilkplus) + { + error_at (token->location, "-fcilkplus must be enabled to use" + " %<_Cilk_spawn%>"); + cfun->calls_cilk_spawn = 0; + } + else if (saved_in_statement & IN_CILK_SPAWN) { error_at (token->location, "consecutive %<_Cilk_spawn%> keywords " "are not permitted"); @@ -5830,8 +5836,8 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, finish_expr_stmt (sync_expr); } else - error_at (input_location, "_Cilk_sync cannot be used without enabling " - "Cilk Plus"); + error_at (token->location, "-fcilkplus must be enabled to use" + " %<_Cilk_sync%>"); cp_lexer_consume_token (parser->lexer); break; @@ -8738,6 +8744,8 @@ cp_parser_lambda_expression (cp_parser* parser) = parser->fully_implicit_function_template_p; tree implicit_template_parms = parser->implicit_template_parms; cp_binding_level* implicit_template_scope = parser->implicit_template_scope; + bool auto_is_implicit_function_template_parm_p + = parser->auto_is_implicit_function_template_parm_p; parser->num_template_parameter_lists = 0; parser->in_statement = 0; @@ -8745,6 +8753,7 @@ cp_parser_lambda_expression (cp_parser* parser) parser->fully_implicit_function_template_p = false; parser->implicit_template_parms = 0; parser->implicit_template_scope = 0; + parser->auto_is_implicit_function_template_parm_p = false; /* By virtue of defining a local class, a lambda expression has access to the private variables of enclosing classes. */ @@ -8772,6 +8781,8 @@ cp_parser_lambda_expression (cp_parser* parser) = fully_implicit_function_template_p; parser->implicit_template_parms = implicit_template_parms; parser->implicit_template_scope = implicit_template_scope; + parser->auto_is_implicit_function_template_parm_p + = auto_is_implicit_function_template_parm_p; } pop_deferring_access_checks (); @@ -12977,20 +12988,21 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type, = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true, /*parenthesized_p=*/NULL); + if (!parameter_declarator) + return error_mark_node; + /* If the parameter declaration is marked as a parameter pack, set *IS_PARAMETER_PACK to notify the caller. Also, unmark the declarator's PACK_EXPANSION_P, otherwise we'll get errors from grokdeclarator. */ - if (parameter_declarator - && parameter_declarator->declarator + if (parameter_declarator->declarator && parameter_declarator->declarator->parameter_pack_p) { *is_parameter_pack = true; parameter_declarator->declarator->parameter_pack_p = false; } - if (parameter_declarator - && parameter_declarator->default_argument) + if (parameter_declarator->default_argument) { /* Can happen in some cases of erroneous input (c++/34892). */ if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)) @@ -13014,8 +13026,7 @@ cp_parser_template_parameter (cp_parser* parser, bool *is_non_type, /* We might end up with a pack expansion as the type of the non-type template parameter, in which case this is a non-type template parameter pack. */ - else if (parameter_declarator - && parameter_declarator->decl_specifiers.type + else if (parameter_declarator->decl_specifiers.type && PACK_EXPANSION_P (parameter_declarator->decl_specifiers.type)) { *is_parameter_pack = true; @@ -16775,6 +16786,15 @@ cp_parser_init_declarator (cp_parser* parser, warning (OPT_Wattributes, "attributes after parenthesized initializer ignored"); + /* A non-template declaration involving a function parameter list containing + an implicit template parameter will have been made into a template. If it + turns out that the resulting declaration is not an actual function then + finish the template declaration here. An error message will already have + been issued. */ + if (parser->fully_implicit_function_template_p) + if (!function_declarator_p (declarator)) + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); + /* For an in-class declaration, use `grokfield' to create the declaration. */ if (member_p) diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 98d7365a7cc..2e7cf60ba7d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5149,6 +5149,15 @@ alias_template_specialization_p (const_tree t) && DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t))); } +/* Return the number of innermost template parameters in TMPL. */ + +static int +num_innermost_template_parms (tree tmpl) +{ + tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl)); + return TREE_VEC_LENGTH (parms); +} + /* Return either TMPL or another template that it is equivalent to under DR 1286: An alias that just changes the name of a template is equivalent to the other template. */ @@ -5164,6 +5173,8 @@ get_underlying_template (tree tmpl) { tree sub = TYPE_TI_TEMPLATE (result); if (PRIMARY_TEMPLATE_P (sub) + && (num_innermost_template_parms (tmpl) + == num_innermost_template_parms (sub)) && same_type_p (result, TREE_TYPE (sub))) { /* The alias type is equivalent to the pattern of the diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0bb64c7752b..9f878874e6d 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7106,7 +7106,8 @@ trait_expr_value (cp_trait_kind kind, tree type1, tree type2) case CPTK_IS_BASE_OF: return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2) - && DERIVED_FROM_P (type1, type2)); + && (same_type_ignoring_top_level_qualifiers_p (type1, type2) + || DERIVED_FROM_P (type1, type2))); case CPTK_IS_CLASS: return (NON_UNION_CLASS_TYPE_P (type1)); diff --git a/gcc/doc/implement-c.texi b/gcc/doc/implement-c.texi index 2ddae637dec..762ffe018de 100644 --- a/gcc/doc/implement-c.texi +++ b/gcc/doc/implement-c.texi @@ -479,9 +479,8 @@ by the @option{-funsigned-bitfields} option. @cite{Allowable bit-field types other than @code{_Bool}, @code{signed int}, and @code{unsigned int} (C99 and C11 6.7.2.1).} -No other types are permitted in strictly conforming mode. -@c Would it be better to restrict the pedwarn for other types to C90 -@c mode and document the other types for C99/C11 mode? +Other integer types, such as @code{long int}, and enumerated types are +permitted even in strictly conforming mode. @item @cite{Whether atomic types are permitted for bit-fields (C11 6.7.2.1).} diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index ae4d5297646..9e16b3b1422 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -10065,6 +10065,41 @@ The default choice depends on the target. Set the maximum number of existing candidates that will be considered when seeking a basis for a new straight-line strength reduction candidate. +@item asan-globals +Enable buffer overflow detection for global objects. This kind +of protection is enabled by default if you are using +@option{-fsanitize=address} option. +To disable global objects protection use @option{--param asan-globals=0}. + +@item asan-stack +Enable buffer overflow detection for stack objects. This kind of +protection is enabled by default when using@option{-fsanitize=address}. +To disable stack protection use @option{--param asan-stack=0} option. + +@item asan-instrument-reads +Enable buffer overflow detection for memory reads. This kind of +protection is enabled by default when using @option{-fsanitize=address}. +To disable memory reads protection use +@option{--param asan-instrument-reads=0}. + +@item asan-instrument-writes +Enable buffer overflow detection for memory writes. This kind of +protection is enabled by default when using @option{-fsanitize=address}. +To disable memory writes protection use +@option{--param asan-instrument-writes=0} option. + +@item asan-memintrin +Enable detection for built-in functions. This kind of protection +is enabled by default when using @option{-fsanitize=address}. +To disable built-in functions protection use +@option{--param asan-memintrin=0}. + +@item asan-use-after-return +Enable detection of use-after-return. This kind of protection +is enabled by default when using @option{-fsanitize=address} option. +To disable use-after-return detection use +@option{--param asan-use-after-return=0}. + @end table @end table @@ -18855,6 +18890,38 @@ the AltiVec instruction set. You may also need to set @option{-mabi=altivec} to adjust the current ABI with AltiVec ABI enhancements. +When @option{-maltivec} is used, rather than @option{-maltivec=le} or +@option{-maltivec=be}, the element order for Altivec intrinsics such +as @code{vec_splat}, @code{vec_extract}, and @code{vec_insert} will +match array element order corresponding to the endianness of the +target. That is, element zero identifies the leftmost element in a +vector register when targeting a big-endian platform, and identifies +the rightmost element in a vector register when targeting a +little-endian platform. + +@item -maltivec=be +@opindex maltivec=be +Generate Altivec instructions using big-endian element order, +regardless of whether the target is big- or little-endian. This is +the default when targeting a big-endian platform. + +The element order is used to interpret element numbers in Altivec +intrinsics such as @code{vec_splat}, @code{vec_extract}, and +@code{vec_insert}. By default, these will match array element order +corresponding to the endianness for the target. + +@item -maltivec=le +@opindex maltivec=le +Generate Altivec instructions using little-endian element order, +regardless of whether the target is big- or little-endian. This is +the default when targeting a little-endian platform. This option is +currently ignored when targeting a big-endian platform. + +The element order is used to interpret element numbers in Altivec +intrinsics such as @code{vec_splat}, @code{vec_extract}, and +@code{vec_insert}. By default, these will match array element order +corresponding to the endianness for the target. + @item -mvrsave @itemx -mno-vrsave @opindex mvrsave diff --git a/gcc/doc/tree-ssa.texi b/gcc/doc/tree-ssa.texi index 391dba89e5d..e0238bd218a 100644 --- a/gcc/doc/tree-ssa.texi +++ b/gcc/doc/tree-ssa.texi @@ -53,9 +53,6 @@ variable has aliases. All these attributes are stored in data structures called annotations which are then linked to the field @code{ann} in @code{struct tree_common}. -Presently, we define annotations for variables (@code{var_ann_t}). -Annotations are defined and documented in @file{tree-flow.h}. - @node SSA Operands @section SSA Operands diff --git a/gcc/expr.c b/gcc/expr.c index 28d84b46bec..756edbe9236 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -5294,7 +5294,7 @@ store_expr (tree exp, rtx target, int call_param_p, bool nontemporal) temp = expand_expr_real (exp, tmp_target, GET_MODE (target), (call_param_p ? EXPAND_STACK_PARM : EXPAND_NORMAL), - &alt_rtl); + &alt_rtl, false); } /* If TEMP is a VOIDmode constant and the mode of the type of EXP is not @@ -7882,11 +7882,21 @@ expand_constructor (tree exp, rtx target, enum expand_modifier modifier, address, and ALT_RTL is non-NULL, then *ALT_RTL is set to the DECL_RTL of the VAR_DECL. *ALT_RTL is also set if EXP is a COMPOUND_EXPR whose second argument is such a VAR_DECL, and so on - recursively. */ + recursively. + + If INNER_REFERENCE_P is true, we are expanding an inner reference. + In this case, we don't adjust a returned MEM rtx that wouldn't be + sufficiently aligned for its mode; instead, it's up to the caller + to deal with it afterwards. This is used to make sure that unaligned + base objects for which out-of-bounds accesses are supported, for + example record types with trailing arrays, aren't realigned behind + the back of the caller. + The normal operating mode is to pass FALSE for this parameter. */ rtx expand_expr_real (tree exp, rtx target, enum machine_mode tmode, - enum expand_modifier modifier, rtx *alt_rtl) + enum expand_modifier modifier, rtx *alt_rtl, + bool inner_reference_p) { rtx ret; @@ -7898,7 +7908,8 @@ expand_expr_real (tree exp, rtx target, enum machine_mode tmode, return ret ? ret : const0_rtx; } - ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl); + ret = expand_expr_real_1 (exp, target, tmode, modifier, alt_rtl, + inner_reference_p); return ret; } @@ -9209,7 +9220,8 @@ stmt_is_replaceable_p (gimple stmt) rtx expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, - enum expand_modifier modifier, rtx *alt_rtl) + enum expand_modifier modifier, rtx *alt_rtl, + bool inner_reference_p) { rtx op0, op1, temp, decl_rtl; tree type; @@ -9355,7 +9367,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, set_curr_insn_location (gimple_location (g)); r = expand_expr_real (gimple_assign_rhs_to_tree (g), target, - tmode, modifier, NULL); + tmode, modifier, NULL, inner_reference_p); set_curr_insn_location (saved_loc); if (REG_P (r) && !REG_EXPR (r)) set_reg_attrs_for_decl_rtl (SSA_NAME_VAR (exp), r); @@ -9580,7 +9592,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, case SAVE_EXPR: { tree val = treeop0; - rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl); + rtx ret = expand_expr_real_1 (val, target, tmode, modifier, alt_rtl, + inner_reference_p); if (!SAVE_EXPR_RESOLVED_P (exp)) { @@ -9717,6 +9730,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, MEM_VOLATILE_P (temp) = 1; if (modifier != EXPAND_WRITE && modifier != EXPAND_MEMORY + && !inner_reference_p && mode != BLKmode && align < GET_MODE_ALIGNMENT (mode)) { @@ -9942,15 +9956,16 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, computation, since it will need a temporary and TARGET is known to have to do. This occurs in unchecked conversion in Ada. */ orig_op0 = op0 - = expand_expr (tem, - (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE - && COMPLETE_TYPE_P (TREE_TYPE (tem)) - && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) - != INTEGER_CST) - && modifier != EXPAND_STACK_PARM - ? target : NULL_RTX), - VOIDmode, - modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier); + = expand_expr_real (tem, + (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE + && COMPLETE_TYPE_P (TREE_TYPE (tem)) + && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) + != INTEGER_CST) + && modifier != EXPAND_STACK_PARM + ? target : NULL_RTX), + VOIDmode, + modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier, + NULL, true); /* If the field has a mode, we want to access it in the field's mode, not the computed mode. @@ -10307,14 +10322,15 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, { /* See the normal_inner_ref case for the rationale. */ orig_op0 - = expand_expr (tem, - (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE - && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) - != INTEGER_CST) - && modifier != EXPAND_STACK_PARM - ? target : NULL_RTX), - VOIDmode, - modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier); + = expand_expr_real (tem, + (TREE_CODE (TREE_TYPE (tem)) == UNION_TYPE + && (TREE_CODE (TYPE_SIZE (TREE_TYPE (tem))) + != INTEGER_CST) + && modifier != EXPAND_STACK_PARM + ? target : NULL_RTX), + VOIDmode, + modifier == EXPAND_SUM ? EXPAND_NORMAL : modifier, + NULL, true); if (MEM_P (orig_op0)) { @@ -10341,7 +10357,8 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, } if (!op0) - op0 = expand_expr (treeop0, NULL_RTX, VOIDmode, modifier); + op0 = expand_expr_real (treeop0, NULL_RTX, VOIDmode, modifier, + NULL, inner_reference_p); /* If the input and output modes are both the same, we are done. */ if (mode == GET_MODE (op0)) @@ -10408,50 +10425,53 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, op0 = copy_rtx (op0); set_mem_align (op0, MAX (MEM_ALIGN (op0), TYPE_ALIGN (type))); } - else if (mode != BLKmode - && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode) - /* If the target does have special handling for unaligned - loads of mode then use them. */ - && ((icode = optab_handler (movmisalign_optab, mode)) - != CODE_FOR_nothing)) - { - rtx reg, insn; - - op0 = adjust_address (op0, mode, 0); - /* We've already validated the memory, and we're creating a - new pseudo destination. The predicates really can't - fail. */ - reg = gen_reg_rtx (mode); - - /* Nor can the insn generator. */ - insn = GEN_FCN (icode) (reg, op0); - emit_insn (insn); - return reg; - } - else if (STRICT_ALIGNMENT + else if (modifier != EXPAND_WRITE + && modifier != EXPAND_MEMORY + && !inner_reference_p && mode != BLKmode && MEM_ALIGN (op0) < GET_MODE_ALIGNMENT (mode)) { - tree inner_type = TREE_TYPE (treeop0); - HOST_WIDE_INT temp_size - = MAX (int_size_in_bytes (inner_type), - (HOST_WIDE_INT) GET_MODE_SIZE (mode)); - rtx new_rtx - = assign_stack_temp_for_type (mode, temp_size, type); - rtx new_with_op0_mode - = adjust_address (new_rtx, GET_MODE (op0), 0); - - gcc_assert (!TREE_ADDRESSABLE (exp)); - - if (GET_MODE (op0) == BLKmode) - emit_block_move (new_with_op0_mode, op0, - GEN_INT (GET_MODE_SIZE (mode)), - (modifier == EXPAND_STACK_PARM - ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL)); - else - emit_move_insn (new_with_op0_mode, op0); + /* If the target does have special handling for unaligned + loads of mode then use them. */ + if ((icode = optab_handler (movmisalign_optab, mode)) + != CODE_FOR_nothing) + { + rtx reg, insn; + + op0 = adjust_address (op0, mode, 0); + /* We've already validated the memory, and we're creating a + new pseudo destination. The predicates really can't + fail. */ + reg = gen_reg_rtx (mode); + + /* Nor can the insn generator. */ + insn = GEN_FCN (icode) (reg, op0); + emit_insn (insn); + return reg; + } + else if (STRICT_ALIGNMENT) + { + tree inner_type = TREE_TYPE (treeop0); + HOST_WIDE_INT temp_size + = MAX (int_size_in_bytes (inner_type), + (HOST_WIDE_INT) GET_MODE_SIZE (mode)); + rtx new_rtx + = assign_stack_temp_for_type (mode, temp_size, type); + rtx new_with_op0_mode + = adjust_address (new_rtx, GET_MODE (op0), 0); + + gcc_assert (!TREE_ADDRESSABLE (exp)); + + if (GET_MODE (op0) == BLKmode) + emit_block_move (new_with_op0_mode, op0, + GEN_INT (GET_MODE_SIZE (mode)), + (modifier == EXPAND_STACK_PARM + ? BLOCK_OP_CALL_PARM : BLOCK_OP_NORMAL)); + else + emit_move_insn (new_with_op0_mode, op0); - op0 = new_rtx; + op0 = new_rtx; + } } op0 = adjust_address (op0, mode, 0); @@ -10551,7 +10571,7 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, /* WITH_SIZE_EXPR expands to its first argument. The caller should have pulled out the size to use in whatever context it needed. */ return expand_expr_real (treeop0, original_target, tmode, - modifier, alt_rtl); + modifier, alt_rtl, inner_reference_p); default: return expand_expr_real_2 (&ops, target, tmode, modifier); diff --git a/gcc/expr.h b/gcc/expr.h index a39b98ea5ef..da5d4a6d56f 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -41,7 +41,8 @@ along with GCC; see the file COPYING3. If not see is a constant that is not a legitimate address. EXPAND_WRITE means we are only going to write to the resulting rtx. EXPAND_MEMORY means we are interested in a memory result, even if - the memory is constant and we could have propagated a constant value. */ + the memory is constant and we could have propagated a constant value, + or the memory is unaligned on a STRICT_ALIGNMENT target. */ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM, EXPAND_SUM, EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, EXPAND_WRITE, EXPAND_MEMORY}; @@ -437,9 +438,9 @@ extern rtx force_operand (rtx, rtx); /* Work horses for expand_expr. */ extern rtx expand_expr_real (tree, rtx, enum machine_mode, - enum expand_modifier, rtx *); + enum expand_modifier, rtx *, bool); extern rtx expand_expr_real_1 (tree, rtx, enum machine_mode, - enum expand_modifier, rtx *); + enum expand_modifier, rtx *, bool); extern rtx expand_expr_real_2 (sepops, rtx, enum machine_mode, enum expand_modifier); @@ -450,13 +451,13 @@ static inline rtx expand_expr (tree exp, rtx target, enum machine_mode mode, enum expand_modifier modifier) { - return expand_expr_real (exp, target, mode, modifier, NULL); + return expand_expr_real (exp, target, mode, modifier, NULL, false); } static inline rtx expand_normal (tree exp) { - return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL); + return expand_expr_real (exp, NULL_RTX, VOIDmode, EXPAND_NORMAL, NULL, false); } /* At the start of a function, record that we have no previously-pushed diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 202c0479e42..f2f1a853ddf 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,38 @@ +2014-01-12 Janus Weil <janus@gcc.gnu.org> + + PR fortran/58026 + * decl.c (gfc_match_data_decl): Improve error recovery. + +2014-01-09 Tobias Burnus <burnus@net-b.de> + + * cpp.c (gfc_cpp_handle_option): Add missing break. + * trans-io.c (transfer_expr): Silence unused value warning. + +2014-01-08 Janus Weil <janus@gcc.gnu.org> + + PR fortran/58182 + * resolve.c (gfc_verify_binding_labels): Modify order of checks. + +2014-01-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59589 + * class.c (comp_is_finalizable): New function to dermine if a given + component is finalizable. + (finalize_component, generate_finalization_wrapper): Use it. + +2014-01-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59023 + PR fortran/59662 + * resolve.c (resolve_global_procedure): Don't apply to c-binding + procedures. + (gfc_verify_binding_labels): Remove duplicate line. + +2014-01-04 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59547 + * class.c (add_proc_comp): Copy pure attribute. + 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> Update copyright years diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c index 47a308257eb..d3569fd6ba8 100644 --- a/gcc/fortran/class.c +++ b/gcc/fortran/class.c @@ -714,9 +714,11 @@ add_proc_comp (gfc_symbol *vtype, const char *name, gfc_typebound_proc *tb) if (tb->u.specific) { - c->ts.interface = tb->u.specific->n.sym; + gfc_symbol *ifc = tb->u.specific->n.sym; + c->ts.interface = ifc; if (!tb->deferred) c->initializer = gfc_get_variable_expr (tb->u.specific); + c->attr.pure = ifc->attr.pure; } } @@ -785,6 +787,25 @@ has_finalizer_component (gfc_symbol *derived) } +static bool +comp_is_finalizable (gfc_component *comp) +{ + if (comp->attr.allocatable && comp->ts.type != BT_CLASS) + return true; + else if (comp->ts.type == BT_DERIVED && !comp->attr.pointer + && (comp->ts.u.derived->attr.alloc_comp + || has_finalizer_component (comp->ts.u.derived) + || (comp->ts.u.derived->f2k_derived + && comp->ts.u.derived->f2k_derived->finalizers))) + return true; + else if (comp->ts.type == BT_CLASS && CLASS_DATA (comp) + && CLASS_DATA (comp)->attr.allocatable) + return true; + else + return false; +} + + /* Call DEALLOCATE for the passed component if it is allocatable, if it is neither allocatable nor a pointer but has a finalizer, call it. If it is a nonpointer component with allocatable components or has finalizers, walk @@ -801,19 +822,7 @@ finalize_component (gfc_expr *expr, gfc_symbol *derived, gfc_component *comp, gfc_expr *e; gfc_ref *ref; - if (comp->ts.type != BT_DERIVED && comp->ts.type != BT_CLASS - && !comp->attr.allocatable) - return; - - if ((comp->ts.type == BT_DERIVED && comp->attr.pointer) - || (comp->ts.type == BT_CLASS && CLASS_DATA (comp) - && CLASS_DATA (comp)->attr.pointer)) - return; - - if (comp->ts.type == BT_DERIVED && !comp->attr.allocatable - && (comp->ts.u.derived->f2k_derived == NULL - || comp->ts.u.derived->f2k_derived->finalizers == NULL) - && !has_finalizer_component (comp->ts.u.derived)) + if (!comp_is_finalizable (comp)) return; e = gfc_copy_expr (expr); @@ -1460,17 +1469,7 @@ generate_finalization_wrapper (gfc_symbol *derived, gfc_namespace *ns, && ancestor_wrapper && ancestor_wrapper->expr_type != EXPR_NULL) continue; - if (comp->ts.type != BT_CLASS && !comp->attr.pointer - && (comp->attr.allocatable - || (comp->ts.type == BT_DERIVED - && (comp->ts.u.derived->attr.alloc_comp - || has_finalizer_component (comp->ts.u.derived) - || (comp->ts.u.derived->f2k_derived - && comp->ts.u.derived->f2k_derived->finalizers))))) - finalizable_comp = true; - else if (comp->ts.type == BT_CLASS && CLASS_DATA (comp) - && CLASS_DATA (comp)->attr.allocatable) - finalizable_comp = true; + finalizable_comp |= comp_is_finalizable (comp); } /* If there is no new finalizer and no new allocatable, return with diff --git a/gcc/fortran/cpp.c b/gcc/fortran/cpp.c index 37bc13b388e..68ce91ffdbf 100644 --- a/gcc/fortran/cpp.c +++ b/gcc/fortran/cpp.c @@ -363,6 +363,7 @@ gfc_cpp_handle_option (size_t scode, const char *arg, int value ATTRIBUTE_UNUSED case OPT_Wdate_time: gfc_cpp_option.warn_date_time = value; + break; case OPT_A: case OPT_D: diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index e8ac941a082..8831b1997bd 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -4287,12 +4287,10 @@ gfc_match_data_decl (void) || current_ts.u.derived->attr.zero_comp)) goto ok; - /* Now we have an error, which we signal, and then fix up - because the knock-on is plain and simple confusing. */ - gfc_error_now ("Derived type at %C has not been previously defined " - "and so cannot appear in a derived type definition"); - current_attr.pointer = 1; - goto ok; + gfc_error ("Derived type at %C has not been previously defined " + "and so cannot appear in a derived type definition"); + m = MATCH_ERROR; + goto cleanup; } ok: diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 0e80f491abc..ad088bb73b2 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2351,6 +2351,7 @@ resolve_global_procedure (gfc_symbol *sym, locus *where, if ((sym->attr.if_source == IFSRC_UNKNOWN || sym->attr.if_source == IFSRC_IFBODY) && gsym->type != GSYM_UNKNOWN + && !gsym->binding_label && gsym->ns && gsym->ns->resolved != -1 && gsym->ns->proc_name @@ -10163,7 +10164,6 @@ gfc_verify_binding_labels (gfc_symbol *sym) gsym->where = sym->declared_at; gsym->sym_name = sym->name; gsym->binding_label = sym->binding_label; - gsym->binding_label = sym->binding_label; gsym->ns = sym->ns; gsym->mod_name = module; if (sym->attr.function) @@ -10200,11 +10200,11 @@ gfc_verify_binding_labels (gfc_symbol *sym) && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION) || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY)) && sym != gsym->ns->proc_name - && (strcmp (gsym->sym_name, sym->name) != 0 - || module != gsym->mod_name + && (module != gsym->mod_name + || strcmp (gsym->sym_name, sym->name) != 0 || (module && strcmp (module, gsym->mod_name) != 0))) { - /* Print an error if the procdure is defined multiple times; we have to + /* Print an error if the procedure is defined multiple times; we have to exclude references to the same procedure via module association or multiple checks for the same procedure. */ gfc_error ("Procedure %s with binding label %s at %L uses the same " diff --git a/gcc/fortran/trans-io.c b/gcc/fortran/trans-io.c index ba27f810d79..853e77d62f5 100644 --- a/gcc/fortran/trans-io.c +++ b/gcc/fortran/trans-io.c @@ -2152,7 +2152,7 @@ transfer_expr (gfc_se * se, gfc_typespec * ts, tree addr_expr, gfc_code * code) function, if only referenced in an io statement, requires this check (see PR58771). */ if (ts->u.derived->backend_decl == NULL_TREE) - tmp = gfc_typenode_for_spec (ts); + (void) gfc_typenode_for_spec (ts); for (c = ts->u.derived->components; c; c = c->next) { diff --git a/gcc/function.c b/gcc/function.c index 8dcdb313661..b43e67f65ef 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4405,6 +4405,7 @@ invoke_set_current_function_hook (tree fndecl) cl_optimization_restore (&global_options, TREE_OPTIMIZATION (opts)); } + targetm.set_current_function (fndecl); this_fn_optabs = this_target_optabs; if (opts != optimization_default_node) @@ -4414,8 +4415,6 @@ invoke_set_current_function_hook (tree fndecl) this_fn_optabs = (struct target_optabs *) TREE_OPTIMIZATION_OPTABS (opts); } - - targetm.set_current_function (fndecl); } } diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c index ef5120a0c1f..b710f596e37 100644 --- a/gcc/gcov-io.c +++ b/gcc/gcov-io.c @@ -36,6 +36,61 @@ static const gcov_unsigned_t *gcov_read_words (unsigned); static void gcov_allocate (unsigned); #endif +/* Optimum number of gcov_unsigned_t's read from or written to disk. */ +#define GCOV_BLOCK_SIZE (1 << 10) + +GCOV_LINKAGE struct gcov_var +{ + FILE *file; + gcov_position_t start; /* Position of first byte of block */ + unsigned offset; /* Read/write position within the block. */ + unsigned length; /* Read limit in the block. */ + unsigned overread; /* Number of words overread. */ + int error; /* < 0 overflow, > 0 disk error. */ + int mode; /* < 0 writing, > 0 reading */ +#if IN_LIBGCOV + /* Holds one block plus 4 bytes, thus all coverage reads & writes + fit within this buffer and we always can transfer GCOV_BLOCK_SIZE + to and from the disk. libgcov never backtracks and only writes 4 + or 8 byte objects. */ + gcov_unsigned_t buffer[GCOV_BLOCK_SIZE + 1]; +#else + int endian; /* Swap endianness. */ + /* Holds a variable length block, as the compiler can write + strings and needs to backtrack. */ + size_t alloc; + gcov_unsigned_t *buffer; +#endif +} gcov_var; + +/* Save the current position in the gcov file. */ +static inline gcov_position_t +gcov_position (void) +{ + gcc_assert (gcov_var.mode > 0); + return gcov_var.start + gcov_var.offset; +} + +/* Return nonzero if the error flag is set. */ +static inline int +gcov_is_error (void) +{ + return gcov_var.file ? gcov_var.error : 1; +} + +#if IN_LIBGCOV +/* Move to beginning of file and initialize for writing. */ +GCOV_LINKAGE inline void +gcov_rewrite (void) +{ + gcc_assert (gcov_var.mode > 0); + gcov_var.mode = -1; + gcov_var.start = 0; + gcov_var.offset = 0; + fseek (gcov_var.file, 0L, SEEK_SET); +} +#endif + static inline gcov_unsigned_t from_file (gcov_unsigned_t value) { #if !IN_LIBGCOV diff --git a/gcc/gcov-io.h b/gcc/gcov-io.h index 3d3fd056587..cbf95cfc552 100644 --- a/gcc/gcov-io.h +++ b/gcc/gcov-io.h @@ -164,51 +164,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #ifndef GCC_GCOV_IO_H #define GCC_GCOV_IO_H -#if IN_LIBGCOV -/* About the target */ - -#if BITS_PER_UNIT == 8 -typedef unsigned gcov_unsigned_t __attribute__ ((mode (SI))); -typedef unsigned gcov_position_t __attribute__ ((mode (SI))); -#if LONG_LONG_TYPE_SIZE > 32 -typedef signed gcov_type __attribute__ ((mode (DI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (DI))); -#else -typedef signed gcov_type __attribute__ ((mode (SI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); -#endif -#else -#if BITS_PER_UNIT == 16 -typedef unsigned gcov_unsigned_t __attribute__ ((mode (HI))); -typedef unsigned gcov_position_t __attribute__ ((mode (HI))); -#if LONG_LONG_TYPE_SIZE > 32 -typedef signed gcov_type __attribute__ ((mode (SI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); -#else -typedef signed gcov_type __attribute__ ((mode (HI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); -#endif -#else -typedef unsigned gcov_unsigned_t __attribute__ ((mode (QI))); -typedef unsigned gcov_position_t __attribute__ ((mode (QI))); -#if LONG_LONG_TYPE_SIZE > 32 -typedef signed gcov_type __attribute__ ((mode (HI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); -#else -typedef signed gcov_type __attribute__ ((mode (QI))); -typedef unsigned gcov_type_unsigned __attribute__ ((mode (QI))); -#endif -#endif -#endif - - -#if defined (TARGET_POSIX_IO) -#define GCOV_LOCKED 1 -#else -#define GCOV_LOCKED 0 -#endif - -#else /* !IN_LIBGCOV */ +#ifndef IN_LIBGCOV /* About the host */ typedef unsigned gcov_unsigned_t; @@ -231,47 +187,9 @@ typedef unsigned HOST_WIDEST_INT gcov_type_unsigned; #define GCOV_LOCKED 0 #endif -#endif /* !IN_LIBGCOV */ - -/* In gcov we want function linkage to be static. In the compiler we want - it extern, so that they can be accessed from elsewhere. In libgcov we - need these functions to be extern, so prefix them with __gcov. In - libgcov they must also be hidden so that the instance in the executable - is not also used in a DSO. */ -#if IN_LIBGCOV - -#include "tconfig.h" - -#define gcov_var __gcov_var -#define gcov_open __gcov_open -#define gcov_close __gcov_close -#define gcov_write_tag_length __gcov_write_tag_length -#define gcov_position __gcov_position -#define gcov_seek __gcov_seek -#define gcov_rewrite __gcov_rewrite -#define gcov_is_error __gcov_is_error -#define gcov_write_unsigned __gcov_write_unsigned -#define gcov_write_counter __gcov_write_counter -#define gcov_write_summary __gcov_write_summary -#define gcov_read_unsigned __gcov_read_unsigned -#define gcov_read_counter __gcov_read_counter -#define gcov_read_summary __gcov_read_summary - -/* Poison these, so they don't accidentally slip in. */ -#pragma GCC poison gcov_write_string gcov_write_tag gcov_write_length -#pragma GCC poison gcov_read_string gcov_sync gcov_time gcov_magic - -#ifdef HAVE_GAS_HIDDEN -#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) -#else -#define ATTRIBUTE_HIDDEN -#endif - -#else - #define ATTRIBUTE_HIDDEN -#endif +#endif /* !IN_LIBGOCV */ #ifndef GCOV_LINKAGE #define GCOV_LINKAGE extern @@ -442,132 +360,7 @@ struct gcov_summary struct gcov_ctr_summary ctrs[GCOV_COUNTERS_SUMMABLE]; }; -/* Structures embedded in coveraged program. The structures generated - by write_profile must match these. */ - -#if IN_LIBGCOV -/* Information about counters for a single function. */ -struct gcov_ctr_info -{ - gcov_unsigned_t num; /* number of counters. */ - gcov_type *values; /* their values. */ -}; - -/* Information about a single function. This uses the trailing array - idiom. The number of counters is determined from the merge pointer - array in gcov_info. The key is used to detect which of a set of - comdat functions was selected -- it points to the gcov_info object - of the object file containing the selected comdat function. */ - -struct gcov_fn_info -{ - const struct gcov_info *key; /* comdat key */ - gcov_unsigned_t ident; /* unique ident of function */ - gcov_unsigned_t lineno_checksum; /* function lineo_checksum */ - gcov_unsigned_t cfg_checksum; /* function cfg checksum */ - struct gcov_ctr_info ctrs[0]; /* instrumented counters */ -}; - -/* Type of function used to merge counters. */ -typedef void (*gcov_merge_fn) (gcov_type *, gcov_unsigned_t); - -/* Information about a single object file. */ -struct gcov_info -{ - gcov_unsigned_t version; /* expected version number */ - struct gcov_info *next; /* link to next, used by libgcov */ - - gcov_unsigned_t stamp; /* uniquifying time stamp */ - const char *filename; /* output file name */ - - gcov_merge_fn merge[GCOV_COUNTERS]; /* merge functions (null for - unused) */ - - unsigned n_functions; /* number of functions */ - const struct gcov_fn_info *const *functions; /* pointer to pointers - to function information */ -}; - -/* Register a new object file module. */ -extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN; - -/* Called before fork, to avoid double counting. */ -extern void __gcov_flush (void) ATTRIBUTE_HIDDEN; - -/* Function to reset all counters to 0. */ -extern void __gcov_reset (void); - -/* Function to enable early write of profile information so far. */ -extern void __gcov_dump (void); - -/* The merge function that just sums the counters. */ -extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; - -/* The merge function to choose the most common value. */ -extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; - -/* The merge function to choose the most common difference between - consecutive values. */ -extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; - -/* The merge function that just ors the counters together. */ -extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; - -extern void __gcov_merge_time_profile (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; - -/* The profiler functions. */ -extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned); -extern void __gcov_pow2_profiler (gcov_type *, gcov_type); -extern void __gcov_one_value_profiler (gcov_type *, gcov_type); -extern void __gcov_indirect_call_profiler (gcov_type*, gcov_type, - void*, void*); -extern void __gcov_indirect_call_profiler_v2 (gcov_type, void *); -extern void __gcov_average_profiler (gcov_type *, gcov_type); -extern void __gcov_ior_profiler (gcov_type *, gcov_type); -extern void __gcov_time_profiler (gcov_type *); - -#ifndef inhibit_libc -/* The wrappers around some library functions.. */ -extern pid_t __gcov_fork (void) ATTRIBUTE_HIDDEN; -extern int __gcov_execl (const char *, char *, ...) ATTRIBUTE_HIDDEN; -extern int __gcov_execlp (const char *, char *, ...) ATTRIBUTE_HIDDEN; -extern int __gcov_execle (const char *, char *, ...) ATTRIBUTE_HIDDEN; -extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN; -extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN; -extern int __gcov_execve (const char *, char *const [], char *const []) - ATTRIBUTE_HIDDEN; -#endif - -#endif /* IN_LIBGCOV */ - -#if IN_LIBGCOV >= 0 - -/* Optimum number of gcov_unsigned_t's read from or written to disk. */ -#define GCOV_BLOCK_SIZE (1 << 10) - -GCOV_LINKAGE struct gcov_var -{ - FILE *file; - gcov_position_t start; /* Position of first byte of block */ - unsigned offset; /* Read/write position within the block. */ - unsigned length; /* Read limit in the block. */ - unsigned overread; /* Number of words overread. */ - int error; /* < 0 overflow, > 0 disk error. */ - int mode; /* < 0 writing, > 0 reading */ -#if IN_LIBGCOV - /* Holds one block plus 4 bytes, thus all coverage reads & writes - fit within this buffer and we always can transfer GCOV_BLOCK_SIZE - to and from the disk. libgcov never backtracks and only writes 4 - or 8 byte objects. */ - gcov_unsigned_t buffer[GCOV_BLOCK_SIZE + 1]; -#else - int endian; /* Swap endianness. */ - /* Holds a variable length block, as the compiler can write - strings and needs to backtrack. */ - size_t alloc; - gcov_unsigned_t *buffer; -#endif -} gcov_var ATTRIBUTE_HIDDEN; +#if !defined(inhibit_libc) /* Functions for reading and writing gcov files. In libgcov you can open the file for reading then writing. Elsewhere you can open the @@ -578,38 +371,20 @@ GCOV_LINKAGE struct gcov_var you use the functions for reading, then gcov_rewrite then the functions for writing. Your file may become corrupted if you break these invariants. */ -#if IN_LIBGCOV -GCOV_LINKAGE int gcov_open (const char */*name*/) ATTRIBUTE_HIDDEN; -#else + +#if !IN_LIBGCOV GCOV_LINKAGE int gcov_open (const char */*name*/, int /*direction*/); GCOV_LINKAGE int gcov_magic (gcov_unsigned_t, gcov_unsigned_t); #endif -GCOV_LINKAGE int gcov_close (void) ATTRIBUTE_HIDDEN; /* Available everywhere. */ -static gcov_position_t gcov_position (void); -static int gcov_is_error (void); - +GCOV_LINKAGE int gcov_close (void) ATTRIBUTE_HIDDEN; GCOV_LINKAGE gcov_unsigned_t gcov_read_unsigned (void) ATTRIBUTE_HIDDEN; GCOV_LINKAGE gcov_type gcov_read_counter (void) ATTRIBUTE_HIDDEN; GCOV_LINKAGE void gcov_read_summary (struct gcov_summary *) ATTRIBUTE_HIDDEN; - -#if IN_LIBGCOV -/* Available only in libgcov */ -GCOV_LINKAGE void gcov_write_counter (gcov_type) ATTRIBUTE_HIDDEN; -GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t) - ATTRIBUTE_HIDDEN; -GCOV_LINKAGE void gcov_write_summary (gcov_unsigned_t /*tag*/, - const struct gcov_summary *) - ATTRIBUTE_HIDDEN; -static void gcov_rewrite (void); -GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/) ATTRIBUTE_HIDDEN; -#else -/* Available outside libgcov */ GCOV_LINKAGE const char *gcov_read_string (void); GCOV_LINKAGE void gcov_sync (gcov_position_t /*base*/, gcov_unsigned_t /*length */); -#endif #if !IN_GCOV /* Available outside gcov */ @@ -651,37 +426,6 @@ GCOV_LINKAGE void compute_working_sets (const struct gcov_ctr_summary *summary, GCOV_LINKAGE time_t gcov_time (void); #endif -/* Save the current position in the gcov file. */ - -static inline gcov_position_t -gcov_position (void) -{ - gcc_assert (gcov_var.mode > 0); - return gcov_var.start + gcov_var.offset; -} - -/* Return nonzero if the error flag is set. */ - -static inline int -gcov_is_error (void) -{ - return gcov_var.file ? gcov_var.error : 1; -} - -#if IN_LIBGCOV -/* Move to beginning of file and initialize for writing. */ - -static inline void -gcov_rewrite (void) -{ - gcc_assert (gcov_var.mode > 0); - gcov_var.mode = -1; - gcov_var.start = 0; - gcov_var.offset = 0; - fseek (gcov_var.file, 0L, SEEK_SET); -} -#endif - -#endif /* IN_LIBGCOV >= 0 */ +#endif /* !inhibit_libc */ #endif /* GCC_GCOV_IO_H */ diff --git a/gcc/gdbasan.in b/gcc/gdbasan.in index cf05825395b..3a6fca0a8ac 100644 --- a/gcc/gdbasan.in +++ b/gcc/gdbasan.in @@ -1,3 +1,7 @@ # Put a breakpoint on __asan_report_error to help with debugging buffer # overflow. b __asan_report_error + +# Put a breakpoint on __sanitizer::Report to help with debugging sanitizer +# issues. +b __sanitizer::Report diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 5d5b361501b..e3c1a5695cc 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -879,8 +879,6 @@ gimple_fold_builtin (gimple stmt) int nargs; location_t loc = gimple_location (stmt); - gcc_assert (is_gimple_call (stmt)); - ignore = (gimple_call_lhs (stmt) == NULL); /* First try the generic builtin folder. If that succeeds, return the @@ -890,6 +888,8 @@ gimple_fold_builtin (gimple stmt) { if (ignore) STRIP_NOPS (result); + else + result = fold_convert (gimple_call_return_type (stmt), result); return result; } @@ -1167,7 +1167,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) (OBJ_TYPE_REF_EXPR (callee))))) { fprintf (dump_file, - "Type inheritnace inconsistent devirtualization of "); + "Type inheritance inconsistent devirtualization of "); print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); fprintf (dump_file, " to "); print_generic_expr (dump_file, callee, TDF_SLIM); @@ -1177,24 +1177,45 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) gimple_call_set_fn (stmt, OBJ_TYPE_REF_EXPR (callee)); changed = true; } - else if (flag_devirtualize && virtual_method_call_p (callee)) + else if (flag_devirtualize && !inplace && virtual_method_call_p (callee)) { bool final; vec <cgraph_node *>targets = possible_polymorphic_call_targets (callee, &final); if (final && targets.length () <= 1) { + tree lhs = gimple_call_lhs (stmt); if (targets.length () == 1) { gimple_call_set_fndecl (stmt, targets[0]->decl); changed = true; + /* If the call becomes noreturn, remove the lhs. */ + if (lhs && (gimple_call_flags (stmt) & ECF_NORETURN)) + { + if (TREE_CODE (lhs) == SSA_NAME) + { + tree var = create_tmp_var (TREE_TYPE (lhs), NULL); + tree def = get_or_create_ssa_default_def (cfun, var); + gimple new_stmt = gimple_build_assign (lhs, def); + gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); + } + gimple_call_set_lhs (stmt, NULL_TREE); + } } - else if (!inplace) + else { tree fndecl = builtin_decl_implicit (BUILT_IN_UNREACHABLE); gimple new_stmt = gimple_build_call (fndecl, 0); gimple_set_location (new_stmt, gimple_location (stmt)); - gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); + if (lhs && TREE_CODE (lhs) == SSA_NAME) + { + tree var = create_tmp_var (TREE_TYPE (lhs), NULL); + tree def = get_or_create_ssa_default_def (cfun, var); + gsi_insert_before (gsi, new_stmt, GSI_SAME_STMT); + update_call_from_tree (gsi, def); + } + else + gsi_replace (gsi, new_stmt, true); return true; } } @@ -1206,8 +1227,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) /* Check for builtins that CCP can handle using information not available in the generic fold routines. */ - callee = gimple_call_fndecl (stmt); - if (callee && DECL_BUILT_IN (callee)) + if (gimple_call_builtin_p (stmt)) { tree result = gimple_fold_builtin (stmt); if (result) @@ -1216,7 +1236,7 @@ gimple_fold_call (gimple_stmt_iterator *gsi, bool inplace) gimplify_and_update_call_from_tree (gsi, result); changed = true; } - else if (DECL_BUILT_IN_CLASS (callee) == BUILT_IN_MD) + else if (gimple_call_builtin_p (stmt, BUILT_IN_MD)) changed |= targetm.gimple_fold_builtin (gsi); } @@ -2726,7 +2746,9 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree)) fn = (*valueize) (gimple_call_fn (stmt)); if (TREE_CODE (fn) == ADDR_EXPR && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL - && DECL_BUILT_IN (TREE_OPERAND (fn, 0))) + && DECL_BUILT_IN (TREE_OPERAND (fn, 0)) + && gimple_builtin_call_types_compatible_p (stmt, + TREE_OPERAND (fn, 0))) { tree *args = XALLOCAVEC (tree, gimple_call_num_args (stmt)); tree call, retval; @@ -2738,8 +2760,11 @@ gimple_fold_stmt_to_constant_1 (gimple stmt, tree (*valueize) (tree)) fn, gimple_call_num_args (stmt), args); retval = fold_call_expr (EXPR_LOCATION (call), call, false); if (retval) - /* fold_call_expr wraps the result inside a NOP_EXPR. */ - STRIP_NOPS (retval); + { + /* fold_call_expr wraps the result inside a NOP_EXPR. */ + STRIP_NOPS (retval); + retval = fold_convert (gimple_call_return_type (stmt), retval); + } return retval; } return NULL_TREE; diff --git a/gcc/gimple.c b/gcc/gimple.c index 0330c0cc9f3..4d3b99ed9d2 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -2351,27 +2351,37 @@ gimple_ior_addresses_taken (bitmap addresses_taken, gimple stmt) } -/* Return TRUE iff stmt is a call to a built-in function. */ +/* Return true if TYPE1 and TYPE2 are compatible enough for builtin + processing. */ -bool -is_gimple_builtin_call (gimple stmt) -{ - tree callee; - - if (is_gimple_call (stmt) - && (callee = gimple_call_fndecl (stmt)) - && is_builtin_fn (callee) - && DECL_BUILT_IN_CLASS (callee) == BUILT_IN_NORMAL) - return true; - - return false; +static bool +validate_type (tree type1, tree type2) +{ + if (INTEGRAL_TYPE_P (type1) + && INTEGRAL_TYPE_P (type2)) + ; + else if (POINTER_TYPE_P (type1) + && POINTER_TYPE_P (type2)) + ; + else if (TREE_CODE (type1) + != TREE_CODE (type2)) + return false; + return true; } -/* Return true when STMTs arguments match those of FNDECL. */ +/* Return true when STMTs arguments and return value match those of FNDECL, + a decl of a builtin function. */ -static bool -validate_call (gimple stmt, tree fndecl) +bool +gimple_builtin_call_types_compatible_p (gimple stmt, tree fndecl) { + gcc_checking_assert (DECL_BUILT_IN_CLASS (fndecl) != NOT_BUILT_IN); + + tree ret = gimple_call_lhs (stmt); + if (ret + && !validate_type (TREE_TYPE (ret), TREE_TYPE (TREE_TYPE (fndecl)))) + return false; + tree targs = TYPE_ARG_TYPES (TREE_TYPE (fndecl)); unsigned nargs = gimple_call_num_args (stmt); for (unsigned i = 0; i < nargs; ++i) @@ -2380,14 +2390,7 @@ validate_call (gimple stmt, tree fndecl) if (!targs) return true; tree arg = gimple_call_arg (stmt, i); - if (INTEGRAL_TYPE_P (TREE_TYPE (arg)) - && INTEGRAL_TYPE_P (TREE_VALUE (targs))) - ; - else if (POINTER_TYPE_P (TREE_TYPE (arg)) - && POINTER_TYPE_P (TREE_VALUE (targs))) - ; - else if (TREE_CODE (TREE_TYPE (arg)) - != TREE_CODE (TREE_VALUE (targs))) + if (!validate_type (TREE_TYPE (arg), TREE_VALUE (targs))) return false; targs = TREE_CHAIN (targs); } @@ -2396,6 +2399,19 @@ validate_call (gimple stmt, tree fndecl) return true; } +/* Return true when STMT is builtins call. */ + +bool +gimple_call_builtin_p (gimple stmt) +{ + tree fndecl; + if (is_gimple_call (stmt) + && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE + && DECL_BUILT_IN_CLASS (fndecl) != NOT_BUILT_IN) + return gimple_builtin_call_types_compatible_p (stmt, fndecl); + return false; +} + /* Return true when STMT is builtins call to CLASS. */ bool @@ -2405,7 +2421,7 @@ gimple_call_builtin_p (gimple stmt, enum built_in_class klass) if (is_gimple_call (stmt) && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE && DECL_BUILT_IN_CLASS (fndecl) == klass) - return validate_call (stmt, fndecl); + return gimple_builtin_call_types_compatible_p (stmt, fndecl); return false; } @@ -2419,7 +2435,7 @@ gimple_call_builtin_p (gimple stmt, enum built_in_function code) && (fndecl = gimple_call_fndecl (stmt)) != NULL_TREE && DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL && DECL_FUNCTION_CODE (fndecl) == code) - return validate_call (stmt, fndecl); + return gimple_builtin_call_types_compatible_p (stmt, fndecl); return false; } diff --git a/gcc/gimple.h b/gcc/gimple.h index df92863699b..0e80d2eb700 100644 --- a/gcc/gimple.h +++ b/gcc/gimple.h @@ -1253,7 +1253,8 @@ extern tree gimple_unsigned_type (tree); extern tree gimple_signed_type (tree); extern alias_set_type gimple_get_alias_set (tree); extern bool gimple_ior_addresses_taken (bitmap, gimple); -extern bool is_gimple_builtin_call (gimple stmt); +extern bool gimple_builtin_call_types_compatible_p (gimple, tree); +extern bool gimple_call_builtin_p (gimple); extern bool gimple_call_builtin_p (gimple, enum built_in_class); extern bool gimple_call_builtin_p (gimple, enum built_in_function); extern bool gimple_asm_clobbers_memory_p (const_gimple); diff --git a/gcc/gimplify.c b/gcc/gimplify.c index a6e0c75478b..202d084f09f 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7373,12 +7373,22 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, TREE_TYPE (*expr_p)); break; + case VIEW_CONVERT_EXPR: + if (is_gimple_reg_type (TREE_TYPE (*expr_p)) + && is_gimple_reg_type (TREE_TYPE (TREE_OPERAND (*expr_p, 0)))) + { + ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, + post_p, is_gimple_val, fb_rvalue); + recalculate_side_effects (*expr_p); + break; + } + /* Fallthru. */ + case ARRAY_REF: case ARRAY_RANGE_REF: case REALPART_EXPR: case IMAGPART_EXPR: case COMPONENT_REF: - case VIEW_CONVERT_EXPR: ret = gimplify_compound_lval (expr_p, pre_p, post_p, fallback ? fallback : fb_rvalue); break; diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 2f1c026c983..6f2f24367aa 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -3060,6 +3060,9 @@ class Type_conversion_expression : public Expression Expression* do_lower(Gogo*, Named_object*, Statement_inserter*, int); + Expression* + do_flatten(Gogo*, Named_object*, Statement_inserter*); + bool do_is_constant() const; @@ -3203,6 +3206,25 @@ Type_conversion_expression::do_lower(Gogo*, Named_object*, return this; } +// Flatten a type conversion by using a temporary variable for the slice +// in slice to string conversions. + +Expression* +Type_conversion_expression::do_flatten(Gogo*, Named_object*, + Statement_inserter* inserter) +{ + if (this->type()->is_string_type() + && this->expr_->type()->is_slice_type() + && !this->expr_->is_variable()) + { + Temporary_statement* temp = + Statement::make_temporary(NULL, this->expr_, this->location()); + inserter->insert(temp); + this->expr_ = Expression::make_temporary_reference(temp, this->location()); + } + return this; +} + // Return whether a type conversion is a constant. bool @@ -3361,47 +3383,24 @@ Type_conversion_expression::do_get_tree(Translate_context* context) } else if (type->is_string_type() && expr_type->is_slice_type()) { - if (!DECL_P(expr_tree)) - expr_tree = save_expr(expr_tree); - - Type* int_type = Type::lookup_integer_type("int"); - tree int_type_tree = type_to_tree(int_type->get_backend(gogo)); - + Location location = this->location(); Array_type* a = expr_type->array_type(); Type* e = a->element_type()->forwarded(); go_assert(e->integer_type() != NULL); - tree valptr = fold_convert(const_ptr_type_node, - a->value_pointer_tree(gogo, expr_tree)); - tree len = a->length_tree(gogo, expr_tree); - len = fold_convert_loc(this->location().gcc_location(), int_type_tree, - len); + go_assert(this->expr_->is_variable()); + + Runtime::Function code; if (e->integer_type()->is_byte()) - { - static tree byte_array_to_string_fndecl; - ret = Gogo::call_builtin(&byte_array_to_string_fndecl, - this->location(), - "__go_byte_array_to_string", - 2, - type_tree, - const_ptr_type_node, - valptr, - int_type_tree, - len); - } + code = Runtime::BYTE_ARRAY_TO_STRING; else - { - go_assert(e->integer_type()->is_rune()); - static tree int_array_to_string_fndecl; - ret = Gogo::call_builtin(&int_array_to_string_fndecl, - this->location(), - "__go_int_array_to_string", - 2, - type_tree, - const_ptr_type_node, - valptr, - int_type_tree, - len); - } + { + go_assert(e->integer_type()->is_rune()); + code = Runtime::INT_ARRAY_TO_STRING; + } + Expression* valptr = a->get_value_pointer(gogo, this->expr_); + Expression* len = a->get_length(gogo, this->expr_); + Expression* a2s_expr = Runtime::make_call(code, location, 2, valptr, len); + ret = a2s_expr->get_tree(context); } else if (type->is_slice_type() && expr_type->is_string_type()) { @@ -6595,6 +6594,7 @@ Expression::comparison_tree(Translate_context* context, Type* result_type, { std::swap(left_type, right_type); std::swap(left_tree, right_tree); + std::swap(left_expr, right_expr); } if (right_type->is_nil_type()) @@ -6603,7 +6603,8 @@ Expression::comparison_tree(Translate_context* context, Type* result_type, && left_type->array_type()->length() == NULL) { Array_type* at = left_type->array_type(); - left_tree = at->value_pointer_tree(context->gogo(), left_tree); + left_expr = at->get_value_pointer(context->gogo(), left_expr); + left_tree = left_expr->get_tree(context); right_tree = fold_convert(TREE_TYPE(left_tree), null_pointer_node); } else if (left_type->interface_type() != NULL) @@ -7037,6 +7038,9 @@ class Builtin_call_expression : public Call_expression Expression* do_lower(Gogo*, Named_object*, Statement_inserter*, int); + Expression* + do_flatten(Gogo*, Named_object*, Statement_inserter*); + bool do_is_constant() const; @@ -7367,6 +7371,36 @@ Builtin_call_expression::do_lower(Gogo* gogo, Named_object* function, return this; } +// Flatten a builtin call expression. This turns the arguments of copy and +// append into temporary expressions. + +Expression* +Builtin_call_expression::do_flatten(Gogo*, Named_object*, + Statement_inserter* inserter) +{ + if (this->code_ == BUILTIN_APPEND + || this->code_ == BUILTIN_COPY) + { + Location loc = this->location(); + Type* at = this->args()->front()->type(); + for (Expression_list::iterator pa = this->args()->begin(); + pa != this->args()->end(); + ++pa) + { + if ((*pa)->is_nil_expression()) + *pa = Expression::make_slice_composite_literal(at, NULL, loc); + if (!(*pa)->is_variable()) + { + Temporary_statement* temp = + Statement::make_temporary(NULL, *pa, loc); + inserter->insert(temp); + *pa = Expression::make_temporary_reference(temp, loc); + } + } + } + return this; +} + // Lower a make expression. Expression* @@ -8503,7 +8537,8 @@ Builtin_call_expression::do_get_tree(Translate_context* context) return error_mark_node; } this->seen_ = true; - val_tree = arg_type->array_type()->length_tree(gogo, arg_tree); + Expression* len = arg_type->array_type()->get_length(gogo, arg); + val_tree = len->get_tree(context); this->seen_ = false; } else if (arg_type->map_type() != NULL) @@ -8543,8 +8578,9 @@ Builtin_call_expression::do_get_tree(Translate_context* context) return error_mark_node; } this->seen_ = true; - val_tree = arg_type->array_type()->capacity_tree(gogo, - arg_tree); + Expression* cap = + arg_type->array_type()->get_capacity(gogo, arg); + val_tree = cap->get_tree(context); this->seen_ = false; } else if (arg_type->channel_type() != NULL) @@ -8848,9 +8884,11 @@ Builtin_call_expression::do_get_tree(Translate_context* context) Type* arg1_type = arg1->type(); Array_type* at = arg1_type->array_type(); - arg1_tree = save_expr(arg1_tree); - tree arg1_val = at->value_pointer_tree(gogo, arg1_tree); - tree arg1_len = at->length_tree(gogo, arg1_tree); + go_assert(arg1->is_variable()); + Expression* arg1_valptr = at->get_value_pointer(gogo, arg1); + Expression* arg1_len_expr = at->get_length(gogo, arg1); + tree arg1_val = arg1_valptr->get_tree(context); + tree arg1_len = arg1_len_expr->get_tree(context); if (arg1_val == error_mark_node || arg1_len == error_mark_node) return error_mark_node; @@ -8860,9 +8898,11 @@ Builtin_call_expression::do_get_tree(Translate_context* context) if (arg2_type->is_slice_type()) { at = arg2_type->array_type(); - arg2_tree = save_expr(arg2_tree); - arg2_val = at->value_pointer_tree(gogo, arg2_tree); - arg2_len = at->length_tree(gogo, arg2_tree); + go_assert(arg2->is_variable()); + Expression* arg2_valptr = at->get_value_pointer(gogo, arg2); + Expression* arg2_len_expr = at->get_length(gogo, arg2); + arg2_val = arg2_valptr->get_tree(context); + arg2_len = arg2_len_expr->get_tree(context); } else { @@ -8950,23 +8990,15 @@ Builtin_call_expression::do_get_tree(Translate_context* context) } else { - arg2_tree = Expression::convert_for_assignment(context, at, - arg2->type(), - arg2_tree, - location); - if (arg2_tree == error_mark_node) + go_assert(arg2->is_variable()); + arg2_val = + at->get_value_pointer(gogo, arg2)->get_tree(context); + arg2_len = at->get_length(gogo, arg2)->get_tree(context); + Btype* element_btype = element_type->get_backend(gogo); + tree element_type_tree = type_to_tree(element_btype); + if (element_type_tree == error_mark_node) return error_mark_node; - - arg2_tree = save_expr(arg2_tree); - - arg2_val = at->value_pointer_tree(gogo, arg2_tree); - arg2_len = at->length_tree(gogo, arg2_tree); - - Btype* element_btype = element_type->get_backend(gogo); - tree element_type_tree = type_to_tree(element_btype); - if (element_type_tree == error_mark_node) - return error_mark_node; - element_size = TYPE_SIZE_UNIT(element_type_tree); + element_size = TYPE_SIZE_UNIT(element_type_tree); } arg2_val = fold_convert_loc(location.gcc_location(), ptr_type_node, @@ -10371,6 +10403,9 @@ class Array_index_expression : public Expression do_check_types(Gogo*); Expression* + do_flatten(Gogo*, Named_object*, Statement_inserter*); + + Expression* do_copy() { return Expression::make_array_index(this->array_->copy(), @@ -10611,6 +10646,22 @@ Array_index_expression::do_check_types(Gogo*) } } +// Flatten array indexing by using a temporary variable for slices. + +Expression* +Array_index_expression::do_flatten(Gogo*, Named_object*, + Statement_inserter* inserter) +{ + Location loc = this->location(); + if (this->array_->type()->is_slice_type() && !this->array_->is_variable()) + { + Temporary_statement* temp = Statement::make_temporary(NULL, this->array_, loc); + inserter->insert(temp); + this->array_ = Expression::make_temporary_reference(temp, loc); + } + return this; +} + // Return whether this expression is addressable. bool @@ -10643,22 +10694,17 @@ Array_index_expression::do_get_tree(Translate_context* context) go_assert(this->array_->type()->is_error()); return error_mark_node; } + go_assert(!array_type->is_slice_type() || this->array_->is_variable()); tree type_tree = type_to_tree(array_type->get_backend(gogo)); if (type_tree == error_mark_node) return error_mark_node; - tree array_tree = this->array_->get_tree(context); - if (array_tree == error_mark_node) - return error_mark_node; - - if (array_type->length() == NULL && !DECL_P(array_tree)) - array_tree = save_expr(array_tree); - tree length_tree = NULL_TREE; if (this->end_ == NULL || this->end_->is_nil_expression()) { - length_tree = array_type->length_tree(gogo, array_tree); + Expression* len = array_type->get_length(gogo, this->array_); + length_tree = len->get_tree(context); if (length_tree == error_mark_node) return error_mark_node; length_tree = save_expr(length_tree); @@ -10667,7 +10713,8 @@ Array_index_expression::do_get_tree(Translate_context* context) tree capacity_tree = NULL_TREE; if (this->end_ != NULL) { - capacity_tree = array_type->capacity_tree(gogo, array_tree); + Expression* cap = array_type->get_capacity(gogo, this->array_); + capacity_tree = cap->get_tree(context); if (capacity_tree == error_mark_node) return error_mark_node; capacity_tree = save_expr(capacity_tree); @@ -10732,13 +10779,18 @@ Array_index_expression::do_get_tree(Translate_context* context) if (array_type->length() != NULL) { // Fixed array. + tree array_tree = this->array_->get_tree(context); + if (array_tree == error_mark_node) + return error_mark_node; return build4(ARRAY_REF, TREE_TYPE(type_tree), array_tree, start_tree, NULL_TREE, NULL_TREE); } else { // Open array. - tree values = array_type->value_pointer_tree(gogo, array_tree); + Expression* valptr = + array_type->get_value_pointer(gogo, this->array_); + tree values = valptr->get_tree(context); Type* element_type = array_type->element_type(); Btype* belement_type = element_type->get_backend(gogo); tree element_type_tree = type_to_tree(belement_type); @@ -10820,7 +10872,8 @@ Array_index_expression::do_get_tree(Translate_context* context) start_tree), element_size); - tree value_pointer = array_type->value_pointer_tree(gogo, array_tree); + Expression* valptr = array_type->get_value_pointer(gogo, this->array_); + tree value_pointer = valptr->get_tree(context); if (value_pointer == error_mark_node) return error_mark_node; @@ -14133,6 +14186,22 @@ Expression::is_nonconstant_composite_literal() const } } +// Return true if this is a variable or temporary_variable. + +bool +Expression::is_variable() const +{ + switch (this->classification_) + { + case EXPRESSION_VAR_REFERENCE: + case EXPRESSION_TEMPORARY_REFERENCE: + case EXPRESSION_SET_AND_USE_TEMPORARY: + return true; + default: + return false; + } +} + // Return true if this is a reference to a local variable. bool @@ -14574,6 +14643,117 @@ Expression::make_type_info(Type* type, Type_info type_info) return new Type_info_expression(type, type_info); } +// An expression that evaluates to some characteristic of a slice. +// This is used when indexing, bound-checking, or nil checking a slice. + +class Slice_info_expression : public Expression +{ + public: + Slice_info_expression(Expression* slice, Slice_info slice_info, + Location location) + : Expression(EXPRESSION_SLICE_INFO, location), + slice_(slice), slice_info_(slice_info) + { } + + protected: + Type* + do_type(); + + void + do_determine_type(const Type_context*) + { } + + Expression* + do_copy() + { + return new Slice_info_expression(this->slice_->copy(), this->slice_info_, + this->location()); + } + + tree + do_get_tree(Translate_context* context); + + void + do_dump_expression(Ast_dump_context*) const; + + void + do_issue_nil_check() + { this->slice_->issue_nil_check(); } + + private: + // The slice for which we are getting information. + Expression* slice_; + // What information we want. + Slice_info slice_info_; +}; + +// Return the type of the slice info. + +Type* +Slice_info_expression::do_type() +{ + switch (this->slice_info_) + { + case SLICE_INFO_VALUE_POINTER: + return Type::make_pointer_type( + this->slice_->type()->array_type()->element_type()); + case SLICE_INFO_LENGTH: + case SLICE_INFO_CAPACITY: + return Type::lookup_integer_type("int"); + default: + go_unreachable(); + } +} + +// Return slice information in GENERIC. + +tree +Slice_info_expression::do_get_tree(Translate_context* context) +{ + Gogo* gogo = context->gogo(); + + Bexpression* bslice = tree_to_expr(this->slice_->get_tree(context)); + Bexpression* ret; + switch (this->slice_info_) + { + case SLICE_INFO_VALUE_POINTER: + case SLICE_INFO_LENGTH: + case SLICE_INFO_CAPACITY: + ret = gogo->backend()->struct_field_expression(bslice, this->slice_info_, + this->location()); + break; + default: + go_unreachable(); + } + return expr_to_tree(ret); +} + +// Dump ast representation for a type info expression. + +void +Slice_info_expression::do_dump_expression( + Ast_dump_context* ast_dump_context) const +{ + ast_dump_context->ostream() << "sliceinfo("; + this->slice_->dump_expression(ast_dump_context); + ast_dump_context->ostream() << ","; + ast_dump_context->ostream() << + (this->slice_info_ == SLICE_INFO_VALUE_POINTER ? "values" + : this->slice_info_ == SLICE_INFO_LENGTH ? "length" + : this->slice_info_ == SLICE_INFO_CAPACITY ? "capacity " + : "unknown"); + ast_dump_context->ostream() << ")"; +} + +// Make a slice info expression. + +Expression* +Expression::make_slice_info(Expression* slice, Slice_info slice_info, + Location location) +{ + return new Slice_info_expression(slice, slice_info, location); +} + // An expression which evaluates to the offset of a field within a // struct. This, like Type_info_expression, q.v., is only used to // initialize fields of a type descriptor. diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index e447418b949..abebbd16961 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -102,6 +102,7 @@ class Expression EXPRESSION_RECEIVE, EXPRESSION_TYPE_DESCRIPTOR, EXPRESSION_TYPE_INFO, + EXPRESSION_SLICE_INFO, EXPRESSION_STRUCT_FIELD_OFFSET, EXPRESSION_MAP_DESCRIPTOR, EXPRESSION_LABEL_ADDR @@ -339,6 +340,22 @@ class Expression static Expression* make_type_info(Type* type, Type_info); + // Make an expression that evaluates to some characteristic of a + // slice. For simplicity, the enum values must match the field indexes + // in the underlying struct. + enum Slice_info + { + // The underlying data of the slice. + SLICE_INFO_VALUE_POINTER, + // The length of the slice. + SLICE_INFO_LENGTH, + // The capacity of the slice. + SLICE_INFO_CAPACITY + }; + + static Expression* + make_slice_info(Expression* slice, Slice_info, Location); + // Make an expression which evaluates to the offset of a field in a // struct. This is only used for type descriptors, so there is no // location parameter. @@ -544,6 +561,10 @@ class Expression bool is_nonconstant_composite_literal() const; + // Return true if this is a variable or temporary variable. + bool + is_variable() const; + // Return true if this is a reference to a local variable. bool is_local_variable() const; @@ -575,6 +596,18 @@ class Expression int iota_value) { return this->do_lower(gogo, function, inserter, iota_value); } + // Flatten an expression. This is called after order_evaluation. + // FUNCTION is the function we are in; it will be NULL for an + // expression initializing a global variable. INSERTER may be used + // to insert statements before the statement or initializer + // containing this expression; it is normally used to create + // temporary variables. This function must resolve expressions + // which could not be fully parsed into their final form. It + // returns the same Expression or a new one. + Expression* + flatten(Gogo* gogo, Named_object* function, Statement_inserter* inserter) + { return this->do_flatten(gogo, function, inserter); } + // Determine the real type of an expression with abstract integer, // floating point, or complex type. TYPE_CONTEXT describes the // expected type. @@ -698,6 +731,12 @@ class Expression do_lower(Gogo*, Named_object*, Statement_inserter*, int) { return this; } + // Return a flattened expression. + virtual Expression* + do_flatten(Gogo*, Named_object*, Statement_inserter*) + { return this; } + + // Return whether this is a constant expression. virtual bool do_is_constant() const diff --git a/gcc/go/gofrontend/go.cc b/gcc/go/gofrontend/go.cc index 55b4dca8579..26e83a1db64 100644 --- a/gcc/go/gofrontend/go.cc +++ b/gcc/go/gofrontend/go.cc @@ -119,12 +119,15 @@ go_parse_input_files(const char** filenames, unsigned int filename_count, // Use temporary variables to force order of evaluation. ::gogo->order_evaluations(); + // Flatten the parse tree. + ::gogo->flatten(); + // Build thunks for functions which call recover. ::gogo->build_recover_thunks(); // Convert complicated go and defer statements into simpler ones. ::gogo->simplify_thunk_statements(); - + // Dump ast, use filename[0] as the base name ::gogo->dump_ast(filenames[0]); } diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index e46bf9c4193..6ecc6cd0f0f 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -2703,6 +2703,178 @@ Gogo::order_evaluations() this->traverse(&order_eval); } +// Traversal to flatten parse tree after order of evaluation rules are applied. + +class Flatten : public Traverse +{ + public: + Flatten(Gogo* gogo, Named_object* function) + : Traverse(traverse_variables + | traverse_functions + | traverse_statements + | traverse_expressions), + gogo_(gogo), function_(function), inserter_() + { } + + void + set_inserter(const Statement_inserter* inserter) + { this->inserter_ = *inserter; } + + int + variable(Named_object*); + + int + function(Named_object*); + + int + statement(Block*, size_t* pindex, Statement*); + + int + expression(Expression**); + + private: + // General IR. + Gogo* gogo_; + // The function we are traversing. + Named_object* function_; + // Current statement inserter for use by expressions. + Statement_inserter inserter_; +}; + +// Flatten variables. + +int +Flatten::variable(Named_object* no) +{ + if (!no->is_variable()) + return TRAVERSE_CONTINUE; + + if (no->is_variable() && no->var_value()->is_global()) + { + // Global variables can have loops in their initialization + // expressions. This is handled in flatten_init_expression. + no->var_value()->flatten_init_expression(this->gogo_, this->function_, + &this->inserter_); + return TRAVERSE_CONTINUE; + } + + go_assert(!no->var_value()->has_pre_init()); + + return TRAVERSE_SKIP_COMPONENTS; +} + +// Flatten the body of a function. Record the function while flattening it, +// so that we can pass it down when flattening an expression. + +int +Flatten::function(Named_object* no) +{ + go_assert(this->function_ == NULL); + this->function_ = no; + int t = no->func_value()->traverse(this); + this->function_ = NULL; + + if (t == TRAVERSE_EXIT) + return t; + return TRAVERSE_SKIP_COMPONENTS; +} + +// Flatten statement parse trees. + +int +Flatten::statement(Block* block, size_t* pindex, Statement* sorig) +{ + // Because we explicitly traverse the statement's contents + // ourselves, we want to skip block statements here. There is + // nothing to flatten in a block statement. + if (sorig->is_block_statement()) + return TRAVERSE_CONTINUE; + + Statement_inserter hold_inserter(this->inserter_); + this->inserter_ = Statement_inserter(block, pindex); + + // Flatten the expressions first. + int t = sorig->traverse_contents(this); + if (t == TRAVERSE_EXIT) + { + this->inserter_ = hold_inserter; + return t; + } + + // Keep flattening until nothing changes. + Statement* s = sorig; + while (true) + { + Statement* snew = s->flatten(this->gogo_, this->function_, block, + &this->inserter_); + if (snew == s) + break; + s = snew; + t = s->traverse_contents(this); + if (t == TRAVERSE_EXIT) + { + this->inserter_ = hold_inserter; + return t; + } + } + + if (s != sorig) + block->replace_statement(*pindex, s); + + this->inserter_ = hold_inserter; + return TRAVERSE_SKIP_COMPONENTS; +} + +// Flatten expression parse trees. + +int +Flatten::expression(Expression** pexpr) +{ + // Keep flattening until nothing changes. + while (true) + { + Expression* e = *pexpr; + if (e->traverse_subexpressions(this) == TRAVERSE_EXIT) + return TRAVERSE_EXIT; + + Expression* enew = e->flatten(this->gogo_, this->function_, + &this->inserter_); + if (enew == e) + break; + *pexpr = enew; + } + return TRAVERSE_SKIP_COMPONENTS; +} + +// Flatten a block. + +void +Gogo::flatten_block(Named_object* function, Block* block) +{ + Flatten flatten(this, function); + block->traverse(&flatten); +} + +// Flatten an expression. INSERTER may be NULL, in which case the +// expression had better not need to create any temporaries. + +void +Gogo::flatten_expression(Named_object* function, Statement_inserter* inserter, + Expression** pexpr) +{ + Flatten flatten(this, function); + if (inserter != NULL) + flatten.set_inserter(inserter); + flatten.expression(pexpr); +} + +void +Gogo::flatten() +{ + Flatten flatten(this, NULL); + this->traverse(&flatten); +} + // Traversal to convert calls to the predeclared recover function to // pass in an argument indicating whether it can recover from a panic // or not. @@ -4286,10 +4458,11 @@ Variable::Variable(Type* type, Expression* init, bool is_global, backend_(NULL), is_global_(is_global), is_parameter_(is_parameter), is_receiver_(is_receiver), is_varargs_parameter_(false), is_used_(false), is_address_taken_(false), is_non_escaping_address_taken_(false), - seen_(false), init_is_lowered_(false), type_from_init_tuple_(false), - type_from_range_index_(false), type_from_range_value_(false), - type_from_chan_element_(false), is_type_switch_var_(false), - determined_type_(false), in_unique_section_(false) + seen_(false), init_is_lowered_(false), init_is_flattened_(false), + type_from_init_tuple_(false), type_from_range_index_(false), + type_from_range_value_(false), type_from_chan_element_(false), + is_type_switch_var_(false), determined_type_(false), + in_unique_section_(false) { go_assert(type != NULL || init != NULL); go_assert(!is_parameter || init == NULL); @@ -4351,6 +4524,40 @@ Variable::lower_init_expression(Gogo* gogo, Named_object* function, } } +// Flatten the initialization expression after ordering evaluations. + +void +Variable::flatten_init_expression(Gogo* gogo, Named_object* function, + Statement_inserter* inserter) +{ + Named_object* dep = gogo->var_depends_on(this); + if (dep != NULL && dep->is_variable()) + dep->var_value()->flatten_init_expression(gogo, function, inserter); + + if (this->init_ != NULL && !this->init_is_flattened_) + { + if (this->seen_) + { + // We will give an error elsewhere, this is just to prevent + // an infinite loop. + return; + } + this->seen_ = true; + + Statement_inserter global_inserter; + if (this->is_global_) + { + global_inserter = Statement_inserter(gogo, this); + inserter = &global_inserter; + } + + gogo->flatten_expression(function, inserter, &this->init_); + + this->seen_ = false; + this->init_is_flattened_ = true; + } +} + // Get the preinit block. Block* diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index a9a56815c17..3f2808781b7 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -487,6 +487,14 @@ class Gogo void lower_constant(Named_object*); + // Flatten all the statements in a block. + void + flatten_block(Named_object* function, Block*); + + // Flatten an expression. + void + flatten_expression(Named_object* function, Statement_inserter*, Expression**); + // Create all necessary function descriptors. void create_function_descriptors(); @@ -531,6 +539,10 @@ class Gogo void order_evaluations(); + // Flatten parse tree. + void + flatten(); + // Build thunks for functions which call recover. void build_recover_thunks(); @@ -1447,6 +1459,10 @@ class Variable void lower_init_expression(Gogo*, Named_object*, Statement_inserter*); + // Flatten the initialization expression after ordering evaluations. + void + flatten_init_expression(Gogo*, Named_object*, Statement_inserter*); + // A special case: the init value is used only to determine the // type. This is used if the variable is defined using := with the // comma-ok form of a map index or a receive expression. The init @@ -1580,6 +1596,8 @@ class Variable bool seen_ : 1; // True if we have lowered the initialization expression. bool init_is_lowered_ : 1; + // True if we have flattened the initialization expression. + bool init_is_flattened_ : 1; // True if init is a tuple used to set the type. bool type_from_init_tuple_ : 1; // True if init is a range clause and the type is the index type. diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index 3a0bc3b9739..d195ab9845a 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -246,6 +246,16 @@ Variable_declaration_statement::do_lower(Gogo* gogo, Named_object* function, return this; } +// Flatten the variable's initialization expression. + +Statement* +Variable_declaration_statement::do_flatten(Gogo* gogo, Named_object* function, + Block*, Statement_inserter* inserter) +{ + this->var_->var_value()->flatten_init_expression(gogo, function, inserter); + return this; +} + // Convert a variable declaration to the backend representation. Bstatement* @@ -2461,6 +2471,7 @@ Thunk_statement::build_thunk(Gogo* gogo, const std::string& thunk_name) gogo->add_block(b, location); gogo->lower_block(function, b); + gogo->flatten_block(function, b); // We already ran the determine_types pass, so we need to run it // just for the call statement now. The other types are known. diff --git a/gcc/go/gofrontend/statements.h b/gcc/go/gofrontend/statements.h index b128fa0a8eb..7d9bcfde8b7 100644 --- a/gcc/go/gofrontend/statements.h +++ b/gcc/go/gofrontend/statements.h @@ -306,6 +306,16 @@ class Statement Statement_inserter* inserter) { return this->do_lower(gogo, function, block, inserter); } + // Flatten a statement. This is called immediately after the order of + // evaluation rules are applied to statements. It returns the same + // Statement or a new one. FUNCTION is the function containing this + // statement. BLOCK is the block containing this statement. + // INSERTER can be used to insert new statements before this one. + Statement* + flatten(Gogo* gogo, Named_object* function, Block* block, + Statement_inserter* inserter) + { return this->do_flatten(gogo, function, block, inserter); } + // Set type information for unnamed constants. void determine_types(); @@ -412,6 +422,12 @@ class Statement do_lower(Gogo*, Named_object*, Block*, Statement_inserter*) { return this; } + // Implemented by the child class: lower this statement to a simpler + // one. + virtual Statement* + do_flatten(Gogo*, Named_object*, Block*, Statement_inserter*) + { return this; } + // Implemented by child class: set type information for unnamed // constants. Any statement which includes an expression needs to // implement this. @@ -583,6 +599,9 @@ class Variable_declaration_statement : public Statement Statement* do_lower(Gogo*, Named_object*, Block*, Statement_inserter*); + Statement* + do_flatten(Gogo*, Named_object*, Block*, Statement_inserter*); + Bstatement* do_get_backend(Translate_context*); diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index d079565d18b..2935523dd2a 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -6000,84 +6000,53 @@ Array_type::finish_backend_element(Gogo* gogo) } } -// Return a tree for a pointer to the values in ARRAY. +// Return an expression for a pointer to the values in ARRAY. -tree -Array_type::value_pointer_tree(Gogo*, tree array) const +Expression* +Array_type::get_value_pointer(Gogo*, Expression* array) const { - tree ret; if (this->length() != NULL) { // Fixed array. - ret = fold_convert(build_pointer_type(TREE_TYPE(TREE_TYPE(array))), - build_fold_addr_expr(array)); + go_assert(array->type()->array_type() != NULL); + Type* etype = array->type()->array_type()->element_type(); + array = Expression::make_unary(OPERATOR_AND, array, array->location()); + return Expression::make_cast(Type::make_pointer_type(etype), array, + array->location()); } - else - { - // Open array. - tree field = TYPE_FIELDS(TREE_TYPE(array)); - go_assert(strcmp(IDENTIFIER_POINTER(DECL_NAME(field)), - "__values") == 0); - ret = fold_build3(COMPONENT_REF, TREE_TYPE(field), array, field, - NULL_TREE); - } - if (TREE_CONSTANT(array)) - TREE_CONSTANT(ret) = 1; - return ret; + + // Open array. + return Expression::make_slice_info(array, + Expression::SLICE_INFO_VALUE_POINTER, + array->location()); } -// Return a tree for the length of the array ARRAY which has this +// Return an expression for the length of the array ARRAY which has this // type. -tree -Array_type::length_tree(Gogo* gogo, tree array) +Expression* +Array_type::get_length(Gogo*, Expression* array) const { if (this->length_ != NULL) - { - if (TREE_CODE(array) == SAVE_EXPR) - return this->get_length_tree(gogo); - else - { - tree len = this->get_length_tree(gogo); - return omit_one_operand(TREE_TYPE(len), len, array); - } - } + return this->length_; // This is an open array. We need to read the length field. - - tree type = TREE_TYPE(array); - go_assert(TREE_CODE(type) == RECORD_TYPE); - - tree field = DECL_CHAIN(TYPE_FIELDS(type)); - go_assert(strcmp(IDENTIFIER_POINTER(DECL_NAME(field)), "__count") == 0); - - tree ret = build3(COMPONENT_REF, TREE_TYPE(field), array, field, NULL_TREE); - if (TREE_CONSTANT(array)) - TREE_CONSTANT(ret) = 1; - return ret; + return Expression::make_slice_info(array, Expression::SLICE_INFO_LENGTH, + array->location()); } -// Return a tree for the capacity of the array ARRAY which has this +// Return an expression for the capacity of the array ARRAY which has this // type. -tree -Array_type::capacity_tree(Gogo* gogo, tree array) +Expression* +Array_type::get_capacity(Gogo*, Expression* array) const { if (this->length_ != NULL) - { - tree len = this->get_length_tree(gogo); - return omit_one_operand(TREE_TYPE(len), len, array); - } + return this->length_; // This is an open array. We need to read the capacity field. - - tree type = TREE_TYPE(array); - go_assert(TREE_CODE(type) == RECORD_TYPE); - - tree field = DECL_CHAIN(DECL_CHAIN(TYPE_FIELDS(type))); - go_assert(strcmp(IDENTIFIER_POINTER(DECL_NAME(field)), "__capacity") == 0); - - return build3(COMPONENT_REF, TREE_TYPE(field), array, field, NULL_TREE); + return Expression::make_slice_info(array, Expression::SLICE_INFO_CAPACITY, + array->location()); } // Export. diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h index 9f965916131..980436a1037 100644 --- a/gcc/go/gofrontend/types.h +++ b/gcc/go/gofrontend/types.h @@ -2312,17 +2312,17 @@ class Array_type : public Type array_has_hidden_fields(const Named_type* within, std::string* reason) const { return this->element_type_->has_hidden_fields(within, reason); } - // Return a tree for the pointer to the values in an array. - tree - value_pointer_tree(Gogo*, tree array) const; + // Return an expression for the pointer to the values in an array. + Expression* + get_value_pointer(Gogo*, Expression* array) const; - // Return a tree for the length of an array with this type. - tree - length_tree(Gogo*, tree array); + // Return an expression for the length of an array with this type. + Expression* + get_length(Gogo*, Expression* array) const; - // Return a tree for the capacity of an array with this type. - tree - capacity_tree(Gogo*, tree array); + // Return an expression for the capacity of an array with this type. + Expression* + get_capacity(Gogo*, Expression* array) const; // Import an array type. static Array_type* diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 2b04067f74a..034385c19f2 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -1050,10 +1050,7 @@ hash_table <Descriptor, Allocator>::end () /* Iterate through the elements of hash_table HTAB, using hash_table <....>::iterator ITER, - storing each element in RESULT, which is of type TYPE. - - This macro has this form for compatibility with the - FOR_EACH_HTAB_ELEMENT currently defined in tree-flow.h. */ + storing each element in RESULT, which is of type TYPE. */ #define FOR_EACH_HASH_TABLE_ELEMENT(HTAB, RESULT, TYPE, ITER) \ for ((ITER) = (HTAB).begin (); \ diff --git a/gcc/hw-doloop.c b/gcc/hw-doloop.c index ab4899db632..cc8f9b77505 100644 --- a/gcc/hw-doloop.c +++ b/gcc/hw-doloop.c @@ -661,6 +661,7 @@ reorg_loops (bool do_reorder, struct hw_doloop_hooks *hooks) } free_loops (loops); + bitmap_obstack_release (&loop_stack); if (dump_file) print_rtl (dump_file, get_insns ()); diff --git a/gcc/ifcvt.c b/gcc/ifcvt.c index 39845354731..51293651e9c 100644 --- a/gcc/ifcvt.c +++ b/gcc/ifcvt.c @@ -118,7 +118,7 @@ count_bb_insns (const_basic_block bb) while (1) { - if (CALL_P (insn) || NONJUMP_INSN_P (insn)) + if (active_insn_p (insn) && !JUMP_P (insn)) count++; if (insn == BB_END (bb)) @@ -522,7 +522,10 @@ cond_exec_process_if_block (ce_if_block * ce_info, n_insns -= 2 * n_matching; } - if (then_start && else_start) + if (then_start + && else_start + && then_n_insns > n_matching + && else_n_insns > n_matching) { int longest_match = MIN (then_n_insns - n_matching, else_n_insns - n_matching); @@ -3153,6 +3156,20 @@ merge_if_block (struct ce_if_block * ce_info) if (then_bb) { + /* If THEN_BB has no successors, then there's a BARRIER after it. + If COMBO_BB has more than one successor (THEN_BB), then that BARRIER + is no longer needed, and in fact it is incorrect to leave it in + the insn stream. */ + if (EDGE_COUNT (then_bb->succs) == 0 + && EDGE_COUNT (combo_bb->succs) > 1) + { + rtx end = NEXT_INSN (BB_END (then_bb)); + while (end && NOTE_P (end) && !NOTE_INSN_BASIC_BLOCK_P (end)) + end = NEXT_INSN (end); + + if (end && BARRIER_P (end)) + delete_insn (end); + } merge_blocks (combo_bb, then_bb); num_true_changes++; } @@ -3162,6 +3179,20 @@ merge_if_block (struct ce_if_block * ce_info) get their addresses taken. */ if (else_bb) { + /* If ELSE_BB has no successors, then there's a BARRIER after it. + If COMBO_BB has more than one successor (ELSE_BB), then that BARRIER + is no longer needed, and in fact it is incorrect to leave it in + the insn stream. */ + if (EDGE_COUNT (else_bb->succs) == 0 + && EDGE_COUNT (combo_bb->succs) > 1) + { + rtx end = NEXT_INSN (BB_END (else_bb)); + while (end && NOTE_P (end) && !NOTE_INSN_BASIC_BLOCK_P (end)) + end = NEXT_INSN (end); + + if (end && BARRIER_P (end)) + delete_insn (end); + } merge_blocks (combo_bb, else_bb); num_true_changes++; } diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c index 63c50370a0a..a6a44e6d81a 100644 --- a/gcc/ipa-cp.c +++ b/gcc/ipa-cp.c @@ -2281,7 +2281,7 @@ ipcp_discover_new_direct_edges (struct cgraph_node *node, { bool agg_contents = ie->indirect_info->agg_contents; bool polymorphic = ie->indirect_info->polymorphic; - bool param_index = ie->indirect_info->param_index; + int param_index = ie->indirect_info->param_index; struct cgraph_edge *cs = ipa_make_edge_direct_to_target (ie, target); found = true; diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c index ff465f9e963..a9efe584187 100644 --- a/gcc/ipa-devirt.c +++ b/gcc/ipa-devirt.c @@ -542,7 +542,7 @@ method_class_type (tree t) void build_type_inheritance_graph (void) { - struct cgraph_node *n; + struct symtab_node *n; FILE *inheritance_dump_file; int flags; @@ -554,10 +554,37 @@ build_type_inheritance_graph (void) /* We reconstruct the graph starting of types of all methods seen in the the unit. */ - FOR_EACH_FUNCTION (n) - if (DECL_VIRTUAL_P (n->decl) + FOR_EACH_SYMBOL (n) + if (is_a <cgraph_node> (n) + && DECL_VIRTUAL_P (n->decl) && symtab_real_symbol_p (n)) get_odr_type (method_class_type (TREE_TYPE (n->decl)), true); + + /* Look also for virtual tables of types that do not define any methods. + + We need it in a case where class B has virtual base of class A + re-defining its virtual method and there is class C with no virtual + methods with B as virtual base. + + Here we output B's virtual method in two variant - for non-virtual + and virtual inheritance. B's virtual table has non-virtual version, + while C's has virtual. + + For this reason we need to know about C in order to include both + variants of B. More correctly, record_target_from_binfo should + add both variants of the method when walking B, but we have no + link in between them. + + We rely on fact that either the method is exported and thus we + assume it is called externally or C is in anonymous namespace and + thus we will see the vtable. */ + + else if (is_a <varpool_node> (n) + && DECL_VIRTUAL_P (n->decl) + && TREE_CODE (DECL_CONTEXT (n->decl)) == RECORD_TYPE + && TYPE_BINFO (DECL_CONTEXT (n->decl)) + && polymorphic_type_binfo_p (TYPE_BINFO (DECL_CONTEXT (n->decl)))) + get_odr_type (DECL_CONTEXT (n->decl), true); if (inheritance_dump_file) { dump_type_inheritance_graph (inheritance_dump_file); @@ -614,10 +641,8 @@ maybe_record_node (vec <cgraph_node *> &nodes, This match what get_binfo_at_offset does, but with offset being unknown. - TYPE_BINFO is binfo holding an virtual table matching - BINFO's type. In the case of single inheritance, this - is binfo of BINFO's type ancestor (vtable is shared), - otherwise it is binfo of BINFO's type. + TYPE_BINFOS is a stack of BINFOS of types with defined + virtual table seen on way from class type to BINFO. MATCHED_VTABLES tracks virtual tables we already did lookup for virtual function in. INSERTED tracks nodes we already @@ -630,7 +655,7 @@ static void record_target_from_binfo (vec <cgraph_node *> &nodes, tree binfo, tree otr_type, - tree type_binfo, + vec <tree> &type_binfos, HOST_WIDE_INT otr_token, tree outer_type, HOST_WIDE_INT offset, @@ -642,10 +667,32 @@ record_target_from_binfo (vec <cgraph_node *> &nodes, int i; tree base_binfo; - gcc_checking_assert (BINFO_VTABLE (type_binfo)); + if (BINFO_VTABLE (binfo)) + type_binfos.safe_push (binfo); if (types_same_for_odr (type, outer_type)) { + int i; + tree type_binfo = NULL; + + /* Lookup BINFO with virtual table. For normal types it is always last + binfo on stack. */ + for (i = type_binfos.length () - 1; i >= 0; i--) + if (BINFO_OFFSET (type_binfos[i]) == BINFO_OFFSET (binfo)) + { + type_binfo = type_binfos[i]; + break; + } + if (BINFO_VTABLE (binfo)) + type_binfos.pop (); + /* If this is duplicated BINFO for base shared by virtual inheritance, + we may not have its associated vtable. This is not a problem, since + we will walk it on the other path. */ + if (!type_binfo) + { + gcc_assert (BINFO_VIRTUAL_P (binfo)); + return; + } tree inner_binfo = get_binfo_at_offset (type_binfo, offset, otr_type); /* For types in anonymous namespace first check if the respective vtable @@ -676,12 +723,11 @@ record_target_from_binfo (vec <cgraph_node *> &nodes, /* Walking bases that have no virtual method is pointless excercise. */ if (polymorphic_type_binfo_p (base_binfo)) record_target_from_binfo (nodes, base_binfo, otr_type, - /* In the case of single inheritance, - the virtual table is shared with - the outer type. */ - BINFO_VTABLE (base_binfo) ? base_binfo : type_binfo, + type_binfos, otr_token, outer_type, offset, inserted, matched_vtables, anonymous); + if (BINFO_VTABLE (binfo)) + type_binfos.pop (); } /* Lookup virtual methods matching OTR_TYPE (with OFFSET and OTR_TOKEN) @@ -701,11 +747,13 @@ possible_polymorphic_call_targets_1 (vec <cgraph_node *> &nodes, { tree binfo = TYPE_BINFO (type->type); unsigned int i; + vec <tree> type_binfos = vNULL; - record_target_from_binfo (nodes, binfo, otr_type, binfo, otr_token, + record_target_from_binfo (nodes, binfo, otr_type, type_binfos, otr_token, outer_type, offset, inserted, matched_vtables, type->anonymous_namespace); + type_binfos.release (); for (i = 0; i < type->derived_types.length (); i++) possible_polymorphic_call_targets_1 (nodes, inserted, matched_vtables, diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c index 2fb22463128..f39e8c13241 100644 --- a/gcc/ipa-prop.c +++ b/gcc/ipa-prop.c @@ -2127,8 +2127,11 @@ ipa_analyze_params_uses (struct cgraph_node *node, FOR_EACH_IMM_USE_FAST (use_p, imm_iter, ddef) if (!is_gimple_call (USE_STMT (use_p))) { - controlled_uses = IPA_UNDESCRIBED_USE; - break; + if (!is_gimple_debug (USE_STMT (use_p))) + { + controlled_uses = IPA_UNDESCRIBED_USE; + break; + } } else controlled_uses++; @@ -3326,6 +3329,7 @@ ipa_print_node_params (FILE *f, struct cgraph_node *node) { int c; + fprintf (f, " "); ipa_dump_param (f, info, i); if (ipa_is_param_used (info, i)) fprintf (f, " used"); diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index ad51a4746ff..152fa233e9e 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,14 @@ +2014-01-09 Richard Biener <rguenther@suse.de> + + * lto.c (gimple_canonical_types_compatible_p): Fix comment. + +2014-01-09 Richard Biener <rguenther@suse.de> + + PR lto/45586 + * lto.c (hash_canonical_type): Do not hash TREE_ADDRESSABLE, + TYPE_ALIGN, TYPE_RESTRICT or TYPE_REF_CAN_ALIAS_ALL. + (gimple_canonical_types_compatible_p): Do not compare them either. + 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> Update copyright years diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c index 6abb4f456b4..8ec4ae095c8 100644 --- a/gcc/lto/lto.c +++ b/gcc/lto/lto.c @@ -280,8 +280,6 @@ hash_canonical_type (tree type) only existing types having the same features as the new type will be checked. */ v = iterative_hash_hashval_t (TREE_CODE (type), 0); - v = iterative_hash_hashval_t (TREE_ADDRESSABLE (type), v); - v = iterative_hash_hashval_t (TYPE_ALIGN (type), v); v = iterative_hash_hashval_t (TYPE_MODE (type), v); /* Incorporate common features of numerical types. */ @@ -308,9 +306,7 @@ hash_canonical_type (tree type) pointed to but do not recurse to the pointed-to type. */ if (POINTER_TYPE_P (type)) { - v = iterative_hash_hashval_t (TYPE_REF_CAN_ALIAS_ALL (type), v); v = iterative_hash_hashval_t (TYPE_ADDR_SPACE (TREE_TYPE (type)), v); - v = iterative_hash_hashval_t (TYPE_RESTRICT (type), v); v = iterative_hash_hashval_t (TREE_CODE (TREE_TYPE (type)), v); } @@ -447,9 +443,6 @@ gimple_canonical_types_compatible_p (tree t1, tree t2) if (TREE_CODE (t1) != TREE_CODE (t2)) return false; - if (TREE_ADDRESSABLE (t1) != TREE_ADDRESSABLE (t2)) - return false; - /* Qualifiers do not matter for canonical type comparison purposes. */ /* Void types and nullptr types are always the same. */ @@ -457,9 +450,8 @@ gimple_canonical_types_compatible_p (tree t1, tree t2) || TREE_CODE (t1) == NULLPTR_TYPE) return true; - /* Can't be the same type if they have different alignment, or mode. */ - if (TYPE_ALIGN (t1) != TYPE_ALIGN (t2) - || TYPE_MODE (t1) != TYPE_MODE (t2)) + /* Can't be the same type if they have different mode. */ + if (TYPE_MODE (t1) != TYPE_MODE (t2)) return false; /* Non-aggregate types can be handled cheaply. */ @@ -486,18 +478,10 @@ gimple_canonical_types_compatible_p (tree t1, tree t2) useless_type_conversion_p would do. */ if (POINTER_TYPE_P (t1)) { - /* If the two pointers have different ref-all attributes, - they can't be the same type. */ - if (TYPE_REF_CAN_ALIAS_ALL (t1) != TYPE_REF_CAN_ALIAS_ALL (t2)) - return false; - if (TYPE_ADDR_SPACE (TREE_TYPE (t1)) != TYPE_ADDR_SPACE (TREE_TYPE (t2))) return false; - if (TYPE_RESTRICT (t1) != TYPE_RESTRICT (t2)) - return false; - if (TREE_CODE (TREE_TYPE (t1)) != TREE_CODE (TREE_TYPE (t2))) return false; } diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 8d63e97078b..7ba3ddb6698 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -766,6 +766,9 @@ schedule_reg_moves (partial_schedule_ptr ps) distance1_uses = distances[1] ? sbitmap_alloc (g->num_nodes) : NULL; + if (distance1_uses) + bitmap_clear (distance1_uses); + /* Every use of the register defined by node may require a different copy of this register, depending on the time the use is scheduled. Record which uses require which move results. */ diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 5daa28178da..66686692913 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -7534,12 +7534,21 @@ expand_omp_atomic_pipeline (basic_block load_bb, basic_block store_bb, loadedi = loaded_val; } + fncode = (enum built_in_function) (BUILT_IN_ATOMIC_LOAD_N + index + 1); + tree loaddecl = builtin_decl_explicit (fncode); + if (loaddecl) + initial + = fold_convert (TREE_TYPE (TREE_TYPE (iaddr)), + build_call_expr (loaddecl, 2, iaddr, + build_int_cst (NULL_TREE, + MEMMODEL_RELAXED))); + else + initial = build2 (MEM_REF, TREE_TYPE (TREE_TYPE (iaddr)), iaddr, + build_int_cst (TREE_TYPE (iaddr), 0)); + initial - = force_gimple_operand_gsi (&si, - build2 (MEM_REF, TREE_TYPE (TREE_TYPE (iaddr)), - iaddr, - build_int_cst (TREE_TYPE (iaddr), 0)), - true, NULL_TREE, true, GSI_SAME_STMT); + = force_gimple_operand_gsi (&si, initial, true, NULL_TREE, true, + GSI_SAME_STMT); /* Move the value to the LOADEDI temporary. */ if (gimple_in_ssa_p (cfun)) @@ -11535,7 +11544,7 @@ simd_clone_adjust (struct cgraph_node *node) unsigned int alignment = node->simdclone->args[i].alignment; tree orig_arg = node->simdclone->args[i].orig_arg; tree def = ssa_default_def (cfun, orig_arg); - if (!has_zero_uses (def)) + if (def && !has_zero_uses (def)) { tree fn = builtin_decl_explicit (BUILT_IN_ASSUME_ALIGNED); gimple_seq seq = NULL; @@ -11585,7 +11594,7 @@ simd_clone_adjust (struct cgraph_node *node) tree def = ssa_default_def (cfun, orig_arg); gcc_assert (INTEGRAL_TYPE_P (TREE_TYPE (orig_arg)) || POINTER_TYPE_P (TREE_TYPE (orig_arg))); - if (!has_zero_uses (def)) + if (def && !has_zero_uses (def)) { iter1 = make_ssa_name (orig_arg, NULL); iter2 = make_ssa_name (orig_arg, NULL); diff --git a/gcc/optabs.c b/gcc/optabs.c index 45c728b5506..fcd2c7216b4 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -6242,7 +6242,7 @@ init_tree_optimization_optabs (tree optnode) /* If the optabs changed, record it. */ if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs))) - TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs; + TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs; else { TREE_OPTIMIZATION_OPTABS (optnode) = NULL; diff --git a/gcc/params.def b/gcc/params.def index af89dd9f388..abfda73ca87 100644 --- a/gcc/params.def +++ b/gcc/params.def @@ -1049,7 +1049,37 @@ DEFPARAM (PARAM_MAX_SLSR_CANDIDATE_SCAN, "strength reduction", 50, 1, 999999) +DEFPARAM (PARAM_ASAN_STACK, + "asan-stack", + "Enable asan stack protection", + 1, 0, 1) + +DEFPARAM (PARAM_ASAN_GLOBALS, + "asan-globals", + "Enable asan globals protection", + 1, 0, 1) + +DEFPARAM (PARAM_ASAN_INSTRUMENT_WRITES, + "asan-instrument-writes", + "Enable asan store operations protection", + 1, 0, 1) + +DEFPARAM (PARAM_ASAN_INSTRUMENT_READS, + "asan-instrument-reads", + "Enable asan load operations protection", + 1, 0, 1) + +DEFPARAM (PARAM_ASAN_MEMINTRIN, + "asan-memintrin", + "Enable asan builtin functions protection", + 1, 0, 1) + +DEFPARAM (PARAM_ASAN_USE_AFTER_RETURN, + "asan-use-after-return", + "Enable asan builtin functions protection", + 1, 0, 1) /* + Local variables: mode:c End: diff --git a/gcc/params.h b/gcc/params.h index 82870585293..64f3a0fcbae 100644 --- a/gcc/params.h +++ b/gcc/params.h @@ -218,5 +218,17 @@ extern void init_param_values (int *params); PARAM_VALUE (PARAM_ALLOW_PACKED_LOAD_DATA_RACES) #define ALLOW_PACKED_STORE_DATA_RACES \ PARAM_VALUE (PARAM_ALLOW_PACKED_STORE_DATA_RACES) +#define ASAN_STACK \ + PARAM_VALUE (PARAM_ASAN_STACK) +#define ASAN_GLOBALS \ + PARAM_VALUE (PARAM_ASAN_GLOBALS) +#define ASAN_INSTRUMENT_READS \ + PARAM_VALUE (PARAM_ASAN_INSTRUMENT_READS) +#define ASAN_INSTRUMENT_WRITES \ + PARAM_VALUE (PARAM_ASAN_INSTRUMENT_WRITES) +#define ASAN_MEMINTRIN \ + PARAM_VALUE (PARAM_ASAN_MEMINTRIN) +#define ASAN_USE_AFTER_RETURN \ + PARAM_VALUE (PARAM_ASAN_USE_AFTER_RETURN) #endif /* ! GCC_PARAMS_H */ diff --git a/gcc/ree.c b/gcc/ree.c index 152cc5aa914..63cc8cc7c32 100644 --- a/gcc/ree.c +++ b/gcc/ree.c @@ -282,8 +282,20 @@ static bool combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set) { rtx orig_src = SET_SRC (*orig_set); - rtx new_reg = gen_rtx_REG (cand->mode, REGNO (SET_DEST (*orig_set))); rtx new_set; + rtx cand_pat = PATTERN (cand->insn); + + /* If the extension's source/destination registers are not the same + then we need to change the original load to reference the destination + of the extension. Then we need to emit a copy from that destination + to the original destination of the load. */ + rtx new_reg; + bool copy_needed + = (REGNO (SET_DEST (cand_pat)) != REGNO (XEXP (SET_SRC (cand_pat), 0))); + if (copy_needed) + new_reg = gen_rtx_REG (cand->mode, REGNO (SET_DEST (cand_pat))); + else + new_reg = gen_rtx_REG (cand->mode, REGNO (SET_DEST (*orig_set))); /* Merge constants by directly moving the constant into the register under some conditions. Recall that RTL constants are sign-extended. */ @@ -342,7 +354,8 @@ combine_set_extension (ext_cand *cand, rtx curr_insn, rtx *orig_set) if (dump_file) { fprintf (dump_file, - "Tentatively merged extension with definition:\n"); + "Tentatively merged extension with definition %s:\n", + (copy_needed) ? "(copy needed)" : ""); print_rtl_single (dump_file, curr_insn); } return true; @@ -567,27 +580,21 @@ make_defs_and_copies_lists (rtx extend_insn, const_rtx set_pat, return ret; } -/* Merge the DEF_INSN with an extension. Calls combine_set_extension - on the SET pattern. */ - -static bool -merge_def_and_ext (ext_cand *cand, rtx def_insn, ext_state *state) +/* If DEF_INSN has single SET expression, possibly buried inside + a PARALLEL, return the address of the SET expression, else + return NULL. This is similar to single_set, except that + single_set allows multiple SETs when all but one is dead. */ +static rtx * +get_sub_rtx (rtx def_insn) { - enum machine_mode ext_src_mode; - enum rtx_code code; - rtx *sub_rtx; - rtx s_expr; - int i; - - ext_src_mode = GET_MODE (XEXP (SET_SRC (cand->expr), 0)); - code = GET_CODE (PATTERN (def_insn)); - sub_rtx = NULL; + enum rtx_code code = GET_CODE (PATTERN (def_insn)); + rtx *sub_rtx = NULL; if (code == PARALLEL) { - for (i = 0; i < XVECLEN (PATTERN (def_insn), 0); i++) + for (int i = 0; i < XVECLEN (PATTERN (def_insn), 0); i++) { - s_expr = XVECEXP (PATTERN (def_insn), 0, i); + rtx s_expr = XVECEXP (PATTERN (def_insn), 0, i); if (GET_CODE (s_expr) != SET) continue; @@ -596,7 +603,7 @@ merge_def_and_ext (ext_cand *cand, rtx def_insn, ext_state *state) else { /* PARALLEL with multiple SETs. */ - return false; + return NULL; } } } @@ -605,10 +612,27 @@ merge_def_and_ext (ext_cand *cand, rtx def_insn, ext_state *state) else { /* It is not a PARALLEL or a SET, what could it be ? */ - return false; + return NULL; } gcc_assert (sub_rtx != NULL); + return sub_rtx; +} + +/* Merge the DEF_INSN with an extension. Calls combine_set_extension + on the SET pattern. */ + +static bool +merge_def_and_ext (ext_cand *cand, rtx def_insn, ext_state *state) +{ + enum machine_mode ext_src_mode; + rtx *sub_rtx; + + ext_src_mode = GET_MODE (XEXP (SET_SRC (cand->expr), 0)); + sub_rtx = get_sub_rtx (def_insn); + + if (sub_rtx == NULL) + return false; if (REG_P (SET_DEST (*sub_rtx)) && (GET_MODE (SET_DEST (*sub_rtx)) == ext_src_mode @@ -662,6 +686,72 @@ combine_reaching_defs (ext_cand *cand, const_rtx set_pat, ext_state *state) if (!outcome) return false; + /* If the destination operand of the extension is a different + register than the source operand, then additional restrictions + are needed. */ + if ((REGNO (SET_DEST (PATTERN (cand->insn))) + != REGNO (XEXP (SET_SRC (PATTERN (cand->insn)), 0)))) + { + /* In theory we could handle more than one reaching def, it + just makes the code to update the insn stream more complex. */ + if (state->defs_list.length () != 1) + return false; + + /* We require the candidate not already be modified. This may + be overly conservative. */ + if (state->modified[INSN_UID (cand->insn)].kind != EXT_MODIFIED_NONE) + return false; + + /* Transformation of + (set (reg1) (expression)) + (set (reg2) (any_extend (reg1))) + into + (set (reg2) (any_extend (expression))) + (set (reg1) (reg2)) + is only valid for scalar integral modes, as it relies on the low + subreg of reg1 to have the value of (expression), which is not true + e.g. for vector modes. */ + if (!SCALAR_INT_MODE_P (GET_MODE (SET_DEST (PATTERN (cand->insn))))) + return false; + + /* There's only one reaching def. */ + rtx def_insn = state->defs_list[0]; + + /* The defining statement must not have been modified either. */ + if (state->modified[INSN_UID (def_insn)].kind != EXT_MODIFIED_NONE) + return false; + + /* The defining statement and candidate insn must be in the same block. + This is merely to keep the test for safety and updating the insn + stream simple. Also ensure that within the block the candidate + follows the defining insn. */ + if (BLOCK_FOR_INSN (cand->insn) != BLOCK_FOR_INSN (def_insn) + || DF_INSN_LUID (def_insn) > DF_INSN_LUID (cand->insn)) + return false; + + /* If there is an overlap between the destination of DEF_INSN and + CAND->insn, then this transformation is not safe. Note we have + to test in the widened mode. */ + rtx *dest_sub_rtx = get_sub_rtx (def_insn); + if (dest_sub_rtx == NULL + || !REG_P (SET_DEST (*dest_sub_rtx))) + return false; + + rtx tmp_reg = gen_rtx_REG (GET_MODE (SET_DEST (PATTERN (cand->insn))), + REGNO (SET_DEST (*dest_sub_rtx))); + if (reg_overlap_mentioned_p (tmp_reg, SET_DEST (PATTERN (cand->insn)))) + return false; + + /* The destination register of the extension insn must not be + used or set between the def_insn and cand->insn exclusive. */ + if (reg_used_between_p (SET_DEST (PATTERN (cand->insn)), + def_insn, cand->insn) + || reg_set_between_p (SET_DEST (PATTERN (cand->insn)), + def_insn, cand->insn)) + return false; + } + + /* If cand->insn has been already modified, update cand->mode to a wider mode if possible, or punt. */ if (state->modified[INSN_UID (cand->insn)].kind != EXT_MODIFIED_NONE) @@ -778,8 +868,7 @@ add_removable_extension (const_rtx expr, rtx insn, if (REG_P (dest) && (code == SIGN_EXTEND || code == ZERO_EXTEND) - && REG_P (XEXP (src, 0)) - && REGNO (dest) == REGNO (XEXP (src, 0))) + && REG_P (XEXP (src, 0))) { struct df_link *defs, *def; ext_cand *cand; @@ -863,6 +952,7 @@ find_and_remove_re (void) int num_re_opportunities = 0, num_realized = 0, i; vec<ext_cand> reinsn_list; auto_vec<rtx> reinsn_del_list; + auto_vec<rtx> reinsn_copy_list; ext_state state; /* Construct DU chain to get all reaching definitions of each @@ -899,11 +989,41 @@ find_and_remove_re (void) if (dump_file) fprintf (dump_file, "Eliminated the extension.\n"); num_realized++; - reinsn_del_list.safe_push (curr_cand->insn); + if (REGNO (SET_DEST (PATTERN (curr_cand->insn))) + != REGNO (XEXP (SET_SRC (PATTERN (curr_cand->insn)), 0))) + { + reinsn_copy_list.safe_push (curr_cand->insn); + reinsn_copy_list.safe_push (state.defs_list[0]); + } + reinsn_del_list.safe_push (curr_cand->insn); state.modified[INSN_UID (curr_cand->insn)].deleted = 1; } } + /* The copy list contains pairs of insns which describe copies we + need to insert into the INSN stream. + + The first insn in each pair is the extension insn, from which + we derive the source and destination of the copy. + + The second insn in each pair is the memory reference where the + extension will ultimately happen. We emit the new copy + immediately after this insn. + + It may first appear that the arguments for the copy are reversed. + Remember that the memory reference will be changed to refer to the + destination of the extention. So we're actually emitting a copy + from the new destination to the old destination. */ + for (unsigned int i = 0; i < reinsn_copy_list.length (); i += 2) + { + rtx curr_insn = reinsn_copy_list[i]; + rtx pat = PATTERN (curr_insn); + rtx new_reg = gen_rtx_REG (GET_MODE (SET_DEST (pat)), + REGNO (XEXP (SET_SRC (pat), 0))); + rtx set = gen_rtx_SET (VOIDmode, new_reg, SET_DEST (pat)); + emit_insn_after (set, reinsn_copy_list[i + 1]); + } + /* Delete all useless extensions here in one sweep. */ FOR_EACH_VEC_ELT (reinsn_del_list, i, curr_insn) delete_insn (curr_insn); diff --git a/gcc/reorg.c b/gcc/reorg.c index 740da4a83c6..de332323ae1 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -1093,6 +1093,7 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq, int used_annul = 0; int i; struct resources cc_set; + bool *redundant; /* We can't do anything if there are more delay slots in SEQ than we can handle, or if we don't know that it will be a taken branch. @@ -1133,6 +1134,7 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq, return delay_list; #endif + redundant = XALLOCAVEC (bool, XVECLEN (seq, 0)); for (i = 1; i < XVECLEN (seq, 0); i++) { rtx trial = XVECEXP (seq, 0, i); @@ -1154,7 +1156,8 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq, /* If this insn was already done (usually in a previous delay slot), pretend we put it in our delay slot. */ - if (redundant_insn (trial, insn, new_delay_list)) + redundant[i] = redundant_insn (trial, insn, new_delay_list); + if (redundant[i]) continue; /* We will end up re-vectoring this branch, so compute flags @@ -1187,6 +1190,12 @@ steal_delay_list_from_target (rtx insn, rtx condition, rtx seq, return delay_list; } + /* Record the effect of the instructions that were redundant and which + we therefore decided not to copy. */ + for (i = 1; i < XVECLEN (seq, 0); i++) + if (redundant[i]) + update_block (XVECEXP (seq, 0, i), insn); + /* Show the place to which we will be branching. */ *pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0))); @@ -1250,6 +1259,7 @@ steal_delay_list_from_fallthrough (rtx insn, rtx condition, rtx seq, /* If this insn was already done, we don't need it. */ if (redundant_insn (trial, insn, delay_list)) { + update_block (trial, insn); delete_from_delay_slot (trial); continue; } @@ -3236,6 +3246,7 @@ relax_delay_slots (rtx first) to reprocess this insn. */ if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0)) { + update_block (XVECEXP (pat, 0, 1), insn); delete_from_delay_slot (XVECEXP (pat, 0, 1)); next = prev_active_insn (next); continue; @@ -3355,6 +3366,7 @@ relax_delay_slots (rtx first) && redirect_with_delay_slots_safe_p (delay_insn, target_label, insn)) { + update_block (XVECEXP (PATTERN (trial), 0, 1), insn); reorg_redirect_jump (delay_insn, target_label); next = insn; continue; diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 2c6bc3693a2..66d3c79e3e8 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -2762,7 +2762,21 @@ get_mode_bounds (enum machine_mode mode, int sign, gcc_assert (size <= HOST_BITS_PER_WIDE_INT); - if (sign) + /* Special case BImode, which has values 0 and STORE_FLAG_VALUE. */ + if (mode == BImode) + { + if (STORE_FLAG_VALUE < 0) + { + min_val = STORE_FLAG_VALUE; + max_val = 0; + } + else + { + min_val = 0; + max_val = STORE_FLAG_VALUE; + } + } + else if (sign) { min_val = -((unsigned HOST_WIDE_INT) 1 << (size - 1)); max_val = ((unsigned HOST_WIDE_INT) 1 << (size - 1)) - 1; diff --git a/gcc/target-globals.c b/gcc/target-globals.c index 2cfe257d567..8d3eaa89041 100644 --- a/gcc/target-globals.c +++ b/gcc/target-globals.c @@ -68,30 +68,47 @@ struct target_globals * save_target_globals (void) { struct target_globals *g; - struct target_optabs *saved_this_fn_optabs = this_fn_optabs; - - g = ggc_alloc_target_globals (); - g->flag_state = XCNEW (struct target_flag_state); - g->regs = XCNEW (struct target_regs); + struct target_globals_extra { + struct target_globals g; + struct target_flag_state flag_state; + struct target_optabs optabs; + struct target_cfgloop cfgloop; + struct target_builtins builtins; + struct target_gcse gcse; + struct target_bb_reorder bb_reorder; + struct target_lower_subreg lower_subreg; + } *p; + p = (struct target_globals_extra *) + ggc_internal_cleared_alloc_stat (sizeof (struct target_globals_extra) + PASS_MEM_STAT); + g = (struct target_globals *) p; + g->flag_state = &p->flag_state; + g->regs = ggc_internal_cleared_alloc_stat (sizeof (struct target_regs) + PASS_MEM_STAT); g->rtl = ggc_alloc_cleared_target_rtl (); - g->hard_regs = XCNEW (struct target_hard_regs); - g->reload = XCNEW (struct target_reload); - g->expmed = XCNEW (struct target_expmed); - g->optabs = XCNEW (struct target_optabs); + g->hard_regs + = ggc_internal_cleared_alloc_stat (sizeof (struct target_hard_regs) + PASS_MEM_STAT); + g->reload = ggc_internal_cleared_alloc_stat (sizeof (struct target_reload) + PASS_MEM_STAT); + g->expmed = ggc_internal_cleared_alloc_stat (sizeof (struct target_expmed) + PASS_MEM_STAT); + g->optabs = &p->optabs; g->libfuncs = ggc_alloc_cleared_target_libfuncs (); - g->cfgloop = XCNEW (struct target_cfgloop); - g->ira = XCNEW (struct target_ira); - g->ira_int = XCNEW (struct target_ira_int); - g->lra_int = XCNEW (struct target_lra_int); - g->builtins = XCNEW (struct target_builtins); - g->gcse = XCNEW (struct target_gcse); - g->bb_reorder = XCNEW (struct target_bb_reorder); - g->lower_subreg = XCNEW (struct target_lower_subreg); + g->cfgloop = &p->cfgloop; + g->ira = ggc_internal_cleared_alloc_stat (sizeof (struct target_ira) + PASS_MEM_STAT); + g->ira_int = ggc_internal_cleared_alloc_stat (sizeof (struct target_ira_int) + PASS_MEM_STAT); + g->lra_int = ggc_internal_cleared_alloc_stat (sizeof (struct target_lra_int) + PASS_MEM_STAT); + g->builtins = &p->builtins; + g->gcse = &p->gcse; + g->bb_reorder = &p->bb_reorder; + g->lower_subreg = &p->lower_subreg; restore_target_globals (g); - this_fn_optabs = this_target_optabs; init_reg_sets (); target_reinit (); - this_fn_optabs = saved_this_fn_optabs; return g; } diff --git a/gcc/target-globals.h b/gcc/target-globals.h index b84d2902d9c..e848a01677c 100644 --- a/gcc/target-globals.h +++ b/gcc/target-globals.h @@ -37,26 +37,28 @@ extern struct target_builtins *this_target_builtins; extern struct target_gcse *this_target_gcse; extern struct target_bb_reorder *this_target_bb_reorder; extern struct target_lower_subreg *this_target_lower_subreg; +#endif struct GTY(()) target_globals { struct target_flag_state *GTY((skip)) flag_state; - struct target_regs *GTY((skip)) regs; + void *GTY((atomic)) regs; struct target_rtl *rtl; - struct target_hard_regs *GTY((skip)) hard_regs; - struct target_reload *GTY((skip)) reload; - struct target_expmed *GTY((skip)) expmed; + void *GTY((atomic)) hard_regs; + void *GTY((atomic)) reload; + void *GTY((atomic)) expmed; struct target_optabs *GTY((skip)) optabs; struct target_libfuncs *libfuncs; struct target_cfgloop *GTY((skip)) cfgloop; - struct target_ira *GTY((skip)) ira; - struct target_ira_int *GTY((skip)) ira_int; - struct target_lra_int *GTY((skip)) lra_int; + void *GTY((atomic)) ira; + void *GTY((atomic)) ira_int; + void *GTY((atomic)) lra_int; struct target_builtins *GTY((skip)) builtins; struct target_gcse *GTY((skip)) gcse; struct target_bb_reorder *GTY((skip)) bb_reorder; struct target_lower_subreg *GTY((skip)) lower_subreg; }; +#if SWITCHABLE_TARGET extern struct target_globals default_target_globals; extern struct target_globals *save_target_globals (void); @@ -66,17 +68,17 @@ static inline void restore_target_globals (struct target_globals *g) { this_target_flag_state = g->flag_state; - this_target_regs = g->regs; + this_target_regs = (struct target_regs *) g->regs; this_target_rtl = g->rtl; - this_target_hard_regs = g->hard_regs; - this_target_reload = g->reload; - this_target_expmed = g->expmed; + this_target_hard_regs = (struct target_hard_regs *) g->hard_regs; + this_target_reload = (struct target_reload *) g->reload; + this_target_expmed = (struct target_expmed *) g->expmed; this_target_optabs = g->optabs; this_target_libfuncs = g->libfuncs; this_target_cfgloop = g->cfgloop; - this_target_ira = g->ira; - this_target_ira_int = g->ira_int; - this_target_lra_int = g->lra_int; + this_target_ira = (struct target_ira *) g->ira; + this_target_ira_int = (struct target_ira_int *) g->ira_int; + this_target_lra_int = (struct target_lra_int *) g->lra_int; this_target_builtins = g->builtins; this_target_gcse = g->gcse; this_target_bb_reorder = g->bb_reorder; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ebf40341ef5..126e6f03727 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,408 @@ +2014-01-13 Richard Biener <rguenther@suse.de> + + * g++.dg/lto/lto.exp: Do check_effective_target_lto check before + adjusting mathlib options. + * gfortran.dg/lto/lto.exp: Likewise. + +2014-01-13 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/loop_optimization17.adb: New test. + * gnat.dg/loop_optimization17_pkg.ad[sb]: New helper. + +2014-01-13 Christian Bruel <christian.bruel@st.com> + + * gcc.target/sh/cmpstrn.c: New case. + +2014-01-13 Jakub Jelinek <jakub@redhat.com> + + * gcc.dg/vect/vect-simd-clone-10.c: Add dg-do run. + * gcc.dg/vect/vect-simd-clone-12.c: Likewise. + +2014-01-12 Janus Weil <janus@gcc.gnu.org> + + PR fortran/58026 + * gfortran.dg/alloc_comp_basics_6.f90: New. + +2014-01-11 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/59700 + * gfortran.dg/pr59700.f90: New test. + +2014-01-11 Dominique d'Humieres <dominiq@lps.ens.fr> + + * gfortran.dg/binding_label_tests_10_main.f03: Cleanup mod file. + * gfortran.dg/use_only_3.f90: Likewise. + * gfortran.dg/inquire_10.f90: Delete opened file. + * gfortran.dg/inquire_15.f90: Likewise. + * gfortran.dg/pr16597.f90: Likewise. + * gfortran.dg/open_negative_unit_1.f90: Likewise + test + for PR59419. + +2014-01-10 Jeff Law <law@redhat.com> + + PR middle-end/59743 + * gcc.c-torture/compile/pr59743.c: New test. + +2014-01-10 Jan Hubicka <jh@suse.cz> + + PR ipa/58585 + * g++.dg/torture/pr58585.C: New testcase. + +2014-01-10 Hans-Peter Nilsson <hp@axis.com> + + * gcc.dg/pr46309.c: Disable for cris*-*-*. + +2014-01-10 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.target/arm/neon-nested-apcs.c: Tweak dg directives. + +2014-01-10 Richard Earnshaw <rearnsha@arm.com> + + PR target/59744 + * gcc.target/aarch64/cmn-neg.c: Use equality comparisons. + * gcc.target/aarch64/cmn-neg2.c: New test. + +2014-01-10 Richard Biener <rguenther@suse.de> + + PR tree-optimization/59374 + * gcc.dg/torture/pr59374-3.c: New testcase. + +2014-01-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com> + + * lib/target-supports.exp + (check_effective_target_arm_crypto_ok_nocache): New. + (check_effective_target_arm_crypto_ok): Use above procedure. + (add_options_for_arm_crypto): Use et_arm_crypto_flags. + +2014-01-10 Jan Hubicka <hubicka@ucw.cz> + + PR ipa/58252 + PR ipa/59226 + * g++.dg/ipa/devirt-20.C: New testcase. + * g++.dg/torture/pr58252.C: Likewise. + * g++.dg/torture/pr59226.C: Likewise. + +2014-01-10 Max Ostapenko <m.ostapenko@partner.samsung.com> + + * c-c++-common/asan/no-asan-stack.c: New test. + +2014-01-10 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/59670 + * gcc.dg/pr59670.c: New test. + +2014-01-09 Steve Ellcey <sellcey@mips.com> + + * gcc.dg/delay-slot-1.c: Restrict -mabi=64 to 64 bit processors. + +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/47735 + * gcc.target/i386/pr47735.c: New test. + + PR tree-optimization/59622 + * g++.dg/opt/pr59622-2.C: New test. + * g++.dg/opt/pr59622-3.C: New test. + * g++.dg/opt/pr59622-4.C: New test. + * g++.dg/opt/pr59622-5.C: New test. + + PR sanitizer/59136 + * c-c++-common/asan/strip-path-prefix-1.c: Allow also the + filename:line instead of (modulename+offset) form with stripped + initial / from the filename. + +2014-01-09 Ian Lance Taylor <iant@google.com> + + * go.test/go-test.exp (go-gc-tests): Skip nilptr tests that test + the other Go compiler. + +2014-01-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/59730 + * g++.dg/cpp0x/variadic145.C: New. + +2014-01-09 Uros Bizjak <ubizjak@gmail.com> + + * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems + which don't support -fsplit-stack. Skip rotate[0123].go tests. + +2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR testsuite/59524 + * gcc.dg/cilk-plus/cilk-plus.exp: Make sure the cilk keywords tests + are run only if the Cilk library is available/enabled. + * g++.dg/cilk-plus/cilk-plus.exp: Likewise. + * lib/target-supports.exp (check_libcilkrts_available): New function. + +2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR c++/59631 + * gcc.dg/cilk-plus/cilk-plus.exp: Removed "-fcilkplus" from flags list. + * g++.dg/cilk-plus/cilk-plus.exp: Likewise. + * c-c++-common/cilk-plus/CK/spawnee_inline.c: Replaced second dg-option + with dg-additional-options. + * c-c++-common/cilk-plus/CK/varargs_test.c: Likewise. + * c-c++-common/cilk-plus/CK/steal_check.c: Likewise. + * c-c++-common/cilk-plus/CK/spawner_inline.c: Likewise. + * c-c++-common/cilk-plus/CK/spawning_arg.c: Likewise. + * c-c++-common/cilk-plus/CK/invalid_spawns.c: Added a dg-options tag. + * c-c++-common/cilk-plus/CK/pr59631.c: New testcase. + +2014-01-09 Richard Biener <rguenther@suse.de> + + PR tree-optimization/59715 + * gcc.dg/torture/pr59715.c: New testcase. + +2014-01-09 Max Ostapenko <m.ostapenko@partner.samsung.com> + + * c-c++-common/asan/no-asan-globals.c: New test. + * c-c++-common/asan/no-instrument-reads.c: Likewise. + * c-c++-common/asan/no-instrument-writes.c: Likewise. + * c-c++-common/asan/use-after-return-1.c: Likewise. + * c-c++-common/asan/no-use-after-return.c: Likewise. + +2014-01-08 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/weak2.ad[sb]: New test. + +2014-01-08 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/59471 + * gcc.dg/pr59471.c (foo): Avoid vector type arguments or return + type, use pointers to vector type instead. + +2014-01-08 Catherine Moore <clm@codesourcery.com> + + * gcc.target/mips/umips-branch-3.c: New test. + * gcc.target/mips/umips-branch-4.c: New test. + +2014-01-08 Richard Sandiford <rdsandiford@googlemail.com> + + * gcc.dg/tree-ssa/reassoc-32.c, gcc.dg/tree-ssa/reassoc-33.c, + gcc.dg/tree-ssa/reassoc-34.c, gcc.dg/tree-ssa/reassoc-35.c, + gcc.dg/tree-ssa/reassoc-36.c: Extend -mbranch-cost handling to MIPS. + * gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c, + gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c, + gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c, + gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c, + gcc.dg/tree-ssa/vrp87.c, gcc.dg/tree-ssa/forwprop-28.c: Skip for MIPS. + +2014-01-08 Richard Sandiford <rdsandiford@googlemail.com> + + PR rtl-optimization/59137 + * gcc.target/mips/pr59137.c: New test. + +2014-01-08 Uros Bizjak <ubizjak@gmail.com> + + * gcc.target/i386/asm-1.c (dg-options): Remove -m32. + * gcc.target/i386/incoming-5.c (dg-options): Ditto. + * gcc.target/i386/pr55433.c (dg-options): Ditto. + * gcc.target/i386/pr57848.c (dg-options): Ditto. + * gcc.target/i386/pr59099.c (dg-options): Ditto. + Require fpic effective target. + * gcc.target/i386/pr56246.c (dg-do): Compile for fpic target only. + +2014-01-08 Jakub Jelinek <jakub@redhat.com> + + PR ipa/59722 + * gcc.dg/pr59722.c: New test. + +2014-01-08 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR middle-end/57748 + * gcc.dg/torture/pr57748-3.c: New test. + * gcc.dg/torture/pr57748-4.c: New test. + +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR middle-end/59669 + * gcc.dg/gomp/pr59669-1.c: New test. + * gcc.dg/gomp/pr59669-2.c: New test. + +2014-01-08 Martin Jambor <mjambor@suse.cz> + + PR ipa/59610 + * gcc.dg/ipa/pr59610.c: New test. + +2014-01-08 Janus Weil <janus@gcc.gnu.org> + + PR fortran/58182 + * gfortran.dg/binding_label_tests_26a.f90: New. + * gfortran.dg/binding_label_tests_26b.f90: New. + +2014-01-08 Marek Polacek <polacek@redhat.com> + + PR sanitizer/59667 + * c-c++-common/ubsan/pr59667.c: New test. + +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59630 + * gcc.dg/pr59630.c: New testcase. + +2014-01-08 Richard Biener <rguenther@suse.de> + + PR middle-end/59471 + * gcc.dg/pr59471.c: New testcase. + +2014-01-07 Jeff Law <law@redhat.com> + + PR middle-end/53623 + * gcc.target/i386/pr53623.c: New test. + +2014-01-07 Adam Butcher <adam@jessamine.co.uk> + + * g++.dg/cpp1y/pr58500.C: Hoist PR reference to first line and remove + blanks at EOF. + * g++.dg/cpp1y/pr58534.C: Likewise. + * g++.dg/cpp1y/pr58536.C: Likewise. + * g++.dg/cpp1y/pr58548.C: Likewise. + * g++.dg/cpp1y/pr58549.C: Likewise. + * g++.dg/cpp1y/pr58637.C: Likewise. + * g++.dg/cpp1y/pr59112.C: Likewise. + * g++.dg/cpp1y/pr59113.C: Likewise. + * g++.dg/cpp1y/pr59629.C: Likewise. + * g++.dg/cpp1y/pr59635.C: Likewise. + * g++.dg/cpp1y/pr59636.C: Likewise. + * g++.dg/cpp1y/pr59638.C: Likewise. + +2014-01-07 Yufeng Zhang <yufeng.zhang@arm.com> + + * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test. + +2014-01-07 Richard Sandiford <rdsandiford@googlemail.com> + + * gcc.target/i386/intrinsics_4.c (bar): New function. + +2014-01-07 Paolo Carlini <paolo.carlini@oracle.com> + + * g++.dg/ext/is_base_of_incomplete-2.C: New. + +2014-01-07 Jakub Jelinek <jakub@redhat.com> + + PR rtl-optimization/58668 + * gcc.dg/pr58668.c: New test. + + PR tree-optimization/59643 + * gcc.dg/pr59643.c: New test. + * gcc.c-torture/execute/pr59643.c: New test. + +2014-01-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59589 + * gfortran.dg/class_allocate_16.f90: New. + +2014-01-06 Jakub Jelinek <jakub@redhat.com> + + PR target/59644 + * gcc.target/i386/pr59644.c: New test. + +2014-01-06 Marek Polacek <polacek@redhat.com> + + PR c/57773 + * gcc.dg/pr57773.c: New test. + +2014-01-06 Adam Butcher <adam@jessamine.co.uk> + + PR c++/59635 + PR c++/59636 + PR c++/59629 + PR c++/59638 + * g++.dg/cpp1y/pr59635.C: New testcase. + * g++.dg/cpp1y/pr59636.C: New testcase. + * g++.dg/cpp1y/pr59629.C: New testcase. + * g++.dg/cpp1y/pr59638.C: New testcase. + +2014-01-06 Martin Jambor <mjambor@suse.cz> + + PR ipa/59008 + * gcc.dg/ipa/pr59008.c: New test. + +2014-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.dg/vect/vect.exp: Add clearcap_ldflags to DEFAULT_VECTCFLAGS + if supported. + +2014-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.target/i386/avx512f-vcmppd-2.c: Add -std=c99. + Require c99_runtime. + * gcc.target/i386/avx512f-vcmpps-2.c: Likewise. + + * gcc.target/i386/avx512f-vfixupimmpd-2.c: Add -std=gnu99. + Require c99_runtime. + * gcc.target/i386/avx512f-vfixupimmps-2.c: Likewise. + * gcc.target/i386/avx512f-vfixupimmsd-2.c: Likewise. + * gcc.target/i386/avx512f-vfixupimmss-2.c: Likewise. + + * gcc.target/i386/avx512f-vgetmantpd-2.c: Add -std=c99. + Require c99_runtime. + Make CALC void static. + * gcc.target/i386/avx512f-vgetmantps-2.c: Likewise. + + * gcc.target/i386/avx512f-vgetmantsd-2.c: Add -std=c99. + Require c99_runtime. + * gcc.target/i386/avx512f-vgetmantss-2.c: Likewise. + +2014-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.target/i386/pr59501-1.c: Require avx effective target. + * gcc.target/i386/pr59501-2.c: Likewise. + * gcc.target/i386/pr59501-3.c: Likewise. + * gcc.target/i386/pr59501-4.c: Likewise. + * gcc.target/i386/pr59501-5.c: Likewise. + * gcc.target/i386/pr59501-6.c: Likewise. + +2014-01-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * gcc.target/i386/pr59390.c: Replace math.h by fma declaration. + * gcc.target/i386/pr59390_1.c: Likewise. + * gcc.target/i386/pr59390_2.c: Likewise. + +2014-01-06 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.dg/pr59350.c: Tweak. + * gcc.dg/pr59350-2.c: New test. + * g++.dg/pr59510.C: Likewise. + +2014-01-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59023 + * gfortran.dg/bind_c_procs_2.f90: New. + +2014-01-05 John David Anglin <danglin@gcc.gnu.org> + + * gcc.dg/tree-ssa/reassoc-33.c: Don't run on hppa*-*-*. + * gcc.dg/tree-ssa/reassoc-34.c: Likewise. + * gcc.dg/tree-ssa/reassoc-35.c: Likewise. + * gcc.dg/tree-ssa/reassoc-36.c: Likewise. + * gcc.dg/tree-ssa/forwprop-28.c: Skip compile on hppa*-*-*. + * gcc.dg/tree-ssa/vrp47.c: Likewise. + * gcc.dg/tree-ssa/vrp87.c: Likewise. + +2014-01-04 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.target/arm/neon-nested-apcs.c: New test. + +2014-01-04 Jakub Jelinek <jakub@redhat.com> + + PR tree-optimization/59519 + * gcc.dg/vect/pr59519-1.c: New test. + * gcc.dg/vect/pr59519-2.c: New test. + + * gcc.target/i386/avx512f-vmovdqu32-1.c: Allow vmovdqu64 instead of + vmovdqu32. + +2014-01-04 Janus Weil <janus@gcc.gnu.org> + + PR fortran/59547 + * gfortran.dg/typebound_proc_32.f90: New. + +2014-01-03 Marc Glisse <marc.glisse@inria.fr> + + PR c++/58950 + * g++.dg/pr58950.C: New file. + 2014-01-03 Tobias Burnus <burnus@net-b.de> PR c++/58567 diff --git a/gcc/testsuite/c-c++-common/asan/no-asan-globals.c b/gcc/testsuite/c-c++-common/asan/no-asan-globals.c new file mode 100644 index 00000000000..70a1f95a3a3 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-asan-globals.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-options "-save-temps --param asan-globals=0" } */ + +volatile int ten = 10; + +int main() { + volatile static char XXX[10]; + XXX[ten]; + return 0; +} + +/* { dg-final { scan-assembler-not "__asan_register_globals" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-asan-stack.c b/gcc/testsuite/c-c++-common/asan/no-asan-stack.c new file mode 100644 index 00000000000..0f65ab3f7ac --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-asan-stack.c @@ -0,0 +1,16 @@ +/* { dg-do compile { target { { i?86-*-linux* x86_64-*-linux* } && lp64 } } } */ +/* { dg-options "--param asan-stack=0" } */ +#include <string.h> + +volatile int one = 1; + +int +main () +{ + volatile char a1[] = {one, 2, 3, 4}; + volatile char a2[] = {1, 2*one, 3, 4}; + volatile int res = memcmp ((void *)a1,(void *)a2, 5 + one); + return 0; +} + +/* { dg-final { scan-assembler-not "0x41b58ab3|0x41B58AB3|1102416563" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-instrument-reads.c b/gcc/testsuite/c-c++-common/asan/no-instrument-reads.c new file mode 100644 index 00000000000..df75878de2f --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-instrument-reads.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-options "--param asan-instrument-reads=0 -save-temps" } */ + +volatile int ten = 10; + +int main() { + volatile char x[10]; + x[ten]; + return 0; +} + +/* { dg-final { scan-assembler-not "__asan_load" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-instrument-writes.c b/gcc/testsuite/c-c++-common/asan/no-instrument-writes.c new file mode 100644 index 00000000000..c1500b9fb32 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-instrument-writes.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-options "--param asan-instrument-writes=0 -save-temps" } */ + +volatile int ten = 10; + +int main() { + volatile char x[10]; + x[ten] = 1; + return 0; +} + +/* { dg-final { scan-assembler-not "__asan_store" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-use-after-return.c b/gcc/testsuite/c-c++-common/asan/no-use-after-return.c new file mode 100644 index 00000000000..f326e0caee4 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-use-after-return.c @@ -0,0 +1,13 @@ +/* { dg-do assemble } */ +/* { dg-options "--param asan-use-after-return=0 -save-temps" } */ + +extern void f(char *); + +int main() { + char buf[64]; + f(buf); + return 0; +} + +/* { dg-final { scan-assembler-not "__asan_option_detect_stack_use_after_return" } } */ +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c index ea8e933c03b..812aa37e2d0 100644 --- a/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c +++ b/gcc/testsuite/c-c++-common/asan/strip-path-prefix-1.c @@ -12,4 +12,4 @@ int main() { } /* { dg-output "heap-use-after-free.*(\n|\r\n|\r)" } */ -/* { dg-output " #0 0x\[0-9a-f\]+ \[(\]\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */ +/* { dg-output " #0 0x\[0-9a-f\]+ \[(\]?\[^/\]\[^\n\r]*(\n|\r\n|\r)" } */ diff --git a/gcc/testsuite/c-c++-common/asan/use-after-return-1.c b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c new file mode 100644 index 00000000000..435637d5323 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/use-after-return-1.c @@ -0,0 +1,53 @@ +/* { dg-do run } */ +/* { dg-set-target-env-var ASAN_OPTIONS "detect_stack_use_after_return=1" } */ +/* { dg-shouldfail "asan" } */ + +#include <stdio.h> +#include <pthread.h> + +#ifndef kSize +# define kSize 1 +#endif + +#ifndef UseThread +# define UseThread 0 +#endif + +__attribute__((noinline)) +char *Ident(char *x) { + fprintf(stderr, "1: %p\n", x); + return x; +} + +__attribute__((noinline)) +char *Func1() { + char local[kSize]; + return Ident(local); +} + +__attribute__((noinline)) +void Func2(char *x) { + fprintf(stderr, "2: %p\n", x); + *x = 1; +} + +void *Thread(void *unused) { + Func2(Func1()); + return NULL; +} + +int main(int argc, char **argv) { +#if UseThread + pthread_t t; + pthread_create(&t, 0, Thread, 0); + pthread_join(t, 0); +#else + Func2(Func1()); +#endif + return 0; +} + +/* { dg-output "WRITE of size 1 at .* thread T0.*" } */ +/* { dg-output " #0.*Func2.*use-after-return-1.c:31.*" } */ +/* { dg-output "is located in stack of thread T0 at offset.*" } */ +/* { dg-output "\'local\' <== Memory access at offset 32 is inside this variable" } */ diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_spawns.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_spawns.c index 90dd5c130b4..ba9e6193627 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_spawns.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_spawns.c @@ -1,3 +1,5 @@ +/* { dg-options "-fcilkplus" } */ + extern int foo (); int bar = _Cilk_spawn foo (); /* { dg-error "may only be used inside a function" } */ diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/pr59631.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr59631.c new file mode 100644 index 00000000000..389ee7c5dab --- /dev/null +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/pr59631.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options " " } */ + +/* Tests the errors when Cilk keywords are used without -fcilkplus. */ + +void foo() +{ + _Cilk_spawn foo(); /* { dg-error "must be enabled to use" } */ +} + +void foo2 () +{ + _Cilk_spawn foo (); /* { dg-error "must be enabled to use" } */ + _Cilk_sync; /* { dg-error "must be enabled to use" } */ +} diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawnee_inline.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawnee_inline.c index 8060c6ceb15..233a371f140 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawnee_inline.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawnee_inline.c @@ -1,6 +1,6 @@ /* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-fcilkplus -w" } */ -/* { dg-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ #include <stdio.h> #include <stdlib.h> diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawner_inline.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawner_inline.c index eab9e4206a0..55ec223abb3 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawner_inline.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawner_inline.c @@ -1,6 +1,6 @@ /* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-fcilkplus" } */ -/* { dg-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ #include <stdlib.h> #define DEFAULT_VALUE 30 diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c index ac379528379..95e6cab02c1 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/spawning_arg.c @@ -1,6 +1,6 @@ /* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-fcilkplus" } */ -/* { dg-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ void f0(volatile int *steal_flag) { diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c index 21d6797857d..6e2876531c3 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/steal_check.c @@ -1,6 +1,6 @@ /* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-fcilkplus" } */ -/* { dg-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ // #include <cilk/cilk_api.h> extern void __cilkrts_set_param (char *, char *); diff --git a/gcc/testsuite/c-c++-common/cilk-plus/CK/varargs_test.c b/gcc/testsuite/c-c++-common/cilk-plus/CK/varargs_test.c index ab5d63a3f4c..27146002440 100644 --- a/gcc/testsuite/c-c++-common/cilk-plus/CK/varargs_test.c +++ b/gcc/testsuite/c-c++-common/cilk-plus/CK/varargs_test.c @@ -1,6 +1,6 @@ /* { dg-do run { target { i?86-*-* x86_64-*-* } } } */ /* { dg-options "-fcilkplus" } */ -/* { dg-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-lcilkrts" { target { i?86-*-* x86_64-*-* } } } */ #include <stdarg.h> #include <stdlib.h> diff --git a/gcc/testsuite/c-c++-common/ubsan/pr59667.c b/gcc/testsuite/c-c++-common/ubsan/pr59667.c new file mode 100644 index 00000000000..367e3034629 --- /dev/null +++ b/gcc/testsuite/c-c++-common/ubsan/pr59667.c @@ -0,0 +1,15 @@ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined" } */ +/* { dg-shouldfail "ubsan" } */ +/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ + +int +main (void) +{ + unsigned int len = 1; + float (*P)[len][len] = 0; + (*P)[0][0] = 1; + return 0; +} + +/* { dg-output "store to null pointer of type 'float'(\n|\r\n|\r)" } */ diff --git a/gcc/testsuite/g++.dg/abi/abi-tag5.C b/gcc/testsuite/g++.dg/abi/abi-tag5.C index de5580239dd..95e367ef935 100644 --- a/gcc/testsuite/g++.dg/abi/abi-tag5.C +++ b/gcc/testsuite/g++.dg/abi/abi-tag5.C @@ -1,6 +1,7 @@ // { dg-options -Wabi-tag } +// { dg-final { scan-assembler "_Z1f1BI1AB3fooE" } } struct __attribute__ ((abi_tag ("foo"))) A { }; template <class T> struct B: T { }; -B<A> b; +void f(B<A>) {} diff --git a/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp b/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp index e201fd227cf..37b8ccbe70a 100644 --- a/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp +++ b/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp @@ -47,9 +47,7 @@ dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O2 -ftree-vectorize -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O3 -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -ftree-vectorize -fcilkplus -g" " " -dg-finish -dg-init dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O0 -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O1 -fcilkplus" " " @@ -61,25 +59,17 @@ dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O1 dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O2 -ftree-vectorize -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O3 -fcilkplus" " " dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O3 -ftree-vectorize -fcilkplus -g" " " -dg-finish -dg-init -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O2 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -O2 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -O3 -fcilkplus" " " -dg-finish +if { [check_libcilkrts_available] } { + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -O2 -fcilkplus" " " -dg-init -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -O2 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -O2" " " + } dg-finish unset TEST_EXTRA_LIBS diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C new file mode 100644 index 00000000000..9fe55386188 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-39.C @@ -0,0 +1,11 @@ +// PR c++/58856 +// { dg-require-effective-target c++11 } + +template <typename T> +struct U1 {}; + +template <typename T1, typename... Ts> +using U2 = U1<T1>; + +template <typename T1, typename... Ts> +using U3 = U2<T1, Ts...>; diff --git a/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C b/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C new file mode 100644 index 00000000000..35f6509df78 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C @@ -0,0 +1,10 @@ +// PR c++/58965 +// { dg-require-effective-target c++11 } + +void foo() +{ + static union + { + int i = i; + }; +} diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic145.C b/gcc/testsuite/g++.dg/cpp0x/variadic145.C new file mode 100644 index 00000000000..65edda59fd8 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic145.C @@ -0,0 +1,13 @@ +// PR c++/59730 +// { dg-do compile { target c++11 } } + +template <typename> void declval(); +template <typename> void forward(); +template <typename> class D; +template <typename _Functor, typename... _Bound_args> +class D <_Functor(_Bound_args...)> { + template <typename... _Args, decltype(declval<_Functor>)> + void operator()(...) { + 0(forward<_Args>...); + } +}; diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58500.C b/gcc/testsuite/g++.dg/cpp1y/pr58500.C index b9d4a26d415..7adb1b8ae4c 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58500.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58500.C @@ -1,8 +1,7 @@ +// PR c++/58500 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58500 - struct A {}; void foo(auto (A::*)()); diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58534.C b/gcc/testsuite/g++.dg/cpp1y/pr58534.C index 4aa4f430189..3319f696956 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58534.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58534.C @@ -1,9 +1,7 @@ +// PR c++/58534 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58534 - template<typename> void foo(const auto&) {} template<typename, typename...T> void foo(const auto&, T...) {} - diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58536.C b/gcc/testsuite/g++.dg/cpp1y/pr58536.C index 8050c1957c8..be0043823a0 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58536.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58536.C @@ -1,12 +1,10 @@ +// PR c++/58536 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58536 - struct A { A(auto); }; A::A(auto) {} - diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58548.C b/gcc/testsuite/g++.dg/cpp1y/pr58548.C index 0ac2e1c341d..ad6f726a33c 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58548.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58548.C @@ -1,10 +1,8 @@ +// PR c++/58548 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58548 - void foo(auto) { struct A { int i; }; } - diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58549.C b/gcc/testsuite/g++.dg/cpp1y/pr58549.C index b71bac9975a..b9825b51abc 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58549.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58549.C @@ -1,10 +1,8 @@ +// PR c++/58549 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58549 - void foo(auto) { void bar(); } - diff --git a/gcc/testsuite/g++.dg/cpp1y/pr58637.C b/gcc/testsuite/g++.dg/cpp1y/pr58637.C index 46200ff1c5d..29297bb93db 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr58637.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr58637.C @@ -1,7 +1,5 @@ +// PR c++/58637 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/58637 - template<> void foo(auto); // { dg-error "auto|not a template" } - diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59112.C b/gcc/testsuite/g++.dg/cpp1y/pr59112.C index e7326ac3113..12fef4b9fac 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr59112.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr59112.C @@ -1,8 +1,7 @@ +// PR c++/59112 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/59112 - void foo() { struct A diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59113.C b/gcc/testsuite/g++.dg/cpp1y/pr59113.C index f909a76bd35..19bab2cedcc 100644 --- a/gcc/testsuite/g++.dg/cpp1y/pr59113.C +++ b/gcc/testsuite/g++.dg/cpp1y/pr59113.C @@ -1,8 +1,7 @@ +// PR c++/59113 // { dg-do compile } // { dg-options "-std=gnu++1y" } -// PR c++/59113 - void foo() { void bar(auto) {} // { dg-error "function-definition|auto|not permitted" } diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59629.C b/gcc/testsuite/g++.dg/cpp1y/pr59629.C new file mode 100644 index 00000000000..c0e01c1c75d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr59629.C @@ -0,0 +1,5 @@ +// PR c++/59629 +// { dg-do compile } +// { dg-options "-std=c++1y" } + +void foo(int i = []{ auto 0; }()); // { dg-error "expected|could not convert" } diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59635.C b/gcc/testsuite/g++.dg/cpp1y/pr59635.C new file mode 100644 index 00000000000..16a3481b99d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr59635.C @@ -0,0 +1,7 @@ +// PR c++/59635 +// { dg-do compile } +// { dg-options "-std=c++1y" } + +auto f = [] (auto, ...) { return 0; }; + +int (*p) (int, ...) = f; // { dg-message "unimplemented" } diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59636.C b/gcc/testsuite/g++.dg/cpp1y/pr59636.C new file mode 100644 index 00000000000..bb7d9b546d4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr59636.C @@ -0,0 +1,5 @@ +// PR c++/59636 +// { dg-do compile } +// { dg-options "-std=c++1y" } + +auto f = []() { return []<>() {}; }; // { dg-error "expected identifier" } diff --git a/gcc/testsuite/g++.dg/cpp1y/pr59638.C b/gcc/testsuite/g++.dg/cpp1y/pr59638.C new file mode 100644 index 00000000000..22af1398a13 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr59638.C @@ -0,0 +1,14 @@ +// PR c++/59638 +// { dg-do compile } +// { dg-options "-std=gnu++1y" } + +void (*a)(auto); // { dg-error "template declaration" } + +void (*b)(auto) = 0; // { dg-error "template declaration" } + +typedef void (*f)(auto); // { dg-error "template declaration" } + +struct A +{ + int i; +}; diff --git a/gcc/testsuite/g++.dg/ext/is_base_of_incomplete-2.C b/gcc/testsuite/g++.dg/ext/is_base_of_incomplete-2.C new file mode 100644 index 00000000000..54862585d09 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/is_base_of_incomplete-2.C @@ -0,0 +1,5 @@ +struct T; + +int check1[__is_base_of(T, T) ? 1 : -1]; +int check2[__is_base_of(T, const T) ? 1 : -1]; +int check3[__is_base_of(volatile T, T) ? 1 : -1]; diff --git a/gcc/testsuite/g++.dg/ipa/devirt-20.C b/gcc/testsuite/g++.dg/ipa/devirt-20.C new file mode 100644 index 00000000000..aee95147a63 --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/devirt-20.C @@ -0,0 +1,31 @@ +#include <stdlib.h> +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-release_ssa" } */ +namespace { +struct A +{ int a; virtual int foo() {return a;} void bar() {a=7;} }; +struct B +{ int b; virtual int foo2() {return b;} void bar2() {b=9;} }; +struct C : public virtual A, public virtual B { }; +struct D : public virtual B, public virtual A { }; +struct E : public C, public D { void bar2() {b=9;} }; } +int +main(void) +{ + struct E e; + struct C *c = &e; + struct D *d = &e; + struct A *a = &e; + struct B *b = &e; + e.bar(); + e.bar2(); + if (e.foo() + e.foo2() != 16) + abort (); + if (c->foo() + d->foo2() != 16) + abort (); + if (a->foo() + b->foo2() != 16) + abort (); + return 0; +} +/* { dg-final { scan-tree-dump-not "abort" "release_ssa" } } */ +/* { dg-final { cleanup-ipa-dump "release_ssa" } } */ diff --git a/gcc/testsuite/g++.dg/lto/lto.exp b/gcc/testsuite/g++.dg/lto/lto.exp index 9145af78248..4d7d727b987 100644 --- a/gcc/testsuite/g++.dg/lto/lto.exp +++ b/gcc/testsuite/g++.dg/lto/lto.exp @@ -35,6 +35,11 @@ load_lib target-libpath.exp # Load the language-independent compabibility support procedures. load_lib lto.exp +# If LTO has not been enabled, bail. +if { ![check_effective_target_lto] } { + return +} + g++_init lto_init no-mathlib @@ -42,11 +47,6 @@ lto_init no-mathlib # with other lto tests running at the same time. set sid "cp_lto" -# If LTO has not been enabled, bail. -if { ![check_effective_target_lto] } { - return -} - # Main loop. foreach src [lsort [find $srcdir/$subdir *_0.\[cC\]]] { # If we're only testing specific files and this isn't one of them, skip it. diff --git a/gcc/testsuite/g++.dg/opt/pr59622-2.C b/gcc/testsuite/g++.dg/opt/pr59622-2.C new file mode 100644 index 00000000000..8096eebca40 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr59622-2.C @@ -0,0 +1,21 @@ +// PR tree-optimization/59622 +// { dg-do compile } +// { dg-options "-O2" } + +namespace +{ + struct A + { + A () {} + virtual A *bar (int) = 0; + A *baz (int x) { return bar (x); } + }; +} + +A *a; + +void +foo () +{ + a->baz (0); +} diff --git a/gcc/testsuite/g++.dg/opt/pr59622-3.C b/gcc/testsuite/g++.dg/opt/pr59622-3.C new file mode 100644 index 00000000000..0af86050c23 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr59622-3.C @@ -0,0 +1,21 @@ +// PR tree-optimization/59622 +// { dg-do compile } +// { dg-options "-O2" } + +struct C { int a; int b; }; + +namespace +{ + struct A + { + virtual C foo (); + C bar () { return foo (); } + }; +} + +C +baz () +{ + A a; + return a.bar (); +} diff --git a/gcc/testsuite/g++.dg/opt/pr59622-4.C b/gcc/testsuite/g++.dg/opt/pr59622-4.C new file mode 100644 index 00000000000..f72af1641c8 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr59622-4.C @@ -0,0 +1,23 @@ +// PR tree-optimization/59622 +// { dg-do compile } +// { dg-options "-O2" } + +struct C { int a; int b; }; + +namespace +{ + struct A + { + A () {} + virtual C bar (int) = 0; + C baz (int x) { return bar (x); } + }; +} + +A *a; + +C +foo () +{ + return a->baz (0); +} diff --git a/gcc/testsuite/g++.dg/opt/pr59622-5.C b/gcc/testsuite/g++.dg/opt/pr59622-5.C new file mode 100644 index 00000000000..bcb2591a64c --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr59622-5.C @@ -0,0 +1,26 @@ +// PR tree-optimization/59622 +// { dg-do compile } +// { dg-options "-O2" } + +namespace +{ + struct A + { + A () {} + virtual A *bar (int); + A *baz (int x) { return bar (x); } + }; + + __attribute__((noreturn)) A *A::bar (int) + { + __builtin_exit (0); + } +} + +A *a; + +void +foo () +{ + a->baz (0); +} diff --git a/gcc/testsuite/g++.dg/pr58950.C b/gcc/testsuite/g++.dg/pr58950.C new file mode 100644 index 00000000000..10a2032440f --- /dev/null +++ b/gcc/testsuite/g++.dg/pr58950.C @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-Wall" } */ + +void f(){ + int i __attribute__((vector_size(2*sizeof(int)))) = { 2, 3 }; + __builtin_shuffle (i, i); /* { dg-warning "value computed is not used" } */ + ++i?1:0; /* { dg-warning "value computed is not used" } */ +} diff --git a/gcc/testsuite/g++.dg/pr59510.C b/gcc/testsuite/g++.dg/pr59510.C new file mode 100644 index 00000000000..dcdf860dcf7 --- /dev/null +++ b/gcc/testsuite/g++.dg/pr59510.C @@ -0,0 +1,82 @@ +// PR debug/59510 +// { dg-do compile } +// { dg-options "-O2 -g --param=large-stack-frame-growth=1" } + +template <typename _Iterator> +struct _Iter_base +{ + typedef _Iterator iterator_type; +}; +template <typename _CharT> +struct basic_ostream; +template <typename _CharT> +struct basic_ostringstream; +template <typename _CharT> +struct ostreambuf_iterator; +typedef basic_ostringstream <char>ostringstream; +template <typename _Iterator> struct _Miter_base : _Iter_base <_Iterator> +{ +}; +template <typename _Iterator> +typename _Miter_base <_Iterator>::iterator_type __miter_base (_Iterator); +template <typename _CharT> +ostreambuf_iterator <_CharT> +__copy_move_a2 (ostreambuf_iterator <_CharT>); +template <typename _II, typename _OI> +_OI copy (_II __first, _II __last, _OI __result) +{ + __copy_move_a2 <false> (__first, __miter_base (__last), __result); +} +struct ios_base { + struct _Words { + int *_M_pword; + long _M_iword; + }; + _Words _M_local_word[8]; +}; +template <typename _CharT> +struct basic_streambuf +{ + typedef _CharT char_type; + int sputn (char_type *, int); +}; +template <typename _CharT> +struct ostreambuf_iterator +{ + typedef basic_streambuf <_CharT> streambuf_type; + typedef basic_ostream <_CharT> ostream_type; + streambuf_type *_M_sbuf; + bool _M_failed; + ostreambuf_iterator (ostream_type __s) : _M_sbuf (__s.rdbuf ()), _M_failed () {} + void _M_put (_CharT * __ws, int __len) + { + if (_M_failed && _M_sbuf->sputn (__ws, __len) != __len) _M_failed = true; + } +}; +template <bool, typename _CharT> +void __copy_move_a2 (_CharT * __first,_CharT * __last,ostreambuf_iterator <_CharT> __result) +{ + int __num = __last - __first; + __result._M_put (__first, __num); +} +template <typename _CharT> +struct basic_ios : ios_base +{ + basic_streambuf <_CharT> *rdbuf (); +}; +template <typename _CharT> +struct basic_ostream : public basic_ios <_CharT> +{ +}; +template <typename _CharT> +struct basic_ostringstream : public basic_ostream <_CharT> +{ +}; +void +test01 () { + char data1[] = "foo"; + char *beg1 = data1; + ostringstream oss1; + ostreambuf_iterator <char> out1 (oss1); + out1 = copy (beg1, beg1, out1); +} diff --git a/gcc/testsuite/g++.dg/torture/pr58252.C b/gcc/testsuite/g++.dg/torture/pr58252.C new file mode 100644 index 00000000000..d38a7a7ea4b --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr58252.C @@ -0,0 +1,142 @@ +// { dg-do compile } +// { dg-options "-fpermissive" } +typedef long unsigned int size_t; + typedef bool _CORBA_Boolean; + typedef unsigned int _CORBA_ULong; + template <class T> class _CORBA_Sequence { + public: typedef _CORBA_Sequence<T> T_seq; + inline T_seq &operator= (const T_seq &s) { + for (unsigned long i=0; + i < pd_len; + i++) { + } + } + _CORBA_ULong pd_len; + }; + template <class T> class _CORBA_Unbounded_Sequence : public _CORBA_Sequence<T> { + inline _CORBA_Unbounded_Sequence_WChar() { // { dg-warning "forbids declaration" } + } + }; + class _CORBA_ObjRef_Var_base { + }; + template <class T, class T_Helper> class _CORBA_ObjRef_Var : public _CORBA_ObjRef_Var_base { + public: typedef T* ptr_t; + typedef T* T_ptr; + inline _CORBA_ObjRef_Var() : pd_objref(T_Helper::_nil()) { + } + inline _CORBA_ObjRef_Var(T_ptr p) : pd_objref(p) { + } + private: T_ptr pd_objref; + }; + class omniLocalIdentity; + class omniObjRef { + }; + class omniServant { + public: virtual ~omniServant(); + virtual void* _ptrToInterface(const char* repoId); + }; + namespace CORBA { + class NVList { + }; + class Object { + }; + struct StructMember { + }; + class StructMemberSeq : public _CORBA_Unbounded_Sequence< StructMember > { + }; + class _objref_IRObject : public virtual ::CORBA::Object, public virtual omniObjRef { + }; + class _impl_IRObject : public virtual omniServant { + }; + class _objref_Container; + typedef _objref_Container* Container_ptr; + class _impl_Contained : public virtual _impl_IRObject { + }; + class _objref_ExceptionDef; + typedef _objref_ExceptionDef* ExceptionDef_ptr; + class ExceptionDef_Helper { + public: typedef ExceptionDef_ptr _ptr_type; + static _ptr_type _nil(); + }; + typedef _CORBA_ObjRef_Var<_objref_ExceptionDef, ExceptionDef_Helper> ExceptionDef_var; + class Container { + public: typedef Container_ptr _ptr_type; + static const char* _PD_repoId; + }; + class _objref_Container : public virtual _objref_IRObject { + ExceptionDef_ptr create_exception(const char* id, const char* name, const char* version, const ::CORBA::StructMemberSeq& members); + }; + class _impl_Container : public virtual _impl_IRObject { + public: virtual ~_impl_Container(); + virtual ExceptionDef_ptr create_exception(const char* id, const char* name, const char* version, const ::CORBA::StructMemberSeq& members) = 0; + }; + class _impl_IDLType : public virtual _impl_IRObject { + }; + class _impl_TypedefDef : public virtual _impl_Contained, public virtual _impl_IDLType { + }; + class _impl_StructDef : public virtual _impl_TypedefDef, public virtual _impl_Container { + }; + } + namespace PortableServer { + class ServantBase : public virtual omniServant { + }; + } + namespace POA_CORBA { + class IRObject : public virtual CORBA::_impl_IRObject, public virtual ::PortableServer::ServantBase { + }; + class Contained : public virtual CORBA::_impl_Contained, public virtual IRObject { + }; + class Container : public virtual CORBA::_impl_Container, public virtual IRObject { + }; + class IDLType : public virtual CORBA::_impl_IDLType, public virtual IRObject { + }; + class TypedefDef : public virtual CORBA::_impl_TypedefDef, public virtual Contained, public virtual IDLType { + }; + class StructDef : public virtual CORBA::_impl_StructDef, public virtual TypedefDef, public virtual Container { + public: virtual ~StructDef(); + }; + } + namespace omni { + class omniOrbPOA; + class giopAddress; + } + class omniCallDescriptor { + public: typedef void (*LocalCallFn)(omniCallDescriptor*, omniServant*); + inline omniCallDescriptor(LocalCallFn lcfn, const char* op_, int op_len_, _CORBA_Boolean oneway, const char*const* user_excns_, int n_user_excns_, _CORBA_Boolean is_upcall_) : pd_localCall(lcfn), pd_op(op_), pd_oplen(op_len_), pd_user_excns(user_excns_), pd_n_user_excns(n_user_excns_), pd_is_oneway(oneway), pd_is_upcall(is_upcall_), pd_contains_values(0), pd_first_address_used(0), pd_current_address(0), pd_objref(0), pd_poa(0), pd_localId(0), pd_deadline_secs(0), pd_deadline_nanosecs(0) { + } + private: LocalCallFn pd_localCall; + const char* pd_op; + size_t pd_oplen; + const char*const* pd_user_excns; + int pd_n_user_excns; + _CORBA_Boolean pd_is_oneway; + _CORBA_Boolean pd_is_upcall; + _CORBA_Boolean pd_contains_values; + const omni::giopAddress* pd_first_address_used; + const omni::giopAddress* pd_current_address; + omniObjRef* pd_objref; + omni::omniOrbPOA* pd_poa; + omniLocalIdentity* pd_localId; + unsigned long pd_deadline_secs; + unsigned long pd_deadline_nanosecs; + }; + class _0RL_cd_7963219a43724a61_f2000000 : public omniCallDescriptor { + public: inline _0RL_cd_7963219a43724a61_f2000000(LocalCallFn lcfn,const char* op_,size_t oplen,_CORBA_Boolean upcall=0): omniCallDescriptor(lcfn, op_, oplen, 0, _user_exns, 0, upcall) { + } + static const char* const _user_exns[]; + const char* arg_0; + const char* arg_1; + const char* arg_2; + const CORBA::StructMemberSeq* arg_3; + CORBA::ExceptionDef_var result; + }; + static void _0RL_lcfn_7963219a43724a61_03000000(omniCallDescriptor* cd, omniServant* svnt) { + _0RL_cd_7963219a43724a61_f2000000* tcd = (_0RL_cd_7963219a43724a61_f2000000*)cd; + CORBA::_impl_Container* impl = (CORBA::_impl_Container*) svnt->_ptrToInterface(CORBA::Container::_PD_repoId); + tcd->result = impl->create_exception(tcd->arg_0, tcd->arg_1, tcd->arg_2, *tcd->arg_3); + } + CORBA::ExceptionDef_ptr CORBA::_objref_Container::create_exception(const char* id, const char* name, const char* version, const ::CORBA::StructMemberSeq& members) { + _0RL_cd_7963219a43724a61_f2000000 _call_desc(_0RL_lcfn_7963219a43724a61_03000000, "create_exception", 17); + } + POA_CORBA::StructDef::~StructDef() { + } diff --git a/gcc/testsuite/g++.dg/torture/pr58585.C b/gcc/testsuite/g++.dg/torture/pr58585.C new file mode 100644 index 00000000000..69fcf04ddc1 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr58585.C @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-options "-fpic" { target fpic } } +struct A +{ + virtual void foo() {} + void bar(); +}; +void A::bar() { foo(); } + +struct B : virtual A +{ + virtual void foo() {} + char c; +}; + +struct C : virtual B +{ + C(); +}; +C::C() { bar(); } diff --git a/gcc/testsuite/g++.dg/torture/pr59226.C b/gcc/testsuite/g++.dg/torture/pr59226.C new file mode 100644 index 00000000000..cb0ebbe35f9 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr59226.C @@ -0,0 +1,27 @@ +// { dg-do compile } +struct A +{ + virtual void foo() {} +}; + +struct B +{ + virtual void foo() {} +}; + +struct C : virtual A {}; + +struct D : virtual A, B +{ + virtual void foo() {} +}; + +struct E : C, D +{ + virtual void foo() {} +}; + +void bar(A* p) +{ + p->foo(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/pr59743.c b/gcc/testsuite/gcc.c-torture/compile/pr59743.c new file mode 100644 index 00000000000..8dadba594e5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr59743.c @@ -0,0 +1,23 @@ +/* PR middle-end/59743 */ + +typedef union { + long all; + struct { + int low; + int high; + } s; +} udwords; +int a, b, c, d; +void __udivmoddi4() { + udwords r; + d = __builtin_clz(0); + r.s.low = 0; + for (; d; --d) { + r.s.high = r.s.high << 1 | r.s.low >> a; + r.s.low = r.s.low << b >> 1; + int s = -r.all; + c = s; + r.all--; + } +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/pr59643.c b/gcc/testsuite/gcc.c-torture/execute/pr59643.c new file mode 100644 index 00000000000..e3e8a6a38fc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pr59643.c @@ -0,0 +1,39 @@ +/* PR tree-optimization/59643 */ + +#define N 32 + +__attribute__((noinline, noclone)) void +foo (double *a, double *b, double *c, double d, double e, int n) +{ + int i; + for (i = 1; i < n - 1; i++) + a[i] = d * (b[i] + c[i] + a[i - 1] + a[i + 1]) + e * a[i]; +} + +double expected[] = { + 0.0, 10.0, 44.0, 110.0, 232.0, 490.0, 1020.0, 2078.0, 4152.0, 8314.0, + 16652.0, 33326.0, 66664.0, 133354.0, 266748.0, 533534.0, 1067064.0, + 2134138.0, 4268300.0, 8536622.0, 17073256.0, 34146538.0, 68293116.0, + 136586270.0, 273172536.0, 546345082.0, 1092690188.0, 2185380398.0, + 4370760808.0, 8741521642.0, 17483043324.0, 6.0 +}; + +int +main () +{ + int i; + double a[N], b[N], c[N]; + if (__DBL_MANT_DIG__ <= 35) + return 0; + for (i = 0; i < N; i++) + { + a[i] = (i & 3) * 2.0; + b[i] = (i & 7) - 4; + c[i] = i & 7; + } + foo (a, b, c, 2.0, 3.0, N); + for (i = 0; i < N; i++) + if (a[i] != expected[i]) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp b/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp index c370ec645e6..61085fd8f1f 100644 --- a/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp +++ b/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp @@ -51,13 +51,15 @@ dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -f dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -O3 -std=c99" " " dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -g -O0 -std=c99" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -std=c99 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -g -fcilkplus" " " -if { [check_effective_target_lto] } { - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -flto -g -fcilkplus" " " +if { [check_libcilkrts_available] } { + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1 " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -std=c99 " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -ftree-vectorize " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -g " " " + if { [check_effective_target_lto] } { + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -flto -g " " " + } } dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -g" " " diff --git a/gcc/testsuite/gcc.dg/delay-slot-1.c b/gcc/testsuite/gcc.dg/delay-slot-1.c index f3bcd8ec756..bfc0273e4ff 100644 --- a/gcc/testsuite/gcc.dg/delay-slot-1.c +++ b/gcc/testsuite/gcc.dg/delay-slot-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-O2" } */ -/* { dg-options "-O2 -mabi=64" { target mips-*-linux-* } } */ +/* { dg-options "-O2 -mabi=64" { target { mips*-*-linux* && mips64 } } } */ struct offset_v1 { int k_uniqueness; diff --git a/gcc/testsuite/gcc.dg/gomp/pr59669-1.c b/gcc/testsuite/gcc.dg/gomp/pr59669-1.c new file mode 100644 index 00000000000..c72156d4bd0 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr59669-1.c @@ -0,0 +1,9 @@ +/* PR middle-end/59669 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +#pragma omp declare simd linear(a) +void +foo (int a) +{ +} diff --git a/gcc/testsuite/gcc.dg/gomp/pr59669-2.c b/gcc/testsuite/gcc.dg/gomp/pr59669-2.c new file mode 100644 index 00000000000..f6aad8998f1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr59669-2.c @@ -0,0 +1,9 @@ +/* PR middle-end/59669 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp" } */ + +#pragma omp declare simd uniform(a) aligned(a:32) +void +bar (int *a) +{ +} diff --git a/gcc/testsuite/gcc.dg/ipa/pr59008.c b/gcc/testsuite/gcc.dg/ipa/pr59008.c new file mode 100644 index 00000000000..b7296724300 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr59008.c @@ -0,0 +1,32 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +typedef int (*funct)(int, int, int); + +extern int f(int, int, int); +extern int g(int, int, int); +extern int h(int, funct, funct); + +static int baz(int x, int y, int z) +{ + return x + y + z; +} + +static int bar(int n, funct f1, funct f2) +{ + return h(n, f1, f2) + f1(0, 1, 2); +} + +static int foo(int n, funct f1, funct f2) +{ + return bar(n, f1, f2) + f2(0, 1, 2); +} + +int main(void) +{ + return foo(0, f, g) +#ifndef ICE2 + + foo(0, baz, g) +#endif + ; +} diff --git a/gcc/testsuite/gcc.dg/ipa/pr59610.c b/gcc/testsuite/gcc.dg/ipa/pr59610.c new file mode 100644 index 00000000000..fc0933441e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/pr59610.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct A { int a; }; +extern void *y; + +__attribute__((optimize (0))) void +foo (void *p, struct A x) +{ + foo (y, x); +} diff --git a/gcc/testsuite/gcc.dg/pr46309.c b/gcc/testsuite/gcc.dg/pr46309.c index ee154ccd2f3..9275015049e 100644 --- a/gcc/testsuite/gcc.dg/pr46309.c +++ b/gcc/testsuite/gcc.dg/pr46309.c @@ -1,5 +1,5 @@ /* PR tree-optimization/46309 */ -/* { dg-do compile } */ +/* { dg-do compile { target { ! { cris*-*-* } } } } */ /* { dg-options "-O2 -fdump-tree-reassoc-details" } */ /* The transformation depends on BRANCH_COST being greater than 1 (see the notes in the PR), so try to force that. */ diff --git a/gcc/testsuite/gcc.dg/pr57773.c b/gcc/testsuite/gcc.dg/pr57773.c new file mode 100644 index 00000000000..1c309506d10 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr57773.c @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c99 -Wpedantic" } */ + +enum e { A }; +struct { enum e b: 2; } s1; +struct { signed char b: 2; } s2; +struct { unsigned char b: 2; } s3; +struct { short b: 2; } s4; +struct { unsigned short b: 2; } s5; +struct { long int b: 2; } s6; +struct { unsigned long int b: 2; } s7; +struct { long long int b: 2; } s8; +struct { unsigned long long int b: 2; } s9; diff --git a/gcc/testsuite/gcc.dg/pr58668.c b/gcc/testsuite/gcc.dg/pr58668.c new file mode 100644 index 00000000000..3e09508dc16 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr58668.c @@ -0,0 +1,25 @@ +/* PR rtl-optimization/58668 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ +/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */ + +void *fn1 (void *); +void *fn2 (void *, const char *); +void fn3 (void *); +void fn4 (void *, int); + +void * +test (void *x) +{ + void *a, *b; + if (!(a = fn1 (x))) + return (void *) 0; + if (!(b = fn2 (a, "w"))) + { + fn3 (a); + return (void *) 0; + } + fn3 (a); + fn4 (b, 1); + return b; +} diff --git a/gcc/testsuite/gcc.dg/pr59350-2.c b/gcc/testsuite/gcc.dg/pr59350-2.c new file mode 100644 index 00000000000..2fea85fcf71 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59350-2.c @@ -0,0 +1,29 @@ +/* PR debug/59350 */ + +/* { dg-do compile } */ +/* { dg-options "-O -g " } */ + +typedef struct +{ + void *v; + int len; + int sign; +} ZVALUE; + +extern int pred (ZVALUE); + +static unsigned long +small_factor (ZVALUE z) +{ + if (z.len > 0) + return 0; + + return pred (z) ? -1 : 0; +} + +unsigned long +zfactor (ZVALUE z) +{ + z.sign = 0; + return small_factor (z); +} diff --git a/gcc/testsuite/gcc.dg/pr59350.c b/gcc/testsuite/gcc.dg/pr59350.c index be186873ac5..fa632454ae1 100644 --- a/gcc/testsuite/gcc.dg/pr59350.c +++ b/gcc/testsuite/gcc.dg/pr59350.c @@ -1,4 +1,4 @@ -/* PR rtl-optimization/59350 */ +/* PR debug/59350 */ /* Testcase by Ryan Mansfield <rmansfield@qnx.com> */ /* { dg-do compile } */ diff --git a/gcc/testsuite/gcc.dg/pr59471.c b/gcc/testsuite/gcc.dg/pr59471.c new file mode 100644 index 00000000000..7f2a7870a0e --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59471.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +typedef unsigned char uint8x4_t +__attribute__ ((__vector_size__ (4))); + +typedef unsigned short uint16x8_t +__attribute__ ((__vector_size__ (16))); + +typedef unsigned int uint32x4_t +__attribute__ ((__vector_size__ (16))); + +void +foo (uint16x8_t *x, uint8x4_t *y) +{ + *y = (uint8x4_t) ((uint32x4_t) (*x))[0]; +} diff --git a/gcc/testsuite/gcc.dg/pr59630.c b/gcc/testsuite/gcc.dg/pr59630.c new file mode 100644 index 00000000000..6a3c72552f5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59630.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-O" } */ + +_Bool foo() +{ + _Bool (*f)(int) = __builtin_abs; /* { dg-warning "" } */ + return f(0); +} diff --git a/gcc/testsuite/gcc.dg/pr59643.c b/gcc/testsuite/gcc.dg/pr59643.c new file mode 100644 index 00000000000..f4df5e5b221 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59643.c @@ -0,0 +1,15 @@ +/* PR tree-optimization/59643 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-tree-pcom-details" } */ + +void +foo (double *a, double *b, double *c, double d, double e, int n) +{ + int i; + for (i = 1; i < n - 1; i++) + a[i] = d * (b[i] + c[i] + a[i - 1] + a[i + 1]) + e * a[i]; +} + +/* { dg-final { scan-tree-dump-times "Before commoning:" 1 "pcom" } } */ +/* { dg-final { scan-tree-dump-times "Unrolling 2 times" 1 "pcom" } } */ +/* { dg-final { cleanup-tree-dump "pcom" } } */ diff --git a/gcc/testsuite/gcc.dg/pr59670.c b/gcc/testsuite/gcc.dg/pr59670.c new file mode 100644 index 00000000000..a68253b4b63 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59670.c @@ -0,0 +1,15 @@ +/* PR middle-end/59670 */ +/* { dg-do compile } */ +/* { dg-options "-O1 -fopenmp-simd" } */ + +int d[1024]; + +int +foo (int j, int b) +{ + int l, c = 0; +#pragma omp simd reduction(+: c) + for (l = 0; l < b; ++l) + c += d[j + l]; + return c; +} diff --git a/gcc/testsuite/gcc.dg/pr59722.c b/gcc/testsuite/gcc.dg/pr59722.c new file mode 100644 index 00000000000..7626fd22e1d --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr59722.c @@ -0,0 +1,36 @@ +/* PR ipa/59722 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fcompare-debug" } */ + +extern void abrt (const char *, int) __attribute__((noreturn)); +void baz (int *, int *); + +static inline int +bar (void) +{ + return 1; +} + +static inline void +foo (int *x, int y (void)) +{ + while (1) + { + int a = 0; + if (*x) + { + baz (x, &a); + while (a && !y ()) + ; + break; + } + abrt ("", 1); + } +} + +void +test (int x) +{ + foo (&x, bar); + foo (&x, bar); +} diff --git a/gcc/testsuite/gcc.dg/torture/pr57748-3.c b/gcc/testsuite/gcc.dg/torture/pr57748-3.c new file mode 100644 index 00000000000..5ddb6099c2c --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr57748-3.c @@ -0,0 +1,40 @@ +/* PR middle-end/57748 */ +/* { dg-do run } */ +/* wrong code in expand_expr_real_1. */ + +#include <stdlib.h> + +extern void abort (void); + +typedef long long V + __attribute__ ((vector_size (2 * sizeof (long long)), may_alias)); + +typedef struct S { V a; V b[0]; } P __attribute__((aligned (1))); + +struct __attribute__((packed)) T { char c; P s; }; + +void __attribute__((noinline, noclone)) +check (P *p) +{ + if (p->b[0][0] != 3 || p->b[0][1] != 4) + abort (); +} + +void __attribute__((noinline, noclone)) +foo (struct T *t) +{ + V a = { 3, 4 }; + t->s.b[0] = a; +} + +int +main () +{ + struct T *t = (struct T *) calloc (128, 1); + + foo (t); + check (&t->s); + + free (t); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr57748-4.c b/gcc/testsuite/gcc.dg/torture/pr57748-4.c new file mode 100644 index 00000000000..455cb3d3278 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr57748-4.c @@ -0,0 +1,40 @@ +/* PR middle-end/57748 */ +/* { dg-do run } */ +/* wrong code in expand_expr_real_1. */ + +#include <stdlib.h> + +extern void abort (void); + +typedef long long V + __attribute__ ((vector_size (2 * sizeof (long long)), may_alias)); + +typedef struct S { V b[1]; } P __attribute__((aligned (1))); + +struct __attribute__((packed)) T { char c; P s; }; + +void __attribute__((noinline, noclone)) +check (P *p) +{ + if (p->b[1][0] != 3 || p->b[1][1] != 4) + abort (); +} + +void __attribute__((noinline, noclone)) +foo (struct T *t) +{ + V a = { 3, 4 }; + t->s.b[1] = a; +} + +int +main () +{ + struct T *t = (struct T *) calloc (128, 1); + + foo (t); + check (&t->s); + + free (t); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr59374-3.c b/gcc/testsuite/gcc.dg/torture/pr59374-3.c new file mode 100644 index 00000000000..ab0014d8f13 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr59374-3.c @@ -0,0 +1,21 @@ +extern void abort (void); + +static struct X { void *a; void *b; } a, b; + +void __attribute__((noinline)) foo (void) +{ + void *tem = a.b; + a.b = (void *)0; + b.b = tem; + b.a = a.a; + a.a = tem; +} + +int main() +{ + a.b = &a; + foo (); + if (b.b != &a) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr59715.c b/gcc/testsuite/gcc.dg/torture/pr59715.c new file mode 100644 index 00000000000..19c09de55d7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr59715.c @@ -0,0 +1,21 @@ +/* { dg-do run } */ + +extern void abort (void); + +int a = 2, b; + +int +main () +{ + int c; + if (!b) + { + b = a; + c = a == 0 ? 1 : 1 % a; + if (c) + b = 0; + } + if (b != 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-28.c b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-28.c index 1a4bf4a4444..59951e2bf81 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/forwprop-28.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/forwprop-28.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* hppa*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -fdump-tree-forwprop1" } */ /* Skip on ARM Cortex-M, where LOGICAL_OP_NON_SHORT_CIRCUIT is set to false, leading to two conditional jumps when evaluating an && condition. Forwprop1 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c index 303b3f32bd9..865ab0b617c 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-32.c @@ -1,7 +1,7 @@ /* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ /* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ int test (int a, int b, int c) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c index bb27daa8c14..6782972365f 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-33.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ +/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-*"} } } */ /* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ int test (int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c index 156e1824222..272455b371d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-34.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ +/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-*"} } } */ /* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ int test (int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c index c486b783dce..8e03ad6b1a5 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-35.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ +/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-*"} } } */ /* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ int test (unsigned int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c index 930dbe289fb..8bd507ce3ac 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/reassoc-36.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-*"} } } */ +/* { dg-do run { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* hppa*-*-*"} } } */ /* { dg-options "-O2 -fno-inline -fdump-tree-reassoc1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ int test (int a, int b, int c) { diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c index efc8a7133c9..4b09c5db09d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-1.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -g -fdump-tree-optimized" } */ /* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c index 3be2310e9b5..8d42dfb31a0 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-4.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -g -fdump-tree-optimized" } */ /* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c index c22a0e04c11..858bed1e640 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-5.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -g -fdump-tree-optimized" } */ /* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c index aa0970dee7f..fecb510c009 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ifcombine-ccmp-6.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -g -fdump-tree-optimized" } */ /* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c index 5a09fa0f49d..cbff587f5dd 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp47.c @@ -3,7 +3,7 @@ /* Skip on S/390 and avr. Lower values in BRANCH_COST lead to two conditional jumps when evaluating an && condition. VRP is not able to optimize this. */ -/* { dg-do compile { target { ! "mips*-*-* arc*-*-* s390*-*-* avr-*-* mn10300-*-*" } } } */ +/* { dg-do compile { target { ! "mips*-*-* arc*-*-* s390*-*-* avr-*-* mn10300-*-* hppa*-*-*" } } } */ /* { dg-options "-O2 -fdump-tree-vrp1 -fdump-tree-dom1 -fdump-tree-vrp2" } */ /* { dg-additional-options "-march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ /* Skip on ARM Cortex-M, where LOGICAL_OP_NON_SHORT_CIRCUIT is set to false, diff --git a/gcc/testsuite/gcc.dg/tree-ssa/vrp87.c b/gcc/testsuite/gcc.dg/tree-ssa/vrp87.c index 9aff0a6c46f..a51d696316d 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/vrp87.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/vrp87.c @@ -1,7 +1,7 @@ -/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-*"} } } */ +/* { dg-do compile { target { ! "m68k*-*-* mmix*-*-* mep*-*-* bfin*-*-* v850*-*-* picochip*-*-* moxie*-*-* cris*-*-* m32c*-*-* fr30*-*-* mcore*-*-* powerpc*-*-* xtensa*-*-* arc*-*-* hppa*-*-* mips*-*-*"} } } */ /* { dg-options "-O2 -fdump-tree-vrp2-details -fdump-tree-cddce2-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target avr-*-* } } */ +/* { dg-additional-options "-mbranch-cost=2" { target mips*-*-* avr-*-* } } */ /* Skip on ARM Cortex-M, where LOGICAL_OP_NON_SHORT_CIRCUIT is set to false, leading to two conditional jumps when evaluating an && condition. VRP is not able to optimize this. */ diff --git a/gcc/testsuite/gcc.dg/vect/pr59519-1.c b/gcc/testsuite/gcc.dg/vect/pr59519-1.c new file mode 100644 index 00000000000..428d4ec32e7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr59519-1.c @@ -0,0 +1,19 @@ +/* PR tree-optimization/59519 */ +/* { dg-do compile } */ +/* { dg-additional-options "-O3" } */ + +int a, b, c, d; + +void +foo (void) +{ + for (; d; d++) + for (b = 0; b < 14; b++) + { + c |= 1; + if (a) + break; + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/pr59519-2.c b/gcc/testsuite/gcc.dg/vect/pr59519-2.c new file mode 100644 index 00000000000..2b109d2557d --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr59519-2.c @@ -0,0 +1,20 @@ +/* PR tree-optimization/59519 */ +/* { dg-do compile } */ +/* { dg-additional-options "-O3" } */ + +struct S { int f0; } d; +int a[8] = { 0 }, b, c, e; + +void +foo (void) +{ + for (; e < 1; e++) + for (b = 0; b < 7; b++) + { + c |= (a[b + 1] != 0); + if (d.f0) + break; + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c index 923a9453c25..93cb9f993c0 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-10.c @@ -1,3 +1,4 @@ +/* { dg-do run } */ /* { dg-require-effective-target vect_simd_clones } */ /* { dg-additional-options "-fopenmp-simd" } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c index 279abd7c682..0fd5890e929 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-12.c @@ -1,3 +1,4 @@ +/* { dg-do run } */ /* { dg-require-effective-target vect_simd_clones } */ /* { dg-additional-options "-fopenmp-simd" } */ /* { dg-additional-options "-mavx" { target avx_runtime } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect.exp b/gcc/testsuite/gcc.dg/vect/vect.exp index b0b7e2237c3..fa11e7e5eea 100644 --- a/gcc/testsuite/gcc.dg/vect/vect.exp +++ b/gcc/testsuite/gcc.dg/vect/vect.exp @@ -41,6 +41,28 @@ if ![check_vect_support_and_set_flags] { # These flags are used for all targets. lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" "-fno-common" +# If the linker used understands -M <mapfile>, pass it to clear hardware +# capabilities set by the Sun assembler. +# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags. +set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcapv2.map" + +if ![check_no_compiler_messages mapfilev2 executable { + int main (void) { return 0; } +} $clearcap_ldflags ] { + # If this doesn't work, fall back to the less capable v1 syntax. + set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map" + + if ![check_no_compiler_messages mapfile executable { + int main (void) { return 0; } + } $clearcap_ldflags ] { + unset clearcap_ldflags + } +} + +if [info exists clearcap_ldflags] { + lappend DEFAULT_VECTCFLAGS $clearcap_ldflags +} + # Initialize `dg'. dg-init diff --git a/gcc/testsuite/gcc.target/aarch64/cmn-neg.c b/gcc/testsuite/gcc.target/aarch64/cmn-neg.c index 05c8bbff5be..ab264e798ef 100644 --- a/gcc/testsuite/gcc.target/aarch64/cmn-neg.c +++ b/gcc/testsuite/gcc.target/aarch64/cmn-neg.c @@ -6,7 +6,7 @@ extern void abort (void); void __attribute__ ((noinline)) foo_s32 (int a, int b) { - if (a < -b) + if (a == -b) abort (); } /* { dg-final { scan-assembler "cmn\tw\[0-9\]" } } */ @@ -14,7 +14,7 @@ foo_s32 (int a, int b) void __attribute__ ((noinline)) foo_s64 (long long a, long long b) { - if (a < -b) + if (a == -b) abort (); } /* { dg-final { scan-assembler "cmn\tx\[0-9\]" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/cmn-neg2.c b/gcc/testsuite/gcc.target/aarch64/cmn-neg2.c new file mode 100644 index 00000000000..ca45a53435f --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/cmn-neg2.c @@ -0,0 +1,34 @@ +/* { dg-do run } */ +/* { dg-options "-O2 --save-temps" } */ + +extern void abort (void); + +/* It's unsafe to use CMN in these comparisons. */ + +void __attribute__ ((noinline)) +foo_s32 (int a, int b) +{ + if (a < -b) + abort (); +} + +void __attribute__ ((noinline)) +foo_s64 (unsigned long long a, unsigned long long b) +{ + if (a > -b) + abort (); +} + + +int +main (void) +{ + int a = 30; + int b = 42; + foo_s32 (a, b); + foo_s64 (a, b); + return 0; +} +/* { dg-final { scan-assembler-not "cmn\t" } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff --git a/gcc/testsuite/gcc.target/arm/neon-nested-apcs.c b/gcc/testsuite/gcc.target/arm/neon-nested-apcs.c new file mode 100644 index 00000000000..cd92d7d33e7 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-nested-apcs.c @@ -0,0 +1,48 @@ +/* { dg-do run } */ +/* { dg-require-effective-target arm_neon_hw } */ +/* { dg-options "-fno-omit-frame-pointer -mapcs-frame -O" } +/* { dg-add-options arm_neon } */ + +extern void abort (void); + +float data; + +void __attribute__((noinline, noclone)) bar (float f) +{ + data = f; +} + +float __attribute__((noinline, noclone)) foo (float f) +{ + int error_reported = 0; + + void __attribute__((noinline, noclone)) + nested (int a, int b, int c, int d, float f0, float f1, float f2, float f3) + { + float e; + + if (f3 > f2) + e = f3; + else + e = f2; + + if (f0 - f1 > e) + { + error_reported = a + b + c + d; + bar (f0); + bar (e); + } + } + + nested (1, 2, 3, 4, 1.0, 1.0, 3.5, 4.2); + return f + (float)error_reported; +} + +#define PI 3.1415927f + +int main (void) +{ + if (foo (PI) != PI) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c new file mode 100644 index 00000000000..5f4c927b6e0 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c @@ -0,0 +1,25 @@ +/* Test the `vst1Q_laneu64' ARM Neon intrinsic. */ + +/* Detect ICE in the case of unaligned memory address. */ + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-add-options arm_neon } */ + +#include "arm_neon.h" + +unsigned char dummy_store[1000]; + +void +foo (char* addr) +{ + uint8x16_t vdata = vld1q_u8 (addr); + vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0); +} + +uint64_t +bar (uint64x2_t vdata) +{ + vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0); + return vgetq_lane_u64 (vdata, 0); +} diff --git a/gcc/testsuite/gcc.target/i386/asm-1.c b/gcc/testsuite/gcc.target/i386/asm-1.c index 999c5767966..cd60a09bd7f 100644 --- a/gcc/testsuite/gcc.target/i386/asm-1.c +++ b/gcc/testsuite/gcc.target/i386/asm-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target ia32 } */ -/* { dg-options "-m32" } */ +/* { dg-options "" } */ register unsigned int EAX asm ("r14"); /* { dg-error "register name" } */ diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vcmppd-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vcmppd-2.c index 333a83576b2..add23d07a19 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vcmppd-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vcmppd-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vcmpps-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vcmpps-2.c index 5ffd470dbe2..15c314e2d60 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vcmpps-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vcmpps-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmpd-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmpd-2.c index 263fecd5f71..d4ddd32145b 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmpd-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmpd-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=gnu99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmps-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmps-2.c index 9fca53705de..6c2539d0f4e 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmps-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmps-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=gnu99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmsd-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmsd-2.c index ebd288ed268..1344c7fd1bc 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmsd-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmsd-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-mavx512f -O2" } */ +/* { dg-options "-mavx512f -O2 -std=gnu99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #include "avx512f-check.h" #include "avx512f-helper.h" diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmss-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmss-2.c index 50830b8bd36..25e165ff51d 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmss-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vfixupimmss-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-mavx512f -O2" } */ +/* { dg-options "-mavx512f -O2 -std=gnu99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #include "avx512f-check.h" #include "avx512f-helper.h" diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantpd-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantpd-2.c index 473466b1e53..0209021b8b1 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantpd-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantpd-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F @@ -72,6 +73,7 @@ get_norm_mant (double source, int signctrl, int interv) } #endif +void static CALC (double *r, double *s, int interv, int signctrl) { int i; diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantps-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantps-2.c index b8ea24d891b..25e41d18217 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantps-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantps-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-O2 -mavx512f" } */ +/* { dg-options "-O2 -mavx512f -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #define AVX512F @@ -73,6 +74,7 @@ get_norm_mant (float source, int signctrl, int interv) } #endif +void static CALC (float *r, float *s, int interv, int signctrl) { int i; diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantsd-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantsd-2.c index 50d98a45df4..563d3cc221c 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantsd-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantsd-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-mavx512f -O2" } */ +/* { dg-options "-mavx512f -O2 -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #include "avx512f-check.h" #include "avx512f-helper.h" diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantss-2.c b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantss-2.c index 291c0df77e7..3ffab4ee155 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vgetmantss-2.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vgetmantss-2.c @@ -1,6 +1,7 @@ /* { dg-do run } */ -/* { dg-options "-mavx512f -O2" } */ +/* { dg-options "-mavx512f -O2 -std=c99" } */ /* { dg-require-effective-target avx512f } */ +/* { dg-require-effective-target c99_runtime } */ #include "avx512f-check.h" #include "avx512f-helper.h" diff --git a/gcc/testsuite/gcc.target/i386/avx512f-vmovdqu32-1.c b/gcc/testsuite/gcc.target/i386/avx512f-vmovdqu32-1.c index b8af781834e..79dbf9dd37a 100644 --- a/gcc/testsuite/gcc.target/i386/avx512f-vmovdqu32-1.c +++ b/gcc/testsuite/gcc.target/i386/avx512f-vmovdqu32-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mavx512f -O2" } */ -/* { dg-final { scan-assembler-times "vmovdqu32\[ \\t\]+\[^\n\]*\\)\[^\n\]*%zmm\[0-9\]\[^\{\]" 1 } } */ +/* { dg-final { scan-assembler-times "vmovdqu\[36\]\[24\]\[ \\t\]+\[^\n\]*\\)\[^\n\]*%zmm\[0-9\]\[^\{\]" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu32\[ \\t\]+\[^\n\]*\\)\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\[^\{\]" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu32\[ \\t\]+\[^\n\]*\\)\[^\n\]*%zmm\[0-9\]\{%k\[1-7\]\}\{z\}" 1 } } */ /* { dg-final { scan-assembler-times "vmovdqu32\[ \\t\]+\[^\n\]*%zmm\[0-9\]\[^\n\]*\\)\[^\{\]" 1 } } */ diff --git a/gcc/testsuite/gcc.target/i386/incoming-5.c b/gcc/testsuite/gcc.target/i386/incoming-5.c index 9bbecdb95e1..f68eefcb909 100644 --- a/gcc/testsuite/gcc.target/i386/incoming-5.c +++ b/gcc/testsuite/gcc.target/i386/incoming-5.c @@ -1,6 +1,6 @@ /* PR middle-end/37009 */ /* { dg-do compile { target { { ! *-*-darwin* } && ia32 } } } */ -/* { dg-options "-m32 -mincoming-stack-boundary=2 -mpreferred-stack-boundary=2" } */ +/* { dg-options "-mincoming-stack-boundary=2 -mpreferred-stack-boundary=2" } */ extern void bar (double *); diff --git a/gcc/testsuite/gcc.target/i386/intrinsics_4.c b/gcc/testsuite/gcc.target/i386/intrinsics_4.c index 4e124c90ef8..e7c074b31cb 100644 --- a/gcc/testsuite/gcc.target/i386/intrinsics_4.c +++ b/gcc/testsuite/gcc.target/i386/intrinsics_4.c @@ -12,3 +12,10 @@ foo (void) { a[0] = _mm256_and_ps (b[0], c[0]); } + +/* Try again with a combination of target and optimization attributes. */ +void __attribute__((target ("avx"), optimize(3))) +bar (void) +{ + a[0] = _mm256_and_ps (b[0], c[0]); +} diff --git a/gcc/testsuite/gcc.target/i386/pr47735.c b/gcc/testsuite/gcc.target/i386/pr47735.c new file mode 100644 index 00000000000..0d44df4d5c9 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr47735.c @@ -0,0 +1,16 @@ +/* PR middle-end/47735 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -fomit-frame-pointer" } */ + +unsigned +mulh (unsigned a, unsigned b) +{ + unsigned long long l __attribute__ ((aligned (32))) + = ((unsigned long long) a * (unsigned long long) b) >> 32; + return l; +} + +/* No need to dynamically realign the stack here. */ +/* { dg-final { scan-assembler-not "and\[^\n\r]*%\[re\]sp" } } */ +/* Nor use a frame pointer. */ +/* { dg-final { scan-assembler-not "%\[re\]bp" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr53623.c b/gcc/testsuite/gcc.target/i386/pr53623.c new file mode 100644 index 00000000000..35c578bd618 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr53623.c @@ -0,0 +1,25 @@ +/* { dg-do compile { target {! ia32 } } } */ +/* { dg-options "-O2 -fdump-rtl-ree" } */ + + +#include <stdint.h> + +typedef (*inst_t)(int64_t rdi, int64_t rsi, int64_t rdx); + +int16_t code[256]; +inst_t dispatch[256]; + +void an_inst(int64_t rdi, int64_t rsi, int64_t rdx) { + rdx = code[rdx]; + uint8_t inst = (uint8_t) rdx; + rdx >>= 8; + dispatch[inst](rdi, rsi, rdx); +} + +int main(void) { + return 0; +} + +/* { dg-final { scan-rtl-dump "copy needed" "ree" } } */ +/* { dg-final { cleanup-rtl-dump "ree" } } */ + diff --git a/gcc/testsuite/gcc.target/i386/pr55433.c b/gcc/testsuite/gcc.target/i386/pr55433.c index b79b16dabdf..6a2602ad424 100644 --- a/gcc/testsuite/gcc.target/i386/pr55433.c +++ b/gcc/testsuite/gcc.target/i386/pr55433.c @@ -1,5 +1,5 @@ -/* { dg-do compile {target { *-*-darwin* } } } */ -/* { dg-options "-O1 -m32" } */ +/* { dg-do compile { target { *-*-darwin* } } } */ +/* { dg-options "-O1" } */ typedef unsigned long long tick_t; extern int foo(void); diff --git a/gcc/testsuite/gcc.target/i386/pr56246.c b/gcc/testsuite/gcc.target/i386/pr56246.c index 64a2527a549..b4d527396d6 100644 --- a/gcc/testsuite/gcc.target/i386/pr56246.c +++ b/gcc/testsuite/gcc.target/i386/pr56246.c @@ -1,5 +1,5 @@ /* PR target/56225 */ -/* { dg-do compile { target { ia32 } } } */ +/* { dg-do compile { target { ia32 && fpic } } } */ /* { dg-options "-O2 -fno-omit-frame-pointer -march=i686 -fpic" } */ void NoBarrier_AtomicExchange (long long *ptr) { diff --git a/gcc/testsuite/gcc.target/i386/pr57848.c b/gcc/testsuite/gcc.target/i386/pr57848.c index d26b84c1b48..c686b372824 100644 --- a/gcc/testsuite/gcc.target/i386/pr57848.c +++ b/gcc/testsuite/gcc.target/i386/pr57848.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -m32" } */ +/* { dg-options "-O1" } */ extern unsigned int __builtin_ia32_crc32si (unsigned int, unsigned int); #pragma GCC target("sse4.2") diff --git a/gcc/testsuite/gcc.target/i386/pr59099.c b/gcc/testsuite/gcc.target/i386/pr59099.c index 7dc12ff3f7c..cf4a8da7db1 100644 --- a/gcc/testsuite/gcc.target/i386/pr59099.c +++ b/gcc/testsuite/gcc.target/i386/pr59099.c @@ -1,5 +1,6 @@ /* { dg-do run } */ -/* { dg-options "-O2 -fPIC -m32" } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-O2 -fPIC" } */ void (*pfn)(void); diff --git a/gcc/testsuite/gcc.target/i386/pr59390.c b/gcc/testsuite/gcc.target/i386/pr59390.c index 49ce02d1a21..7dc925ae9fb 100644 --- a/gcc/testsuite/gcc.target/i386/pr59390.c +++ b/gcc/testsuite/gcc.target/i386/pr59390.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-std=c99 -O3" } */ -#include "math.h" +extern double fma (double, double, double); void fun() __attribute__((target("fma"))); void diff --git a/gcc/testsuite/gcc.target/i386/pr59390_1.c b/gcc/testsuite/gcc.target/i386/pr59390_1.c index 2bd32a4ebdb..632eb6f9a4f 100644 --- a/gcc/testsuite/gcc.target/i386/pr59390_1.c +++ b/gcc/testsuite/gcc.target/i386/pr59390_1.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-std=c99 -O3" } */ -#include "math.h" +extern double fma (double, double, double); void fun() __attribute__((target("fma"))); __attribute__((target("fma"))) diff --git a/gcc/testsuite/gcc.target/i386/pr59390_2.c b/gcc/testsuite/gcc.target/i386/pr59390_2.c index 55a181a8ad4..6142a085eed 100644 --- a/gcc/testsuite/gcc.target/i386/pr59390_2.c +++ b/gcc/testsuite/gcc.target/i386/pr59390_2.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-std=c99 -O3 -mfma" } */ -#include "math.h" +extern double fma (double, double, double); void fun() __attribute__((target("fma"))); void diff --git a/gcc/testsuite/gcc.target/i386/pr59501-1.c b/gcc/testsuite/gcc.target/i386/pr59501-1.c index 6a104eef1ad..18db93a9be4 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-1.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-1.c @@ -1,6 +1,7 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -mno-accumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #define CHECK_H "avx-check.h" #define TEST avx_test diff --git a/gcc/testsuite/gcc.target/i386/pr59501-2.c b/gcc/testsuite/gcc.target/i386/pr59501-2.c index 8ce177deb8e..1d53d2ead6a 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-2.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-2.c @@ -1,5 +1,6 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -maccumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #include "pr59501-1.c" diff --git a/gcc/testsuite/gcc.target/i386/pr59501-3.c b/gcc/testsuite/gcc.target/i386/pr59501-3.c index 0bf5ef6139a..f27e9b3bb25 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-3.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-3.c @@ -1,6 +1,7 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -mno-accumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #define CHECK_H "avx-check.h" #define TEST avx_test diff --git a/gcc/testsuite/gcc.target/i386/pr59501-4.c b/gcc/testsuite/gcc.target/i386/pr59501-4.c index 43a5ad2428a..57da1078034 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-4.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-4.c @@ -1,5 +1,6 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -maccumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #include "pr59501-3.c" diff --git a/gcc/testsuite/gcc.target/i386/pr59501-5.c b/gcc/testsuite/gcc.target/i386/pr59501-5.c index f2feca8ec4f..2ec9f0cb579 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-5.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-5.c @@ -1,6 +1,7 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -mno-accumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #define CHECK_H "avx-check.h" #define TEST avx_test diff --git a/gcc/testsuite/gcc.target/i386/pr59501-6.c b/gcc/testsuite/gcc.target/i386/pr59501-6.c index d0ac2425b90..8d166cef2d7 100644 --- a/gcc/testsuite/gcc.target/i386/pr59501-6.c +++ b/gcc/testsuite/gcc.target/i386/pr59501-6.c @@ -1,5 +1,6 @@ /* PR target/59501 */ /* { dg-do run } */ /* { dg-options "-O2 -mavx -maccumulate-outgoing-args" } */ +/* { dg-require-effective-target avx } */ #include "pr59501-5.c" diff --git a/gcc/testsuite/gcc.target/i386/pr59644.c b/gcc/testsuite/gcc.target/i386/pr59644.c new file mode 100644 index 00000000000..96006b3e338 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr59644.c @@ -0,0 +1,42 @@ +/* PR target/59644 */ +/* { dg-do run { target lp64 } } */ +/* { dg-options "-O2 -ffreestanding -mno-sse -mpreferred-stack-boundary=3 -maccumulate-outgoing-args -mno-red-zone" } */ + +/* This test uses __builtin_trap () instead of e.g. abort, + because due to -mpreferred-stack-boundary=3 it should not call + any library function from within main (). */ + +#include <stdarg.h> + +__attribute__((noinline, noclone)) +int +bar (int x, int y, int z, int w, const char *fmt, va_list ap) +{ + if (x != 1 || y != 2 || z != 3 || w != 4) + __builtin_trap (); + if (fmt[0] != 'f' || fmt[1] != 'o' || fmt[2] != 'o' || fmt[3]) + __builtin_trap (); + if (va_arg (ap, int) != 5 || va_arg (ap, int) != 6 + || va_arg (ap, long long) != 7LL) + __builtin_trap (); + return 9; +} + +__attribute__((noinline, noclone, optimize ("Os"))) +int +foo (const char *fmt, ...) +{ + va_list ap; + va_start (ap, fmt); + int r = bar (1, 2, 3, 4, fmt, ap); + va_end (ap); + return r; +} + +int +main () +{ + if (foo ("foo", 5, 6, 7LL) != 9) + __builtin_trap (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/mips/pr59137.c b/gcc/testsuite/gcc.target/mips/pr59137.c new file mode 100644 index 00000000000..89865065680 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/pr59137.c @@ -0,0 +1,34 @@ +/* { dg-do run } */ +/* { dg-options "-mno-plt" } */ + +extern void abort (void); + +struct lispstruct +{ + int e; + int t; +}; + +struct lispstruct Cnil_body; +struct lispstruct Ct_body; +int nvalues; + +struct lispstruct * __attribute__ ((noinline)) +fLlistp (struct lispstruct *x0) +{ + if (x0 == &Cnil_body + || (((unsigned long) x0 >= 0x80000000) ? 0 + : (!x0->e ? (x0 != &Cnil_body) : x0->t))) + x0 = &Ct_body; + else + x0 = &Cnil_body; + nvalues = 1; + return x0; +} + +int main () +{ + if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-3.c b/gcc/testsuite/gcc.target/mips/umips-branch-3.c new file mode 100644 index 00000000000..8717362e044 --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-3.c @@ -0,0 +1,10 @@ +/* { dg-options "(-mmicromips)" } */ +/* { dg-skip-if "code quality test" { *-*-* } { "-O0" } { "" } } */ + +void MICROMIPS +foo (void) +{ + return; +} + +/* { dg-final { scan-assembler "\tjrc\t\\\$31\n" } } */ diff --git a/gcc/testsuite/gcc.target/mips/umips-branch-4.c b/gcc/testsuite/gcc.target/mips/umips-branch-4.c new file mode 100644 index 00000000000..b346d11723f --- /dev/null +++ b/gcc/testsuite/gcc.target/mips/umips-branch-4.c @@ -0,0 +1,12 @@ +/* { dg-options "(-mmicromips)" } */ + +void foo (void); + +int MICROMIPS +a (void) +{ + foo (); + return 0; +} + +/* { dg-final { scan-assembler "\tjals\tfoo\n\tnop" } } */ diff --git a/gcc/testsuite/gcc.target/sh/cmpstrn.c b/gcc/testsuite/gcc.target/sh/cmpstrn.c index bc72b2c51d2..3a1d0d1519f 100644 --- a/gcc/testsuite/gcc.target/sh/cmpstrn.c +++ b/gcc/testsuite/gcc.target/sh/cmpstrn.c @@ -6,16 +6,23 @@ /* { dg-final { scan-assembler-not "jmp" } } */ /* { dg-final { scan-assembler-times "cmp/str" 1 } } */ -/* Test that the cmp/str loop is optimized out. */ -test01(const char *s1, const char *s2, int n) +/* Test that cmp/str is not used for small lengths. */ +test01(const char *s1) { return __builtin_strncmp (s1, "abcde", 3); } /* Test that the cmp/str loop is used. */ -test02(const char *s1, const char *s2, int n) +test02(const char *s1) { return __builtin_strncmp (s1, "abcdefghi", 8); } +/* Test that no call is generated */ +test03(const char *s1, int n) +{ + return __builtin_strncmp (s1, "abcde", n); +} + + diff --git a/gcc/testsuite/gfortran.dg/alloc_comp_basics_6.f90 b/gcc/testsuite/gfortran.dg/alloc_comp_basics_6.f90 new file mode 100644 index 00000000000..3ed221db24f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/alloc_comp_basics_6.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! +! PR 58026: Bad error recovery for allocatable component of undeclared type +! +! Contributed by Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch> + + type sysmtx_t + type(ext_complex_t), allocatable :: S(:) ! { dg-error "has not been previously defined" } + end type + +end diff --git a/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90 b/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90 new file mode 100644 index 00000000000..d3e751c3dc5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bind_c_procs_2.f90 @@ -0,0 +1,22 @@ +! { dg-do compile } +! +! PR 59023: [4.9 regression] ICE in gfc_search_interface with BIND(C) +! +! Contributed by Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + type t + integer hidden + end type + +contains + + subroutine bar + type(t) :: toto + interface + integer function helper() bind(c) + end function + end interface + toto = t(helper()) + end subroutine + +end diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_10_main.f03 b/gcc/testsuite/gfortran.dg/binding_label_tests_10_main.f03 index 2a4a53ba80d..5216fbedf6a 100644 --- a/gcc/testsuite/gfortran.dg/binding_label_tests_10_main.f03 +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_10_main.f03 @@ -11,3 +11,4 @@ program main use binding_label_tests_10 ! { dg-error "Variable one from module binding_label_tests_10 with binding label c_one at .1. uses the same global identifier as entity at .2. from module binding_label_tests_10_main" } use binding_label_tests_10_main end program main +! { dg-final { cleanup-modules "binding_label_tests_10" } } diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_26a.f90 b/gcc/testsuite/gfortran.dg/binding_label_tests_26a.f90 new file mode 100644 index 00000000000..32cf07ae7c4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_26a.f90 @@ -0,0 +1,20 @@ +! { dg-do compile } +! +! PR 58182: [4.9 Regression] ICE with global binding name used as a FUNCTION +! +! Contributed by Andrew Bensons <abensonca@gmail.com> +! +! This file must be compiled BEFORE binding_label_tests_26b.f90, which it +! should be because dejagnu will sort the files. + +module fg +contains + function fffi(f) + interface + function f() bind(c) + end function + end interface + end function +end module + +! { dg-final { keep-modules "" } } diff --git a/gcc/testsuite/gfortran.dg/binding_label_tests_26b.f90 b/gcc/testsuite/gfortran.dg/binding_label_tests_26b.f90 new file mode 100644 index 00000000000..ad8426bc2c6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/binding_label_tests_26b.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +! +! PR 58182: [4.9 Regression] ICE with global binding name used as a FUNCTION +! +! Contributed by Andrew Bensons <abensonca@gmail.com> +! +! This file must be compiled AFTER binding_label_tests_26a.f90, which it +! should be because dejagnu will sort the files. + +module f ! { dg-error "uses the same global identifier" } + use fg ! { dg-error "uses the same global identifier" } +end module + +! { dg-final { cleanup-modules "fg f" } } diff --git a/gcc/testsuite/gfortran.dg/class_allocate_16.f90 b/gcc/testsuite/gfortran.dg/class_allocate_16.f90 new file mode 100644 index 00000000000..28776084d86 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_allocate_16.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR 59589: [4.9 Regression] [OOP] Memory leak when deallocating polymorphic +! +! Contributed by Rich Townsend <townsend@astro.wisc.edu> + + implicit none + + type :: foo + real, allocatable :: x(:) + end type + + type :: bar + type(foo) :: f + end type + + class(bar), allocatable :: b + + allocate(bar::b) + allocate(b%f%x(1000000)) + b%f%x = 1. + deallocate(b) + +end + +! { dg-final { scan-tree-dump-times "__builtin_free" 4 "original" } } +! { dg-final { cleanup-tree-dump "original" } } diff --git a/gcc/testsuite/gfortran.dg/inquire_10.f90 b/gcc/testsuite/gfortran.dg/inquire_10.f90 index 090653ecba5..bc7d6e36b38 100644 --- a/gcc/testsuite/gfortran.dg/inquire_10.f90 +++ b/gcc/testsuite/gfortran.dg/inquire_10.f90 @@ -10,6 +10,8 @@ inquire(file=trim(cwd) // '/cseq',number=unit) if (unit /= 23) call abort + close(unit=23, status = 'delete') + inquire(file='foo/../cseq2',number=unit) if (unit >= 0) call abort inquire(file='cseq2',number=unit) diff --git a/gcc/testsuite/gfortran.dg/inquire_15.f90 b/gcc/testsuite/gfortran.dg/inquire_15.f90 index e2aaf9ee17d..ae94270ca8f 100644 --- a/gcc/testsuite/gfortran.dg/inquire_15.f90 +++ b/gcc/testsuite/gfortran.dg/inquire_15.f90 @@ -22,6 +22,7 @@ open(99,access="sequential") inquire(99, stream=str) !print *, "str=",str if (str /= "NO") goto 10 +close(99, status="delete") stop 10 close(99, status="delete") call abort diff --git a/gcc/testsuite/gfortran.dg/lto/lto.exp b/gcc/testsuite/gfortran.dg/lto/lto.exp index b848f9fdf3b..3e329792eff 100644 --- a/gcc/testsuite/gfortran.dg/lto/lto.exp +++ b/gcc/testsuite/gfortran.dg/lto/lto.exp @@ -34,17 +34,17 @@ load_lib gfortran-dg.exp # Load the language-independent compabibility support procedures. load_lib lto.exp +# If LTO has not been enabled, bail. +if { ![check_effective_target_lto] } { + return +} + lto_init no-mathlib # Define an identifier for use with this suite to avoid name conflicts # with other lto tests running at the same time. set sid "f_lto" -# If LTO has not been enabled, bail. -if { ![check_effective_target_lto] } { - return -} - # Main loop. foreach src [lsort [glob -nocomplain $srcdir/$subdir/*_0.\[fF\]{,90,95,03,08} ]] { # If we're only testing specific files and this isn't one of them, skip it. diff --git a/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90 b/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90 index 6446436c885..bbcf46b72a6 100644 --- a/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90 +++ b/gcc/testsuite/gfortran.dg/open_negative_unit_1.f90 @@ -6,6 +6,7 @@ program nutest implicit none + logical l integer id, ios open(newunit=id, file="foo.txt", iostat=ios) @@ -16,6 +17,14 @@ program nutest close(id, status="delete") + open(unit=10, file="foo.txt", status="old", iostat=ios) + if (ios /= 0) call abort + + close(10, status="delete") + open(-10, file="foo.txt", iostat=ios) if (ios == 0) call abort + + inquire(file="foo.txt", exist=l) + if (l) call abort end program nutest diff --git a/gcc/testsuite/gfortran.dg/pr16597.f90 b/gcc/testsuite/gfortran.dg/pr16597.f90 index c29147411a8..fc191efef7c 100644 --- a/gcc/testsuite/gfortran.dg/pr16597.f90 +++ b/gcc/testsuite/gfortran.dg/pr16597.f90 @@ -19,7 +19,7 @@ open (UNIT=iunit,FORM='unformatted',ACCESS='direct',RECL=strlen) write (iunit, rec=1) 'ABCD' read (iunit, rec=1) string - close (iunit) + close (iunit, status = 'delete') if (string.ne.'ABCD') call abort open (UNIT=iunit,FORM='unformatted',ACCESS='direct',STATUS='scratch',RECL=strlen) diff --git a/gcc/testsuite/gfortran.dg/pr59700.f90 b/gcc/testsuite/gfortran.dg/pr59700.f90 new file mode 100644 index 00000000000..579d8a48c9a --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr59700.f90 @@ -0,0 +1,40 @@ +! { dg-do run } +! PR59700 Test case by Steve Kargl +program foo + + implicit none + + character(len=80) msg + integer, parameter :: fd = 10 + integer i1, i2, i3, i4 + real x1, x2, x3, x4 + complex c1, c2 + logical a + + open(unit=fd, status='scratch') + write(fd, '(A)') '1 2 3.4 q' + + rewind(fd) + msg = 'ok' + read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4 +10 if (msg /= 'Bad integer for item 3 in list input') call abort + rewind(fd) + msg = 'ok' + read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4 +20 if (msg /= 'Bad real number in item 4 of list input') call abort + rewind(fd) + msg = 'ok' + read(fd, *, err=30, iomsg=msg) i1, x2, x1, a +30 if (msg /= 'Bad logical value while reading item 4') call abort + rewind(fd) + read(fd, *, err=31, iomsg=msg) i1, x2, a, x1 +31 if (msg /= 'Bad repeat count in item 3 of list input') call abort + close(fd) + open(unit=fd, status='scratch') + write(fd, '(A)') '(1, 2) (3.4, q)' + rewind(fd) + msg = 'ok' + read(fd, *, err=40, iomsg=msg) c1, c2 +40 if (msg /= 'Bad floating point number for item 2') call abort + close(fd) +end program foo diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 new file mode 100644 index 00000000000..00ae9c73263 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! +! PR 59547: [OOP] Problem with using tbp specification function in multiple class procedures +! +! Contributed by <bugs@miller-mohr.de> + +module classes + + implicit none + + type :: base_class + contains + procedure, nopass :: get_num + procedure :: get_array, get_array2 + end type + +contains + + pure integer function get_num() + get_num = 2 + end function + + function get_array( this ) result(array) + class(base_class), intent(in) :: this + integer, dimension( this%get_num() ) :: array + end function + + function get_array2( this ) result(array) + class(base_class), intent(in) :: this + integer, dimension( this%get_num(), this%get_num() ) :: array + end function + +end module + +! { dg-final { cleanup-modules "classes" } } diff --git a/gcc/testsuite/gfortran.dg/use_only_3.f90 b/gcc/testsuite/gfortran.dg/use_only_3.f90 index b264506d4c3..ebb39289fc4 100644 --- a/gcc/testsuite/gfortran.dg/use_only_3.f90 +++ b/gcc/testsuite/gfortran.dg/use_only_3.f90 @@ -32,3 +32,4 @@ subroutine dforceb(c0, i, betae, ipol, bec0, ctabin, gqq, gqqm, qmat, dq2, df) & dq2, gmes end subroutine dforceb +! { dg-final { cleanup-modules "cell_base constants control_flags cvan electrons_base electrons_nose gvecs gvecw ions_base kinds parameters" } } diff --git a/gcc/testsuite/gnat.dg/loop_optimization17.adb b/gcc/testsuite/gnat.dg/loop_optimization17.adb new file mode 100644 index 00000000000..2178b65bf1f --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization17.adb @@ -0,0 +1,22 @@ +-- { dg-do run } +-- { dg-options "-O" } + +with Loop_Optimization17_Pkg; use Loop_Optimization17_Pkg; + +procedure Loop_Optimization17 is + + Data : Arr; + +begin + + Data := (others => (I => 0, + V1 => (others => 0.0), + V2 => (others => 0.0), + S => 0.0)); + + for I in Index_T'Range loop + Object (I).V1 := F (Data (I).V1); + Object (I).V2 := F (Data (I).V2); + end loop; + +end; diff --git a/gcc/testsuite/gnat.dg/loop_optimization17_pkg.adb b/gcc/testsuite/gnat.dg/loop_optimization17_pkg.adb new file mode 100644 index 00000000000..20815af4775 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization17_pkg.adb @@ -0,0 +1,5 @@ +package body Loop_Optimization17_Pkg is + + function F (V : Vector) return Vector is begin return V; end; + +end Loop_Optimization17_Pkg; diff --git a/gcc/testsuite/gnat.dg/loop_optimization17_pkg.ads b/gcc/testsuite/gnat.dg/loop_optimization17_pkg.ads new file mode 100644 index 00000000000..5b650dfa886 --- /dev/null +++ b/gcc/testsuite/gnat.dg/loop_optimization17_pkg.ads @@ -0,0 +1,29 @@ +package Loop_Optimization17_Pkg is + + type vector is array (1..3) of Long_Float; + + type Rec is + record + I : Integer; + V1, V2 : Vector; + S : Long_Float; + end record; + + for Rec use + record + I at 0 range 0 .. 31; + V1 at 4 range 0 .. 191; + V2 at 28 range 0 .. 191; + S at 52 range 0 .. 63; + end record; + for Rec'Alignment use 4; + for Rec'Size use 480; + + type Index_T is range 1 .. 5; + type Arr is array (Index_T) of Rec; + + Object : Arr; + + function F (V : Vector) return Vector; + +end Loop_Optimization17_Pkg; diff --git a/gcc/testsuite/gnat.dg/weak2.adb b/gcc/testsuite/gnat.dg/weak2.adb new file mode 100644 index 00000000000..9e704b50c0d --- /dev/null +++ b/gcc/testsuite/gnat.dg/weak2.adb @@ -0,0 +1,10 @@ +-- { dg-do compile } + +package body Weak2 is + + function F return Integer is + begin + return Var; + end; + +end Weak2; diff --git a/gcc/testsuite/gnat.dg/weak2.ads b/gcc/testsuite/gnat.dg/weak2.ads new file mode 100644 index 00000000000..0a0011a6eca --- /dev/null +++ b/gcc/testsuite/gnat.dg/weak2.ads @@ -0,0 +1,9 @@ +package Weak2 is + + Var : Integer; + pragma Import (Ada, Var, "var_name"); + pragma Weak_External (Var); + + function F return Integer; + +end Weak2; diff --git a/gcc/testsuite/go.test/go-test.exp b/gcc/testsuite/go.test/go-test.exp index 0f95edc182d..f1eed08bd3e 100644 --- a/gcc/testsuite/go.test/go-test.exp +++ b/gcc/testsuite/go.test/go-test.exp @@ -400,17 +400,16 @@ proc go-gc-tests { } { } if { ( [file tail $test] == "select2.go" \ - || [file tail $test] == "stack.go" ) \ + || [file tail $test] == "stack.go" \ + || [file tail $test] == "peano.go" ) \ && ! [check_effective_target_split_stack] } { - # chan/select2.go fails on targets without split stack, - # because they allocate a large stack segment that blows - # out the memory calculations. + # These tests fails on targets without split stack. untested $name continue } - if { [file tail $test] == "rotate.go" } { - # This test produces a temporary file that takes too long + if [string match "*go.test/test/rotate\[0123\].go" $test] { + # These tests produces a temporary file that takes too long # to compile--5 minutes on my laptop without optimization. # When compiling without optimization it tests nothing # useful, since the point of the test is to see whether @@ -1144,6 +1143,10 @@ proc go-gc-tests { } { || $test_line == "// \$G \$D/pkg.go && pack grcS pkg.a pkg.\$A 2> /dev/null && rm pkg.\$A && \$G -I. -u \$D/main.go" } { # This tests the gc -u option, which gccgo does not # support. + } elseif { $test_line == "// errorcheck -0 -N -d=nil" \ + || $test_line == "// errorcheck -0 -d=nil" } { + # This tests gc nil pointer checks using -d=nil, which + # gccgo does not support. } else { clone_output "$name: unrecognized test line: $test_line" unsupported $name diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 5166679dacd..159f88f28dd 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -1035,6 +1035,16 @@ proc check_iconv_available { test_what } { }] $libiconv] } +# Return true if Cilk Library is supported on the target. +proc check_libcilkrts_available { } { + return [ check_no_compiler_messages_nocache libcilkrts_available executable { + int main (void) { + __cilkrts_set_param ("nworkers", "0"); + return 0; + } + } "-fcilkplus -lcilkrts" ] +} + # Return 1 if an ASCII locale is supported on this host, 0 otherwise. proc check_ascii_locale_available { } { @@ -2301,19 +2311,37 @@ proc check_effective_target_arm_unaligned { } { } # Return 1 if this is an ARM target supporting -mfpu=crypto-neon-fp-armv8 -# -mfloat-abi=softfp. -proc check_effective_target_arm_crypto_ok {} { +# -mfloat-abi=softfp or equivalent options. Some multilibs may be +# incompatible with these options. Also set et_arm_crypto_flags to the +# best options to add. + +proc check_effective_target_arm_crypto_ok_nocache { } { + global et_arm_crypto_flags + set et_arm_crypto_flags "" if { [check_effective_target_arm32] } { - return [check_no_compiler_messages arm_crypto_ok object { - int foo (void) - { - __asm__ volatile ("aese.8 q0, q0"); - return 0; - } - } "-mfpu=crypto-neon-fp-armv8 -mfloat-abi=softfp"] - } else { - return 0 + foreach flags {"" "-mfloat-abi=softfp" "-mfpu=crypto-neon-fp-armv8" "-mfpu=crypto-neon-fp-armv8 -mfloat-abi=softfp"} { + if { [check_no_compiler_messages_nocache arm_crypto_ok object { + #include "arm_neon.h" + uint8x16_t + foo (uint8x16_t a, uint8x16_t b) + { + return vaeseq_u8 (a, b); + } + } "$flags"] } { + set et_arm_crypto_flags $flags + return 1 + } + } } + + return 0 +} + +# Return 1 if this is an ARM target supporting -mfpu=crypto-neon-fp-armv8 + +proc check_effective_target_arm_crypto_ok { } { + return [check_cached_effective_target arm_crypto_ok \ + check_effective_target_arm_crypto_ok_nocache] } # Add options for crypto extensions. @@ -2321,7 +2349,8 @@ proc add_options_for_arm_crypto { flags } { if { ! [check_effective_target_arm_crypto_ok] } { return "$flags" } - return "$flags -mfpu=crypto-neon-fp-armv8 -mfloat-abi=softfp" + global et_arm_crypto_flags + return "$flags $et_arm_crypto_flags" } # Add the options needed for NEON. We need either -mfloat-abi=softfp diff --git a/gcc/toplev.c b/gcc/toplev.c index 38e986c1560..c652522a361 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -78,6 +78,7 @@ along with GCC; see the file COPYING3. If not see #include "diagnostic-color.h" #include "context.h" #include "pass_manager.h" +#include "optabs.h" #if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO) #include "dbxout.h" @@ -1752,6 +1753,23 @@ target_reinit (void) { struct rtl_data saved_x_rtl; rtx *saved_regno_reg_rtx; + tree saved_optimization_current_node; + struct target_optabs *saved_this_fn_optabs; + + /* Temporarily switch to the default optimization node, so that + *this_target_optabs is set to the default, not reflecting + whatever a previous function used for the optimize + attribute. */ + saved_optimization_current_node = optimization_current_node; + saved_this_fn_optabs = this_fn_optabs; + if (saved_optimization_current_node != optimization_default_node) + { + optimization_current_node = optimization_default_node; + cl_optimization_restore + (&global_options, + TREE_OPTIMIZATION (optimization_default_node)); + } + this_fn_optabs = this_target_optabs; /* Save *crtl and regno_reg_rtx around the reinitialization to allow target_reinit being called even after prepare_function_start. */ @@ -1769,7 +1787,16 @@ target_reinit (void) /* Reinitialize lang-dependent parts. */ lang_dependent_init_target (); - /* And restore it at the end, as free_after_compilation from + /* Restore the original optimization node. */ + if (saved_optimization_current_node != optimization_default_node) + { + optimization_current_node = saved_optimization_current_node; + cl_optimization_restore (&global_options, + TREE_OPTIMIZATION (optimization_current_node)); + } + this_fn_optabs = saved_this_fn_optabs; + + /* Restore regno_reg_rtx at the end, as free_after_compilation from expand_dummy_function_end clears it. */ if (saved_regno_reg_rtx) { diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 1d1a58d0f47..83cbda9f3a2 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -161,7 +161,6 @@ static void make_goto_expr_edges (basic_block); static void make_gimple_asm_edges (basic_block); static edge gimple_redirect_edge_and_branch (edge, basic_block); static edge gimple_try_redirect_by_replacing_jump (edge, basic_block); -static unsigned int split_critical_edges (void); /* Various helpers. */ static inline bool stmt_starts_bb_p (gimple, gimple); @@ -7931,7 +7930,7 @@ struct cfg_hooks gimple_cfg_hooks = { /* Split all critical edges. */ -static unsigned int +unsigned int split_critical_edges (void) { basic_block bb; diff --git a/gcc/tree-cfg.h b/gcc/tree-cfg.h index 8d045a4e2dc..babbd2db2ca 100644 --- a/gcc/tree-cfg.h +++ b/gcc/tree-cfg.h @@ -93,5 +93,6 @@ extern tree gimplify_build1 (gimple_stmt_iterator *, enum tree_code, tree, tree); extern void extract_true_false_edges_from_block (basic_block, edge *, edge *); extern unsigned int execute_fixup_cfg (void); +extern unsigned int split_critical_edges (void); #endif /* _TREE_CFG_H */ diff --git a/gcc/tree-core.h b/gcc/tree-core.h index fac93550e1e..57af2377fb7 100644 --- a/gcc/tree-core.h +++ b/gcc/tree-core.h @@ -1570,18 +1570,25 @@ struct GTY(()) tree_optimization_option { /* Target optabs for this set of optimization options. This is of type `struct target_optabs *'. */ - unsigned char *GTY ((atomic)) optabs; + void *GTY ((atomic)) optabs; /* The value of this_target_optabs against which the optabs above were generated. */ struct target_optabs *GTY ((skip)) base_optabs; }; +/* Forward declaration, defined in target-globals.h. */ + +struct GTY(()) target_globals; + /* Target options used by a function. */ struct GTY(()) tree_target_option { struct tree_common common; + /* Target globals for the corresponding target option. */ + struct target_globals *globals; + /* The optimization options used by the user. */ struct cl_target_option opts; }; diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 3eaf81d334d..35743cbe3bd 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -773,10 +773,37 @@ split_data_refs_to_components (struct loop *loop, bad = component_of (comp_father, n); /* If both A and B are reads, we may ignore unsuitable dependences. */ - if (DR_IS_READ (dra) && DR_IS_READ (drb) - && (ia == bad || ib == bad - || !determine_offset (dra, drb, &dummy_off))) - continue; + if (DR_IS_READ (dra) && DR_IS_READ (drb)) + { + if (ia == bad || ib == bad + || !determine_offset (dra, drb, &dummy_off)) + continue; + } + /* If A is read and B write or vice versa and there is unsuitable + dependence, instead of merging both components into a component + that will certainly not pass suitable_component_p, just put the + read into bad component, perhaps at least the write together with + all the other data refs in it's component will be optimizable. */ + else if (DR_IS_READ (dra) && ib != bad) + { + if (ia == bad) + continue; + else if (!determine_offset (dra, drb, &dummy_off)) + { + merge_comps (comp_father, comp_size, bad, ia); + continue; + } + } + else if (DR_IS_READ (drb) && ia != bad) + { + if (ib == bad) + continue; + else if (!determine_offset (dra, drb, &dummy_off)) + { + merge_comps (comp_father, comp_size, bad, ib); + continue; + } + } merge_comps (comp_father, comp_size, ia, ib); } @@ -2420,6 +2447,7 @@ tree_predictive_commoning_loop (struct loop *loop) if (!components) { free_data_refs (datarefs); + free_affine_expand_cache (&name_expansions); return false; } diff --git a/gcc/tree-ssa-loop-ivopts.c b/gcc/tree-ssa-loop-ivopts.c index d5b08566f6e..049da5fcdfa 100644 --- a/gcc/tree-ssa-loop-ivopts.c +++ b/gcc/tree-ssa-loop-ivopts.c @@ -1668,50 +1668,30 @@ constant_multiple_of (tree top, tree bot, widest_int *mul) } } -/* Returns true if memory reference REF with step STEP may be unaligned. */ +/* Return true if memory reference REF with step STEP may be unaligned. */ static bool may_be_unaligned_p (tree ref, tree step) { - tree base; - tree base_type; - HOST_WIDE_INT bitsize; - HOST_WIDE_INT bitpos; - tree toffset; - enum machine_mode mode; - int unsignedp, volatilep; - unsigned base_align; - /* TARGET_MEM_REFs are translated directly to valid MEMs on the target, thus they are not misaligned. */ if (TREE_CODE (ref) == TARGET_MEM_REF) return false; - /* The test below is basically copy of what expr.c:normal_inner_ref - does to check whether the object must be loaded by parts when - STRICT_ALIGNMENT is true. */ - base = get_inner_reference (ref, &bitsize, &bitpos, &toffset, &mode, - &unsignedp, &volatilep, true); - base_type = TREE_TYPE (base); - base_align = get_object_alignment (base); - base_align = MAX (base_align, TYPE_ALIGN (base_type)); + unsigned int align = TYPE_ALIGN (TREE_TYPE (ref)); - if (mode != BLKmode) - { - unsigned mode_align = GET_MODE_ALIGNMENT (mode); - - if (base_align < mode_align - || (bitpos % mode_align) != 0 - || (bitpos % BITS_PER_UNIT) != 0) - return true; - - if (toffset - && (highest_pow2_factor (toffset) * BITS_PER_UNIT) < mode_align) - return true; + unsigned HOST_WIDE_INT bitpos; + unsigned int ref_align; + get_object_alignment_1 (ref, &ref_align, &bitpos); + if (ref_align < align + || (bitpos % align) != 0 + || (bitpos % BITS_PER_UNIT) != 0) + return true; - if ((highest_pow2_factor (step) * BITS_PER_UNIT) < mode_align) - return true; - } + unsigned int trailing_zeros = tree_ctz (step); + if (trailing_zeros < HOST_BITS_PER_INT + && (1U << trailing_zeros) * BITS_PER_UNIT < align) + return true; return false; } @@ -5733,18 +5713,20 @@ iv_ca_extend (struct ivopts_data *data, struct iv_ca *ivs, } /* Try narrowing set IVS by removing CAND. Return the cost of - the new set and store the differences in DELTA. */ + the new set and store the differences in DELTA. START is + the candidate with which we start narrowing. */ static comp_cost iv_ca_narrow (struct ivopts_data *data, struct iv_ca *ivs, - struct iv_cand *cand, struct iv_ca_delta **delta) + struct iv_cand *cand, struct iv_cand *start, + struct iv_ca_delta **delta) { unsigned i, ci; struct iv_use *use; struct cost_pair *old_cp, *new_cp, *cp; bitmap_iterator bi; struct iv_cand *cnd; - comp_cost cost; + comp_cost cost, best_cost, acost; *delta = NULL; for (i = 0; i < n_iv_uses (data); i++) @@ -5755,13 +5737,15 @@ iv_ca_narrow (struct ivopts_data *data, struct iv_ca *ivs, if (old_cp->cand != cand) continue; - new_cp = NULL; + best_cost = iv_ca_cost (ivs); + /* Start narrowing with START. */ + new_cp = get_use_iv_cost (data, use, start); if (data->consider_all_candidates) { EXECUTE_IF_SET_IN_BITMAP (ivs->cands, 0, ci, bi) { - if (ci == cand->id) + if (ci == cand->id || (start && ci == start->id)) continue; cnd = iv_cand (data, ci); @@ -5770,20 +5754,21 @@ iv_ca_narrow (struct ivopts_data *data, struct iv_ca *ivs, if (!cp) continue; - if (!iv_ca_has_deps (ivs, cp)) - continue; - - if (!cheaper_cost_pair (cp, new_cp)) - continue; + iv_ca_set_cp (data, ivs, use, cp); + acost = iv_ca_cost (ivs); - new_cp = cp; + if (compare_costs (acost, best_cost) < 0) + { + best_cost = acost; + new_cp = cp; + } } } else { EXECUTE_IF_AND_IN_BITMAP (use->related_cands, ivs->cands, 0, ci, bi) { - if (ci == cand->id) + if (ci == cand->id || (start && ci == start->id)) continue; cnd = iv_cand (data, ci); @@ -5791,15 +5776,19 @@ iv_ca_narrow (struct ivopts_data *data, struct iv_ca *ivs, cp = get_use_iv_cost (data, use, cnd); if (!cp) continue; - if (!iv_ca_has_deps (ivs, cp)) - continue; - if (!cheaper_cost_pair (cp, new_cp)) - continue; + iv_ca_set_cp (data, ivs, use, cp); + acost = iv_ca_cost (ivs); - new_cp = cp; + if (compare_costs (acost, best_cost) < 0) + { + best_cost = acost; + new_cp = cp; + } } } + /* Restore to old cp for use. */ + iv_ca_set_cp (data, ivs, use, old_cp); if (!new_cp) { @@ -5841,7 +5830,7 @@ iv_ca_prune (struct ivopts_data *data, struct iv_ca *ivs, if (cand == except_cand) continue; - acost = iv_ca_narrow (data, ivs, cand, &act_delta); + acost = iv_ca_narrow (data, ivs, cand, except_cand, &act_delta); if (compare_costs (acost, best_cost) < 0) { diff --git a/gcc/tree-ssa-loop-niter.c b/gcc/tree-ssa-loop-niter.c index 1637d68974f..a48ad10424e 100644 --- a/gcc/tree-ssa-loop-niter.c +++ b/gcc/tree-ssa-loop-niter.c @@ -1309,7 +1309,7 @@ dump_affine_iv (FILE *file, affine_iv *iv) if EVERY_ITERATION is true, we know the test is executed on every iteration. The results (number of iterations and assumptions as described in - comments at struct tree_niter_desc in tree-flow.h) are stored to NITER. + comments at struct tree_niter_desc in tree-ssa-loop.h) are stored to NITER. Returns false if it fails to determine number of iterations, true if it was determined (possibly with some assumptions). */ diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 0b940a41704..77d05624ff2 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4798,9 +4798,11 @@ const pass_data pass_data_pre = true, /* has_gate */ true, /* has_execute */ TV_TREE_PRE, /* tv_id */ + /* PROP_no_crit_edges is ensured by placing pass_split_crit_edges before + pass_pre. */ ( PROP_no_crit_edges | PROP_cfg | PROP_ssa ), /* properties_required */ 0, /* properties_provided */ - 0, /* properties_destroyed */ + PROP_no_crit_edges, /* properties_destroyed */ TODO_rebuild_alias, /* todo_flags_start */ TODO_verify_ssa, /* todo_flags_finish */ }; diff --git a/gcc/tree-ssa-sink.c b/gcc/tree-ssa-sink.c index d2de147799d..6d02975c4dd 100644 --- a/gcc/tree-ssa-sink.c +++ b/gcc/tree-ssa-sink.c @@ -567,7 +567,7 @@ static void execute_sink_code (void) { loop_optimizer_init (LOOPS_NORMAL); - + split_critical_edges (); connect_infinite_loops_to_exit (); memset (&sink_stats, 0, sizeof (sink_stats)); calculate_dominance_info (CDI_DOMINATORS); @@ -604,7 +604,9 @@ const pass_data pass_data_sink_code = true, /* has_gate */ true, /* has_execute */ TV_TREE_SINK, /* tv_id */ - ( PROP_no_crit_edges | PROP_cfg | PROP_ssa ), /* properties_required */ + /* PROP_no_crit_edges is ensured by running split_critical_edges in + execute_sink_code. */ + ( PROP_cfg | PROP_ssa ), /* properties_required */ 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 26b24f9b296..17c4279938b 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -3318,9 +3318,10 @@ again: { gimple def = SSA_NAME_DEF_STMT (off); tree reft = TREE_TYPE (DR_REF (newdr)); - if (gimple_call_internal_p (def) - && gimple_call_internal_fn (def) - == IFN_GOMP_SIMD_LANE) + if (is_gimple_call (def) + && gimple_call_internal_p (def) + && (gimple_call_internal_fn (def) + == IFN_GOMP_SIMD_LANE)) { tree arg = gimple_call_arg (def, 0); gcc_assert (TREE_CODE (arg) == SSA_NAME); diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c index ecb446c02f4..ebcbfb47c5f 100644 --- a/gcc/tree-vect-loop-manip.c +++ b/gcc/tree-vect-loop-manip.c @@ -483,7 +483,18 @@ slpeel_update_phi_nodes_for_guard1 (edge guard_edge, struct loop *loop, if (!current_new_name) continue; } - gcc_assert (get_current_def (current_new_name) == NULL_TREE); + tree new_name = get_current_def (current_new_name); + /* Because of peeled_chrec optimization it is possible that we have + set this earlier. Verify the PHI has the same value. */ + if (new_name) + { + gimple phi = SSA_NAME_DEF_STMT (new_name); + gcc_assert (gimple_code (phi) == GIMPLE_PHI + && gimple_bb (phi) == *new_exit_bb + && (PHI_ARG_DEF_FROM_EDGE (phi, single_exit (loop)) + == loop_arg)); + continue; + } set_current_def (current_new_name, PHI_RESULT (new_phi)); } diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c index 2b075dfea96..372d7db3e70 100644 --- a/gcc/tree-vect-slp.c +++ b/gcc/tree-vect-slp.c @@ -2110,17 +2110,6 @@ vect_slp_analyze_bb_1 (basic_block bb) vect_pattern_recog (NULL, bb_vinfo); - if (!vect_slp_analyze_data_ref_dependences (bb_vinfo)) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "not vectorized: unhandled data dependence " - "in basic block.\n"); - - destroy_bb_vec_info (bb_vinfo); - return NULL; - } - if (!vect_analyze_data_refs_alignment (NULL, bb_vinfo)) { if (dump_enabled_p ()) @@ -2155,6 +2144,29 @@ vect_slp_analyze_bb_1 (basic_block bb) vect_mark_slp_stmts_relevant (SLP_INSTANCE_TREE (instance)); } + /* Mark all the statements that we do not want to vectorize. */ + for (gimple_stmt_iterator gsi = gsi_start_bb (BB_VINFO_BB (bb_vinfo)); + !gsi_end_p (gsi); gsi_next (&gsi)) + { + stmt_vec_info vinfo = vinfo_for_stmt (gsi_stmt (gsi)); + if (STMT_SLP_TYPE (vinfo) != pure_slp) + STMT_VINFO_VECTORIZABLE (vinfo) = false; + } + + /* Analyze dependences. At this point all stmts not participating in + vectorization have to be marked. Dependence analysis assumes + that we either vectorize all SLP instances or none at all. */ + if (!vect_slp_analyze_data_ref_dependences (bb_vinfo)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "not vectorized: unhandled data dependence " + "in basic block.\n"); + + destroy_bb_vec_info (bb_vinfo); + return NULL; + } + if (!vect_verify_datarefs_alignment (NULL, bb_vinfo)) { if (dump_enabled_p ()) diff --git a/gcc/tree.c b/gcc/tree.c index 18e4e369297..914508e0cd6 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -11419,6 +11419,28 @@ build_target_option_node (struct gcc_options *opts) return t; } +/* Reset TREE_TARGET_GLOBALS cache for TARGET_OPTION_NODE. + Called through htab_traverse. */ + +static int +prepare_target_option_node_for_pch (void **slot, void *) +{ + tree node = (tree) *slot; + if (TREE_CODE (node) == TARGET_OPTION_NODE) + TREE_TARGET_GLOBALS (node) = NULL; + return 1; +} + +/* Clear TREE_TARGET_GLOBALS of all TARGET_OPTION_NODE trees, + so that they aren't saved during PCH writing. */ + +void +prepare_target_option_nodes_for_pch (void) +{ + htab_traverse (cl_option_hash_table, prepare_target_option_node_for_pch, + NULL); +} + /* Determine the "ultimate origin" of a block. The block may be an inlined instance of an inlined instance of a block which is local to an inline function, so we have to trace all of the way back through the origin chain diff --git a/gcc/tree.h b/gcc/tree.h index 40381646dc8..6cccb3f8754 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -1117,9 +1117,6 @@ extern void protected_set_expr_location (tree, location_t); the given label expression. */ #define LABEL_EXPR_LABEL(NODE) TREE_OPERAND (LABEL_EXPR_CHECK (NODE), 0) -/* VDEF_EXPR accessors are specified in tree-flow.h, along with the other - accessors for SSA operands. */ - /* CATCH_EXPR accessors. */ #define CATCH_TYPES(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 0) #define CATCH_BODY(NODE) TREE_OPERAND (CATCH_EXPR_CHECK (NODE), 1) @@ -2698,9 +2695,14 @@ extern tree build_optimization_node (struct gcc_options *opts); #define TREE_TARGET_OPTION(NODE) \ (&TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts) +#define TREE_TARGET_GLOBALS(NODE) \ + (TARGET_OPTION_NODE_CHECK (NODE)->target_option.globals) + /* Return a tree node that encapsulates the target options in OPTS. */ extern tree build_target_option_node (struct gcc_options *opts); +extern void prepare_target_option_nodes_for_pch (void); + #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) inline tree diff --git a/gcc/tsan.c b/gcc/tsan.c index 2c053bd9e34..2e32cd2b32f 100644 --- a/gcc/tsan.c +++ b/gcc/tsan.c @@ -609,7 +609,7 @@ instrument_gimple (gimple_stmt_iterator *gsi) && (gimple_call_fndecl (stmt) != builtin_decl_implicit (BUILT_IN_TSAN_INIT))) { - if (is_gimple_builtin_call (stmt)) + if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL)) instrument_builtin_call (gsi); return true; } diff --git a/gcc/ubsan.c b/gcc/ubsan.c index 7cc8c180ba8..1841a947b9c 100644 --- a/gcc/ubsan.c +++ b/gcc/ubsan.c @@ -311,6 +311,9 @@ ubsan_type_descriptor (tree type, bool want_pointer_type_p) type2 = TYPE_METHOD_BASETYPE (type2); } + /* If an array, get its type. */ + type2 = strip_array_types (type2); + if (TYPE_NAME (type2) != NULL) { if (TREE_CODE (TYPE_NAME (type2)) == IDENTIFIER_NODE) diff --git a/gcc/var-tracking.c b/gcc/var-tracking.c index 4d6aed24b0c..dcbbbd26f78 100644 --- a/gcc/var-tracking.c +++ b/gcc/var-tracking.c @@ -5947,6 +5947,13 @@ add_stores (rtx loc, const_rtx expr, void *cuip) if (type != MO_VAL_SET) goto log_and_return; + v = find_use_val (oloc, mode, cui); + + if (!v) + goto log_and_return; + + resolve = preserve = !cselib_preserved_value_p (v); + /* We cannot track values for multiple-part variables, so we track only locations for tracked parameters passed either by invisible reference or directly in multiple locations. */ @@ -5960,14 +5967,15 @@ add_stores (rtx loc, const_rtx expr, void *cuip) && XEXP (DECL_INCOMING_RTL (REG_EXPR (loc)), 0) != arg_pointer_rtx) || (GET_CODE (DECL_INCOMING_RTL (REG_EXPR (loc))) == PARALLEL && XVECLEN (DECL_INCOMING_RTL (REG_EXPR (loc)), 0) > 1))) - goto log_and_return; - - v = find_use_val (oloc, mode, cui); - - if (!v) - goto log_and_return; - - resolve = preserve = !cselib_preserved_value_p (v); + { + /* Although we don't use the value here, it could be used later by the + mere virtue of its existence as the operand of the reverse operation + that gave rise to it (typically extension/truncation). Make sure it + is preserved as required by vt_expand_var_loc_chain. */ + if (preserve) + preserve_value (v); + goto log_and_return; + } if (loc == stack_pointer_rtx && hard_frame_pointer_adjustment != -1 diff --git a/libcilkrts/ChangeLog b/libcilkrts/ChangeLog index 74f592b9fc5..5ac0e4863db 100644 --- a/libcilkrts/ChangeLog +++ b/libcilkrts/ChangeLog @@ -1,3 +1,10 @@ +2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com> + + bootstrap/59094 + * Makefile.am (cilkincludedir): Fixed a bug to store version-specific + runtime libraries in the correct place. + * Makefile.in: Regenerate. + 2013-12-13 Balaji V. Iyer <balaji.v.iyer@intel.com> * Makefile.am (GENERAL_FLAGS): Removed undefining of Cilk keywords. diff --git a/libcilkrts/Makefile.am b/libcilkrts/Makefile.am index d2520870a7e..f2d13aabd88 100644 --- a/libcilkrts/Makefile.am +++ b/libcilkrts/Makefile.am @@ -108,7 +108,8 @@ endif libcilkrts_la_LDFLAGS += -no-undefined # C/C++ header files for Cilk. -cilkincludedir = $(includedir)/cilk +# cilkincludedir = $(includedir)/cilk +cilkincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/cilk cilkinclude_HEADERS = \ include/cilk/cilk_api.h \ include/cilk/cilk_api_linux.h \ diff --git a/libcilkrts/Makefile.in b/libcilkrts/Makefile.in index 94902e1336e..092e2f706ec 100644 --- a/libcilkrts/Makefile.in +++ b/libcilkrts/Makefile.in @@ -401,7 +401,8 @@ libcilkrts_la_LDFLAGS = -version-info 5:0:0 -lpthread \ -no-undefined # C/C++ header files for Cilk. -cilkincludedir = $(includedir)/cilk +# cilkincludedir = $(includedir)/cilk +cilkincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)/include/cilk cilkinclude_HEADERS = \ include/cilk/cilk_api.h \ include/cilk/cilk_api_linux.h \ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 7fc4bd08449..78c44381c19 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,24 @@ +2014-01-09 Rong Xu <xur@google.com> + + * libgcov-driver.c (this_prg): make it local to save + bss space. + (gcov_exit_compute_summary): Ditto. + (gcov_exit_merge_gcda): Ditto. + (gcov_exit_merge_summary): Ditto. + (gcov_exit_dump_gcov): Ditto. + +2014-01-08 Rong Xu <xur@google.com> + + * libgcov-driver.c: Use libgcov.h. + (buffer_fn_data): Use xmalloc instead of malloc. + (gcov_exit_merge_gcda): Ditto. + * libgcov-driver-system.c (allocate_filename_struct): Ditto. + * libgcov.h: New common header files for libgcov-*.h. + * libgcov-interface.c: Use libgcov.h + * libgcov-merge.c: Ditto. + * libgcov-profiler.c: Ditto. + * Makefile.in: Add dependence to libgcov.h + 2014-01-02 Joseph Myers <joseph@codesourcery.com> * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index 8eebf61146d..e86e98de476 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -868,14 +868,14 @@ libgcov-driver-objects = $(patsubst %,%$(objext),$(LIBGCOV_DRIVER)) libgcov-objects = $(libgcov-merge-objects) $(libgcov-profiler-objects) \ $(libgcov-interface-objects) $(libgcov-driver-objects) -$(libgcov-merge-objects): %$(objext): $(srcdir)/libgcov-merge.c +$(libgcov-merge-objects): %$(objext): $(srcdir)/libgcov-merge.c $(srcdir)/libgcov.h $(gcc_compile) -DL$* -c $(srcdir)/libgcov-merge.c -$(libgcov-profiler-objects): %$(objext): $(srcdir)/libgcov-profiler.c +$(libgcov-profiler-objects): %$(objext): $(srcdir)/libgcov-profiler.c $(srcdir)/libgcov.h $(gcc_compile) -DL$* -c $(srcdir)/libgcov-profiler.c -$(libgcov-interface-objects): %$(objext): $(srcdir)/libgcov-interface.c +$(libgcov-interface-objects): %$(objext): $(srcdir)/libgcov-interface.c $(srcdir)/libgcov.h $(gcc_compile) -DL$* -c $(srcdir)/libgcov-interface.c $(libgcov-driver-objects): %$(objext): $(srcdir)/libgcov-driver.c \ - $(srcdir)/libgcov-driver-system.c + $(srcdir)/libgcov-driver-system.c $(srcdir)/libgcov.h $(gcc_compile) -DL$* -c $(srcdir)/libgcov-driver.c diff --git a/libgcc/libgcov-driver-system.c b/libgcc/libgcov-driver-system.c index b023bfd6fd6..1bb7402813f 100644 --- a/libgcc/libgcov-driver-system.c +++ b/libgcc/libgcov-driver-system.c @@ -124,7 +124,7 @@ allocate_filename_struct (struct gcov_filename_aux *gf) prefix_length = 1; } /* Allocate and initialize the filename scratch space plus one. */ - gi_filename = (char *) malloc (prefix_length + gcov_max_filename + 2); + gi_filename = (char *) xmalloc (prefix_length + gcov_max_filename + 2); if (prefix_length) memcpy (gi_filename, gcov_prefix, prefix_length); gi_filename_up = gi_filename + prefix_length; diff --git a/libgcc/libgcov-driver.c b/libgcc/libgcov-driver.c index e2a2e3d8f14..f8abdb1e8ac 100644 --- a/libgcc/libgcov-driver.c +++ b/libgcc/libgcov-driver.c @@ -23,21 +23,7 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include "tconfig.h" -#include "tsystem.h" -#include "coretypes.h" -#include "tm.h" -#include "libgcc_tm.h" - -#if defined(inhibit_libc) -#define IN_LIBGCOV (-1) -#else -#define IN_LIBGCOV 1 -#if defined(L_gcov) -#define GCOV_LINKAGE /* nothing */ -#endif -#endif -#include "gcov-io.h" +#include "libgcov.h" #if defined(inhibit_libc) /* If libc and its header files are not available, provide dummy functions. */ @@ -156,7 +142,7 @@ buffer_fn_data (const char *filename, const struct gcov_info *gi_ptr, n_ctrs++; len = sizeof (*fn_buffer) + sizeof (fn_buffer->info.ctrs[0]) * n_ctrs; - fn_buffer = (struct gcov_fn_buffer *)malloc (len); + fn_buffer = (struct gcov_fn_buffer *) xmalloc (len); if (!fn_buffer) goto fail; @@ -183,7 +169,7 @@ buffer_fn_data (const char *filename, const struct gcov_info *gi_ptr, length = GCOV_TAG_COUNTER_NUM (gcov_read_unsigned ()); len = length * sizeof (gcov_type); - values = (gcov_type *)malloc (len); + values = (gcov_type *) xmalloc (len); if (!values) goto fail; @@ -317,8 +303,6 @@ gcov_compute_histogram (struct gcov_summary *sum) } } -/* summary for program. */ -static struct gcov_summary this_prg; /* gcda filename. */ static char *gi_filename; /* buffer for the fn_data from another program. */ @@ -331,10 +315,10 @@ static struct gcov_summary_buffer *sum_buffer; static int run_accounted = 0; /* This funtions computes the program level summary and the histo-gram. - It computes and returns CRC32 and stored summari in THIS_PRG. */ + It computes and returns CRC32 and stored summary in THIS_PRG. */ static gcov_unsigned_t -gcov_exit_compute_summary (void) +gcov_exit_compute_summary (struct gcov_summary *this_prg) { struct gcov_info *gi_ptr; const struct gcov_fn_info *gfi_ptr; @@ -346,7 +330,7 @@ gcov_exit_compute_summary (void) gcov_unsigned_t crc32 = 0; /* Find the totals for this execution. */ - memset (&this_prg, 0, sizeof (this_prg)); + memset (this_prg, 0, sizeof (*this_prg)); for (gi_ptr = gcov_list; gi_ptr; gi_ptr = gi_ptr->next) { crc32 = crc32_unsigned (crc32, gi_ptr->stamp); @@ -371,7 +355,7 @@ gcov_exit_compute_summary (void) if (!gi_ptr->merge[t_ix]) continue; - cs_ptr = &this_prg.ctrs[t_ix]; + cs_ptr = &(this_prg->ctrs[t_ix]); cs_ptr->num += ci_ptr->num; crc32 = crc32_unsigned (crc32, ci_ptr->num); @@ -385,7 +369,7 @@ gcov_exit_compute_summary (void) } } } - gcov_compute_histogram (&this_prg); + gcov_compute_histogram (this_prg); return crc32; } @@ -407,6 +391,7 @@ struct gcov_filename_aux{ static int gcov_exit_merge_gcda (struct gcov_info *gi_ptr, struct gcov_summary *prg_p, + struct gcov_summary *this_prg, gcov_position_t *summary_pos_p, gcov_position_t *eof_pos_p, gcov_unsigned_t crc32) @@ -450,7 +435,7 @@ gcov_exit_merge_gcda (struct gcov_info *gi_ptr, histogram entries that will be emitted, and thus the size of the merged summary. */ (*sum_tail) = (struct gcov_summary_buffer *) - malloc (sizeof(struct gcov_summary_buffer)); + xmalloc (sizeof(struct gcov_summary_buffer)); (*sum_tail)->summary = tmp; (*sum_tail)->next = 0; sum_tail = &((*sum_tail)->next); @@ -460,7 +445,7 @@ gcov_exit_merge_gcda (struct gcov_info *gi_ptr, goto next_summary; for (t_ix = 0; t_ix != GCOV_COUNTERS_SUMMABLE; t_ix++) - if (tmp.ctrs[t_ix].num != this_prg.ctrs[t_ix].num) + if (tmp.ctrs[t_ix].num != this_prg->ctrs[t_ix].num) goto next_summary; *prg_p = tmp; *summary_pos_p = *eof_pos_p; @@ -650,7 +635,7 @@ gcov_exit_write_gcda (const struct gcov_info *gi_ptr, static int gcov_exit_merge_summary (const struct gcov_info *gi_ptr, struct gcov_summary *prg, - gcov_unsigned_t crc32, + struct gcov_summary *this_prg, gcov_unsigned_t crc32, struct gcov_summary *all_prg __attribute__ ((unused))) { struct gcov_ctr_summary *cs_prg, *cs_tprg; @@ -664,7 +649,7 @@ gcov_exit_merge_summary (const struct gcov_info *gi_ptr, struct gcov_summary *pr for (t_ix = 0; t_ix < GCOV_COUNTERS_SUMMABLE; t_ix++) { cs_prg = &(prg->ctrs[t_ix]); - cs_tprg = &this_prg.ctrs[t_ix]; + cs_tprg = &(this_prg->ctrs[t_ix]); if (gi_ptr->merge[t_ix]) { @@ -718,7 +703,7 @@ gcov_exit_merge_summary (const struct gcov_info *gi_ptr, struct gcov_summary *pr } #endif } - + prg->checksum = crc32; return 0; @@ -733,7 +718,8 @@ gcov_exit_merge_summary (const struct gcov_info *gi_ptr, struct gcov_summary *pr static void gcov_exit_dump_gcov (struct gcov_info *gi_ptr, struct gcov_filename_aux *gf, - gcov_unsigned_t crc32, struct gcov_summary *all_prg) + gcov_unsigned_t crc32, struct gcov_summary *all_prg, + struct gcov_summary *this_prg) { struct gcov_summary prg; /* summary for this object over all program. */ int error; @@ -757,7 +743,7 @@ gcov_exit_dump_gcov (struct gcov_info *gi_ptr, struct gcov_filename_aux *gf, gcov_error ("profiling:%s:Not a gcov data file\n", gi_filename); goto read_fatal; } - error = gcov_exit_merge_gcda (gi_ptr, &prg, &summary_pos, &eof_pos, + error = gcov_exit_merge_gcda (gi_ptr, &prg, this_prg, &summary_pos, &eof_pos, crc32); if (error == -1) goto read_fatal; @@ -771,7 +757,7 @@ gcov_exit_dump_gcov (struct gcov_info *gi_ptr, struct gcov_filename_aux *gf, summary_pos = eof_pos; } - error = gcov_exit_merge_summary (gi_ptr, &prg, crc32, all_prg); + error = gcov_exit_merge_summary (gi_ptr, &prg, this_prg, crc32, all_prg); if (error == -1) goto read_fatal; @@ -801,13 +787,14 @@ gcov_exit (void) struct gcov_filename_aux gf; gcov_unsigned_t crc32; struct gcov_summary all_prg; + struct gcov_summary this_prg; /* Prevent the counters from being dumped a second time on exit when the application already wrote out the profile using __gcov_dump(). */ if (gcov_dump_complete) return; - crc32 = gcov_exit_compute_summary (); + crc32 = gcov_exit_compute_summary (&this_prg); allocate_filename_struct (&gf); #if !GCOV_LOCKED @@ -816,7 +803,7 @@ gcov_exit (void) /* Now merge each file. */ for (gi_ptr = gcov_list; gi_ptr; gi_ptr = gi_ptr->next) - gcov_exit_dump_gcov (gi_ptr, &gf, crc32, &all_prg); + gcov_exit_dump_gcov (gi_ptr, &gf, crc32, &all_prg, &this_prg); run_accounted = 1; if (gi_filename) diff --git a/libgcc/libgcov-interface.c b/libgcc/libgcov-interface.c index 6556c0370ae..7f831f2ef24 100644 --- a/libgcc/libgcov-interface.c +++ b/libgcc/libgcov-interface.c @@ -23,21 +23,10 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include "tconfig.h" -#include "tsystem.h" -#include "coretypes.h" -#include "tm.h" -#include "libgcc_tm.h" +#include "libgcov.h" #include "gthr.h" #if defined(inhibit_libc) -#define IN_LIBGCOV (-1) -#else -#define IN_LIBGCOV 1 -#endif -#include "gcov-io.h" - -#if defined(inhibit_libc) #ifdef L_gcov_flush void __gcov_flush (void) {} diff --git a/libgcc/libgcov-merge.c b/libgcc/libgcov-merge.c index c4b91598a92..488d5426c91 100644 --- a/libgcc/libgcov-merge.c +++ b/libgcc/libgcov-merge.c @@ -23,19 +23,7 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include "tconfig.h" -#include "tsystem.h" -#include "coretypes.h" -#include "tm.h" -#include "libgcc_tm.h" - -#if defined(inhibit_libc) -#define IN_LIBGCOV (-1) -#else -#define IN_LIBGCOV 1 -#endif - -#include "gcov-io.h" +#include "libgcov.h" #if defined(inhibit_libc) /* If libc and its header files are not available, provide dummy functions. */ diff --git a/libgcc/libgcov-profiler.c b/libgcc/libgcov-profiler.c index e8a340dc2a3..3290bf62cc2 100644 --- a/libgcc/libgcov-profiler.c +++ b/libgcc/libgcov-profiler.c @@ -23,15 +23,8 @@ a copy of the GCC Runtime Library Exception along with this program; see the files COPYING3 and COPYING.RUNTIME respectively. If not, see <http://www.gnu.org/licenses/>. */ -#include "tconfig.h" -#include "tsystem.h" -#include "coretypes.h" -#include "tm.h" -#include "libgcc_tm.h" - +#include "libgcov.h" #if !defined(inhibit_libc) -#define IN_LIBGCOV 1 -#include "gcov-io.h" #ifdef L_gcov_interval_profiler /* If VALUE is in interval <START, START + STEPS - 1>, then increases the diff --git a/libgcc/libgcov.h b/libgcc/libgcov.h new file mode 100644 index 00000000000..1e831de698a --- /dev/null +++ b/libgcc/libgcov.h @@ -0,0 +1,229 @@ +/* Header file for libgcov-*.c. + Copyright (C) 1996-2014 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC 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. + + GCC 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. + + Under Section 7 of GPL version 3, you are granted additional + permissions described in the GCC Runtime Library Exception, version + 3.1, as published by the Free Software Foundation. + + You should have received a copy of the GNU General Public License and + a copy of the GCC Runtime Library Exception along with this program; + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see + <http://www.gnu.org/licenses/>. */ + +#ifndef GCC_LIBGCOV_H +#define GCC_LIBGCOV_H + +/* work around the poisoned malloc/calloc in system.h. */ +#ifndef xmalloc +#define xmalloc malloc +#endif +#ifndef xcalloc +#define xcalloc calloc +#endif + +#include "tconfig.h" +#include "tsystem.h" +#include "coretypes.h" +#include "tm.h" +#include "libgcc_tm.h" + +#if BITS_PER_UNIT == 8 +typedef unsigned gcov_unsigned_t __attribute__ ((mode (SI))); +typedef unsigned gcov_position_t __attribute__ ((mode (SI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (DI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (DI))); +#else +typedef signed gcov_type __attribute__ ((mode (SI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); +#endif +#else +#if BITS_PER_UNIT == 16 +typedef unsigned gcov_unsigned_t __attribute__ ((mode (HI))); +typedef unsigned gcov_position_t __attribute__ ((mode (HI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (SI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (SI))); +#else +typedef signed gcov_type __attribute__ ((mode (HI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); +#endif +#else +typedef unsigned gcov_unsigned_t __attribute__ ((mode (QI))); +typedef unsigned gcov_position_t __attribute__ ((mode (QI))); +#if LONG_LONG_TYPE_SIZE > 32 +typedef signed gcov_type __attribute__ ((mode (HI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (HI))); +#else +typedef signed gcov_type __attribute__ ((mode (QI))); +typedef unsigned gcov_type_unsigned __attribute__ ((mode (QI))); +#endif +#endif +#endif + +#if defined (TARGET_POSIX_IO) +#define GCOV_LOCKED 1 +#else +#define GCOV_LOCKED 0 +#endif + +#if defined(inhibit_libc) +#define IN_LIBGCOV (-1) +#else +#define IN_LIBGCOV 1 +#if defined(L_gcov) +#define GCOV_LINKAGE /* nothing */ +#endif +#endif + +/* In libgcov we need these functions to be extern, so prefix them with + __gcov. In libgcov they must also be hidden so that the instance in + the executable is not also used in a DSO. */ +#define gcov_var __gcov_var +#define gcov_open __gcov_open +#define gcov_close __gcov_close +#define gcov_write_tag_length __gcov_write_tag_length +#define gcov_position __gcov_position +#define gcov_seek __gcov_seek +#define gcov_rewrite __gcov_rewrite +#define gcov_is_error __gcov_is_error +#define gcov_write_unsigned __gcov_write_unsigned +#define gcov_write_counter __gcov_write_counter +#define gcov_write_summary __gcov_write_summary +#define gcov_read_unsigned __gcov_read_unsigned +#define gcov_read_counter __gcov_read_counter +#define gcov_read_summary __gcov_read_summary + +/* Poison these, so they don't accidentally slip in. */ +#pragma GCC poison gcov_write_string gcov_write_tag gcov_write_length +#pragma GCC poison gcov_time gcov_magic + +#ifdef HAVE_GAS_HIDDEN +#define ATTRIBUTE_HIDDEN __attribute__ ((__visibility__ ("hidden"))) +#else +#define ATTRIBUTE_HIDDEN +#endif + +#include "gcov-io.h" + +/* Structures embedded in coveraged program. The structures generated + by write_profile must match these. */ + +/* Information about counters for a single function. */ +struct gcov_ctr_info +{ + gcov_unsigned_t num; /* number of counters. */ + gcov_type *values; /* their values. */ +}; + +/* Information about a single function. This uses the trailing array + idiom. The number of counters is determined from the merge pointer + array in gcov_info. The key is used to detect which of a set of + comdat functions was selected -- it points to the gcov_info object + of the object file containing the selected comdat function. */ + +struct gcov_fn_info +{ + const struct gcov_info *key; /* comdat key */ + gcov_unsigned_t ident; /* unique ident of function */ + gcov_unsigned_t lineno_checksum; /* function lineo_checksum */ + gcov_unsigned_t cfg_checksum; /* function cfg checksum */ + struct gcov_ctr_info ctrs[0]; /* instrumented counters */ +}; + +/* Type of function used to merge counters. */ +typedef void (*gcov_merge_fn) (gcov_type *, gcov_unsigned_t); + +/* Information about a single object file. */ +struct gcov_info +{ + gcov_unsigned_t version; /* expected version number */ + struct gcov_info *next; /* link to next, used by libgcov */ + + gcov_unsigned_t stamp; /* uniquifying time stamp */ + const char *filename; /* output file name */ + + gcov_merge_fn merge[GCOV_COUNTERS]; /* merge functions (null for + unused) */ + + unsigned n_functions; /* number of functions */ + const struct gcov_fn_info *const *functions; /* pointer to pointers + to function information */ +}; + +/* Register a new object file module. */ +extern void __gcov_init (struct gcov_info *) ATTRIBUTE_HIDDEN; + +/* Called before fork, to avoid double counting. */ +extern void __gcov_flush (void) ATTRIBUTE_HIDDEN; + +/* Function to reset all counters to 0. */ +extern void __gcov_reset (void); + +/* Function to enable early write of profile information so far. */ +extern void __gcov_dump (void); + +/* The merge function that just sums the counters. */ +extern void __gcov_merge_add (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to select the minimum valid counter value. */ +extern void __gcov_merge_time_profile (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to choose the most common value. */ +extern void __gcov_merge_single (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function to choose the most common difference between + consecutive values. */ +extern void __gcov_merge_delta (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The merge function that just ors the counters together. */ +extern void __gcov_merge_ior (gcov_type *, unsigned) ATTRIBUTE_HIDDEN; + +/* The profiler functions. */ +extern void __gcov_interval_profiler (gcov_type *, gcov_type, int, unsigned); +extern void __gcov_pow2_profiler (gcov_type *, gcov_type); +extern void __gcov_one_value_profiler (gcov_type *, gcov_type); +extern void __gcov_indirect_call_profiler (gcov_type*, gcov_type, + void*, void*); +extern void __gcov_indirect_call_profiler_v2 (gcov_type, void *); +extern void __gcov_time_profiler (gcov_type *); +extern void __gcov_average_profiler (gcov_type *, gcov_type); +extern void __gcov_ior_profiler (gcov_type *, gcov_type); + +#ifndef inhibit_libc +/* The wrappers around some library functions.. */ +extern pid_t __gcov_fork (void) ATTRIBUTE_HIDDEN; +extern int __gcov_execl (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execlp (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execle (const char *, char *, ...) ATTRIBUTE_HIDDEN; +extern int __gcov_execv (const char *, char *const []) ATTRIBUTE_HIDDEN; +extern int __gcov_execvp (const char *, char *const []) ATTRIBUTE_HIDDEN; +extern int __gcov_execve (const char *, char *const [], char *const []) + ATTRIBUTE_HIDDEN; + +/* Functions that only available in libgcov. */ +GCOV_LINKAGE int gcov_open (const char */*name*/) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_counter (gcov_type) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_tag_length (gcov_unsigned_t, gcov_unsigned_t) + ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_write_summary (gcov_unsigned_t /*tag*/, + const struct gcov_summary *) + ATTRIBUTE_HIDDEN; +GCOV_LINKAGE void gcov_seek (gcov_position_t /*position*/) ATTRIBUTE_HIDDEN; +GCOV_LINKAGE inline void gcov_rewrite (void); + +#endif /* !inhibit_libc */ + +#endif /* GCC_LIBGCOV_H */ diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 89c9e5d4e71..308ae8d0023 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,18 @@ +2014-01-11 Jerry DeLisle <jvdelisle@gcc.gnu> + Dominique d'Humieres <dominiq@lps.ens.fr> + Steven G. Kargl <kargl@gcc.gnu.org> + + PR libfortran/59700 + PR libfortran/59764 + * io/io.h (struct st_parameter_dt): Assign expanded_read flag to + unused bit. Define new variable line_buffer_pos. + * io/list_read.c (free_saved, next_char, l_push_char, + read_logical, read_real): Replace use of item_count with + line_buffer_pos for line_buffer look ahead. + (read_logical, read_integer, parse_real, read_real, check_type): + Adjust location of free_line to after generating error messages + to retain the correct item count for the message. + 2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> Update copyright years diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 97f7a6a2abd..3481c83d791 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -430,7 +430,10 @@ typedef struct st_parameter_dt unsigned g0_no_blanks : 1; /* Used to signal use of free_format_data. */ unsigned format_not_saved : 1; - /* 14 unused bits. */ + /* A flag used to identify when a non-standard expanded namelist read + has occurred. */ + unsigned expanded_read : 1; + /* 13 unused bits. */ /* Used for ungetc() style functionality. Possible values are an unsigned char, EOF, or EOF - 1 used to mark the @@ -447,9 +450,8 @@ typedef struct st_parameter_dt char *line_buffer; struct format_data *fmt; namelist_info *ionml; - /* A flag used to identify when a non-standard expanded namelist read - has occurred. */ - int expanded_read; + /* Current position within the look-ahead line buffer. */ + int line_buffer_pos; /* Storage area for values except for strings. Must be large enough to hold a complex value (two reals) of the largest kind. */ diff --git a/libgfortran/io/list_read.c b/libgfortran/io/list_read.c index a37cfcb26c2..942f311410f 100644 --- a/libgfortran/io/list_read.c +++ b/libgfortran/io/list_read.c @@ -118,7 +118,7 @@ free_saved (st_parameter_dt *dtp) static void free_line (st_parameter_dt *dtp) { - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; dtp->u.p.line_buffer_enabled = 0; if (dtp->u.p.line_buffer == NULL) @@ -150,15 +150,15 @@ next_char (st_parameter_dt *dtp) { dtp->u.p.at_eol = 0; - c = dtp->u.p.line_buffer[dtp->u.p.item_count]; - if (c != '\0' && dtp->u.p.item_count < 64) + c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos]; + if (c != '\0' && dtp->u.p.line_buffer_pos < 64) { - dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0'; - dtp->u.p.item_count++; + dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0'; + dtp->u.p.line_buffer_pos++; goto done; } - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; dtp->u.p.line_buffer_enabled = 0; } @@ -639,7 +639,7 @@ l_push_char (st_parameter_dt *dtp, char c) if (dtp->u.p.line_buffer == NULL) dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1); - dtp->u.p.line_buffer[dtp->u.p.item_count++] = c; + dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c; } @@ -749,7 +749,7 @@ read_logical (st_parameter_dt *dtp, int length) { dtp->u.p.nml_read_error = 1; dtp->u.p.line_buffer_enabled = 1; - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; return; } @@ -757,14 +757,17 @@ read_logical (st_parameter_dt *dtp, int length) bad_logical: - free_line (dtp); - if (nml_bad_return (dtp, c)) - return; + { + free_line (dtp); + return; + } + free_saved (dtp); if (c == EOF) { + free_line (dtp); hit_eof (dtp); return; } @@ -772,6 +775,7 @@ read_logical (st_parameter_dt *dtp, int length) eat_line (dtp); snprintf (message, MSGLEN, "Bad logical value while reading item %d", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return; @@ -912,9 +916,9 @@ read_integer (st_parameter_dt *dtp, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad integer for item %d in list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return; @@ -1297,9 +1301,9 @@ parse_real (st_parameter_dt *dtp, void *buffer, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad floating point number for item %d", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return 1; @@ -1405,9 +1409,9 @@ eol_4: else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad complex value in item %d of list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); } @@ -1769,7 +1773,7 @@ read_real (st_parameter_dt *dtp, void * dest, int length) { dtp->u.p.nml_read_error = 1; dtp->u.p.line_buffer_enabled = 1; - dtp->u.p.item_count = 0; + dtp->u.p.line_buffer_pos = 0; return; } @@ -1788,9 +1792,9 @@ read_real (st_parameter_dt *dtp, void * dest, int length) else if (c != '\n') eat_line (dtp); - free_line (dtp); snprintf (message, MSGLEN, "Bad real number in item %d of list input", dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); } @@ -1805,11 +1809,10 @@ check_type (st_parameter_dt *dtp, bt type, int kind) if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type) { - free_line (dtp); snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d", type_name (dtp->u.p.saved_type), type_name (type), dtp->u.p.item_count); - + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return 1; } @@ -1820,13 +1823,13 @@ check_type (st_parameter_dt *dtp, bt type, int kind) if ((type != BT_COMPLEX && dtp->u.p.saved_length != kind) || (type == BT_COMPLEX && dtp->u.p.saved_length != kind*2)) { - free_line (dtp); snprintf (message, MSGLEN, "Read kind %d %s where kind %d is required for item %d", type == BT_COMPLEX ? dtp->u.p.saved_length / 2 : dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), kind, dtp->u.p.item_count); + free_line (dtp); generate_error (&dtp->common, LIBERROR_READ_VALUE, message); return 1; } diff --git a/libgo/Makefile.am b/libgo/Makefile.am index 0851b71e02e..4f09bc30bf6 100644 --- a/libgo/Makefile.am +++ b/libgo/Makefile.am @@ -1465,10 +1465,17 @@ go_os_signal_files = \ go/os/signal/signal.go \ go/os/signal/signal_unix.go +if LIBGO_IS_SOLARIS +os_user_decls_file = go/os/user/decls_solaris.go +else +os_user_decls_file = go/os/user/decls_unix.go +endif + go_os_user_files = \ - go/os/user/user.go \ go/os/user/lookup.go \ - go/os/user/lookup_unix.go + go/os/user/lookup_unix.go \ + go/os/user/user.go \ + $(os_user_decls_file) go_path_filepath_files = \ go/path/filepath/match.go \ diff --git a/libgo/Makefile.in b/libgo/Makefile.in index ca9df103620..cf93938379b 100644 --- a/libgo/Makefile.in +++ b/libgo/Makefile.in @@ -1670,10 +1670,13 @@ go_os_signal_files = \ go/os/signal/signal.go \ go/os/signal/signal_unix.go +@LIBGO_IS_SOLARIS_FALSE@os_user_decls_file = go/os/user/decls_unix.go +@LIBGO_IS_SOLARIS_TRUE@os_user_decls_file = go/os/user/decls_solaris.go go_os_user_files = \ - go/os/user/user.go \ go/os/user/lookup.go \ - go/os/user/lookup_unix.go + go/os/user/lookup_unix.go \ + go/os/user/user.go \ + $(os_user_decls_file) go_path_filepath_files = \ go/path/filepath/match.go \ diff --git a/libgo/configure b/libgo/configure index 46bb6066fb3..a5439ebd848 100755 --- a/libgo/configure +++ b/libgo/configure @@ -647,6 +647,8 @@ LIBGO_IS_MIPS_FALSE LIBGO_IS_MIPS_TRUE LIBGO_IS_M68K_FALSE LIBGO_IS_M68K_TRUE +LIBGO_IS_ARM64_FALSE +LIBGO_IS_ARM64_TRUE LIBGO_IS_ARM_FALSE LIBGO_IS_ARM_TRUE LIBGO_IS_ALPHA_FALSE @@ -11113,7 +11115,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11116 "configure" +#line 11118 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11219,7 +11221,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11222 "configure" +#line 11224 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -13592,6 +13594,7 @@ esac is_386=no is_alpha=no is_arm=no +is_arm64=no is_m68k=no mips_abi=unknown is_ppc=no @@ -13605,6 +13608,10 @@ case ${host} in is_alpha=yes GOARCH=alpha ;; + aarch64-*-*) + is_arm64=yes + GOARCH=arm64 + ;; arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) is_arm=yes GOARCH=arm @@ -13756,6 +13763,14 @@ else LIBGO_IS_ARM_FALSE= fi + if test $is_arm64 = yes; then + LIBGO_IS_ARM64_TRUE= + LIBGO_IS_ARM64_FALSE='#' +else + LIBGO_IS_ARM64_TRUE='#' + LIBGO_IS_ARM64_FALSE= +fi + if test $is_m68k = yes; then LIBGO_IS_M68K_TRUE= LIBGO_IS_M68K_FALSE='#' @@ -15538,6 +15553,10 @@ if test -z "${LIBGO_IS_ARM_TRUE}" && test -z "${LIBGO_IS_ARM_FALSE}"; then as_fn_error "conditional \"LIBGO_IS_ARM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBGO_IS_ARM64_TRUE}" && test -z "${LIBGO_IS_ARM64_FALSE}"; then + as_fn_error "conditional \"LIBGO_IS_ARM64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${LIBGO_IS_M68K_TRUE}" && test -z "${LIBGO_IS_M68K_FALSE}"; then as_fn_error "conditional \"LIBGO_IS_M68K\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 diff --git a/libgo/configure.ac b/libgo/configure.ac index b43a1580749..dc1f9082a0a 100644 --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -174,6 +174,7 @@ dnl N.B. Keep in sync with gcc/testsuite/go.test/go-test.exp (go-set-goarch). is_386=no is_alpha=no is_arm=no +is_arm64=no is_m68k=no mips_abi=unknown is_ppc=no @@ -187,6 +188,10 @@ case ${host} in is_alpha=yes GOARCH=alpha ;; + aarch64-*-*) + is_arm64=yes + GOARCH=arm64 + ;; arm*-*-* | strongarm*-*-* | ep9312*-*-* | xscale-*-*) is_arm=yes GOARCH=arm @@ -267,6 +272,7 @@ esac AM_CONDITIONAL(LIBGO_IS_386, test $is_386 = yes) AM_CONDITIONAL(LIBGO_IS_ALPHA, test $is_alpha = yes) AM_CONDITIONAL(LIBGO_IS_ARM, test $is_arm = yes) +AM_CONDITIONAL(LIBGO_IS_ARM64, test $is_arm64 = yes) AM_CONDITIONAL(LIBGO_IS_M68K, test $is_m68k = yes) AM_CONDITIONAL(LIBGO_IS_MIPS, test $mips_abi != unknown) AM_CONDITIONAL(LIBGO_IS_MIPSO32, test $mips_abi = o32) diff --git a/libgo/go/go/build/build.go b/libgo/go/go/build/build.go index 50d2fb4aeba..d06a9be5312 100644 --- a/libgo/go/go/build/build.go +++ b/libgo/go/go/build/build.go @@ -1211,6 +1211,8 @@ func ArchChar(goarch string) (string, error) { return "6", nil case "arm": return "5", nil + case "arm64": + return "7", nil } return "", errors.New("unsupported GOARCH " + goarch) } diff --git a/libgo/go/go/build/deps_test.go b/libgo/go/go/build/deps_test.go index dd162c7db7f..88f3eca4ed2 100644 --- a/libgo/go/go/build/deps_test.go +++ b/libgo/go/go/build/deps_test.go @@ -360,7 +360,7 @@ func allowed(pkg string) map[string]bool { var bools = []bool{false, true} var geese = []string{"darwin", "dragonfly", "freebsd", "linux", "netbsd", "openbsd", "plan9", "windows"} -var goarches = []string{"386", "amd64", "arm"} +var goarches = []string{"386", "amd64", "arm", "arm64"} type osPkg struct { goos, pkg string diff --git a/libgo/go/go/build/syslist.go b/libgo/go/go/build/syslist.go index a322c88c427..3580d823b08 100644 --- a/libgo/go/go/build/syslist.go +++ b/libgo/go/go/build/syslist.go @@ -5,4 +5,4 @@ package build const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris " -const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 " +const goarchList = "386 amd64 arm arm64 alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 " diff --git a/libgo/go/os/user/decls_solaris.go b/libgo/go/os/user/decls_solaris.go new file mode 100644 index 00000000000..788a00f0661 --- /dev/null +++ b/libgo/go/os/user/decls_solaris.go @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris +// +build cgo + +package user + +import "syscall" + +// Declarations for the libc functions on Solaris. + +//extern __posix_getpwnam_r +func libc_getpwnam_r(name *byte, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int + +//extern __posix_getpwuid_r +func libc_getpwuid_r(uid syscall.Uid_t, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int diff --git a/libgo/go/os/user/decls_unix.go b/libgo/go/os/user/decls_unix.go new file mode 100644 index 00000000000..f76e4c9bdfc --- /dev/null +++ b/libgo/go/os/user/decls_unix.go @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd +// +build cgo + +package user + +import "syscall" + +// Declarations for the libc functions on most Unix systems. + +//extern getpwnam_r +func libc_getpwnam_r(name *byte, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int + +//extern getpwuid_r +func libc_getpwuid_r(uid syscall.Uid_t, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int diff --git a/libgo/go/os/user/lookup_unix.go b/libgo/go/os/user/lookup_unix.go index eca97a63d6b..2d309ed3330 100644 --- a/libgo/go/os/user/lookup_unix.go +++ b/libgo/go/os/user/lookup_unix.go @@ -27,12 +27,6 @@ static int mygetpwuid_r(int uid, struct passwd *pwd, } */ -//extern getpwnam_r -func libc_getpwnam_r(name *byte, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int - -//extern getpwuid_r -func libc_getpwuid_r(uid syscall.Uid_t, pwd *syscall.Passwd, buf *byte, buflen syscall.Size_t, result **syscall.Passwd) int - // bytePtrToString takes a NUL-terminated array of bytes and convert // it to a Go string. func bytePtrToString(p *byte) string { diff --git a/libgo/go/runtime/extern.go b/libgo/go/runtime/extern.go index 527e9cdf89c..f45104fcfc2 100644 --- a/libgo/go/runtime/extern.go +++ b/libgo/go/runtime/extern.go @@ -185,5 +185,5 @@ func Version() string { const GOOS string = theGoos // GOARCH is the running program's architecture target: -// 386, amd64, or arm. +// 386, amd64, arm or arm64. const GOARCH string = theGoarch diff --git a/libgo/runtime/malloc.goc b/libgo/runtime/malloc.goc index b8b4a2dc373..a06dd11811f 100644 --- a/libgo/runtime/malloc.goc +++ b/libgo/runtime/malloc.goc @@ -637,8 +637,7 @@ runtime_settype_flush(M *mp) // (Manually inlined copy of runtime_MHeap_Lookup) p = (uintptr)v>>PageShift; - if(sizeof(void*) == 8) - p -= (uintptr)runtime_mheap.arena_start >> PageShift; + p -= (uintptr)runtime_mheap.arena_start >> PageShift; s = runtime_mheap.spans[p]; if(s->sizeclass == 0) { diff --git a/libgo/runtime/mgc0.c b/libgo/runtime/mgc0.c index 865f1930489..8ceece37b5a 100644 --- a/libgo/runtime/mgc0.c +++ b/libgo/runtime/mgc0.c @@ -269,8 +269,7 @@ markonly(void *obj) // (Manually inlined copy of MHeap_LookupMaybe.) k = (uintptr)obj>>PageShift; x = k; - if(sizeof(void*) == 8) - x -= (uintptr)runtime_mheap.arena_start>>PageShift; + x -= (uintptr)runtime_mheap.arena_start>>PageShift; s = runtime_mheap.spans[x]; if(s == nil || k < s->start || (byte*)obj >= s->limit || s->state != MSpanInUse) return false; @@ -453,8 +452,7 @@ flushptrbuf(PtrTarget *ptrbuf, PtrTarget **ptrbufpos, Obj **_wp, Workbuf **_wbuf // (Manually inlined copy of MHeap_LookupMaybe.) k = (uintptr)obj>>PageShift; x = k; - if(sizeof(void*) == 8) - x -= (uintptr)arena_start>>PageShift; + x -= (uintptr)arena_start>>PageShift; s = runtime_mheap.spans[x]; if(s == nil || k < s->start || obj >= s->limit || s->state != MSpanInUse) continue; @@ -501,8 +499,7 @@ flushptrbuf(PtrTarget *ptrbuf, PtrTarget **ptrbufpos, Obj **_wp, Workbuf **_wbuf // Ask span about size class. // (Manually inlined copy of MHeap_Lookup.) x = (uintptr)obj >> PageShift; - if(sizeof(void*) == 8) - x -= (uintptr)arena_start>>PageShift; + x -= (uintptr)arena_start>>PageShift; s = runtime_mheap.spans[x]; PREFETCH(obj); @@ -617,8 +614,7 @@ checkptr(void *obj, uintptr objti) if(t == nil) return; x = (uintptr)obj >> PageShift; - if(sizeof(void*) == 8) - x -= (uintptr)(runtime_mheap.arena_start)>>PageShift; + x -= (uintptr)(runtime_mheap.arena_start)>>PageShift; s = runtime_mheap.spans[x]; objstart = (byte*)((uintptr)s->start<<PageShift); if(s->sizeclass != 0) { diff --git a/libgo/runtime/mheap.c b/libgo/runtime/mheap.c index 62070f37943..fee493c1367 100644 --- a/libgo/runtime/mheap.c +++ b/libgo/runtime/mheap.c @@ -73,8 +73,7 @@ runtime_MHeap_MapSpans(MHeap *h) // Map spans array, PageSize at a time. n = (uintptr)h->arena_used; - if(sizeof(void*) == 8) - n -= (uintptr)h->arena_start; + n -= (uintptr)h->arena_start; n = n / PageSize * sizeof(h->spans[0]); n = ROUND(n, PageSize); pagesize = getpagesize(); @@ -170,8 +169,7 @@ HaveSpan: runtime_MSpan_Init(t, s->start + npage, s->npages - npage); s->npages = npage; p = t->start; - if(sizeof(void*) == 8) - p -= ((uintptr)h->arena_start>>PageShift); + p -= ((uintptr)h->arena_start>>PageShift); if(p > 0) h->spans[p-1] = s; h->spans[p] = t; @@ -189,8 +187,7 @@ HaveSpan: s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]); s->types.compression = MTypes_Empty; p = s->start; - if(sizeof(void*) == 8) - p -= ((uintptr)h->arena_start>>PageShift); + p -= ((uintptr)h->arena_start>>PageShift); for(n=0; n<npage; n++) h->spans[p+n] = s; return s; @@ -258,8 +255,7 @@ MHeap_Grow(MHeap *h, uintptr npage) s = runtime_FixAlloc_Alloc(&h->spanalloc); runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift); p = s->start; - if(sizeof(void*) == 8) - p -= ((uintptr)h->arena_start>>PageShift); + p -= ((uintptr)h->arena_start>>PageShift); h->spans[p] = s; h->spans[p + s->npages - 1] = s; s->state = MSpanInUse; @@ -276,8 +272,7 @@ runtime_MHeap_Lookup(MHeap *h, void *v) uintptr p; p = (uintptr)v; - if(sizeof(void*) == 8) - p -= (uintptr)h->arena_start; + p -= (uintptr)h->arena_start; return h->spans[p >> PageShift]; } @@ -298,8 +293,7 @@ runtime_MHeap_LookupMaybe(MHeap *h, void *v) return nil; p = (uintptr)v>>PageShift; q = p; - if(sizeof(void*) == 8) - q -= (uintptr)h->arena_start >> PageShift; + q -= (uintptr)h->arena_start >> PageShift; s = h->spans[q]; if(s == nil || p < s->start || (byte*)v >= s->limit || s->state != MSpanInUse) return nil; @@ -346,8 +340,7 @@ MHeap_FreeLocked(MHeap *h, MSpan *s) // Coalesce with earlier, later spans. p = s->start; - if(sizeof(void*) == 8) - p -= (uintptr)h->arena_start >> PageShift; + p -= (uintptr)h->arena_start >> PageShift; if(p > 0 && (t = h->spans[p-1]) != nil && t->state != MSpanInUse) { if(t->npreleased == 0) { // cant't touch this otherwise tp = (uintptr*)(t->start<<PageShift); diff --git a/libgo/runtime/netpoll_select.c b/libgo/runtime/netpoll_select.c index c330f28418f..788d19f6190 100644 --- a/libgo/runtime/netpoll_select.c +++ b/libgo/runtime/netpoll_select.c @@ -118,10 +118,15 @@ runtime_netpollclose(uintptr fd) return 0; } +/* Used to avoid using too much stack memory. */ +static bool inuse; +static fd_set grfds, gwfds, gefds, gtfds; + G* runtime_netpoll(bool block) { - fd_set rfds, wfds, efds, tfds; + fd_set *prfds, *pwfds, *pefds, *ptfds; + bool allocatedfds; struct timeval timeout; struct timeval *pt; int max, c, i; @@ -140,37 +145,52 @@ runtime_netpoll(bool block) return nil; } - __builtin_memcpy(&rfds, &fds, sizeof fds); + if(inuse) { + prfds = runtime_SysAlloc(4 * sizeof fds, &mstats.other_sys); + pwfds = prfds + 1; + pefds = pwfds + 1; + ptfds = pefds + 1; + allocatedfds = true; + } else { + prfds = &grfds; + pwfds = &gwfds; + pefds = &gefds; + ptfds = >fds; + inuse = true; + allocatedfds = false; + } + + __builtin_memcpy(prfds, &fds, sizeof fds); runtime_unlock(&selectlock); - __builtin_memcpy(&wfds, &rfds, sizeof fds); - FD_CLR(rdwake, &wfds); - __builtin_memcpy(&efds, &wfds, sizeof fds); + __builtin_memcpy(pwfds, prfds, sizeof fds); + FD_CLR(rdwake, pwfds); + __builtin_memcpy(pefds, pwfds, sizeof fds); - __builtin_memcpy(&tfds, &wfds, sizeof fds); + __builtin_memcpy(ptfds, pwfds, sizeof fds); __builtin_memset(&timeout, 0, sizeof timeout); pt = &timeout; if(block) pt = nil; - c = select(max, &rfds, &wfds, &efds, pt); + c = select(max, prfds, pwfds, pefds, pt); if(c < 0) { if(errno == EBADF) { // Some file descriptor has been closed. // Check each one, and treat each closed // descriptor as ready for read/write. c = 0; - FD_ZERO(&rfds); - FD_ZERO(&wfds); - FD_ZERO(&efds); + FD_ZERO(prfds); + FD_ZERO(pwfds); + FD_ZERO(pefds); for(i = 0; i < max; i++) { - if(FD_ISSET(i, &tfds) + if(FD_ISSET(i, ptfds) && fstat(i, &st) < 0 && errno == EBADF) { - FD_SET(i, &rfds); - FD_SET(i, &wfds); + FD_SET(i, prfds); + FD_SET(i, pwfds); c += 2; } } @@ -184,15 +204,15 @@ runtime_netpoll(bool block) gp = nil; for(i = 0; i < max && c > 0; i++) { mode = 0; - if(FD_ISSET(i, &rfds)) { + if(FD_ISSET(i, prfds)) { mode += 'r'; --c; } - if(FD_ISSET(i, &wfds)) { + if(FD_ISSET(i, pwfds)) { mode += 'w'; --c; } - if(FD_ISSET(i, &efds)) { + if(FD_ISSET(i, pefds)) { mode = 'r' + 'w'; --c; } @@ -213,6 +233,15 @@ runtime_netpoll(bool block) } if(block && gp == nil) goto retry; + + if(allocatedfds) { + runtime_SysFree(prfds, 4 * sizeof fds, &mstats.other_sys); + } else { + runtime_lock(&selectlock); + inuse = false; + runtime_unlock(&selectlock); + } + return gp; } diff --git a/libgo/runtime/runtime.c b/libgo/runtime/runtime.c index 8fbc916fcfa..1a7c3c7219c 100644 --- a/libgo/runtime/runtime.c +++ b/libgo/runtime/runtime.c @@ -58,11 +58,6 @@ runtime_progname() return argc == 0 ? nil : argv[0]; } -// Information about what cpu features are available. -// Set on startup in asm_{x86/amd64}.s. -uint32 runtime_cpuid_ecx; -uint32 runtime_cpuid_edx; - void runtime_goargs(void) { diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 1e8d0fe6638..ad0b1bdfebe 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,26 @@ +2014-01-06 Mike Frysinger <vapier@gentoo.org> + + PR other/56780 + * configure.ac: Delete target_header_dir assignment. + * configure: Regenerated. + +2014-01-06 Gary Benson <gbenson@redhat.com> + + * cp-demangle.c (struct d_print_info): New fields + next_saved_scope, copy_templates, next_copy_template and + num_copy_templates. + (d_count_templates): New function. + (d_print_init): New parameter "dc". + Estimate numbers of templates and scopes required. + (d_print_free): Removed function. + (cplus_demangle_print_callback): Allocate stack for + templates and scopes. Removed call to d_print_free. + (d_copy_templates): Removed function. + (d_save_scope): New function. + (d_get_saved_scope): Likewise. + (d_print_comp): Replace state saving/restoring code with + calls to d_save_scope and d_get_saved_scope. + 2013-12-23 Bill Maddox <maddox@google.com> * cp-demangle.c (cplus_demangle_fill_ctor,cplus_demangle_fill_dtor): diff --git a/libiberty/configure b/libiberty/configure index 8ea54da6613..7bde9b38f19 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -5510,7 +5510,6 @@ fi setobjs= CHECK= -target_header_dir= if test -n "${with_target_subdir}"; then # We are being configured as a target library. AC_REPLACE_FUNCS diff --git a/libiberty/configure.ac b/libiberty/configure.ac index 4ad88a984d7..d6180bcddd9 100644 --- a/libiberty/configure.ac +++ b/libiberty/configure.ac @@ -411,7 +411,6 @@ fi setobjs= CHECK= -target_header_dir= if test -n "${with_target_subdir}"; then # We are being configured as a target library. AC_REPLACE_FUNCS diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c index 7f51268e115..bf2ffa95a8d 100644 --- a/libiberty/cp-demangle.c +++ b/libiberty/cp-demangle.c @@ -329,8 +329,16 @@ struct d_print_info unsigned long int flush_count; /* Array of saved scopes for evaluating substitutions. */ struct d_saved_scope *saved_scopes; + /* Index of the next unused saved scope in the above array. */ + int next_saved_scope; /* Number of saved scopes in the above array. */ int num_saved_scopes; + /* Array of templates for saving into scopes. */ + struct d_print_template *copy_templates; + /* Index of the next unused copy template in the above array. */ + int next_copy_template; + /* Number of copy templates in the above array. */ + int num_copy_templates; /* The nearest enclosing template, if any. */ const struct demangle_component *current_template; }; @@ -475,7 +483,8 @@ static void d_growable_string_callback_adapter (const char *, size_t, void *); static void -d_print_init (struct d_print_info *, demangle_callbackref, void *); +d_print_init (struct d_print_info *, demangle_callbackref, void *, + const struct demangle_component *); static inline void d_print_error (struct d_print_info *); @@ -3777,11 +3786,141 @@ d_growable_string_callback_adapter (const char *s, size_t l, void *opaque) d_growable_string_append_buffer (dgs, s, l); } +/* Walk the tree, counting the number of templates encountered, and + the number of times a scope might be saved. These counts will be + used to allocate data structures for d_print_comp, so the logic + here must mirror the logic d_print_comp will use. It is not + important that the resulting numbers are exact, so long as they + are larger than the actual numbers encountered. */ + +static void +d_count_templates_scopes (int *num_templates, int *num_scopes, + const struct demangle_component *dc) +{ + if (dc == NULL) + return; + + switch (dc->type) + { + case DEMANGLE_COMPONENT_NAME: + case DEMANGLE_COMPONENT_TEMPLATE_PARAM: + case DEMANGLE_COMPONENT_FUNCTION_PARAM: + case DEMANGLE_COMPONENT_SUB_STD: + case DEMANGLE_COMPONENT_BUILTIN_TYPE: + case DEMANGLE_COMPONENT_OPERATOR: + case DEMANGLE_COMPONENT_CHARACTER: + case DEMANGLE_COMPONENT_NUMBER: + case DEMANGLE_COMPONENT_UNNAMED_TYPE: + break; + + case DEMANGLE_COMPONENT_TEMPLATE: + (*num_templates)++; + goto recurse_left_right; + + case DEMANGLE_COMPONENT_REFERENCE: + case DEMANGLE_COMPONENT_RVALUE_REFERENCE: + if (d_left (dc)->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM) + (*num_scopes)++; + goto recurse_left_right; + + case DEMANGLE_COMPONENT_QUAL_NAME: + case DEMANGLE_COMPONENT_LOCAL_NAME: + case DEMANGLE_COMPONENT_TYPED_NAME: + case DEMANGLE_COMPONENT_VTABLE: + case DEMANGLE_COMPONENT_VTT: + case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE: + case DEMANGLE_COMPONENT_TYPEINFO: + case DEMANGLE_COMPONENT_TYPEINFO_NAME: + case DEMANGLE_COMPONENT_TYPEINFO_FN: + case DEMANGLE_COMPONENT_THUNK: + case DEMANGLE_COMPONENT_VIRTUAL_THUNK: + case DEMANGLE_COMPONENT_COVARIANT_THUNK: + case DEMANGLE_COMPONENT_JAVA_CLASS: + case DEMANGLE_COMPONENT_GUARD: + case DEMANGLE_COMPONENT_TLS_INIT: + case DEMANGLE_COMPONENT_TLS_WRAPPER: + case DEMANGLE_COMPONENT_REFTEMP: + case DEMANGLE_COMPONENT_HIDDEN_ALIAS: + case DEMANGLE_COMPONENT_RESTRICT: + case DEMANGLE_COMPONENT_VOLATILE: + case DEMANGLE_COMPONENT_CONST: + case DEMANGLE_COMPONENT_RESTRICT_THIS: + case DEMANGLE_COMPONENT_VOLATILE_THIS: + case DEMANGLE_COMPONENT_CONST_THIS: + case DEMANGLE_COMPONENT_REFERENCE_THIS: + case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS: + case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL: + case DEMANGLE_COMPONENT_POINTER: + case DEMANGLE_COMPONENT_COMPLEX: + case DEMANGLE_COMPONENT_IMAGINARY: + case DEMANGLE_COMPONENT_VENDOR_TYPE: + case DEMANGLE_COMPONENT_FUNCTION_TYPE: + case DEMANGLE_COMPONENT_ARRAY_TYPE: + case DEMANGLE_COMPONENT_PTRMEM_TYPE: + case DEMANGLE_COMPONENT_FIXED_TYPE: + case DEMANGLE_COMPONENT_VECTOR_TYPE: + case DEMANGLE_COMPONENT_ARGLIST: + case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST: + case DEMANGLE_COMPONENT_INITIALIZER_LIST: + case DEMANGLE_COMPONENT_CAST: + case DEMANGLE_COMPONENT_NULLARY: + case DEMANGLE_COMPONENT_UNARY: + case DEMANGLE_COMPONENT_BINARY: + case DEMANGLE_COMPONENT_BINARY_ARGS: + case DEMANGLE_COMPONENT_TRINARY: + case DEMANGLE_COMPONENT_TRINARY_ARG1: + case DEMANGLE_COMPONENT_TRINARY_ARG2: + case DEMANGLE_COMPONENT_LITERAL: + case DEMANGLE_COMPONENT_LITERAL_NEG: + case DEMANGLE_COMPONENT_JAVA_RESOURCE: + case DEMANGLE_COMPONENT_COMPOUND_NAME: + case DEMANGLE_COMPONENT_DECLTYPE: + case DEMANGLE_COMPONENT_TRANSACTION_CLONE: + case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE: + case DEMANGLE_COMPONENT_PACK_EXPANSION: + case DEMANGLE_COMPONENT_TAGGED_NAME: + case DEMANGLE_COMPONENT_CLONE: + recurse_left_right: + d_count_templates_scopes (num_templates, num_scopes, + d_left (dc)); + d_count_templates_scopes (num_templates, num_scopes, + d_right (dc)); + break; + + case DEMANGLE_COMPONENT_CTOR: + d_count_templates_scopes (num_templates, num_scopes, + dc->u.s_ctor.name); + break; + + case DEMANGLE_COMPONENT_DTOR: + d_count_templates_scopes (num_templates, num_scopes, + dc->u.s_dtor.name); + break; + + case DEMANGLE_COMPONENT_EXTENDED_OPERATOR: + d_count_templates_scopes (num_templates, num_scopes, + dc->u.s_extended_operator.name); + break; + + case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS: + case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS: + d_count_templates_scopes (num_templates, num_scopes, + d_left (dc)); + break; + + case DEMANGLE_COMPONENT_LAMBDA: + case DEMANGLE_COMPONENT_DEFAULT_ARG: + d_count_templates_scopes (num_templates, num_scopes, + dc->u.s_unary_num.sub); + break; + } +} + /* Initialize a print information structure. */ static void d_print_init (struct d_print_info *dpi, demangle_callbackref callback, - void *opaque) + void *opaque, const struct demangle_component *dc) { dpi->len = 0; dpi->last_char = '\0'; @@ -3796,29 +3935,18 @@ d_print_init (struct d_print_info *dpi, demangle_callbackref callback, dpi->demangle_failure = 0; dpi->saved_scopes = NULL; + dpi->next_saved_scope = 0; dpi->num_saved_scopes = 0; - dpi->current_template = NULL; -} - -/* Free a print information structure. */ - -static void -d_print_free (struct d_print_info *dpi) -{ - int i; - for (i = 0; i < dpi->num_saved_scopes; i++) - { - struct d_print_template *ts, *tn; + dpi->copy_templates = NULL; + dpi->next_copy_template = 0; + dpi->num_copy_templates = 0; - for (ts = dpi->saved_scopes[i].templates; ts != NULL; ts = tn) - { - tn = ts->next; - free (ts); - } - } + d_count_templates_scopes (&dpi->num_copy_templates, + &dpi->num_saved_scopes, dc); + dpi->num_copy_templates *= dpi->num_saved_scopes; - free (dpi->saved_scopes); + dpi->current_template = NULL; } /* Indicate that an error occurred during printing, and test for error. */ @@ -3903,17 +4031,29 @@ cplus_demangle_print_callback (int options, demangle_callbackref callback, void *opaque) { struct d_print_info dpi; - int success; - d_print_init (&dpi, callback, opaque); + d_print_init (&dpi, callback, opaque, dc); + + { +#ifdef CP_DYNAMIC_ARRAYS + __extension__ struct d_saved_scope scopes[dpi.num_saved_scopes]; + __extension__ struct d_print_template temps[dpi.num_copy_templates]; + + dpi.saved_scopes = scopes; + dpi.copy_templates = temps; +#else + dpi.saved_scopes = alloca (dpi.num_saved_scopes + * sizeof (*dpi.saved_scopes)); + dpi.copy_templates = alloca (dpi.num_copy_templates + * sizeof (*dpi.copy_templates)); +#endif - d_print_comp (&dpi, options, dc); + d_print_comp (&dpi, options, dc); + } d_print_flush (&dpi); - success = ! d_print_saw_error (&dpi); - d_print_free (&dpi); - return success; + return ! d_print_saw_error (&dpi); } /* Turn components into a human readable string. OPTIONS is the @@ -4070,25 +4210,37 @@ d_print_subexpr (struct d_print_info *dpi, int options, d_append_char (dpi, ')'); } -/* Return a shallow copy of the current list of templates. - On error d_print_error is called and a partial list may - be returned. Whatever is returned must be freed. */ +/* Save the current scope. */ -static struct d_print_template * -d_copy_templates (struct d_print_info *dpi) +static void +d_save_scope (struct d_print_info *dpi, + const struct demangle_component *container) { - struct d_print_template *src, *result, **link = &result; + struct d_saved_scope *scope; + struct d_print_template *src, **link; + + if (dpi->next_saved_scope >= dpi->num_saved_scopes) + { + d_print_error (dpi); + return; + } + scope = &dpi->saved_scopes[dpi->next_saved_scope]; + dpi->next_saved_scope++; + + scope->container = container; + link = &scope->templates; for (src = dpi->templates; src != NULL; src = src->next) { - struct d_print_template *dst = - (struct d_print_template *) malloc (sizeof (struct d_print_template)); + struct d_print_template *dst; - if (dst == NULL) + if (dpi->next_copy_template >= dpi->num_copy_templates) { d_print_error (dpi); - break; + return; } + dst = &dpi->copy_templates[dpi->next_copy_template]; + dpi->next_copy_template++; dst->template_decl = src->template_decl; *link = dst; @@ -4096,8 +4248,22 @@ d_copy_templates (struct d_print_info *dpi) } *link = NULL; +} + +/* Attempt to locate a previously saved scope. Returns NULL if no + corresponding saved scope was found. */ + +static struct d_saved_scope * +d_get_saved_scope (struct d_print_info *dpi, + const struct demangle_component *container) +{ + int i; - return result; + for (i = 0; i < dpi->next_saved_scope; i++) + if (dpi->saved_scopes[i].container == container) + return &dpi->saved_scopes[i]; + + return NULL; } /* Subroutine to handle components. */ @@ -4492,37 +4658,16 @@ d_print_comp (struct d_print_info *dpi, int options, const struct demangle_component *sub = d_left (dc); if (sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM) { + struct d_saved_scope *scope = d_get_saved_scope (dpi, sub); struct demangle_component *a; - struct d_saved_scope *scope = NULL, *scopes; - int i; - - for (i = 0; i < dpi->num_saved_scopes; i++) - if (dpi->saved_scopes[i].container == sub) - scope = &dpi->saved_scopes[i]; if (scope == NULL) { - size_t size; - /* This is the first time SUB has been traversed. We need to capture the current templates so they can be restored if SUB is reentered as a substitution. */ - ++dpi->num_saved_scopes; - size = sizeof (struct d_saved_scope) * dpi->num_saved_scopes; - scopes = (struct d_saved_scope *) realloc (dpi->saved_scopes, - size); - if (scopes == NULL) - { - d_print_error (dpi); - return; - } - - dpi->saved_scopes = scopes; - scope = dpi->saved_scopes + (dpi->num_saved_scopes - 1); - - scope->container = sub; - scope->templates = d_copy_templates (dpi); + d_save_scope (dpi, sub); if (d_print_saw_error (dpi)) return; } diff --git a/libsanitizer/ChangeLog b/libsanitizer/ChangeLog index bc582f47f03..30a26bcd4ef 100644 --- a/libsanitizer/ChangeLog +++ b/libsanitizer/ChangeLog @@ -1,3 +1,79 @@ +2014-01-09 Jakub Jelinek <jakub@redhat.com> + + * sanitizer_common/sanitizer_symbolizer_libbacktrace.h + (LibbacktraceSymbolizer::Demangle): New declaration. + * sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc + (POSIXSymbolizer::Demangle): Use libbacktrace_symbolizer_'s Demangle + method if possible. + * sanitizer_common/sanitizer_symbolizer_libbacktrace.cc: Include + "demangle.h" if SANITIZE_CP_DEMANGLE is defined. + (struct CplusV3DemangleData): New type. + (CplusV3DemangleCallback, CplusV3Demangle): New functions. + (SymbolizeCodePCInfoCallback, SymbolizeCodeCallback, + SymbolizeDataCallback): Use CplusV3Demangle. + * sanitizer_common/Makefile.am (AM_CXXFLAGS): Add + -DSANITIZE_CP_DEMANGLE and -I $(top_srcdir)/../include. + * libbacktrace/backtrace-rename.h (cplus_demangle_builtin_types, + cplus_demangle_fill_ctor, cplus_demangle_fill_dtor, + cplus_demangle_fill_extended_operator, cplus_demangle_fill_name, + cplus_demangle_init_info, cplus_demangle_mangled_name, + cplus_demangle_operators, cplus_demangle_print, + cplus_demangle_print_callback, cplus_demangle_type, cplus_demangle_v3, + cplus_demangle_v3_callback, is_gnu_v3_mangled_ctor, + is_gnu_v3_mangled_dtor, java_demangle_v3, java_demangle_v3_callback): + Define. + (__asan_internal_memcmp, __asan_internal_strncmp): New prototypes. + (memcmp, strncmp): Redefine. + * libbacktrace/Makefile.am (libsanitizer_libbacktrace_la_SOURCES): Add + ../../libiberty/cp-demangle.c. + * libbacktrace/bridge.cc (__asan_internal_memcmp, + __asan_internal_strncmp): New functions. + * sanitizer_common/Makefile.in: Regenerated. + * libbacktrace/Makefile.in: Regenerated. + * configure: Regenerated. + * configure.ac: Regenerated. + * config.h.in: Regenerated. + + * sanitizer_common/Makefile.am (AM_CPPFLAGS): Add + -isystem $(top_srcdir)/include/system. + * sanitizer_common/Makefile.in: Regenerated. + * include/system/linux/aio_abi.h: New header. + * include/system/linux/mroute.h: New header. + * include/system/linux/mroute6.h: New header. + * include/system/linux/perf_event.h: New header. + * include/system/linux/types.h: New header. + + PR sanitizer/59136 + * sanitizer_common/Makefile.am (AM_CXXFLAGS): If + LIBBACKTRACE_SUPPORTED add -DSANITIZER_LIBBACKTRACE + and -I/-include flags. + * lsan/Makefile.am (liblsan_la_LIBADD): Add + libsanitizer_libbacktrace.la if LIBBACKTRACE_SUPPORTED. + * tsan/Makefile.am (libtsan_la_LIBADD): Likewise. + * ubsan/Makefile.am (libubsan_la_LIBADD): Likewise. + * asan/Makefile.am (libasan_la_LIBADD): Likewise. + * Makefile.am (SUBDIRS): If LIBBACKTRACE_SUPPORTED add + libbacktrace. + * README.gcc: Document that also lsan and ubsan are + maintained in compiler-rt upstream. + * libbacktrace/Makefile.am: New file. + * libbacktrace/backtrace-rename.h: New file. + * libbacktrace/backtrace-supported.h.in: New file. + * libbacktrace/bridge.cc: New file. + * configure.ac: Add tests needed for libbacktrace build + within libsanitizer. + * sanitizer_common/Makefile.in: Regenerated. + * lsan/Makefile.in: Regenerated. + * tsan/Makefile.in: Regenerated. + * ubsan/Makefile.in: Regenerated. + * libbacktrace/Makefile.in: Generated. + * config.h.in: Regenerated. + * configure: Regenerated. + * Makefile.in: Regenerated. + * interception/Makefile.in: Regenerated. + * asan/Makefile.in: Regenerated. + * aclocal.m4: Regenerated. + 2013-12-19 Kostya Serebryany <kcc@google.com> * sanitizer_common/sanitizer_platform_limits_posix.cc: diff --git a/libsanitizer/Makefile.am b/libsanitizer/Makefile.am index dd0fc80da8b..a17f7b6af86 100644 --- a/libsanitizer/Makefile.am +++ b/libsanitizer/Makefile.am @@ -1,13 +1,15 @@ ACLOCAL_AMFLAGS = -I .. -I ../config -if TSAN_SUPPORTED -SUBDIRS = interception sanitizer_common lsan asan tsan ubsan -else -SUBDIRS = interception sanitizer_common lsan asan ubsan +SUBDIRS = sanitizer_common +if !USING_MAC_INTERPOSE +SUBDIRS += interception endif - -if USING_MAC_INTERPOSE -SUBDIRS = sanitizer_common lsan asan ubsan +if LIBBACKTRACE_SUPPORTED +SUBDIRS += libbacktrace +endif +SUBDIRS += lsan asan ubsan +if TSAN_SUPPORTED +SUBDIRS += tsan endif ## May be used by toolexeclibdir. diff --git a/libsanitizer/Makefile.in b/libsanitizer/Makefile.in index d32859e77a7..5a33e0ec529 100644 --- a/libsanitizer/Makefile.in +++ b/libsanitizer/Makefile.in @@ -35,10 +35,14 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@USING_MAC_INTERPOSE_FALSE@am__append_1 = interception +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_2 = libbacktrace +@TSAN_SUPPORTED_TRUE@am__append_3 = tsan subdir = . DIST_COMMON = ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/../mkinstalldirs $(srcdir)/libsanitizer.spec.in + $(srcdir)/config.h.in $(srcdir)/../mkinstalldirs \ + $(srcdir)/libsanitizer.spec.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/depstand.m4 \ @@ -46,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -55,6 +60,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = libsanitizer.spec CONFIG_CLEAN_VPATH_FILES = SOURCES = @@ -100,14 +106,19 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS ETAGS = etags CTAGS = ctags -DIST_SUBDIRS = interception sanitizer_common lsan asan ubsan tsan +DIST_SUBDIRS = sanitizer_common interception libbacktrace lsan asan \ + ubsan tsan ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -131,6 +142,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -170,6 +182,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -237,9 +250,8 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I .. -I ../config -@TSAN_SUPPORTED_FALSE@SUBDIRS = interception sanitizer_common lsan asan ubsan -@TSAN_SUPPORTED_TRUE@SUBDIRS = interception sanitizer_common lsan asan tsan ubsan -@USING_MAC_INTERPOSE_TRUE@SUBDIRS = sanitizer_common lsan asan ubsan +SUBDIRS = sanitizer_common $(am__append_1) $(am__append_2) lsan asan \ + ubsan $(am__append_3) gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) # Work around what appears to be a GNU make bug handling MAKEFLAGS @@ -282,7 +294,8 @@ AM_MAKEFLAGS = \ MAKEOVERRIDES = nodist_toolexeclib_HEADERS = libsanitizer.spec -all: all-recursive +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: @@ -319,6 +332,23 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 libsanitizer.spec: $(top_builddir)/config.status $(srcdir)/libsanitizer.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ @@ -448,7 +478,7 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) mkid -fID $$unique tags: TAGS -TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ @@ -465,7 +495,7 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -483,9 +513,9 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ fi; \ fi ctags: CTAGS -CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ @@ -504,7 +534,7 @@ distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-am: all-am check: check-recursive -all-am: Makefile all-multi $(HEADERS) +all-am: Makefile all-multi $(HEADERS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(toolexeclibdir)"; do \ @@ -542,8 +572,8 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-multi distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags dvi: dvi-recursive @@ -605,7 +635,7 @@ ps-am: uninstall-am: uninstall-nodist_toolexeclibHEADERS -.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all-multi \ +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all all-multi \ clean-multi ctags-recursive distclean-multi install-am \ install-multi install-strip maintainer-clean-multi \ mostlyclean-multi tags-recursive @@ -613,15 +643,15 @@ uninstall-am: uninstall-nodist_toolexeclibHEADERS .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am all-multi am--refresh check check-am clean \ clean-generic clean-libtool clean-multi ctags ctags-recursive \ - distclean distclean-generic distclean-libtool distclean-multi \ - distclean-tags dvi dvi-am html html-am info info-am install \ - install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-multi install-nodist_toolexeclibHEADERS install-pdf \ - install-pdf-am install-ps install-ps-am install-strip \ - installcheck installcheck-am installdirs installdirs-am \ - maintainer-clean maintainer-clean-generic \ + distclean distclean-generic distclean-hdr distclean-libtool \ + distclean-multi distclean-tags dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-multi install-nodist_toolexeclibHEADERS \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-multi mostlyclean mostlyclean-generic \ mostlyclean-libtool mostlyclean-multi pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am \ diff --git a/libsanitizer/README.gcc b/libsanitizer/README.gcc index 92759df2eb9..02698eb5c35 100644 --- a/libsanitizer/README.gcc +++ b/libsanitizer/README.gcc @@ -9,6 +9,8 @@ http://llvm.org/svn/llvm-project/compiler-rt in the following directories: lib/interception lib/asan lib/tsan + lib/lsan + lib/ubsan Trivial and urgent fixes (portability, build fixes, etc.) may go directly to the GCC tree. All non-trivial changes, functionality improvements, etc. should go diff --git a/libsanitizer/aclocal.m4 b/libsanitizer/aclocal.m4 index 56fa3de2ce4..fd75bbac9c3 100644 --- a/libsanitizer/aclocal.m4 +++ b/libsanitizer/aclocal.m4 @@ -996,6 +996,7 @@ m4_include([../config/lead-dot.m4]) m4_include([../config/libstdc++-raw-cxx.m4]) m4_include([../config/multi.m4]) m4_include([../config/override.m4]) +m4_include([../config/stdint.m4]) m4_include([../ltoptions.m4]) m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) diff --git a/libsanitizer/asan/Makefile.am b/libsanitizer/asan/Makefile.am index 58defae04b7..3f07a834c69 100644 --- a/libsanitizer/asan/Makefile.am +++ b/libsanitizer/asan/Makefile.am @@ -36,10 +36,12 @@ asan_files = \ asan_win.cc libasan_la_SOURCES = $(asan_files) -if USING_MAC_INTERPOSE libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la -else -libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/lsan/libsanitizer_lsan.la $(top_builddir)/interception/libinterception.la +if !USING_MAC_INTERPOSE +libasan_la_LIBADD += $(top_builddir)/interception/libinterception.la +endif +if LIBBACKTRACE_SUPPORTED +libasan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la endif libasan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS) diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in index e86d7b5b34b..273eb4b2645 100644 --- a/libsanitizer/asan/Makefile.in +++ b/libsanitizer/asan/Makefile.in @@ -37,6 +37,8 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @USING_MAC_INTERPOSE_TRUE@am__append_1 = -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT +@USING_MAC_INTERPOSE_FALSE@am__append_2 = $(top_builddir)/interception/libinterception.la +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_3 = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la subdir = asan DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -46,6 +48,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -53,6 +56,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -80,13 +84,10 @@ am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \ "$(DESTDIR)$(toolexeclibdir)" LTLIBRARIES = $(toolexeclib_LTLIBRARIES) am__DEPENDENCIES_1 = -@USING_MAC_INTERPOSE_FALSE@libasan_la_DEPENDENCIES = $(top_builddir)/sanitizer_common/libsanitizer_common.la \ -@USING_MAC_INTERPOSE_FALSE@ $(top_builddir)/lsan/libsanitizer_lsan.la \ -@USING_MAC_INTERPOSE_FALSE@ $(top_builddir)/interception/libinterception.la \ -@USING_MAC_INTERPOSE_FALSE@ $(am__DEPENDENCIES_1) -@USING_MAC_INTERPOSE_TRUE@libasan_la_DEPENDENCIES = $(top_builddir)/sanitizer_common/libsanitizer_common.la \ -@USING_MAC_INTERPOSE_TRUE@ $(top_builddir)/lsan/libsanitizer_lsan.la \ -@USING_MAC_INTERPOSE_TRUE@ $(am__DEPENDENCIES_1) +libasan_la_DEPENDENCIES = \ + $(top_builddir)/sanitizer_common/libsanitizer_common.la \ + $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \ + $(am__append_3) $(am__DEPENDENCIES_1) am__objects_1 = asan_allocator2.lo asan_dll_thunk.lo \ asan_fake_stack.lo asan_globals.lo asan_interceptors.lo \ asan_linux.lo asan_mac.lo asan_malloc_linux.lo \ @@ -98,7 +99,7 @@ libasan_la_OBJECTS = $(am_libasan_la_OBJECTS) libasan_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libasan_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -116,12 +117,16 @@ HEADERS = $(nodist_toolexeclib_HEADERS) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -148,6 +153,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -187,6 +193,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -286,13 +293,10 @@ asan_files = \ asan_win.cc libasan_la_SOURCES = $(asan_files) -@USING_MAC_INTERPOSE_FALSE@libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la \ -@USING_MAC_INTERPOSE_FALSE@ $(top_builddir)/lsan/libsanitizer_lsan.la \ -@USING_MAC_INTERPOSE_FALSE@ $(top_builddir)/interception/libinterception.la \ -@USING_MAC_INTERPOSE_FALSE@ $(LIBSTDCXX_RAW_CXX_LDFLAGS) -@USING_MAC_INTERPOSE_TRUE@libasan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la \ -@USING_MAC_INTERPOSE_TRUE@ $(top_builddir)/lsan/libsanitizer_lsan.la \ -@USING_MAC_INTERPOSE_TRUE@ $(LIBSTDCXX_RAW_CXX_LDFLAGS) +libasan_la_LIBADD = \ + $(top_builddir)/sanitizer_common/libsanitizer_common.la \ + $(top_builddir)/lsan/libsanitizer_lsan.la $(am__append_2) \ + $(am__append_3) $(LIBSTDCXX_RAW_CXX_LDFLAGS) libasan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libasan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/config.h.in b/libsanitizer/config.h.in new file mode 100644 index 00000000000..e4b2786324e --- /dev/null +++ b/libsanitizer/config.h.in @@ -0,0 +1,151 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* ELF size: 32 or 64 */ +#undef BACKTRACE_ELF_SIZE + +/* Define to 1 if you have the <alloca.h> header file. */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the __atomic functions */ +#undef HAVE_ATOMIC_FUNCTIONS + +/* Define to 1 if you have the `clock_getres' function. */ +#undef HAVE_CLOCK_GETRES + +/* Define to 1 if you have the `clock_gettime' function. */ +#undef HAVE_CLOCK_GETTIME + +/* Define to 1 if you have the `clock_settime' function. */ +#undef HAVE_CLOCK_SETTIME + +/* Define to 1 if you have the declaration of `strnlen', and to 0 if you + don't. */ +#undef HAVE_DECL_STRNLEN + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#undef HAVE_DLFCN_H + +/* Define if dl_iterate_phdr is available. */ +#undef HAVE_DL_ITERATE_PHDR + +/* Define to 1 if you have the fcntl function */ +#undef HAVE_FCNTL + +/* Define if getexecname is available. */ +#undef HAVE_GETEXECNAME + +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the <link.h> header file. */ +#undef HAVE_LINK_H + +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the __sync functions */ +#undef HAVE_SYNC_FUNCTIONS + +/* Define to 1 if you have the <sys/mman.h> header file. */ +#undef HAVE_SYS_MMAN_H + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of `char', as computed by sizeof. */ +#undef SIZEOF_CHAR + +/* The size of `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + +#include "libbacktrace/backtrace-rename.h" diff --git a/libsanitizer/configure b/libsanitizer/configure index 6db2a1fc758..c20735921ef 100755 --- a/libsanitizer/configure +++ b/libsanitizer/configure @@ -171,6 +171,7 @@ test x\$exitcode = x0 || exit 1" as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' @@ -178,8 +179,7 @@ test x\$exitcode = x0 || exit 1" ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -604,6 +604,14 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +LIBBACKTRACE_SUPPORTED_FALSE +LIBBACKTRACE_SUPPORTED_TRUE +BACKTRACE_SUPPORTS_THREADS +BACKTRACE_USES_MALLOC +ALLOC_FILE +VIEW_FILE +BACKTRACE_SUPPORTED +FORMAT_FILE USING_MAC_INTERPOSE_FALSE USING_MAC_INTERPOSE_TRUE link_liblsan @@ -617,13 +625,11 @@ TSAN_SUPPORTED_TRUE enable_static enable_shared CXXCPP -CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL -RANLIB AR OBJDUMP LN_S @@ -632,10 +638,9 @@ ac_ct_DUMPBIN DUMPBIN LD FGREP -EGREP -GREP SED LIBTOOL +RANLIB am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE @@ -647,6 +652,12 @@ CXXDEPMODE ac_ct_CXX CXXFLAGS CXX +toolexeclibdir +toolexecdir +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +multi_basedir am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE @@ -656,19 +667,6 @@ AMDEP_TRUE am__quote am__include DEPDIR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -toolexeclibdir -toolexecdir -MAINT -MAINTAINER_MODE_FALSE -MAINTAINER_MODE_TRUE -multi_basedir am__untar am__tar AMTAR @@ -707,6 +705,16 @@ build_os build_vendor build_cpu build +EGREP +GREP +CPP +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC target_alias host_alias build_alias @@ -749,9 +757,9 @@ ac_subst_files='' ac_user_opts=' enable_option_checking enable_version_specific_runtime_libs +enable_dependency_tracking enable_multilib enable_maintainer_mode -enable_dependency_tracking enable_shared enable_static with_pic @@ -767,12 +775,12 @@ CFLAGS LDFLAGS LIBS CPPFLAGS +CPP CXX CXXFLAGS CCC CCAS CCASFLAGS -CPP CXXCPP' @@ -1395,11 +1403,11 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors --enable-multilib build many library versions (default) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer - --disable-dependency-tracking speeds up one-time build - --enable-dependency-tracking do not reject slow dependency extractors --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] @@ -1421,11 +1429,11 @@ Some influential environment variables: LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> + CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) - CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help @@ -1546,21 +1554,20 @@ fi } # ac_fn_c_try_compile -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" + if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 @@ -1568,29 +1575,122 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval -} # ac_fn_cxx_try_compile +} # ac_fn_c_try_cpp -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( cat <<\_ASBOX +## --------------------------- ## +## Report this to libsanitizer ## +## --------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; @@ -1598,37 +1698,33 @@ case "(($ac_try" in esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err + (eval "$ac_link") 2>&5 ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - $as_test_x conftest$ac_exeext - }; then : + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : ac_retval=0 else - $as_echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=$ac_status fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval -} # ac_fn_c_try_link +} # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- @@ -1661,20 +1757,21 @@ $as_echo "$ac_res" >&6; } } # ac_fn_c_check_header_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 @@ -1682,29 +1779,29 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || test ! -s conftest.err - }; then : + } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=1 + ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval -} # ac_fn_c_try_cpp +} # ac_fn_cxx_try_compile -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. -ac_fn_c_try_run () +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; @@ -1712,33 +1809,37 @@ case "(($ac_try" in esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 + (eval "$ac_link") 2>conftest.err ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : ac_retval=0 else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 - ac_retval=$ac_status + ac_retval=1 fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} return $ac_retval -} # ac_fn_c_try_run +} # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- @@ -2067,6 +2168,105 @@ rm -f conftest.val return $ac_retval } # ac_fn_c_compute_int + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. @@ -2439,6 +2639,1232 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $version_specific_libs" >&5 $as_echo "$version_specific_libs" >&6; } +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then : + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +fi +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + # Do not delete or change the following two lines. For why, see # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html ac_aux_dir= @@ -3022,6 +4448,68 @@ else fi rmdir .tst 2>/dev/null +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." @@ -3083,6 +4571,133 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + # Default to --enable-multilib # Check whether --enable-multilib was given. @@ -3504,231 +5119,6 @@ $as_echo "$ac_try_echo"; } >&5 test $ac_status = 0; } done -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -if test -z "$ac_file"; then : - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } -fi -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : @@ -3940,195 +5330,6 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from `make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - - -depcc="$CC" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CC_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvisualcpp | msvcmsys) - # This compiler won't grok `-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CC_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CC_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } -CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then - am__fastdepCC_TRUE= - am__fastdepCC_FALSE='#' -else - am__fastdepCC_TRUE='#' - am__fastdepCC_FALSE= -fi - ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -4646,6 +5847,98 @@ else fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + enable_dlopen=yes @@ -4827,136 +6120,6 @@ Xsed="$SED -e 1s/^X//" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if test "${ac_cv_path_FGREP+set}" = set; then : @@ -6543,7 +7706,6 @@ fi - # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; @@ -7365,274 +8527,6 @@ $as_echo "$lt_cv_ld_force_load" >&6; } ;; esac -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default @@ -11123,7 +12017,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11126 "configure" +#line 12020 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11229,7 +12123,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11232 "configure" +#line 12126 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -14483,6 +15377,52 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +case "$AWK" in +"") as_fn_error "can't build without awk" "$LINENO" 5 ;; +esac + @@ -14644,10 +15584,734 @@ else fi -ac_config_files="$ac_config_files Makefile libsanitizer.spec" +backtrace_supported=yes + +# Test for __sync support. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __sync extensions" >&5 +$as_echo_n "checking __sync extensions... " >&6; } +if test "${libsanitizer_cv_sys_sync+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "${with_target_subdir}"; then + libsanitizer_cv_sys_sync=yes + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +int +main () +{ +__sync_bool_compare_and_swap (&i, i, i); + __sync_lock_test_and_set (&i, 1); + __sync_lock_release (&i); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + libsanitizer_cv_sys_sync=yes +else + libsanitizer_cv_sys_sync=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libsanitizer_cv_sys_sync" >&5 +$as_echo "$libsanitizer_cv_sys_sync" >&6; } +if test "$libsanitizer_cv_sys_sync" = "yes"; then + +$as_echo "#define HAVE_SYNC_FUNCTIONS 1" >>confdefs.h + +fi + +# Test for __atomic support. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking __atomic extensions" >&5 +$as_echo_n "checking __atomic extensions... " >&6; } +if test "${libsanitizer_cv_sys_atomic+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "${with_target_subdir}"; then + libsanitizer_cv_sys_atomic=yes + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +int +main () +{ +__atomic_load_n (&i, __ATOMIC_ACQUIRE); + __atomic_store_n (&i, 1, __ATOMIC_RELEASE); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + libsanitizer_cv_sys_atomic=yes +else + libsanitizer_cv_sys_atomic=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libsanitizer_cv_sys_atomic" >&5 +$as_echo "$libsanitizer_cv_sys_atomic" >&6; } +if test "$libsanitizer_cv_sys_atomic" = "yes"; then + +$as_echo "#define HAVE_ATOMIC_FUNCTIONS 1" >>confdefs.h + +fi + +# The library needs to be able to read the executable itself. Compile +# a file to determine the executable format. The awk script +# filetype.awk prints out the file type. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking output filetype" >&5 +$as_echo_n "checking output filetype... " >&6; } +if test "${libsanitizer_cv_sys_filetype+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + filetype= +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int i; +int +main () +{ +int j; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + filetype=`${AWK} -f $srcdir/../libbacktrace/filetype.awk conftest.$ac_objext` +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "compiler failed +See \`config.log' for more details." "$LINENO" 5; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +libsanitizer_cv_sys_filetype=$filetype +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libsanitizer_cv_sys_filetype" >&5 +$as_echo "$libsanitizer_cv_sys_filetype" >&6; } + +# Match the file type to decide what files to compile. +FORMAT_FILE= +case "$libsanitizer_cv_sys_filetype" in +elf*) FORMAT_FILE="elf.lo" ;; +*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not determine output file type" >&5 +$as_echo "$as_me: WARNING: could not determine output file type" >&2;} + FORMAT_FILE="unknown.lo" + backtrace_supported=no + ;; +esac + + +# ELF defines. +elfsize= +case "$libsanitizer_cv_sys_filetype" in +elf32) elfsize=32 ;; +elf64) elfsize=64 ;; +esac + +cat >>confdefs.h <<_ACEOF +#define BACKTRACE_ELF_SIZE $elfsize +_ACEOF + + +BACKTRACE_SUPPORTED=0 +if test "$backtrace_supported" = "yes"; then + BACKTRACE_SUPPORTED=1 +fi + + + + +inttype_headers=`echo inttypes.h sys/inttypes.h | sed -e 's/,/ /g'` + +acx_cv_header_stdint=stddef.h +acx_cv_header_stdint_kind="(already complete)" +for i in stdint.h $inttype_headers; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uintmax_t + unset ac_cv_type_int_least32_t + unset ac_cv_type_int_fast32_t + unset ac_cv_type_uint64_t + $as_echo_n "looking for a compliant stdint.h in $i, " >&6 + ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uintmax_t" = x""yes; then : + acx_cv_header_stdint=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : + +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_int_least32_t" = x""yes; then : + +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_int_fast32_t" = x""yes; then : + +else + acx_cv_header_stdint_kind="(mostly complete)" +fi + + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uint64_t" = x""yes; then : + +else + acx_cv_header_stdint_kind="(lacks uint64_t)" +fi + + break +done +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(lacks uintmax_t)" + for i in stdint.h $inttype_headers; do + unset ac_cv_type_uintptr_t + unset ac_cv_type_uint32_t + unset ac_cv_type_uint64_t + $as_echo_n "looking for an incomplete stdint.h in $i, " >&6 + ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uint32_t" = x""yes; then : + acx_cv_header_stdint=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uint64_t" = x""yes; then : + +fi + + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : + +fi + + break + done +fi +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(u_intXX_t style)" + for i in sys/types.h $inttype_headers; do + unset ac_cv_type_u_int32_t + unset ac_cv_type_u_int64_t + $as_echo_n "looking for u_intXX_t types in $i, " >&6 + ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_u_int32_t" = x""yes; then : + acx_cv_header_stdint=$i +else + continue +fi + + ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include <sys/types.h> +#include <$i> +" +if test "x$ac_cv_type_u_int64_t" = x""yes; then : + +fi + + break + done +fi +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(using manual detection)" +fi + +test -z "$ac_cv_type_uintptr_t" && ac_cv_type_uintptr_t=no +test -z "$ac_cv_type_uint64_t" && ac_cv_type_uint64_t=no +test -z "$ac_cv_type_u_int64_t" && ac_cv_type_u_int64_t=no +test -z "$ac_cv_type_int_least32_t" && ac_cv_type_int_least32_t=no +test -z "$ac_cv_type_int_fast32_t" && ac_cv_type_int_fast32_t=no + +# ----------------- Summarize what we found so far + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what to include in gstdint.h" >&5 +$as_echo_n "checking what to include in gstdint.h... " >&6; } + +case `$as_basename -- gstdint.h || +$as_expr X/gstdint.h : '.*/\([^/][^/]*\)/*$' \| \ + Xgstdint.h : 'X\(//\)$' \| \ + Xgstdint.h : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/gstdint.h | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` in + stdint.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 +$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + inttypes.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 +$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + *) ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5 +$as_echo "$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6; } + +# ----------------- done included file, check C basic types -------- + +# Lacking an uintptr_t? Test size of void * +case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in + stddef.h:* | *:no) # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if test "${ac_cv_sizeof_void_p+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (void *) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_void_p=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p +_ACEOF + + ;; +esac + +# Lacking an uint64_t? Test size of long +case "$acx_cv_header_stdint:$ac_cv_type_uint64_t:$ac_cv_type_u_int64_t" in + stddef.h:*:* | *:no:no) # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + ;; +esac + +if test $acx_cv_header_stdint = stddef.h; then + # Lacking a good header? Test size of everything and deduce all types. + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } + -ac_config_files="$ac_config_files interception/Makefile sanitizer_common/Makefile lsan/Makefile asan/Makefile ubsan/Makefile" +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 +$as_echo_n "checking size of char... " >&6; } +if test "${ac_cv_sizeof_char+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_char" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_char=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 +$as_echo "$ac_cv_sizeof_char" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_CHAR $ac_cv_sizeof_char +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int8_t" >&5 +$as_echo_n "checking for type equivalent to int8_t... " >&6; } + case "$ac_cv_sizeof_char" in + 1) acx_cv_type_int8_t=char ;; + *) as_fn_error "no 8-bit type, please report a bug" "$LINENO" 5 + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int8_t" >&5 +$as_echo "$acx_cv_type_int8_t" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int16_t" >&5 +$as_echo_n "checking for type equivalent to int16_t... " >&6; } + case "$ac_cv_sizeof_int:$ac_cv_sizeof_short" in + 2:*) acx_cv_type_int16_t=int ;; + *:2) acx_cv_type_int16_t=short ;; + *) as_fn_error "no 16-bit type, please report a bug" "$LINENO" 5 + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int16_t" >&5 +$as_echo "$acx_cv_type_int16_t" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int32_t" >&5 +$as_echo_n "checking for type equivalent to int32_t... " >&6; } + case "$ac_cv_sizeof_int:$ac_cv_sizeof_long" in + 4:*) acx_cv_type_int32_t=int ;; + *:4) acx_cv_type_int32_t=long ;; + *) as_fn_error "no 32-bit type, please report a bug" "$LINENO" 5 + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int32_t" >&5 +$as_echo "$acx_cv_type_int32_t" >&6; } +fi + +# These tests are here to make the output prettier + +if test "$ac_cv_type_uint64_t" != yes && test "$ac_cv_type_u_int64_t" != yes; then + case "$ac_cv_sizeof_long" in + 8) acx_cv_type_int64_t=long ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int64_t" >&5 +$as_echo_n "checking for type equivalent to int64_t... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5 +$as_echo "${acx_cv_type_int64_t-'using preprocessor symbols'}" >&6; } +fi + +# Now we can use the above types + +if test "$ac_cv_type_uintptr_t" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to intptr_t" >&5 +$as_echo_n "checking for type equivalent to intptr_t... " >&6; } + case $ac_cv_sizeof_void_p in + 2) acx_cv_type_intptr_t=int16_t ;; + 4) acx_cv_type_intptr_t=int32_t ;; + 8) acx_cv_type_intptr_t=int64_t ;; + *) as_fn_error "no equivalent for intptr_t, please report a bug" "$LINENO" 5 + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_intptr_t" >&5 +$as_echo "$acx_cv_type_intptr_t" >&6; } +fi + +# ----------------- done all checks, emit header ------------- +ac_config_commands="$ac_config_commands gstdint.h" + + + + +for ac_header in sys/mman.h alloca.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +if test "$ac_cv_header_sys_mman_h" = "no"; then + have_mmap=no +else + if test -n "${with_target_subdir}"; then + # When built as a GCC target library, we can't do a link test. We + # simply assume that if we have mman.h, we have mmap. + have_mmap=yes + else + ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" +if test "x$ac_cv_func_mmap" = x""yes; then : + have_mmap=yes +else + have_mmap=no +fi + + fi +fi +if test "$have_mmap" = "no"; then + VIEW_FILE=read.lo + ALLOC_FILE=alloc.lo +else + VIEW_FILE=mmapio.lo + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <sys/mman.h> +#if !defined(MAP_ANONYMOUS) && !defined(MAP_ANON) + #error no MAP_ANONYMOUS +#endif + +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ALLOC_FILE=mmap.lo +else + ALLOC_FILE=alloc.lo +fi +rm -f conftest.err conftest.$ac_ext +fi + + + +BACKTRACE_USES_MALLOC=0 +if test "$ALLOC_FILE" = "alloc.lo"; then + BACKTRACE_USES_MALLOC=1 +fi + + +# Don't care about thread support +BACKTRACE_SUPPORTS_THREADS=0 + + +# Check for dl_iterate_phdr. +for ac_header in link.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "link.h" "ac_cv_header_link_h" "$ac_includes_default" +if test "x$ac_cv_header_link_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LINK_H 1 +_ACEOF + +fi + +done + +if test "$ac_cv_header_link_h" = "no"; then + have_dl_iterate_phdr=no +else + # When built as a GCC target library, we can't do a link test. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <link.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "dl_iterate_phdr" >/dev/null 2>&1; then : + have_dl_iterate_phdr=yes +else + have_dl_iterate_phdr=no +fi +rm -f conftest* + + case "${host}" in + *-*-solaris2.10*) + # Avoid dl_iterate_phdr on Solaris 10, where it is in the + # header file but is only in -ldl. + have_dl_iterate_phdr=no ;; + esac +fi +if test "$have_dl_iterate_phdr" = "yes"; then + +$as_echo "#define HAVE_DL_ITERATE_PHDR 1" >>confdefs.h + +fi + +# Check for the fcntl function. +if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-mingw*) have_fcntl=no ;; + *) have_fcntl=yes ;; + esac +else + ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl" +if test "x$ac_cv_func_fcntl" = x""yes; then : + have_fcntl=yes +else + have_fcntl=no +fi + +fi +if test "$have_fcntl" = "yes"; then + +$as_echo "#define HAVE_FCNTL 1" >>confdefs.h + +fi + +ac_fn_c_check_decl "$LINENO" "strnlen" "ac_cv_have_decl_strnlen" "$ac_includes_default" +if test "x$ac_cv_have_decl_strnlen" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRNLEN $ac_have_decl +_ACEOF + + +# Check for getexecname function. +if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-solaris2*) have_getexecname=yes ;; + *) have_getexecname=no ;; + esac +else + ac_fn_c_check_func "$LINENO" "getexecname" "ac_cv_func_getexecname" +if test "x$ac_cv_func_getexecname" = x""yes; then : + have_getexecname=yes +else + have_getexecname=no +fi + +fi +if test "$have_getexecname" = "yes"; then + +$as_echo "#define HAVE_GETEXECNAME 1" >>confdefs.h + +fi + + if test "x${BACKTRACE_SUPPORTED}x${BACKTRACE_USES_MALLOC}" = "x1x0"; then + LIBBACKTRACE_SUPPORTED_TRUE= + LIBBACKTRACE_SUPPORTED_FALSE='#' +else + LIBBACKTRACE_SUPPORTED_TRUE='#' + LIBBACKTRACE_SUPPORTED_FALSE= +fi + + + +ac_config_files="$ac_config_files Makefile libsanitizer.spec libbacktrace/backtrace-supported.h" + +ac_config_headers="$ac_config_headers config.h" + + +ac_config_files="$ac_config_files interception/Makefile sanitizer_common/Makefile libbacktrace/Makefile lsan/Makefile asan/Makefile ubsan/Makefile" if test "x$TSAN_SUPPORTED" = "xyes"; then @@ -14734,43 +16398,7 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - +DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= @@ -14788,6 +16416,14 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' @@ -14800,14 +16436,6 @@ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -14828,6 +16456,10 @@ if test -z "${USING_MAC_INTERPOSE_TRUE}" && test -z "${USING_MAC_INTERPOSE_FALSE as_fn_error "conditional \"USING_MAC_INTERPOSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBBACKTRACE_SUPPORTED_TRUE}" && test -z "${LIBBACKTRACE_SUPPORTED_FALSE}"; then + as_fn_error "conditional \"LIBBACKTRACE_SUPPORTED\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 @@ -15254,11 +16886,15 @@ case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" +config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF @@ -15279,10 +16915,15 @@ Usage: $0 [OPTION]... [TAG]... --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files +Configuration headers: +$config_headers + Configuration commands: $config_commands @@ -15340,7 +16981,18 @@ do esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) @@ -15391,6 +17043,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" srcdir="$srcdir" host="$host" @@ -15405,7 +17058,6 @@ CC="$CC" CXX="$CXX" GFORTRAN="$GFORTRAN" GCJ="$GCJ" -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout @@ -15767,6 +17419,24 @@ fi +GCC="$GCC" +CC="$CC" +acx_cv_header_stdint="$acx_cv_header_stdint" +acx_cv_type_int8_t="$acx_cv_type_int8_t" +acx_cv_type_int16_t="$acx_cv_type_int16_t" +acx_cv_type_int32_t="$acx_cv_type_int32_t" +acx_cv_type_int64_t="$acx_cv_type_int64_t" +acx_cv_type_intptr_t="$acx_cv_type_intptr_t" +ac_cv_type_uintmax_t="$ac_cv_type_uintmax_t" +ac_cv_type_uintptr_t="$ac_cv_type_uintptr_t" +ac_cv_type_uint64_t="$ac_cv_type_uint64_t" +ac_cv_type_u_int64_t="$ac_cv_type_u_int64_t" +ac_cv_type_u_int32_t="$ac_cv_type_u_int32_t" +ac_cv_type_int_least32_t="$ac_cv_type_int_least32_t" +ac_cv_type_int_fast32_t="$ac_cv_type_int_fast32_t" +ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p" + + _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 @@ -15775,13 +17445,17 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 for ac_config_target in $ac_config_targets do case $ac_config_target in - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS gstdint.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "libsanitizer.spec") CONFIG_FILES="$CONFIG_FILES libsanitizer.spec" ;; + "libbacktrace/backtrace-supported.h") CONFIG_FILES="$CONFIG_FILES libbacktrace/backtrace-supported.h" ;; + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "interception/Makefile") CONFIG_FILES="$CONFIG_FILES interception/Makefile" ;; "sanitizer_common/Makefile") CONFIG_FILES="$CONFIG_FILES sanitizer_common/Makefile" ;; + "libbacktrace/Makefile") CONFIG_FILES="$CONFIG_FILES libbacktrace/Makefile" ;; "lsan/Makefile") CONFIG_FILES="$CONFIG_FILES lsan/Makefile" ;; "asan/Makefile") CONFIG_FILES="$CONFIG_FILES asan/Makefile" ;; "ubsan/Makefile") CONFIG_FILES="$CONFIG_FILES ubsan/Makefile" ;; @@ -15798,6 +17472,7 @@ done # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi @@ -15976,8 +17651,116 @@ fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' <confdefs.h | sed ' +s/'"$ac_delim"'/"\\\ +"/g' >>$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do @@ -16195,7 +17978,64 @@ which seems to be undefined. Please make sure it is defined." >&2;} esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; - + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} @@ -16204,14 +18044,6 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in - "default-1":C) -# Only add multilib support code if we just rebuilt the top-level -# Makefile. -case " $CONFIG_FILES " in - *" Makefile "*) - ac_file=Makefile . ${multi_basedir}/config-ml.in - ;; -esac ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval @@ -16307,6 +18139,14 @@ $as_echo X"$file" | done } ;; + "default-1":C) +# Only add multilib support code if we just rebuilt the top-level +# Makefile. +case " $CONFIG_FILES " in + *" Makefile "*) + ac_file=Makefile . ${multi_basedir}/config-ml.in + ;; +esac ;; "libtool":C) # See if we are running on zsh, and set the options which allow our @@ -17117,6 +18957,378 @@ compiler_lib_search_path=$lt_compiler_lib_search_path_CXX _LT_EOF ;; + "gstdint.h":C) +if test "$GCC" = yes; then + echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h +else + echo "/* generated for $CC */" > tmp-stdint.h +fi + +sed 's/^ *//' >> tmp-stdint.h <<EOF + + #ifndef GCC_GENERATED_STDINT_H + #define GCC_GENERATED_STDINT_H 1 + + #include <sys/types.h> +EOF + +if test "$acx_cv_header_stdint" != stdint.h; then + echo "#include <stddef.h>" >> tmp-stdint.h +fi +if test "$acx_cv_header_stdint" != stddef.h; then + echo "#include <$acx_cv_header_stdint>" >> tmp-stdint.h +fi + +sed 's/^ *//' >> tmp-stdint.h <<EOF + /* glibc uses these symbols as guards to prevent redefinitions. */ + #ifdef __int8_t_defined + #define _INT8_T + #define _INT16_T + #define _INT32_T + #endif + #ifdef __uint32_t_defined + #define _UINT32_T + #endif + +EOF + +# ----------------- done header, emit basic int types ------------- +if test "$acx_cv_header_stdint" = stddef.h; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + #ifndef _UINT8_T + #define _UINT8_T + #ifndef __uint8_t_defined + #define __uint8_t_defined + #ifndef uint8_t + typedef unsigned $acx_cv_type_int8_t uint8_t; + #endif + #endif + #endif + + #ifndef _UINT16_T + #define _UINT16_T + #ifndef __uint16_t_defined + #define __uint16_t_defined + #ifndef uint16_t + typedef unsigned $acx_cv_type_int16_t uint16_t; + #endif + #endif + #endif + + #ifndef _UINT32_T + #define _UINT32_T + #ifndef __uint32_t_defined + #define __uint32_t_defined + #ifndef uint32_t + typedef unsigned $acx_cv_type_int32_t uint32_t; + #endif + #endif + #endif + + #ifndef _INT8_T + #define _INT8_T + #ifndef __int8_t_defined + #define __int8_t_defined + #ifndef int8_t + typedef $acx_cv_type_int8_t int8_t; + #endif + #endif + #endif + + #ifndef _INT16_T + #define _INT16_T + #ifndef __int16_t_defined + #define __int16_t_defined + #ifndef int16_t + typedef $acx_cv_type_int16_t int16_t; + #endif + #endif + #endif + + #ifndef _INT32_T + #define _INT32_T + #ifndef __int32_t_defined + #define __int32_t_defined + #ifndef int32_t + typedef $acx_cv_type_int32_t int32_t; + #endif + #endif + #endif +EOF +elif test "$ac_cv_type_u_int32_t" = yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* int8_t int16_t int32_t defined by inet code, we do the u_intXX types */ + #ifndef _INT8_T + #define _INT8_T + #endif + #ifndef _INT16_T + #define _INT16_T + #endif + #ifndef _INT32_T + #define _INT32_T + #endif + + #ifndef _UINT8_T + #define _UINT8_T + #ifndef __uint8_t_defined + #define __uint8_t_defined + #ifndef uint8_t + typedef u_int8_t uint8_t; + #endif + #endif + #endif + + #ifndef _UINT16_T + #define _UINT16_T + #ifndef __uint16_t_defined + #define __uint16_t_defined + #ifndef uint16_t + typedef u_int16_t uint16_t; + #endif + #endif + #endif + + #ifndef _UINT32_T + #define _UINT32_T + #ifndef __uint32_t_defined + #define __uint32_t_defined + #ifndef uint32_t + typedef u_int32_t uint32_t; + #endif + #endif + #endif +EOF +else + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* Some systems have guard macros to prevent redefinitions, define them. */ + #ifndef _INT8_T + #define _INT8_T + #endif + #ifndef _INT16_T + #define _INT16_T + #endif + #ifndef _INT32_T + #define _INT32_T + #endif + #ifndef _UINT8_T + #define _UINT8_T + #endif + #ifndef _UINT16_T + #define _UINT16_T + #endif + #ifndef _UINT32_T + #define _UINT32_T + #endif +EOF +fi + +# ------------- done basic int types, emit int64_t types ------------ +if test "$ac_cv_type_uint64_t" = yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* system headers have good uint64_t and int64_t */ + #ifndef _INT64_T + #define _INT64_T + #endif + #ifndef _UINT64_T + #define _UINT64_T + #endif +EOF +elif test "$ac_cv_type_u_int64_t" = yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* system headers have an u_int64_t (and int64_t) */ + #ifndef _INT64_T + #define _INT64_T + #endif + #ifndef _UINT64_T + #define _UINT64_T + #ifndef __uint64_t_defined + #define __uint64_t_defined + #ifndef uint64_t + typedef u_int64_t uint64_t; + #endif + #endif + #endif +EOF +elif test -n "$acx_cv_type_int64_t"; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* architecture has a 64-bit type, $acx_cv_type_int64_t */ + #ifndef _INT64_T + #define _INT64_T + #ifndef int64_t + typedef $acx_cv_type_int64_t int64_t; + #endif + #endif + #ifndef _UINT64_T + #define _UINT64_T + #ifndef __uint64_t_defined + #define __uint64_t_defined + #ifndef uint64_t + typedef unsigned $acx_cv_type_int64_t uint64_t; + #endif + #endif + #endif +EOF +else + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* some common heuristics for int64_t, using compiler-specific tests */ + #if defined __STDC_VERSION__ && (__STDC_VERSION__-0) >= 199901L + #ifndef _INT64_T + #define _INT64_T + #ifndef __int64_t_defined + #ifndef int64_t + typedef long long int64_t; + #endif + #endif + #endif + #ifndef _UINT64_T + #define _UINT64_T + #ifndef uint64_t + typedef unsigned long long uint64_t; + #endif + #endif + + #elif defined __GNUC__ && defined (__STDC__) && __STDC__-0 + /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and + does not implement __extension__. But that compiler doesn't define + __GNUC_MINOR__. */ + # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) + # define __extension__ + # endif + + # ifndef _INT64_T + # define _INT64_T + # ifndef int64_t + __extension__ typedef long long int64_t; + # endif + # endif + # ifndef _UINT64_T + # define _UINT64_T + # ifndef uint64_t + __extension__ typedef unsigned long long uint64_t; + # endif + # endif + + #elif !defined __STRICT_ANSI__ + # if defined _MSC_VER || defined __WATCOMC__ || defined __BORLANDC__ + + # ifndef _INT64_T + # define _INT64_T + # ifndef int64_t + typedef __int64 int64_t; + # endif + # endif + # ifndef _UINT64_T + # define _UINT64_T + # ifndef uint64_t + typedef unsigned __int64 uint64_t; + # endif + # endif + # endif /* compiler */ + + #endif /* ANSI version */ +EOF +fi + +# ------------- done int64_t types, emit intptr types ------------ +if test "$ac_cv_type_uintptr_t" != yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* Define intptr_t based on sizeof(void*) = $ac_cv_sizeof_void_p */ + #ifndef __uintptr_t_defined + #ifndef uintptr_t + typedef u$acx_cv_type_intptr_t uintptr_t; + #endif + #endif + #ifndef __intptr_t_defined + #ifndef intptr_t + typedef $acx_cv_type_intptr_t intptr_t; + #endif + #endif +EOF +fi + +# ------------- done intptr types, emit int_least types ------------ +if test "$ac_cv_type_int_least32_t" != yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* Define int_least types */ + typedef int8_t int_least8_t; + typedef int16_t int_least16_t; + typedef int32_t int_least32_t; + #ifdef _INT64_T + typedef int64_t int_least64_t; + #endif + + typedef uint8_t uint_least8_t; + typedef uint16_t uint_least16_t; + typedef uint32_t uint_least32_t; + #ifdef _UINT64_T + typedef uint64_t uint_least64_t; + #endif +EOF +fi + +# ------------- done intptr types, emit int_fast types ------------ +if test "$ac_cv_type_int_fast32_t" != yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* Define int_fast types. short is often slow */ + typedef int8_t int_fast8_t; + typedef int int_fast16_t; + typedef int32_t int_fast32_t; + #ifdef _INT64_T + typedef int64_t int_fast64_t; + #endif + + typedef uint8_t uint_fast8_t; + typedef unsigned int uint_fast16_t; + typedef uint32_t uint_fast32_t; + #ifdef _UINT64_T + typedef uint64_t uint_fast64_t; + #endif +EOF +fi + +if test "$ac_cv_type_uintmax_t" != yes; then + sed 's/^ *//' >> tmp-stdint.h <<EOF + + /* Define intmax based on what we found */ + #ifndef intmax_t + #ifdef _INT64_T + typedef int64_t intmax_t; + #else + typedef long intmax_t; + #endif + #endif + #ifndef uintmax_t + #ifdef _UINT64_T + typedef uint64_t uintmax_t; + #else + typedef unsigned long uintmax_t; + #endif + #endif +EOF +fi + +sed 's/^ *//' >> tmp-stdint.h <<EOF + + #endif /* GCC_GENERATED_STDINT_H */ +EOF + +if test -r gstdint.h && cmp -s tmp-stdint.h gstdint.h; then + rm -f tmp-stdint.h +else + mv -f tmp-stdint.h gstdint.h +fi + + ;; "interception/Makefile":F) cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF @@ -17139,6 +19351,17 @@ _EOF . ${multi_basedir}/config-ml.in { ml_norecursion=; unset ml_norecursion;} ;; + "libbacktrace/Makefile":F) cat > vpsed$$ << \_EOF +s!`test -f '$<' || echo '$(srcdir)/'`!! +_EOF + sed -f vpsed$$ $ac_file > tmp$$ + mv tmp$$ $ac_file + rm vpsed$$ + echo 'MULTISUBDIR =' >> $ac_file + ml_norecursion=yes + . ${multi_basedir}/config-ml.in + { ml_norecursion=; unset ml_norecursion;} + ;; "lsan/Makefile":F) cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac index 3c87984b2da..c4641d47286 100644 --- a/libsanitizer/configure.ac +++ b/libsanitizer/configure.ac @@ -16,6 +16,8 @@ AC_ARG_ENABLE(version-specific-runtime-libs, [version_specific_libs=no]) AC_MSG_RESULT($version_specific_libs) +AC_USE_SYSTEM_EXTENSIONS + # Do not delete or change the following two lines. For why, see # http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html AC_CANONICAL_SYSTEM @@ -61,10 +63,16 @@ AC_SUBST(toolexeclibdir) AC_PROG_CC AC_PROG_CXX AM_PROG_AS +AC_PROG_RANLIB AC_LIBTOOL_DLOPEN AM_PROG_LIBTOOL +AC_PROG_AWK +case "$AWK" in +"") AC_MSG_ERROR([can't build without awk]) ;; +esac + AC_SUBST(enable_shared) AC_SUBST(enable_static) @@ -122,9 +130,177 @@ case "$host" in esac AM_CONDITIONAL(USING_MAC_INTERPOSE, $MAC_INTERPOSE) -AC_CONFIG_FILES([Makefile libsanitizer.spec]) +backtrace_supported=yes + +# Test for __sync support. +AC_CACHE_CHECK([__sync extensions], +[libsanitizer_cv_sys_sync], +[if test -n "${with_target_subdir}"; then + libsanitizer_cv_sys_sync=yes + else + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([int i;], + [__sync_bool_compare_and_swap (&i, i, i); + __sync_lock_test_and_set (&i, 1); + __sync_lock_release (&i);])], + [libsanitizer_cv_sys_sync=yes], + [libsanitizer_cv_sys_sync=no]) + fi]) +if test "$libsanitizer_cv_sys_sync" = "yes"; then + AC_DEFINE([HAVE_SYNC_FUNCTIONS], 1, + [Define to 1 if you have the __sync functions]) +fi + +# Test for __atomic support. +AC_CACHE_CHECK([__atomic extensions], +[libsanitizer_cv_sys_atomic], +[if test -n "${with_target_subdir}"; then + libsanitizer_cv_sys_atomic=yes + else + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([int i;], + [__atomic_load_n (&i, __ATOMIC_ACQUIRE); + __atomic_store_n (&i, 1, __ATOMIC_RELEASE);])], + [libsanitizer_cv_sys_atomic=yes], + [libsanitizer_cv_sys_atomic=no]) + fi]) +if test "$libsanitizer_cv_sys_atomic" = "yes"; then + AC_DEFINE([HAVE_ATOMIC_FUNCTIONS], 1, + [Define to 1 if you have the __atomic functions]) +fi + +# The library needs to be able to read the executable itself. Compile +# a file to determine the executable format. The awk script +# filetype.awk prints out the file type. +AC_CACHE_CHECK([output filetype], +[libsanitizer_cv_sys_filetype], +[filetype= +AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([int i;], [int j;])], + [filetype=`${AWK} -f $srcdir/../libbacktrace/filetype.awk conftest.$ac_objext`], + [AC_MSG_FAILURE([compiler failed])]) +libsanitizer_cv_sys_filetype=$filetype]) + +# Match the file type to decide what files to compile. +FORMAT_FILE= +case "$libsanitizer_cv_sys_filetype" in +elf*) FORMAT_FILE="elf.lo" ;; +*) AC_MSG_WARN([could not determine output file type]) + FORMAT_FILE="unknown.lo" + backtrace_supported=no + ;; +esac +AC_SUBST(FORMAT_FILE) + +# ELF defines. +elfsize= +case "$libsanitizer_cv_sys_filetype" in +elf32) elfsize=32 ;; +elf64) elfsize=64 ;; +esac +AC_DEFINE_UNQUOTED([BACKTRACE_ELF_SIZE], [$elfsize], [ELF size: 32 or 64]) + +BACKTRACE_SUPPORTED=0 +if test "$backtrace_supported" = "yes"; then + BACKTRACE_SUPPORTED=1 +fi +AC_SUBST(BACKTRACE_SUPPORTED) + +GCC_HEADER_STDINT(gstdint.h) + +AC_CHECK_HEADERS(sys/mman.h alloca.h) +if test "$ac_cv_header_sys_mman_h" = "no"; then + have_mmap=no +else + if test -n "${with_target_subdir}"; then + # When built as a GCC target library, we can't do a link test. We + # simply assume that if we have mman.h, we have mmap. + have_mmap=yes + else + AC_CHECK_FUNC(mmap, [have_mmap=yes], [have_mmap=no]) + fi +fi +if test "$have_mmap" = "no"; then + VIEW_FILE=read.lo + ALLOC_FILE=alloc.lo +else + VIEW_FILE=mmapio.lo + AC_PREPROC_IFELSE([ +#include <sys/mman.h> +#if !defined(MAP_ANONYMOUS) && !defined(MAP_ANON) + #error no MAP_ANONYMOUS +#endif +], [ALLOC_FILE=mmap.lo], [ALLOC_FILE=alloc.lo]) +fi +AC_SUBST(VIEW_FILE) +AC_SUBST(ALLOC_FILE) + +BACKTRACE_USES_MALLOC=0 +if test "$ALLOC_FILE" = "alloc.lo"; then + BACKTRACE_USES_MALLOC=1 +fi +AC_SUBST(BACKTRACE_USES_MALLOC) + +# Don't care about thread support +BACKTRACE_SUPPORTS_THREADS=0 +AC_SUBST(BACKTRACE_SUPPORTS_THREADS) + +# Check for dl_iterate_phdr. +AC_CHECK_HEADERS(link.h) +if test "$ac_cv_header_link_h" = "no"; then + have_dl_iterate_phdr=no +else + # When built as a GCC target library, we can't do a link test. + AC_EGREP_HEADER([dl_iterate_phdr], [link.h], [have_dl_iterate_phdr=yes], + [have_dl_iterate_phdr=no]) + case "${host}" in + *-*-solaris2.10*) + # Avoid dl_iterate_phdr on Solaris 10, where it is in the + # header file but is only in -ldl. + have_dl_iterate_phdr=no ;; + esac +fi +if test "$have_dl_iterate_phdr" = "yes"; then + AC_DEFINE(HAVE_DL_ITERATE_PHDR, 1, [Define if dl_iterate_phdr is available.]) +fi + +# Check for the fcntl function. +if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-mingw*) have_fcntl=no ;; + *) have_fcntl=yes ;; + esac +else + AC_CHECK_FUNC(fcntl, [have_fcntl=yes], [have_fcntl=no]) +fi +if test "$have_fcntl" = "yes"; then + AC_DEFINE([HAVE_FCNTL], 1, + [Define to 1 if you have the fcntl function]) +fi + +AC_CHECK_DECLS(strnlen) + +# Check for getexecname function. +if test -n "${with_target_subdir}"; then + case "${host}" in + *-*-solaris2*) have_getexecname=yes ;; + *) have_getexecname=no ;; + esac +else + AC_CHECK_FUNC(getexecname, [have_getexecname=yes], [have_getexecname=no]) +fi +if test "$have_getexecname" = "yes"; then + AC_DEFINE(HAVE_GETEXECNAME, 1, [Define if getexecname is available.]) +fi + +AM_CONDITIONAL(LIBBACKTRACE_SUPPORTED, + [test "x${BACKTRACE_SUPPORTED}x${BACKTRACE_USES_MALLOC}" = "x1x0"]) + +AH_BOTTOM([#include "libbacktrace/backtrace-rename.h"]) +AC_CONFIG_FILES([Makefile libsanitizer.spec libbacktrace/backtrace-supported.h]) +AC_CONFIG_HEADER(config.h) -AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common lsan asan ubsan], [DIR/Makefile ]), +AC_CONFIG_FILES(AC_FOREACH([DIR], [interception sanitizer_common libbacktrace lsan asan ubsan], [DIR/Makefile ]), [cat > vpsed$$ << \_EOF s!`test -f '$<' || echo '$(srcdir)/'`!! _EOF diff --git a/libsanitizer/include/system/linux/aio_abi.h b/libsanitizer/include/system/linux/aio_abi.h new file mode 100644 index 00000000000..8fd317ff48a --- /dev/null +++ b/libsanitizer/include/system/linux/aio_abi.h @@ -0,0 +1,7 @@ +#include <linux/version.h> +#include_next <linux/aio_abi.h> +/* IOCB_CMD_PREADV/PWRITEV has been added in 2.6.19 */ +#if LINUX_VERSION_CODE < 132627 +#define IOCB_CMD_PREADV 7 +#define IOCB_CMD_PWRITEV 8 +#endif diff --git a/libsanitizer/include/system/linux/mroute.h b/libsanitizer/include/system/linux/mroute.h new file mode 100644 index 00000000000..cec9ec12a94 --- /dev/null +++ b/libsanitizer/include/system/linux/mroute.h @@ -0,0 +1,8 @@ +#include <linux/version.h> +/* <linux/mroute.h> before 2.6.26 included <linux/in.h> + which clashes with userspace headers. */ +#if LINUX_VERSION_CODE < 132634 +#define _LINUX_IN_H +#include <linux/types.h> +#endif +#include_next <linux/mroute.h> diff --git a/libsanitizer/include/system/linux/mroute6.h b/libsanitizer/include/system/linux/mroute6.h new file mode 100644 index 00000000000..45046020ffd --- /dev/null +++ b/libsanitizer/include/system/linux/mroute6.h @@ -0,0 +1,5 @@ +#include <linux/version.h> +/* <linux/mroute6.h> has been added in 2.6.26 */ +#if LINUX_VERSION_CODE >= 132634 +#include_next <linux/mroute6.h> +#endif diff --git a/libsanitizer/include/system/linux/perf_event.h b/libsanitizer/include/system/linux/perf_event.h new file mode 100644 index 00000000000..e54998beed6 --- /dev/null +++ b/libsanitizer/include/system/linux/perf_event.h @@ -0,0 +1,7 @@ +#include <linux/version.h> +/* <linux/perf_event.h> has been added in 2.6.32 */ +#if LINUX_VERSION_CODE >= 132640 +#include_next <linux/perf_event.h> +#else +#define perf_event_attr __sanitizer_perf_event_attr +#endif diff --git a/libsanitizer/include/system/linux/types.h b/libsanitizer/include/system/linux/types.h new file mode 100644 index 00000000000..01c98b9a3ad --- /dev/null +++ b/libsanitizer/include/system/linux/types.h @@ -0,0 +1,12 @@ +#ifndef LINUX_TYPES_WRAPPER_H +#define LINUX_TYPES_WRAPPER_H + +/* Before + https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/include/linux/types.h?id=6c7c6afbb8c0e60d32a563cae7c6889211e9d9d8 + linux/types.h conflicted with sys/ustat.h. Work around it. */ + +#define ustat __asan_bad_ustat +#include_next <linux/types.h> +#undef ustat + +#endif diff --git a/libsanitizer/interception/Makefile.in b/libsanitizer/interception/Makefile.in index 52a06d63458..5ac217dcc4b 100644 --- a/libsanitizer/interception/Makefile.in +++ b/libsanitizer/interception/Makefile.in @@ -44,6 +44,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -51,6 +52,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @@ -59,7 +61,7 @@ am__objects_1 = interception_linux.lo interception_mac.lo \ interception_win.lo interception_type_test.lo am_libinterception_la_OBJECTS = $(am__objects_1) libinterception_la_OBJECTS = $(am_libinterception_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -76,12 +78,16 @@ SOURCES = $(libinterception_la_SOURCES) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -105,6 +111,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -144,6 +151,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ diff --git a/libsanitizer/libbacktrace/Makefile.am b/libsanitizer/libbacktrace/Makefile.am new file mode 100644 index 00000000000..39c91aa62b8 --- /dev/null +++ b/libsanitizer/libbacktrace/Makefile.am @@ -0,0 +1,79 @@ +# Makefile.am -- Backtrace in libsanitizer Makefile. +# Copyright (C) 2012-2013 Free Software Foundation, Inc. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: + +# (1) Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# (2) Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. + +# (3) The name of the author may not be used to +# endorse or promote products derived from this software without +# specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +ACLOCAL_AMFLAGS = -I ../.. -I ../../config + +AM_CPPFLAGS = -I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \ + -I ../../libgcc -I .. -I $(top_srcdir) -I $(top_srcdir)/../libbacktrace + +WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \ + -Wcast-qual -Werror +C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition +CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter +AM_CFLAGS = $(C_WARN_FLAGS) +AM_CXXFLAGS = $(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions + +noinst_LTLIBRARIES = libsanitizer_libbacktrace.la + +libsanitizer_libbacktrace_la_SOURCES = \ + ../../libbacktrace/backtrace.h \ + ../../libbacktrace/atomic.c \ + ../../libbacktrace/dwarf.c \ + ../../libbacktrace/fileline.c \ + ../../libbacktrace/internal.h \ + ../../libbacktrace/posix.c \ + ../../libbacktrace/state.c \ + ../../libiberty/cp-demangle.c \ + bridge.cc + +FORMAT_FILES = \ + ../../libbacktrace/elf.c \ + ../../libbacktrace/unknown.c + +VIEW_FILES = \ + ../../libbacktrace/read.c \ + ../../libbacktrace/mmapio.c + +ALLOC_FILES = \ + ../../libbacktrace/alloc.c \ + ../../libbacktrace/mmap.c + +EXTRA_libsanitizer_libbacktrace_la_SOURCES = \ + $(FORMAT_FILES) \ + $(VIEW_FILES) \ + $(ALLOC_FILES) + +libsanitizer_libbacktrace_la_LIBADD = \ + $(FORMAT_FILE) \ + $(VIEW_FILE) \ + $(ALLOC_FILE) + +libsanitizer_libbacktrace_la_DEPENDENCIES = $(libsanitizer_libbacktrace_la_LIBADD) diff --git a/libsanitizer/libbacktrace/Makefile.in b/libsanitizer/libbacktrace/Makefile.in new file mode 100644 index 00000000000..3dca45b6e83 --- /dev/null +++ b/libsanitizer/libbacktrace/Makefile.in @@ -0,0 +1,678 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# Makefile.am -- Backtrace in libsanitizer Makefile. +# Copyright (C) 2012-2013 Free Software Foundation, Inc. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: + +# (1) Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. + +# (2) Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. + +# (3) The name of the author may not be used to +# endorse or promote products derived from this software without +# specific prior written permission. + +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = libbacktrace +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/backtrace-supported.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ + $(top_srcdir)/../config/depstand.m4 \ + $(top_srcdir)/../config/lead-dot.m4 \ + $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ + $(top_srcdir)/../config/multi.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ + $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ + $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = backtrace-supported.h +CONFIG_CLEAN_VPATH_FILES = +LTLIBRARIES = $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = +am_libsanitizer_libbacktrace_la_OBJECTS = atomic.lo dwarf.lo \ + fileline.lo posix.lo state.lo cp-demangle.lo bridge.lo +libsanitizer_libbacktrace_la_OBJECTS = \ + $(am_libsanitizer_libbacktrace_la_OBJECTS) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) +CXXLD = $(CXX) +CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libsanitizer_libbacktrace_la_SOURCES) \ + $(EXTRA_libsanitizer_libbacktrace_la_SOURCES) +ETAGS = etags +CTAGS = ctags +ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ +CC = @CC@ +CCAS = @CCAS@ +CCASDEPMODE = @CCASDEPMODE@ +CCASFLAGS = @CCASFLAGS@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBSTDCXX_RAW_CXX_CXXFLAGS = @LIBSTDCXX_RAW_CXX_CXXFLAGS@ +LIBSTDCXX_RAW_CXX_LDFLAGS = @LIBSTDCXX_RAW_CXX_LDFLAGS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +enable_shared = @enable_shared@ +enable_static = @enable_static@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +link_libasan = @link_libasan@ +link_liblsan = @link_liblsan@ +link_libtsan = @link_libtsan@ +link_libubsan = @link_libubsan@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +multi_basedir = @multi_basedir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_noncanonical = @target_noncanonical@ +target_os = @target_os@ +target_vendor = @target_vendor@ +toolexecdir = @toolexecdir@ +toolexeclibdir = @toolexeclibdir@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I ../.. -I ../../config +AM_CPPFLAGS = -I $(top_srcdir)/../include -I $(top_srcdir)/../libgcc \ + -I ../../libgcc -I .. -I $(top_srcdir) -I $(top_srcdir)/../libbacktrace + +WARN_FLAGS = -W -Wall -Wwrite-strings -Wmissing-format-attribute \ + -Wcast-qual -Werror + +C_WARN_FLAGS = $(WARN_FLAGS) -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition +CXX_WARN_FLAGS = $(WARN_FLAGS) -Wno-unused-parameter +AM_CFLAGS = $(C_WARN_FLAGS) +AM_CXXFLAGS = $(CXX_WARN_FLAGS) -fno-rtti -fno-exceptions +noinst_LTLIBRARIES = libsanitizer_libbacktrace.la +libsanitizer_libbacktrace_la_SOURCES = \ + ../../libbacktrace/backtrace.h \ + ../../libbacktrace/atomic.c \ + ../../libbacktrace/dwarf.c \ + ../../libbacktrace/fileline.c \ + ../../libbacktrace/internal.h \ + ../../libbacktrace/posix.c \ + ../../libbacktrace/state.c \ + ../../libiberty/cp-demangle.c \ + bridge.cc + +FORMAT_FILES = \ + ../../libbacktrace/elf.c \ + ../../libbacktrace/unknown.c + +VIEW_FILES = \ + ../../libbacktrace/read.c \ + ../../libbacktrace/mmapio.c + +ALLOC_FILES = \ + ../../libbacktrace/alloc.c \ + ../../libbacktrace/mmap.c + +EXTRA_libsanitizer_libbacktrace_la_SOURCES = \ + $(FORMAT_FILES) \ + $(VIEW_FILES) \ + $(ALLOC_FILES) + +libsanitizer_libbacktrace_la_LIBADD = \ + $(FORMAT_FILE) \ + $(VIEW_FILE) \ + $(ALLOC_FILE) + +libsanitizer_libbacktrace_la_DEPENDENCIES = $(libsanitizer_libbacktrace_la_LIBADD) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .cc .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libbacktrace/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libbacktrace/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +backtrace-supported.h: $(top_builddir)/config.status $(srcdir)/backtrace-supported.h.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +libsanitizer_libbacktrace.la: $(libsanitizer_libbacktrace_la_OBJECTS) $(libsanitizer_libbacktrace_la_DEPENDENCIES) + $(CXXLINK) $(libsanitizer_libbacktrace_la_OBJECTS) $(libsanitizer_libbacktrace_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atomic.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bridge.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cp-demangle.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileline.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmap.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmapio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/posix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unknown.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +atomic.lo: ../../libbacktrace/atomic.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atomic.lo -MD -MP -MF $(DEPDIR)/atomic.Tpo -c -o atomic.lo `test -f '../../libbacktrace/atomic.c' || echo '$(srcdir)/'`../../libbacktrace/atomic.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atomic.Tpo $(DEPDIR)/atomic.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/atomic.c' object='atomic.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atomic.lo `test -f '../../libbacktrace/atomic.c' || echo '$(srcdir)/'`../../libbacktrace/atomic.c + +dwarf.lo: ../../libbacktrace/dwarf.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT dwarf.lo -MD -MP -MF $(DEPDIR)/dwarf.Tpo -c -o dwarf.lo `test -f '../../libbacktrace/dwarf.c' || echo '$(srcdir)/'`../../libbacktrace/dwarf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/dwarf.Tpo $(DEPDIR)/dwarf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/dwarf.c' object='dwarf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o dwarf.lo `test -f '../../libbacktrace/dwarf.c' || echo '$(srcdir)/'`../../libbacktrace/dwarf.c + +fileline.lo: ../../libbacktrace/fileline.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT fileline.lo -MD -MP -MF $(DEPDIR)/fileline.Tpo -c -o fileline.lo `test -f '../../libbacktrace/fileline.c' || echo '$(srcdir)/'`../../libbacktrace/fileline.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/fileline.Tpo $(DEPDIR)/fileline.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/fileline.c' object='fileline.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o fileline.lo `test -f '../../libbacktrace/fileline.c' || echo '$(srcdir)/'`../../libbacktrace/fileline.c + +posix.lo: ../../libbacktrace/posix.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT posix.lo -MD -MP -MF $(DEPDIR)/posix.Tpo -c -o posix.lo `test -f '../../libbacktrace/posix.c' || echo '$(srcdir)/'`../../libbacktrace/posix.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/posix.Tpo $(DEPDIR)/posix.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/posix.c' object='posix.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o posix.lo `test -f '../../libbacktrace/posix.c' || echo '$(srcdir)/'`../../libbacktrace/posix.c + +state.lo: ../../libbacktrace/state.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT state.lo -MD -MP -MF $(DEPDIR)/state.Tpo -c -o state.lo `test -f '../../libbacktrace/state.c' || echo '$(srcdir)/'`../../libbacktrace/state.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/state.Tpo $(DEPDIR)/state.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/state.c' object='state.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o state.lo `test -f '../../libbacktrace/state.c' || echo '$(srcdir)/'`../../libbacktrace/state.c + +cp-demangle.lo: ../../libiberty/cp-demangle.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cp-demangle.lo -MD -MP -MF $(DEPDIR)/cp-demangle.Tpo -c -o cp-demangle.lo `test -f '../../libiberty/cp-demangle.c' || echo '$(srcdir)/'`../../libiberty/cp-demangle.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/cp-demangle.Tpo $(DEPDIR)/cp-demangle.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libiberty/cp-demangle.c' object='cp-demangle.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o cp-demangle.lo `test -f '../../libiberty/cp-demangle.c' || echo '$(srcdir)/'`../../libiberty/cp-demangle.c + +elf.lo: ../../libbacktrace/elf.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT elf.lo -MD -MP -MF $(DEPDIR)/elf.Tpo -c -o elf.lo `test -f '../../libbacktrace/elf.c' || echo '$(srcdir)/'`../../libbacktrace/elf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/elf.Tpo $(DEPDIR)/elf.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/elf.c' object='elf.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o elf.lo `test -f '../../libbacktrace/elf.c' || echo '$(srcdir)/'`../../libbacktrace/elf.c + +unknown.lo: ../../libbacktrace/unknown.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT unknown.lo -MD -MP -MF $(DEPDIR)/unknown.Tpo -c -o unknown.lo `test -f '../../libbacktrace/unknown.c' || echo '$(srcdir)/'`../../libbacktrace/unknown.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/unknown.Tpo $(DEPDIR)/unknown.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/unknown.c' object='unknown.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o unknown.lo `test -f '../../libbacktrace/unknown.c' || echo '$(srcdir)/'`../../libbacktrace/unknown.c + +read.lo: ../../libbacktrace/read.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT read.lo -MD -MP -MF $(DEPDIR)/read.Tpo -c -o read.lo `test -f '../../libbacktrace/read.c' || echo '$(srcdir)/'`../../libbacktrace/read.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/read.Tpo $(DEPDIR)/read.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/read.c' object='read.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o read.lo `test -f '../../libbacktrace/read.c' || echo '$(srcdir)/'`../../libbacktrace/read.c + +mmapio.lo: ../../libbacktrace/mmapio.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmapio.lo -MD -MP -MF $(DEPDIR)/mmapio.Tpo -c -o mmapio.lo `test -f '../../libbacktrace/mmapio.c' || echo '$(srcdir)/'`../../libbacktrace/mmapio.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mmapio.Tpo $(DEPDIR)/mmapio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/mmapio.c' object='mmapio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmapio.lo `test -f '../../libbacktrace/mmapio.c' || echo '$(srcdir)/'`../../libbacktrace/mmapio.c + +alloc.lo: ../../libbacktrace/alloc.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT alloc.lo -MD -MP -MF $(DEPDIR)/alloc.Tpo -c -o alloc.lo `test -f '../../libbacktrace/alloc.c' || echo '$(srcdir)/'`../../libbacktrace/alloc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/alloc.Tpo $(DEPDIR)/alloc.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/alloc.c' object='alloc.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o alloc.lo `test -f '../../libbacktrace/alloc.c' || echo '$(srcdir)/'`../../libbacktrace/alloc.c + +mmap.lo: ../../libbacktrace/mmap.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mmap.lo -MD -MP -MF $(DEPDIR)/mmap.Tpo -c -o mmap.lo `test -f '../../libbacktrace/mmap.c' || echo '$(srcdir)/'`../../libbacktrace/mmap.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mmap.Tpo $(DEPDIR)/mmap.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='../../libbacktrace/mmap.c' object='mmap.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mmap.lo `test -f '../../libbacktrace/mmap.c' || echo '$(srcdir)/'`../../libbacktrace/mmap.c + +.cc.o: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< + +.cc.obj: +@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.cc.lo: +@am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/libsanitizer/libbacktrace/backtrace-rename.h b/libsanitizer/libbacktrace/backtrace-rename.h new file mode 100644 index 00000000000..af8f36bd2d3 --- /dev/null +++ b/libsanitizer/libbacktrace/backtrace-rename.h @@ -0,0 +1,65 @@ +/* Ensure we don't pollute application namespace. */ +#define backtrace_alloc __asan_backtrace_alloc +#define backtrace_close __asan_backtrace_close +#define backtrace_create_state __asan_backtrace_create_state +#define backtrace_dwarf_add __asan_backtrace_dwarf_add +#define backtrace_free __asan_backtrace_free +#define backtrace_get_view __asan_backtrace_get_view +#define backtrace_initialize __asan_backtrace_initialize +#define backtrace_open __asan_backtrace_open +#define backtrace_pcinfo __asan_backtrace_pcinfo +#define backtrace_release_view __asan_backtrace_release_view +#define backtrace_syminfo __asan_backtrace_syminfo +#define backtrace_vector_finish __asan_backtrace_vector_finish +#define backtrace_vector_grow __asan_backtrace_vector_grow +#define backtrace_vector_release __asan_backtrace_vector_release + +#define cplus_demangle_builtin_types __asan_cplus_demangle_builtin_types +#define cplus_demangle_fill_ctor __asan_cplus_demangle_fill_ctor +#define cplus_demangle_fill_dtor __asan_cplus_demangle_fill_dtor +#define cplus_demangle_fill_extended_operator __asan_cplus_demangle_fill_extended_operator +#define cplus_demangle_fill_name __asan_cplus_demangle_fill_name +#define cplus_demangle_init_info __asan_cplus_demangle_init_info +#define cplus_demangle_mangled_name __asan_cplus_demangle_mangled_name +#define cplus_demangle_operators __asan_cplus_demangle_operators +#define cplus_demangle_print __asan_cplus_demangle_print +#define cplus_demangle_print_callback __asan_cplus_demangle_print_callback +#define cplus_demangle_type __asan_cplus_demangle_type +#define cplus_demangle_v3 __asan_cplus_demangle_v3 +#define cplus_demangle_v3_callback __asan_cplus_demangle_v3_callback +#define is_gnu_v3_mangled_ctor __asan_is_gnu_v3_mangled_ctor +#define is_gnu_v3_mangled_dtor __asan_is_gnu_v3_mangled_dtor +#define java_demangle_v3 __asan_java_demangle_v3 +#define java_demangle_v3_callback __asan_java_demangle_v3_callback + +#ifndef __cplusplus + +#include <string.h> + +extern void *__asan_internal_memcpy (void *, const void *, size_t); +extern void *__asan_internal_memset (void *, int, size_t); +extern int __asan_internal_memcmp (const void *, const void *, size_t); +extern int __asan_internal_strcmp (const char *, const char *); +extern int __asan_internal_strncmp (const char *, const char *, size_t); +extern size_t __asan_internal_strlen (const char *); +extern size_t __asan_internal_strnlen (const char *, size_t); + +#undef memcpy +#undef memset +#undef memcmp +#undef strcmp +#undef strncmp +#undef strlen +#undef strnlen + +#define memcpy(x,y,z) __asan_internal_memcpy (x, y, z) +#define memset(x,y,z) __asan_internal_memset (x, y, z) +#define memcmp(x,y,z) __asan_internal_memcmp (x, y, z) +#define strcmp(x,y) __asan_internal_strcmp (x, y) +#define strncmp(x,y,z) __asan_internal_strncmp (x, y, z) +#define strlen(x) __asan_internal_strlen (x) +#ifdef HAVE_DECL_STRNLEN +#define strnlen(x,y) __asan_internal_strnlen (x, y) +#endif + +#endif diff --git a/libsanitizer/libbacktrace/backtrace-supported.h.in b/libsanitizer/libbacktrace/backtrace-supported.h.in new file mode 100644 index 00000000000..c615f6406ab --- /dev/null +++ b/libsanitizer/libbacktrace/backtrace-supported.h.in @@ -0,0 +1,61 @@ +/* backtrace-supported.h.in -- Whether stack backtrace is supported. + Copyright (C) 2012-2013 Free Software Foundation, Inc. + Written by Ian Lance Taylor, Google. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3) The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. */ + +/* The file backtrace-supported.h.in is used by configure to generate + the file backtrace-supported.h. The file backtrace-supported.h may + be #include'd to see whether the backtrace library will be able to + get a backtrace and produce symbolic information. */ + + +/* BACKTRACE_SUPPORTED will be #define'd as 1 if the backtrace library + should work, 0 if it will not. Libraries may #include this to make + other arrangements. */ + +#define BACKTRACE_SUPPORTED @BACKTRACE_SUPPORTED@ + +/* BACKTRACE_USES_MALLOC will be #define'd as 1 if the backtrace + library will call malloc as it works, 0 if it will call mmap + instead. This may be used to determine whether it is safe to call + the backtrace functions from a signal handler. In general this + only applies to calls like backtrace and backtrace_pcinfo. It does + not apply to backtrace_simple, which never calls malloc. It does + not apply to backtrace_print, which always calls fprintf and + therefore malloc. */ + +#define BACKTRACE_USES_MALLOC @BACKTRACE_USES_MALLOC@ + +/* BACKTRACE_SUPPORTS_THREADS will be #define'd as 1 if the backtrace + library is configured with threading support, 0 if not. If this is + 0, the threaded parameter to backtrace_create_state must be passed + as 0. */ + +#define BACKTRACE_SUPPORTS_THREADS @BACKTRACE_SUPPORTS_THREADS@ diff --git a/libsanitizer/libbacktrace/bridge.cc b/libsanitizer/libbacktrace/bridge.cc new file mode 100644 index 00000000000..d553c6617d0 --- /dev/null +++ b/libsanitizer/libbacktrace/bridge.cc @@ -0,0 +1,84 @@ +/* bridge.cc -- extern "C" wrappers around sanitizer_common APIs. + Copyright (C) 2013 Free Software Foundation, Inc. + Written by Jakub Jelinek, Red Hat, Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + (1) Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + (2) Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + (3) The name of the author may not be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. */ + +#include "config.h" + +#include <string.h> + +#include "sanitizer_common/sanitizer_allocator_internal.h" + +extern "C" +{ + +void * +__asan_internal_memcpy (void *dest, const void *src, size_t n) +{ + return __sanitizer::internal_memcpy (dest, src, n); +} + +void * +__asan_internal_memset (void *dest, int c, size_t n) +{ + return __sanitizer::internal_memset (dest, c, n); +} + +int +__asan_internal_memcmp (const void *s1, const void *s2, size_t n) +{ + return __sanitizer::internal_memcmp (s1, s2, n); +} + +int +__asan_internal_strcmp (const char *s1, const char *s2) +{ + return __sanitizer::internal_strcmp (s1, s2); +} + +int +__asan_internal_strncmp (const char *s1, const char *s2, size_t n) +{ + return __sanitizer::internal_strncmp (s1, s2, n); +} + +size_t +__asan_internal_strlen (const char *str) +{ + return __sanitizer::internal_strlen (str); +} + +size_t +__asan_internal_strnlen (const char *str, size_t n) +{ + return __sanitizer::internal_strnlen (str, n); +} + +} diff --git a/libsanitizer/lsan/Makefile.am b/libsanitizer/lsan/Makefile.am index 4784d7cbdc3..7a508c12686 100644 --- a/libsanitizer/lsan/Makefile.am +++ b/libsanitizer/lsan/Makefile.am @@ -28,7 +28,11 @@ lsan_files = \ libsanitizer_lsan_la_SOURCES = $(sanitizer_lsan_files) liblsan_la_SOURCES = $(lsan_files) -liblsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS) +liblsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la +if LIBBACKTRACE_SUPPORTED +liblsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la +endif +liblsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS) liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/lsan/Makefile.in b/libsanitizer/lsan/Makefile.in index b09469e0990..47caebc09f8 100644 --- a/libsanitizer/lsan/Makefile.in +++ b/libsanitizer/lsan/Makefile.in @@ -35,6 +35,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_1 = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la subdir = lsan DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -44,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -51,6 +53,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -80,7 +83,7 @@ am__DEPENDENCIES_1 = liblsan_la_DEPENDENCIES = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ $(top_builddir)/interception/libinterception.la \ - $(am__DEPENDENCIES_1) + $(am__append_1) $(am__DEPENDENCIES_1) am__objects_1 = lsan_common.lo lsan_common_linux.lo am__objects_2 = $(am__objects_1) lsan.lo lsan_allocator.lo \ lsan_interceptors.lo lsan_preinit.lo lsan_thread.lo @@ -93,7 +96,7 @@ liblsan_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ libsanitizer_lsan_la_LIBADD = am_libsanitizer_lsan_la_OBJECTS = $(am__objects_1) libsanitizer_lsan_la_OBJECTS = $(am_libsanitizer_lsan_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -110,12 +113,16 @@ SOURCES = $(liblsan_la_SOURCES) $(libsanitizer_lsan_la_SOURCES) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -139,6 +146,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -178,6 +186,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -269,7 +278,10 @@ lsan_files = \ libsanitizer_lsan_la_SOURCES = $(sanitizer_lsan_files) liblsan_la_SOURCES = $(lsan_files) -liblsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS) +liblsan_la_LIBADD = \ + $(top_builddir)/sanitizer_common/libsanitizer_common.la \ + $(top_builddir)/interception/libinterception.la \ + $(am__append_1) $(LIBSTDCXX_RAW_CXX_LDFLAGS) liblsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_liblsan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/sanitizer_common/Makefile.am b/libsanitizer/sanitizer_common/Makefile.am index 979d52d77e1..8e9038dc8cf 100644 --- a/libsanitizer/sanitizer_common/Makefile.am +++ b/libsanitizer/sanitizer_common/Makefile.am @@ -1,11 +1,18 @@ -AM_CPPFLAGS = -I $(top_srcdir)/include - +AM_CPPFLAGS = -I $(top_srcdir)/include -isystem $(top_srcdir)/include/system + # May be used by toolexeclibdir. gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS) +if LIBBACKTRACE_SUPPORTED +AM_CXXFLAGS += -DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE \ + -I $(top_srcdir)/../libbacktrace \ + -I $(top_builddir)/libbacktrace \ + -I $(top_srcdir)/../include \ + -include $(top_srcdir)/libbacktrace/backtrace-rename.h +endif ACLOCAL_AMFLAGS = -I m4 noinst_LTLIBRARIES = libsanitizer_common.la diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in index 032cca41198..e9fd115e976 100644 --- a/libsanitizer/sanitizer_common/Makefile.in +++ b/libsanitizer/sanitizer_common/Makefile.in @@ -35,6 +35,12 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_1 = -DSANITIZER_LIBBACKTRACE -DSANITIZER_CP_DEMANGLE \ +@LIBBACKTRACE_SUPPORTED_TRUE@ -I $(top_srcdir)/../libbacktrace \ +@LIBBACKTRACE_SUPPORTED_TRUE@ -I $(top_builddir)/libbacktrace \ +@LIBBACKTRACE_SUPPORTED_TRUE@ -I $(top_srcdir)/../include \ +@LIBBACKTRACE_SUPPORTED_TRUE@ -include $(top_srcdir)/libbacktrace/backtrace-rename.h + subdir = sanitizer_common DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -44,6 +50,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -51,6 +58,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) @@ -72,7 +80,7 @@ am__objects_1 = sanitizer_allocator.lo sanitizer_common.lo \ sanitizer_win.lo am_libsanitizer_common_la_OBJECTS = $(am__objects_1) libsanitizer_common_la_OBJECTS = $(am_libsanitizer_common_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -89,12 +97,16 @@ SOURCES = $(libsanitizer_common_la_SOURCES) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -118,6 +130,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -157,6 +170,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -223,14 +237,15 @@ toolexeclibdir = @toolexeclibdir@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -AM_CPPFLAGS = -I $(top_srcdir)/include +AM_CPPFLAGS = -I $(top_srcdir)/include -isystem $(top_srcdir)/include/system # May be used by toolexeclibdir. gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER) AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \ -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \ -fomit-frame-pointer -funwind-tables -fvisibility=hidden \ - -Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) + -Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \ + $(am__append_1) ACLOCAL_AMFLAGS = -I m4 noinst_LTLIBRARIES = libsanitizer_common.la sanitizer_common_files = \ diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc index 5654d1de7d4..3023002af47 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.cc @@ -20,6 +20,10 @@ # include "backtrace-supported.h" # if SANITIZER_POSIX && BACKTRACE_SUPPORTED && !BACKTRACE_USES_MALLOC # include "backtrace.h" +# if SANITIZER_CP_DEMANGLE +# undef ARRAY_SIZE +# include "demangle.h" +# endif # else # define SANITIZER_LIBBACKTRACE 0 # endif @@ -31,6 +35,60 @@ namespace __sanitizer { namespace { +#if SANITIZER_CP_DEMANGLE +struct CplusV3DemangleData { + char *buf; + uptr size, allocated; +}; + +extern "C" { +static void CplusV3DemangleCallback(const char *s, size_t l, void *vdata) { + CplusV3DemangleData *data = (CplusV3DemangleData *)vdata; + uptr needed = data->size + l + 1; + if (needed > data->allocated) { + data->allocated *= 2; + if (needed > data->allocated) + data->allocated = needed; + char *buf = (char *)InternalAlloc(data->allocated); + if (data->buf) { + internal_memcpy(buf, data->buf, data->size); + InternalFree(data->buf); + } + data->buf = buf; + } + internal_memcpy(data->buf + data->size, s, l); + data->buf[data->size + l] = '\0'; + data->size += l; +} +} // extern "C" + +char *CplusV3Demangle(const char *name, bool always_alloc) { + CplusV3DemangleData data; + data.buf = 0; + data.size = 0; + data.allocated = 0; + if (cplus_demangle_v3_callback(name, DMGL_PARAMS | DMGL_ANSI, + CplusV3DemangleCallback, &data)) { + if (data.size + 64 > data.allocated) + return data.buf; + char *buf = internal_strdup(data.buf); + InternalFree(data.buf); + return buf; + } + if (data.buf) + InternalFree(data.buf); + if (always_alloc) + return internal_strdup(name); + return 0; +} +#else +const char *CplusV3Demangle(const char *name, bool always_alloc) { + if (always_alloc) + return internal_strdup(name); + return 0; +} +#endif + struct SymbolizeCodeData { AddressInfo *frames; uptr n_frames; @@ -49,7 +107,7 @@ static int SymbolizeCodePCInfoCallback(void *vdata, uintptr_t addr, info->Clear(); info->FillAddressAndModuleInfo(addr, cdata->module_name, cdata->module_offset); - info->function = internal_strdup(function); + info->function = CplusV3Demangle(function, true); if (filename) info->file = internal_strdup(filename); info->line = lineno; @@ -67,7 +125,7 @@ static void SymbolizeCodeCallback(void *vdata, uintptr_t addr, info->Clear(); info->FillAddressAndModuleInfo(addr, cdata->module_name, cdata->module_offset); - info->function = internal_strdup(symname); + info->function = CplusV3Demangle(symname, true); cdata->n_frames = 1; } } @@ -76,7 +134,7 @@ static void SymbolizeDataCallback(void *vdata, uintptr_t, const char *symname, uintptr_t symval, uintptr_t symsize) { DataInfo *info = (DataInfo *)vdata; if (symname && symval) { - info->name = internal_strdup(symname); + info->name = CplusV3Demangle(symname, true); info->start = symval; info->size = symsize; } @@ -121,6 +179,17 @@ bool LibbacktraceSymbolizer::SymbolizeData(DataInfo *info) { return true; } +const char *LibbacktraceSymbolizer::Demangle(const char *name) { +#if SANITIZER_CP_DEMANGLE + const char *demangled = CplusV3Demangle(name, false); + if (demangled) + return demangled; + return name; +#else + return 0; +#endif +} + #else // SANITIZER_LIBBACKTRACE LibbacktraceSymbolizer *LibbacktraceSymbolizer::get(LowLevelAllocator *alloc) { @@ -139,6 +208,10 @@ bool LibbacktraceSymbolizer::SymbolizeData(DataInfo *info) { return false; } +const char *LibbacktraceSymbolizer::Demangle(const char *name) { + return 0; +} + #endif // SANITIZER_LIBBACKTRACE } // namespace __sanitizer diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h index f09cea51268..05f0558c3d8 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_libbacktrace.h @@ -29,6 +29,8 @@ class LibbacktraceSymbolizer { bool SymbolizeData(DataInfo *info); + const char *Demangle(const char *name); + private: explicit LibbacktraceSymbolizer(void *state) : state_(state) {} diff --git a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc index 9f34b646217..7aead970382 100644 --- a/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc +++ b/libsanitizer/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc @@ -513,6 +513,11 @@ class POSIXSymbolizer : public Symbolizer { SymbolizerScope sym_scope(this); if (internal_symbolizer_ != 0) return internal_symbolizer_->Demangle(name); + if (libbacktrace_symbolizer_ != 0) { + const char *demangled = libbacktrace_symbolizer_->Demangle(name); + if (demangled) + return demangled; + } return DemangleCXXABI(name); } diff --git a/libsanitizer/tsan/Makefile.am b/libsanitizer/tsan/Makefile.am index ca41550f5c6..39ed2529c2c 100644 --- a/libsanitizer/tsan/Makefile.am +++ b/libsanitizer/tsan/Makefile.am @@ -39,7 +39,11 @@ tsan_files = \ tsan_rtl_amd64.S libtsan_la_SOURCES = $(tsan_files) -libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS) +libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la +if LIBBACKTRACE_SUPPORTED +libtsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la +endif +libtsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS) libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in index 0bd16082693..01c27b9b7d4 100644 --- a/libsanitizer/tsan/Makefile.in +++ b/libsanitizer/tsan/Makefile.in @@ -35,6 +35,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_1 = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la subdir = tsan DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -44,6 +45,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -51,6 +53,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -80,7 +83,7 @@ am__DEPENDENCIES_1 = libtsan_la_DEPENDENCIES = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ $(top_builddir)/interception/libinterception.la \ - $(am__DEPENDENCIES_1) + $(am__append_1) $(am__DEPENDENCIES_1) am__objects_1 = tsan_clock.lo tsan_interface_atomic.lo tsan_mutex.lo \ tsan_report.lo tsan_rtl_thread.lo tsan_symbolize.lo \ tsan_flags.lo tsan_interface.lo tsan_platform_linux.lo \ @@ -95,7 +98,7 @@ libtsan_la_OBJECTS = $(am_libtsan_la_OBJECTS) libtsan_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libtsan_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -126,12 +129,16 @@ SOURCES = $(libtsan_la_SOURCES) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -155,6 +162,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -194,6 +202,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -299,7 +308,10 @@ tsan_files = \ tsan_rtl_amd64.S libtsan_la_SOURCES = $(tsan_files) -libtsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la $(top_builddir)/interception/libinterception.la $(LIBSTDCXX_RAW_CXX_LDFLAGS) +libtsan_la_LIBADD = \ + $(top_builddir)/sanitizer_common/libsanitizer_common.la \ + $(top_builddir)/interception/libinterception.la \ + $(am__append_1) $(LIBSTDCXX_RAW_CXX_LDFLAGS) libtsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libtsan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libsanitizer/ubsan/Makefile.am b/libsanitizer/ubsan/Makefile.am index 24e405bd146..80b79e1cb82 100644 --- a/libsanitizer/ubsan/Makefile.am +++ b/libsanitizer/ubsan/Makefile.am @@ -22,6 +22,9 @@ libubsan_la_LIBADD = $(top_builddir)/sanitizer_common/libsanitizer_common.la if !USING_MAC_INTERPOSE libubsan_la_LIBADD += $(top_builddir)/interception/libinterception.la endif +if LIBBACKTRACE_SUPPORTED +libubsan_la_LIBADD += $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la +endif libubsan_la_LIBADD += $(LIBSTDCXX_RAW_CXX_LDFLAGS) libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan) diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in index dcb04c72d4d..c38740be666 100644 --- a/libsanitizer/ubsan/Makefile.in +++ b/libsanitizer/ubsan/Makefile.in @@ -36,6 +36,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @USING_MAC_INTERPOSE_FALSE@am__append_1 = $(top_builddir)/interception/libinterception.la +@LIBBACKTRACE_SUPPORTED_TRUE@am__append_2 = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la subdir = ubsan DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -45,6 +46,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/libstdc++-raw-cxx.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/stdint.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ $(top_srcdir)/acinclude.m4 $(top_srcdir)/../libtool.m4 \ @@ -52,6 +54,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; @@ -80,7 +83,7 @@ LTLIBRARIES = $(toolexeclib_LTLIBRARIES) am__DEPENDENCIES_1 = libubsan_la_DEPENDENCIES = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ - $(am__append_1) $(am__DEPENDENCIES_1) + $(am__append_1) $(am__append_2) $(am__DEPENDENCIES_1) am__objects_1 = ubsan_diag.lo ubsan_handlers.lo ubsan_handlers_cxx.lo \ ubsan_type_hash.lo ubsan_value.lo am_libubsan_la_OBJECTS = $(am__objects_1) @@ -88,7 +91,7 @@ libubsan_la_OBJECTS = $(am_libubsan_la_OBJECTS) libubsan_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(libubsan_la_LDFLAGS) $(LDFLAGS) -o $@ -DEFAULT_INCLUDES = -I.@am__isrc@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f @@ -105,12 +108,16 @@ SOURCES = $(libubsan_la_SOURCES) ETAGS = etags CTAGS = ctags ACLOCAL = @ACLOCAL@ +ALLOC_FILE = @ALLOC_FILE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BACKTRACE_SUPPORTED = @BACKTRACE_SUPPORTED@ +BACKTRACE_SUPPORTS_THREADS = @BACKTRACE_SUPPORTS_THREADS@ +BACKTRACE_USES_MALLOC = @BACKTRACE_USES_MALLOC@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ @@ -134,6 +141,7 @@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ +FORMAT_FILE = @FORMAT_FILE@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ @@ -173,6 +181,7 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIEW_FILE = @VIEW_FILE@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -259,7 +268,7 @@ ubsan_files = \ libubsan_la_SOURCES = $(ubsan_files) libubsan_la_LIBADD = \ $(top_builddir)/sanitizer_common/libsanitizer_common.la \ - $(am__append_1) $(LIBSTDCXX_RAW_CXX_LDFLAGS) + $(am__append_1) $(am__append_2) $(LIBSTDCXX_RAW_CXX_LDFLAGS) libubsan_la_LDFLAGS = -version-info `grep -v '^\#' $(srcdir)/libtool-version` $(link_libubsan) # Work around what appears to be a GNU make bug handling MAKEFLAGS diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 799de4e200b..78d99829759 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,4153 +1,73 @@ -2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> - - Update copyright years - -2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> - - * testsuite/18_support/new_handler.cc, - testsuite/18_support/terminate_handler.cc, - testsuite/18_support/unexpected_handler.cc: Use the standard form for - the copyright notice. - -2013-12-22 Hans-Peter Nilsson <hp@axis.com> - - * testsuite/20_util/hash/chi2_quality.h: Break out from - chi2_quality.cc. - * testsuite/20_util/hash/chi2_q_bit_flip_set.cc: Ditto. - * testsuite/20_util/hash/chi2_q_document_words.cc: Ditto. - * testsuite/20_util/hash/chi2_q_bit_string_set.cc: Ditto. Increase - SAMPLES to 35000 for simulator targets. - * testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc: Ditto. - * testsuite/20_util/hash/chi2_q_uniform_random.cc: Ditto. - * testsuite/20_util/hash/chi2_quality.cc: Remove. - -2013-12-10 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/20_util/is_base_of/value.cc: Add test. - - * include/std/fstream: Tiny formatting tweak. - -2013-12-09 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/59427 - * include/bits/fstream.tcc (basic_filebuf<>::overflow, - basic_filebuf<>::xsputn): Per lwg/596, ios_base::app implies - ios_base:out. - * include/std/fstream (basic_filebuf<>::_M_set_buffer): Likewise. - * testsuite/27_io/basic_filebuf/sputc/char/59427.cc: New. - * testsuite/27_io/basic_filebuf/sputn/char/59427.cc: Likewise. - -2013-12-09 Renlin Li <Renlin.Li@arm.com> - - * testsuite/20_util/hash/chi2_quality.cc: Change -DSAMPLES=30000. - -2013-12-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/30_threads/async/async.cc: Fix race condition in test. - -2013-12-08 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/20_util/add_const/requirements/explicit_instantiation.cc: - New. - * testsuite/20_util/add_const/value.cc: Likewise. - * testsuite/20_util/add_cv/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/add_cv/value.cc: Likewise. - * testsuite/20_util/add_pointer/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/add_pointer/value.cc: Likewise. - * testsuite/20_util/add_volatile/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/add_volatile/value.cc: Likewise. - * testsuite/20_util/alignment_of/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/alignment_of/requirements/typedefs.cc: Likewise. - * testsuite/20_util/alignment_of/value.cc: Likewise. - * testsuite/20_util/extent/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/extent/requirements/typedefs.cc: Likewise. - * testsuite/20_util/extent/value.cc: Likewise. - * testsuite/20_util/has_virtual_destructor/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/has_virtual_destructor/requirements/ - typedefs.cc: Likewise. - * testsuite/20_util/has_virtual_destructor/value.cc: Likewise. - * testsuite/20_util/is_abstract/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_abstract/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_abstract/value.cc: Likewise. - * testsuite/20_util/is_arithmetic/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/is_arithmetic/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_arithmetic/value.cc: Likewise. - * testsuite/20_util/is_array/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_array/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_array/value.cc: Likewise. - * testsuite/20_util/is_base_of/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_base_of/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_base_of/value.cc: Likewise. - * testsuite/20_util/is_class/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_class/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_class/value.cc: Likewise. - * testsuite/20_util/is_const/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_const/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_const/value.cc: Likewise. - * testsuite/20_util/is_empty/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_empty/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_empty/value.cc: Likewise. - * testsuite/20_util/is_enum/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/is_enum/requirements/typedefs.cc - * testsuite/20_util/is_enum/value.cc: Likewise. - * testsuite/20_util/is_pointer/requirements/explicit_instantiation.cc - * testsuite/20_util/is_pointer/value.cc: Likewise. - * testsuite/20_util/is_polymorphic/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/is_polymorphic/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_polymorphic/value.cc: Likewise. - * testsuite/20_util/is_same/requirements/explicit_instantiation.cc - * testsuite/20_util/is_same/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_same/value.cc: Likewise. - * testsuite/20_util/is_union/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/is_union/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_union/value.cc: Likewise. - * testsuite/20_util/is_void/requirements/explicit_instantiation.cc - * testsuite/20_util/is_void/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_void/value.cc: Likewise. - * testsuite/20_util/is_volatile/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/is_volatile/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_volatile/value.cc: Likewise. - * testsuite/20_util/rank/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/rank/requirements/typedefs.cc: Likewise. - * testsuite/20_util/rank/value.cc: Likewise. - * testsuite/20_util/remove_all_extents/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/remove_all_extents/value.cc: Likewise. - * testsuite/20_util/remove_const/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/remove_const/value.cc: Likewise. - * testsuite/20_util/remove_cv/requirements/explicit_instantiation.cc: - Likewise. - * testsuite/20_util/remove_cv/value.cc: Likewise. - * testsuite/20_util/remove_extent/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/remove_extent/value.cc: Likewise. - * testsuite/20_util/remove_pointer/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/remove_pointer/value.cc: Likewise. - * testsuite/20_util/remove_volatile/requirements/ - explicit_instantiation.cc: Likewise. - * testsuite/20_util/remove_volatile/value.cc: Likewise. - -2013-12-06 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/util/testsuite_tr1.h (test_category, test_property, - test_relationship): constexpr in c++11 mode. - * testsuite/20_util/add_lvalue_reference/value.cc: Use static_assert - and change to dg-do compile testcase. - * testsuite/20_util/add_rvalue_reference/value.cc: Likewise. - * testsuite/20_util/aligned_storage/value.cc: Likewise. - * testsuite/20_util/has_trivial_copy_assign/value.cc: Likewise. - * testsuite/20_util/has_trivial_copy_constructor/value.cc: Likewise. - * testsuite/20_util/has_trivial_default_constructor/value.cc: Likewise. - * testsuite/20_util/is_compound/value.cc: Likewise. - * testsuite/20_util/is_constructible/value.cc: Likewise. - * testsuite/20_util/is_convertible/value.cc: Likewise. - * testsuite/20_util/is_copy_assignable/value.cc: Likewise. - * testsuite/20_util/is_copy_constructible/value.cc: Likewise. - * testsuite/20_util/is_floating_point/value.cc: Likewise. - * testsuite/20_util/is_function/value.cc: Likewise. - * testsuite/20_util/is_fundamental/value.cc: Likewise. - * testsuite/20_util/is_integral/value.cc: Likewise. - * testsuite/20_util/is_literal_type/value.cc: Likewise. - * testsuite/20_util/is_lvalue_reference/value.cc: Likewise. - * testsuite/20_util/is_member_function_pointer/value.cc: Likewise. - * testsuite/20_util/is_member_object_pointer/value.cc: Likewise. - * testsuite/20_util/is_member_pointer/value.cc: Likewise. - * testsuite/20_util/is_move_assignable/value.cc: Likewise. - * testsuite/20_util/is_move_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_assignable/value.cc: Likewise. - * testsuite/20_util/is_nothrow_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_copy_assignable/value.cc: Likewise. - * testsuite/20_util/is_nothrow_copy_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_default_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_move_assignable/value.cc: Likewise. - * testsuite/20_util/is_nothrow_move_constructible/value.cc: Likewise. - * testsuite/20_util/is_null_pointer/value.cc: Likewise. - * testsuite/20_util/is_object/value.cc: Likewise. - * testsuite/20_util/is_pod/value.cc: Likewise. - * testsuite/20_util/is_reference/value.cc: Likewise. - * testsuite/20_util/is_rvalue_reference/value.cc: Likewise. - * testsuite/20_util/is_scalar/value.cc: Likewise. - * testsuite/20_util/is_signed/value.cc: Likewise. - * testsuite/20_util/is_standard_layout/value.cc: Likewise. - * testsuite/20_util/is_trivial/value.cc: Likewise. - * testsuite/20_util/is_trivially_destructible/value.cc: Likewise. - * testsuite/20_util/is_unsigned/value.cc: Likewise. - * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Likewise. - * testsuite/20_util/remove_reference/value.cc: Likewise. - -2013-12-03 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/fstream (basic_filebuf::open): Use preformatted text - for table in Doxygen comment. - -2013-12-03 Tim Shen <timshen91@gmail.com> - - * regex_compiler.h: Add todo comment. - * regex_executor.tcc: Likewise. - -2013-11-29 Matthias Klose <doko@ubuntu.com> - - * testsuite/experimental/string_view/requirements/exception, - testsuite/experimental/string_view/capacity/wchar_t, - testsuite/experimental/string_view/capacity/char: Remove empty dirs. - -2013-11-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * testsuite/ext/random/hypergeometric_distribution/operators/values.cc: - Use dg-require-cmath instead. - - * testsuite/ext/random/hypergeometric_distribution/operators/values.cc - (test01): Wrap in _GLIBCXX_USE_C99_MATH_TR1. - -2013-11-22 François Dumont <fdumont@gcc.gnu.org> - - * include/debug/safe_local_iterator.h (_Safe_local_iterator<>): - Remove _M_bucket, use same information in normal local_iterator. - (operator==): Remove redundant _M_can_compare check. - * include/debug/safe_local_iterator.tcc: Adapt. - * include/debug/unordered_set: Likewise. - * include/debug/unordered_map: Likewise. - -2013-11-22 Jakub Jelinek <jakub@redhat.com> - - * testsuite/Makefile.am (check_DEJAGNU_normal_targets): Add 10. - (check-DEJAGNU): Add normal10, run 28_regex/[ab]* - tests as another separate job. - * testsuite/Makefile.in: Regenerated. - -2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com> - - * acinclude.m4 (libtool_VERSION): Bump. - * configure: Regenerate. - * doc/xml/manual/abi.xml: Update version information. - - PR libstdc++/59247 - * include/bits/c++config (_GLIBCXX_INLINE_VERSION): Declare namespace - std::experimental::__7 as inline. - * include/bits/regex.h (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Do not - enclose namespace __detail. - * include/bits/regex.tcc (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise. - * include/std/iomanip (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise. - * include/ext/pb_ds/tag_and_trait.hpp (detail): Fix comment. - * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number. - -2013-11-22 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/ext/random/hypergeometric_distribution/operators/ - values.cc: Fix further thinkos. - -2013-11-22 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/ext/random/hypergeometric_distribution/operators/ - values.cc: Fix thinkos. - -2013-11-21 Edward Smith-Rowland <3dw4rd@verizon.net> - - * include/experimental/string_view: Rep empty string with unit-length - static constexpr string. Uncomment _GLIBCXX_VISIBILITY. Enforce - invariant of no nullptr string pointer. - * include/experimental/string_view.tcc: Ditto. - * testsuite/experimental/string_view/cons/char/1.cc: data() for empty - string_view is no longer nullptr. - * testsuite/experimental/string_view/cons/wchar_t/1.cc: Ditto. - * testsuite/experimental/string_view/operations/data/char/1.cc: Ditto. - * testsuite/experimental/string_view/operations/data/wchar_t/1.cc: - Ditto. - -2013-11-21 Edward Smith-Rowland <3dw4rd@verizon.net> - - Implement __gnu_cxx::hypergeometric_distribution. - * include/ext/random: Add hypergeometric_distribution. - * include/ext/random.tcc: Add hypergeometric_distribution. - * testsuite/util/testsuite_random.h (hypergeometric_pdf): New pdf - for the hypergeometric discreet distribution; - (lbincoef): New supporting function for binomial coefficients. - * testsuite/ext/random/hypergeometric_distribution/operators/ - serialize.cc: New. - * testsuite/ext/random/hypergeometric_distribution/operators/ - equal.cc: New. - * testsuite/ext/random/hypergeometric_distribution/operators/ - inequal.cc: New. - * testsuite/ext/random/hypergeometric_distribution/operators/ - values.cc: New. - * testsuite/ext/random/hypergeometric_distribution/cons/parms.cc: New. - * testsuite/ext/random/hypergeometric_distribution/cons/default.cc: New. - * testsuite/ext/random/hypergeometric_distribution/requirements/ - explicit_instantiation/1.cc: New. - * testsuite/ext/random/hypergeometric_distribution/requirements/ - typedefs.cc: New. - -2013-11-20 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR c++/59173 - * include/ext/pointer.h (pointer_traits<>::rebind<>): Add template - keyword in nested name. - - PR libstdc++/49204 - * include/std/future (__future_base::_State_base): Rename to - __future_base::_State_baseV2. - (__future_base::_State_baseV2::~_State_baseV2): Define as defaulted. - (__future_base::_State_baseV2::_M_run_deferred): Rename to - _M_complete_async. - (__future_base::_State_baseV2::_M_has_deferred): Add new virtual. - (__future_base::_State_baseV2::wait_for): Call _M_has_deferred() to - test for a deferred function, or call _M_complete_async() to join an - async thread that has made the shared state ready. - (__future_base::_State_baseV2::wait_until): Likewise. - (__future_base::_Async_state_common): Rename to _Async_state_commonV2. - (__future_base::_Async_state_commonV2::_M_run_deferred): Rename to - _M_complete_async. - * src/c++11/compatibility-thread-c++0x.cc (__future_base::_State_base): - Export old definition. - (__future_base::_Async_state_common): Likewise. - * src/c++11/future.cc (__future_base::_State_base::~_State_base): - Remove. - * doc/xml/manual/status_cxx2011.xml: Update status. - * testsuite/30_threads/async/async.cc: Test future_status::timeout - and future_status::ready. - * testsuite/30_threads/async/sync.cc: Test future_status::deferred. - -2013-11-20 David Edelsohn <dje.gcc@gmail.com> - - * testsuite/17_intro/static.cc: Ignore AIX TOC reload warnings. - -2013-11-19 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/23_containers/forward_list/allocator/noexcept.cc: Change - to compile-only test. Adjust swap overload to handle rebound - allocators. - * testsuite/23_containers/map/allocator/noexcept.cc: Likewise. - * testsuite/23_containers/multimap/allocator/noexcept.cc: Likewise. - * testsuite/23_containers/multiset/allocator/noexcept.cc: Likewise. - * testsuite/23_containers/set/allocator/noexcept.cc: Likewise. - * testsuite/23_containers/unordered_map/allocator/noexcept.cc: - Likewise. - * testsuite/23_containers/unordered_multimap/allocator/noexcept.cc: - Likewise. - * testsuite/23_containers/unordered_multiset/allocator/noexcept.cc: - Likewise. - * testsuite/23_containers/unordered_set/allocator/noexcept.cc: - Likewise. - * testsuite/23_containers/vector/allocator/noexcept.cc: Likewise. - * testsuite/23_containers/vector/allocator/swap.cc: Add elements - before swapping. - - * config/abi/pre/gnu.ver (_ZNSt11regex_errorC*): Export regex_error - constructors. - * testsuite/20_util/addressof/1.cc: Remove { dg-do compile }. - * testsuite/20_util/allocator_traits/members/destroy.cc: Likewise. - * testsuite/20_util/allocator_traits/members/select.cc: Likewise. Fix - failure. - * testsuite/28_regex/basic_regex/ctors/extended/cstring.cc: Likewise. - * testsuite/28_regex/init-list.cc: Likewise. - * testsuite/28_regex/regex_error/regex_error.cc: Likewise. - * testsuite/28_regex/sub_match/length.cc: Likewise. Add main. - * testsuite/28_regex/sub_match/cast_char.cc: Likewise. Fix test. - * testsuite/28_regex/sub_match/cast_wchar_t.cc: Likewise. - * testsuite/tr1/7_regular_expressions/regex/cons/char/ - c_string_extended.cc: Delete. - -2013-11-19 Paolo Carlini <paolo.carlini@oracle.com> - - * include/experimental/string_view (_S_max_size): Remove. - (basic_string_view<>::max_size): Adjust. - * testsuite/experimental/string_view/capacity/1.cc: Clean-up. - * testsuite/experimental/string_view/inserters/pod/10081-out.cc: - Likewise. - -2013-11-19 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/status_cxx2014.xml: Create new table for TS statuses. - -2013-11-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/shared_ptr_base.h (_Sp_counted_base<_S_single>): Use - non-atomic operations. - * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line number. - * testsuite/20_util/shared_ptr/cons/void_neg.cc: Likewise. - -2013-11-16 Edward Smith-Rowland <3dw4rd@verizon.net> - - Implement N3762 string_view: a non-owning reference to a string. - * include/Makefile.am: Add string_view and string_view.tcc. - * include/Makefile.in: Regenerate. - * include/experimental/string_view: Implement basic_string_view. - * include/experimental/string_view.tcc: Implement basic_string_view. - * testsuite/experimental/string_view/capacity/1.cc: New. - * testsuite/experimental/string_view/cons/char/1.cc: New. - * testsuite/experimental/string_view/cons/char/2.cc: New. - * testsuite/experimental/string_view/cons/char/3.cc: New. - * testsuite/experimental/string_view/cons/wchar_t/1.cc: New. - * testsuite/experimental/string_view/cons/wchar_t/2.cc: New. - * testsuite/experimental/string_view/cons/wchar_t/3.cc: New. - * testsuite/experimental/string_view/element_access/char/1.cc: New. - * testsuite/experimental/string_view/element_access/char/2.cc: New. - * testsuite/experimental/string_view/element_access/char/empty.cc: New. - * testsuite/experimental/string_view/element_access/char/front_back.cc: - New. - * testsuite/experimental/string_view/element_access/wchar_t/1.cc: New. - * testsuite/experimental/string_view/element_access/wchar_t/2.cc: New. - * testsuite/experimental/string_view/element_access/wchar_t/empty.cc: - New. - * testsuite/experimental/string_view/element_access/wchar_t/ - front_back.cc: New. - * testsuite/experimental/string_view/include.cc: New. - * testsuite/experimental/string_view/inserters/char/1.cc: New. - * testsuite/experimental/string_view/inserters/char/2.cc: New. - * testsuite/experimental/string_view/inserters/char/3.cc: New. - * testsuite/experimental/string_view/inserters/pod/10081-out.cc: New. - * testsuite/experimental/string_view/inserters/wchar_t/1.cc: New. - * testsuite/experimental/string_view/inserters/wchar_t/2.cc: New. - * testsuite/experimental/string_view/inserters/wchar_t/3.cc: New. - * testsuite/experimental/string_view/literals/types.cc: New. - * testsuite/experimental/string_view/literals/values.cc: New. - * testsuite/experimental/string_view/modifiers/remove_prefix/char/1.cc: - New. - * testsuite/experimental/string_view/modifiers/remove_prefix/wchar_t/ - 1.cc: New. - * testsuite/experimental/string_view/modifiers/remove_suffix/char/1.cc: - New. - * testsuite/experimental/string_view/modifiers/remove_suffix/wchar_t/ - 1.cc: New. - * testsuite/experimental/string_view/operations/compare/char/1.cc: New. - * testsuite/experimental/string_view/operations/compare/char/13650.cc: - New. - * testsuite/experimental/string_view/operations/compare/wchar_t/1.cc: - New. - * testsuite/experimental/string_view/operations/compare/wchar_t/ - 13650.cc: New. - * testsuite/experimental/string_view/operations/data/char/1.cc: New. - * testsuite/experimental/string_view/operations/data/wchar_t/1.cc: New. - * testsuite/experimental/string_view/operations/find/char/1.cc: New. - * testsuite/experimental/string_view/operations/find/char/2.cc: New. - * testsuite/experimental/string_view/operations/find/char/3.cc: New. - * testsuite/experimental/string_view/operations/find/char/4.cc: New. - * testsuite/experimental/string_view/operations/find/wchar_t/1.cc: New. - * testsuite/experimental/string_view/operations/find/wchar_t/2.cc: New. - * testsuite/experimental/string_view/operations/find/wchar_t/3.cc: New. - * testsuite/experimental/string_view/operations/find/wchar_t/4.cc: New. - * testsuite/experimental/string_view/operations/rfind/char/1.cc: New. - * testsuite/experimental/string_view/operations/rfind/char/2.cc: New. - * testsuite/experimental/string_view/operations/rfind/char/3.cc: New. - * testsuite/experimental/string_view/operations/rfind/wchar_t/1.cc: New. - * testsuite/experimental/string_view/operations/rfind/wchar_t/2.cc: New. - * testsuite/experimental/string_view/operations/rfind/wchar_t/3.cc: New. - * testsuite/experimental/string_view/operations/substr/char/1.cc: New. - * testsuite/experimental/string_view/operations/substr/wchar_t/1.cc: - New. - * testsuite/experimental/string_view/operators/char/2.cc: New. - * testsuite/experimental/string_view/operators/wchar_t/2.cc: New. - * testsuite/experimental/string_view/range_access/char/1.cc: New. - * testsuite/experimental/string_view/range_access/wchar_t/1.cc: New. - * testsuite/experimental/string_view/requirements/ - explicit_instantiation/1.cc: New. - * testsuite/experimental/string_view/requirements/ - explicit_instantiation/char/1.cc: New. - * testsuite/experimental/string_view/requirements/ - explicit_instantiation/char16_t/1.cc: New. - * testsuite/experimental/string_view/requirements/ - explicit_instantiation/char32_t/1.cc: New. - * testsuite/experimental/string_view/requirements/ - explicit_instantiation/wchar_t/1.cc: New. - * testsuite/experimental/string_view/requirements/typedefs.cc: New. - * testsuite/experimental/string_view/types/1.cc: New. - -2013-11-16 François Dumont <fdumont@gcc.gnu.org> - - * testsuite/23_containers/unordered_set/55043.cc (equal): Add - missing & on rhs parameter. - -2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/stl_bvector.h (vector<bool>::emplace_back()): LWG 2187: - Define. - (vector<bool>::emplace()): Likewise. - * testsuite/23_containers/vector/bool/emplace.cc: New. - -2013-11-15 OndÅ™ej BÃlka <neleai@seznam.cz> - Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/build_hacking.xml: Fix documentation typos. - * doc/xml/manual/configure.xml: Likewise. - * include/bits/atomic_base.h: Fix typos in comments. - * include/bits/random.h: Likewise. - * include/ext/cast.h: Likewise. - * libsupc++/cxxabi.h: Likewise. - * testsuite/ext/pb_ds/example/hash_illegal_resize.cc: Likewise. - * testsuite/tr1/5_numerical_facilities/special_functions/testcase.h: - Likewise. - * testsuite/util/exception/safety.h: Likewise. - * testsuite/util/testsuite_containers.h: Likewise. - * testsuite/util/testsuite_hooks.cc: Likewise. - -2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/stl_map.h (map): Implement C++11 allocator-aware - container requirements. - * include/bits/stl_multimap.h (multimap): Likewise. - * include/bits/stl_multiset.h (multiset): Likewise. - * include/bits/stl_set.h (set): Likewise. - * include/bits/stl_tree.h (_Rb_tree_node): Use __aligned_buffer and - add accessors for value. - (_Rb_tree_iterator, _Rb_tree_const_iterator): Use _Rb_tree_node - accessors. - (_Rb_tree): Use allocator_traits and implement support for sets and - maps the be allocator-aware. - * include/bits/forward_list.h (_Fwd_list_base::_M_create_node): Do - not zero-initialize storage buffer. - * include/bits/hashtable_policy.h (_Hashtable_alloc::_M_allocate_node): - Likewise. - * include/bits/stl_vector.h (vector(vector&&, const allocator_type&)): - Add conditional noexcept specification. - * doc/xml/manual/status_cxx2011.xml: Update status of containers. - * testsuite/util/testsuite_allocator.h: Re-indent. - * testsuite/23_containers/forward_list/allocator/copy.cc: Test - allocator-extended copy constructor. - * testsuite/23_containers/unordered_map/allocator/copy.cc: Likewise. - * testsuite/23_containers/unordered_multimap/allocator/copy.cc: - Likewise. - * testsuite/23_containers/unordered_multiset/allocator/copy.cc: - Likewise. - * testsuite/23_containers/unordered_set/allocator/copy.cc: Likewise. - * testsuite/23_containers/vector/allocator/copy.cc: Likewise. - * testsuite/23_containers/forward_list/allocator/move.cc: New. - * testsuite/23_containers/unordered_map/allocator/move.cc: New. - * testsuite/23_containers/unordered_multimap/allocator/move.cc: New. - * testsuite/23_containers/unordered_multiset/allocator/move.cc: New. - * testsuite/23_containers/unordered_set/allocator/move.cc: New. - * testsuite/23_containers/vector/allocator/move.cc: New. - * testsuite/23_containers/map/allocator/copy.cc: New. - * testsuite/23_containers/map/allocator/copy_assign.cc: New. - * testsuite/23_containers/map/allocator/minimal.cc: New. - * testsuite/23_containers/map/allocator/move.cc: New. - * testsuite/23_containers/map/allocator/move_assign.cc: New. - * testsuite/23_containers/map/allocator/noexcept.cc: New. - * testsuite/23_containers/map/allocator/swap.cc: New. - * testsuite/23_containers/multimap/allocator/copy.cc: New. - * testsuite/23_containers/multimap/allocator/copy_assign.cc: New. - * testsuite/23_containers/multimap/allocator/minimal.cc: New. - * testsuite/23_containers/multimap/allocator/move.cc: New. - * testsuite/23_containers/multimap/allocator/move_assign.cc: New. - * testsuite/23_containers/multimap/allocator/noexcept.cc: New. - * testsuite/23_containers/multimap/allocator/swap.cc: New. - * testsuite/23_containers/multiset/allocator/copy.cc: New. - * testsuite/23_containers/multiset/allocator/copy_assign.cc: New. - * testsuite/23_containers/multiset/allocator/minimal.cc: New. - * testsuite/23_containers/multiset/allocator/move.cc: New. - * testsuite/23_containers/multiset/allocator/move_assign.cc: New. - * testsuite/23_containers/multiset/allocator/noexcept.cc: New. - * testsuite/23_containers/multiset/allocator/swap.cc: New. - * testsuite/23_containers/set/allocator/copy.cc: New. - * testsuite/23_containers/set/allocator/copy_assign.cc: New. - * testsuite/23_containers/set/allocator/minimal.cc: New. - * testsuite/23_containers/set/allocator/move.cc: New. - * testsuite/23_containers/set/allocator/move_assign.cc: New. - * testsuite/23_containers/set/allocator/noexcept.cc: New. - * testsuite/23_containers/set/allocator/swap.cc: New. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> - - * scripts/extract_symvers.in: Ignore <localentry: > fields - in readelf --symbols output. - -2013-11-14 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/alloc_traits.h (__allow_copy_cons): Remove. - (__check_copy_constructible): Likewise. - * include/bits/unordered_map.h (unordered_map, unordered_multimap): - Do not derive from __check_copy_constructible. - * include/bits/unordered_set.h (unordered_set, unordered_multiset): - Likewise. - * testsuite/23_containers/unordered_map/55043.cc: It is no longer - necessary for is_copy_constructible to be correct to use nested - unordered containers. - * testsuite/23_containers/unordered_multimap/55043.cc: Likewise. - * testsuite/23_containers/unordered_set/55043.cc: Likewise. - * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. - -2013-11-13 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/59087 - * include/ext/pod_char_traits.h: Uglify V, I and S. - -2013-11-11 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/54562 - * include/std/mutex (__timed_mutex_impl::__clock_t): Use - high_resolution_clock for absolute timeouts, because - pthread_mutex_timedlock uses CLOCK_REALTIME not CLOCK_MONOTONIC. - (__timed_mutex_impl::_M_try_lock_for): Use steady_clock for relative - timeouts as per [thread.req.timing]. - (__timed_mutex_impl::_M_try_lock_until<Clock,Duration>): Convert to - __clock_t time point instead of using _M_try_lock_for. - -2013-11-09 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/58982 - * include/bits/stl_algobase.h (__copy_move::__copy_m): Use assertion - to prevent using memmove() on non-assignable types. - (__copy_move_backward::__copy_move_b): Likewise. - * include/bits/stl_uninitialized.h (uninitialized_copy - uninitialized_copy_n, uninitialized_fill, uninitialized_fill_n, - __uninitialized_default, __uninitialized_default_n): Check for - assignable as well as trivial. - * testsuite/20_util/specialized_algorithms/uninitialized_copy/ - 58982.cc: New. - * testsuite/20_util/specialized_algorithms/uninitialized_copy_n/ - 58982.cc: New. - * testsuite/20_util/specialized_algorithms/uninitialized_fill/ - 58982.cc: New. - * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/ - 58982.cc: New. - * testsuite/25_algorithms/copy/58982.cc: New. - * testsuite/25_algorithms/copy_n/58982.cc: New. - -2013-11-08 François Dumont <fdumont@gcc.gnu.org> - - * include/debug/safe_iterator.h (_BeforeBeginHelper<>::_S_Is): - Take only a const safe iterator reference. - (_BeforeBeginHelper<>::_S_Is_beginnest): Likewise. - (__get_distance): Take only one type of iterator. - (_Safe_iterator<>::_M_valid_range<>): Not template anymore. - (_Safe_iterator<>::_M_get_sequence()): Return pointer to const - sequence from a const_iterator and a pointer to sequence from an - iterator. - * include/debug/safe_iterator.tcc: Adapt. - * include/debug/safe_local_iterator.h - (_Safe_local_iterator<>::_M_valid_range<>): Not template anymore. - (_Safe_local_iterator<>::_M_get_sequence()): Return pointer to - const sequence from a const_iterator and a pointer to sequence - from an iterator. - * include/debug/safe_local_iterator.tcc: Adapt. - * include/debug/forward_list - (_BeforeBeginHelper<std::__debug::forward_list<>>): Adapt. - -2013-11-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/regex_automaton.h (__detail::_State): Split - non-dependent parts into new _State_base. - (__detail::_NFA): Likewise for _NFA_base. Use std::move() to avoid - copies when inserting _MatcherT and _StateT objects. - * include/bits/regex_automaton.tcc: Move member definitions to base - class. Qualify dependent names. - * include/bits/regex_compiler.h (__detail::_Compiler::_M_get_nfa): Make - non-const and use std::move to avoid copying. - * include/bits/regex_compiler.tcc: Likewise. - * include/bits/regex_executor.h (__detail::_Executor::_M_is_word): Use - array, so past-the-end iterator is valid. - - * include/bits/regex_automaton.h (__detail::_State, __detail::_NFA, - __detail::_StateSeq): Remove redundant _CharT template parameters. - * include/bits/regex_automaton.tcc: Likewise. - * include/bits/regex_compiler.h (__detail::_Compiler): Likewise. - (__compile_nfa): Add object generator for _Compiler. - * include/bits/regex_compiler.tcc: Remove _CharT template parameters. - * include/bits/regex_executor.h: Likewise. - * include/bits/regex_executor.tcc: Likewise. - * include/bits/regex.h (basic_regex): Assert char_type matches. Use - __compile_nfa object generator. Remove _CharT template parameter. - - * include/bits/regex_compiler.h (__detail::_AnyMatcher, - __detail::_CharMatcher, __detail::_BracketMatcher): Remove redundant - _CharT template parameters. - * include/bits/regex_compiler.tcc: Likewise. - - * include/bits/regex_compiler.h (__detail::__compile_nfa): Overload - so that std::basic_string<C> and std::vector<C> iterators dispatch to - the const C* compiler. - - * include/bits/regex_compiler.h (__detail::__has_contiguous_iter): - vector<bool> storage is not contiguous. - -2013-11-06 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/regex_automaton.h (_S_opcode_word_boundry): Rename to - _S_opcode_word_boundary. - * include/bits/regex_automaton.tcc: Likewise. - * include/bits/regex_executor.h (__detail::_Executor::_M_word_boundry): - Rename to _M_word_boundary. - * include/bits/regex_executor.tcc: Likewise. - -2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> - - N3655 C++1y TransformationTraits Redux - * include/std/type_traits (remove_const_t, remove_volatile_t, - remove_cv_t, add_const_t, add_volatile_t, add_cv_t, remove_reference_t, - add_lvalue_reference_t, add_rvalue_reference_t, make_signed_t, - make_unsigned_t, remove_extent_t, remove_all_extents_t, - remove_pointer_t, add_pointer_t, aligned_storage_t, decay_t, - enable_if_t, conditional_t, common_type_t, underlying_type_t, - result_of_t): Define. - * doc/xml/manual/status_cxx2014.xml: Update. - * testsuite/20_util/add_lvalue_reference/requirements/typedefs-3.cc: - New. - * testsuite/20_util/add_rvalue_reference/requirements/typedefs-3.cc: - New. - * testsuite/20_util/common_type/requirements/typedefs-3.cc: New. - * testsuite/20_util/conditional/requirements/typedefs-2.cc: New. - * testsuite/20_util/decay/requirements/typedefs-2.cc: New. - * testsuite/20_util/enable_if/requirements/typedefs-2.cc: New. - * testsuite/20_util/make_signed/requirements/typedefs-3.cc: New. - * testsuite/20_util/make_unsigned/requirements/typedefs-3.cc: New. - * testsuite/20_util/remove_reference/requirements/typedefs.cc: New. - * testsuite/20_util/result_of/requirements/typedefs.cc: New. - * testsuite/20_util/underlying_type/requirements/typedefs-3.cc: New. - * testsuite/20_util/common_type/requirements/typedefs-2.cc: Change to - compile-only test. - * testsuite/20_util/decay/requirements/typedefs.cc: Likewise. - * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Likewise. - * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error - line number. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - -2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Document aligned_union as - missing. - -2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> - Paolo Carlini <paolo.carlini@oracle.com> - - * include/experimental/optional: Use __and_<> and __not_<> in - conditions. Style fixes. - (__constexpr_addressof, swap): Make inline. - * testsuite/experimental/optional/cons/copy.cc: Adjust constants for - 32-bit targets. - * testsuite/experimental/optional/cons/move.cc: Likewise. - * testsuite/experimental/optional/cons/value.cc: Likewise. - * testsuite/experimental/optional/constexpr/cons/value.cc: Likewise. - -2013-11-01 Michael Brune <lucdanton@free.fr> - - * include/bits/enable_special_members.h: New. - * include/experimental/optional: New. - * include/Makefile.am: Handle include/experimental. - * include/Makefile.in: Regenerate. - * testsuite/libstdc++-dg/conformance.exp: Run tests from - testsuite/experimental sub-directory. - * testsuite/experimental/optional/assignment/1.cc: New. - * testsuite/experimental/optional/assignment/2.cc: New. - * testsuite/experimental/optional/assignment/3.cc: New. - * testsuite/experimental/optional/assignment/4.cc: New. - * testsuite/experimental/optional/assignment/5.cc: New. - * testsuite/experimental/optional/assignment/6.cc: New. - * testsuite/experimental/optional/cons/copy.cc: New. - * testsuite/experimental/optional/cons/default.cc: New. - * testsuite/experimental/optional/cons/move.cc: New. - * testsuite/experimental/optional/cons/value.cc: New. - * testsuite/experimental/optional/constexpr/cons/default.cc: New. - * testsuite/experimental/optional/constexpr/cons/value.cc: New. - * testsuite/experimental/optional/constexpr/in_place.cc: New. - * testsuite/experimental/optional/constexpr/make_optional.cc: New. - * testsuite/experimental/optional/constexpr/nullopt.cc: New. - * testsuite/experimental/optional/constexpr/observers/1.cc: New. - * testsuite/experimental/optional/constexpr/observers/2.cc: New. - * testsuite/experimental/optional/constexpr/observers/3.cc: New. - * testsuite/experimental/optional/constexpr/observers/4.cc: New. - * testsuite/experimental/optional/constexpr/observers/5.cc: New. - * testsuite/experimental/optional/constexpr/relops/1.cc: New. - * testsuite/experimental/optional/constexpr/relops/2.cc: New. - * testsuite/experimental/optional/constexpr/relops/3.cc: New. - * testsuite/experimental/optional/constexpr/relops/4.cc: New. - * testsuite/experimental/optional/constexpr/relops/5.cc: New. - * testsuite/experimental/optional/constexpr/relops/6.cc: New. - * testsuite/experimental/optional/in_place.cc: New. - * testsuite/experimental/optional/make_optional.cc: New. - * testsuite/experimental/optional/nullopt.cc: New. - * testsuite/experimental/optional/observers/1.cc: New. - * testsuite/experimental/optional/observers/2.cc: New. - * testsuite/experimental/optional/observers/3.cc: New. - * testsuite/experimental/optional/observers/4.cc: New. - * testsuite/experimental/optional/observers/5.cc: New. - * testsuite/experimental/optional/relops/1.cc: New. - * testsuite/experimental/optional/relops/2.cc: New. - * testsuite/experimental/optional/relops/3.cc: New. - * testsuite/experimental/optional/relops/4.cc: New. - * testsuite/experimental/optional/relops/5.cc: New. - * testsuite/experimental/optional/relops/6.cc: New. - * testsuite/experimental/optional/requirements.cc: New. - * testsuite/experimental/optional/swap/1.cc: New. - -2013-11-01 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/stl_function.h (logical_not<void>): Add noexcept. - -2013-11-01 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58952 - * include/c_global/cstdio: Undef getchar. - -2013-11-01 Jonathan Wakely <jwakely.gcc@gmail.com> - - N3421 C++1y Transparent functors - * include/bits/stl_function.h (plus<void>, minus<void>, - multiplies<void>, divides<void>, modulus<void>, negate<void>, - equal_to<void>, not_equal_to<void>, greater<void>, less<void>, - greater_equal<void>, less_equal<void>, logical_and<void>, - logical_or<void>, logical_not<void>, bit_and<void>, bit_or<void>, - bit_xor<void>, bit_not<void>): Define. - * doc/xml/manual/status_cxx2014.xml: Update. - * testsuite/20_util/function_objects/comparisons_void.cc: New. - -2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/tuple (_Index_tuple, _Build_index_tuple): Move to - <utility>. - * include/std/utility (integer_sequence, make_integer_sequence, - index_sequence, make_index_sequence, index_sequence_for): Define. - * doc/xml/manual/status_cxx2014.xml: Update. - * testsuite/20_util/integer_sequence/intseq.cc: New. - * testsuite/20_util/integer_sequence/requirements/typedefs.cc: New. - -2013-10-31 Steve Ellcey <sellcey@mips.com> - - * configure.ac: Add header checks for fenv.h and complex.h. - * configure: Regenerate. - -2013-10-31 Edward Smith-Rowland <3dw4rd@verizon.net> - - Implement C++14 digit separators. - * include/include/bits/parse_numbers.h: Change struct _Digit<_Base, '`'> - to struct _Digit<_Base, '\''>. - -2013-10-31 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/20_util/default_delete/48631_neg.cc: Tweak dg-prune. - -2013-10-30 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: Fix - and enable VERIFY tests. - -2013-10-30 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/shared_ptr (__shared_ptr): Assert non-void pointer. - * include/bits/shared_ptr (default_delete): Likewise. - * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use - default_delete<void>. - * testsuite/20_util/shared_ptr/cons/void_neg.cc: New. - * testsuite/20_util/default_delete/void_neg.cc: New. - * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers. - * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Likewise. - -2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/58839 - * include/bits/shared_ptr_base.h - (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Only use addressof - when unique_ptr<U,D>::pointer is not a built-in pointer type. - * testsuite/20_util/shared_ptr/cons/58839.cc: New. - * testsuite/20_util/enable_shared_from_this/members/assign.cc: New. - * testsuite/20_util/enable_shared_from_this/members/unique_ptr.cc: New. - -2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/hashtable.cc (__access_protected_ctor): Define and use - new type instead of _Hashtable_ebo_helper. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Adjust line number. - -2013-10-28 Tim Shen <timshen91@gmail.com> - - * regex_executor.tcc: Add comments. - -2013-10-26 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: Remove unnecessary friends. - * include/bits/regex.tcc (__regex_algo_impl<>): Move __get_executor - to here. - * include/bits/regex_executor.h: Remove _DFSExecutor and _BFSExecutor; - they are merged into _Executor. Eliminate quantifier tracking part, so - it's faster. - * include/bits/regex_executor.tcc: Implement _Executor. - * testsuite/28_regex/algorithms/regex_match/ecma/char/ungreedy.cc: New. - * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: Adjust - duplicate testcases. - * testsuite/performance/28_regex/split.h: New. - * testsuite/performance/28_regex/split_bfs.cc: New. - * testsuite/util/testsuite_regex.h: Adjust behavior of two-executors - agreement judger: do not compare match_results when executor return - false. - -2013-10-25 François Dumont <fdumont@gcc.gnu.org> - - * include/debug/formatter.h (__check_singular): Add const on - iterator reference. - * include/debug/functions.h (__check_singular): Likewise. - (__check_singular(const _Safe_iterator<_Ite, _Seq>&)): Delete. - (__check_dereferenceable(const _Ite&)): Add const on iterator - reference. - (__check_dereferenceable(const _Safe_local_iterator<>&)): New. - * include/debug/safe_iterator.h (__check_singular_aux): Review - comment. - * testsuite/23_containers/vector/debug/debug_functions.cc: New. - * testsuite/23_containers/unordered_set/debug/debug_functions.cc: - New. - -2013-10-23 Chris Jefferson <chris@bubblescope.net> - Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/util/testsuite_containergen.h: New. - * testsuite/util/testsuite_iterators.h (test_container<>::val): Add. - * testsuite/25_algorithms/nth_element/random_test.cc: New, use the - above. - * testsuite/25_algorithms/partial_sort/random_test.cc: Likewise. - * testsuite/25_algorithms/partial_sort_copy/random_test.cc: Likewise. - * testsuite/25_algorithms/sort/random_test.cc: Likewise. - -2013-10-23 Jason Merrill <jason@redhat.com> - - * include/bits/hashtable.h (_Hashtable): Force EBO for _Hash_code_base. - -2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58850 - * include/std/chrono (minutes, hours): Change typedefs to uniformly - use int64_t. - * testsuite/20_util/duration/arithmetic/58850.cc: New. - -2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/decimal/pr58815.cc: Fix thinko. - -2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58815 - * include/decimal/decimal (decimal32::operator long long(), - decimal64::operator long long(), decimal128::operator long long()): - Add in c++11 mode per n3407. - * testsuite/decimal/pr58815.cc: New. - -2013-10-22 Edward Smith-Rowland <3dw4rd@verizon.net> - - * include/bits/basic_string.h (operator""s): Remove space between quotes - and literal identifier. - * include/std/chrono (operator""h, operator""min, operator""s, - operator""ms, operator""us, operator""ns): Ditto. - -2013-10-22 Ed Smith-Rowland <3dw4rd@verizon.net> - - Implement N3779 - User-defined Literals for std::complex, - part 2 of UDL for Standard Library Types - * include/std/complex: Add complex literal operators. - * testsuite/26_numerics/complex/literals/types.cc: New. - * testsuite/26_numerics/complex/literals/values.cc: New. - -2013-10-21 Edward Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/58804 - PR libstdc++/58729 - * include/tr2/dynamic_bitset - (__dynamic_bitset_base<_WordT, _Alloc>::_M_are_all_aux, - __dynamic_bitset_base<_WordT, _Alloc>::_M_do_count): - Use __builtin_popcountll() instead of __builtin_popcountl(). - * include/tr2/dynamic_bitset.tcc - (__dynamic_bitset_base<_WordT, _Alloc>::_M_do_find_first, - __dynamic_bitset_base<_WordT, _Alloc>::_M_do_find_next): - Use __builtin_ctzll() instead of __builtin_ctzl(). - -2013-10-20 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: Remove virtual class _Automaton. - * include/bits/regex_automaton.h: Likewise. - * include/bits/regex.tcc: Adjust comment for policy changing. - * include/bits/regex_executor.h: Update comments of complexity. - * include/bits/regex_executor.tcc: Adjust executor choosing - policy. Now DFS executor is the default one. - * testsuite/util/testsuite_regex.h (regex_match_debug, - regex_search_debug): Adjust for policy changing. - -2013-10-20 Chris Jefferson <chris@bubblescope.net> - Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58800 - * include/bits/stl_algo.h (__unguarded_partition_pivot): Change - __last - 2 to __last - 1. - * testsuite/25_algorithms/nth_element/58800.cc: New - -2013-10-18 Edward Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/58729 - * include/tr2/dynamic_bitset (_M_resize, resize): Use input value - to set bits; (_M_do_left_shift, _M_do_right_shift, _M_do_to_ulong, - _M_do_to_ullong, _M_do_find_first, _M_do_find_next, _M_copy_from_ptr, - operator>>): Move long methods outline to... - * include/tr2/dynamic_bitset.tcc: New. - * include/Makefile.am: Add dynamic_bitset.tcc. - * include/Makefile.in: Add dynamic_bitset.tcc. - * testsuite/tr2/dynamic_bitset/pr58729.cc: New. - -2013-10-18 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_scanner.tcc: (_Scanner<>::_M_scan_normal, - _Scanner<>::_M_eat_escape_ecma, _Scanner<>::_M_eat_escape_posix, - _Scanner<>::_M_eat_escape_awk): Narrow character before finding in maps. - * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc: - New. - -2013-10-17 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (regex_token_iterator<>::regex_token_iterator): - Fix initialization orders in initialization list and add explicit braces - for potentially ambiguous(actually not) `else` branch to eliminate - warnings. - * include/bits/regex_automaton.h (_NFA<>::_NFA): Likewise. - * include/bits/regex_compiler.h (_CharMatcher<>::_CharMatcher, - _BracketMatcher<>::_BracketMatcher): Likewise. - * include/bits/regex_compiler.tcc (_Compiler<>::_Compiler, - _Compiler<>::_M_atom): Likewise. - * include/bits/regex_executor.h (_Executor<>::_Executor): Likewise. - * include/bits/regex_executor.tcc (_DFSExecutor<>::_M_dfs, - _Executor<>::_M_word_boundry): Likewise. - * include/bits/regex_scanner.tcc (_Scanner<>::_Scanner, - _Scanner<>::_M_eat_class): Likewise. - * include/bits/regex.tcc (__regex_algo_impl<>, - regex_iterator<>::operator++): Likewise, and remove unused typedef. - -2013-10-16 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (regex_token_iterator<>::regex_token_iterator): - Add initialization for _M_has_m1. - * include/bits/regex.tcc (regex_token_iterator<>::operator=): Add return - statment. - -2013-10-15 Diego Novillo <dnovillo@google.com> - - * testsuite/20_util/exchange/1.cc: Add missing function - bodies. - -2013-10-15 Tim Shen <timshen91@gmail.com> - - PR libstdc++/58737 - * include/bits/regex_automaton.h (_Automaton<>::~_Automaton): Fix memory - leak by adding it. - * include/bits/regex_executor.h (_Executor<>::~_Executor): Likewise. - -2013-10-11 H.J. Lu <hongjiu.lu@intel.com> - - * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update. - -2013-10-10 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * testsuite/29_atomics/atomic/cons/49445.cc - (dg-require-atomic-builtins): Add. - -2013-10-09 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/20_util/shared_ptr/cons/58659.cc: Use VERIFY instead of - aborting. - -2013-10-09 Marcus Shawcroft <marcus.shawcroft@arm.com> - - * testsuite/20_util/shared_ptr/cons/58659.cc: Use __builtin_abort(). - -2013-10-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/*: Remove stray semi-colons after function definitions. - -2013-10-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/58659 - * include/bits/shared_ptr_base.h (__shared_count::__shared_count(P,D)): - Delegate to constructor taking allocator. - (__shared_count::_S_create_from_up): Inline into ... - (__shared_count::__shared_count(unique_ptr<Y,D>&&): Here. Use - std::conditional instead of constrained overloads. Allocate memory - using the allocator type that will be used for deallocation. - * testsuite/20_util/shared_ptr/cons/58659.cc: New. - * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust. - -2013-10-08 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_executor.h: Add _TodoList class. - * include/bits/regex_executor.tcc (_BFSExecutor<>::_M_main): Add - _M_match_stack and _M_stack to make everything faster. Break if - _M_stack is empty, to reduce unnecessary idling. - * testsuite/performance/28_regex/split.cc: New. - -2013-10-06 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: (regex_token_iterator<>::regex_token_iterator): - Fix compile error. - * include/bits/regex.tcc: (regex_replace<>): Remove default parameter. - -2013-10-06 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (__regex_algo_impl<>, regex_match<>, - regex_search<>): New abstract function for regex_match and regex_search. - * include/bits/regex.tcc (__regex_algo_impl<>): Implement. - * include/bits/regex_executor.h - (_Executor<>::_M_lookahead, - _DFSExecutor<>::_M_clone, - _BFSExecutor<>::_M_clone): Let _M_clone to choose which executor to - use. - * include/bits/regex_executor.tcc (__get_executor<>): Update the - definition to support __policy. - * testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc: Use - *_debug. - * testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc: Same. - * testsuite/28_regex/algorithms/regex_match/basic/string_01.cc: Same. - * testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_bracket_01.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_questionmark.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/extended/string_any.cc: - Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_range_00_03.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_range_01_03.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_range_02_03.cc: Same. - * testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc: - Same. - * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: Same. - * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: Same. - * testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: Same. - * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: Same. - * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: Same. - * testsuite/28_regex/match_results/format.cc: Same. - * testsuite/util/testsuite_regex.h - (regex_match_debug<>, regex_search_debug<>): Implement. - -2013-10-06 Oleg Endo <olegendo@gcc.gnu.org> - Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58625 - * include/c_global/cmath (signbit): Use __builtin_signbitf and - __builtin_signbitl. - -2013-10-03 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_executor.tcc (_DFSExecutor<>::_M_dfs): Fix wrong - backup variable initialization. - -2013-10-03 John Woolverton <jdwoolverton@gmail.com> - - PR libstdc++/58604 - * include/std/vector: Fix garbled line in HP Copyright. - -2013-10-03 Marc Glisse <marc.glisse@inria.fr> - - * libsupc++/del_op.cc (operator delete): Don't test for 0 before free. - * libsupc++/del_opnt.cc (free): Only declare if freestanding. - (operator delete): Qualify free with std::. - -2013-10-02 Jonathan Wakely <jwakely.gcc@gmail.com> - Daniel Krugler <daniel.kruegler@gmail.com> - - PR libstdc++/58569 - * include/std/functional (function::_CheckResult): Move to namespace - scope and rename to __check_func_return_type. - * testsuite/20_util/function/58569.cc: New. - -2013-10-02 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/58594 - * include/bits/shared_ptr_base.h - (_Sp_counted_ptr_inplace::_M_get_deleter()): Cast away cv-quals. - * testsuite/20_util/shared_ptr/creation/58594.cc: New. - -2013-10-02 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_compiler.h - (_BracketMatcher<>::_M_add_equivalence_class): Implement it correctly. - * include/bits/regex_compiler.tcc (_BracketMatcher<>::operator()): - Add _M_equiv_set support. - * testsuite/28_regex/algorithms/regex_match/extended/ - cstring_bracket_01.cc: Add new "[[=a=]]" testcase. - -2013-10-01 Tim Shen <timshen91@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Change "is not implemented" to - "is not correctly implemented". - -2013-10-01 Tim Shen <timshen91@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Update regex status. - * include/bits/regex.h (match_results<>::begin, - match_results<>::cbegin, match_results<>::end, match_results<>::cend): - [28.10.3.13], [28.10.3.14] Always iterate the range [0, size()-2). - -2013-10-01 François Dumont <fdumont@gcc.gnu.org> - - * include/parallel/algobase.h (mismatch, equal): Provide parallel - version for N3671 overloads. - -2013-10-01 Paul Pluzhnikov <ppluzhnikov@google.com> - - * src/c++11/snprintf_lite.cc: Add missing - _GLIBCXX_{BEGIN,END}_NAMESPACE_VERSION - -2013-10-01 Joern Rennecke <joern.rennecke@embecosm.com> - - * acinclude.m4 (GLIBCXX_ENABLE_SJLJ_EXCEPTIONS): Also check for - _Unwind_SjLj_Register when deciding if to set enable_sjlj_exceptions. - * configure: Regenerate. - -2013-10-01 Tim Shen <timshen91@gmail.com> - - PR libstdc++/58576 - * include/bits/regex_automaton.tcc (_NFA<>::_M_eliminate_dummy) - (_StateSeq<>::_M_clone): Add _S_opcode_subexpr_lookahead branch. - * testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc: New. - -2013-09-30 Paolo Carlini <paolo.carlini@oracle.com> - - * include/parallel/algo.h (__find_switch): Use __binder2nd. - -2013-09-30 Chris Jefferson <chris@bubblescope.net> - - PR libstdc++/58437 - * include/bits/stl_algo.h (__move_median_first): Rename to - __move_median_to_first, change to take an addition argument. - (__unguarded_partition_pivot): Adjust. - * testsuite/performance/25_algorithms/sort.cc: New. - * testsuite/performance/25_algorithms/sort_heap.cc: Likewise. - * testsuite/performance/25_algorithms/stable_sort.cc: Likewise. - -2013-09-28 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/stl_algo.h (remove_copy, remove_copy_if): Declare - inline. - (rotate_copy, stable_partition, partial_sort_copy): Likewise. - (lower_bound, upper_bound, equal_range, inplace_merge): Likewise. - (includes, next_permutation, prev_permutation): Likewise. - (replace_copy, replace_copy_if, is_sorted_until): Likewise. - (minmax_element, is_permutation, adjacent_find): Likewise. - (count, count_if, search, search_n, merge): Likewise. - (set_intersection, set_difference): Likewise. - (set_symmetric_difference, min_element, max_element): Likewise. - * include/bits/stl_algobase.h (lower_bound): Likewise. - (lexicographical_compare, mismatch): Likewise. - -2013-09-28 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_scanner.tcc (_Scanner<>::_M_eat_escape_posix): - Let ordinary char escaping in POSIX be valid. - * testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc: Test this - change. - -2013-09-27 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/predefined_ops.h: New. - * include/bits/stl_heap.h: Include <bits/predefined_ops.h>. - (__is_heap_until, __push_heap, __adjust_heap, __pop_heap): Remove - algo duplication. - (__is_heap): Adapt. - (__make_heap): New. - (make_heap): Adapt to use latter. - (__sort_heap): New. - (sort_heap): Adapt to use latter. - * include/bits/algobase.h: Include <bits/predefined_ops.h>. - (__lexicographical_compare_impl): New. - (__lexicographical_compare<false>::__lc): Adapt to use latter. - (lexicographical_compare): Likewise. - (__lower_bound): New. - (lower_bound): Adapt to use latter. - (equal): Use _GLIBCXX_STD_A::equal in N3671 overloads. - (__mismatch): New. - (mismatch): Use latter. - * include/bits/algo.h: Include <bits/predefined_ops.h>. Remove - <functional> include. - (__move_median_first, __find, __find_if, __find_if_not): Remove - algo duplication. - (__find_end): Likewise. - (__search_n): Rename into ... - (__search_n_aux): ... this. - (__search_n): Renew, use latter. - (search_n): Use latter. - (__search): New. - (search): Use latter. - (__find_end): Likewise. - (__remove_copy_if): New. - (remove_copy): Use latter. - (__adjacent_find): New. - (adjacent_find): Use latter. - (__unique): New. - (unique): Use latter. - (__unique_copy): Remove algo duplication. - (__stable_partition): New. - (stable_partition): Use latter. - (__heap_select): Remove algo duplication, use __make_heap. - (__partial_sort): New, use latter. - (partial_sort): Use latter. - (__partial_sort_copy): New. - (partial_sort_copy): Use latter. - (__unguarded_linear_insert, __insertion_sort): Remove algo - duplication. - (__unguarded_insertion_sort, __final_insertion_sort): Likewise. - (__unguarded_partition, __unguarded_partition_pivot): Likewise. - (__partial_sort): New. - (partial_sort): Use latter. - (__sort): New. - (sort): Use latter. - (lower_bound): Use __lower_bound. - (__upper_bound): New. - (upper_bound): Use latter. - (__equal_range): New. - (equal_range): Use latter. - (__move_merge_adaptive, __move_merge_adaptive_backward): Remove - algo duplication. - (__merge_adaptive, __merge_without_buffer): Likewise. - (__inplace_merge): New. - (inplace_merge): Use latter. - (__move_merge, __merge_sort_loop, __chunk_insertion_sort): Remove - algo duplication. - (__merge_sort_with_buffer, __stable_sort_adaptive): Likewise. - (__inplace_stable_sort): Likewise. - (__include): New. - (includes): Use latter. - (__next_permutation): New. - (next_permutation): Use latter. - (__prev_permutation): New. - (prev_permutation): Use latter. - (__replace_copy_if): New. - (replace_copy): Use latter. - (__is_sorted_until): New. - (is_sorted_unitl): Use latter. - (__minmax_element): New. - (minmax_element): Use latter. - (__is_permutation): New. - (is_permutation): Use latter. - (__adjacent_find): New. - (adjacent_find): Use latter. - (__count_if): New. - (count): Use latter. - (count_if): Likewise. - (__merge): New. - (merge): Use latter. - (__stable_sort): New. - (stable_sort): Use latter. - (__set_union): New. - (set_union): Use latter. - (__set_intersection): New. - (set_intersection): Use latter. - (__set_difference): New. - (set_difference): Use latter. - (__set_symmetric_difference): New. - (set_symmetric_difference): Use latter. - (__min_element): New. - (min_element): Use latter. - (__max_element): New. - (max_element): Use latter. - * include/Makefile.am: Add predefined_ops.h. - * include/Makefile.in: Regenerate. - * include/parallel/algobase.h (equal, mismatch): Add overloads - from N3671. - * testsuite/25_algorithms/is_permutation/vectorbool.cc: New. - * testsuite/25_algorithms/adjacent_find/vectorbool.cc: Likewise. - * testsuite/25_algorithms/find/vectorbool.cc: Likewise. - * testsuite/25_algorithms/find_if/vectorbool.cc: Likewise. - * testsuite/25_algorithms/find_first_of/vectorbool.cc: Likewise. - * testsuite/25_algorithms/heap/vectorbool.cc: Likewise. - * testsuite/25_algorithms/find_end/vectorbool.cc: Likewise. - * testsuite/25_algorithms/find_if_not/vectorbool.cc: Likewise. - -2013-09-27 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/57465 - * include/std/functional - (_Function_base::_Base_manager::_M_not_empty_function): Fix overload - for pointers. - * testsuite/20_util/function/cons/57465.cc: New. - -2013-09-26 Tim Shen <timshen91@gmail.com> - - * regex_error.h: Remove _S_error_last to follow the standard. - * regex_scanner.tcc: - (_Scanner<_FwdIter>::_M_scan_in_brace): Change error_brace to - error_badbrace. - (_Scanner<>::_M_eat_escape_posix): Extended doesn't support - back-reference. - * testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc: - Move here from ../../extended. - * testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc: - Likewise. - -2013-09-25 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/forward_list.h (_Fwd_list_node_base::_M_transfer_after): - Mark as noexcept. - (_Fwd_list_iterator) [_Fwd_list_iterator, operator*, operator->, - operator++, operator==, operator!=, _M_next]: Likewise. - (_Fwd_list_const_iterator) [_Fwd_list_const_iterator, operator*, - operator->, operator++, operator==, operator!=, _M_next]: Likewise. - (operator==(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&), - operator!=(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&)): - Likewise. - * include/bits/hashtable_policy.h (_Hash_node_base::_Hash_node_base, - _Hash_node::_M_next, _Node_iterator_base::_Node_iterator_base, - _Node_iterator_base::_M_incr, operator==(const _Node_iterator_base&, - const _Node_iterator_base&), operator!=(const _Node_iterator_base&, - const _Node_iterator_base&)): Likewise. - (_Node_iterator) [_Node_iterator, operator*, operator->, operator++]: - Likewise. - (_Node_const_iterator) [_Node_const_iterator, operator*, operator->, - operator++]: Likewise. - * include/debug/safe_iterator.h (_Safe_iterator) [_Safe_iterator, - operator=, operator*, operator->, operator++, operator--, operator[], - operator+=, operator+, operator-=, operator-, base, operator _Iterator]: - Likewise. - (operator==(const _Safe_iterator&, const _Safe_iterator&), - operator!=(const _Safe_iterator&, const _Safe_iterator&), - operator<(const _Safe_iterator&, const _Safe_iterator&), - operator<=(const _Safe_iterator&, const _Safe_iterator&), - operator>(const _Safe_iterator&, const _Safe_iterator&), - operator>=(const _Safe_iterator&, const _Safe_iterator&), - operator-(const _Safe_iterator&, const _Safe_iterator&), - operator+(difference_type, const _Safe_iterator&)): Likewise. - * include/profile/iterator_tracker.h (__iterator_tracker) - [__iterator_tracker, base, operator _Iterator, operator->, operator++, - operator--, operator=, operator*, operator[], operator+=, operator+, - operator-=, operator-]: Likewise. - (operator==(const __iterator_tracker&, const __iterator_tracker&), - operator!=(const __iterator_tracker&, const __iterator_tracker&), - operator<(const __iterator_tracker&, const __iterator_tracker&), - operator<=(const __iterator_tracker&, const __iterator_tracker&), - operator>(const __iterator_tracker&, const __iterator_tracker&), - operator>=(const __iterator_tracker&, const __iterator_tracker&), - operator-(const __iterator_tracker&, const __iterator_tracker&), - operator+(difference_type, const __iterator_tracker&)): Likewise. - -2013-09-24 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - PR libstdc++/56166 - * include/bits/basic_string.h (basic_string) - [basic_string(basic_string&&)]: Make the noexcept conditional. - [operator=(basic_string&&), assign(basic_string&&)]: Link to PR 58265. - [begin(), end(), rbegin(), rend(), clear]: Remove noexcept. - [pop_back]: Comment on the lack of noexcept. - * include/debug/string (basic_string) [basic_string(const _Allocator&), - basic_string(basic_string&&), begin(), end(), rbegin(), rend(), clear, - operator[](size_type), pop_back]: Comment out noexcept, until vstring - replaces basic_string. - -2013-09-24 Tim Shen <timshen91@gmail.com> - - * include/Makefile.am: Add regex.tcc. - * include/Makefile.in: Regenerate. - * include/bits/regex.h: Remove definitions to regex.tcc. - * include/bits/regex.tcc: New. - (match_results::format, regex_replace): Implement; - * include/bits/regex_compiler.h: Move _M_flags to the top of class - member list, because other members' initialization depend on it. - * include/bits/regex_compiler.tcc - (_Compiler<>::_Compiler): Adjust member initializations. - (_Compiler<>::_M_quantifier): Fix ungreedy interval quantifier. - * include/bits/regex_executor.h: Remove _RegexT from _*Executor classes. - In the future, all regex classes may refactor to *Impl style. - * include/bits/regex_executor.tcc (_Executor::_M_set_results): - Merge identical code from _*Executor classes. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc (fake_match<>): Adjust the hacking-style testcase - caller for new __get_executors interface. - * testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc: - New. - * testsuite/28_regex/match_results/format.cc: New. - * testsuite/28_regex/traits/char/lookup_collatename.cc: Remove digraph - testcase. - * testsuite/28_regex/traits/wchar_t/lookup_collatename.cc: Likewise. - -2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com> - - * src/c++11/snprintf_lite.cc (__concat_size_t): Use - unsigned long long conditionally. - -2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com> - - * src/c++11/snprintf_lite.cc (__concat_size_t): Use only - std::__int_to_char<unsigned long long>() - -2013-09-21 Paul Pluzhnikov <ppluzhnikov@google.com> - - * include/bits/functexcept.h (__throw_out_of_range_fmt): New. - * src/c++11/functexcept.cc (__throw_out_of_range_fmt): New. - * src/c++11/snprintf_lite.cc: New. - * src/c++11/Makefile.am: Add snprintf_lite.cc. - * src/c++11/Makefile.in: Regenerate. - * config/abi/pre/gnu.ver: Add _ZSt24__throw_out_of_range_fmtPKcz. - * include/std/array (at): Use __throw_out_of_range_fmt. - * include/debug/array (at): Likewise. - * include/profile/array (at): Likewise. - * include/std/bitset (_M_check_initial_position, _M_check): New. - (bitset::bitset): Use _M_check_initial_position. - (set, reset, flip, test): Use _M_check. - * include/ext/vstring.h (_M_check, at): Use __throw_out_of_range_fmt. - * include/bits/stl_vector.h (_M_range_check): Likewise. - * include/bits/stl_bvector.h (_M_range_check): Likewise. - * include/bits/stl_deque.h (_M_range_check): Likewise. - * include/bits/basic_string.h (_M_check, at): Likewise. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc: - Likewise. - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc: - Likewise. - * testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc: - Likewise. - * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc: Likewise. - * testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc: - Likewise. - * testsuite/23_containers/array/tuple_interface/get_neg.cc: Likewise. - * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc: Likewise. - * testsuite/util/exception/safety.h (generate): Use __throw_out_of_range_fmt. - -2013-09-20 Jakub Jelinek <jakub@redhat.com> - - PR testsuite/57605 - * testsuite/lib/libstdc++.exp (libstdc++_init): Prepend - -fdiagnostics-color=never to cxxflags. - -2013-09-20 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/allocator.h (__alloc_swap::_S_do_it, - __shrink_to_fit_aux::_S_do_it): Mark as noexcept. - * include/bits/basic_string.h (basic_string::_Rep) [_S_empty_rep, - _M_is_leaked, _M_is_shared, _M_set_leaked, _M_set_sharable, - _M_set_length_and_sharable, _M_dispose]: Likewise. - (basic_string::_Alloc_hider::_Alloc_hider): Likewise. - (basic_string) [_M_data, _M_rep, _M_ibegin, _M_iend, _M_limit, - _M_disjunct, _M_copy, _M_move, _M_assign, _S_copy_chars, _S_compare, - _S_empty_rep, shrink_to_fit, operator[] const, front const, back const]: - Likewise. - [clear]: Link to PR 56166. - [swap]: Link to PR 58265. - * include/bits/stl_deque.h (_Deque_iterator) [_S_buffer_size, - _Deque_iterator, _M_const_cast, operator*, operator->, operator++, - operator--, operator+=, operator+, operator-=, operator-, operator[], - _M_set_node]: Mark as noexcept. - (operator==(const _Deque_iterator&, const _Deque_iterator&), - operator!=(const _Deque_iterator&, const _Deque_iterator&), - operator<(const _Deque_iterator&, const _Deque_iterator&), - operator>(const _Deque_iterator&, const _Deque_iterator&), - operator<=(const _Deque_iterator&, const _Deque_iterator&), - operator>=(const _Deque_iterator&, const _Deque_iterator&), - operator-(const _Deque_iterator&, const _Deque_iterator&), - operator+(ptrdiff_t, const _Deque_iterator&)): Likewise. - (_Deque_base) [_Deque_base(const allocator_type&)]: Add missing call to - _M_initialize_map. - [~_Deque_base, _M_deallocate_node, _M_deallocate_map, _M_destroy_nodes]: - Mark as noexcept. - (_Deque_base::_Deque_impl) [_Deque_impl(const _Tp_alloc_type&), - _Deque_impl(_Tp_alloc_type&&)]: Likewise. - (deque) [_S_buffer_size, operator=(deque&&), shrink_to_fit, operator[], - front, back, pop_front, pop_back, swap]: Likewise. - [deque(), deque(const allocator_type&)]: Merge. - * include/debug/deque (deque) [operator=(deque&&), shrink_to_fit, - operator[], front, back, pop_front, pop_back, swap]: Mark as noexcept. - * include/profile/deque (deque) [operator=(deque&&), operator[], front, - back, pop_front, pop_back, swap]: Likewise. - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: - Adjust line number. - * testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc: - Likewise. - * testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc: - Likewise. - * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: - Likewise. - -2013-09-20 Alan Modra <amodra@gmail.com> - - * configure: Regenerate. - -2013-09-19 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/stl_tree.h (_Rb_tree_node_base) [_S_minimum, _S_maximum]: - Mark as noexcept. - (_Rb_tree_iterator) [_Rb_tree_iterator, operator*, operator->, - operator++, operator--, operator==, operator!=]: Likewise. - (_Rb_tree_const_iterator) [_Rb_tree_const_iterator, _M_const_cast, - operator*, operator->, operator++, operator--, operator==, operator!=]: - Likewise. - (operator==(const _Rb_tree_iterator&, const _Rb_tree_const_iterator&), - operator!=(const _Rb_tree_iterator&, const _Rb_tree_const_iterator&)): - Likewise. - (_Rb_tree) [_M_put_node, _M_destroy_node, _M_root, _M_leftmost, - _M_rightmost, _M_begin, _M_end, _S_left, _S_right, _S_minimum, - _S_maximum]: Likewise. - * include/debug/string (basic_string) [basic_string(const _Allocator&), - shrink_to_fit, operator[], pop_back]: Likewise. - * include/ext/vstring.h (__versa_string) [_M_limit, _M_disjunct, - _M_ibegin, _M_iend, __versa_string(const _Alloc&), - operator=(__versa_string&&), shrink_to_fit, operator[], front, - back, assign(__versa_string&&), swap]: Likewise. - (__versa_string) [__versa_string(), __versa_string(const _Alloc&)]: - Merge. - -2013-09-18 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/stl_iterator.h (__normal_iterator) [__normal_iterator, - _M_const_cast, operator*, operator->, operator++, operator--, - operator[], operator+=, operator+, operator-=, operator-, base]: - Mark as noexcept. - (operator==(const __normal_iterator&, const __normal_iterator&), - operator!=(const __normal_iterator&, const __normal_iterator&), - operator<(const __normal_iterator&, const __normal_iterator&), - operator>(const __normal_iterator&, const __normal_iterator&), - operator<=(const __normal_iterator&, const __normal_iterator&), - operator>=(const __normal_iterator&, const __normal_iterator&), - operator-(const __normal_iterator&, const __normal_iterator&), - operator+(difference_type, const __normal_iterator&)): Likewise. - * include/bits/stl_list.h (list) [splice, _M_check_equal_allocators]: - Likewise. - (list::_M_check_equal_allocators): Abort instead of throwing. - * include/debug/array (array) [operator[], front, back]: Mark as - noexcept. - * include/profile/array (array) [operator[], front, back]: Likewise. - * include/std/array (array) [operator[], front, back]: Likewise. - * include/debug/list (list::splice): Likewise. - * include/profile/list (list::splice): Likewise. - * testsuite/23_containers/list/operations/5.cc: Remove file. - * testsuite/23_containers/list/operations/5.h: Likewise. - -2013-09-18 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: Add friend classes. - (match_results<>::position, regex_iterator<>::operator++): - Implement position specification in regex_iterator. - (regex_match<>, regex_search<>): - Move match_results initializations to these function. Remove `todo`. - * include/bits/regex_compiler.tcc: - (_Compiler<>::_M_quantifier): Fix greedy/ungreedy of interval matching. - * include/bits/regex_constants.h: - Fix indentation. Change match_flag_type to enum type. - * include/bits/regex_executor.h: - Merge identical code to the base class _Executor. - Support flags in regex_constants. - * include/bits/regex_executor.tcc: Likewise. - * include/bits/regex_scanner.h: Add comments. - * include/bits/regex_scanner.tcc: Same. - * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: - Add a testcase. - * testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: New. - * testsuite/28_regex/iterators/regex_iterator/char/ - string_position_01.cc: Remove `xfail`. - * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc: - Remove `xfail` and make the case really work. - -2013-09-18 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/performance/25_algorithms/search_n.cc: Fix typo. - -2013-09-18 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/list.tcc (_List_base::_M_clear, list::erase): Mark as - noexcept. - * include/bits/stl_list.h (_List_iterator) [_List_iterator, - _M_const_cast, operator*, operator->, operator++, operator--, - operator==, operator!=]: Likewise. - (_List_const_iterator) [_List_const_iterator, _M_const_cast, operator*, - operator->, operator++, operator--, operator==, operator!=]: Likewise. - (operator==(const _List_iterator&, const _List_const_iterator&), - operator!=(const _List_iterator&, const _List_const_iterator&)): - Likewise. - (_List_impl) [_List_impl(const _Node_alloc_type&), - _List_impl(_Node_alloc_type&&)]: Likewise. - (_List_base) [_M_put_node, _List_base(const _Node_alloc_type&), - _List_base(_List_base&&), _M_clear, _M_init]: Likewise. - (list) [list(), list(const allocator_type&)]: Merge. - (list) [list(const allocator_type&), front, back, pop_front, pop_back, - erase, _M_erase]: Mark as noexcept. - * include/debug/list (list) [list(const _Allocator&), front, back, - pop_front, pop_back, _M_erase, erase]: Likewise. - * include/profile/list (list) [list(const _Allocator&), front, back, - pop_front, pop_back, erase]: Likewise. - * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: - Adjust line number. - * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: - Likewise. - -2013-09-17 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/58338 - * include/bits/stl_vector.h (vector::vector(), - vector::vector(const allocator_type&)): Merge. - (_Vector_impl::_Vector_impl(_Tp_alloc_type const&), - _Vector_impl::_Vector_impl(_Tp_alloc_type&&), - _Vector_impl::_M_swap_data, - _Vector_base::_Vector_base(const allocator_type&), - _Vector_base::_Vector_base(allocator_type&&), - _Vector_base::_Vector_base(_Vector_base&&), _Vector_base::~_Vector_base, - vector::vector(const allocator_type&), vector::operator[], - vector::operator[] const, vector::front, vector::front const, - vector::back, vector::back const, vector::pop_back, - vector::_M_erase_at_end): Mark as noexcept. - * include/debug/vector (vector::vector(const _Allocator&), - vector::operator[], vector::operator[] const, vector::front, - vector::front const, vector::back, vector::back const, vector::pop_back, - _M_requires_reallocation, _M_update_guaranteed_capacity, - _M_invalidate_after_nth): Mark as noexcept. - * include/profile/vector (vector::vector(const _Allocator&), - vector::operator[], vector::operator[] const, vector::front, - vector::front const, vector::back, vector::back const): Mark as - noexcept. - (vector::vector(vector&&, const _Allocator&)): Remove wrong noexcept. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Adjust line number. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-09-14 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (regex_match<>, regex_search<>): - Change regex_executor caller. Now use their return value instead - of checking __m[0].matched to find out if it's successful. - (regex_search<>): Move the search logic to regex_executor. - * include/bits/regex_automaton.h: Add some new _Opcode. Refactor - _NFA::_M_insert_*. - * include/bits/regex_automaton.tcc: Add DEBUG dump for new - _Opcode. Refactor _NFA::_M_insert_*. - * include/bits/regex_compiler.h (_Compiler<>::_M_get_nfa): - Use make_shared instead of construct by hand. - * include/bits/regex_compiler.tcc: Implement _Compiler<>::_M_assertion. - * include/bits/regex_constants.h: Fix indentation and line breaking. - * include/bits/regex_executor.h: Add _ResultsEntry to support - greedy/ungreedy mode. Move regex_search logic here. - * include/bits/regex_executor.tcc: Implement assertions and - greedy/ungreedy matching. - * include/bits/regex_scanner.h: Add a new token _S_token_ungreedy. - * include/bits/regex_scanner.tcc: Parse a new token _S_token_ungreedy. - * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: New. - * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: New. - * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: - Fix comment. - -2013-09-13 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58415 - * include/ext/sso_string_base.h (__sso_string_base<>:: - __sso_string_base(__sso_string_base&&)): Fix thinkos about - _M_length vs _M_set_length. - * testsuite/ext/vstring/cons/58415-1.cc: New. - * testsuite/ext/vstring/cons/58415-2.cc: Likewise. - -2013-09-12 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58403 - * include/bits/stl_iterator.h (__normal_iterator<>::operator[], - operator+=, operator+, operator-=, operator-): Take the argument - by value. - * testsuite/24_iterators/normal_iterator/58403.cc: New. - -2013-09-11 Mitsuru Kariya <kariya_mitsuru@hotmail.com> - Chris Jefferson <chris@bubblescope.net> - - PR libstdc++/58358 - * include/bits/stl_algo.h (search_n): Fix to guarantee a number - of comparisons <= number of elements in the range. - * testsuite/25_algorithms/search_n/58358.cc: New. - * testsuite/25_algorithms/search_n/iterator.cc: Extend. - -2013-09-10 Ed Smith-Rowland <3dw4rd@verizon.net> - - * testsuite/28_regex/traits/wchar_t/value.cc: Change template args - from char to wchar_t, literals from 'x' to L'x'. - -2013-09-10 Kai Tietz <ktietz@redhat.com> - - PR libstdc++/54314 - * config/abi/pre/gnu-versioned-namespace.ver: Add thunk _ZTv0_n12_NS* - like in gnu.ver. - -2013-09-07 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58341 - * include/bits/stl_algobase.h (copy_backward): Fix documentation - per DR 1206. - -2013-09-05 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_automaton.h: Add dummy node type. Rewrite - _StateSeq. - * include/bits/regex_automaton.tcc: Implement them. - * include/bits/regex_compiler.h: Rewrite _Compiler to use new - _StateSeq interfaces. - * include/bits/regex_compiler.tcc: Implement them. - * include/bits/regex_scanner.h: Add word boundry assertion token. - * include/bits/regex_scanner.tcc (_Scanner<>::_M_eat_escape_ecma): - Support word boundry. - * testsuite/28_regex/algorithms/regex_match/basic/ - string_range_02_03.cc: Remove "xfail". - * testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc: - Likewise. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_range_02_03.cc: Likewise. - * testsuite/28_regex/algorithms/regex_match/extended/ - cstring_questionmark.cc: Remove xfail and get correct length of - c-string. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_range_00_03.cc: Likewise. - * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc: - New. - * testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc: - New. - * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc: New. - -2013-09-03 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58302 - * include/bits/random.tcc (negative_binomial_distribution<>:: - operator()(_UniformRandomNumberGenerator&, const param_type&)): - Fix typo in template argument. - * testsuite/26_numerics/random/negative_binomial_distribution/ - operators/58302.cc: New. - -2013-09-02 Tim Shen <timshen91@gmail.com> - - * regex_automaton.h: Rearrange _NFA's layout. - * include/bits/regex_compiler.h: Add _AnyMatcher and _CharMatcher. - Rearrange _BracketMatcher's layout. - (_BracketMatcher<>::_M_add_char): Use set instead of vector for - _M_char_set. - (_BracketMatcher<>::_M_add_collating_element): Likewise. - (_BracketMatcher<>::_M_make_range): Likewise. - * include/bits/regex_compiler.tcc (_Compiler<>::_M_atom): Use - appropriate constructors of matchers above. - * testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc: - New. - * testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc: New. - * testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc: - New. - * testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc: - New. - * testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc: New. - * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc: - New. - * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc: New. - -2013-08-30 François Dumont <fdumont@gcc.gnu.org> - - PR libstdc++/58148 - * include/debug/functions.h (__foreign_iterator_aux4): Use - sequence const_pointer as common type to compare pointers. Add a - fallback overload in case pointers cannot be cast to sequence - const_pointer. - * testsuite/23_containers/vector/modifiers/insert/58148.cc: New. - -2013-08-30 François Dumont <fdumont@gcc.gnu.org> - - PR libstdc++/58191 - * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add - __gnu_debug::__base calls on iterators passed to internal debug - check. - (__glibcxx_check_partitioned_lower_pred): Likewise. - (__glibcxx_check_partitioned_upper): Likewise. - (__glibcxx_check_partitioned_upper_pred): Likewise. - (__glibcxx_check_sorted): Likewise. - (__glibcxx_check_sorted_pred): Likewise. - (__glibcxx_check_sorted_set): Likewise. - (__glibcxx_check_sorted_set_pred): Likewise. - * include/debug/functions.h (__check_partitioned_lower): - Remove code to detect safe iterators. - (__check_partitioned_upper): Likewise. - (__check_sorted): Likewise. - -2013-08-29 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (basic_regex<>::assign): Don't lose _M_traits. - (regex_iterator<>::regex_iterator): Return nullptr when regex_search - failed. - (regex_token_iterator<>::_M_end_of_seq): Should be defined true when - _M_result is(not isn't) nullptr. - * include/bits/regex_compiler.h: Store _Compiler::_M_traits by reference - instead of by value. - * include/bits/regex_executor.h (_DFSExecutor<>::_DFSExecutor): Add - _M_traits to _DFSExecutor. - * include/bits/regex_executor.tcc (__get_executor<>): Pass traits to - _DFSExecutor too. - * testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc: - New. - * testsuite/28_regex/iterators/regex_token_iterator/wchar_t/ - wstring_02.cc: New. - -2013-08-26 Tim Shen <timshen91@gmail.com> - - * include/Makefile.am: Add regex_scanner.{h,tcc}. - * include/Makefile.in: Regenerate. - * include/bits/regex.h (match_search): Handle the `__first == __last` - situation correctly. - * include/bits/regex_compiler.h: Move _Scanner... - * include/bits/regex_scanner.h: ...to here. New. - * include/bits/regex_compiler.tcc: Move _Scanner... - * include/bits/regex_scanner.tcc: ...to here, too. New. - * include/bits/regex_executor.tcc: Use value instead of reference for - submatch. - * include/std/regex: Add regex_scanner.h - * testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc: New. - * testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc: New. - * testsuite/28_regex/algorithms/regex_match/ecma/cstring_hex.cc: New. - * testsuite/28_regex/algorithms/regex_match/ecma/empty_range.cc: New. - * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: New. - -2013-08-22 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: Replace 8 spaces in indentation with a tab. - * include/bits/regex_automaton.h: Same. - * include/bits/regex_automaton.tcc: Same. - * include/bits/regex_compiler.h: Same. - * include/bits/regex_compiler.tcc: Same. - * include/bits/regex_constants.h: Same. - * include/bits/regex_executor.h: Same. - * include/bits/regex_executor.tcc: Same. - -2013-08-22 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h: Executor caller. - * include/bits/regex_executor.h: Fix empty grouping problem. - * include/bits/regex_executor.tcc: Same. - * testsuite/28_regex/algorithms/regex_match/ecma/cstring_emptygroup.cc: - New. - -2013-08-20 Phil Muldoon <pmuldoon@redhat.com> - - PR libstdc++/53477 - http://sourceware.org/bugzilla/show_bug.cgi?id=15195 - - * python/libstdcxx/v6/printers.py (Printer.__call__): If a value - is a reference, fetch referenced value. - (RxPrinter.invoke): Ditto. - * testsuite/libstdc++-prettyprinters/cxx11.cc (main): Add -O0 - flag. Add referenced value tests. - -2013-08-20 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_constants.h: Add underlying `unsigned int` for - enum syntax_option_type. - -2013-08-18 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_automaton.h: _S_opcode_backref. - * include/bits/regex_automaton.tcc: Backref automaton support. - * include/bits/regex_compiler.tcc: Parsing support. - * include/bits/regex_executor.h: Add _M_traits for _DFSExecutor. - * include/bits/regex_executor.tcc: Add _S_opcode_backref support. - * testsuite/28_regex/algorithms/regex_match/ecma/string_backref.cc: New. - -2013-08-16 Tim Shen <timshen91@gmail.com> - - * include/bits/regex.h (regex_traits<>::transform_primary): - Avoid past-the-end dereferences. - -2013-08-14 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58163 - * include/bits/basic_string.h (basic_string<>::operator[]): Fix - _GLIBCXX_DEBUG_PEDASSERT check vs C++11. - * include/ext/vstring.h: Likewise. - * testsuite/21_strings/basic_string/element_access/char/58163.cc: - New. - * testsuite/21_strings/basic_string/element_access/wchar_t/58163.cc: - Likewise. - * testsuite/ext/vstring/element_access/char/58163.cc: Likewise. - * testsuite/ext/vstring/element_access/wchar_t/58163.cc: Likewise. - -2013-08-14 Uros Bizjak <ubizjak@gmail.com> - - * src/c++98/compatibility.cc (_ZTIe): Use - reinterpret_cast<const cast *> to avoid -Wcast-qual warnings. - (_ZTIPe): Ditto. - (ZTIPKe): Ditto. - -2013-08-09 Tim Shen <timshen91@gmail.com> - - * include/bits/regex_constants.h: Change syntax_option_type to enum - type. - -2013-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * include/bits/regex.h: Replace _A, _B, _C, _R by _Ap, _Bp, _Cp, _Rp. - -2013-08-08 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_Hashtable_alloc): New. - (_ReuseOrAllocNode, _AllocNode): Adapt to use latter rather than - _Hashtable. - (_Before_begin<>): Remove. - * include/bits/hashtable.h (_Hashtable): Inherit from - _Hashtable_alloc and adapt. Restore _M_before_begin field. - * src/c++11/hashtable_c++0x.cc: Add ext/alloc_traits.h include. - * python/libstdcxx/v6/printers.py (StdHashtableIterator): Adapt - access to hashtable before begin. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Adapt dg-error line number. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Likewise. - -2013-08-07 Tim Shen <timshen91@gmail.com> - - * include/Makefile.am: Adjust to new files. - * include/Makefile.in: Regenerate. - * include/bits/regex.h: Adjust to new interfaces. - * include/bits/regex_automaton.h: New. - * include/bits/regex_automaton.tcc: New. - * include/bits/regex_compiler.h: Adjust to new files. - * include/bits/regex_compiler.tcc: New. - * include/bits/regex_constants.h: Tail spaces. - * include/bits/regex_error.h: Likewise. - * include/bits/regex_executor.h: New. - * include/bits/regex_executor.tcc: New. - * include/std/regex: Adjust to new files. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc: Adjust to new interfaces. - -2013-08-07 Paolo Carlini <paolo.carlini@oracle.com> - - * include/ext/atomicity.h: Add #pragma GCC system_header. - -2013-08-07 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58098 - * include/bits/random.h (cauchy_distribution<>::min, - extreme_value_distribution<>::min, normal_distribution<>::min, - student_t_distribution<>::min): Fix. - * include/ext/random (normal_mv_distribution<>::min): Likewise. - * testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc: - Adjust. - testsuite/26_numerics/random/cauchy_distribution/cons/default.cc: - Likewise. - * testsuite/26_numerics/random/extreme_value_distribution/cons/ - parms.cc: Likewise. - testsuite/26_numerics/random/extreme_value_distribution/cons/ - default.cc: Likewise. - * testsuite/26_numerics/random/normal_distribution/cons/parms.cc: - Likewise. - * testsuite/26_numerics/random/normal_distribution/cons/default.cc: - Likewise. - * testsuite/26_numerics/random/student_t_distribution/cons/parms.cc: - Likewise. - * testsuite/26_numerics/random/student_t_distribution/cons/default.cc: - Likewise. - * testsuite/ext/random/normal_mv_distribution/cons/parms.cc: Likewise. - * testsuite/ext/random/normal_mv_distribution/cons/default.cc: Likewise. - - * testsuite/26_numerics/random/exponential_distribution/cons/parms.cc: - Minor tweak. - * testsuite/26_numerics/random/exponential_distribution/cons/default.cc: - Likewise. - - * testsuite/ext/von_mises_distribution/*: Move to... - * testsuite/ext/random/von_mises_distribution/*: ... here. - * testsuite/ext/triangular_distribution/*: Move to... - * testsuite/ext/random/triangular_distribution/*: ... here. - -2013-08-06 Caroline Tice <cmtice@google.com> - - * fragment.am: Add XTEMPLATE_FLAGS. - * configure.ac: Add definitions for --enable-vtable-verify. - * acinclude.m4: Add --enable-vtable-verify and - --disable-vtable-verify; define --enable-vtable-verify; define - VTV_CXXFLAGS, VTV_PCH_CXXFLAGS and VTV_CXXLINKFLAGS. - * config/abi/pre/gnu.ver: Export symbols for vtable verification. - * libsupc++/Makefile.am: Define vtv_sources and add it to - libsupc___la_SOURCES and libsupc__convenience_la_SOURCES. - * libsupc++/vtv_stubs.cc: New file. - * include/Makefile.am: Add VTV_PCH_CXXFLAGS to PCHFLAGS. - * src/Makefile.am: Add VTV_CXXFLAGS to AM_CXXFLAGS; add - VTV_CXXLINKFLAGS to CXXLINK. - * src/c++98/Makefile.am: Comment out XTEMPLATE_FLAGS; add VTV_CXXFLAGS - to AM_CXXFLAGS; add VTV_CXXXLINKFLAGS to CXXLINK. - * src/C++11/Makefile.am: Ditto. - * doc/xml/manual/configure.xml: Add entry for --enable-vtable-verify. - * scripts/testsuite_flags.in: Add cxxvtvflags to Usage; cause - cxxvtvflags to use VTV_CXXFLAGS and VTV_CXXLINKFLAGS. - * testsuite/lib/libstdc++.exp: Add cxxvtvflags; add code to locate - libvtv if --enable-vtable-verify was used; set cxxvtvflags; add - cxxvtvflags to cxx_final. - * testsuite/18_support/bad_exception/23591_thread-1.c: Add - -fvtable-verify=none to compiler flags. - * testsuite/17_intro/freestanding.cc: Add -fvtable-verify=none - to compiler flags. - * configure: Regenerated. - * Makefile.in: Regenerated. - * python/Makefile.in: Regenerated. - * include/Makefile.in: Regenerated. - * libsupc++/Makefile.in: Regenerated. - * config.h.in: Regenerated. - * po/Makefile.in: Regenerated. - * src/Makefile.in: Regenerated. - * src/c++98/Makefile.in: Regenerated. - * src/c++11/Makefile.in: Regenerated. - * doc/Makefile.in: Regenerated. - * testsuite/Makefile.in: Regenerated. - -2013-08-06 Paolo Carlini <paolo.carlini@oracle.com> - - Revert the last commit. - -2013-08-06 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_Hashtable_alloc): New. - (_ReuseOrAllocNode, _AllocNode): Adapt to use latter rather than - _Hashtable. - (_Before_begin<>): Remove. - * include/bits/hashtable.h (_Hashtable): Inherit from - _Hashtable_alloc and adapt. Restore _M_before_begin field. - * python/libstdcxx/v6/printers.py (StdHashtableIterator): Adapt - access to hashtable before begin. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Adapt dg-error line number. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Likewise. - -2013-08-03 Tim Shen <timshen91@gmail.com> - - Implement bracket expression. - * include/bits/regex.h: Remove constexpr from "|=", etc. - * include/bits/regex_compiler.h: Parse bracket expression. - * include/bits/regex_nfa.h: _Comparator and _BracketMatcher(old - _RangeMatcher). - * include/bits/regex_nfa.tcc: Implement them. - * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: - from regex_search to regex_match. - * testsuite/28_regex/algorithms/regex_match/extended/ - cstring_bracket_01.cc: New. - -2013-08-02 Paolo Carlini <paolo.carlini@oracle.com> - - * include/debug/functions.h (__foreign_iterator_aux4): - Initialize __l and __ge. - -2013-08-02 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/58049 - * include/debug/functions.h: Include <bits/move.h>; minor formatting - changes. - (__foreign_iterator_aux4): Declare __l and __ge constexpr. - * include/debug/safe_iterator.h (_Safe_iterator<>::operator->): - Use __addressof. - * include/debug/safe_local_iterator.h (_Safe_local_iterator<>:: - operator->): Likewise. - -2013-08-01 François Dumont <fdumont@gcc.gnu.org> - - PR libstdc++/57779 - * include/debug/formatter.h (_Debug_msg_id): Add - __msg_insert_itself_range entry. - * include/debug/functions.h (_Insert_range_from_self_is_safe<>): - New, indicate container types supporting self range insertion in - GNU implementation. - (__foreign_iterator): New, check if an iterator points to a given - sequence. - * include/debug/macros.h (__glibcxx_check_insert_range): Add check - using __foreign_iterator. - (__gibcxx_check_insert_range_after): Likewise. - * include/debug/string (_Insert_range_from_self_is_safe<>): - Partially specialized to mark __gnu_debug::basic_string<> as - supporting self range insert. - * include/debug/list (_Insert_range_from_self_is_safe<>): - Partially specialized to mark std::list as supporting self range - insert if _GLIBCXX_DEBUG_PEDANTIC is not defined. - * include/debug/forward_list (_Insert_range_from_self_is_safe<>): - Likewise. - * src/c++11/debug.cc (_S_debug_messages): Add - __msg_insert_itself_range_entry message. - (_Error_formatter::_Parameter::_M_print_description): Display - iterator sequence address rather than sequence address when the - parameter type is an iterator. - (_Error_formatter::_M_print_word): Enhance behavior when - displaying a word with an appended '\n'. - * testsuite/util/debug/checks.h (check_insert4<>): New. - * testsuite/23_containers/deque/debug/insert5_neg.cc: New. - * testsuite/23_containers/vector/debug/insert5_neg.cc: Likewise. - * testsuite/23_containers/vector/debug/insert6_neg.cc: Likewise. - * testsuite/23_containers/vector/debug/57779_neg.cc: Likewise. - * testsuite/23_containers/list/debug/insert5_neg.cc: Likewise. - * testsuite/23_containers/forward_list/debug/insert_after4_neg.cc: - Likewise. - -2013-08-01 Fabien Chêne <fabien@gcc.gnu.org> - - PR c++/54537 - * include/tr1/cmath: Remove pow(double,double) overload, remove a - duplicated comment about DR 550. Add a comment to explain the - issue. - * testsuite/tr1/8_c_compatibility/cmath/pow_cmath.cc: New. - -2013-07-31 Tim Shen <timshen91@gmail.com> - - Thompson matcher refactored. Fix grouping problem. - * include/bits/regex.h: Use a dispatcher _M_get_matcher(). - * include/bits/regex_compiler.h: Tweak for auto switching. - * include/bits/regex_grep_matcher.h: Class structure. - * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson - matcher) refactoring. - * include/bits/regex_nfa.h: Change _Results's interfaces. - * include/std/regex: Includes <map> and <queue>. - * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc: New. - -2013-07-31 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56627 - * include/bits/stl_bvector.h: Use friend struct hash intead of - friend class hash to work around useless warnings produced by - some compilers. - * include/std/bitset: Likewise. - -2013-07-31 Paolo Carlini <paolo.carlini@oracle.com> - - * src/c++11/functexcept.cc: Do not include the whole <regex>. - * src/c++11/regex.cc: Likewise. - -2013-07-31 Tim Shen <timshen91@gmail.com> - - Revert last commit. - -2013-07-31 Tim Shen <timshen91@gmail.com> - - Thompson matcher refactored. Fix grouping problem. - * include/bits/regex.h: Use a dispatcher _M_get_matcher(). - * include/bits/regex_compiler.h: Tweak for auto switching. - * include/bits/regex_grep_matcher.h: Class structure. - * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson - matcher) refactoring. - * include/bits/regex_nfa.h: Change _Results's interfaces. - * include/std/regex: Includes <map> and <queue>. - * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc: New. - -2013-07-30 Paolo Carlini <paolo.carlini@oracle.com> - - Revert last commit. - -2013-07-30 Tim Shen <timshen91@gmail.com> - - Thompson matcher refactored. Fix grouping problem. - * include/bits/regex.h: Use a dispatcher _M_get_matcher(). - * include/bits/regex_compiler.h: Tweak for auto switching. - * include/bits/regex_grep_matcher.h: Class structure. - * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson - matcher) refactoring. - * include/bits/regex_nfa.h: Change _Results's interfaces. - * include/std/regex: Includes <map> and <queue>. - * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: - For both matchers. - * testsuite/28_regex/algorithms/regex_match/extended/ - string_dispatch_01.cc: New. - -2013-07-29 Nathan Froyd <froydnj@gcc.gnu.org> - - * include/std/atomic (compare_exchange_weak, compare_exchange_strong): - Add call to __cmpexch_failure_order. - * testsuite/util/testsuite_common_types.h - (compare_exchange_order_lowering): New generator. - * testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc: - New test. - -2013-07-25 Paolo Carlini <paolo.carlini@oracle.com> - - * include/std/complex (pow(const complex<>&, int)): Enable in - C++11 mode too. - * testsuite/26_numerics/complex/dr844.cc: Adjust. - * doc/xml/manual/intro.xml: Update. - -2013-07-25 Tim Shen <timshen91@gmail.com> - - Add documents and comments. - * include/bits/regex.h: Documents and comments. - * include/bits/regex_grep_matcher.h: Likewise. - * include/bits/regex_grep_matcher.tcc: Likewise. - * testsuite/28_regex/iterators/regex_iterator/char/ - string_position_01.cc: New. - -2013-07-24 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57976 - * doc/xml/manual/status_cxx2011.xml: Note missing time_get::get and - time_get::do_get. - -2013-07-24 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/random.h (random_device): Avoid using the FILE type. - * include/std/random: Do not include <cstdio>. - * src/c++11/random.cc: ... include it here. - (random_device::_M_init, random_device::_M_fini, - random_device::_M_getval): Cast back and forth void* and FILE*. - -2013-07-24 Tim Shen <timshen91@gmail.com> - - Reimplment matcher using Depth-first search(backtracking). - PR libstdc++/53622 - PR libstdc++/57173 - * include/bits/regex.h: regex_match() and regex_search(). - * include/bits/regex_cursor.h: Fix _M_set_pos(). - * include/bits/regex_grep_matcher.h: add _M_dfs_match(). - * include/bits/regex_grep_matcher.tcc: Implement it. - * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: New. - * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: New. - * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: - Remove xfail. - -2013-07-23 Tim Shen <timshen91@gmail.com> - - Implement regex_iterator and regex_token_iterator. - * include/bits/regex.h: regex_iterator and regex_token_iterator. - * testsuite/28_regex/iterators/regex_iterator/char/string_01.cc: - New. - * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_01.cc: - New. - * testsuite/28_regex/iterators/regex_token_iterator/char/string_01.cc: - New. - * testsuite/28_regex/iterators/regex_token_iterator/wchar_t/ - string_01.cc: New. - -2013-07-23 Paolo Carlini <paolo.carlini@oracle.com> - - * include/std/random: Add back <cstdio> include. - * src/c++11/random.cc: Don't include <cstdio> here. - -2013-07-22 Jason Merrill <jason@redhat.com> - - PR libstdc++/57914 - * libsupc++/atexit_thread.cc (run): Delete cleanup elts. - -2013-07-22 Paolo Carlini <paolo.carlini@oracle.com> - - PR c++/57920 - * src/c++11/random.cc (random_device::_M_getval): If possible, use - read instead of std::fread. - * include/std/random: Do not include <cstdio> unnecessarily. - -2013-07-21 Tim Shen <timshen91@gmail.com> - - Partially implement regex_search. - * include/bits/regex.h: regex_search. - * include/bits/regex_grep_matcher.h: _M_search_from_first. - * include/bits/regex_grep_matcher.tcc: Implement it. - * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: New. - -2013-07-21 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/54352 - * include/std/condition_variable (condition_variable_any): Move into - inline namespace _V2 and replace mutex member with shared_ptr<mutex>. - * src/c++11/condition_variable.cc (condition_variable_any): Move - definitions to ... - * src/c++11/compatibility-condvar.cc (condition_variable_any): Here. - * src/Makefile.am: Add new source file. - * src/Makefile.in: Regenerate. - -2013-07-09 Tim Shen <timshen91@gmail.com> - - Implement class regex_traits. - * include/bits/regex.h: Implement lookup_classname and - lookup_collatename; modify isctype; partially implement - transform_primary. - * testsuite/28_regex/traits/char/isctype.cc: Add more test cases. - * testsuite/28_regex/traits/char/lookup_classname.cc: Likewise. - * testsuite/28_regex/traits/char/lookup_collatename.cc: Likewise. - * testsuite/28_regex/traits/char/transform_primary.cc: Likewise. - * testsuite/28_regex/traits/wchar_t/isctype.cc: New. - * testsuite/28_regex/traits/wchar_t/lookup_classname.cc: New. - * testsuite/28_regex/traits/wchar_t/lookup_collatename.cc: New. - * testsuite/28_regex/traits/wchar_t/transform_primary.cc: New. - -2013-07-07 Ed Smith-Rowland <3dw4rd@verizon.net> - - * doc/xml/manual/status_cxx2014.xml: Add links for papers. - -2013-07-05 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_ReuseOrAllocNode): Use forward - pattern. - (_MoveReuseOrAllocNode): Remove. - (_Insert_base): Take a functor defining how the node is generated. - * include/bits/hashtable.h: Adapt. - (operator=(initializer_list<value_type>)): Reuse node if any. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Likewise. - -2013-07-05 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: - Tweak, avoid potential undefined behavior. - * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: - Likewise. - * testsuite/23_containers/vector/bool/modifiers/insert/ - const_iterator.cc: Likewise. - * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: - Likewise. - -2013-07-04 Veres Lajos <vlajos@gmail.com> - Jonathan Wakely <jwakely.gcc@gmail.com> - - * config/locale/generic/codecvt_members.cc: Fix typo. - * configure.host: Likewise. - * doc/html/manual/policy_data_structures_design.html: Likewise. - * doc/xml/manual/policy_data_structures.xml: Likewise. - * include/bits/hashtable.h: Likewise. - * include/bits/random.h: Likewise. - * include/profile/impl/profiler_trace.h: Likewise. - * testsuite/23_containers/deque/cons/2.cc: Likewise. - * testsuite/23_containers/deque/debug/shrink_to_fit.cc: Likewise. - * testsuite/ext/pb_ds/example/basic_multimap.cc: Likewise. - * testsuite/performance/23_containers/insert_erase/41975.cc: Likewise. - -2013-07-04 Ray Chason <chasonr@newsguy.com> - Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57808 - * include/bits/regex.h (regex_token_iterator<>::operator==, - regex_token_iterator<>::operator!=, regex_token_iterator<>::operator*, - regex_token_iterator<>::operator->): Declare const. - -2013-07-01 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/stl_list.h (list<>::insert(iterator, - size_type, const value_type&), list<>::insert(iterator, - initializer_list<>), list<>::insert(iterator, _InputIterator, - _InputIterator), list<>::splice(iterator, list&&), - list<>::splice(iterator, list&), list<>::splice(iterator, list&&, - iterator), list<>::splice(iterator, list&, iterator), - list<>::splice(iterator, list&&, iterator, iterator), - list<>::splice(iterator, list&, iterator, iterator)): Adjust C++11 - signatures to take const_iterator(s). - * include/bits/list.tcc (list<>::insert(const_iterator, size_type, - const value_type&), list<>::insert(const_iterator, _InputIterator, - _InputIterator)): Define. - * include/ext/vstring.h (__versa_string<>::insert(iterator, - size_type, _CharT), __versa_string<>::insert(iterator, - _InputIterator, _InputIterator), __versa_string<>::insert(iterator, - std::initializer_list<>), __versa_string<>::replace(iterator, - iterator, _InputIterator, _InputIterator), __versa_string<>:: - replace(iterator, iterator, std::initializer_list<>)): Adjust C++11 - signatures to take const_iterator(s). - (__versa_string<>::_M_replace_dispatch): Take const_iterators. - * include/ext/vstring.tcc: Likewise. - * include/debug/list: Adjust. - * include/profile/list: Likewise. - * testsuite/23_containers/list/operations/splice/const_iterator.cc: - New. - * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: - Extend. - * testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc: - Likewise. - - * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/list/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: - Likewise. - -2013-06-30 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/stl_deque.h (deque<>::insert(iterator, - size_type, const value_type&), deque<>::insert(iterator, - initializer_list<>), deque<>::insert(iterator, _InputIterator, - _InputIterator)): Adjust C++11 signatures to take a const_iterator. - * include/bits/stl_vector.h: Likewise. - * include/bits/stl_bvector.h: Likewise. - * include/debug/deque: Adjust. - * include/debug/vector: Likewise. - * include/profile/deque: Likewise. - * include/profile/vector: Likewise. - * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: - Extend. - * testsuite/23_containers/vector/bool/modifiers/insert/ - const_iterator.cc: Likewise. - * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: - Likewise. - - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-06-29 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_Insert_base): Consider hint in - insert methods. - * include/bits/hashtable.h: Likewise. - * testsuite/23_containers/unordered_multimap/insert/hint.cc: New. - * testsuite/performance/23_containers/insert/unordered_multiset_hint.cc: - New. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Likewise. - * doc/xml/manual/containers.xml: Document hinting in unordered - containers. - -2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/21_strings/basic_string/operations/*: Move inside - testsuite/21_strings/basic_string/operations/data/. - * testsuite/21_strings/basic_string/compare/*: Move inside - testsuite/21_strings/basic_string/operations/. - * testsuite/21_strings/basic_string/find/*: Likewise. - * testsuite/21_strings/basic_string/rfind/*: Likewise. - * testsuite/21_strings/basic_string/substr/*: Likewise. - -2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/21_strings/basic_string/append/*: Move inside - testsuite/21_strings/basic_string/modifiers/. - * testsuite/21_strings/basic_string/assign/*: Likewise. - * testsuite/21_strings/basic_string/insert/*: Likewise. - * testsuite/21_strings/basic_string/replace/*: Likewise. - * testsuite/21_strings/basic_string/modifiers/pop_back/char/ - pop_back.cc: Rename to 1.cc. - * testsuite/21_strings/basic_string/modifiers/pop_back/wchar_t/ - pop_back.cc: Likewise. - * testsuite/ext/vstring/assign/*: Move inside - testsuite/ext/vstring/modifiers/. - -2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/stl_deque.h (deque<>::insert(iterator, - const value_type&), deque<>::insert(iterator, value_type&&), - deque<>::emplace(iterator, _Args&&...)): Adjust C++11 signatures to - take a const_iterator. - (deque<>::erase): Simplify. - * include/bits/stl_list.h: Likewise. - (_List_iterator<>::_M_const_cast): Add. - * include/bits/stl_vector.h: Likewise. - * include/bits/stl_bvector.h: Likewise. - (_Bit_iterator::_M_const_cast): Add. - * include/bits/deque.tcc: Adjust definitions. - * include/bits/list.tcc: Likewise. - * include/bits/vector.tcc: Likewise. - * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): - Define trivial version in C++98 mode. - * include/ext/vstring.h (__versa_string<>::insert(iterator, _CharT), - __versa_string<>::replace(iterator, iterator, const __versa_string&), - __versa_string<>::replace(iterator, iterator, const _CharT*, - size_type), __versa_string<>::replace(iterator, iterator, - const _CharT*), __versa_string<>::replace(iterator, iterator, - size_type, _CharT)): Adjust C++11 signatures to take a pair of - const_iterators. - * include/debug/deque: Adjust. - * include/debug/list: Likewise. - * include/debug/vector: Likewise. - * include/profile/deque: Likewise. - * include/profile/list: Likewise. - * include/profile/vector: Likewise. - (vector<>::emplace): Add. - * testsuite/util/exception/safety.h: Update. - * testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc: - New. - * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: - Likewise. - * testsuite/23_containers/list/modifiers/emplace/const_iterator.cc: - Likewise. - * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: - Likewise. - * testsuite/23_containers/vector/bool/modifiers/insert/ - const_iterator.cc: Likewise. - * testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc: - Likewise. - * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc: - Likewise. - * testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc: - Likewise. - - * testsuite/ext/vstring/modifiers/char/54577.cc: Move to testsuite/ - ext/vstring/modifiers/erase/char/. - * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Move to testsuite/ - ext/vstring/modifiers/wchar_t/. - * testsuite/ext/vstring/modifiers/char/pop_back.cc: Move to testsuite/ - ext/vstring/modifiers/pop_back/char/. - * testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc: Move to - testsuite/ext/vstring/modifiers/pop_back/wchar_t/. - - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-06-25 Ed Smith-Rowland <3dw4rd@verizon.net> - - Status page for C++2014 library features - * doc/xml/faq.xml: Add link to new C++14 status page. - * doc/xml/manual/intro.xml: Ditto. - * doc/xml/manual/status_cxx2014.xml: New. - -2013-06-25 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/23_containers/map/modifiers/erase/abi_tag.cc: Avoid - spurious fails with check-debug. - * testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc: - Likewise. - * testsuite/23_containers/set/modifiers/erase/abi_tag.cc: Likewise. - * testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc: - Likewise. - -2013-06-25 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57704 - * include/bits/char_traits.h (char_traits<char>::lt): Implement - LWG 467. - * testsuite/21_strings/char_traits/requirements/char/57704.cc: New. - -2013-06-24 Bernd Edlinger <bernd.edlinger@hotmail.de> - - PR libstdc++/57691 - * include/c_global/cstdlib (atexit, at_quick_exit): If !_GLIBCC_HOSTED, - declare per the letter of the C++ standard in terms of void. - * include/c_std/cstdlib: Likewise. - -2013-06-22 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57674 - * include/bits/random.h (binomial_distribution<>::_M_waiting): - Add double parameter. - * include/bits/random.tcc (binomial_distribution<>::operator() - (_UniformRandomNumberGenerator&, const param_type&)): Pass - __param._M_q to _M_waiting. - (_M_waiting): Adjust. - * testsuite/26_numerics/random/binomial_distribution/ - operators/values.cc: Add tests. - -2013-06-21 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57666 - * include/std/valarray (valarray<>::operator=(const _Expr<>&)): - Implement correctly C++11 26.6.2.3/1. - * testsuite/26_numerics/valarray/dr630-3.C: New. - -2013-06-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/57641 - * include/std/mutex (timed_mutex, recursive_timed_mutex): Move common - functionality to new __timed_mutex_impl mixin. Overload try_lock_until - to handle conversion between different clocks. Replace constrained - __try_lock_for_impl overloads with conditional increment. - * include/std/shared_mutex (shared_mutex::_Mutex): Use the new mixin. - * testsuite/30_threads/timed_mutex/try_lock_until/57641.cc: New. - -2013-06-17 Jonathan Wakely <jwakely.gcc@gmail.com> - Chris Jefferson <chris@bubblescope.net> - - * include/bits/stl_algobase.h (equal): Make C++14 overloads from N3671 - dispatch to traditional std::equal for random-access iterators. - (__equal2_aux, __equal2): Remove. - (__equal::equal): Remove unused overloads. - * include/bits/stl_algo.h (is_permutation): Fix typos. - -2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/shared_mutex (shared_lock::operator=): Add missing - return statement. - -2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/57263 - * include/bits/forward_list.h (_Fwd_list_base): Convert to/from - allocator's pointer type. - * include/bits/hashtable.h (_Hashtable): Likewise. - * testsuite/util/testsuite_allocator.h (CustomPointerAlloc): Add. - * testsuite/23_containers/forward_list/allocator/ext_ptr.cc: New. - * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: New. - * testsuite/23_containers/vector/allocator/ext_ptr.cc: New. - -2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/shared_mutex: Implement N3659. - * include/bits/c++14_warning.h: New. - * include/Makefile.am: Add new headers. - * include/Makefile.in: Regenerate. - * testsuite/30_threads/shared_lock/cons/1.cc: New. - * testsuite/30_threads/shared_lock/locking/2.cc: New. - * testsuite/30_threads/shared_lock/cons/2.cc: New. - * testsuite/30_threads/shared_lock/locking/3.cc: New. - * testsuite/30_threads/shared_lock/cons/3.cc: New. - * testsuite/30_threads/shared_lock/locking/4.cc: New. - * testsuite/30_threads/shared_lock/cons/4.cc: New. - * testsuite/30_threads/shared_lock/modifiers/1.cc: New. - * testsuite/30_threads/shared_lock/cons/5.cc: New. - * testsuite/30_threads/shared_lock/modifiers/2.cc: New. - * testsuite/30_threads/shared_lock/cons/6.cc: New. - * testsuite/30_threads/shared_lock/requirements/ - explicit_instantiation.cc: New. - * testsuite/30_threads/shared_lock/locking/1.cc: New. - * testsuite/30_threads/shared_lock/requirements/typedefs.cc: New. - * testsuite/30_threads/shared_mutex/cons/1.cc: New. - * testsuite/30_threads/shared_mutex/cons/assign_neg.cc: New. - * testsuite/30_threads/shared_mutex/cons/copy_neg.cc: New. - * testsuite/30_threads/shared_mutex/requirements/ - standard_layout.cc: New. - * testsuite/30_threads/shared_mutex/try_lock/1.cc: New. - * testsuite/30_threads/shared_mutex/try_lock/2.cc: New. - -2013-06-15 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57619 - * include/bits/unordered_map.h (unordered_map<>::insert, - unordered_multimap<>::insert): Use std::forward, not std::move. - * testsuite/23_containers/unordered_map/insert/57619.C: New. - * testsuite/23_containers/unordered_multimap/insert/57619.C: Likewise. - -2013-06-14 Alan Modra <amodra@gmail.com> - - * configure.host (abi_baseline_pair): Match powerpc64*. - -2013-06-13 Daniel Krugler <daniel.kruegler@gmail.com> - - * include/std/type_traits (is_function): Support ref-qualified - functions. - (is_copy_constructible, is_move_constructible, is_copy_assignable, - is_move_assignable, is_nothrow_copy_constructible, - is_nothrow_move_constructible, is_nothrow_copy_assignable, - is_nothrow_move_assignable): Implement LWG 2196. - (add_lvalue_reference, add_rvalue_reference, add_pointer): Implement - LWG 2101. - (__strip_reference_wrapper<<const reference_wrapper<_Tp>>): Remove, - unused. - * testsuite/20_util/add_lvalue_reference/value.cc: Extend. - * testsuite/20_util/add_rvalue_reference/value.cc: Likewise. - * testsuite/20_util/decay/requirements/typedefs.cc: Likewise. - * testsuite/20_util/is_assignable/value.cc: Likewise. - * testsuite/20_util/is_constructible/value-2.cc: Likewise. - * testsuite/20_util/is_copy_assignable/value.cc: Likewise. - * testsuite/20_util/is_copy_constructible/value.cc: Likewise. - * testsuite/20_util/is_function/value.cc: Likewise. - * testsuite/20_util/is_move_assignable/value.cc: Likewise. - * testsuite/20_util/is_move_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_copy_assignable/value.cc: Likewise. - * testsuite/20_util/is_nothrow_copy_constructible/value.cc: Likewise. - * testsuite/20_util/is_nothrow_move_assignable/value.cc: Likewise. - * testsuite/20_util/is_nothrow_move_constructible/value.cc: Likewise. - - * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error - line number. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - -2013-06-13 Paolo Carlini <paolo.carlini@oracle.com> - - * include/tr1/modified_bessel_func.tcc (__gnu_cxx::__airy_ai(), - __gnu_cxx::__airy_bi()): Remove. - * testsuite/tr1/5_numerical_facilities/special_functions/ - 10_cyl_bessel_k/airy.cc: Fix. - -2013-06-12 Ed Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/56430 - * include/tr1/modified_bessel_func.tcc (__airy): Remove return - from void function. - (__gnu_cxx::__airy_ai(), __gnu_cxx::__airy_bi()): New functions. - * testsuite/tr1/5_numerical_facilities/special_functions/ - 10_cyl_bessel_k/airy.cc: New. - -2013-06-11 Ed Smith-Rowland <3dw4rd@verizon.net> - - Fix library literals error involving namespace __detail. - * include/std/chrono: Rename __detail to __select_type. Reformat. - * include/bits/basic_string.h: Reformat. - * testsuite/20_util/duration/literals/ns_detail.cc: New. - -2013-06-11 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56019 - * include/c_global/cstddef (max_align_t): Add to namespace std. - * include/c_std/cstddef: Likewise. - * testsuite/18_support/max_align_t/requirements/1.cc: New. - * testsuite/18_support/max_align_t/requirements/2.cc: Likewise. - -2013-06-10 Benjamin Kosnik <bkoz@redhat.com> - - * include/bits/c++config (_GLIBCXX_ABI_TAG_CXX11): Add. - * include/bits/stl_map.h (erase): Use abi_tag when C++11. - * include/bits/stl_multimap.h: Same. - * include/bits/stl_multiset.h: Same. - * include/bits/stl_set.h: Same. - * include/bits/stl_tree.h: Same. - * include/std/complex (real, imag): Use macro for abi_tag. - - * testsuite/lib/libstdc++.exp: Disable inlinling with -fno-inline. - * testsuite/util/testsuite_containers.h (erase_external): New - declarations. - (erase_external_iterators): Same. - (linkage_check_cxx98_cxx11_erase): Same. - (linkage_check_cxx98_cxx11_erase_iterators): Same. - * testsuite/util/testsuite_shared.cc: Define. - * testsuite/23_containers/map/modifiers/erase/abi_tag.cc: New. - * testsuite/23_containers/map/modifiers/erase/ - dr130-linkage-check.cc: New. - * testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc: New. - * testsuite/23_containers/multimap/modifiers/erase/ - dr130-linkage-check.cc: New. - * testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc: New. - * testsuite/23_containers/multiset/modifiers/erase/ - dr130-linkage-check.cc: New. - * testsuite/23_containers/set/modifiers/erase/abi_tag.cc: New. - * testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc: - New. - * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number. - - * testsuite/23_containers/map/dr130.cc: Move... - * testsuite/23_containers/map/modifiers/dr130.cc: ...here. - * testsuite/23_containers/multimap/dr130.cc: Move ... - * testsuite/23_containers/multimap/modifiers/dr130.cc: ...here. - * testsuite/23_containers/multiset/dr130.cc: Move... - * testsuite/23_containers/multiset/modifiers/dr130.cc: ...here. - * testsuite/23_containers/set/dr130.cc: Move... - * testsuite/23_containers/set/modifiers/dr130.cc: ...here. - -2013-06-10 Thomas Schwinge <thomas@codesourcery.com> - - * testsuite/17_intro/headers/c++1998/49745.cc: Extend current - handling of Linux-based x86 systems to cover all GNU systems. - * testsuite/18_support/bad_exception/23591_thread-1.c: Likewise. - * testsuite/18_support/pthread_guard.cc: Likewise. - * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: - Likewise. - * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: - Likewise. - * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. - * testsuite/21_strings/basic_string/pthread4.cc: Likewise. - * testsuite/22_locale/ctype/is/char/2.cc: Likewise. - * testsuite/22_locale/ctype/is/wchar_t/2.cc: Likewise. - * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. - * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. - * testsuite/23_containers/list/pthread1.cc: Likewise. - * testsuite/23_containers/list/pthread5.cc: Likewise. - * testsuite/23_containers/map/pthread6.cc: Likewise. - * testsuite/23_containers/vector/debug/multithreaded_swap.cc: - Likewise. - * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc: - Likewise. - * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. - * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. - * testsuite/30_threads/async/42819.cc: Likewise. - * testsuite/30_threads/async/49668.cc: Likewise. - * testsuite/30_threads/async/54297.cc: Likewise. - * testsuite/30_threads/async/any.cc: Likewise. - * testsuite/30_threads/async/async.cc: Likewise. - * testsuite/30_threads/async/launch.cc: Likewise. - * testsuite/30_threads/async/sync.cc: Likewise. - * testsuite/30_threads/call_once/39909.cc: Likewise. - * testsuite/30_threads/call_once/49668.cc: Likewise. - * testsuite/30_threads/call_once/call_once1.cc: Likewise. - * testsuite/30_threads/condition_variable/54185.cc: Likewise. - * testsuite/30_threads/condition_variable/cons/1.cc: Likewise. - * testsuite/30_threads/condition_variable/members/1.cc: Likewise. - * testsuite/30_threads/condition_variable/members/2.cc: Likewise. - * testsuite/30_threads/condition_variable/members/53841.cc: - Likewise. - * testsuite/30_threads/condition_variable/native_handle/typesizes.cc: - Likewise. - * testsuite/30_threads/condition_variable_any/50862.cc: Likewise. - * testsuite/30_threads/condition_variable_any/53830.cc: Likewise. - * testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. - * testsuite/30_threads/condition_variable_any/members/1.cc: - Likewise. - * testsuite/30_threads/condition_variable_any/members/2.cc: - Likewise. - * testsuite/30_threads/future/cons/move.cc: Likewise. - * testsuite/30_threads/future/members/45133.cc: Likewise. - * testsuite/30_threads/future/members/get.cc: Likewise. - * testsuite/30_threads/future/members/get2.cc: Likewise. - * testsuite/30_threads/future/members/share.cc: Likewise. - * testsuite/30_threads/future/members/valid.cc: Likewise. - * testsuite/30_threads/future/members/wait.cc: Likewise. - * testsuite/30_threads/future/members/wait_for.cc: Likewise. - * testsuite/30_threads/future/members/wait_until.cc: Likewise. - * testsuite/30_threads/lock/1.cc: Likewise. - * testsuite/30_threads/lock/2.cc: Likewise. - * testsuite/30_threads/lock/3.cc: Likewise. - * testsuite/30_threads/lock/4.cc: Likewise. - * testsuite/30_threads/mutex/cons/1.cc: Likewise. - * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. - * testsuite/30_threads/mutex/lock/1.cc: Likewise. - * testsuite/30_threads/mutex/native_handle/1.cc: Likewise. - * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. - * testsuite/30_threads/mutex/try_lock/1.cc: Likewise. - * testsuite/30_threads/mutex/try_lock/2.cc: Likewise. - * testsuite/30_threads/mutex/unlock/1.cc: Likewise. - * testsuite/30_threads/packaged_task/49668.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/1.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/2.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/3.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/56492.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/move.cc: Likewise. - * testsuite/30_threads/packaged_task/cons/move_assign.cc: - Likewise. - * testsuite/30_threads/packaged_task/members/get_future.cc: - Likewise. - * testsuite/30_threads/packaged_task/members/get_future2.cc: - Likewise. - * testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. - * testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. - * testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. - * testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. - * testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. - * testsuite/30_threads/packaged_task/members/reset.cc: Likewise. - * testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. - * testsuite/30_threads/packaged_task/members/swap.cc: Likewise. - * testsuite/30_threads/packaged_task/members/valid.cc: Likewise. - * testsuite/30_threads/promise/cons/1.cc: Likewise. - * testsuite/30_threads/promise/cons/alloc.cc: Likewise. - * testsuite/30_threads/promise/cons/move.cc: Likewise. - * testsuite/30_threads/promise/cons/move_assign.cc: Likewise. - * testsuite/30_threads/promise/members/get_future.cc: Likewise. - * testsuite/30_threads/promise/members/get_future2.cc: Likewise. - * testsuite/30_threads/promise/members/set_exception.cc: Likewise. - * testsuite/30_threads/promise/members/set_exception2.cc: - Likewise. - * testsuite/30_threads/promise/members/set_value.cc: Likewise. - * testsuite/30_threads/promise/members/set_value2.cc: Likewise. - * testsuite/30_threads/promise/members/set_value3.cc: Likewise. - * testsuite/30_threads/promise/members/swap.cc: Likewise. - * testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. - * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: - Likewise. - * testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. - * testsuite/30_threads/recursive_mutex/native_handle/1.cc: - Likewise. - * testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: - Likewise. - * testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. - * testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. - * testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. - * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. - * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. - * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. - * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: - Likewise. - * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: - Likewise. - * testsuite/30_threads/shared_future/cons/move.cc: Likewise. - * testsuite/30_threads/shared_future/members/45133.cc: Likewise. - * testsuite/30_threads/shared_future/members/get.cc: Likewise. - * testsuite/30_threads/shared_future/members/get2.cc: Likewise. - * testsuite/30_threads/shared_future/members/valid.cc: Likewise. - * testsuite/30_threads/shared_future/members/wait.cc: Likewise. - * testsuite/30_threads/shared_future/members/wait_for.cc: - Likewise. - * testsuite/30_threads/shared_future/members/wait_until.cc: - Likewise. - * testsuite/30_threads/this_thread/1.cc: Likewise. - * testsuite/30_threads/this_thread/2.cc: Likewise. - * testsuite/30_threads/this_thread/3.cc: Likewise. - * testsuite/30_threads/this_thread/4.cc: Likewise. - * testsuite/30_threads/thread/cons/1.cc: Likewise. - * testsuite/30_threads/thread/cons/2.cc: Likewise. - * testsuite/30_threads/thread/cons/3.cc: Likewise. - * testsuite/30_threads/thread/cons/4.cc: Likewise. - * testsuite/30_threads/thread/cons/49668.cc: Likewise. - * testsuite/30_threads/thread/cons/5.cc: Likewise. - * testsuite/30_threads/thread/cons/6.cc: Likewise. - * testsuite/30_threads/thread/cons/7.cc: Likewise. - * testsuite/30_threads/thread/cons/8.cc: Likewise. - * testsuite/30_threads/thread/cons/9.cc: Likewise. - * testsuite/30_threads/thread/cons/moveable.cc: Likewise. - * testsuite/30_threads/thread/members/1.cc: Likewise. - * testsuite/30_threads/thread/members/2.cc: Likewise. - * testsuite/30_threads/thread/members/3.cc: Likewise. - * testsuite/30_threads/thread/members/4.cc: Likewise. - * testsuite/30_threads/thread/members/5.cc: Likewise. - * testsuite/30_threads/thread/members/hardware_concurrency.cc: - Likewise. - * testsuite/30_threads/thread/native_handle/cancel.cc: Likewise. - * testsuite/30_threads/thread/native_handle/typesizes.cc: - Likewise. - * testsuite/30_threads/thread/swap/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: - Likewise. - * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: - Likewise. - * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. - * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. - * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. - * testsuite/30_threads/try_lock/1.cc: Likewise. - * testsuite/30_threads/try_lock/2.cc: Likewise. - * testsuite/30_threads/try_lock/3.cc: Likewise. - * testsuite/30_threads/try_lock/4.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/1.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/2.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/3.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/4.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/5.cc: Likewise. - * testsuite/30_threads/unique_lock/cons/6.cc: Likewise. - * testsuite/30_threads/unique_lock/locking/1.cc: Likewise. - * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. - * testsuite/30_threads/unique_lock/locking/3.cc: Likewise. - * testsuite/30_threads/unique_lock/locking/4.cc: Likewise. - * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. - * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. - * testsuite/ext/mt_allocator/22309_thread.cc: Likewise. - * testsuite/ext/profile/mh.cc: Likewise. - * testsuite/ext/rope/pthread7-rope.cc: Likewise. - * testsuite/lib/libstdc++.exp (libstdc++_init): Likewise. - * testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: - Likewise. - * testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: - Likewise. - * testsuite/util/testsuite_performance.h: Extend current handling - of Linux-based systems to cover all glibc-based systems. - -2013-06-09 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/mutex (call_once): Remove parentheses to fix error in - c++1y and gnu++1y mode. - * testsuite/30_threads/mutex/try_lock/2.cc: Call try_lock() in new - thread to avoid undefined behaviour. - -2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> - - Simplify and clean up library literals. - * include/std/chrono: Simplify namespace and versioning management. - * include/bits/basic_string.h: Ditto. - * testsuite/20_util/duration/literals/types.cc: Remove bogus comment. - * testsuite/20_util/duration/literals/values.cc: Ditto. - * testsuite/21_strings/basic_string/literals/types.cc: Ditto. - * testsuite/21_strings/basic_string/literals/values.cc: Ditto. - -2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> - - Implement N3654 - Quoted Strings Library Proposal - * include/std/iomanip: Add quoted(String, Char delim, Char escape) - manipulators and supporting machinery in c++1y mode. - * testsuite/27_io/manipulators/standard/char/quoted.cc: New. - * testsuite/27_io/manipulators/standard/wchar_t/quoted.cc: New. - -2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/alloc_traits.h (allocator_traits::max_size()): LWG - 2162: Add noexcept. - -2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/stl_algo.h (is_permutation): Add overloads from N3671. - * include/bits/stl_algobase.h (equal, mismatch): Likewise. - * testsuite/25_algorithms/equal/1.cc: Remove duplicate test case. - * testsuite/25_algorithms/equal/2.cc: New. - * testsuite/25_algorithms/equal/check_type2.cc: New. - * testsuite/25_algorithms/is_permutationqual/2.cc: New. - * testsuite/25_algorithms/is_permutationqual/check_type2.cc: New. - * testsuite/25_algorithms/mismatch/2.cc: New. - * testsuite/25_algorithms/mismatch/check_type2.cc: New. - * testsuite/util/testsuite_iterators.h: Fix spelling. - -2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/type-traits (integral_constant::operator()): Implement - N3545. - * testsuite/20_util/integral_constant/call_operator.cc: New. - * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error - line numbers. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - -2013-06-07 Uros Bizjak <ubizjak@gmail.com> - - * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update. - -2013-06-05 Tom Tromey <tromey@redhat.com> - - * testsuite/libstdc++-prettyprinters/shared_ptr.cc: Use -O0. - -2013-06-03 Paolo Carlini <paolo.carlini@oracle.com> - - PR c++/57419 - * testsuite/20_util/default_delete/48631_neg.cc: Adjust. - -2013-06-01 Ed Smith-Rowland <3dw4rd@verizon.net> - - * include/std/chrono: Collapse redundant 'inline' from 'inline - constexpr'. - * include/std/tuple: Ditto. - * include/bits/move.h: Ditto. - -2013-05-30 Ed Smith-Rowland <3dw4rd@verizon.net> - - Implement N3642 - User-defined Literals for Standard Library Types - * include/bits/parse_numbers.h: New. - * include/std/chrono: Add duration literal operators. - * include/bits/basic_string.h: Add string literal operators. - * include/Makefile.in: Add parse_numbers.h. - * include/Makefile.am: Ditto. - * testsuite/20_util/duration/literals/values.cc: New. - * testsuite/20_util/duration/literals/types.cc: New. - * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust. - * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust. - * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust. - * testsuite/21_strings/basic_string/literals/values.cc: New. - * testsuite/21_strings/basic_string/literals/types.cc: New. - -2013-05-28 Jonathan Wakely <jwakely.gcc@gmail.com> - - * src/c++11/compatibility-chrono.cc (steady_clock::now()): If - !_GLIBCXX_USE_GETTIMEOFDAY perform conversion inline instead of - calling non-existent from_time_t. - -2013-05-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: - Regenerate. - -2013-05-24 Benjamin Kosnik <bkoz@redhat.com> - - * include/std/chrono: Wrap clocks in inline namespace _V2. - * src/c++11/chrono.cc: Same. - * src/c++11/compatibility-chrono.cc: Revert to previous chrono.cc - file, with default configure macros selected. - - * config/abi/pre/gnu.ver (GLIBCXX_3.4.19): Use symbols from inline - namespace. - * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Fix up. - - * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: - Regenerated. - * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: - Regenerated. - * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: - Regenerated. - * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: - Regenerated. - * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Regenerated. - -2013-05-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * config/os/solaris/solaris2.9/os_defines.h [!CLOCK_MONOTONIC] - (CLOCK_MONOTONIC): Define. - -2013-05-24 Paolo Carlini <paolo.carlini@oracle.com> - - * include/ext/type_traits.h (__is_null_pointer): Add std::nullptr_t - overload. - - * include/bits/cpp_type_traits.h (__is_fundamental): Remove, unused. - -2013-05-24 Jakub Jelinek <jakub@redhat.com> - - * src/c++11/chrono.cc: If _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, - include unistd.h and sys/syscall.h. If _GLIBCXX_COMPATIBILITY_CXX0X, - don't define system_clock::is_steady, system_clock::now() and - steady_clock::is_steady. - (std::chrono::system_clock::now()): If - _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, call - syscall (SYS_clock_gettime, ...) instead of clock_gettime (...). - (std::chrono::system_clock::now()): Likewise. Add weak attribute - if _GLIBCXX_COMPATIBILITY_CXX0X and compatibility-chrono.cc will - be non-empty. - * src/Makefile.am (cxx11_sources): Add compatibility-chrono.cc. - (compatibility-chrono.lo, compatibility-chrono.o): New goals. - * src/c++11/compatibility-chrono.cc: New file. - * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): On linux*, check for - syscall (SYS_clock_gettime, CLOCK_MONOTONIC, &tp). - * testsuite/util/testsuite_abi.cc (check_version): Add - GLIBCXX_3.4.20 version and make it the latest. - * config/abi/pre/gnu.ver (_ZNSt6chrono12steady_clock3nowEv): Export - also @@GLIBCXX_3.4.19. Move all symbols so far added for GCC 4.9 to - @@GLIBCXX_3.4.20 instead. - * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: - Regenerated. - * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: - Regenerated. - * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: - Regenerated. - * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: - Regenerated. - * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerated. - * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Regenerated. - * config.h.in: Regenerated. - * src/Makefile.in: Regenerated. - * configure: Regenerated. - -2013-05-23 Matthias Klose <doko@ubuntu.com> - - * include/Makefile.am (bits_headers): Remove ${bits_host_headers}. - (ext_headers): Remove ${ext_host_headers}. - (stamp-${host_alias}): Create ${host_builddir}/../ext. - (stamp-host): Link ${bits_host_headers} and ${ext_host_headers}. - (install-headers): Install ${bits_host_headers} and ${ext_host_headers}. - * include/Makefile.in: Regenerate. - * include/ext/random: Include ext/opt_random.h. - -2013-05-22 Jonathan Wakely <jwakely.gcc@gmail.com> - - * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Add KIND=auto to - enable features if target OS is known to support them. - * configure.ac (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Default to 'auto'. - * configure: Regenerate. - -2013-05-21 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/57336 - * include/std/functional (__invoke): Do not form function types with - abstract return type. - * testsuite/20_util/reference_wrapper/invoke-3.cc: New. - -2013-05-19 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/tuple (get): Implement N3670. - * include/std/utility (get): Likewise. - * testsuite/20_util/pair/get.cc: Move to ... - * testsuite/20_util/pair/astuple/get.cc: Here. - * testsuite/20_util/pair/astuple/astuple.cc: New. - * testsuite/20_util/pair/astuple/constexpr_get.cc: New. - * testsuite/20_util/pair/astuple/constexpr_get_by_type.cc: New. - * testsuite/20_util/pair/astuple/get_by_type.cc: New. - * testsuite/20_util/pair/astuple/get_by_type_neg.cc: New. - * testsuite/20_util/pair/astuple/get_neg.cc: New. - * testsuite/20_util/tuple/element_access/constexpr_get_by_type.cc: New. - * testsuite/20_util/tuple/element_access/get2_by_type.cc: New. - * testsuite/20_util/tuple/element_access/get_by_type.cc: New. - -2013-05-19 Paolo Carlini <paolo.carlini@oracle.com> - - * Revert last commit. - -2013-05-19 Matthias Klose <doko@ubuntu.com> - - * include/Makefile.am (bits_headers): Remove ${bits_host_headers}. - (ext_headers): Remove ${ext_host_headers}. - (stamp-${host_alias}): Create ${host_builddir}/../ext. - (stamp-host): Link ${bits_host_headers} and ${ext_host_headers}. - (install-headers): Install ${bits_host_headers} and ${ext_host_headers}. - * include/Makefile.in: Regenerate. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/system_error (error_category::error_category()): LWG - 2145: Declare public and constexpr. - * src/c++11/system_error.cc (error_category::error_category()): Move - definition to ... - * src/c++11/compatibility-c++0x.cc: Here. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/typeindex (type_index::name()): LWG 2144: Add noexcept. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/unique_ptr.h (make_unique): Declare inline. - (unique_ptr<T[],D>::reset()): Combine two overloads into one. - (default_delete, unique_ptr): Add doxygen comments. - * include/bits/shared_ptr_base.h: Improve doxygen comments. - * include/bits/shared_ptr.h: Likewise. - * testsuite/20_util/default_delete/48631_neg.cc: Adjust dg-error line - number. - * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Likewise. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Fix markup error. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Fix markup error. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/utility (exchange): Define. - * testsuite/20_util/exchange/1.cc: New. - -2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/unique_ptr.h (make_unique): Define. - * testsuite/20_util/unique_ptr/creation/single.cc: New. - * testsuite/20_util/unique_ptr/creation/array.cc: New. - * testsuite/20_util/unique_ptr/creation/array_neg.cc: New. - -2013-05-15 François Dumont <fdumont@gcc.gnu.org> - - * python/libstdcxx/v6/printers.py (Tr1HashtableIterator): Fix - rendering of std::tr1 unordered containers iterator. - (StdHashtableIterator): New, render std unordered containers iterator. - * testsuite/libstdc++-prettyprinters/tr1.cc: New. - -2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/basic_string.h (getline): Fix doxygen comments. - -2013-05-14 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): - Use std::pointer_traits. - -2013-05-13 Benjamin Kosnik <bkoz@redhat.com> - - * libsupc++/Makefile.am (sources): Add bad_array_length.cc, - bad_array_new.cc. - * libsupc++/Makefile.in: Regenerate. - * libsupc++/bad_array_length.cc: Tweak. - * libsupc++/bad_array_new.cc: Tweak. - -2013-05-10 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/54577 - * include/bits/stl_deque.h (erase): Fix signatures in C++11 mode. - (_Deque_iterator<>::_M_const_cast): Add. - (deque<>::_M_erase): Declare. - * include/bits/deque.tcc: ... and define. - * include/bits/stl_list.h (erase): Fix signatures in C++11 mode. - (_List_const_iterator<>::_M_const_cast): Add. - * include/bits/list.tcc (erase (iterator)): Fix. - * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): - Add; include <ext/cast.h>. - * include/bits/stl_vector.h (erase): Fix signatures in C++11 mode. - (vector<>::_M_erase): Declare. - * include/bits/stl_bvector.h: Likewise. - * include/bits/vector.tcc (vector<>::_M_erase): Define. - * include/ext/vstring.h (erase): Fix signatures in C++11 mode. - * include/debug/deque: Adjust. - * include/debug/list: Likewise. - * include/debug/vector: Likewise. - * include/profile/deque: Likewise. - * include/profile/list: Likewise. - * include/profile/vector: Likewise. - * testsuite/util/exception/safety.h (erase_base<deque>, - erase_base<deque>, erase_base<vector>): Remove. - (erase_base<__versa_string>): Update. - * testsuite/ext/vstring/modifiers/char/54577.cc: New. - * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Likewise. - * testsuite/23_containers/deque/modifiers/erase/54577.cc: Likewise. - * testsuite/23_containers/list/modifiers/erase/54577.cc: Likewise. - * testsuite/23_containers/vector/bool/modifiers/erase/54577.cc: - Likewise. - * testsuite/23_containers/vector/modifiers/erase/54577.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: - Adjust dg-error line numbers. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: - Likewise. - * testsuite/23_containers/list/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/list/requirements/dr438/ - insert_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_1_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/ - constructor_2_neg.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-05-09 Uros Bizjak <ubizjak@gmail.com> - - * testsuite/util/testsuite_abi.cc (check_version): Add CXXABI_1.3.8. - -2013-05-08 Jason Merrill <jason@redhat.com> - - Add std::bad_array_length (N3639) - * libsupc++/new: Add std::bad_array_length. - * libsupc++/bad_array_length.cc: New. - * libsupc++/eh_aux_runtime.cc: Add __cxa_bad_array_length. - * libsupc++/Makefile.in: Build them. - * config/abi/pre/gnu.ver: Add new symbols. - * config/abi/pre/gnu-versioned-namespace.ver: Add new symbols. - -2013-05-08 Andi Kleen <ak@linux.intel.com> - - PR target/55947 - * libstdc++-v3/include/bits/atomic_base.h - (_GLIBCXX_ALWAYS_INLINE): Add new macro. - (atomic_thread_fence, atomic_signal_fence, test_and_set, - clear, store, load, exchange, compare_exchange_weak) - compare_exchange_strong, fetch_add, fetch_sub, fetch_and, - fetch_or, fetch_xor): Mark _GLIBCXX_ALWAYS_INLINE. - -2013-05-08 Jason Merrill <jason@redhat.com> - - Add std::bad_array_new_length (N2932) - * libsupc++/new: Add std::bad_array_new_length. - * libsupc++/bad_array_new.cc: New. - * libsupc++/eh_aux_runtime.cc: Add __cxa_throw_bad_array_new_length. - * libsupc++/Makefile.in: Build them. - * config/abi/pre/gnu.ver: Add new symbols. - * config/abi/pre/gnu-versioned-namespace.ver: Add new symbols. - -2013-05-08 Andoni Morales Alastruey <ylatuya@gmail.com> - - PR libstdc++/57212 - * include/Makefile.am (_GLIBCXX___MINGW32_GLIBCXX___): Modify - to __MINGW32__. - * include/Makefile.in: Regenerated. - -2013-05-07 François Dumont <fdumont@gcc.gnu.org> - - * include/profile/unordered_base.h: New. - * include/Makefile.am: Add new profile header. - * include/Makefile.in: Regenerate. - * include/profile/impl/profiler.h - (__profcxx_inefficient_hash_is_on): New macro. - * include/profile/unordered_map (std::profile::unordered_map<>): - Use new _Unordered_profile base class. Use default implementations - for special functions. - (std::profile::unordered_multimap<>): Likewise. - * include/profile/unordered_set (std::profile::unordered_set<>): - Likewise. - (std::profile::unordered_multiset<>): Likewise. - * testsuite/23_containers/unordered_multiset/55043.cc: Fix - MoveOnly equality operator signature. - -2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/tr1/4_metaprogramming/integral_constant/requirements/ - constexpr_data.cc: Move... - * testsuite/20_util/integral_constant/requirements/constexpr_data.cc: - ... here. - * testsuite/20_util/integral_constant/requirements/ - explicit_instantiation.cc: New. - * testsuite/20_util/integral_constant/requirements/typedefs.cc: - Likewise. - * testsuite/20_util/integral_constant/static_definition.cc: Likewise. - * testsuite/20_util/integral_constant/true_false_type_typedefs.cc: - Likewise. - * testsuite/20_util/integral_constant/true_false_value.cc: Likewise. - * testsuite/20_util/integral_constant/operator_value_type.cc: Likewise. - -2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> - - * include/std/type_traits (is_null_pointer): Add. - (__is_nullptr_t): Implement in terms of the latter. - (is_fundamental, is_scalar): Adjust. - * testsuite/20_util/is_null_pointer/requirements/ - explicit_instantiation.cc: New. - * testsuite/20_util/is_null_pointer/requirements/typedefs.cc: - Likewise. - * testsuite/20_util/is_null_pointer/value.cc: Likewise. - * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error - line number. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - -2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> - - * include/c_global/cstdio: Add comment about LWG 2249. - * include/c_std/cstdio: Likewise. - -2013-04-28 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/hashtable_policy.h (_Hashtable_ebo_helper): Fix - comment. - * include/std/mutex (__recursive_mutex_base): Likewise. - -2013-04-28 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/51365 - * include/bits/shared_ptr_base (_Sp_ebo_helper): Helper class to - implement EBO safely. - (_Sp_counted_base::_M_get_deleter): Add noexcept. - (_Sp_counter_ptr): Use noexcept instead of comments. - (_Sp_counted_deleter): Likewise. Use _Sp_ebo_helper. - (_Sp_counted_ptr_inplace): Likewise. - * testsuite/20_util/shared_ptr/cons/51365.cc: New. - * testsuite/20_util/shared_ptr/cons/52924.cc: Add rebind member to - custom allocator and test construction with custom allocator. - * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error - line number. - -2013-04-26 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/23_containers/unordered_set/insert/move_range.cc: Adjust - dialect to -std=gnu++11. - -2013-04-26 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h - (_Insert_base<>::insert<_It>(_It, _It)): Enable move semantics. - * testsuite/23_containers/unordered_set/insert/move_range.cc: New. - -2013-04-26 Paolo Carlini <paolo.carlini@oracle.com> - - * include/c_global/cstdio (gets): Provide only in C++98 and C++11. - * include/c_std/cstdio (gets): Likewise. - * testsuite/27_io/headers/cstdio/functions_std.cc: Adjust. - -2013-04-25 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57065 - * include/debug/unordered_map (unordered_map, unordered_multimap): - Fix default allocator type. - * include/profile/unordered_map (unordered_map, unordered_multimap): - Likewise. - * include/bits/unordered_map.h: Fix comments. - -2013-04-24 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56905 - * libsupc++/exception_ptr.h (copy_exception): Deprecate and - move implementation to make_exception_ptr. - * include/std/future (_State_base::_M_break_promise): Replace - copy_exception with make_exception_ptr. - * testsuite/18_support/exception_ptr/move.cc: Likewise. - * testsuite/18_support/exception_ptr/rethrow_exception.cc: Likewise. - * testsuite/30_threads/future/members/get2.cc: Likewise. - * testsuite/30_threads/promise/members/set_exception.cc: Likewise. - * testsuite/30_threads/promise/members/set_exception2.cc: Likewise. - * testsuite/30_threads/promise/members/set_value2.cc: Likewise. - * testsuite/30_threads/shared_future/members/get2.cc: Likewise. - -2013-04-22 Jason Merrill <jason@redhat.com> - - * src/c++11/hashtable_c++0x.cc: Include ext/aligned_buffer.h. - - * testsuite/lib/prune.exp (libstdc++-dg-prune): Also ignore "In - substitution" lines. - - * testsuite/20_util/is_assignable/value.cc: Comment out tests involving - function-cv-quals. - * testsuite/20_util/is_constructible/value-2.cc: Likewise. - * testsuite/20_util/reference_wrapper/result_type.cc: Likewise. - * testsuite/20_util/reference_wrapper/typedefs-2.cc: Likewise. - -2013-04-22 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h: Add C++11 allocator support. - * include/bits/hashtable.h: Likewise. - * include/bits/unordered_set.h: Likewise. - * include/bits/unordered_map.h: Likewise. - * include/debug/unordered_set: Likewise. - * include/debug/unordered_map: Likewise. - * include/std/unordered_set: Remove bits/algobase.h - include. Replace bits/alloc_traits.h by ext/alloc_traits.h. - * include/std/unordered_map: Likewise. - * include/ext/throw_allocator.h: Add checks on calls to allocator - construct/destroy. - (std::hash<__gnu_cxx::throw_value_limit>): Add conditional throw. - (std::hash<__gnu_cxx::throw_value_random>): Likewise. - * testsuite/util/regression/rand/priority_queue - /container_rand_regression_test.tcc: Adapt. - * testsuite/util/regression/rand/assoc - /container_rand_regression_test.tcc: Likewise. - * testsuite/util/testsuite_counter_type.h: Add count of destructors. - * testsuite/23_containers/unordered_set - /not_default_constructible_hash_neg.cc: Adjust dg-error line number. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: Likewise. - * testsuite/23_containers/unordered_set/allocator/copy.cc: New. - * testsuite/23_containers/unordered_set/allocator/copy_assign.cc: New. - * testsuite/23_containers/unordered_set/allocator/minimal.cc: New. - * testsuite/23_containers/unordered_set/allocator/move_assign.cc: New. - * testsuite/23_containers/unordered_set/allocator/noexcept.cc: New. - * testsuite/23_containers/unordered_set/allocator/swap.cc: New. - * testsuite/23_containers/unordered_multiset/allocator/copy.cc: New. - * testsuite/23_containers/unordered_multiset/allocator/copy_assign.cc: - New. - * testsuite/23_containers/unordered_multiset/allocator/minimal.cc: New. - * testsuite/23_containers/unordered_multiset/allocator/move_assign.cc: - New. - * testsuite/23_containers/unordered_multiset/allocator/noexcept.cc: New. - * testsuite/23_containers/unordered_multiset/allocator/swap.cc: New. - * testsuite/23_containers/unordered_map/allocator/copy.cc: New. - * testsuite/23_containers/unordered_map/allocator/copy_assign.cc: New. - * testsuite/23_containers/unordered_map/allocator/minimal.cc: New. - * testsuite/23_containers/unordered_map/allocator/move_assign.cc: New. - * testsuite/23_containers/unordered_map/allocator/noexcept.cc: - New. - * testsuite/23_containers/unordered_map/allocator/swap.cc: New. - * testsuite/23_containers/unordered_multimap/allocator/copy.cc: New. - * testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc: - New. - * testsuite/23_containers/unordered_multimap/allocator/minimal.cc: New. - * testsuite/23_containers/unordered_multimap/allocator/move_assign.cc: - New. - * testsuite/23_containers/unordered_multimap/allocator/noexcept.cc: New. - * testsuite/23_containers/unordered_multimap/allocator/swap.cc: New. - -2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> - - * include/std/type_traits (is_signed): Simplify. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Adjust dg-error line numbers. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/declval/requirements/1_neg.cc: Likewise. - -2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> - - N3669 - * include/std/complex (complex<float>::real, complex<float>::imag, - complex<double>::real, complex<double>::imag, - complex<long double>::real, complex<long double>::imag): Declare - as const member functions. - * include/std/type_traits (integral_constant<>::operator value_type): - Likewise. - -2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/57010 - * include/bits/stl_heap.h (pop_heap): Avoid self move-assignment. - * testsuite/25_algorithms/pop_heap/57010.cc: New. - -2013-04-21 Evgeniy Stepanov <eugenis@google.com> - - * src/c++11/system_error.cc (generic_category_instance): Add - initializer. - (system_category_instance): Likewise. - * src/c++11/future.cc (__fec): Likewise. - -2013-04-20 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/extensions.xml: Fix anachronism. - -2013-04-09 Tom Tromey <tromey@redhat.com> - - * configure, config.h.in: Rebuild. - * configure.ac: Use GLIBCXX_CHECK_SDT_H. Don't check for - sys/sdt.h. - * acinclude.m4 (GLIBCXX_CHECK_SDT_H): New defun. - -2013-04-09 Uros Bizjak <ubizjak@gmail.com> - - * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update. - -2013-04-08 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/libstdc++-prettyprinters/cxx11.cc: Include <memory>. - -2013-04-07 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/Makefile.am: Add ext/aligned_buffer.h - * include/Makefile.in: Regenerate. - * include/ext/aligned_buffer.h: New. - * include/std/future (_Result): Use __aligned_buffer. - * include/bits/forward_list.h (_Fwd_list_node): Likewise. - * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Likewise. - * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error line - number. - -2013-04-07 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/forward_list.h: Only include required headers. - (forward_list::reference): Define directly, not using __alloc_traits. - (forward_list::const_reference): Likewise. - -2013-04-07 François Dumont <fdumont@gcc.gnu.org> - - * include/std/functional (_Derives_from_unary_function): Remove. - (_Derives_from_binary_function): Remove. - * include/std/type_traits (__sfinae_types): Remove. - (__is_assignable_helper): Adapt. - (__is_convertible_helper): Adapt. - (_GLIBCXX_HAS_NESTED_TYPE): Adapt. - Remove several explicit instantiations of integral_constant. - * testsuite/20_util/reference_wrapper/typedefs-3.cc: Adapt. - * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: - Adapt dg-error line number. - * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: - Likewise. - * testsuite/20_util/declval/requirements/1_neg.cc: Likewise. - * testsuite/20_util/bind/ref_neg.cc: Likewise. - -2013-04-05 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56841 - * libsupc++/eh_ptr.cc (rethrow_exception): Use get_unexpected() and - get_terminate() accessors. - * libsupc++/eh_throw.cc (__cxa_throw): Likewise. - * libsupc++/eh_terminate.cc: Use mutex when atomic builtins not - available. - * libsupc++/new_handler.cc: Likewise. - -2013-04-04 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.19 version. - -2013-04-03 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56834 - * include/debug/array (tuple_size, tuple_element): Do not declare. - * include/profile/array: Likewise. - * testsuite/23_containers/array/tuple_interface/ - tuple_element_debug_neg.cc: Adjust dg-error line number. - -2013-04-03 Jonathan Wakely <jwakely.gcc@gmail.com> - - * libsupc++/exception (get_terminate(), get_unexpected()): Declare. - * libsupc++/eh_terminate.cc (get_terminate() , set_unexpected()): - Define. - (set_terminate(terminate_handler)): Set atomically. - (set_unexpected(terminate_handler)): Likewise. - * libsupc++/new (get_new_handler()): Declare. - * libsupc++/new_handler.cc (get_new_handler()): Define. - (set_new_handler(new_handler)): Set atomically. - (__new_handler): Use internal linkage. - * libsupc++/new_op.cc (operator new): Use get_new_handler(). - * libsupc++/new_opnt.cc (operator new): Likewise. - * acinclude.m4: Bump libtool_VERSION to 6:19:0. - * configure: Regenerate. - * libsupc++/Makefile.am: Compile above files with -std=gnu++11. - * libsupc++/Makefile.in: Regenerate. - * config/abi/pre/gnu.ver: Add new exports. - * doc/xml/manual/status_cxx2011.xml: Update. - * testsuite/18_support/headers/exception/synopsis.cc: Check accessors - for handlers. - * testsuite/18_support/headers/new/synopsis.cc: Likewise. - * testsuite/18_support/new_handler.cc: New. - * testsuite/18_support/terminate_handler.cc: New. - * testsuite/18_support/unexpected_handler.cc: New. - -2013-04-02 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/appendix_contributing.xml: Remove broken link and - defer to general documentation on contributing to GCC. - * doc/html/*: Regenerate. - -2013-03-30 Gerald Pfeifer <gerald@pfeifer.com> - - * doc/xml/manual/allocator.xml: Adjust link to Dr.Dobb's article. - - * doc/xml/manual/appendix_contributing.xml: Adjust link to GNU - Coding Standards. - - * doc/xml/manual/debug.xml: Adjust link for ThreadSanitizer. - - * doc/xml/manual/debug_mode.xml: Adjust link for SafeSTL. - - * doc/xml/manual/documentation_hacking.xml: Adjust Doxygen link. - - * doc/xml/manual/messages.xml: Adjust link to Java API specs. - - * doc/xml/manual/policy_data_structures: Remove direct link to - IBM Haifa Research Labs. - - * doc/xml/manual/policy_data_structures_biblio.xml: Adjust links - for biblio.maverik_lowerbounds and biblio.nelson96stlpq. - - * doc/xml/manual/profile_mode.xml: Adjust two links to acm.org - papers. - - * doc/xml/manual/shared_ptr.xml: Use canonical address for - www.boost.org. - -2013-03-27 Kai Tietz <ktietz@redhat.com> - - * crossconfig.m4: Add support for cygwin x64 target. - * configure: Regenerated. - -2013-03-25 Kai Tietz <ktietz@redhat.com> - - * testsuite/18_support/50594.cc: For mingw-targets use only static - libstdc++-version. - * testsuite/19_diagnostics/error_category/operators/equal.cc - * testsuite/19_diagnostics/error_code/cons/1.cc - * testsuite/19_diagnostics/error_code/operators/bool.cc - * testsuite/19_diagnostics/error_code/operators/equal.cc - * testsuite/19_diagnostics/error_code/operators/not_equal.cc - * testsuite/19_diagnostics/error_condition/cons/1.cc - * testsuite/19_diagnostics/error_condition/operators/bool.cc - * testsuite/19_diagnostics/error_condition/operators/equal.cc - * testsuite/19_diagnostics/error_condition/operators/not_equal.cc - * testsuite/23_containers/set/requirements/exception/basic.cc - * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc - * testsuite/lib/dg-options.exp (dg-additional-options): New option. - -2013-03-24 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56170 - * include/ext/debug_allocator.h (debug_allocator): Add missing members - to meet allocator requirements. - * testsuite/ext/debug_allocator/56170.cc: New. - -2013-03-22 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56678 - * include/std/chrono (__is_ratio): Uglify T. - -2013-03-18 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/55977 (partial, std::vector and std::deque bits) - * include/bits/stl_vector.h (_M_range_initialize(_InputIterator, - _InputIterator, std::input_iterator_tag)): Use emplace_back. - * include/bits/deque.tcc (_M_range_initialize(_InputIterator, - _InputIterator, std::input_iterator_tag)): Likewise. - * testsuite/23_containers/vector/cons/55977.cc: New. - * testsuite/23_containers/deque/cons/55977.cc: Likewise. - * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: - Likewise. - -2013-03-17 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/55979 - * include/bits/stl_list.h (_M_initialize_dispatch(_InputIterator, - _InputIterator, __false_type)): Use emplace_back. - * testsuite/23_containers/list/cons/55979.cc: New. - * testsuite/23_containers/list/modifiers/1.h: Adjust. - * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: - Adjust dg-error line number. - -2013-03-16 Jason Merrill <jason@redhat.com> - - PR c++/55017 - * testsuite/20_util/pair/piecewise2.cc (test01): Use std::move. - -2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56468 - * libsupc++/exception_ptr.h (type_info): Declare. - -2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56002 - * include/std/mutex (lock_guard, unique_lock, lock): Define without - depending on _GLIBCXX_HAS_GTHREADS. - * testsuite/30_threads/lock_guard/cons/1.cc: Run on all targets. - -2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56492 - * include/std/future (__future_base::_Result): Add result_type - typedef. - (__future_base::_S_allocate_result): Overload for std::allocator. - (__future_base::_Task_setter): Use _Result::result_type instead of - deducing the type from the task. - (__future_base::_Task_state): Store allocator to allow shared state - to be reset. Replace std::function with member of target object type - accessed via ... - (__future_base::_Task_state_base): New abstract base class. - (__future_base::_Task_state_base::_M_run): New virtual function to - invoke type-erased target object. - (__future_base::_Task_state_base::_M_reset): New virtual function to - create new shared_state using same target object and allocator. - (__future_base::__create_task_state): Allocate a new _Task_state. - (packaged_task::packaged_task): Use __create_task_state. - (packaged_task::reset): Use _Task_state_base::_M_reset. - * testsuite/30_threads/packaged_task/cons/56492.cc: New. - -2013-03-15 Tom Tromey <tromey@redhat.com> - - * libsupc++/unwind-cxx.h: Include sys/sdt.h if detected. - (PROBE2): New macro. - * libsupc++/eh_throw.cc (__cxa_throw, __cxa_rethrow): Add probe. - * libsupc++/eh_catch.cc (__cxa_begin_catch): Add probe. - * configure.ac: Check for sys/sdt.h. - * configure, config.h.in: Rebuild. - -2013-03-14 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56613 - * include/bits/stl_tree.h (_Rb_tree::_M_create_node): Use - allocator_traits instead of calling construct directly. - * testsuite/23_containers/map/56613.cc: New. - -2013-03-13 Benjamin Kosnik <bkoz@redhat.com> - - * doc/html/*: Regenerate. - -2013-03-13 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56609 - * include/std/type_traits (is_fundamental): Add std::nullptr_t. - * testsuite/20_util/is_fundamental/value.cc: Extend. - * testsuite/20_util/is_compound/value.cc: Likewise. - -2013-03-09 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/20_util/function_objects/mem_fn/55463.cc: Avoid - -Wunused warnings. - -2013-03-08 Benjamin Kosnik <bkoz@redhat.com> - - * include/bits/memoryfwd.h: New. Centralize forward declarations. - * include/bits/algorithmfwd.h: Consistent comments. - * include/bits/localefwd.h: Same. - * include/ext/vstring_fwd.h: Same. - * include/parallel/algorithmfwd.h: Same. - * include/parallel/numericfwd.h: Same. - * include/std/iosfwd: Same. - - * include/bits/alloc_traits.h: Include memoryfwd.h, remove allocator - forward decl. - * include/ext/alloc_traits.h: Remove allocator forward decl. - * include/bits/stl_construct.h: Same. - * include/bits/stringfwd.h: Include memoryfwd.h, remove allocator - forward decl. Consistent comments. - - * doc/doxygen/user.cfg.in (TEMPLATE_RELATIONS): To NO. - - * include/Makefile.am (bits_headers): Add memoryfwd.h. - * include/Makefile.in: Regenerate. - * configure: Same. - -2013-03-08 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/vector.tcc (vector<>operator=(const vector<>&): - Reset pointers after deallocation when memory can be reused. - * testsuite/23_containers/vector/allocator/minimal.cc: Insert - elements to really challenge C++11 allocator integration. - * testsuite/23_containers/vector/allocator/copy.cc: Likewise. - * testsuite/23_containers/vector/allocator/copy_assign.cc: - Likewise. - * testsuite/23_containers/vector/allocator/move_assign.cc: - Likewise. - * testsuite/23_containers/vector/allocator/swap.cc: Likewise and - swap vector back before checks on memory/personality mapping are - performed. - * testsuite/23_containers/forward_list/allocator/minimal.cc: - Insert element to really challenge C++11 allocator integration. - * testsuite/23_containers/forward_list/allocator/copy.cc: - Likewise. - * testsuite/23_containers/forward_list/allocator/copy_assign.cc: - Likewise. - * testsuite/23_containers/forward_list/allocator/move_assign.cc: - Likewise. - * testsuite/23_containers/forward_list/allocator/swap.cc: Likewise - and swap forward_list back before checks on memory/personality - mapping are performed. - -2013-03-07 Jakub Jelinek <jakub@redhat.com> - - * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update. - * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: - Likewise. - * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise. - * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise. - * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise. - -2013-03-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - * scripts/extract_symvers.pl: Omit symbols bound to base - versions. - * scripts/extract_symvers.in: Likewise. - * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerate. - * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Likewise. - * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise. - * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. - * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. - -2013-03-04 Ulrich Drepper <drepper@gmail.com> - - * include/ext/random (__gnu_cxx::von_mises_distribution<>): - Optimize generation function by pulling computation of __r into the - constructor for param_type. Also compare _M_mu in operator==. - Fix comment. - -2013-03-02 Ulrich Drepper <drepper@gmail.com> - - Add triangular and von Mises distributions. - * include/ext/random: Include <ext/cmath>. - Add __gnu_cxx::triangular_distribution<> and - __gnu_cxx::von_mises_distribution<> classes. - * include/ext/random.tcc: Add out-of-line functions for - __gnu_cxx::triangular_distribution<> and - __gnu_cxx::von_mises_distribution<>. - * testsuite/ext/triangular_distribution/cons/default.cc: New file. - * testsuite/ext/triangular_distribution/cons/parms.cc: New file. - * testsuite/ext/triangular_distribution/operators/serialize.cc: - New file. - * testsuite/ext/triangular_distribution/operators/equal.cc: - New file. - * testsuite/ext/triangular_distribution/operators/inequal.cc: - New file. - * testsuite/ext/triangular_distribution/requirements/typedefs.cc: - New file. - * testsuite/ext/triangular_distribution/requirements/ - explicit_instantiation/1.cc: New file. - * testsuite/ext/von_mises_distribution/cons/default.cc: New file. - * testsuite/ext/von_mises_distribution/cons/parms.cc: New file. - * testsuite/ext/von_mises_distribution/operators/serialize.cc: - New file. - * testsuite/ext/von_mises_distribution/operators/equal.cc: New file. - * testsuite/ext/von_mises_distribution/operators/inequal.cc: - New file. - * testsuite/ext/von_mises_distribution/requirements/typedefs.cc: - New file. - * testsuite/ext/von_mises_distribution/requirements/ - explicit_instantiation/1.cc: New file. - - Add math constants. - * include/Makefile.am (ext_headers): Add cmath. - * include/Makefile.in: Regenerated. - * include/ext/cmath: New file. - -2013-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> +2014-01-10 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/59698 + * doc/xml/manual/status_cxx1998.xml (iso.1998.specific): Markup + and stylistic improvements. + * doc/xml/manual/codecvt.xml (std.localization.facet.codecvt): Likewise + and update for C++11. + * doc/xml/manual/ctype.xml (std.localization.facet.ctype): Likewise. + + PR libstdc++/59687 + * doc/xml/manual/backwards_compatibility.xml + (backwards.third.nocreate_noreplace): Correct and expand. + + PR libstdc++/59699 + * doc/xml/manual/support.xml (std.support.types.null): Update links. + +2014-01-09 Jonathan Wakely <jwakely@redhat.com> + + PR libstdc++/59738 + * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore + support for non-Movable types. + + PR libstdc++/59680 + * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep. + +2014-01-08 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/stl_vector.h (std::vector<>::_M_move_assign): Pass + *this allocator instance when building temporary vector instance + so that *this allocator does not get moved. + * include/debug/safe_base.h + (_Safe_sequence_base(_Safe_sequence_base&&)): New. + * include/debug/vector (__gnu_debug::vector<>(vector&&)): Use new + move constructor from _Safe_sequence_base. + (__gnu_debug::vector<>(vector&&, const allocator_type&)): Swap + safe iterators if the instance is moved. + (__gnu_debug::vector<>::operator=(vector&&)): Likewise. + * testsuite/23_containers/vector/allocator/move.cc (test01): Add + check on a vector iterator. + * testsuite/23_containers/vector/allocator/move_assign.cc + (test02): Likewise. + (test03): New, test with a non-propagating allocator. + * testsuite/23_containers/vector/debug/move_assign_neg.cc: New. + +2014-01-07 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_compiler.h (_AnyMatcher<>::_AnyMatcher(), + _AnyMatcher<>::operator(), _AnyMatcher<>::_M_apply(), + _CharMatcher<>::_CharMatcher(), _CharMatcher<>::_M_translate(), + _BracketMatcher<>::_BracketMatcher(), _BracketMatcher<>::operator(), + _BracketMatcher<>::_M_add_char(), + _BracketMatcher<>::_M_add_collating_element(), + _BracketMatcher<>::_M_add_equivalence_class(), + _BracketMatcher<>::_M_add_character_class(), + _BracketMatcher<>::_M_make_range(), _BracketMatcher<>::_M_ready(), + _BracketMatcher<>::_M_apply(), _BracketMatcher<>::_M_make_cache()): + Fix _AnyMatcher behavior of POSIX style and move _M_flags + to template parameter; Add cache for _BracketMatcher. Adjust + declarations from here... + * include/bits/regex.h (basic_regex<>::imbue()): ...to here. Also, + imbuing a regex will trigger a recompilation to rebuild the cache. + * include/bits/regex_compiler.tcc (_Compiler<>::_M_atom(), + _Compiler<>::_M_bracket_expression()): Adjust matchers' caller for + different template bool parameters. + * include/bits/regex_executor.h: Remove unnecessary declarations. + * include/std/regex: Adjust including orders. + * testsuite/28_regex/traits/char/user_defined.cc: New. + * testsuite/28_regex/traits/wchar_t/user_defined.cc: New. + +2014-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerate. * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Likewise. @@ -4155,455 +75,18 @@ * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. -2013-02-26 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56012 - * include/bits/atomic_base.h (atomic_flag): Fix narrowing conversion. - * testsuite/29_atomics/atomic/operators/56012.cc: New. - - PR libstdc++/56011 - * include/std/atomic (atomic<bool>::operator=(bool) volatile): Add - missing overload. - * testsuite/29_atomics/atomic/operators/56011.cc: New. - -2013-02-25 Jason Merrill <jason@redhat.com> - - * configure.ac: Check for __cxa_thread_atexit_impl. - * libsupc++/atexit_thread.cc (__cxa_thread_atexit): Just forward - to it if available. - * config.h.in, configure: Regenerate. - -2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/std/streambuf (basic_streambuf): Use injected class name - instead of non-standard __streambuf_type typedef. Fix unclosed Doxygen - group. - -2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/html/faq.html: Fix spelling. - * doc/xml/faq.xml: Likewise. - * include/bits/basic_ios.h: Likewise. - * include/bits/regex.h: Likewise. - * include/std/istream: Likewise. - * include/std/streambuf: Likewise. - -2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> - - * testsuite/23_containers/unordered_set/55043.cc: Add missing - namespace qualification. - * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. - -2013-02-19 Benjamin Kosnik <bkoz@redhat.com> - - * doc/doxygen/user.cfg.in: Set __cplusplus to 201103L. Change to - _GLIBCXX_INCLUDE_AS_CXX11. DIRECTORY_GRAPH, MARKDOWN_SUPPORT, - AUTOLINK_SUPPORT to NO. Update to doxygen 1.8.3.1. - * include/bits/stl_pair.h: Add to utilities group. - * include/std/tuple: Same. - * include/std/typeindex: Same. - - * include/bits/stringfwd.h: Fix markup. - * include/std/limits: Same. - * include/std/type_traits: Same. - * include/tr1/memory: Same. - * include/tr1/regex: Same. - * scripts/run_doxygen: Comment. - * testsuite/20_util/uses_allocator/cons_neg.cc: Fixup line numbers. - -2013-02-14 Jason Merrill <jason@redhat.com> - - * testsuite/18_support/quick_exit/quick_exit.cc: #if out the whole - test if unsupported. - -2013-02-13 Marc Glisse <marc.glisse@inria.fr> - - PR libstdc++/56111 - * include/std/complex (complex): Undefine. - * include/c_compatibility/complex.h (complex): Only undefine if - <complex> has been included. - * testsuite/26_numerics/complex/56111.cc: New testcase. - -2013-02-13 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_Hash_code_base): Restore - default constructor protected. - * include/bits/hashtable.h: static assert that _Hash_code_base has - a default constructor available through inheritance. - -2013-02-12 Paolo Carlini <paolo.carlini@oracle.com> - - * include/c_std/cstdlib (at_quick_exit, quick_exit): Provide in - C++11 mode. - -2013-02-12 Julian Brown <julian@codesourcery.com> - - * testsuite/22_locale/time_get/get_weekday/char/38081-1.cc (test01): - Don't expect dots after abbreviated weekday names for ru_RU for - glibc versions >= 2.17. - * testsuite/22_locale/time_get/get_weekday/char/38081-2.cc (test01): - Likewise. - -2013-02-12 Paolo Carlini <paolo.carlini@oracle.com> - - * include/bits/random.tcc (__transform): Remove. - (__normalize): Add. - (discrete_distribution<>::param_type::_M_initialize): Adjust. - (piecewise_constant_distribution<>::param_type::_M_initialize): - Likewise. - (piecewise_linear_distribution<>::param_type::_M_initialize): - Likewise. - -2013-02-11 Benjamin Kosnik <bkoz@redhat.com> - - * src/c++11/Makefile.am (hashtable_c++0x.lo, hashtable_c++0x.o): - Use -fimplicit-templates. - * src/c++11/Makefile.in: Regenerate. - * src/c++11/hashtable_c++0x.cc: Remove instantiation for - std::lower_bound template. - -2013-02-11 Paolo Carlini <paolo.carlini@oracle.com> - - * include/c_std/cstdlib (at_quick_exit, quick_exit): Do not declare. - * include/c_global/cstdlib (at_quick_exit, quick_exit): Declare only - in C++11 mode and if available in the underlying C library. - * testsuite/18_support/quick_exit/quick_exit.cc: Compile with - -std=gnu++11; check _GLIBCXX_HAVE_AT_QUICK_EXIT and - _GLIBCXX_HAVE_QUICK_EXIT. - -2013-02-11 Benjamin Kosnik <bkoz@redhat.com> - - * doc/html/*: Regenerate. - -2013-02-11 Jason Merrill <jason@redhat.com> - - * linkage.m4 (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE): New. - (GLIBCXX_CHECK_STDLIB_SUPPORT): Check for atexit and at_quick_exit. - * config.h.in, configure: Regenerate. - * include/c_std/cstdlib: Add atexit and at_quick_exit. - * include/c_global/cstdlib: Add atexit and at_quick_exit. - * testsuite/18_support/quick_exit/quick_exit.cc: New. - -2013-02-11 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56282 - Revert: - 2013-02-06 Edward Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/56193 - * include/bits/basic_ios.h: Replace operator void*() const - with explicit operator bool() const in C++11 and greater. - * testsuite/27_io/basic_ios/pr56193.cc: New file. - -2013-02-10 François Dumont <fdumont@gcc.gnu.org> - Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/containers.xml: Add section on unordered containers. - * doc/xml/manual/using.xml: Fix incomplete sentence. - -2013-02-10 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56267 - * include/bits/hashtable.h (__cache_default): Check if hash function - is copy assignable. - * testsuite/23_containers/unordered_set/56267.cc: New. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust - dg-error line number. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Likewise. - - PR libstdc++/56278 - * include/bits/hashtable_policy.h (_Hash_code_base): Make default - constructor public. - * testsuite/23_containers/unordered_set/56278.cc: New. - -2013-02-09 François Dumont <fdumont@gcc.gnu.org> - - * include/tr1/bessel_function.tcc (__cyl_bessel_ij_series): Code - simplification. - -2013-02-08 Edward Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/56216 - * include/tr1/special_function_util.h: Remove spurious const - from numeric arguments. - * include/tr1/riemann_zeta.tcc: Likewise. - * include/tr1/exp_integral.tcc: Likewise. - * include/tr1/bessel_function.tcc: Likewise. - * include/tr1/hypergeometric.tcc: Likewise. - * include/tr1/modified_bessel_func.tcc: Likewise. - * include/tr1/poly_laguerre.tcc: Likewise. - * include/tr1/gamma.tcc: Likewise. - * include/tr1/legendre_function.tcc: Likewise. - * include/tr1/poly_hermite.tcc: Likewise. - * include/tr1/ell_integral.tcc: Likewise. - * include/tr1/bessel_function.tcc (__cyl_bessel_ij_series): - If argument is zero return function value. - * testsuite/tr1/5_numerical_facilities/special_functions/ - 08_cyl_bessel_i/pr56216.cc: New. - -2013-02-07 Paolo Carlini <paolo.carlini@oracle.com> - - * testsuite/27_io/basic_ios/pr56193.cc: Tweak. - -2013-02-06 Edward Smith-Rowland <3dw4rd@verizon.net> - - PR libstdc++/56193 - * include/bits/basic_ios.h: Replace operator void*() const - with explicit operator bool() const in C++11 and greater. - * testsuite/27_io/basic_ios/pr56193.cc: New file. - -2013-02-04 Dodji Seketeli <dodji@redhat.com> - - Add missing explicit instantiation for std::lower_bound template - * libstdc++-v3/src/c++11/hashtable_c++0x.cc (namespace std): Add - missing instantiation for std::lower_bound template. - -2013-02-04 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/functional_hash.h (std::__is_fast_hash<>): New. - * include/bits/basic_string.h: Specialize previous to mark - std::hash for string types as slow. - * include/bits/hashtable.h (__cache_default): Replace is_integral - with __is_fast_hash. - * src/c++11/hash_c++0x.cc: Add type_traits include. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Adapt dg-error line number. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: Likewise. - -2013-02-04 Manuel López-Ibáñez <manu@gcc.gnu.org> - Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56202 (again) - * include/bits/random.tcc (binomial_distribution<>:: - _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Fix thinko - in previous commit. - - * include/bits/random.h: Fix comment typo. - -2013-02-04 Manuel López-Ibáñez <manu@gcc.gnu.org> - Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56202 - * include/bits/random.tcc (binomial_distribution<>:: - _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid - division by zero. - -2013-02-03 Richard Sandiford <rdsandiford@googlemail.com> - - Update copyright years. - * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc, - testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc, - testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc, - testsuite/23_containers/deque/requirements/dr438/insert_neg.cc, - testsuite/23_containers/list/requirements/dr438/assign_neg.cc, - testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc, - testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc, - testsuite/23_containers/list/requirements/dr438/insert_neg.cc, - testsuite/23_containers/vector/requirements/dr438/assign_neg.cc, - testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc, - testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc, - testsuite/23_containers/vector/requirements/dr438/insert_neg.cc, - testsuite/29_atomics/atomic/cons/assign_neg.cc, - testsuite/29_atomics/atomic/cons/copy_neg.cc, - testsuite/29_atomics/atomic_integral/cons/assign_neg.cc, - testsuite/29_atomics/atomic_integral/cons/copy_neg.cc, - testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc, - testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc, - testsuite/29_atomics/atomic_integral/operators/increment_neg.cc: - Update lines in dg error matches. - -2013-02-03 Richard Sandiford <rdsandiford@googlemail.com> - - * config/os/mingw32/ctype_inline.h: Fix copyright typo. - -2013-02-01 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h - (_Prime_rehash_policy::_M_next_bkt) - (_Prime_rehash_policy::_M_need_rehash): Move definition... - * src/c++11/hashtable_c++0x.cc: ... here. - * src/shared/hashtable-aux.cc: Remove c++config.h include. - * config/abi/gnu.ver (GLIBCXX_3.4.18): Export _Prime_rehash_policy - symbols. - -2013-01-29 Jason Merrill <jason@redhat.com> - - PR libstdc++/54314 - * config/abi/pre/gnu.ver: Don't export construction vtables. - * config/abi/pre/gnu-versioned-namespace.ver: Likewise. - -2013-01-28 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/56112 - * include/bits/hashtable_policy.h (insert(_Pair&&)): Use _M_emplace - to construct value_type explicitly before trying to extract the key. - * testsuite/23_containers/unordered_map/cons/56112.cc: New. - -2013-01-28 François Dumont <fdumont@gcc.gnu.org> - - * include/bits/hashtable_policy.h (_Local_iterator_base): Use - _Hashtable_ebo_helper to embed functors into the local_iterator - when necessary. Pass information about functors involved in hash - code by copy. - * include/bits/hashtable.h (__cache_default): Do not cache for - builtin integral types unless the hash functor is not noexcept - qualified or is not default constructible. Adapt static assertions - and local iterator instantiations. - * include/debug/unordered_set - (std::__debug::unordered_set<>::erase): Detect local iterators to - invalidate using contained node rather than generating a dummy - local_iterator instance. - (std::__debug::unordered_multiset<>::erase): Likewise. - * include/debug/unordered_map - (std::__debug::unordered_map<>::erase): Likewise. - (std::__debug::unordered_multimap<>::erase): Likewise. - * testsuite/performance/23_containers/insert_erase/41975.cc: Test - std::tr1 and std versions of unordered_set regardless of any - macro. Add test on default cache behavior. - * testsuite/performance/23_containers/insert/54075.cc: Likewise. - * testsuite/23_containers/unordered_set/instantiation_neg.cc: - Adapt line number. - * testsuite/23_containers/unordered_set/ - not_default_constructible_hash_neg.cc: New. - * testsuite/23_containers/unordered_set/buckets/swap.cc: New. - -2013-01-24 Paolo Carlini <paolo.carlini@oracle.com> - - PR libstdc++/56085 - * include/std/complex (pow(const complex<>&, int)): Avoid __n - signed overflow. - -2013-01-22 Jakub Jelinek <jakub@redhat.com> - - * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc: - Tightten scan-assembler-times regexps, add dg-additional-options for - ia32, add -g0 -fno-exceptions -fno-asynchronous-unwind-tables to - dg-options. - -2013-01-12 Andi Kleen <ak@linux.intel.com> - Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55233 - * include/bits/atomic_base.h (__memory_order_modifier): Add - __memory_order_mask, __memory_order_modifier_mask, - __memory_order_hle_acquire, __memory_order_hle_release. - (operator|,operator&): Add. - (__cmpexch_failure_order): Rename to __cmpexch_failure_order2. - (__cmpexch_failure_order): Add. - (clear, store, load, compare_exchange_weak, compare_exchange_strong): - Handle flags. - * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc: - Add. - -2013-01-19 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55861 - * include/std/future (_State_base::_S_check(const shared_ptr<T>&)): - Fix return type. - (__basic_future::_M_get_result()): Const qualify. - (shared_future::get()): Likewise. - * testsuite/30_threads/shared_future/members/get.cc: Use const - objects. - -2013-01-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55043 (again) - * include/bits/alloc_traits.h (allocator_traits::construct): Disable - unless construction would be well-formed. - (__allow_copy_cons, __check_copy_constructible): Define. - * include/bits/unordered_map.h (__check_copy_constructible): Use as - base class so copy constructor will be deleted if appropriate. - (is_copy_constructible): Remove specialization. - * include/bits/unordered_set.h: Likewise. - * include/debug/unordered_map.h: Undo previous commit. Default copy - and move constructors. - * include/debug/unordered_set.h: Likewise. - * include/profile/unordered_map.h: Undo previous commit. - * include/profile/unordered_set.h: Likewise. - * testsuite/23_containers/unordered_map/55043.cc: Fix test. - * testsuite/23_containers/unordered_multimap/55043.cc: Likewise. - * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. - * testsuite/23_containers/unordered_set/55043.cc: Likewise. - * testsuite/23_containers/unordered_map/requirements/53339.cc: XFAIL, - cannot support incomplete types. - * testsuite/23_containers/unordered_multimap/requirements/53339.cc: - Likewise. - -2013-01-16 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55043 - * include/std/unordered_map: Include alloc_traits.h - * include/std/unordered_set: Likewise. - * include/bits/alloc_traits.h: Define __is_copy_insertable. - * include/bits/unordered_map.h: Use it. - * include/bits/unordered_set.h: Likewise. - * include/debug/unordered_map.h: Likewise. - * include/debug/unordered_set.h: Likewise. - * include/profile/unordered_map.h: Likewise. - * include/profile/unordered_set.h: Likewise. - * include/bits/hashtable.h: Fix comment typos. - * testsuite/23_containers/unordered_map/55043.cc: New. - * testsuite/23_containers/unordered_multimap/55043.cc: New. - * testsuite/23_containers/unordered_multiset/55043.cc: New. - * testsuite/23_containers/unordered_set/55043.cc: New. - -2013-01-03 Janis Johnson <janisjo@codesourcery.com> - - * testsuite/lib/gdb-test.exp (gdb_batch_check): Catch error running - gdb command. - -2013-01-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/status_cxx2011.xml: Document that N3189 is missing. - -2013-01-08 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55908 - * include/std/functional (_Mem_fn::operator()): Fix constraints to - avoid ambiguity. - * testsuite/20_util/function_objects/mem_fn/55908.cc: New. - * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line numbers. - -2013-01-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> - - PR libstdc++/55594 - * acinclude.m4 (GLIBCXX_CHECK_ASSEMBLER_HWCAP): Restrict test to - Solaris targets. - * configure: Regenerate. - -2013-01-07 Jonathan Wakely <jwakely.gcc@gmail.com> - - PR libstdc++/55847 - * src/c++11/shared_ptr.cc (bad_weak_ptr::what()): Correct string. - * testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc: Verify - string. - - PR libstdc++/55728 - * include/std/functional (bad_function_call::what()): Declare. - * src/c++11/functional.cc (bad_function_call::what()): Define. - * config/abi/pre/gnu.ver (bad_function_call::what()): Export. - * testsuite/20_util/bad_function_call/what.cc: New. - -2013-01-06 Jonathan Wakely <jwakely.gcc@gmail.com> - - * include/bits/unordered_map.h: Fix typo in comments. - * doc/xml/manual/status_cxx2011.xml: Add implementation-defined bucket - counts for unordered associative containers. - -2013-01-06 Jonathan Wakely <jwakely.gcc@gmail.com> - - * doc/xml/manual/abi.xml: Update library and symbol versions. +2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> -2013-01-06 Richard Sandiford <rdsandiford@googlemail.com> + Update copyright years - * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Fix typo - in copyright years. - * testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc: Likewise. +2014-01-02 Richard Sandiford <rdsandiford@googlemail.com> + * testsuite/18_support/new_handler.cc, + testsuite/18_support/terminate_handler.cc, + testsuite/18_support/unexpected_handler.cc: Use the standard form for + the copyright notice. -Copyright (C) 2013-2014 Free Software Foundation, Inc. +Copyright (C) 2014 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright diff --git a/libstdc++-v3/ChangeLog-2013 b/libstdc++-v3/ChangeLog-2013 new file mode 100644 index 00000000000..820b029a783 --- /dev/null +++ b/libstdc++-v3/ChangeLog-2013 @@ -0,0 +1,4599 @@ +2013-12-22 Hans-Peter Nilsson <hp@axis.com> + + * testsuite/20_util/hash/chi2_quality.h: Break out from + chi2_quality.cc. + * testsuite/20_util/hash/chi2_q_bit_flip_set.cc: Ditto. + * testsuite/20_util/hash/chi2_q_document_words.cc: Ditto. + * testsuite/20_util/hash/chi2_q_bit_string_set.cc: Ditto. Increase + SAMPLES to 35000 for simulator targets. + * testsuite/20_util/hash/chi2_q_numeric_pattern_set.cc: Ditto. + * testsuite/20_util/hash/chi2_q_uniform_random.cc: Ditto. + * testsuite/20_util/hash/chi2_quality.cc: Remove. + +2013-12-10 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/20_util/is_base_of/value.cc: Add test. + + * include/std/fstream: Tiny formatting tweak. + +2013-12-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/59427 + * include/bits/fstream.tcc (basic_filebuf<>::overflow, + basic_filebuf<>::xsputn): Per lwg/596, ios_base::app implies + ios_base:out. + * include/std/fstream (basic_filebuf<>::_M_set_buffer): Likewise. + * testsuite/27_io/basic_filebuf/sputc/char/59427.cc: New. + * testsuite/27_io/basic_filebuf/sputn/char/59427.cc: Likewise. + +2013-12-09 Renlin Li <Renlin.Li@arm.com> + + * testsuite/20_util/hash/chi2_quality.cc: Change -DSAMPLES=30000. + +2013-12-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/30_threads/async/async.cc: Fix race condition in test. + +2013-12-08 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/20_util/add_const/requirements/explicit_instantiation.cc: + New. + * testsuite/20_util/add_const/value.cc: Likewise. + * testsuite/20_util/add_cv/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/add_cv/value.cc: Likewise. + * testsuite/20_util/add_pointer/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/add_pointer/value.cc: Likewise. + * testsuite/20_util/add_volatile/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/add_volatile/value.cc: Likewise. + * testsuite/20_util/alignment_of/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/alignment_of/requirements/typedefs.cc: Likewise. + * testsuite/20_util/alignment_of/value.cc: Likewise. + * testsuite/20_util/extent/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/extent/requirements/typedefs.cc: Likewise. + * testsuite/20_util/extent/value.cc: Likewise. + * testsuite/20_util/has_virtual_destructor/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/has_virtual_destructor/requirements/ + typedefs.cc: Likewise. + * testsuite/20_util/has_virtual_destructor/value.cc: Likewise. + * testsuite/20_util/is_abstract/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_abstract/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_abstract/value.cc: Likewise. + * testsuite/20_util/is_arithmetic/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/is_arithmetic/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_arithmetic/value.cc: Likewise. + * testsuite/20_util/is_array/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_array/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_array/value.cc: Likewise. + * testsuite/20_util/is_base_of/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_base_of/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_base_of/value.cc: Likewise. + * testsuite/20_util/is_class/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_class/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_class/value.cc: Likewise. + * testsuite/20_util/is_const/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_const/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_const/value.cc: Likewise. + * testsuite/20_util/is_empty/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_empty/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_empty/value.cc: Likewise. + * testsuite/20_util/is_enum/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/is_enum/requirements/typedefs.cc + * testsuite/20_util/is_enum/value.cc: Likewise. + * testsuite/20_util/is_pointer/requirements/explicit_instantiation.cc + * testsuite/20_util/is_pointer/value.cc: Likewise. + * testsuite/20_util/is_polymorphic/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/is_polymorphic/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_polymorphic/value.cc: Likewise. + * testsuite/20_util/is_same/requirements/explicit_instantiation.cc + * testsuite/20_util/is_same/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_same/value.cc: Likewise. + * testsuite/20_util/is_union/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/is_union/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_union/value.cc: Likewise. + * testsuite/20_util/is_void/requirements/explicit_instantiation.cc + * testsuite/20_util/is_void/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_void/value.cc: Likewise. + * testsuite/20_util/is_volatile/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/is_volatile/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_volatile/value.cc: Likewise. + * testsuite/20_util/rank/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/rank/requirements/typedefs.cc: Likewise. + * testsuite/20_util/rank/value.cc: Likewise. + * testsuite/20_util/remove_all_extents/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/remove_all_extents/value.cc: Likewise. + * testsuite/20_util/remove_const/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/remove_const/value.cc: Likewise. + * testsuite/20_util/remove_cv/requirements/explicit_instantiation.cc: + Likewise. + * testsuite/20_util/remove_cv/value.cc: Likewise. + * testsuite/20_util/remove_extent/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/remove_extent/value.cc: Likewise. + * testsuite/20_util/remove_pointer/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/remove_pointer/value.cc: Likewise. + * testsuite/20_util/remove_volatile/requirements/ + explicit_instantiation.cc: Likewise. + * testsuite/20_util/remove_volatile/value.cc: Likewise. + +2013-12-06 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/util/testsuite_tr1.h (test_category, test_property, + test_relationship): constexpr in c++11 mode. + * testsuite/20_util/add_lvalue_reference/value.cc: Use static_assert + and change to dg-do compile testcase. + * testsuite/20_util/add_rvalue_reference/value.cc: Likewise. + * testsuite/20_util/aligned_storage/value.cc: Likewise. + * testsuite/20_util/has_trivial_copy_assign/value.cc: Likewise. + * testsuite/20_util/has_trivial_copy_constructor/value.cc: Likewise. + * testsuite/20_util/has_trivial_default_constructor/value.cc: Likewise. + * testsuite/20_util/is_compound/value.cc: Likewise. + * testsuite/20_util/is_constructible/value.cc: Likewise. + * testsuite/20_util/is_convertible/value.cc: Likewise. + * testsuite/20_util/is_copy_assignable/value.cc: Likewise. + * testsuite/20_util/is_copy_constructible/value.cc: Likewise. + * testsuite/20_util/is_floating_point/value.cc: Likewise. + * testsuite/20_util/is_function/value.cc: Likewise. + * testsuite/20_util/is_fundamental/value.cc: Likewise. + * testsuite/20_util/is_integral/value.cc: Likewise. + * testsuite/20_util/is_literal_type/value.cc: Likewise. + * testsuite/20_util/is_lvalue_reference/value.cc: Likewise. + * testsuite/20_util/is_member_function_pointer/value.cc: Likewise. + * testsuite/20_util/is_member_object_pointer/value.cc: Likewise. + * testsuite/20_util/is_member_pointer/value.cc: Likewise. + * testsuite/20_util/is_move_assignable/value.cc: Likewise. + * testsuite/20_util/is_move_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_assignable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_copy_assignable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_copy_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_default_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_move_assignable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_move_constructible/value.cc: Likewise. + * testsuite/20_util/is_null_pointer/value.cc: Likewise. + * testsuite/20_util/is_object/value.cc: Likewise. + * testsuite/20_util/is_pod/value.cc: Likewise. + * testsuite/20_util/is_reference/value.cc: Likewise. + * testsuite/20_util/is_rvalue_reference/value.cc: Likewise. + * testsuite/20_util/is_scalar/value.cc: Likewise. + * testsuite/20_util/is_signed/value.cc: Likewise. + * testsuite/20_util/is_standard_layout/value.cc: Likewise. + * testsuite/20_util/is_trivial/value.cc: Likewise. + * testsuite/20_util/is_trivially_destructible/value.cc: Likewise. + * testsuite/20_util/is_unsigned/value.cc: Likewise. + * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc: Likewise. + * testsuite/20_util/remove_reference/value.cc: Likewise. + +2013-12-03 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/fstream (basic_filebuf::open): Use preformatted text + for table in Doxygen comment. + +2013-12-03 Tim Shen <timshen91@gmail.com> + + * regex_compiler.h: Add todo comment. + * regex_executor.tcc: Likewise. + +2013-11-29 Matthias Klose <doko@ubuntu.com> + + * testsuite/experimental/string_view/requirements/exception, + testsuite/experimental/string_view/capacity/wchar_t, + testsuite/experimental/string_view/capacity/char: Remove empty dirs. + +2013-11-27 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * testsuite/ext/random/hypergeometric_distribution/operators/values.cc: + Use dg-require-cmath instead. + + * testsuite/ext/random/hypergeometric_distribution/operators/values.cc + (test01): Wrap in _GLIBCXX_USE_C99_MATH_TR1. + +2013-11-22 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/safe_local_iterator.h (_Safe_local_iterator<>): + Remove _M_bucket, use same information in normal local_iterator. + (operator==): Remove redundant _M_can_compare check. + * include/debug/safe_local_iterator.tcc: Adapt. + * include/debug/unordered_set: Likewise. + * include/debug/unordered_map: Likewise. + +2013-11-22 Jakub Jelinek <jakub@redhat.com> + + * testsuite/Makefile.am (check_DEJAGNU_normal_targets): Add 10. + (check-DEJAGNU): Add normal10, run 28_regex/[ab]* + tests as another separate job. + * testsuite/Makefile.in: Regenerated. + +2013-11-22 Jonathan Wakely <jwakely.gcc@gmail.com> + + * acinclude.m4 (libtool_VERSION): Bump. + * configure: Regenerate. + * doc/xml/manual/abi.xml: Update version information. + + PR libstdc++/59247 + * include/bits/c++config (_GLIBCXX_INLINE_VERSION): Declare namespace + std::experimental::__7 as inline. + * include/bits/regex.h (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Do not + enclose namespace __detail. + * include/bits/regex.tcc (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise. + * include/std/iomanip (_GLIBCXX_BEGIN_NAMESPACE_VERSION): Likewise. + * include/ext/pb_ds/tag_and_trait.hpp (detail): Fix comment. + * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number. + +2013-11-22 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/ext/random/hypergeometric_distribution/operators/ + values.cc: Fix further thinkos. + +2013-11-22 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/ext/random/hypergeometric_distribution/operators/ + values.cc: Fix thinkos. + +2013-11-21 Edward Smith-Rowland <3dw4rd@verizon.net> + + * include/experimental/string_view: Rep empty string with unit-length + static constexpr string. Uncomment _GLIBCXX_VISIBILITY. Enforce + invariant of no nullptr string pointer. + * include/experimental/string_view.tcc: Ditto. + * testsuite/experimental/string_view/cons/char/1.cc: data() for empty + string_view is no longer nullptr. + * testsuite/experimental/string_view/cons/wchar_t/1.cc: Ditto. + * testsuite/experimental/string_view/operations/data/char/1.cc: Ditto. + * testsuite/experimental/string_view/operations/data/wchar_t/1.cc: + Ditto. + +2013-11-21 Edward Smith-Rowland <3dw4rd@verizon.net> + + Implement __gnu_cxx::hypergeometric_distribution. + * include/ext/random: Add hypergeometric_distribution. + * include/ext/random.tcc: Add hypergeometric_distribution. + * testsuite/util/testsuite_random.h (hypergeometric_pdf): New pdf + for the hypergeometric discreet distribution; + (lbincoef): New supporting function for binomial coefficients. + * testsuite/ext/random/hypergeometric_distribution/operators/ + serialize.cc: New. + * testsuite/ext/random/hypergeometric_distribution/operators/ + equal.cc: New. + * testsuite/ext/random/hypergeometric_distribution/operators/ + inequal.cc: New. + * testsuite/ext/random/hypergeometric_distribution/operators/ + values.cc: New. + * testsuite/ext/random/hypergeometric_distribution/cons/parms.cc: New. + * testsuite/ext/random/hypergeometric_distribution/cons/default.cc: New. + * testsuite/ext/random/hypergeometric_distribution/requirements/ + explicit_instantiation/1.cc: New. + * testsuite/ext/random/hypergeometric_distribution/requirements/ + typedefs.cc: New. + +2013-11-20 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR c++/59173 + * include/ext/pointer.h (pointer_traits<>::rebind<>): Add template + keyword in nested name. + + PR libstdc++/49204 + * include/std/future (__future_base::_State_base): Rename to + __future_base::_State_baseV2. + (__future_base::_State_baseV2::~_State_baseV2): Define as defaulted. + (__future_base::_State_baseV2::_M_run_deferred): Rename to + _M_complete_async. + (__future_base::_State_baseV2::_M_has_deferred): Add new virtual. + (__future_base::_State_baseV2::wait_for): Call _M_has_deferred() to + test for a deferred function, or call _M_complete_async() to join an + async thread that has made the shared state ready. + (__future_base::_State_baseV2::wait_until): Likewise. + (__future_base::_Async_state_common): Rename to _Async_state_commonV2. + (__future_base::_Async_state_commonV2::_M_run_deferred): Rename to + _M_complete_async. + * src/c++11/compatibility-thread-c++0x.cc (__future_base::_State_base): + Export old definition. + (__future_base::_Async_state_common): Likewise. + * src/c++11/future.cc (__future_base::_State_base::~_State_base): + Remove. + * doc/xml/manual/status_cxx2011.xml: Update status. + * testsuite/30_threads/async/async.cc: Test future_status::timeout + and future_status::ready. + * testsuite/30_threads/async/sync.cc: Test future_status::deferred. + +2013-11-20 David Edelsohn <dje.gcc@gmail.com> + + * testsuite/17_intro/static.cc: Ignore AIX TOC reload warnings. + +2013-11-19 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/23_containers/forward_list/allocator/noexcept.cc: Change + to compile-only test. Adjust swap overload to handle rebound + allocators. + * testsuite/23_containers/map/allocator/noexcept.cc: Likewise. + * testsuite/23_containers/multimap/allocator/noexcept.cc: Likewise. + * testsuite/23_containers/multiset/allocator/noexcept.cc: Likewise. + * testsuite/23_containers/set/allocator/noexcept.cc: Likewise. + * testsuite/23_containers/unordered_map/allocator/noexcept.cc: + Likewise. + * testsuite/23_containers/unordered_multimap/allocator/noexcept.cc: + Likewise. + * testsuite/23_containers/unordered_multiset/allocator/noexcept.cc: + Likewise. + * testsuite/23_containers/unordered_set/allocator/noexcept.cc: + Likewise. + * testsuite/23_containers/vector/allocator/noexcept.cc: Likewise. + * testsuite/23_containers/vector/allocator/swap.cc: Add elements + before swapping. + + * config/abi/pre/gnu.ver (_ZNSt11regex_errorC*): Export regex_error + constructors. + * testsuite/20_util/addressof/1.cc: Remove { dg-do compile }. + * testsuite/20_util/allocator_traits/members/destroy.cc: Likewise. + * testsuite/20_util/allocator_traits/members/select.cc: Likewise. Fix + failure. + * testsuite/28_regex/basic_regex/ctors/extended/cstring.cc: Likewise. + * testsuite/28_regex/init-list.cc: Likewise. + * testsuite/28_regex/regex_error/regex_error.cc: Likewise. + * testsuite/28_regex/sub_match/length.cc: Likewise. Add main. + * testsuite/28_regex/sub_match/cast_char.cc: Likewise. Fix test. + * testsuite/28_regex/sub_match/cast_wchar_t.cc: Likewise. + * testsuite/tr1/7_regular_expressions/regex/cons/char/ + c_string_extended.cc: Delete. + +2013-11-19 Paolo Carlini <paolo.carlini@oracle.com> + + * include/experimental/string_view (_S_max_size): Remove. + (basic_string_view<>::max_size): Adjust. + * testsuite/experimental/string_view/capacity/1.cc: Clean-up. + * testsuite/experimental/string_view/inserters/pod/10081-out.cc: + Likewise. + +2013-11-19 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/status_cxx2014.xml: Create new table for TS statuses. + +2013-11-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/shared_ptr_base.h (_Sp_counted_base<_S_single>): Use + non-atomic operations. + * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line number. + * testsuite/20_util/shared_ptr/cons/void_neg.cc: Likewise. + +2013-11-16 Edward Smith-Rowland <3dw4rd@verizon.net> + + Implement N3762 string_view: a non-owning reference to a string. + * include/Makefile.am: Add string_view and string_view.tcc. + * include/Makefile.in: Regenerate. + * include/experimental/string_view: Implement basic_string_view. + * include/experimental/string_view.tcc: Implement basic_string_view. + * testsuite/experimental/string_view/capacity/1.cc: New. + * testsuite/experimental/string_view/cons/char/1.cc: New. + * testsuite/experimental/string_view/cons/char/2.cc: New. + * testsuite/experimental/string_view/cons/char/3.cc: New. + * testsuite/experimental/string_view/cons/wchar_t/1.cc: New. + * testsuite/experimental/string_view/cons/wchar_t/2.cc: New. + * testsuite/experimental/string_view/cons/wchar_t/3.cc: New. + * testsuite/experimental/string_view/element_access/char/1.cc: New. + * testsuite/experimental/string_view/element_access/char/2.cc: New. + * testsuite/experimental/string_view/element_access/char/empty.cc: New. + * testsuite/experimental/string_view/element_access/char/front_back.cc: + New. + * testsuite/experimental/string_view/element_access/wchar_t/1.cc: New. + * testsuite/experimental/string_view/element_access/wchar_t/2.cc: New. + * testsuite/experimental/string_view/element_access/wchar_t/empty.cc: + New. + * testsuite/experimental/string_view/element_access/wchar_t/ + front_back.cc: New. + * testsuite/experimental/string_view/include.cc: New. + * testsuite/experimental/string_view/inserters/char/1.cc: New. + * testsuite/experimental/string_view/inserters/char/2.cc: New. + * testsuite/experimental/string_view/inserters/char/3.cc: New. + * testsuite/experimental/string_view/inserters/pod/10081-out.cc: New. + * testsuite/experimental/string_view/inserters/wchar_t/1.cc: New. + * testsuite/experimental/string_view/inserters/wchar_t/2.cc: New. + * testsuite/experimental/string_view/inserters/wchar_t/3.cc: New. + * testsuite/experimental/string_view/literals/types.cc: New. + * testsuite/experimental/string_view/literals/values.cc: New. + * testsuite/experimental/string_view/modifiers/remove_prefix/char/1.cc: + New. + * testsuite/experimental/string_view/modifiers/remove_prefix/wchar_t/ + 1.cc: New. + * testsuite/experimental/string_view/modifiers/remove_suffix/char/1.cc: + New. + * testsuite/experimental/string_view/modifiers/remove_suffix/wchar_t/ + 1.cc: New. + * testsuite/experimental/string_view/operations/compare/char/1.cc: New. + * testsuite/experimental/string_view/operations/compare/char/13650.cc: + New. + * testsuite/experimental/string_view/operations/compare/wchar_t/1.cc: + New. + * testsuite/experimental/string_view/operations/compare/wchar_t/ + 13650.cc: New. + * testsuite/experimental/string_view/operations/data/char/1.cc: New. + * testsuite/experimental/string_view/operations/data/wchar_t/1.cc: New. + * testsuite/experimental/string_view/operations/find/char/1.cc: New. + * testsuite/experimental/string_view/operations/find/char/2.cc: New. + * testsuite/experimental/string_view/operations/find/char/3.cc: New. + * testsuite/experimental/string_view/operations/find/char/4.cc: New. + * testsuite/experimental/string_view/operations/find/wchar_t/1.cc: New. + * testsuite/experimental/string_view/operations/find/wchar_t/2.cc: New. + * testsuite/experimental/string_view/operations/find/wchar_t/3.cc: New. + * testsuite/experimental/string_view/operations/find/wchar_t/4.cc: New. + * testsuite/experimental/string_view/operations/rfind/char/1.cc: New. + * testsuite/experimental/string_view/operations/rfind/char/2.cc: New. + * testsuite/experimental/string_view/operations/rfind/char/3.cc: New. + * testsuite/experimental/string_view/operations/rfind/wchar_t/1.cc: New. + * testsuite/experimental/string_view/operations/rfind/wchar_t/2.cc: New. + * testsuite/experimental/string_view/operations/rfind/wchar_t/3.cc: New. + * testsuite/experimental/string_view/operations/substr/char/1.cc: New. + * testsuite/experimental/string_view/operations/substr/wchar_t/1.cc: + New. + * testsuite/experimental/string_view/operators/char/2.cc: New. + * testsuite/experimental/string_view/operators/wchar_t/2.cc: New. + * testsuite/experimental/string_view/range_access/char/1.cc: New. + * testsuite/experimental/string_view/range_access/wchar_t/1.cc: New. + * testsuite/experimental/string_view/requirements/ + explicit_instantiation/1.cc: New. + * testsuite/experimental/string_view/requirements/ + explicit_instantiation/char/1.cc: New. + * testsuite/experimental/string_view/requirements/ + explicit_instantiation/char16_t/1.cc: New. + * testsuite/experimental/string_view/requirements/ + explicit_instantiation/char32_t/1.cc: New. + * testsuite/experimental/string_view/requirements/ + explicit_instantiation/wchar_t/1.cc: New. + * testsuite/experimental/string_view/requirements/typedefs.cc: New. + * testsuite/experimental/string_view/types/1.cc: New. + +2013-11-16 François Dumont <fdumont@gcc.gnu.org> + + * testsuite/23_containers/unordered_set/55043.cc (equal): Add + missing & on rhs parameter. + +2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/stl_bvector.h (vector<bool>::emplace_back()): LWG 2187: + Define. + (vector<bool>::emplace()): Likewise. + * testsuite/23_containers/vector/bool/emplace.cc: New. + +2013-11-15 OndÅ™ej BÃlka <neleai@seznam.cz> + Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/build_hacking.xml: Fix documentation typos. + * doc/xml/manual/configure.xml: Likewise. + * include/bits/atomic_base.h: Fix typos in comments. + * include/bits/random.h: Likewise. + * include/ext/cast.h: Likewise. + * libsupc++/cxxabi.h: Likewise. + * testsuite/ext/pb_ds/example/hash_illegal_resize.cc: Likewise. + * testsuite/tr1/5_numerical_facilities/special_functions/testcase.h: + Likewise. + * testsuite/util/exception/safety.h: Likewise. + * testsuite/util/testsuite_containers.h: Likewise. + * testsuite/util/testsuite_hooks.cc: Likewise. + +2013-11-15 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/stl_map.h (map): Implement C++11 allocator-aware + container requirements. + * include/bits/stl_multimap.h (multimap): Likewise. + * include/bits/stl_multiset.h (multiset): Likewise. + * include/bits/stl_set.h (set): Likewise. + * include/bits/stl_tree.h (_Rb_tree_node): Use __aligned_buffer and + add accessors for value. + (_Rb_tree_iterator, _Rb_tree_const_iterator): Use _Rb_tree_node + accessors. + (_Rb_tree): Use allocator_traits and implement support for sets and + maps the be allocator-aware. + * include/bits/forward_list.h (_Fwd_list_base::_M_create_node): Do + not zero-initialize storage buffer. + * include/bits/hashtable_policy.h (_Hashtable_alloc::_M_allocate_node): + Likewise. + * include/bits/stl_vector.h (vector(vector&&, const allocator_type&)): + Add conditional noexcept specification. + * doc/xml/manual/status_cxx2011.xml: Update status of containers. + * testsuite/util/testsuite_allocator.h: Re-indent. + * testsuite/23_containers/forward_list/allocator/copy.cc: Test + allocator-extended copy constructor. + * testsuite/23_containers/unordered_map/allocator/copy.cc: Likewise. + * testsuite/23_containers/unordered_multimap/allocator/copy.cc: + Likewise. + * testsuite/23_containers/unordered_multiset/allocator/copy.cc: + Likewise. + * testsuite/23_containers/unordered_set/allocator/copy.cc: Likewise. + * testsuite/23_containers/vector/allocator/copy.cc: Likewise. + * testsuite/23_containers/forward_list/allocator/move.cc: New. + * testsuite/23_containers/unordered_map/allocator/move.cc: New. + * testsuite/23_containers/unordered_multimap/allocator/move.cc: New. + * testsuite/23_containers/unordered_multiset/allocator/move.cc: New. + * testsuite/23_containers/unordered_set/allocator/move.cc: New. + * testsuite/23_containers/vector/allocator/move.cc: New. + * testsuite/23_containers/map/allocator/copy.cc: New. + * testsuite/23_containers/map/allocator/copy_assign.cc: New. + * testsuite/23_containers/map/allocator/minimal.cc: New. + * testsuite/23_containers/map/allocator/move.cc: New. + * testsuite/23_containers/map/allocator/move_assign.cc: New. + * testsuite/23_containers/map/allocator/noexcept.cc: New. + * testsuite/23_containers/map/allocator/swap.cc: New. + * testsuite/23_containers/multimap/allocator/copy.cc: New. + * testsuite/23_containers/multimap/allocator/copy_assign.cc: New. + * testsuite/23_containers/multimap/allocator/minimal.cc: New. + * testsuite/23_containers/multimap/allocator/move.cc: New. + * testsuite/23_containers/multimap/allocator/move_assign.cc: New. + * testsuite/23_containers/multimap/allocator/noexcept.cc: New. + * testsuite/23_containers/multimap/allocator/swap.cc: New. + * testsuite/23_containers/multiset/allocator/copy.cc: New. + * testsuite/23_containers/multiset/allocator/copy_assign.cc: New. + * testsuite/23_containers/multiset/allocator/minimal.cc: New. + * testsuite/23_containers/multiset/allocator/move.cc: New. + * testsuite/23_containers/multiset/allocator/move_assign.cc: New. + * testsuite/23_containers/multiset/allocator/noexcept.cc: New. + * testsuite/23_containers/multiset/allocator/swap.cc: New. + * testsuite/23_containers/set/allocator/copy.cc: New. + * testsuite/23_containers/set/allocator/copy_assign.cc: New. + * testsuite/23_containers/set/allocator/minimal.cc: New. + * testsuite/23_containers/set/allocator/move.cc: New. + * testsuite/23_containers/set/allocator/move_assign.cc: New. + * testsuite/23_containers/set/allocator/noexcept.cc: New. + * testsuite/23_containers/set/allocator/swap.cc: New. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-11-14 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> + + * scripts/extract_symvers.in: Ignore <localentry: > fields + in readelf --symbols output. + +2013-11-14 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/alloc_traits.h (__allow_copy_cons): Remove. + (__check_copy_constructible): Likewise. + * include/bits/unordered_map.h (unordered_map, unordered_multimap): + Do not derive from __check_copy_constructible. + * include/bits/unordered_set.h (unordered_set, unordered_multiset): + Likewise. + * testsuite/23_containers/unordered_map/55043.cc: It is no longer + necessary for is_copy_constructible to be correct to use nested + unordered containers. + * testsuite/23_containers/unordered_multimap/55043.cc: Likewise. + * testsuite/23_containers/unordered_set/55043.cc: Likewise. + * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. + +2013-11-13 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/59087 + * include/ext/pod_char_traits.h: Uglify V, I and S. + +2013-11-11 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/54562 + * include/std/mutex (__timed_mutex_impl::__clock_t): Use + high_resolution_clock for absolute timeouts, because + pthread_mutex_timedlock uses CLOCK_REALTIME not CLOCK_MONOTONIC. + (__timed_mutex_impl::_M_try_lock_for): Use steady_clock for relative + timeouts as per [thread.req.timing]. + (__timed_mutex_impl::_M_try_lock_until<Clock,Duration>): Convert to + __clock_t time point instead of using _M_try_lock_for. + +2013-11-09 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/58982 + * include/bits/stl_algobase.h (__copy_move::__copy_m): Use assertion + to prevent using memmove() on non-assignable types. + (__copy_move_backward::__copy_move_b): Likewise. + * include/bits/stl_uninitialized.h (uninitialized_copy + uninitialized_copy_n, uninitialized_fill, uninitialized_fill_n, + __uninitialized_default, __uninitialized_default_n): Check for + assignable as well as trivial. + * testsuite/20_util/specialized_algorithms/uninitialized_copy/ + 58982.cc: New. + * testsuite/20_util/specialized_algorithms/uninitialized_copy_n/ + 58982.cc: New. + * testsuite/20_util/specialized_algorithms/uninitialized_fill/ + 58982.cc: New. + * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/ + 58982.cc: New. + * testsuite/25_algorithms/copy/58982.cc: New. + * testsuite/25_algorithms/copy_n/58982.cc: New. + +2013-11-08 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/safe_iterator.h (_BeforeBeginHelper<>::_S_Is): + Take only a const safe iterator reference. + (_BeforeBeginHelper<>::_S_Is_beginnest): Likewise. + (__get_distance): Take only one type of iterator. + (_Safe_iterator<>::_M_valid_range<>): Not template anymore. + (_Safe_iterator<>::_M_get_sequence()): Return pointer to const + sequence from a const_iterator and a pointer to sequence from an + iterator. + * include/debug/safe_iterator.tcc: Adapt. + * include/debug/safe_local_iterator.h + (_Safe_local_iterator<>::_M_valid_range<>): Not template anymore. + (_Safe_local_iterator<>::_M_get_sequence()): Return pointer to + const sequence from a const_iterator and a pointer to sequence + from an iterator. + * include/debug/safe_local_iterator.tcc: Adapt. + * include/debug/forward_list + (_BeforeBeginHelper<std::__debug::forward_list<>>): Adapt. + +2013-11-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/regex_automaton.h (__detail::_State): Split + non-dependent parts into new _State_base. + (__detail::_NFA): Likewise for _NFA_base. Use std::move() to avoid + copies when inserting _MatcherT and _StateT objects. + * include/bits/regex_automaton.tcc: Move member definitions to base + class. Qualify dependent names. + * include/bits/regex_compiler.h (__detail::_Compiler::_M_get_nfa): Make + non-const and use std::move to avoid copying. + * include/bits/regex_compiler.tcc: Likewise. + * include/bits/regex_executor.h (__detail::_Executor::_M_is_word): Use + array, so past-the-end iterator is valid. + + * include/bits/regex_automaton.h (__detail::_State, __detail::_NFA, + __detail::_StateSeq): Remove redundant _CharT template parameters. + * include/bits/regex_automaton.tcc: Likewise. + * include/bits/regex_compiler.h (__detail::_Compiler): Likewise. + (__compile_nfa): Add object generator for _Compiler. + * include/bits/regex_compiler.tcc: Remove _CharT template parameters. + * include/bits/regex_executor.h: Likewise. + * include/bits/regex_executor.tcc: Likewise. + * include/bits/regex.h (basic_regex): Assert char_type matches. Use + __compile_nfa object generator. Remove _CharT template parameter. + + * include/bits/regex_compiler.h (__detail::_AnyMatcher, + __detail::_CharMatcher, __detail::_BracketMatcher): Remove redundant + _CharT template parameters. + * include/bits/regex_compiler.tcc: Likewise. + + * include/bits/regex_compiler.h (__detail::__compile_nfa): Overload + so that std::basic_string<C> and std::vector<C> iterators dispatch to + the const C* compiler. + + * include/bits/regex_compiler.h (__detail::__has_contiguous_iter): + vector<bool> storage is not contiguous. + +2013-11-06 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/regex_automaton.h (_S_opcode_word_boundry): Rename to + _S_opcode_word_boundary. + * include/bits/regex_automaton.tcc: Likewise. + * include/bits/regex_executor.h (__detail::_Executor::_M_word_boundry): + Rename to _M_word_boundary. + * include/bits/regex_executor.tcc: Likewise. + +2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> + + N3655 C++1y TransformationTraits Redux + * include/std/type_traits (remove_const_t, remove_volatile_t, + remove_cv_t, add_const_t, add_volatile_t, add_cv_t, remove_reference_t, + add_lvalue_reference_t, add_rvalue_reference_t, make_signed_t, + make_unsigned_t, remove_extent_t, remove_all_extents_t, + remove_pointer_t, add_pointer_t, aligned_storage_t, decay_t, + enable_if_t, conditional_t, common_type_t, underlying_type_t, + result_of_t): Define. + * doc/xml/manual/status_cxx2014.xml: Update. + * testsuite/20_util/add_lvalue_reference/requirements/typedefs-3.cc: + New. + * testsuite/20_util/add_rvalue_reference/requirements/typedefs-3.cc: + New. + * testsuite/20_util/common_type/requirements/typedefs-3.cc: New. + * testsuite/20_util/conditional/requirements/typedefs-2.cc: New. + * testsuite/20_util/decay/requirements/typedefs-2.cc: New. + * testsuite/20_util/enable_if/requirements/typedefs-2.cc: New. + * testsuite/20_util/make_signed/requirements/typedefs-3.cc: New. + * testsuite/20_util/make_unsigned/requirements/typedefs-3.cc: New. + * testsuite/20_util/remove_reference/requirements/typedefs.cc: New. + * testsuite/20_util/result_of/requirements/typedefs.cc: New. + * testsuite/20_util/underlying_type/requirements/typedefs-3.cc: New. + * testsuite/20_util/common_type/requirements/typedefs-2.cc: Change to + compile-only test. + * testsuite/20_util/decay/requirements/typedefs.cc: Likewise. + * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Likewise. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error + line number. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + +2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Document aligned_union as + missing. + +2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com> + Paolo Carlini <paolo.carlini@oracle.com> + + * include/experimental/optional: Use __and_<> and __not_<> in + conditions. Style fixes. + (__constexpr_addressof, swap): Make inline. + * testsuite/experimental/optional/cons/copy.cc: Adjust constants for + 32-bit targets. + * testsuite/experimental/optional/cons/move.cc: Likewise. + * testsuite/experimental/optional/cons/value.cc: Likewise. + * testsuite/experimental/optional/constexpr/cons/value.cc: Likewise. + +2013-11-01 Michael Brune <lucdanton@free.fr> + + * include/bits/enable_special_members.h: New. + * include/experimental/optional: New. + * include/Makefile.am: Handle include/experimental. + * include/Makefile.in: Regenerate. + * testsuite/libstdc++-dg/conformance.exp: Run tests from + testsuite/experimental sub-directory. + * testsuite/experimental/optional/assignment/1.cc: New. + * testsuite/experimental/optional/assignment/2.cc: New. + * testsuite/experimental/optional/assignment/3.cc: New. + * testsuite/experimental/optional/assignment/4.cc: New. + * testsuite/experimental/optional/assignment/5.cc: New. + * testsuite/experimental/optional/assignment/6.cc: New. + * testsuite/experimental/optional/cons/copy.cc: New. + * testsuite/experimental/optional/cons/default.cc: New. + * testsuite/experimental/optional/cons/move.cc: New. + * testsuite/experimental/optional/cons/value.cc: New. + * testsuite/experimental/optional/constexpr/cons/default.cc: New. + * testsuite/experimental/optional/constexpr/cons/value.cc: New. + * testsuite/experimental/optional/constexpr/in_place.cc: New. + * testsuite/experimental/optional/constexpr/make_optional.cc: New. + * testsuite/experimental/optional/constexpr/nullopt.cc: New. + * testsuite/experimental/optional/constexpr/observers/1.cc: New. + * testsuite/experimental/optional/constexpr/observers/2.cc: New. + * testsuite/experimental/optional/constexpr/observers/3.cc: New. + * testsuite/experimental/optional/constexpr/observers/4.cc: New. + * testsuite/experimental/optional/constexpr/observers/5.cc: New. + * testsuite/experimental/optional/constexpr/relops/1.cc: New. + * testsuite/experimental/optional/constexpr/relops/2.cc: New. + * testsuite/experimental/optional/constexpr/relops/3.cc: New. + * testsuite/experimental/optional/constexpr/relops/4.cc: New. + * testsuite/experimental/optional/constexpr/relops/5.cc: New. + * testsuite/experimental/optional/constexpr/relops/6.cc: New. + * testsuite/experimental/optional/in_place.cc: New. + * testsuite/experimental/optional/make_optional.cc: New. + * testsuite/experimental/optional/nullopt.cc: New. + * testsuite/experimental/optional/observers/1.cc: New. + * testsuite/experimental/optional/observers/2.cc: New. + * testsuite/experimental/optional/observers/3.cc: New. + * testsuite/experimental/optional/observers/4.cc: New. + * testsuite/experimental/optional/observers/5.cc: New. + * testsuite/experimental/optional/relops/1.cc: New. + * testsuite/experimental/optional/relops/2.cc: New. + * testsuite/experimental/optional/relops/3.cc: New. + * testsuite/experimental/optional/relops/4.cc: New. + * testsuite/experimental/optional/relops/5.cc: New. + * testsuite/experimental/optional/relops/6.cc: New. + * testsuite/experimental/optional/requirements.cc: New. + * testsuite/experimental/optional/swap/1.cc: New. + +2013-11-01 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/stl_function.h (logical_not<void>): Add noexcept. + +2013-11-01 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58952 + * include/c_global/cstdio: Undef getchar. + +2013-11-01 Jonathan Wakely <jwakely.gcc@gmail.com> + + N3421 C++1y Transparent functors + * include/bits/stl_function.h (plus<void>, minus<void>, + multiplies<void>, divides<void>, modulus<void>, negate<void>, + equal_to<void>, not_equal_to<void>, greater<void>, less<void>, + greater_equal<void>, less_equal<void>, logical_and<void>, + logical_or<void>, logical_not<void>, bit_and<void>, bit_or<void>, + bit_xor<void>, bit_not<void>): Define. + * doc/xml/manual/status_cxx2014.xml: Update. + * testsuite/20_util/function_objects/comparisons_void.cc: New. + +2013-10-31 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/tuple (_Index_tuple, _Build_index_tuple): Move to + <utility>. + * include/std/utility (integer_sequence, make_integer_sequence, + index_sequence, make_index_sequence, index_sequence_for): Define. + * doc/xml/manual/status_cxx2014.xml: Update. + * testsuite/20_util/integer_sequence/intseq.cc: New. + * testsuite/20_util/integer_sequence/requirements/typedefs.cc: New. + +2013-10-31 Steve Ellcey <sellcey@mips.com> + + * configure.ac: Add header checks for fenv.h and complex.h. + * configure: Regenerate. + +2013-10-31 Edward Smith-Rowland <3dw4rd@verizon.net> + + Implement C++14 digit separators. + * include/include/bits/parse_numbers.h: Change struct _Digit<_Base, '`'> + to struct _Digit<_Base, '\''>. + +2013-10-31 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/20_util/default_delete/48631_neg.cc: Tweak dg-prune. + +2013-10-30 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/29_atomics/atomic/operators/pointer_partial_void.cc: Fix + and enable VERIFY tests. + +2013-10-30 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/shared_ptr (__shared_ptr): Assert non-void pointer. + * include/bits/shared_ptr (default_delete): Likewise. + * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use + default_delete<void>. + * testsuite/20_util/shared_ptr/cons/void_neg.cc: New. + * testsuite/20_util/default_delete/void_neg.cc: New. + * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust line numbers. + * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Likewise. + +2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/58839 + * include/bits/shared_ptr_base.h + (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Only use addressof + when unique_ptr<U,D>::pointer is not a built-in pointer type. + * testsuite/20_util/shared_ptr/cons/58839.cc: New. + * testsuite/20_util/enable_shared_from_this/members/assign.cc: New. + * testsuite/20_util/enable_shared_from_this/members/unique_ptr.cc: New. + +2013-10-29 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/hashtable.cc (__access_protected_ctor): Define and use + new type instead of _Hashtable_ebo_helper. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Adjust line number. + +2013-10-28 Tim Shen <timshen91@gmail.com> + + * regex_executor.tcc: Add comments. + +2013-10-26 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: Remove unnecessary friends. + * include/bits/regex.tcc (__regex_algo_impl<>): Move __get_executor + to here. + * include/bits/regex_executor.h: Remove _DFSExecutor and _BFSExecutor; + they are merged into _Executor. Eliminate quantifier tracking part, so + it's faster. + * include/bits/regex_executor.tcc: Implement _Executor. + * testsuite/28_regex/algorithms/regex_match/ecma/char/ungreedy.cc: New. + * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: Adjust + duplicate testcases. + * testsuite/performance/28_regex/split.h: New. + * testsuite/performance/28_regex/split_bfs.cc: New. + * testsuite/util/testsuite_regex.h: Adjust behavior of two-executors + agreement judger: do not compare match_results when executor return + false. + +2013-10-25 François Dumont <fdumont@gcc.gnu.org> + + * include/debug/formatter.h (__check_singular): Add const on + iterator reference. + * include/debug/functions.h (__check_singular): Likewise. + (__check_singular(const _Safe_iterator<_Ite, _Seq>&)): Delete. + (__check_dereferenceable(const _Ite&)): Add const on iterator + reference. + (__check_dereferenceable(const _Safe_local_iterator<>&)): New. + * include/debug/safe_iterator.h (__check_singular_aux): Review + comment. + * testsuite/23_containers/vector/debug/debug_functions.cc: New. + * testsuite/23_containers/unordered_set/debug/debug_functions.cc: + New. + +2013-10-23 Chris Jefferson <chris@bubblescope.net> + Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/util/testsuite_containergen.h: New. + * testsuite/util/testsuite_iterators.h (test_container<>::val): Add. + * testsuite/25_algorithms/nth_element/random_test.cc: New, use the + above. + * testsuite/25_algorithms/partial_sort/random_test.cc: Likewise. + * testsuite/25_algorithms/partial_sort_copy/random_test.cc: Likewise. + * testsuite/25_algorithms/sort/random_test.cc: Likewise. + +2013-10-23 Jason Merrill <jason@redhat.com> + + * include/bits/hashtable.h (_Hashtable): Force EBO for _Hash_code_base. + +2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58850 + * include/std/chrono (minutes, hours): Change typedefs to uniformly + use int64_t. + * testsuite/20_util/duration/arithmetic/58850.cc: New. + +2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/decimal/pr58815.cc: Fix thinko. + +2013-10-23 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58815 + * include/decimal/decimal (decimal32::operator long long(), + decimal64::operator long long(), decimal128::operator long long()): + Add in c++11 mode per n3407. + * testsuite/decimal/pr58815.cc: New. + +2013-10-22 Edward Smith-Rowland <3dw4rd@verizon.net> + + * include/bits/basic_string.h (operator""s): Remove space between quotes + and literal identifier. + * include/std/chrono (operator""h, operator""min, operator""s, + operator""ms, operator""us, operator""ns): Ditto. + +2013-10-22 Ed Smith-Rowland <3dw4rd@verizon.net> + + Implement N3779 - User-defined Literals for std::complex, + part 2 of UDL for Standard Library Types + * include/std/complex: Add complex literal operators. + * testsuite/26_numerics/complex/literals/types.cc: New. + * testsuite/26_numerics/complex/literals/values.cc: New. + +2013-10-21 Edward Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/58804 + PR libstdc++/58729 + * include/tr2/dynamic_bitset + (__dynamic_bitset_base<_WordT, _Alloc>::_M_are_all_aux, + __dynamic_bitset_base<_WordT, _Alloc>::_M_do_count): + Use __builtin_popcountll() instead of __builtin_popcountl(). + * include/tr2/dynamic_bitset.tcc + (__dynamic_bitset_base<_WordT, _Alloc>::_M_do_find_first, + __dynamic_bitset_base<_WordT, _Alloc>::_M_do_find_next): + Use __builtin_ctzll() instead of __builtin_ctzl(). + +2013-10-20 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: Remove virtual class _Automaton. + * include/bits/regex_automaton.h: Likewise. + * include/bits/regex.tcc: Adjust comment for policy changing. + * include/bits/regex_executor.h: Update comments of complexity. + * include/bits/regex_executor.tcc: Adjust executor choosing + policy. Now DFS executor is the default one. + * testsuite/util/testsuite_regex.h (regex_match_debug, + regex_search_debug): Adjust for policy changing. + +2013-10-20 Chris Jefferson <chris@bubblescope.net> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58800 + * include/bits/stl_algo.h (__unguarded_partition_pivot): Change + __last - 2 to __last - 1. + * testsuite/25_algorithms/nth_element/58800.cc: New + +2013-10-18 Edward Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/58729 + * include/tr2/dynamic_bitset (_M_resize, resize): Use input value + to set bits; (_M_do_left_shift, _M_do_right_shift, _M_do_to_ulong, + _M_do_to_ullong, _M_do_find_first, _M_do_find_next, _M_copy_from_ptr, + operator>>): Move long methods outline to... + * include/tr2/dynamic_bitset.tcc: New. + * include/Makefile.am: Add dynamic_bitset.tcc. + * include/Makefile.in: Add dynamic_bitset.tcc. + * testsuite/tr2/dynamic_bitset/pr58729.cc: New. + +2013-10-18 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_scanner.tcc: (_Scanner<>::_M_scan_normal, + _Scanner<>::_M_eat_escape_ecma, _Scanner<>::_M_eat_escape_posix, + _Scanner<>::_M_eat_escape_awk): Narrow character before finding in maps. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc: + New. + +2013-10-17 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (regex_token_iterator<>::regex_token_iterator): + Fix initialization orders in initialization list and add explicit braces + for potentially ambiguous(actually not) `else` branch to eliminate + warnings. + * include/bits/regex_automaton.h (_NFA<>::_NFA): Likewise. + * include/bits/regex_compiler.h (_CharMatcher<>::_CharMatcher, + _BracketMatcher<>::_BracketMatcher): Likewise. + * include/bits/regex_compiler.tcc (_Compiler<>::_Compiler, + _Compiler<>::_M_atom): Likewise. + * include/bits/regex_executor.h (_Executor<>::_Executor): Likewise. + * include/bits/regex_executor.tcc (_DFSExecutor<>::_M_dfs, + _Executor<>::_M_word_boundry): Likewise. + * include/bits/regex_scanner.tcc (_Scanner<>::_Scanner, + _Scanner<>::_M_eat_class): Likewise. + * include/bits/regex.tcc (__regex_algo_impl<>, + regex_iterator<>::operator++): Likewise, and remove unused typedef. + +2013-10-16 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (regex_token_iterator<>::regex_token_iterator): + Add initialization for _M_has_m1. + * include/bits/regex.tcc (regex_token_iterator<>::operator=): Add return + statment. + +2013-10-15 Diego Novillo <dnovillo@google.com> + + * testsuite/20_util/exchange/1.cc: Add missing function + bodies. + +2013-10-15 Tim Shen <timshen91@gmail.com> + + PR libstdc++/58737 + * include/bits/regex_automaton.h (_Automaton<>::~_Automaton): Fix memory + leak by adding it. + * include/bits/regex_executor.h (_Executor<>::~_Executor): Likewise. + +2013-10-11 H.J. Lu <hongjiu.lu@intel.com> + + * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update. + +2013-10-10 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * testsuite/29_atomics/atomic/cons/49445.cc + (dg-require-atomic-builtins): Add. + +2013-10-09 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/20_util/shared_ptr/cons/58659.cc: Use VERIFY instead of + aborting. + +2013-10-09 Marcus Shawcroft <marcus.shawcroft@arm.com> + + * testsuite/20_util/shared_ptr/cons/58659.cc: Use __builtin_abort(). + +2013-10-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/*: Remove stray semi-colons after function definitions. + +2013-10-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/58659 + * include/bits/shared_ptr_base.h (__shared_count::__shared_count(P,D)): + Delegate to constructor taking allocator. + (__shared_count::_S_create_from_up): Inline into ... + (__shared_count::__shared_count(unique_ptr<Y,D>&&): Here. Use + std::conditional instead of constrained overloads. Allocate memory + using the allocator type that will be used for deallocation. + * testsuite/20_util/shared_ptr/cons/58659.cc: New. + * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust. + +2013-10-08 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_executor.h: Add _TodoList class. + * include/bits/regex_executor.tcc (_BFSExecutor<>::_M_main): Add + _M_match_stack and _M_stack to make everything faster. Break if + _M_stack is empty, to reduce unnecessary idling. + * testsuite/performance/28_regex/split.cc: New. + +2013-10-06 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: (regex_token_iterator<>::regex_token_iterator): + Fix compile error. + * include/bits/regex.tcc: (regex_replace<>): Remove default parameter. + +2013-10-06 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (__regex_algo_impl<>, regex_match<>, + regex_search<>): New abstract function for regex_match and regex_search. + * include/bits/regex.tcc (__regex_algo_impl<>): Implement. + * include/bits/regex_executor.h + (_Executor<>::_M_lookahead, + _DFSExecutor<>::_M_clone, + _BFSExecutor<>::_M_clone): Let _M_clone to choose which executor to + use. + * include/bits/regex_executor.tcc (__get_executor<>): Update the + definition to support __policy. + * testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc: Use + *_debug. + * testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc: Same. + * testsuite/28_regex/algorithms/regex_match/basic/string_01.cc: Same. + * testsuite/28_regex/algorithms/regex_match/basic/string_range_00_03.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/basic/string_range_01_03.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/basic/string_range_02_03.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_bracket_01.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_questionmark.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/extended/string_any.cc: + Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_range_00_03.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_range_01_03.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_range_02_03.cc: Same. + * testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc: + Same. + * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: Same. + * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: Same. + * testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: Same. + * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: Same. + * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: Same. + * testsuite/28_regex/match_results/format.cc: Same. + * testsuite/util/testsuite_regex.h + (regex_match_debug<>, regex_search_debug<>): Implement. + +2013-10-06 Oleg Endo <olegendo@gcc.gnu.org> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58625 + * include/c_global/cmath (signbit): Use __builtin_signbitf and + __builtin_signbitl. + +2013-10-03 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_executor.tcc (_DFSExecutor<>::_M_dfs): Fix wrong + backup variable initialization. + +2013-10-03 John Woolverton <jdwoolverton@gmail.com> + + PR libstdc++/58604 + * include/std/vector: Fix garbled line in HP Copyright. + +2013-10-03 Marc Glisse <marc.glisse@inria.fr> + + * libsupc++/del_op.cc (operator delete): Don't test for 0 before free. + * libsupc++/del_opnt.cc (free): Only declare if freestanding. + (operator delete): Qualify free with std::. + +2013-10-02 Jonathan Wakely <jwakely.gcc@gmail.com> + Daniel Krugler <daniel.kruegler@gmail.com> + + PR libstdc++/58569 + * include/std/functional (function::_CheckResult): Move to namespace + scope and rename to __check_func_return_type. + * testsuite/20_util/function/58569.cc: New. + +2013-10-02 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/58594 + * include/bits/shared_ptr_base.h + (_Sp_counted_ptr_inplace::_M_get_deleter()): Cast away cv-quals. + * testsuite/20_util/shared_ptr/creation/58594.cc: New. + +2013-10-02 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_compiler.h + (_BracketMatcher<>::_M_add_equivalence_class): Implement it correctly. + * include/bits/regex_compiler.tcc (_BracketMatcher<>::operator()): + Add _M_equiv_set support. + * testsuite/28_regex/algorithms/regex_match/extended/ + cstring_bracket_01.cc: Add new "[[=a=]]" testcase. + +2013-10-01 Tim Shen <timshen91@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Change "is not implemented" to + "is not correctly implemented". + +2013-10-01 Tim Shen <timshen91@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Update regex status. + * include/bits/regex.h (match_results<>::begin, + match_results<>::cbegin, match_results<>::end, match_results<>::cend): + [28.10.3.13], [28.10.3.14] Always iterate the range [0, size()-2). + +2013-10-01 François Dumont <fdumont@gcc.gnu.org> + + * include/parallel/algobase.h (mismatch, equal): Provide parallel + version for N3671 overloads. + +2013-10-01 Paul Pluzhnikov <ppluzhnikov@google.com> + + * src/c++11/snprintf_lite.cc: Add missing + _GLIBCXX_{BEGIN,END}_NAMESPACE_VERSION + +2013-10-01 Joern Rennecke <joern.rennecke@embecosm.com> + + * acinclude.m4 (GLIBCXX_ENABLE_SJLJ_EXCEPTIONS): Also check for + _Unwind_SjLj_Register when deciding if to set enable_sjlj_exceptions. + * configure: Regenerate. + +2013-10-01 Tim Shen <timshen91@gmail.com> + + PR libstdc++/58576 + * include/bits/regex_automaton.tcc (_NFA<>::_M_eliminate_dummy) + (_StateSeq<>::_M_clone): Add _S_opcode_subexpr_lookahead branch. + * testsuite/28_regex/algorithms/regex_match/ecma/char/58576.cc: New. + +2013-09-30 Paolo Carlini <paolo.carlini@oracle.com> + + * include/parallel/algo.h (__find_switch): Use __binder2nd. + +2013-09-30 Chris Jefferson <chris@bubblescope.net> + + PR libstdc++/58437 + * include/bits/stl_algo.h (__move_median_first): Rename to + __move_median_to_first, change to take an addition argument. + (__unguarded_partition_pivot): Adjust. + * testsuite/performance/25_algorithms/sort.cc: New. + * testsuite/performance/25_algorithms/sort_heap.cc: Likewise. + * testsuite/performance/25_algorithms/stable_sort.cc: Likewise. + +2013-09-28 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/stl_algo.h (remove_copy, remove_copy_if): Declare + inline. + (rotate_copy, stable_partition, partial_sort_copy): Likewise. + (lower_bound, upper_bound, equal_range, inplace_merge): Likewise. + (includes, next_permutation, prev_permutation): Likewise. + (replace_copy, replace_copy_if, is_sorted_until): Likewise. + (minmax_element, is_permutation, adjacent_find): Likewise. + (count, count_if, search, search_n, merge): Likewise. + (set_intersection, set_difference): Likewise. + (set_symmetric_difference, min_element, max_element): Likewise. + * include/bits/stl_algobase.h (lower_bound): Likewise. + (lexicographical_compare, mismatch): Likewise. + +2013-09-28 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_scanner.tcc (_Scanner<>::_M_eat_escape_posix): + Let ordinary char escaping in POSIX be valid. + * testsuite/28_regex/basic_regex/ctors/basic/raw_string.cc: Test this + change. + +2013-09-27 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/predefined_ops.h: New. + * include/bits/stl_heap.h: Include <bits/predefined_ops.h>. + (__is_heap_until, __push_heap, __adjust_heap, __pop_heap): Remove + algo duplication. + (__is_heap): Adapt. + (__make_heap): New. + (make_heap): Adapt to use latter. + (__sort_heap): New. + (sort_heap): Adapt to use latter. + * include/bits/algobase.h: Include <bits/predefined_ops.h>. + (__lexicographical_compare_impl): New. + (__lexicographical_compare<false>::__lc): Adapt to use latter. + (lexicographical_compare): Likewise. + (__lower_bound): New. + (lower_bound): Adapt to use latter. + (equal): Use _GLIBCXX_STD_A::equal in N3671 overloads. + (__mismatch): New. + (mismatch): Use latter. + * include/bits/algo.h: Include <bits/predefined_ops.h>. Remove + <functional> include. + (__move_median_first, __find, __find_if, __find_if_not): Remove + algo duplication. + (__find_end): Likewise. + (__search_n): Rename into ... + (__search_n_aux): ... this. + (__search_n): Renew, use latter. + (search_n): Use latter. + (__search): New. + (search): Use latter. + (__find_end): Likewise. + (__remove_copy_if): New. + (remove_copy): Use latter. + (__adjacent_find): New. + (adjacent_find): Use latter. + (__unique): New. + (unique): Use latter. + (__unique_copy): Remove algo duplication. + (__stable_partition): New. + (stable_partition): Use latter. + (__heap_select): Remove algo duplication, use __make_heap. + (__partial_sort): New, use latter. + (partial_sort): Use latter. + (__partial_sort_copy): New. + (partial_sort_copy): Use latter. + (__unguarded_linear_insert, __insertion_sort): Remove algo + duplication. + (__unguarded_insertion_sort, __final_insertion_sort): Likewise. + (__unguarded_partition, __unguarded_partition_pivot): Likewise. + (__partial_sort): New. + (partial_sort): Use latter. + (__sort): New. + (sort): Use latter. + (lower_bound): Use __lower_bound. + (__upper_bound): New. + (upper_bound): Use latter. + (__equal_range): New. + (equal_range): Use latter. + (__move_merge_adaptive, __move_merge_adaptive_backward): Remove + algo duplication. + (__merge_adaptive, __merge_without_buffer): Likewise. + (__inplace_merge): New. + (inplace_merge): Use latter. + (__move_merge, __merge_sort_loop, __chunk_insertion_sort): Remove + algo duplication. + (__merge_sort_with_buffer, __stable_sort_adaptive): Likewise. + (__inplace_stable_sort): Likewise. + (__include): New. + (includes): Use latter. + (__next_permutation): New. + (next_permutation): Use latter. + (__prev_permutation): New. + (prev_permutation): Use latter. + (__replace_copy_if): New. + (replace_copy): Use latter. + (__is_sorted_until): New. + (is_sorted_unitl): Use latter. + (__minmax_element): New. + (minmax_element): Use latter. + (__is_permutation): New. + (is_permutation): Use latter. + (__adjacent_find): New. + (adjacent_find): Use latter. + (__count_if): New. + (count): Use latter. + (count_if): Likewise. + (__merge): New. + (merge): Use latter. + (__stable_sort): New. + (stable_sort): Use latter. + (__set_union): New. + (set_union): Use latter. + (__set_intersection): New. + (set_intersection): Use latter. + (__set_difference): New. + (set_difference): Use latter. + (__set_symmetric_difference): New. + (set_symmetric_difference): Use latter. + (__min_element): New. + (min_element): Use latter. + (__max_element): New. + (max_element): Use latter. + * include/Makefile.am: Add predefined_ops.h. + * include/Makefile.in: Regenerate. + * include/parallel/algobase.h (equal, mismatch): Add overloads + from N3671. + * testsuite/25_algorithms/is_permutation/vectorbool.cc: New. + * testsuite/25_algorithms/adjacent_find/vectorbool.cc: Likewise. + * testsuite/25_algorithms/find/vectorbool.cc: Likewise. + * testsuite/25_algorithms/find_if/vectorbool.cc: Likewise. + * testsuite/25_algorithms/find_first_of/vectorbool.cc: Likewise. + * testsuite/25_algorithms/heap/vectorbool.cc: Likewise. + * testsuite/25_algorithms/find_end/vectorbool.cc: Likewise. + * testsuite/25_algorithms/find_if_not/vectorbool.cc: Likewise. + +2013-09-27 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/57465 + * include/std/functional + (_Function_base::_Base_manager::_M_not_empty_function): Fix overload + for pointers. + * testsuite/20_util/function/cons/57465.cc: New. + +2013-09-26 Tim Shen <timshen91@gmail.com> + + * regex_error.h: Remove _S_error_last to follow the standard. + * regex_scanner.tcc: + (_Scanner<_FwdIter>::_M_scan_in_brace): Change error_brace to + error_badbrace. + (_Scanner<>::_M_eat_escape_posix): Extended doesn't support + back-reference. + * testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc: + Move here from ../../extended. + * testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc: + Likewise. + +2013-09-25 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/forward_list.h (_Fwd_list_node_base::_M_transfer_after): + Mark as noexcept. + (_Fwd_list_iterator) [_Fwd_list_iterator, operator*, operator->, + operator++, operator==, operator!=, _M_next]: Likewise. + (_Fwd_list_const_iterator) [_Fwd_list_const_iterator, operator*, + operator->, operator++, operator==, operator!=, _M_next]: Likewise. + (operator==(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&), + operator!=(const _Fwd_list_iterator&, const _Fwd_list_const_iterator&)): + Likewise. + * include/bits/hashtable_policy.h (_Hash_node_base::_Hash_node_base, + _Hash_node::_M_next, _Node_iterator_base::_Node_iterator_base, + _Node_iterator_base::_M_incr, operator==(const _Node_iterator_base&, + const _Node_iterator_base&), operator!=(const _Node_iterator_base&, + const _Node_iterator_base&)): Likewise. + (_Node_iterator) [_Node_iterator, operator*, operator->, operator++]: + Likewise. + (_Node_const_iterator) [_Node_const_iterator, operator*, operator->, + operator++]: Likewise. + * include/debug/safe_iterator.h (_Safe_iterator) [_Safe_iterator, + operator=, operator*, operator->, operator++, operator--, operator[], + operator+=, operator+, operator-=, operator-, base, operator _Iterator]: + Likewise. + (operator==(const _Safe_iterator&, const _Safe_iterator&), + operator!=(const _Safe_iterator&, const _Safe_iterator&), + operator<(const _Safe_iterator&, const _Safe_iterator&), + operator<=(const _Safe_iterator&, const _Safe_iterator&), + operator>(const _Safe_iterator&, const _Safe_iterator&), + operator>=(const _Safe_iterator&, const _Safe_iterator&), + operator-(const _Safe_iterator&, const _Safe_iterator&), + operator+(difference_type, const _Safe_iterator&)): Likewise. + * include/profile/iterator_tracker.h (__iterator_tracker) + [__iterator_tracker, base, operator _Iterator, operator->, operator++, + operator--, operator=, operator*, operator[], operator+=, operator+, + operator-=, operator-]: Likewise. + (operator==(const __iterator_tracker&, const __iterator_tracker&), + operator!=(const __iterator_tracker&, const __iterator_tracker&), + operator<(const __iterator_tracker&, const __iterator_tracker&), + operator<=(const __iterator_tracker&, const __iterator_tracker&), + operator>(const __iterator_tracker&, const __iterator_tracker&), + operator>=(const __iterator_tracker&, const __iterator_tracker&), + operator-(const __iterator_tracker&, const __iterator_tracker&), + operator+(difference_type, const __iterator_tracker&)): Likewise. + +2013-09-24 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + PR libstdc++/56166 + * include/bits/basic_string.h (basic_string) + [basic_string(basic_string&&)]: Make the noexcept conditional. + [operator=(basic_string&&), assign(basic_string&&)]: Link to PR 58265. + [begin(), end(), rbegin(), rend(), clear]: Remove noexcept. + [pop_back]: Comment on the lack of noexcept. + * include/debug/string (basic_string) [basic_string(const _Allocator&), + basic_string(basic_string&&), begin(), end(), rbegin(), rend(), clear, + operator[](size_type), pop_back]: Comment out noexcept, until vstring + replaces basic_string. + +2013-09-24 Tim Shen <timshen91@gmail.com> + + * include/Makefile.am: Add regex.tcc. + * include/Makefile.in: Regenerate. + * include/bits/regex.h: Remove definitions to regex.tcc. + * include/bits/regex.tcc: New. + (match_results::format, regex_replace): Implement; + * include/bits/regex_compiler.h: Move _M_flags to the top of class + member list, because other members' initialization depend on it. + * include/bits/regex_compiler.tcc + (_Compiler<>::_Compiler): Adjust member initializations. + (_Compiler<>::_M_quantifier): Fix ungreedy interval quantifier. + * include/bits/regex_executor.h: Remove _RegexT from _*Executor classes. + In the future, all regex classes may refactor to *Impl style. + * include/bits/regex_executor.tcc (_Executor::_M_set_results): + Merge identical code from _*Executor classes. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc (fake_match<>): Adjust the hacking-style testcase + caller for new __get_executors interface. + * testsuite/28_regex/algorithms/regex_replace/char/basic_replace.cc: + New. + * testsuite/28_regex/match_results/format.cc: New. + * testsuite/28_regex/traits/char/lookup_collatename.cc: Remove digraph + testcase. + * testsuite/28_regex/traits/wchar_t/lookup_collatename.cc: Likewise. + +2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com> + + * src/c++11/snprintf_lite.cc (__concat_size_t): Use + unsigned long long conditionally. + +2013-09-23 Paul Pluzhnikov <ppluzhnikov@google.com> + + * src/c++11/snprintf_lite.cc (__concat_size_t): Use only + std::__int_to_char<unsigned long long>() + +2013-09-21 Paul Pluzhnikov <ppluzhnikov@google.com> + + * include/bits/functexcept.h (__throw_out_of_range_fmt): New. + * src/c++11/functexcept.cc (__throw_out_of_range_fmt): New. + * src/c++11/snprintf_lite.cc: New. + * src/c++11/Makefile.am: Add snprintf_lite.cc. + * src/c++11/Makefile.in: Regenerate. + * config/abi/pre/gnu.ver: Add _ZSt24__throw_out_of_range_fmtPKcz. + * include/std/array (at): Use __throw_out_of_range_fmt. + * include/debug/array (at): Likewise. + * include/profile/array (at): Likewise. + * include/std/bitset (_M_check_initial_position, _M_check): New. + (bitset::bitset): Use _M_check_initial_position. + (set, reset, flip, test): Use _M_check. + * include/ext/vstring.h (_M_check, at): Use __throw_out_of_range_fmt. + * include/bits/stl_vector.h (_M_range_check): Likewise. + * include/bits/stl_bvector.h (_M_range_check): Likewise. + * include/bits/stl_deque.h (_M_range_check): Likewise. + * include/bits/basic_string.h (_M_check, at): Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/array/tuple_interface/tuple_element_neg.cc: Likewise. + * testsuite/23_containers/array/tuple_interface/tuple_element_debug_neg.cc: + Likewise. + * testsuite/23_containers/array/tuple_interface/get_neg.cc: Likewise. + * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc: Likewise. + * testsuite/util/exception/safety.h (generate): Use __throw_out_of_range_fmt. + +2013-09-20 Jakub Jelinek <jakub@redhat.com> + + PR testsuite/57605 + * testsuite/lib/libstdc++.exp (libstdc++_init): Prepend + -fdiagnostics-color=never to cxxflags. + +2013-09-20 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/allocator.h (__alloc_swap::_S_do_it, + __shrink_to_fit_aux::_S_do_it): Mark as noexcept. + * include/bits/basic_string.h (basic_string::_Rep) [_S_empty_rep, + _M_is_leaked, _M_is_shared, _M_set_leaked, _M_set_sharable, + _M_set_length_and_sharable, _M_dispose]: Likewise. + (basic_string::_Alloc_hider::_Alloc_hider): Likewise. + (basic_string) [_M_data, _M_rep, _M_ibegin, _M_iend, _M_limit, + _M_disjunct, _M_copy, _M_move, _M_assign, _S_copy_chars, _S_compare, + _S_empty_rep, shrink_to_fit, operator[] const, front const, back const]: + Likewise. + [clear]: Link to PR 56166. + [swap]: Link to PR 58265. + * include/bits/stl_deque.h (_Deque_iterator) [_S_buffer_size, + _Deque_iterator, _M_const_cast, operator*, operator->, operator++, + operator--, operator+=, operator+, operator-=, operator-, operator[], + _M_set_node]: Mark as noexcept. + (operator==(const _Deque_iterator&, const _Deque_iterator&), + operator!=(const _Deque_iterator&, const _Deque_iterator&), + operator<(const _Deque_iterator&, const _Deque_iterator&), + operator>(const _Deque_iterator&, const _Deque_iterator&), + operator<=(const _Deque_iterator&, const _Deque_iterator&), + operator>=(const _Deque_iterator&, const _Deque_iterator&), + operator-(const _Deque_iterator&, const _Deque_iterator&), + operator+(ptrdiff_t, const _Deque_iterator&)): Likewise. + (_Deque_base) [_Deque_base(const allocator_type&)]: Add missing call to + _M_initialize_map. + [~_Deque_base, _M_deallocate_node, _M_deallocate_map, _M_destroy_nodes]: + Mark as noexcept. + (_Deque_base::_Deque_impl) [_Deque_impl(const _Tp_alloc_type&), + _Deque_impl(_Tp_alloc_type&&)]: Likewise. + (deque) [_S_buffer_size, operator=(deque&&), shrink_to_fit, operator[], + front, back, pop_front, pop_back, swap]: Likewise. + [deque(), deque(const allocator_type&)]: Merge. + * include/debug/deque (deque) [operator=(deque&&), shrink_to_fit, + operator[], front, back, pop_front, pop_back, swap]: Mark as noexcept. + * include/profile/deque (deque) [operator=(deque&&), operator[], front, + back, pop_front, pop_back, swap]: Likewise. + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: + Adjust line number. + * testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + +2013-09-20 Alan Modra <amodra@gmail.com> + + * configure: Regenerate. + +2013-09-19 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/stl_tree.h (_Rb_tree_node_base) [_S_minimum, _S_maximum]: + Mark as noexcept. + (_Rb_tree_iterator) [_Rb_tree_iterator, operator*, operator->, + operator++, operator--, operator==, operator!=]: Likewise. + (_Rb_tree_const_iterator) [_Rb_tree_const_iterator, _M_const_cast, + operator*, operator->, operator++, operator--, operator==, operator!=]: + Likewise. + (operator==(const _Rb_tree_iterator&, const _Rb_tree_const_iterator&), + operator!=(const _Rb_tree_iterator&, const _Rb_tree_const_iterator&)): + Likewise. + (_Rb_tree) [_M_put_node, _M_destroy_node, _M_root, _M_leftmost, + _M_rightmost, _M_begin, _M_end, _S_left, _S_right, _S_minimum, + _S_maximum]: Likewise. + * include/debug/string (basic_string) [basic_string(const _Allocator&), + shrink_to_fit, operator[], pop_back]: Likewise. + * include/ext/vstring.h (__versa_string) [_M_limit, _M_disjunct, + _M_ibegin, _M_iend, __versa_string(const _Alloc&), + operator=(__versa_string&&), shrink_to_fit, operator[], front, + back, assign(__versa_string&&), swap]: Likewise. + (__versa_string) [__versa_string(), __versa_string(const _Alloc&)]: + Merge. + +2013-09-18 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/stl_iterator.h (__normal_iterator) [__normal_iterator, + _M_const_cast, operator*, operator->, operator++, operator--, + operator[], operator+=, operator+, operator-=, operator-, base]: + Mark as noexcept. + (operator==(const __normal_iterator&, const __normal_iterator&), + operator!=(const __normal_iterator&, const __normal_iterator&), + operator<(const __normal_iterator&, const __normal_iterator&), + operator>(const __normal_iterator&, const __normal_iterator&), + operator<=(const __normal_iterator&, const __normal_iterator&), + operator>=(const __normal_iterator&, const __normal_iterator&), + operator-(const __normal_iterator&, const __normal_iterator&), + operator+(difference_type, const __normal_iterator&)): Likewise. + * include/bits/stl_list.h (list) [splice, _M_check_equal_allocators]: + Likewise. + (list::_M_check_equal_allocators): Abort instead of throwing. + * include/debug/array (array) [operator[], front, back]: Mark as + noexcept. + * include/profile/array (array) [operator[], front, back]: Likewise. + * include/std/array (array) [operator[], front, back]: Likewise. + * include/debug/list (list::splice): Likewise. + * include/profile/list (list::splice): Likewise. + * testsuite/23_containers/list/operations/5.cc: Remove file. + * testsuite/23_containers/list/operations/5.h: Likewise. + +2013-09-18 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: Add friend classes. + (match_results<>::position, regex_iterator<>::operator++): + Implement position specification in regex_iterator. + (regex_match<>, regex_search<>): + Move match_results initializations to these function. Remove `todo`. + * include/bits/regex_compiler.tcc: + (_Compiler<>::_M_quantifier): Fix greedy/ungreedy of interval matching. + * include/bits/regex_constants.h: + Fix indentation. Change match_flag_type to enum type. + * include/bits/regex_executor.h: + Merge identical code to the base class _Executor. + Support flags in regex_constants. + * include/bits/regex_executor.tcc: Likewise. + * include/bits/regex_scanner.h: Add comments. + * include/bits/regex_scanner.tcc: Same. + * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: + Add a testcase. + * testsuite/28_regex/algorithms/regex_search/ecma/flags.cc: New. + * testsuite/28_regex/iterators/regex_iterator/char/ + string_position_01.cc: Remove `xfail`. + * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc: + Remove `xfail` and make the case really work. + +2013-09-18 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/performance/25_algorithms/search_n.cc: Fix typo. + +2013-09-18 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/list.tcc (_List_base::_M_clear, list::erase): Mark as + noexcept. + * include/bits/stl_list.h (_List_iterator) [_List_iterator, + _M_const_cast, operator*, operator->, operator++, operator--, + operator==, operator!=]: Likewise. + (_List_const_iterator) [_List_const_iterator, _M_const_cast, operator*, + operator->, operator++, operator--, operator==, operator!=]: Likewise. + (operator==(const _List_iterator&, const _List_const_iterator&), + operator!=(const _List_iterator&, const _List_const_iterator&)): + Likewise. + (_List_impl) [_List_impl(const _Node_alloc_type&), + _List_impl(_Node_alloc_type&&)]: Likewise. + (_List_base) [_M_put_node, _List_base(const _Node_alloc_type&), + _List_base(_List_base&&), _M_clear, _M_init]: Likewise. + (list) [list(), list(const allocator_type&)]: Merge. + (list) [list(const allocator_type&), front, back, pop_front, pop_back, + erase, _M_erase]: Mark as noexcept. + * include/debug/list (list) [list(const _Allocator&), front, back, + pop_front, pop_back, _M_erase, erase]: Likewise. + * include/profile/list (list) [list(const _Allocator&), front, back, + pop_front, pop_back, erase]: Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Adjust line number. + * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: + Likewise. + +2013-09-17 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/58338 + * include/bits/stl_vector.h (vector::vector(), + vector::vector(const allocator_type&)): Merge. + (_Vector_impl::_Vector_impl(_Tp_alloc_type const&), + _Vector_impl::_Vector_impl(_Tp_alloc_type&&), + _Vector_impl::_M_swap_data, + _Vector_base::_Vector_base(const allocator_type&), + _Vector_base::_Vector_base(allocator_type&&), + _Vector_base::_Vector_base(_Vector_base&&), _Vector_base::~_Vector_base, + vector::vector(const allocator_type&), vector::operator[], + vector::operator[] const, vector::front, vector::front const, + vector::back, vector::back const, vector::pop_back, + vector::_M_erase_at_end): Mark as noexcept. + * include/debug/vector (vector::vector(const _Allocator&), + vector::operator[], vector::operator[] const, vector::front, + vector::front const, vector::back, vector::back const, vector::pop_back, + _M_requires_reallocation, _M_update_guaranteed_capacity, + _M_invalidate_after_nth): Mark as noexcept. + * include/profile/vector (vector::vector(const _Allocator&), + vector::operator[], vector::operator[] const, vector::front, + vector::front const, vector::back, vector::back const): Mark as + noexcept. + (vector::vector(vector&&, const _Allocator&)): Remove wrong noexcept. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Adjust line number. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-09-14 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (regex_match<>, regex_search<>): + Change regex_executor caller. Now use their return value instead + of checking __m[0].matched to find out if it's successful. + (regex_search<>): Move the search logic to regex_executor. + * include/bits/regex_automaton.h: Add some new _Opcode. Refactor + _NFA::_M_insert_*. + * include/bits/regex_automaton.tcc: Add DEBUG dump for new + _Opcode. Refactor _NFA::_M_insert_*. + * include/bits/regex_compiler.h (_Compiler<>::_M_get_nfa): + Use make_shared instead of construct by hand. + * include/bits/regex_compiler.tcc: Implement _Compiler<>::_M_assertion. + * include/bits/regex_constants.h: Fix indentation and line breaking. + * include/bits/regex_executor.h: Add _ResultsEntry to support + greedy/ungreedy mode. Move regex_search logic here. + * include/bits/regex_executor.tcc: Implement assertions and + greedy/ungreedy matching. + * include/bits/regex_scanner.h: Add a new token _S_token_ungreedy. + * include/bits/regex_scanner.tcc: Parse a new token _S_token_ungreedy. + * testsuite/28_regex/algorithms/regex_search/ecma/assertion.cc: New. + * testsuite/28_regex/algorithms/regex_search/ecma/greedy.cc: New. + * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: + Fix comment. + +2013-09-13 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58415 + * include/ext/sso_string_base.h (__sso_string_base<>:: + __sso_string_base(__sso_string_base&&)): Fix thinkos about + _M_length vs _M_set_length. + * testsuite/ext/vstring/cons/58415-1.cc: New. + * testsuite/ext/vstring/cons/58415-2.cc: Likewise. + +2013-09-12 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58403 + * include/bits/stl_iterator.h (__normal_iterator<>::operator[], + operator+=, operator+, operator-=, operator-): Take the argument + by value. + * testsuite/24_iterators/normal_iterator/58403.cc: New. + +2013-09-11 Mitsuru Kariya <kariya_mitsuru@hotmail.com> + Chris Jefferson <chris@bubblescope.net> + + PR libstdc++/58358 + * include/bits/stl_algo.h (search_n): Fix to guarantee a number + of comparisons <= number of elements in the range. + * testsuite/25_algorithms/search_n/58358.cc: New. + * testsuite/25_algorithms/search_n/iterator.cc: Extend. + +2013-09-10 Ed Smith-Rowland <3dw4rd@verizon.net> + + * testsuite/28_regex/traits/wchar_t/value.cc: Change template args + from char to wchar_t, literals from 'x' to L'x'. + +2013-09-10 Kai Tietz <ktietz@redhat.com> + + PR libstdc++/54314 + * config/abi/pre/gnu-versioned-namespace.ver: Add thunk _ZTv0_n12_NS* + like in gnu.ver. + +2013-09-07 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58341 + * include/bits/stl_algobase.h (copy_backward): Fix documentation + per DR 1206. + +2013-09-05 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_automaton.h: Add dummy node type. Rewrite + _StateSeq. + * include/bits/regex_automaton.tcc: Implement them. + * include/bits/regex_compiler.h: Rewrite _Compiler to use new + _StateSeq interfaces. + * include/bits/regex_compiler.tcc: Implement them. + * include/bits/regex_scanner.h: Add word boundry assertion token. + * include/bits/regex_scanner.tcc (_Scanner<>::_M_eat_escape_ecma): + Support word boundry. + * testsuite/28_regex/algorithms/regex_match/basic/ + string_range_02_03.cc: Remove "xfail". + * testsuite/28_regex/algorithms/regex_match/extended/cstring_plus.cc: + Likewise. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_range_02_03.cc: Likewise. + * testsuite/28_regex/algorithms/regex_match/extended/ + cstring_questionmark.cc: Remove xfail and get correct length of + c-string. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_range_00_03.cc: Likewise. + * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc: + New. + * testsuite/28_regex/algorithms/regex_match/extended/cstring_range.cc: + New. + * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_02.cc: New. + +2013-09-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58302 + * include/bits/random.tcc (negative_binomial_distribution<>:: + operator()(_UniformRandomNumberGenerator&, const param_type&)): + Fix typo in template argument. + * testsuite/26_numerics/random/negative_binomial_distribution/ + operators/58302.cc: New. + +2013-09-02 Tim Shen <timshen91@gmail.com> + + * regex_automaton.h: Rearrange _NFA's layout. + * include/bits/regex_compiler.h: Add _AnyMatcher and _CharMatcher. + Rearrange _BracketMatcher's layout. + (_BracketMatcher<>::_M_add_char): Use set instead of vector for + _M_char_set. + (_BracketMatcher<>::_M_add_collating_element): Likewise. + (_BracketMatcher<>::_M_make_range): Likewise. + * include/bits/regex_compiler.tcc (_Compiler<>::_M_atom): Use + appropriate constructors of matchers above. + * testsuite/28_regex/algorithms/regex_match/ecma/char/anymatcher.cc: + New. + * testsuite/28_regex/algorithms/regex_match/ecma/char/backref.cc: New. + * testsuite/28_regex/algorithms/regex_match/ecma/char/empty_range.cc: + New. + * testsuite/28_regex/algorithms/regex_match/ecma/char/emptygroup.cc: + New. + * testsuite/28_regex/algorithms/regex_match/ecma/char/hex.cc: New. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/anymatcher.cc: + New. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/hex.cc: New. + +2013-08-30 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/58148 + * include/debug/functions.h (__foreign_iterator_aux4): Use + sequence const_pointer as common type to compare pointers. Add a + fallback overload in case pointers cannot be cast to sequence + const_pointer. + * testsuite/23_containers/vector/modifiers/insert/58148.cc: New. + +2013-08-30 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/58191 + * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add + __gnu_debug::__base calls on iterators passed to internal debug + check. + (__glibcxx_check_partitioned_lower_pred): Likewise. + (__glibcxx_check_partitioned_upper): Likewise. + (__glibcxx_check_partitioned_upper_pred): Likewise. + (__glibcxx_check_sorted): Likewise. + (__glibcxx_check_sorted_pred): Likewise. + (__glibcxx_check_sorted_set): Likewise. + (__glibcxx_check_sorted_set_pred): Likewise. + * include/debug/functions.h (__check_partitioned_lower): + Remove code to detect safe iterators. + (__check_partitioned_upper): Likewise. + (__check_sorted): Likewise. + +2013-08-29 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (basic_regex<>::assign): Don't lose _M_traits. + (regex_iterator<>::regex_iterator): Return nullptr when regex_search + failed. + (regex_token_iterator<>::_M_end_of_seq): Should be defined true when + _M_result is(not isn't) nullptr. + * include/bits/regex_compiler.h: Store _Compiler::_M_traits by reference + instead of by value. + * include/bits/regex_executor.h (_DFSExecutor<>::_DFSExecutor): Add + _M_traits to _DFSExecutor. + * include/bits/regex_executor.tcc (__get_executor<>): Pass traits to + _DFSExecutor too. + * testsuite/28_regex/algorithms/regex_match/extended/wstring_locale.cc: + New. + * testsuite/28_regex/iterators/regex_token_iterator/wchar_t/ + wstring_02.cc: New. + +2013-08-26 Tim Shen <timshen91@gmail.com> + + * include/Makefile.am: Add regex_scanner.{h,tcc}. + * include/Makefile.in: Regenerate. + * include/bits/regex.h (match_search): Handle the `__first == __last` + situation correctly. + * include/bits/regex_compiler.h: Move _Scanner... + * include/bits/regex_scanner.h: ...to here. New. + * include/bits/regex_compiler.tcc: Move _Scanner... + * include/bits/regex_scanner.tcc: ...to here, too. New. + * include/bits/regex_executor.tcc: Use value instead of reference for + submatch. + * include/std/regex: Add regex_scanner.h + * testsuite/28_regex/algorithms/regex_match/awk/cstring_01.cc: New. + * testsuite/28_regex/algorithms/regex_match/basic/empty_range.cc: New. + * testsuite/28_regex/algorithms/regex_match/ecma/cstring_hex.cc: New. + * testsuite/28_regex/algorithms/regex_match/ecma/empty_range.cc: New. + * testsuite/28_regex/algorithms/regex_search/ecma/string_01.cc: New. + +2013-08-22 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: Replace 8 spaces in indentation with a tab. + * include/bits/regex_automaton.h: Same. + * include/bits/regex_automaton.tcc: Same. + * include/bits/regex_compiler.h: Same. + * include/bits/regex_compiler.tcc: Same. + * include/bits/regex_constants.h: Same. + * include/bits/regex_executor.h: Same. + * include/bits/regex_executor.tcc: Same. + +2013-08-22 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h: Executor caller. + * include/bits/regex_executor.h: Fix empty grouping problem. + * include/bits/regex_executor.tcc: Same. + * testsuite/28_regex/algorithms/regex_match/ecma/cstring_emptygroup.cc: + New. + +2013-08-20 Phil Muldoon <pmuldoon@redhat.com> + + PR libstdc++/53477 + http://sourceware.org/bugzilla/show_bug.cgi?id=15195 + + * python/libstdcxx/v6/printers.py (Printer.__call__): If a value + is a reference, fetch referenced value. + (RxPrinter.invoke): Ditto. + * testsuite/libstdc++-prettyprinters/cxx11.cc (main): Add -O0 + flag. Add referenced value tests. + +2013-08-20 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_constants.h: Add underlying `unsigned int` for + enum syntax_option_type. + +2013-08-18 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_automaton.h: _S_opcode_backref. + * include/bits/regex_automaton.tcc: Backref automaton support. + * include/bits/regex_compiler.tcc: Parsing support. + * include/bits/regex_executor.h: Add _M_traits for _DFSExecutor. + * include/bits/regex_executor.tcc: Add _S_opcode_backref support. + * testsuite/28_regex/algorithms/regex_match/ecma/string_backref.cc: New. + +2013-08-16 Tim Shen <timshen91@gmail.com> + + * include/bits/regex.h (regex_traits<>::transform_primary): + Avoid past-the-end dereferences. + +2013-08-14 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58163 + * include/bits/basic_string.h (basic_string<>::operator[]): Fix + _GLIBCXX_DEBUG_PEDASSERT check vs C++11. + * include/ext/vstring.h: Likewise. + * testsuite/21_strings/basic_string/element_access/char/58163.cc: + New. + * testsuite/21_strings/basic_string/element_access/wchar_t/58163.cc: + Likewise. + * testsuite/ext/vstring/element_access/char/58163.cc: Likewise. + * testsuite/ext/vstring/element_access/wchar_t/58163.cc: Likewise. + +2013-08-14 Uros Bizjak <ubizjak@gmail.com> + + * src/c++98/compatibility.cc (_ZTIe): Use + reinterpret_cast<const cast *> to avoid -Wcast-qual warnings. + (_ZTIPe): Ditto. + (ZTIPKe): Ditto. + +2013-08-09 Tim Shen <timshen91@gmail.com> + + * include/bits/regex_constants.h: Change syntax_option_type to enum + type. + +2013-08-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * include/bits/regex.h: Replace _A, _B, _C, _R by _Ap, _Bp, _Cp, _Rp. + +2013-08-08 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_Hashtable_alloc): New. + (_ReuseOrAllocNode, _AllocNode): Adapt to use latter rather than + _Hashtable. + (_Before_begin<>): Remove. + * include/bits/hashtable.h (_Hashtable): Inherit from + _Hashtable_alloc and adapt. Restore _M_before_begin field. + * src/c++11/hashtable_c++0x.cc: Add ext/alloc_traits.h include. + * python/libstdcxx/v6/printers.py (StdHashtableIterator): Adapt + access to hashtable before begin. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Adapt dg-error line number. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Likewise. + +2013-08-07 Tim Shen <timshen91@gmail.com> + + * include/Makefile.am: Adjust to new files. + * include/Makefile.in: Regenerate. + * include/bits/regex.h: Adjust to new interfaces. + * include/bits/regex_automaton.h: New. + * include/bits/regex_automaton.tcc: New. + * include/bits/regex_compiler.h: Adjust to new files. + * include/bits/regex_compiler.tcc: New. + * include/bits/regex_constants.h: Tail spaces. + * include/bits/regex_error.h: Likewise. + * include/bits/regex_executor.h: New. + * include/bits/regex_executor.tcc: New. + * include/std/regex: Adjust to new files. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc: Adjust to new interfaces. + +2013-08-07 Paolo Carlini <paolo.carlini@oracle.com> + + * include/ext/atomicity.h: Add #pragma GCC system_header. + +2013-08-07 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58098 + * include/bits/random.h (cauchy_distribution<>::min, + extreme_value_distribution<>::min, normal_distribution<>::min, + student_t_distribution<>::min): Fix. + * include/ext/random (normal_mv_distribution<>::min): Likewise. + * testsuite/26_numerics/random/cauchy_distribution/cons/parms.cc: + Adjust. + testsuite/26_numerics/random/cauchy_distribution/cons/default.cc: + Likewise. + * testsuite/26_numerics/random/extreme_value_distribution/cons/ + parms.cc: Likewise. + testsuite/26_numerics/random/extreme_value_distribution/cons/ + default.cc: Likewise. + * testsuite/26_numerics/random/normal_distribution/cons/parms.cc: + Likewise. + * testsuite/26_numerics/random/normal_distribution/cons/default.cc: + Likewise. + * testsuite/26_numerics/random/student_t_distribution/cons/parms.cc: + Likewise. + * testsuite/26_numerics/random/student_t_distribution/cons/default.cc: + Likewise. + * testsuite/ext/random/normal_mv_distribution/cons/parms.cc: Likewise. + * testsuite/ext/random/normal_mv_distribution/cons/default.cc: Likewise. + + * testsuite/26_numerics/random/exponential_distribution/cons/parms.cc: + Minor tweak. + * testsuite/26_numerics/random/exponential_distribution/cons/default.cc: + Likewise. + + * testsuite/ext/von_mises_distribution/*: Move to... + * testsuite/ext/random/von_mises_distribution/*: ... here. + * testsuite/ext/triangular_distribution/*: Move to... + * testsuite/ext/random/triangular_distribution/*: ... here. + +2013-08-06 Caroline Tice <cmtice@google.com> + + * fragment.am: Add XTEMPLATE_FLAGS. + * configure.ac: Add definitions for --enable-vtable-verify. + * acinclude.m4: Add --enable-vtable-verify and + --disable-vtable-verify; define --enable-vtable-verify; define + VTV_CXXFLAGS, VTV_PCH_CXXFLAGS and VTV_CXXLINKFLAGS. + * config/abi/pre/gnu.ver: Export symbols for vtable verification. + * libsupc++/Makefile.am: Define vtv_sources and add it to + libsupc___la_SOURCES and libsupc__convenience_la_SOURCES. + * libsupc++/vtv_stubs.cc: New file. + * include/Makefile.am: Add VTV_PCH_CXXFLAGS to PCHFLAGS. + * src/Makefile.am: Add VTV_CXXFLAGS to AM_CXXFLAGS; add + VTV_CXXLINKFLAGS to CXXLINK. + * src/c++98/Makefile.am: Comment out XTEMPLATE_FLAGS; add VTV_CXXFLAGS + to AM_CXXFLAGS; add VTV_CXXXLINKFLAGS to CXXLINK. + * src/C++11/Makefile.am: Ditto. + * doc/xml/manual/configure.xml: Add entry for --enable-vtable-verify. + * scripts/testsuite_flags.in: Add cxxvtvflags to Usage; cause + cxxvtvflags to use VTV_CXXFLAGS and VTV_CXXLINKFLAGS. + * testsuite/lib/libstdc++.exp: Add cxxvtvflags; add code to locate + libvtv if --enable-vtable-verify was used; set cxxvtvflags; add + cxxvtvflags to cxx_final. + * testsuite/18_support/bad_exception/23591_thread-1.c: Add + -fvtable-verify=none to compiler flags. + * testsuite/17_intro/freestanding.cc: Add -fvtable-verify=none + to compiler flags. + * configure: Regenerated. + * Makefile.in: Regenerated. + * python/Makefile.in: Regenerated. + * include/Makefile.in: Regenerated. + * libsupc++/Makefile.in: Regenerated. + * config.h.in: Regenerated. + * po/Makefile.in: Regenerated. + * src/Makefile.in: Regenerated. + * src/c++98/Makefile.in: Regenerated. + * src/c++11/Makefile.in: Regenerated. + * doc/Makefile.in: Regenerated. + * testsuite/Makefile.in: Regenerated. + +2013-08-06 Paolo Carlini <paolo.carlini@oracle.com> + + Revert the last commit. + +2013-08-06 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_Hashtable_alloc): New. + (_ReuseOrAllocNode, _AllocNode): Adapt to use latter rather than + _Hashtable. + (_Before_begin<>): Remove. + * include/bits/hashtable.h (_Hashtable): Inherit from + _Hashtable_alloc and adapt. Restore _M_before_begin field. + * python/libstdcxx/v6/printers.py (StdHashtableIterator): Adapt + access to hashtable before begin. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Adapt dg-error line number. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Likewise. + +2013-08-03 Tim Shen <timshen91@gmail.com> + + Implement bracket expression. + * include/bits/regex.h: Remove constexpr from "|=", etc. + * include/bits/regex_compiler.h: Parse bracket expression. + * include/bits/regex_nfa.h: _Comparator and _BracketMatcher(old + _RangeMatcher). + * include/bits/regex_nfa.tcc: Implement them. + * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: + from regex_search to regex_match. + * testsuite/28_regex/algorithms/regex_match/extended/ + cstring_bracket_01.cc: New. + +2013-08-02 Paolo Carlini <paolo.carlini@oracle.com> + + * include/debug/functions.h (__foreign_iterator_aux4): + Initialize __l and __ge. + +2013-08-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/58049 + * include/debug/functions.h: Include <bits/move.h>; minor formatting + changes. + (__foreign_iterator_aux4): Declare __l and __ge constexpr. + * include/debug/safe_iterator.h (_Safe_iterator<>::operator->): + Use __addressof. + * include/debug/safe_local_iterator.h (_Safe_local_iterator<>:: + operator->): Likewise. + +2013-08-01 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/57779 + * include/debug/formatter.h (_Debug_msg_id): Add + __msg_insert_itself_range entry. + * include/debug/functions.h (_Insert_range_from_self_is_safe<>): + New, indicate container types supporting self range insertion in + GNU implementation. + (__foreign_iterator): New, check if an iterator points to a given + sequence. + * include/debug/macros.h (__glibcxx_check_insert_range): Add check + using __foreign_iterator. + (__gibcxx_check_insert_range_after): Likewise. + * include/debug/string (_Insert_range_from_self_is_safe<>): + Partially specialized to mark __gnu_debug::basic_string<> as + supporting self range insert. + * include/debug/list (_Insert_range_from_self_is_safe<>): + Partially specialized to mark std::list as supporting self range + insert if _GLIBCXX_DEBUG_PEDANTIC is not defined. + * include/debug/forward_list (_Insert_range_from_self_is_safe<>): + Likewise. + * src/c++11/debug.cc (_S_debug_messages): Add + __msg_insert_itself_range_entry message. + (_Error_formatter::_Parameter::_M_print_description): Display + iterator sequence address rather than sequence address when the + parameter type is an iterator. + (_Error_formatter::_M_print_word): Enhance behavior when + displaying a word with an appended '\n'. + * testsuite/util/debug/checks.h (check_insert4<>): New. + * testsuite/23_containers/deque/debug/insert5_neg.cc: New. + * testsuite/23_containers/vector/debug/insert5_neg.cc: Likewise. + * testsuite/23_containers/vector/debug/insert6_neg.cc: Likewise. + * testsuite/23_containers/vector/debug/57779_neg.cc: Likewise. + * testsuite/23_containers/list/debug/insert5_neg.cc: Likewise. + * testsuite/23_containers/forward_list/debug/insert_after4_neg.cc: + Likewise. + +2013-08-01 Fabien Chêne <fabien@gcc.gnu.org> + + PR c++/54537 + * include/tr1/cmath: Remove pow(double,double) overload, remove a + duplicated comment about DR 550. Add a comment to explain the + issue. + * testsuite/tr1/8_c_compatibility/cmath/pow_cmath.cc: New. + +2013-07-31 Tim Shen <timshen91@gmail.com> + + Thompson matcher refactored. Fix grouping problem. + * include/bits/regex.h: Use a dispatcher _M_get_matcher(). + * include/bits/regex_compiler.h: Tweak for auto switching. + * include/bits/regex_grep_matcher.h: Class structure. + * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson + matcher) refactoring. + * include/bits/regex_nfa.h: Change _Results's interfaces. + * include/std/regex: Includes <map> and <queue>. + * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc: New. + +2013-07-31 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56627 + * include/bits/stl_bvector.h: Use friend struct hash intead of + friend class hash to work around useless warnings produced by + some compilers. + * include/std/bitset: Likewise. + +2013-07-31 Paolo Carlini <paolo.carlini@oracle.com> + + * src/c++11/functexcept.cc: Do not include the whole <regex>. + * src/c++11/regex.cc: Likewise. + +2013-07-31 Tim Shen <timshen91@gmail.com> + + Revert last commit. + +2013-07-31 Tim Shen <timshen91@gmail.com> + + Thompson matcher refactored. Fix grouping problem. + * include/bits/regex.h: Use a dispatcher _M_get_matcher(). + * include/bits/regex_compiler.h: Tweak for auto switching. + * include/bits/regex_grep_matcher.h: Class structure. + * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson + matcher) refactoring. + * include/bits/regex_nfa.h: Change _Results's interfaces. + * include/std/regex: Includes <map> and <queue>. + * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc: New. + +2013-07-30 Paolo Carlini <paolo.carlini@oracle.com> + + Revert last commit. + +2013-07-30 Tim Shen <timshen91@gmail.com> + + Thompson matcher refactored. Fix grouping problem. + * include/bits/regex.h: Use a dispatcher _M_get_matcher(). + * include/bits/regex_compiler.h: Tweak for auto switching. + * include/bits/regex_grep_matcher.h: Class structure. + * include/bits/regex_grep_matcher.tcc: _BFSMatcher(Thompson + matcher) refactoring. + * include/bits/regex_nfa.h: Change _Results's interfaces. + * include/std/regex: Includes <map> and <queue>. + * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: + For both matchers. + * testsuite/28_regex/algorithms/regex_match/extended/ + string_dispatch_01.cc: New. + +2013-07-29 Nathan Froyd <froydnj@gcc.gnu.org> + + * include/std/atomic (compare_exchange_weak, compare_exchange_strong): + Add call to __cmpexch_failure_order. + * testsuite/util/testsuite_common_types.h + (compare_exchange_order_lowering): New generator. + * testsuite/29_atomics/atomic/requirements/compare_exchange_lowering.cc: + New test. + +2013-07-25 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/complex (pow(const complex<>&, int)): Enable in + C++11 mode too. + * testsuite/26_numerics/complex/dr844.cc: Adjust. + * doc/xml/manual/intro.xml: Update. + +2013-07-25 Tim Shen <timshen91@gmail.com> + + Add documents and comments. + * include/bits/regex.h: Documents and comments. + * include/bits/regex_grep_matcher.h: Likewise. + * include/bits/regex_grep_matcher.tcc: Likewise. + * testsuite/28_regex/iterators/regex_iterator/char/ + string_position_01.cc: New. + +2013-07-24 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57976 + * doc/xml/manual/status_cxx2011.xml: Note missing time_get::get and + time_get::do_get. + +2013-07-24 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/random.h (random_device): Avoid using the FILE type. + * include/std/random: Do not include <cstdio>. + * src/c++11/random.cc: ... include it here. + (random_device::_M_init, random_device::_M_fini, + random_device::_M_getval): Cast back and forth void* and FILE*. + +2013-07-24 Tim Shen <timshen91@gmail.com> + + Reimplment matcher using Depth-first search(backtracking). + PR libstdc++/53622 + PR libstdc++/57173 + * include/bits/regex.h: regex_match() and regex_search(). + * include/bits/regex_cursor.h: Fix _M_set_pos(). + * include/bits/regex_grep_matcher.h: add _M_dfs_match(). + * include/bits/regex_grep_matcher.tcc: Implement it. + * testsuite/28_regex/algorithms/regex_match/extended/53622.cc: New. + * testsuite/28_regex/algorithms/regex_match/extended/57173.cc: New. + * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: + Remove xfail. + +2013-07-23 Tim Shen <timshen91@gmail.com> + + Implement regex_iterator and regex_token_iterator. + * include/bits/regex.h: regex_iterator and regex_token_iterator. + * testsuite/28_regex/iterators/regex_iterator/char/string_01.cc: + New. + * testsuite/28_regex/iterators/regex_iterator/wchar_t/string_01.cc: + New. + * testsuite/28_regex/iterators/regex_token_iterator/char/string_01.cc: + New. + * testsuite/28_regex/iterators/regex_token_iterator/wchar_t/ + string_01.cc: New. + +2013-07-23 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/random: Add back <cstdio> include. + * src/c++11/random.cc: Don't include <cstdio> here. + +2013-07-22 Jason Merrill <jason@redhat.com> + + PR libstdc++/57914 + * libsupc++/atexit_thread.cc (run): Delete cleanup elts. + +2013-07-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57920 + * src/c++11/random.cc (random_device::_M_getval): If possible, use + read instead of std::fread. + * include/std/random: Do not include <cstdio> unnecessarily. + +2013-07-21 Tim Shen <timshen91@gmail.com> + + Partially implement regex_search. + * include/bits/regex.h: regex_search. + * include/bits/regex_grep_matcher.h: _M_search_from_first. + * include/bits/regex_grep_matcher.tcc: Implement it. + * testsuite/28_regex/algorithms/regex_search/basic/string_01.cc: New. + +2013-07-21 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/54352 + * include/std/condition_variable (condition_variable_any): Move into + inline namespace _V2 and replace mutex member with shared_ptr<mutex>. + * src/c++11/condition_variable.cc (condition_variable_any): Move + definitions to ... + * src/c++11/compatibility-condvar.cc (condition_variable_any): Here. + * src/Makefile.am: Add new source file. + * src/Makefile.in: Regenerate. + +2013-07-09 Tim Shen <timshen91@gmail.com> + + Implement class regex_traits. + * include/bits/regex.h: Implement lookup_classname and + lookup_collatename; modify isctype; partially implement + transform_primary. + * testsuite/28_regex/traits/char/isctype.cc: Add more test cases. + * testsuite/28_regex/traits/char/lookup_classname.cc: Likewise. + * testsuite/28_regex/traits/char/lookup_collatename.cc: Likewise. + * testsuite/28_regex/traits/char/transform_primary.cc: Likewise. + * testsuite/28_regex/traits/wchar_t/isctype.cc: New. + * testsuite/28_regex/traits/wchar_t/lookup_classname.cc: New. + * testsuite/28_regex/traits/wchar_t/lookup_collatename.cc: New. + * testsuite/28_regex/traits/wchar_t/transform_primary.cc: New. + +2013-07-07 Ed Smith-Rowland <3dw4rd@verizon.net> + + * doc/xml/manual/status_cxx2014.xml: Add links for papers. + +2013-07-05 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_ReuseOrAllocNode): Use forward + pattern. + (_MoveReuseOrAllocNode): Remove. + (_Insert_base): Take a functor defining how the node is generated. + * include/bits/hashtable.h: Adapt. + (operator=(initializer_list<value_type>)): Reuse node if any. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Likewise. + +2013-07-05 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: + Tweak, avoid potential undefined behavior. + * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: + Likewise. + * testsuite/23_containers/vector/bool/modifiers/insert/ + const_iterator.cc: Likewise. + * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: + Likewise. + +2013-07-04 Veres Lajos <vlajos@gmail.com> + Jonathan Wakely <jwakely.gcc@gmail.com> + + * config/locale/generic/codecvt_members.cc: Fix typo. + * configure.host: Likewise. + * doc/html/manual/policy_data_structures_design.html: Likewise. + * doc/xml/manual/policy_data_structures.xml: Likewise. + * include/bits/hashtable.h: Likewise. + * include/bits/random.h: Likewise. + * include/profile/impl/profiler_trace.h: Likewise. + * testsuite/23_containers/deque/cons/2.cc: Likewise. + * testsuite/23_containers/deque/debug/shrink_to_fit.cc: Likewise. + * testsuite/ext/pb_ds/example/basic_multimap.cc: Likewise. + * testsuite/performance/23_containers/insert_erase/41975.cc: Likewise. + +2013-07-04 Ray Chason <chasonr@newsguy.com> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57808 + * include/bits/regex.h (regex_token_iterator<>::operator==, + regex_token_iterator<>::operator!=, regex_token_iterator<>::operator*, + regex_token_iterator<>::operator->): Declare const. + +2013-07-01 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_list.h (list<>::insert(iterator, + size_type, const value_type&), list<>::insert(iterator, + initializer_list<>), list<>::insert(iterator, _InputIterator, + _InputIterator), list<>::splice(iterator, list&&), + list<>::splice(iterator, list&), list<>::splice(iterator, list&&, + iterator), list<>::splice(iterator, list&, iterator), + list<>::splice(iterator, list&&, iterator, iterator), + list<>::splice(iterator, list&, iterator, iterator)): Adjust C++11 + signatures to take const_iterator(s). + * include/bits/list.tcc (list<>::insert(const_iterator, size_type, + const value_type&), list<>::insert(const_iterator, _InputIterator, + _InputIterator)): Define. + * include/ext/vstring.h (__versa_string<>::insert(iterator, + size_type, _CharT), __versa_string<>::insert(iterator, + _InputIterator, _InputIterator), __versa_string<>::insert(iterator, + std::initializer_list<>), __versa_string<>::replace(iterator, + iterator, _InputIterator, _InputIterator), __versa_string<>:: + replace(iterator, iterator, std::initializer_list<>)): Adjust C++11 + signatures to take const_iterator(s). + (__versa_string<>::_M_replace_dispatch): Take const_iterators. + * include/ext/vstring.tcc: Likewise. + * include/debug/list: Adjust. + * include/profile/list: Likewise. + * testsuite/23_containers/list/operations/splice/const_iterator.cc: + New. + * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: + Extend. + * testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc: + Likewise. + + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: + Likewise. + +2013-06-30 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_deque.h (deque<>::insert(iterator, + size_type, const value_type&), deque<>::insert(iterator, + initializer_list<>), deque<>::insert(iterator, _InputIterator, + _InputIterator)): Adjust C++11 signatures to take a const_iterator. + * include/bits/stl_vector.h: Likewise. + * include/bits/stl_bvector.h: Likewise. + * include/debug/deque: Adjust. + * include/debug/vector: Likewise. + * include/profile/deque: Likewise. + * include/profile/vector: Likewise. + * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: + Extend. + * testsuite/23_containers/vector/bool/modifiers/insert/ + const_iterator.cc: Likewise. + * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: + Likewise. + + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-06-29 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_Insert_base): Consider hint in + insert methods. + * include/bits/hashtable.h: Likewise. + * testsuite/23_containers/unordered_multimap/insert/hint.cc: New. + * testsuite/performance/23_containers/insert/unordered_multiset_hint.cc: + New. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Likewise. + * doc/xml/manual/containers.xml: Document hinting in unordered + containers. + +2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/21_strings/basic_string/operations/*: Move inside + testsuite/21_strings/basic_string/operations/data/. + * testsuite/21_strings/basic_string/compare/*: Move inside + testsuite/21_strings/basic_string/operations/. + * testsuite/21_strings/basic_string/find/*: Likewise. + * testsuite/21_strings/basic_string/rfind/*: Likewise. + * testsuite/21_strings/basic_string/substr/*: Likewise. + +2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/21_strings/basic_string/append/*: Move inside + testsuite/21_strings/basic_string/modifiers/. + * testsuite/21_strings/basic_string/assign/*: Likewise. + * testsuite/21_strings/basic_string/insert/*: Likewise. + * testsuite/21_strings/basic_string/replace/*: Likewise. + * testsuite/21_strings/basic_string/modifiers/pop_back/char/ + pop_back.cc: Rename to 1.cc. + * testsuite/21_strings/basic_string/modifiers/pop_back/wchar_t/ + pop_back.cc: Likewise. + * testsuite/ext/vstring/assign/*: Move inside + testsuite/ext/vstring/modifiers/. + +2013-06-27 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_deque.h (deque<>::insert(iterator, + const value_type&), deque<>::insert(iterator, value_type&&), + deque<>::emplace(iterator, _Args&&...)): Adjust C++11 signatures to + take a const_iterator. + (deque<>::erase): Simplify. + * include/bits/stl_list.h: Likewise. + (_List_iterator<>::_M_const_cast): Add. + * include/bits/stl_vector.h: Likewise. + * include/bits/stl_bvector.h: Likewise. + (_Bit_iterator::_M_const_cast): Add. + * include/bits/deque.tcc: Adjust definitions. + * include/bits/list.tcc: Likewise. + * include/bits/vector.tcc: Likewise. + * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): + Define trivial version in C++98 mode. + * include/ext/vstring.h (__versa_string<>::insert(iterator, _CharT), + __versa_string<>::replace(iterator, iterator, const __versa_string&), + __versa_string<>::replace(iterator, iterator, const _CharT*, + size_type), __versa_string<>::replace(iterator, iterator, + const _CharT*), __versa_string<>::replace(iterator, iterator, + size_type, _CharT)): Adjust C++11 signatures to take a pair of + const_iterators. + * include/debug/deque: Adjust. + * include/debug/list: Likewise. + * include/debug/vector: Likewise. + * include/profile/deque: Likewise. + * include/profile/list: Likewise. + * include/profile/vector: Likewise. + (vector<>::emplace): Add. + * testsuite/util/exception/safety.h: Update. + * testsuite/23_containers/deque/modifiers/emplace/const_iterator.cc: + New. + * testsuite/23_containers/deque/modifiers/insert/const_iterator.cc: + Likewise. + * testsuite/23_containers/list/modifiers/emplace/const_iterator.cc: + Likewise. + * testsuite/23_containers/list/modifiers/insert/const_iterator.cc: + Likewise. + * testsuite/23_containers/vector/bool/modifiers/insert/ + const_iterator.cc: Likewise. + * testsuite/23_containers/vector/modifiers/emplace/const_iterator.cc: + Likewise. + * testsuite/23_containers/vector/modifiers/insert/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/insert/char/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/insert/wchar_t/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/replace/char/const_iterator.cc: + Likewise. + * testsuite/ext/vstring/modifiers/replace/wchar_t/const_iterator.cc: + Likewise. + + * testsuite/ext/vstring/modifiers/char/54577.cc: Move to testsuite/ + ext/vstring/modifiers/erase/char/. + * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Move to testsuite/ + ext/vstring/modifiers/wchar_t/. + * testsuite/ext/vstring/modifiers/char/pop_back.cc: Move to testsuite/ + ext/vstring/modifiers/pop_back/char/. + * testsuite/ext/vstring/modifiers/wchar_t/pop_back.cc: Move to + testsuite/ext/vstring/modifiers/pop_back/wchar_t/. + + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-06-25 Ed Smith-Rowland <3dw4rd@verizon.net> + + Status page for C++2014 library features + * doc/xml/faq.xml: Add link to new C++14 status page. + * doc/xml/manual/intro.xml: Ditto. + * doc/xml/manual/status_cxx2014.xml: New. + +2013-06-25 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/23_containers/map/modifiers/erase/abi_tag.cc: Avoid + spurious fails with check-debug. + * testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc: + Likewise. + * testsuite/23_containers/set/modifiers/erase/abi_tag.cc: Likewise. + * testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc: + Likewise. + +2013-06-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57704 + * include/bits/char_traits.h (char_traits<char>::lt): Implement + LWG 467. + * testsuite/21_strings/char_traits/requirements/char/57704.cc: New. + +2013-06-24 Bernd Edlinger <bernd.edlinger@hotmail.de> + + PR libstdc++/57691 + * include/c_global/cstdlib (atexit, at_quick_exit): If !_GLIBCC_HOSTED, + declare per the letter of the C++ standard in terms of void. + * include/c_std/cstdlib: Likewise. + +2013-06-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57674 + * include/bits/random.h (binomial_distribution<>::_M_waiting): + Add double parameter. + * include/bits/random.tcc (binomial_distribution<>::operator() + (_UniformRandomNumberGenerator&, const param_type&)): Pass + __param._M_q to _M_waiting. + (_M_waiting): Adjust. + * testsuite/26_numerics/random/binomial_distribution/ + operators/values.cc: Add tests. + +2013-06-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57666 + * include/std/valarray (valarray<>::operator=(const _Expr<>&)): + Implement correctly C++11 26.6.2.3/1. + * testsuite/26_numerics/valarray/dr630-3.C: New. + +2013-06-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/57641 + * include/std/mutex (timed_mutex, recursive_timed_mutex): Move common + functionality to new __timed_mutex_impl mixin. Overload try_lock_until + to handle conversion between different clocks. Replace constrained + __try_lock_for_impl overloads with conditional increment. + * include/std/shared_mutex (shared_mutex::_Mutex): Use the new mixin. + * testsuite/30_threads/timed_mutex/try_lock_until/57641.cc: New. + +2013-06-17 Jonathan Wakely <jwakely.gcc@gmail.com> + Chris Jefferson <chris@bubblescope.net> + + * include/bits/stl_algobase.h (equal): Make C++14 overloads from N3671 + dispatch to traditional std::equal for random-access iterators. + (__equal2_aux, __equal2): Remove. + (__equal::equal): Remove unused overloads. + * include/bits/stl_algo.h (is_permutation): Fix typos. + +2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/shared_mutex (shared_lock::operator=): Add missing + return statement. + +2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/57263 + * include/bits/forward_list.h (_Fwd_list_base): Convert to/from + allocator's pointer type. + * include/bits/hashtable.h (_Hashtable): Likewise. + * testsuite/util/testsuite_allocator.h (CustomPointerAlloc): Add. + * testsuite/23_containers/forward_list/allocator/ext_ptr.cc: New. + * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: New. + * testsuite/23_containers/vector/allocator/ext_ptr.cc: New. + +2013-06-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/shared_mutex: Implement N3659. + * include/bits/c++14_warning.h: New. + * include/Makefile.am: Add new headers. + * include/Makefile.in: Regenerate. + * testsuite/30_threads/shared_lock/cons/1.cc: New. + * testsuite/30_threads/shared_lock/locking/2.cc: New. + * testsuite/30_threads/shared_lock/cons/2.cc: New. + * testsuite/30_threads/shared_lock/locking/3.cc: New. + * testsuite/30_threads/shared_lock/cons/3.cc: New. + * testsuite/30_threads/shared_lock/locking/4.cc: New. + * testsuite/30_threads/shared_lock/cons/4.cc: New. + * testsuite/30_threads/shared_lock/modifiers/1.cc: New. + * testsuite/30_threads/shared_lock/cons/5.cc: New. + * testsuite/30_threads/shared_lock/modifiers/2.cc: New. + * testsuite/30_threads/shared_lock/cons/6.cc: New. + * testsuite/30_threads/shared_lock/requirements/ + explicit_instantiation.cc: New. + * testsuite/30_threads/shared_lock/locking/1.cc: New. + * testsuite/30_threads/shared_lock/requirements/typedefs.cc: New. + * testsuite/30_threads/shared_mutex/cons/1.cc: New. + * testsuite/30_threads/shared_mutex/cons/assign_neg.cc: New. + * testsuite/30_threads/shared_mutex/cons/copy_neg.cc: New. + * testsuite/30_threads/shared_mutex/requirements/ + standard_layout.cc: New. + * testsuite/30_threads/shared_mutex/try_lock/1.cc: New. + * testsuite/30_threads/shared_mutex/try_lock/2.cc: New. + +2013-06-15 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57619 + * include/bits/unordered_map.h (unordered_map<>::insert, + unordered_multimap<>::insert): Use std::forward, not std::move. + * testsuite/23_containers/unordered_map/insert/57619.C: New. + * testsuite/23_containers/unordered_multimap/insert/57619.C: Likewise. + +2013-06-14 Alan Modra <amodra@gmail.com> + + * configure.host (abi_baseline_pair): Match powerpc64*. + +2013-06-13 Daniel Krugler <daniel.kruegler@gmail.com> + + * include/std/type_traits (is_function): Support ref-qualified + functions. + (is_copy_constructible, is_move_constructible, is_copy_assignable, + is_move_assignable, is_nothrow_copy_constructible, + is_nothrow_move_constructible, is_nothrow_copy_assignable, + is_nothrow_move_assignable): Implement LWG 2196. + (add_lvalue_reference, add_rvalue_reference, add_pointer): Implement + LWG 2101. + (__strip_reference_wrapper<<const reference_wrapper<_Tp>>): Remove, + unused. + * testsuite/20_util/add_lvalue_reference/value.cc: Extend. + * testsuite/20_util/add_rvalue_reference/value.cc: Likewise. + * testsuite/20_util/decay/requirements/typedefs.cc: Likewise. + * testsuite/20_util/is_assignable/value.cc: Likewise. + * testsuite/20_util/is_constructible/value-2.cc: Likewise. + * testsuite/20_util/is_copy_assignable/value.cc: Likewise. + * testsuite/20_util/is_copy_constructible/value.cc: Likewise. + * testsuite/20_util/is_function/value.cc: Likewise. + * testsuite/20_util/is_move_assignable/value.cc: Likewise. + * testsuite/20_util/is_move_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_copy_assignable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_copy_constructible/value.cc: Likewise. + * testsuite/20_util/is_nothrow_move_assignable/value.cc: Likewise. + * testsuite/20_util/is_nothrow_move_constructible/value.cc: Likewise. + + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error + line number. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + +2013-06-13 Paolo Carlini <paolo.carlini@oracle.com> + + * include/tr1/modified_bessel_func.tcc (__gnu_cxx::__airy_ai(), + __gnu_cxx::__airy_bi()): Remove. + * testsuite/tr1/5_numerical_facilities/special_functions/ + 10_cyl_bessel_k/airy.cc: Fix. + +2013-06-12 Ed Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/56430 + * include/tr1/modified_bessel_func.tcc (__airy): Remove return + from void function. + (__gnu_cxx::__airy_ai(), __gnu_cxx::__airy_bi()): New functions. + * testsuite/tr1/5_numerical_facilities/special_functions/ + 10_cyl_bessel_k/airy.cc: New. + +2013-06-11 Ed Smith-Rowland <3dw4rd@verizon.net> + + Fix library literals error involving namespace __detail. + * include/std/chrono: Rename __detail to __select_type. Reformat. + * include/bits/basic_string.h: Reformat. + * testsuite/20_util/duration/literals/ns_detail.cc: New. + +2013-06-11 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56019 + * include/c_global/cstddef (max_align_t): Add to namespace std. + * include/c_std/cstddef: Likewise. + * testsuite/18_support/max_align_t/requirements/1.cc: New. + * testsuite/18_support/max_align_t/requirements/2.cc: Likewise. + +2013-06-10 Benjamin Kosnik <bkoz@redhat.com> + + * include/bits/c++config (_GLIBCXX_ABI_TAG_CXX11): Add. + * include/bits/stl_map.h (erase): Use abi_tag when C++11. + * include/bits/stl_multimap.h: Same. + * include/bits/stl_multiset.h: Same. + * include/bits/stl_set.h: Same. + * include/bits/stl_tree.h: Same. + * include/std/complex (real, imag): Use macro for abi_tag. + + * testsuite/lib/libstdc++.exp: Disable inlinling with -fno-inline. + * testsuite/util/testsuite_containers.h (erase_external): New + declarations. + (erase_external_iterators): Same. + (linkage_check_cxx98_cxx11_erase): Same. + (linkage_check_cxx98_cxx11_erase_iterators): Same. + * testsuite/util/testsuite_shared.cc: Define. + * testsuite/23_containers/map/modifiers/erase/abi_tag.cc: New. + * testsuite/23_containers/map/modifiers/erase/ + dr130-linkage-check.cc: New. + * testsuite/23_containers/multimap/modifiers/erase/abi_tag.cc: New. + * testsuite/23_containers/multimap/modifiers/erase/ + dr130-linkage-check.cc: New. + * testsuite/23_containers/multiset/modifiers/erase/abi_tag.cc: New. + * testsuite/23_containers/multiset/modifiers/erase/ + dr130-linkage-check.cc: New. + * testsuite/23_containers/set/modifiers/erase/abi_tag.cc: New. + * testsuite/23_containers/set/modifiers/erase/dr130-linkage-check.cc: + New. + * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line number. + + * testsuite/23_containers/map/dr130.cc: Move... + * testsuite/23_containers/map/modifiers/dr130.cc: ...here. + * testsuite/23_containers/multimap/dr130.cc: Move ... + * testsuite/23_containers/multimap/modifiers/dr130.cc: ...here. + * testsuite/23_containers/multiset/dr130.cc: Move... + * testsuite/23_containers/multiset/modifiers/dr130.cc: ...here. + * testsuite/23_containers/set/dr130.cc: Move... + * testsuite/23_containers/set/modifiers/dr130.cc: ...here. + +2013-06-10 Thomas Schwinge <thomas@codesourcery.com> + + * testsuite/17_intro/headers/c++1998/49745.cc: Extend current + handling of Linux-based x86 systems to cover all GNU systems. + * testsuite/18_support/bad_exception/23591_thread-1.c: Likewise. + * testsuite/18_support/pthread_guard.cc: Likewise. + * testsuite/20_util/shared_ptr/thread/default_weaktoshared.cc: + Likewise. + * testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc: + Likewise. + * testsuite/21_strings/basic_string/pthread18185.cc: Likewise. + * testsuite/21_strings/basic_string/pthread4.cc: Likewise. + * testsuite/22_locale/ctype/is/char/2.cc: Likewise. + * testsuite/22_locale/ctype/is/wchar_t/2.cc: Likewise. + * testsuite/22_locale/locale/cons/12658_thread-1.cc: Likewise. + * testsuite/22_locale/locale/cons/12658_thread-2.cc: Likewise. + * testsuite/23_containers/list/pthread1.cc: Likewise. + * testsuite/23_containers/list/pthread5.cc: Likewise. + * testsuite/23_containers/map/pthread6.cc: Likewise. + * testsuite/23_containers/vector/debug/multithreaded_swap.cc: + Likewise. + * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc: + Likewise. + * testsuite/27_io/basic_ofstream/pthread2.cc: Likewise. + * testsuite/27_io/basic_ostringstream/pthread3.cc: Likewise. + * testsuite/30_threads/async/42819.cc: Likewise. + * testsuite/30_threads/async/49668.cc: Likewise. + * testsuite/30_threads/async/54297.cc: Likewise. + * testsuite/30_threads/async/any.cc: Likewise. + * testsuite/30_threads/async/async.cc: Likewise. + * testsuite/30_threads/async/launch.cc: Likewise. + * testsuite/30_threads/async/sync.cc: Likewise. + * testsuite/30_threads/call_once/39909.cc: Likewise. + * testsuite/30_threads/call_once/49668.cc: Likewise. + * testsuite/30_threads/call_once/call_once1.cc: Likewise. + * testsuite/30_threads/condition_variable/54185.cc: Likewise. + * testsuite/30_threads/condition_variable/cons/1.cc: Likewise. + * testsuite/30_threads/condition_variable/members/1.cc: Likewise. + * testsuite/30_threads/condition_variable/members/2.cc: Likewise. + * testsuite/30_threads/condition_variable/members/53841.cc: + Likewise. + * testsuite/30_threads/condition_variable/native_handle/typesizes.cc: + Likewise. + * testsuite/30_threads/condition_variable_any/50862.cc: Likewise. + * testsuite/30_threads/condition_variable_any/53830.cc: Likewise. + * testsuite/30_threads/condition_variable_any/cons/1.cc: Likewise. + * testsuite/30_threads/condition_variable_any/members/1.cc: + Likewise. + * testsuite/30_threads/condition_variable_any/members/2.cc: + Likewise. + * testsuite/30_threads/future/cons/move.cc: Likewise. + * testsuite/30_threads/future/members/45133.cc: Likewise. + * testsuite/30_threads/future/members/get.cc: Likewise. + * testsuite/30_threads/future/members/get2.cc: Likewise. + * testsuite/30_threads/future/members/share.cc: Likewise. + * testsuite/30_threads/future/members/valid.cc: Likewise. + * testsuite/30_threads/future/members/wait.cc: Likewise. + * testsuite/30_threads/future/members/wait_for.cc: Likewise. + * testsuite/30_threads/future/members/wait_until.cc: Likewise. + * testsuite/30_threads/lock/1.cc: Likewise. + * testsuite/30_threads/lock/2.cc: Likewise. + * testsuite/30_threads/lock/3.cc: Likewise. + * testsuite/30_threads/lock/4.cc: Likewise. + * testsuite/30_threads/mutex/cons/1.cc: Likewise. + * testsuite/30_threads/mutex/dest/destructor_locked.cc: Likewise. + * testsuite/30_threads/mutex/lock/1.cc: Likewise. + * testsuite/30_threads/mutex/native_handle/1.cc: Likewise. + * testsuite/30_threads/mutex/native_handle/typesizes.cc: Likewise. + * testsuite/30_threads/mutex/try_lock/1.cc: Likewise. + * testsuite/30_threads/mutex/try_lock/2.cc: Likewise. + * testsuite/30_threads/mutex/unlock/1.cc: Likewise. + * testsuite/30_threads/packaged_task/49668.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/1.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/2.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/3.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/56492.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/alloc.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/move.cc: Likewise. + * testsuite/30_threads/packaged_task/cons/move_assign.cc: + Likewise. + * testsuite/30_threads/packaged_task/members/get_future.cc: + Likewise. + * testsuite/30_threads/packaged_task/members/get_future2.cc: + Likewise. + * testsuite/30_threads/packaged_task/members/invoke.cc: Likewise. + * testsuite/30_threads/packaged_task/members/invoke2.cc: Likewise. + * testsuite/30_threads/packaged_task/members/invoke3.cc: Likewise. + * testsuite/30_threads/packaged_task/members/invoke4.cc: Likewise. + * testsuite/30_threads/packaged_task/members/invoke5.cc: Likewise. + * testsuite/30_threads/packaged_task/members/reset.cc: Likewise. + * testsuite/30_threads/packaged_task/members/reset2.cc: Likewise. + * testsuite/30_threads/packaged_task/members/swap.cc: Likewise. + * testsuite/30_threads/packaged_task/members/valid.cc: Likewise. + * testsuite/30_threads/promise/cons/1.cc: Likewise. + * testsuite/30_threads/promise/cons/alloc.cc: Likewise. + * testsuite/30_threads/promise/cons/move.cc: Likewise. + * testsuite/30_threads/promise/cons/move_assign.cc: Likewise. + * testsuite/30_threads/promise/members/get_future.cc: Likewise. + * testsuite/30_threads/promise/members/get_future2.cc: Likewise. + * testsuite/30_threads/promise/members/set_exception.cc: Likewise. + * testsuite/30_threads/promise/members/set_exception2.cc: + Likewise. + * testsuite/30_threads/promise/members/set_value.cc: Likewise. + * testsuite/30_threads/promise/members/set_value2.cc: Likewise. + * testsuite/30_threads/promise/members/set_value3.cc: Likewise. + * testsuite/30_threads/promise/members/swap.cc: Likewise. + * testsuite/30_threads/recursive_mutex/cons/1.cc: Likewise. + * testsuite/30_threads/recursive_mutex/dest/destructor_locked.cc: + Likewise. + * testsuite/30_threads/recursive_mutex/lock/1.cc: Likewise. + * testsuite/30_threads/recursive_mutex/native_handle/1.cc: + Likewise. + * testsuite/30_threads/recursive_mutex/native_handle/typesizes.cc: + Likewise. + * testsuite/30_threads/recursive_mutex/try_lock/1.cc: Likewise. + * testsuite/30_threads/recursive_mutex/try_lock/2.cc: Likewise. + * testsuite/30_threads/recursive_mutex/unlock/1.cc: Likewise. + * testsuite/30_threads/recursive_timed_mutex/cons/1.cc: Likewise. + * testsuite/30_threads/recursive_timed_mutex/dest/destructor_locked.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/lock/1.cc: Likewise. + * testsuite/30_threads/recursive_timed_mutex/lock/2.cc: Likewise. + * testsuite/30_threads/recursive_timed_mutex/native_handle/1.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/native_handle/typesizes.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock/1.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock/2.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock_for/1.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock_for/2.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock_for/3.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock_until/1.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/try_lock_until/2.cc: + Likewise. + * testsuite/30_threads/recursive_timed_mutex/unlock/1.cc: + Likewise. + * testsuite/30_threads/shared_future/cons/move.cc: Likewise. + * testsuite/30_threads/shared_future/members/45133.cc: Likewise. + * testsuite/30_threads/shared_future/members/get.cc: Likewise. + * testsuite/30_threads/shared_future/members/get2.cc: Likewise. + * testsuite/30_threads/shared_future/members/valid.cc: Likewise. + * testsuite/30_threads/shared_future/members/wait.cc: Likewise. + * testsuite/30_threads/shared_future/members/wait_for.cc: + Likewise. + * testsuite/30_threads/shared_future/members/wait_until.cc: + Likewise. + * testsuite/30_threads/this_thread/1.cc: Likewise. + * testsuite/30_threads/this_thread/2.cc: Likewise. + * testsuite/30_threads/this_thread/3.cc: Likewise. + * testsuite/30_threads/this_thread/4.cc: Likewise. + * testsuite/30_threads/thread/cons/1.cc: Likewise. + * testsuite/30_threads/thread/cons/2.cc: Likewise. + * testsuite/30_threads/thread/cons/3.cc: Likewise. + * testsuite/30_threads/thread/cons/4.cc: Likewise. + * testsuite/30_threads/thread/cons/49668.cc: Likewise. + * testsuite/30_threads/thread/cons/5.cc: Likewise. + * testsuite/30_threads/thread/cons/6.cc: Likewise. + * testsuite/30_threads/thread/cons/7.cc: Likewise. + * testsuite/30_threads/thread/cons/8.cc: Likewise. + * testsuite/30_threads/thread/cons/9.cc: Likewise. + * testsuite/30_threads/thread/cons/moveable.cc: Likewise. + * testsuite/30_threads/thread/members/1.cc: Likewise. + * testsuite/30_threads/thread/members/2.cc: Likewise. + * testsuite/30_threads/thread/members/3.cc: Likewise. + * testsuite/30_threads/thread/members/4.cc: Likewise. + * testsuite/30_threads/thread/members/5.cc: Likewise. + * testsuite/30_threads/thread/members/hardware_concurrency.cc: + Likewise. + * testsuite/30_threads/thread/native_handle/cancel.cc: Likewise. + * testsuite/30_threads/thread/native_handle/typesizes.cc: + Likewise. + * testsuite/30_threads/thread/swap/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/cons/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/dest/destructor_locked.cc: + Likewise. + * testsuite/30_threads/timed_mutex/lock/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/native_handle/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/native_handle/typesizes.cc: + Likewise. + * testsuite/30_threads/timed_mutex/try_lock/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock/2.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock_for/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock_for/2.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock_for/3.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock_until/1.cc: Likewise. + * testsuite/30_threads/timed_mutex/try_lock_until/2.cc: Likewise. + * testsuite/30_threads/timed_mutex/unlock/1.cc: Likewise. + * testsuite/30_threads/try_lock/1.cc: Likewise. + * testsuite/30_threads/try_lock/2.cc: Likewise. + * testsuite/30_threads/try_lock/3.cc: Likewise. + * testsuite/30_threads/try_lock/4.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/1.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/2.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/3.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/4.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/5.cc: Likewise. + * testsuite/30_threads/unique_lock/cons/6.cc: Likewise. + * testsuite/30_threads/unique_lock/locking/1.cc: Likewise. + * testsuite/30_threads/unique_lock/locking/2.cc: Likewise. + * testsuite/30_threads/unique_lock/locking/3.cc: Likewise. + * testsuite/30_threads/unique_lock/locking/4.cc: Likewise. + * testsuite/30_threads/unique_lock/modifiers/1.cc: Likewise. + * testsuite/30_threads/unique_lock/modifiers/2.cc: Likewise. + * testsuite/ext/mt_allocator/22309_thread.cc: Likewise. + * testsuite/ext/profile/mh.cc: Likewise. + * testsuite/ext/rope/pthread7-rope.cc: Likewise. + * testsuite/lib/libstdc++.exp (libstdc++_init): Likewise. + * testsuite/tr1/2_general_utilities/shared_ptr/thread/default_weaktoshared.cc: + Likewise. + * testsuite/tr1/2_general_utilities/shared_ptr/thread/mutex_weaktoshared.cc: + Likewise. + * testsuite/util/testsuite_performance.h: Extend current handling + of Linux-based systems to cover all glibc-based systems. + +2013-06-09 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/mutex (call_once): Remove parentheses to fix error in + c++1y and gnu++1y mode. + * testsuite/30_threads/mutex/try_lock/2.cc: Call try_lock() in new + thread to avoid undefined behaviour. + +2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> + + Simplify and clean up library literals. + * include/std/chrono: Simplify namespace and versioning management. + * include/bits/basic_string.h: Ditto. + * testsuite/20_util/duration/literals/types.cc: Remove bogus comment. + * testsuite/20_util/duration/literals/values.cc: Ditto. + * testsuite/21_strings/basic_string/literals/types.cc: Ditto. + * testsuite/21_strings/basic_string/literals/values.cc: Ditto. + +2013-06-08 Ed Smith-Rowland <3dw4rd@verizon.net> + + Implement N3654 - Quoted Strings Library Proposal + * include/std/iomanip: Add quoted(String, Char delim, Char escape) + manipulators and supporting machinery in c++1y mode. + * testsuite/27_io/manipulators/standard/char/quoted.cc: New. + * testsuite/27_io/manipulators/standard/wchar_t/quoted.cc: New. + +2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/alloc_traits.h (allocator_traits::max_size()): LWG + 2162: Add noexcept. + +2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/stl_algo.h (is_permutation): Add overloads from N3671. + * include/bits/stl_algobase.h (equal, mismatch): Likewise. + * testsuite/25_algorithms/equal/1.cc: Remove duplicate test case. + * testsuite/25_algorithms/equal/2.cc: New. + * testsuite/25_algorithms/equal/check_type2.cc: New. + * testsuite/25_algorithms/is_permutationqual/2.cc: New. + * testsuite/25_algorithms/is_permutationqual/check_type2.cc: New. + * testsuite/25_algorithms/mismatch/2.cc: New. + * testsuite/25_algorithms/mismatch/check_type2.cc: New. + * testsuite/util/testsuite_iterators.h: Fix spelling. + +2013-06-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/type-traits (integral_constant::operator()): Implement + N3545. + * testsuite/20_util/integral_constant/call_operator.cc: New. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error + line numbers. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + +2013-06-07 Uros Bizjak <ubizjak@gmail.com> + + * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update. + +2013-06-05 Tom Tromey <tromey@redhat.com> + + * testsuite/libstdc++-prettyprinters/shared_ptr.cc: Use -O0. + +2013-06-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/57419 + * testsuite/20_util/default_delete/48631_neg.cc: Adjust. + +2013-06-01 Ed Smith-Rowland <3dw4rd@verizon.net> + + * include/std/chrono: Collapse redundant 'inline' from 'inline + constexpr'. + * include/std/tuple: Ditto. + * include/bits/move.h: Ditto. + +2013-05-30 Ed Smith-Rowland <3dw4rd@verizon.net> + + Implement N3642 - User-defined Literals for Standard Library Types + * include/bits/parse_numbers.h: New. + * include/std/chrono: Add duration literal operators. + * include/bits/basic_string.h: Add string literal operators. + * include/Makefile.in: Add parse_numbers.h. + * include/Makefile.am: Ditto. + * testsuite/20_util/duration/literals/values.cc: New. + * testsuite/20_util/duration/literals/types.cc: New. + * testsuite/20_util/duration/requirements/typedefs_neg1.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg2.cc: Adjust. + * testsuite/20_util/duration/requirements/typedefs_neg3.cc: Adjust. + * testsuite/21_strings/basic_string/literals/values.cc: New. + * testsuite/21_strings/basic_string/literals/types.cc: New. + +2013-05-28 Jonathan Wakely <jwakely.gcc@gmail.com> + + * src/c++11/compatibility-chrono.cc (steady_clock::now()): If + !_GLIBCXX_USE_GETTIMEOFDAY perform conversion inline instead of + calling non-existent from_time_t. + +2013-05-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: + Regenerate. + +2013-05-24 Benjamin Kosnik <bkoz@redhat.com> + + * include/std/chrono: Wrap clocks in inline namespace _V2. + * src/c++11/chrono.cc: Same. + * src/c++11/compatibility-chrono.cc: Revert to previous chrono.cc + file, with default configure macros selected. + + * config/abi/pre/gnu.ver (GLIBCXX_3.4.19): Use symbols from inline + namespace. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Fix up. + + * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: + Regenerated. + * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: + Regenerated. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: + Regenerated. + * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: + Regenerated. + * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Regenerated. + +2013-05-24 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/os/solaris/solaris2.9/os_defines.h [!CLOCK_MONOTONIC] + (CLOCK_MONOTONIC): Define. + +2013-05-24 Paolo Carlini <paolo.carlini@oracle.com> + + * include/ext/type_traits.h (__is_null_pointer): Add std::nullptr_t + overload. + + * include/bits/cpp_type_traits.h (__is_fundamental): Remove, unused. + +2013-05-24 Jakub Jelinek <jakub@redhat.com> + + * src/c++11/chrono.cc: If _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, + include unistd.h and sys/syscall.h. If _GLIBCXX_COMPATIBILITY_CXX0X, + don't define system_clock::is_steady, system_clock::now() and + steady_clock::is_steady. + (std::chrono::system_clock::now()): If + _GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, call + syscall (SYS_clock_gettime, ...) instead of clock_gettime (...). + (std::chrono::system_clock::now()): Likewise. Add weak attribute + if _GLIBCXX_COMPATIBILITY_CXX0X and compatibility-chrono.cc will + be non-empty. + * src/Makefile.am (cxx11_sources): Add compatibility-chrono.cc. + (compatibility-chrono.lo, compatibility-chrono.o): New goals. + * src/c++11/compatibility-chrono.cc: New file. + * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): On linux*, check for + syscall (SYS_clock_gettime, CLOCK_MONOTONIC, &tp). + * testsuite/util/testsuite_abi.cc (check_version): Add + GLIBCXX_3.4.20 version and make it the latest. + * config/abi/pre/gnu.ver (_ZNSt6chrono12steady_clock3nowEv): Export + also @@GLIBCXX_3.4.19. Move all symbols so far added for GCC 4.9 to + @@GLIBCXX_3.4.20 instead. + * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: + Regenerated. + * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: + Regenerated. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: + Regenerated. + * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: + Regenerated. + * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerated. + * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Regenerated. + * config.h.in: Regenerated. + * src/Makefile.in: Regenerated. + * configure: Regenerated. + +2013-05-23 Matthias Klose <doko@ubuntu.com> + + * include/Makefile.am (bits_headers): Remove ${bits_host_headers}. + (ext_headers): Remove ${ext_host_headers}. + (stamp-${host_alias}): Create ${host_builddir}/../ext. + (stamp-host): Link ${bits_host_headers} and ${ext_host_headers}. + (install-headers): Install ${bits_host_headers} and ${ext_host_headers}. + * include/Makefile.in: Regenerate. + * include/ext/random: Include ext/opt_random.h. + +2013-05-22 Jonathan Wakely <jwakely.gcc@gmail.com> + + * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Add KIND=auto to + enable features if target OS is known to support them. + * configure.ac (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Default to 'auto'. + * configure: Regenerate. + +2013-05-21 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/57336 + * include/std/functional (__invoke): Do not form function types with + abstract return type. + * testsuite/20_util/reference_wrapper/invoke-3.cc: New. + +2013-05-19 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/tuple (get): Implement N3670. + * include/std/utility (get): Likewise. + * testsuite/20_util/pair/get.cc: Move to ... + * testsuite/20_util/pair/astuple/get.cc: Here. + * testsuite/20_util/pair/astuple/astuple.cc: New. + * testsuite/20_util/pair/astuple/constexpr_get.cc: New. + * testsuite/20_util/pair/astuple/constexpr_get_by_type.cc: New. + * testsuite/20_util/pair/astuple/get_by_type.cc: New. + * testsuite/20_util/pair/astuple/get_by_type_neg.cc: New. + * testsuite/20_util/pair/astuple/get_neg.cc: New. + * testsuite/20_util/tuple/element_access/constexpr_get_by_type.cc: New. + * testsuite/20_util/tuple/element_access/get2_by_type.cc: New. + * testsuite/20_util/tuple/element_access/get_by_type.cc: New. + +2013-05-19 Paolo Carlini <paolo.carlini@oracle.com> + + * Revert last commit. + +2013-05-19 Matthias Klose <doko@ubuntu.com> + + * include/Makefile.am (bits_headers): Remove ${bits_host_headers}. + (ext_headers): Remove ${ext_host_headers}. + (stamp-${host_alias}): Create ${host_builddir}/../ext. + (stamp-host): Link ${bits_host_headers} and ${ext_host_headers}. + (install-headers): Install ${bits_host_headers} and ${ext_host_headers}. + * include/Makefile.in: Regenerate. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/system_error (error_category::error_category()): LWG + 2145: Declare public and constexpr. + * src/c++11/system_error.cc (error_category::error_category()): Move + definition to ... + * src/c++11/compatibility-c++0x.cc: Here. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/typeindex (type_index::name()): LWG 2144: Add noexcept. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/unique_ptr.h (make_unique): Declare inline. + (unique_ptr<T[],D>::reset()): Combine two overloads into one. + (default_delete, unique_ptr): Add doxygen comments. + * include/bits/shared_ptr_base.h: Improve doxygen comments. + * include/bits/shared_ptr.h: Likewise. + * testsuite/20_util/default_delete/48631_neg.cc: Adjust dg-error line + number. + * testsuite/20_util/unique_ptr/assign/48635_neg.cc: Likewise. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Fix markup error. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Fix markup error. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/utility (exchange): Define. + * testsuite/20_util/exchange/1.cc: New. + +2013-05-18 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/unique_ptr.h (make_unique): Define. + * testsuite/20_util/unique_ptr/creation/single.cc: New. + * testsuite/20_util/unique_ptr/creation/array.cc: New. + * testsuite/20_util/unique_ptr/creation/array_neg.cc: New. + +2013-05-15 François Dumont <fdumont@gcc.gnu.org> + + * python/libstdcxx/v6/printers.py (Tr1HashtableIterator): Fix + rendering of std::tr1 unordered containers iterator. + (StdHashtableIterator): New, render std unordered containers iterator. + * testsuite/libstdc++-prettyprinters/tr1.cc: New. + +2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/basic_string.h (getline): Fix doxygen comments. + +2013-05-14 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): + Use std::pointer_traits. + +2013-05-13 Benjamin Kosnik <bkoz@redhat.com> + + * libsupc++/Makefile.am (sources): Add bad_array_length.cc, + bad_array_new.cc. + * libsupc++/Makefile.in: Regenerate. + * libsupc++/bad_array_length.cc: Tweak. + * libsupc++/bad_array_new.cc: Tweak. + +2013-05-10 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/54577 + * include/bits/stl_deque.h (erase): Fix signatures in C++11 mode. + (_Deque_iterator<>::_M_const_cast): Add. + (deque<>::_M_erase): Declare. + * include/bits/deque.tcc: ... and define. + * include/bits/stl_list.h (erase): Fix signatures in C++11 mode. + (_List_const_iterator<>::_M_const_cast): Add. + * include/bits/list.tcc (erase (iterator)): Fix. + * include/bits/stl_iterator.h (__normal_iterator<>::_M_const_cast): + Add; include <ext/cast.h>. + * include/bits/stl_vector.h (erase): Fix signatures in C++11 mode. + (vector<>::_M_erase): Declare. + * include/bits/stl_bvector.h: Likewise. + * include/bits/vector.tcc (vector<>::_M_erase): Define. + * include/ext/vstring.h (erase): Fix signatures in C++11 mode. + * include/debug/deque: Adjust. + * include/debug/list: Likewise. + * include/debug/vector: Likewise. + * include/profile/deque: Likewise. + * include/profile/list: Likewise. + * include/profile/vector: Likewise. + * testsuite/util/exception/safety.h (erase_base<deque>, + erase_base<deque>, erase_base<vector>): Remove. + (erase_base<__versa_string>): Update. + * testsuite/ext/vstring/modifiers/char/54577.cc: New. + * testsuite/ext/vstring/modifiers/wchar_t/54577.cc: Likewise. + * testsuite/23_containers/deque/modifiers/erase/54577.cc: Likewise. + * testsuite/23_containers/list/modifiers/erase/54577.cc: Likewise. + * testsuite/23_containers/vector/bool/modifiers/erase/54577.cc: + Likewise. + * testsuite/23_containers/vector/modifiers/erase/54577.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: + Adjust dg-error line numbers. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/list/requirements/dr438/ + insert_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-05-09 Uros Bizjak <ubizjak@gmail.com> + + * testsuite/util/testsuite_abi.cc (check_version): Add CXXABI_1.3.8. + +2013-05-08 Jason Merrill <jason@redhat.com> + + Add std::bad_array_length (N3639) + * libsupc++/new: Add std::bad_array_length. + * libsupc++/bad_array_length.cc: New. + * libsupc++/eh_aux_runtime.cc: Add __cxa_bad_array_length. + * libsupc++/Makefile.in: Build them. + * config/abi/pre/gnu.ver: Add new symbols. + * config/abi/pre/gnu-versioned-namespace.ver: Add new symbols. + +2013-05-08 Andi Kleen <ak@linux.intel.com> + + PR target/55947 + * libstdc++-v3/include/bits/atomic_base.h + (_GLIBCXX_ALWAYS_INLINE): Add new macro. + (atomic_thread_fence, atomic_signal_fence, test_and_set, + clear, store, load, exchange, compare_exchange_weak) + compare_exchange_strong, fetch_add, fetch_sub, fetch_and, + fetch_or, fetch_xor): Mark _GLIBCXX_ALWAYS_INLINE. + +2013-05-08 Jason Merrill <jason@redhat.com> + + Add std::bad_array_new_length (N2932) + * libsupc++/new: Add std::bad_array_new_length. + * libsupc++/bad_array_new.cc: New. + * libsupc++/eh_aux_runtime.cc: Add __cxa_throw_bad_array_new_length. + * libsupc++/Makefile.in: Build them. + * config/abi/pre/gnu.ver: Add new symbols. + * config/abi/pre/gnu-versioned-namespace.ver: Add new symbols. + +2013-05-08 Andoni Morales Alastruey <ylatuya@gmail.com> + + PR libstdc++/57212 + * include/Makefile.am (_GLIBCXX___MINGW32_GLIBCXX___): Modify + to __MINGW32__. + * include/Makefile.in: Regenerated. + +2013-05-07 François Dumont <fdumont@gcc.gnu.org> + + * include/profile/unordered_base.h: New. + * include/Makefile.am: Add new profile header. + * include/Makefile.in: Regenerate. + * include/profile/impl/profiler.h + (__profcxx_inefficient_hash_is_on): New macro. + * include/profile/unordered_map (std::profile::unordered_map<>): + Use new _Unordered_profile base class. Use default implementations + for special functions. + (std::profile::unordered_multimap<>): Likewise. + * include/profile/unordered_set (std::profile::unordered_set<>): + Likewise. + (std::profile::unordered_multiset<>): Likewise. + * testsuite/23_containers/unordered_multiset/55043.cc: Fix + MoveOnly equality operator signature. + +2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/tr1/4_metaprogramming/integral_constant/requirements/ + constexpr_data.cc: Move... + * testsuite/20_util/integral_constant/requirements/constexpr_data.cc: + ... here. + * testsuite/20_util/integral_constant/requirements/ + explicit_instantiation.cc: New. + * testsuite/20_util/integral_constant/requirements/typedefs.cc: + Likewise. + * testsuite/20_util/integral_constant/static_definition.cc: Likewise. + * testsuite/20_util/integral_constant/true_false_type_typedefs.cc: + Likewise. + * testsuite/20_util/integral_constant/true_false_value.cc: Likewise. + * testsuite/20_util/integral_constant/operator_value_type.cc: Likewise. + +2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/type_traits (is_null_pointer): Add. + (__is_nullptr_t): Implement in terms of the latter. + (is_fundamental, is_scalar): Adjust. + * testsuite/20_util/is_null_pointer/requirements/ + explicit_instantiation.cc: New. + * testsuite/20_util/is_null_pointer/requirements/typedefs.cc: + Likewise. + * testsuite/20_util/is_null_pointer/value.cc: Likewise. + * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error + line number. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + +2013-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + * include/c_global/cstdio: Add comment about LWG 2249. + * include/c_std/cstdio: Likewise. + +2013-04-28 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/hashtable_policy.h (_Hashtable_ebo_helper): Fix + comment. + * include/std/mutex (__recursive_mutex_base): Likewise. + +2013-04-28 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/51365 + * include/bits/shared_ptr_base (_Sp_ebo_helper): Helper class to + implement EBO safely. + (_Sp_counted_base::_M_get_deleter): Add noexcept. + (_Sp_counter_ptr): Use noexcept instead of comments. + (_Sp_counted_deleter): Likewise. Use _Sp_ebo_helper. + (_Sp_counted_ptr_inplace): Likewise. + * testsuite/20_util/shared_ptr/cons/51365.cc: New. + * testsuite/20_util/shared_ptr/cons/52924.cc: Add rebind member to + custom allocator and test construction with custom allocator. + * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error + line number. + +2013-04-26 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/23_containers/unordered_set/insert/move_range.cc: Adjust + dialect to -std=gnu++11. + +2013-04-26 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h + (_Insert_base<>::insert<_It>(_It, _It)): Enable move semantics. + * testsuite/23_containers/unordered_set/insert/move_range.cc: New. + +2013-04-26 Paolo Carlini <paolo.carlini@oracle.com> + + * include/c_global/cstdio (gets): Provide only in C++98 and C++11. + * include/c_std/cstdio (gets): Likewise. + * testsuite/27_io/headers/cstdio/functions_std.cc: Adjust. + +2013-04-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57065 + * include/debug/unordered_map (unordered_map, unordered_multimap): + Fix default allocator type. + * include/profile/unordered_map (unordered_map, unordered_multimap): + Likewise. + * include/bits/unordered_map.h: Fix comments. + +2013-04-24 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56905 + * libsupc++/exception_ptr.h (copy_exception): Deprecate and + move implementation to make_exception_ptr. + * include/std/future (_State_base::_M_break_promise): Replace + copy_exception with make_exception_ptr. + * testsuite/18_support/exception_ptr/move.cc: Likewise. + * testsuite/18_support/exception_ptr/rethrow_exception.cc: Likewise. + * testsuite/30_threads/future/members/get2.cc: Likewise. + * testsuite/30_threads/promise/members/set_exception.cc: Likewise. + * testsuite/30_threads/promise/members/set_exception2.cc: Likewise. + * testsuite/30_threads/promise/members/set_value2.cc: Likewise. + * testsuite/30_threads/shared_future/members/get2.cc: Likewise. + +2013-04-22 Jason Merrill <jason@redhat.com> + + * src/c++11/hashtable_c++0x.cc: Include ext/aligned_buffer.h. + + * testsuite/lib/prune.exp (libstdc++-dg-prune): Also ignore "In + substitution" lines. + + * testsuite/20_util/is_assignable/value.cc: Comment out tests involving + function-cv-quals. + * testsuite/20_util/is_constructible/value-2.cc: Likewise. + * testsuite/20_util/reference_wrapper/result_type.cc: Likewise. + * testsuite/20_util/reference_wrapper/typedefs-2.cc: Likewise. + +2013-04-22 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h: Add C++11 allocator support. + * include/bits/hashtable.h: Likewise. + * include/bits/unordered_set.h: Likewise. + * include/bits/unordered_map.h: Likewise. + * include/debug/unordered_set: Likewise. + * include/debug/unordered_map: Likewise. + * include/std/unordered_set: Remove bits/algobase.h + include. Replace bits/alloc_traits.h by ext/alloc_traits.h. + * include/std/unordered_map: Likewise. + * include/ext/throw_allocator.h: Add checks on calls to allocator + construct/destroy. + (std::hash<__gnu_cxx::throw_value_limit>): Add conditional throw. + (std::hash<__gnu_cxx::throw_value_random>): Likewise. + * testsuite/util/regression/rand/priority_queue + /container_rand_regression_test.tcc: Adapt. + * testsuite/util/regression/rand/assoc + /container_rand_regression_test.tcc: Likewise. + * testsuite/util/testsuite_counter_type.h: Add count of destructors. + * testsuite/23_containers/unordered_set + /not_default_constructible_hash_neg.cc: Adjust dg-error line number. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: Likewise. + * testsuite/23_containers/unordered_set/allocator/copy.cc: New. + * testsuite/23_containers/unordered_set/allocator/copy_assign.cc: New. + * testsuite/23_containers/unordered_set/allocator/minimal.cc: New. + * testsuite/23_containers/unordered_set/allocator/move_assign.cc: New. + * testsuite/23_containers/unordered_set/allocator/noexcept.cc: New. + * testsuite/23_containers/unordered_set/allocator/swap.cc: New. + * testsuite/23_containers/unordered_multiset/allocator/copy.cc: New. + * testsuite/23_containers/unordered_multiset/allocator/copy_assign.cc: + New. + * testsuite/23_containers/unordered_multiset/allocator/minimal.cc: New. + * testsuite/23_containers/unordered_multiset/allocator/move_assign.cc: + New. + * testsuite/23_containers/unordered_multiset/allocator/noexcept.cc: New. + * testsuite/23_containers/unordered_multiset/allocator/swap.cc: New. + * testsuite/23_containers/unordered_map/allocator/copy.cc: New. + * testsuite/23_containers/unordered_map/allocator/copy_assign.cc: New. + * testsuite/23_containers/unordered_map/allocator/minimal.cc: New. + * testsuite/23_containers/unordered_map/allocator/move_assign.cc: New. + * testsuite/23_containers/unordered_map/allocator/noexcept.cc: + New. + * testsuite/23_containers/unordered_map/allocator/swap.cc: New. + * testsuite/23_containers/unordered_multimap/allocator/copy.cc: New. + * testsuite/23_containers/unordered_multimap/allocator/copy_assign.cc: + New. + * testsuite/23_containers/unordered_multimap/allocator/minimal.cc: New. + * testsuite/23_containers/unordered_multimap/allocator/move_assign.cc: + New. + * testsuite/23_containers/unordered_multimap/allocator/noexcept.cc: New. + * testsuite/23_containers/unordered_multimap/allocator/swap.cc: New. + +2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> + + * include/std/type_traits (is_signed): Simplify. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Adjust dg-error line numbers. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/declval/requirements/1_neg.cc: Likewise. + +2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> + + N3669 + * include/std/complex (complex<float>::real, complex<float>::imag, + complex<double>::real, complex<double>::imag, + complex<long double>::real, complex<long double>::imag): Declare + as const member functions. + * include/std/type_traits (integral_constant<>::operator value_type): + Likewise. + +2013-04-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/57010 + * include/bits/stl_heap.h (pop_heap): Avoid self move-assignment. + * testsuite/25_algorithms/pop_heap/57010.cc: New. + +2013-04-21 Evgeniy Stepanov <eugenis@google.com> + + * src/c++11/system_error.cc (generic_category_instance): Add + initializer. + (system_category_instance): Likewise. + * src/c++11/future.cc (__fec): Likewise. + +2013-04-20 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/extensions.xml: Fix anachronism. + +2013-04-09 Tom Tromey <tromey@redhat.com> + + * configure, config.h.in: Rebuild. + * configure.ac: Use GLIBCXX_CHECK_SDT_H. Don't check for + sys/sdt.h. + * acinclude.m4 (GLIBCXX_CHECK_SDT_H): New defun. + +2013-04-09 Uros Bizjak <ubizjak@gmail.com> + + * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update. + +2013-04-08 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/libstdc++-prettyprinters/cxx11.cc: Include <memory>. + +2013-04-07 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/Makefile.am: Add ext/aligned_buffer.h + * include/Makefile.in: Regenerate. + * include/ext/aligned_buffer.h: New. + * include/std/future (_Result): Use __aligned_buffer. + * include/bits/forward_list.h (_Fwd_list_node): Likewise. + * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Likewise. + * testsuite/20_util/shared_ptr/cons/43820_neg.cc: Adjust dg-error line + number. + +2013-04-07 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/forward_list.h: Only include required headers. + (forward_list::reference): Define directly, not using __alloc_traits. + (forward_list::const_reference): Likewise. + +2013-04-07 François Dumont <fdumont@gcc.gnu.org> + + * include/std/functional (_Derives_from_unary_function): Remove. + (_Derives_from_binary_function): Remove. + * include/std/type_traits (__sfinae_types): Remove. + (__is_assignable_helper): Adapt. + (__is_convertible_helper): Adapt. + (_GLIBCXX_HAS_NESTED_TYPE): Adapt. + Remove several explicit instantiations of integral_constant. + * testsuite/20_util/reference_wrapper/typedefs-3.cc: Adapt. + * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: + Adapt dg-error line number. + * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc: + Likewise. + * testsuite/20_util/declval/requirements/1_neg.cc: Likewise. + * testsuite/20_util/bind/ref_neg.cc: Likewise. + +2013-04-05 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56841 + * libsupc++/eh_ptr.cc (rethrow_exception): Use get_unexpected() and + get_terminate() accessors. + * libsupc++/eh_throw.cc (__cxa_throw): Likewise. + * libsupc++/eh_terminate.cc: Use mutex when atomic builtins not + available. + * libsupc++/new_handler.cc: Likewise. + +2013-04-04 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.19 version. + +2013-04-03 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56834 + * include/debug/array (tuple_size, tuple_element): Do not declare. + * include/profile/array: Likewise. + * testsuite/23_containers/array/tuple_interface/ + tuple_element_debug_neg.cc: Adjust dg-error line number. + +2013-04-03 Jonathan Wakely <jwakely.gcc@gmail.com> + + * libsupc++/exception (get_terminate(), get_unexpected()): Declare. + * libsupc++/eh_terminate.cc (get_terminate() , set_unexpected()): + Define. + (set_terminate(terminate_handler)): Set atomically. + (set_unexpected(terminate_handler)): Likewise. + * libsupc++/new (get_new_handler()): Declare. + * libsupc++/new_handler.cc (get_new_handler()): Define. + (set_new_handler(new_handler)): Set atomically. + (__new_handler): Use internal linkage. + * libsupc++/new_op.cc (operator new): Use get_new_handler(). + * libsupc++/new_opnt.cc (operator new): Likewise. + * acinclude.m4: Bump libtool_VERSION to 6:19:0. + * configure: Regenerate. + * libsupc++/Makefile.am: Compile above files with -std=gnu++11. + * libsupc++/Makefile.in: Regenerate. + * config/abi/pre/gnu.ver: Add new exports. + * doc/xml/manual/status_cxx2011.xml: Update. + * testsuite/18_support/headers/exception/synopsis.cc: Check accessors + for handlers. + * testsuite/18_support/headers/new/synopsis.cc: Likewise. + * testsuite/18_support/new_handler.cc: New. + * testsuite/18_support/terminate_handler.cc: New. + * testsuite/18_support/unexpected_handler.cc: New. + +2013-04-02 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/appendix_contributing.xml: Remove broken link and + defer to general documentation on contributing to GCC. + * doc/html/*: Regenerate. + +2013-03-30 Gerald Pfeifer <gerald@pfeifer.com> + + * doc/xml/manual/allocator.xml: Adjust link to Dr.Dobb's article. + + * doc/xml/manual/appendix_contributing.xml: Adjust link to GNU + Coding Standards. + + * doc/xml/manual/debug.xml: Adjust link for ThreadSanitizer. + + * doc/xml/manual/debug_mode.xml: Adjust link for SafeSTL. + + * doc/xml/manual/documentation_hacking.xml: Adjust Doxygen link. + + * doc/xml/manual/messages.xml: Adjust link to Java API specs. + + * doc/xml/manual/policy_data_structures: Remove direct link to + IBM Haifa Research Labs. + + * doc/xml/manual/policy_data_structures_biblio.xml: Adjust links + for biblio.maverik_lowerbounds and biblio.nelson96stlpq. + + * doc/xml/manual/profile_mode.xml: Adjust two links to acm.org + papers. + + * doc/xml/manual/shared_ptr.xml: Use canonical address for + www.boost.org. + +2013-03-27 Kai Tietz <ktietz@redhat.com> + + * crossconfig.m4: Add support for cygwin x64 target. + * configure: Regenerated. + +2013-03-25 Kai Tietz <ktietz@redhat.com> + + * testsuite/18_support/50594.cc: For mingw-targets use only static + libstdc++-version. + * testsuite/19_diagnostics/error_category/operators/equal.cc + * testsuite/19_diagnostics/error_code/cons/1.cc + * testsuite/19_diagnostics/error_code/operators/bool.cc + * testsuite/19_diagnostics/error_code/operators/equal.cc + * testsuite/19_diagnostics/error_code/operators/not_equal.cc + * testsuite/19_diagnostics/error_condition/cons/1.cc + * testsuite/19_diagnostics/error_condition/operators/bool.cc + * testsuite/19_diagnostics/error_condition/operators/equal.cc + * testsuite/19_diagnostics/error_condition/operators/not_equal.cc + * testsuite/23_containers/set/requirements/exception/basic.cc + * testsuite/26_numerics/headers/cmath/c99_classification_macros_c.cc + * testsuite/lib/dg-options.exp (dg-additional-options): New option. + +2013-03-24 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56170 + * include/ext/debug_allocator.h (debug_allocator): Add missing members + to meet allocator requirements. + * testsuite/ext/debug_allocator/56170.cc: New. + +2013-03-22 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56678 + * include/std/chrono (__is_ratio): Uglify T. + +2013-03-18 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/55977 (partial, std::vector and std::deque bits) + * include/bits/stl_vector.h (_M_range_initialize(_InputIterator, + _InputIterator, std::input_iterator_tag)): Use emplace_back. + * include/bits/deque.tcc (_M_range_initialize(_InputIterator, + _InputIterator, std::input_iterator_tag)): Likewise. + * testsuite/23_containers/vector/cons/55977.cc: New. + * testsuite/23_containers/deque/cons/55977.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + +2013-03-17 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/55979 + * include/bits/stl_list.h (_M_initialize_dispatch(_InputIterator, + _InputIterator, __false_type)): Use emplace_back. + * testsuite/23_containers/list/cons/55979.cc: New. + * testsuite/23_containers/list/modifiers/1.h: Adjust. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Adjust dg-error line number. + +2013-03-16 Jason Merrill <jason@redhat.com> + + PR c++/55017 + * testsuite/20_util/pair/piecewise2.cc (test01): Use std::move. + +2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56468 + * libsupc++/exception_ptr.h (type_info): Declare. + +2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56002 + * include/std/mutex (lock_guard, unique_lock, lock): Define without + depending on _GLIBCXX_HAS_GTHREADS. + * testsuite/30_threads/lock_guard/cons/1.cc: Run on all targets. + +2013-03-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56492 + * include/std/future (__future_base::_Result): Add result_type + typedef. + (__future_base::_S_allocate_result): Overload for std::allocator. + (__future_base::_Task_setter): Use _Result::result_type instead of + deducing the type from the task. + (__future_base::_Task_state): Store allocator to allow shared state + to be reset. Replace std::function with member of target object type + accessed via ... + (__future_base::_Task_state_base): New abstract base class. + (__future_base::_Task_state_base::_M_run): New virtual function to + invoke type-erased target object. + (__future_base::_Task_state_base::_M_reset): New virtual function to + create new shared_state using same target object and allocator. + (__future_base::__create_task_state): Allocate a new _Task_state. + (packaged_task::packaged_task): Use __create_task_state. + (packaged_task::reset): Use _Task_state_base::_M_reset. + * testsuite/30_threads/packaged_task/cons/56492.cc: New. + +2013-03-15 Tom Tromey <tromey@redhat.com> + + * libsupc++/unwind-cxx.h: Include sys/sdt.h if detected. + (PROBE2): New macro. + * libsupc++/eh_throw.cc (__cxa_throw, __cxa_rethrow): Add probe. + * libsupc++/eh_catch.cc (__cxa_begin_catch): Add probe. + * configure.ac: Check for sys/sdt.h. + * configure, config.h.in: Rebuild. + +2013-03-14 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56613 + * include/bits/stl_tree.h (_Rb_tree::_M_create_node): Use + allocator_traits instead of calling construct directly. + * testsuite/23_containers/map/56613.cc: New. + +2013-03-13 Benjamin Kosnik <bkoz@redhat.com> + + * doc/html/*: Regenerate. + +2013-03-13 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56609 + * include/std/type_traits (is_fundamental): Add std::nullptr_t. + * testsuite/20_util/is_fundamental/value.cc: Extend. + * testsuite/20_util/is_compound/value.cc: Likewise. + +2013-03-09 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/20_util/function_objects/mem_fn/55463.cc: Avoid + -Wunused warnings. + +2013-03-08 Benjamin Kosnik <bkoz@redhat.com> + + * include/bits/memoryfwd.h: New. Centralize forward declarations. + * include/bits/algorithmfwd.h: Consistent comments. + * include/bits/localefwd.h: Same. + * include/ext/vstring_fwd.h: Same. + * include/parallel/algorithmfwd.h: Same. + * include/parallel/numericfwd.h: Same. + * include/std/iosfwd: Same. + + * include/bits/alloc_traits.h: Include memoryfwd.h, remove allocator + forward decl. + * include/ext/alloc_traits.h: Remove allocator forward decl. + * include/bits/stl_construct.h: Same. + * include/bits/stringfwd.h: Include memoryfwd.h, remove allocator + forward decl. Consistent comments. + + * doc/doxygen/user.cfg.in (TEMPLATE_RELATIONS): To NO. + + * include/Makefile.am (bits_headers): Add memoryfwd.h. + * include/Makefile.in: Regenerate. + * configure: Same. + +2013-03-08 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/vector.tcc (vector<>operator=(const vector<>&): + Reset pointers after deallocation when memory can be reused. + * testsuite/23_containers/vector/allocator/minimal.cc: Insert + elements to really challenge C++11 allocator integration. + * testsuite/23_containers/vector/allocator/copy.cc: Likewise. + * testsuite/23_containers/vector/allocator/copy_assign.cc: + Likewise. + * testsuite/23_containers/vector/allocator/move_assign.cc: + Likewise. + * testsuite/23_containers/vector/allocator/swap.cc: Likewise and + swap vector back before checks on memory/personality mapping are + performed. + * testsuite/23_containers/forward_list/allocator/minimal.cc: + Insert element to really challenge C++11 allocator integration. + * testsuite/23_containers/forward_list/allocator/copy.cc: + Likewise. + * testsuite/23_containers/forward_list/allocator/copy_assign.cc: + Likewise. + * testsuite/23_containers/forward_list/allocator/move_assign.cc: + Likewise. + * testsuite/23_containers/forward_list/allocator/swap.cc: Likewise + and swap forward_list back before checks on memory/personality + mapping are performed. + +2013-03-07 Jakub Jelinek <jakub@redhat.com> + + * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: + Likewise. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/s390-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/s390x-linux-gnu/baseline_symbols.txt: Likewise. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Likewise. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Likewise. + +2013-03-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * scripts/extract_symvers.pl: Omit symbols bound to base + versions. + * scripts/extract_symvers.in: Likewise. + * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerate. + * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. + +2013-03-04 Ulrich Drepper <drepper@gmail.com> + + * include/ext/random (__gnu_cxx::von_mises_distribution<>): + Optimize generation function by pulling computation of __r into the + constructor for param_type. Also compare _M_mu in operator==. + Fix comment. + +2013-03-02 Ulrich Drepper <drepper@gmail.com> + + Add triangular and von Mises distributions. + * include/ext/random: Include <ext/cmath>. + Add __gnu_cxx::triangular_distribution<> and + __gnu_cxx::von_mises_distribution<> classes. + * include/ext/random.tcc: Add out-of-line functions for + __gnu_cxx::triangular_distribution<> and + __gnu_cxx::von_mises_distribution<>. + * testsuite/ext/triangular_distribution/cons/default.cc: New file. + * testsuite/ext/triangular_distribution/cons/parms.cc: New file. + * testsuite/ext/triangular_distribution/operators/serialize.cc: + New file. + * testsuite/ext/triangular_distribution/operators/equal.cc: + New file. + * testsuite/ext/triangular_distribution/operators/inequal.cc: + New file. + * testsuite/ext/triangular_distribution/requirements/typedefs.cc: + New file. + * testsuite/ext/triangular_distribution/requirements/ + explicit_instantiation/1.cc: New file. + * testsuite/ext/von_mises_distribution/cons/default.cc: New file. + * testsuite/ext/von_mises_distribution/cons/parms.cc: New file. + * testsuite/ext/von_mises_distribution/operators/serialize.cc: + New file. + * testsuite/ext/von_mises_distribution/operators/equal.cc: New file. + * testsuite/ext/von_mises_distribution/operators/inequal.cc: + New file. + * testsuite/ext/von_mises_distribution/requirements/typedefs.cc: + New file. + * testsuite/ext/von_mises_distribution/requirements/ + explicit_instantiation/1.cc: New file. + + Add math constants. + * include/Makefile.am (ext_headers): Add cmath. + * include/Makefile.in: Regenerated. + * include/ext/cmath: New file. + +2013-03-01 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + * config/abi/post/solaris2.9/baseline_symbols.txt: Regenerate. + * config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/amd64/baseline_symbols.txt: Likewise. + * config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt: Likewise. + +2013-02-26 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56012 + * include/bits/atomic_base.h (atomic_flag): Fix narrowing conversion. + * testsuite/29_atomics/atomic/operators/56012.cc: New. + + PR libstdc++/56011 + * include/std/atomic (atomic<bool>::operator=(bool) volatile): Add + missing overload. + * testsuite/29_atomics/atomic/operators/56011.cc: New. + +2013-02-25 Jason Merrill <jason@redhat.com> + + * configure.ac: Check for __cxa_thread_atexit_impl. + * libsupc++/atexit_thread.cc (__cxa_thread_atexit): Just forward + to it if available. + * config.h.in, configure: Regenerate. + +2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/streambuf (basic_streambuf): Use injected class name + instead of non-standard __streambuf_type typedef. Fix unclosed Doxygen + group. + +2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/html/faq.html: Fix spelling. + * doc/xml/faq.xml: Likewise. + * include/bits/basic_ios.h: Likewise. + * include/bits/regex.h: Likewise. + * include/std/istream: Likewise. + * include/std/streambuf: Likewise. + +2013-02-20 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/23_containers/unordered_set/55043.cc: Add missing + namespace qualification. + * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. + +2013-02-19 Benjamin Kosnik <bkoz@redhat.com> + + * doc/doxygen/user.cfg.in: Set __cplusplus to 201103L. Change to + _GLIBCXX_INCLUDE_AS_CXX11. DIRECTORY_GRAPH, MARKDOWN_SUPPORT, + AUTOLINK_SUPPORT to NO. Update to doxygen 1.8.3.1. + * include/bits/stl_pair.h: Add to utilities group. + * include/std/tuple: Same. + * include/std/typeindex: Same. + + * include/bits/stringfwd.h: Fix markup. + * include/std/limits: Same. + * include/std/type_traits: Same. + * include/tr1/memory: Same. + * include/tr1/regex: Same. + * scripts/run_doxygen: Comment. + * testsuite/20_util/uses_allocator/cons_neg.cc: Fixup line numbers. + +2013-02-14 Jason Merrill <jason@redhat.com> + + * testsuite/18_support/quick_exit/quick_exit.cc: #if out the whole + test if unsupported. + +2013-02-13 Marc Glisse <marc.glisse@inria.fr> + + PR libstdc++/56111 + * include/std/complex (complex): Undefine. + * include/c_compatibility/complex.h (complex): Only undefine if + <complex> has been included. + * testsuite/26_numerics/complex/56111.cc: New testcase. + +2013-02-13 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_Hash_code_base): Restore + default constructor protected. + * include/bits/hashtable.h: static assert that _Hash_code_base has + a default constructor available through inheritance. + +2013-02-12 Paolo Carlini <paolo.carlini@oracle.com> + + * include/c_std/cstdlib (at_quick_exit, quick_exit): Provide in + C++11 mode. + +2013-02-12 Julian Brown <julian@codesourcery.com> + + * testsuite/22_locale/time_get/get_weekday/char/38081-1.cc (test01): + Don't expect dots after abbreviated weekday names for ru_RU for + glibc versions >= 2.17. + * testsuite/22_locale/time_get/get_weekday/char/38081-2.cc (test01): + Likewise. + +2013-02-12 Paolo Carlini <paolo.carlini@oracle.com> + + * include/bits/random.tcc (__transform): Remove. + (__normalize): Add. + (discrete_distribution<>::param_type::_M_initialize): Adjust. + (piecewise_constant_distribution<>::param_type::_M_initialize): + Likewise. + (piecewise_linear_distribution<>::param_type::_M_initialize): + Likewise. + +2013-02-11 Benjamin Kosnik <bkoz@redhat.com> + + * src/c++11/Makefile.am (hashtable_c++0x.lo, hashtable_c++0x.o): + Use -fimplicit-templates. + * src/c++11/Makefile.in: Regenerate. + * src/c++11/hashtable_c++0x.cc: Remove instantiation for + std::lower_bound template. + +2013-02-11 Paolo Carlini <paolo.carlini@oracle.com> + + * include/c_std/cstdlib (at_quick_exit, quick_exit): Do not declare. + * include/c_global/cstdlib (at_quick_exit, quick_exit): Declare only + in C++11 mode and if available in the underlying C library. + * testsuite/18_support/quick_exit/quick_exit.cc: Compile with + -std=gnu++11; check _GLIBCXX_HAVE_AT_QUICK_EXIT and + _GLIBCXX_HAVE_QUICK_EXIT. + +2013-02-11 Benjamin Kosnik <bkoz@redhat.com> + + * doc/html/*: Regenerate. + +2013-02-11 Jason Merrill <jason@redhat.com> + + * linkage.m4 (GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE): New. + (GLIBCXX_CHECK_STDLIB_SUPPORT): Check for atexit and at_quick_exit. + * config.h.in, configure: Regenerate. + * include/c_std/cstdlib: Add atexit and at_quick_exit. + * include/c_global/cstdlib: Add atexit and at_quick_exit. + * testsuite/18_support/quick_exit/quick_exit.cc: New. + +2013-02-11 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56282 + Revert: + 2013-02-06 Edward Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/56193 + * include/bits/basic_ios.h: Replace operator void*() const + with explicit operator bool() const in C++11 and greater. + * testsuite/27_io/basic_ios/pr56193.cc: New file. + +2013-02-10 François Dumont <fdumont@gcc.gnu.org> + Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/containers.xml: Add section on unordered containers. + * doc/xml/manual/using.xml: Fix incomplete sentence. + +2013-02-10 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56267 + * include/bits/hashtable.h (__cache_default): Check if hash function + is copy assignable. + * testsuite/23_containers/unordered_set/56267.cc: New. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust + dg-error line number. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Likewise. + + PR libstdc++/56278 + * include/bits/hashtable_policy.h (_Hash_code_base): Make default + constructor public. + * testsuite/23_containers/unordered_set/56278.cc: New. + +2013-02-09 François Dumont <fdumont@gcc.gnu.org> + + * include/tr1/bessel_function.tcc (__cyl_bessel_ij_series): Code + simplification. + +2013-02-08 Edward Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/56216 + * include/tr1/special_function_util.h: Remove spurious const + from numeric arguments. + * include/tr1/riemann_zeta.tcc: Likewise. + * include/tr1/exp_integral.tcc: Likewise. + * include/tr1/bessel_function.tcc: Likewise. + * include/tr1/hypergeometric.tcc: Likewise. + * include/tr1/modified_bessel_func.tcc: Likewise. + * include/tr1/poly_laguerre.tcc: Likewise. + * include/tr1/gamma.tcc: Likewise. + * include/tr1/legendre_function.tcc: Likewise. + * include/tr1/poly_hermite.tcc: Likewise. + * include/tr1/ell_integral.tcc: Likewise. + * include/tr1/bessel_function.tcc (__cyl_bessel_ij_series): + If argument is zero return function value. + * testsuite/tr1/5_numerical_facilities/special_functions/ + 08_cyl_bessel_i/pr56216.cc: New. + +2013-02-07 Paolo Carlini <paolo.carlini@oracle.com> + + * testsuite/27_io/basic_ios/pr56193.cc: Tweak. + +2013-02-06 Edward Smith-Rowland <3dw4rd@verizon.net> + + PR libstdc++/56193 + * include/bits/basic_ios.h: Replace operator void*() const + with explicit operator bool() const in C++11 and greater. + * testsuite/27_io/basic_ios/pr56193.cc: New file. + +2013-02-04 Dodji Seketeli <dodji@redhat.com> + + Add missing explicit instantiation for std::lower_bound template + * libstdc++-v3/src/c++11/hashtable_c++0x.cc (namespace std): Add + missing instantiation for std::lower_bound template. + +2013-02-04 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/functional_hash.h (std::__is_fast_hash<>): New. + * include/bits/basic_string.h: Specialize previous to mark + std::hash for string types as slow. + * include/bits/hashtable.h (__cache_default): Replace is_integral + with __is_fast_hash. + * src/c++11/hash_c++0x.cc: Add type_traits include. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Adapt dg-error line number. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: Likewise. + +2013-02-04 Manuel López-Ibáñez <manu@gcc.gnu.org> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56202 (again) + * include/bits/random.tcc (binomial_distribution<>:: + _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Fix thinko + in previous commit. + + * include/bits/random.h: Fix comment typo. + +2013-02-04 Manuel López-Ibáñez <manu@gcc.gnu.org> + Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56202 + * include/bits/random.tcc (binomial_distribution<>:: + _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid + division by zero. + +2013-02-03 Richard Sandiford <rdsandiford@googlemail.com> + + Update copyright years. + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc, + testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc, + testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc, + testsuite/23_containers/deque/requirements/dr438/insert_neg.cc, + testsuite/23_containers/list/requirements/dr438/assign_neg.cc, + testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc, + testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc, + testsuite/23_containers/list/requirements/dr438/insert_neg.cc, + testsuite/23_containers/vector/requirements/dr438/assign_neg.cc, + testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc, + testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc, + testsuite/23_containers/vector/requirements/dr438/insert_neg.cc, + testsuite/29_atomics/atomic/cons/assign_neg.cc, + testsuite/29_atomics/atomic/cons/copy_neg.cc, + testsuite/29_atomics/atomic_integral/cons/assign_neg.cc, + testsuite/29_atomics/atomic_integral/cons/copy_neg.cc, + testsuite/29_atomics/atomic_integral/operators/bitwise_neg.cc, + testsuite/29_atomics/atomic_integral/operators/decrement_neg.cc, + testsuite/29_atomics/atomic_integral/operators/increment_neg.cc: + Update lines in dg error matches. + +2013-02-03 Richard Sandiford <rdsandiford@googlemail.com> + + * config/os/mingw32/ctype_inline.h: Fix copyright typo. + +2013-02-01 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h + (_Prime_rehash_policy::_M_next_bkt) + (_Prime_rehash_policy::_M_need_rehash): Move definition... + * src/c++11/hashtable_c++0x.cc: ... here. + * src/shared/hashtable-aux.cc: Remove c++config.h include. + * config/abi/gnu.ver (GLIBCXX_3.4.18): Export _Prime_rehash_policy + symbols. + +2013-01-29 Jason Merrill <jason@redhat.com> + + PR libstdc++/54314 + * config/abi/pre/gnu.ver: Don't export construction vtables. + * config/abi/pre/gnu-versioned-namespace.ver: Likewise. + +2013-01-28 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/56112 + * include/bits/hashtable_policy.h (insert(_Pair&&)): Use _M_emplace + to construct value_type explicitly before trying to extract the key. + * testsuite/23_containers/unordered_map/cons/56112.cc: New. + +2013-01-28 François Dumont <fdumont@gcc.gnu.org> + + * include/bits/hashtable_policy.h (_Local_iterator_base): Use + _Hashtable_ebo_helper to embed functors into the local_iterator + when necessary. Pass information about functors involved in hash + code by copy. + * include/bits/hashtable.h (__cache_default): Do not cache for + builtin integral types unless the hash functor is not noexcept + qualified or is not default constructible. Adapt static assertions + and local iterator instantiations. + * include/debug/unordered_set + (std::__debug::unordered_set<>::erase): Detect local iterators to + invalidate using contained node rather than generating a dummy + local_iterator instance. + (std::__debug::unordered_multiset<>::erase): Likewise. + * include/debug/unordered_map + (std::__debug::unordered_map<>::erase): Likewise. + (std::__debug::unordered_multimap<>::erase): Likewise. + * testsuite/performance/23_containers/insert_erase/41975.cc: Test + std::tr1 and std versions of unordered_set regardless of any + macro. Add test on default cache behavior. + * testsuite/performance/23_containers/insert/54075.cc: Likewise. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: + Adapt line number. + * testsuite/23_containers/unordered_set/ + not_default_constructible_hash_neg.cc: New. + * testsuite/23_containers/unordered_set/buckets/swap.cc: New. + +2013-01-24 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/56085 + * include/std/complex (pow(const complex<>&, int)): Avoid __n + signed overflow. + +2013-01-22 Jakub Jelinek <jakub@redhat.com> + + * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc: + Tightten scan-assembler-times regexps, add dg-additional-options for + ia32, add -g0 -fno-exceptions -fno-asynchronous-unwind-tables to + dg-options. + +2013-01-12 Andi Kleen <ak@linux.intel.com> + Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55233 + * include/bits/atomic_base.h (__memory_order_modifier): Add + __memory_order_mask, __memory_order_modifier_mask, + __memory_order_hle_acquire, __memory_order_hle_release. + (operator|,operator&): Add. + (__cmpexch_failure_order): Rename to __cmpexch_failure_order2. + (__cmpexch_failure_order): Add. + (clear, store, load, compare_exchange_weak, compare_exchange_strong): + Handle flags. + * testsuite/29_atomics/atomic_flag/test_and_set/explicit-hle.cc: + Add. + +2013-01-19 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55861 + * include/std/future (_State_base::_S_check(const shared_ptr<T>&)): + Fix return type. + (__basic_future::_M_get_result()): Const qualify. + (shared_future::get()): Likewise. + * testsuite/30_threads/shared_future/members/get.cc: Use const + objects. + +2013-01-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55043 (again) + * include/bits/alloc_traits.h (allocator_traits::construct): Disable + unless construction would be well-formed. + (__allow_copy_cons, __check_copy_constructible): Define. + * include/bits/unordered_map.h (__check_copy_constructible): Use as + base class so copy constructor will be deleted if appropriate. + (is_copy_constructible): Remove specialization. + * include/bits/unordered_set.h: Likewise. + * include/debug/unordered_map.h: Undo previous commit. Default copy + and move constructors. + * include/debug/unordered_set.h: Likewise. + * include/profile/unordered_map.h: Undo previous commit. + * include/profile/unordered_set.h: Likewise. + * testsuite/23_containers/unordered_map/55043.cc: Fix test. + * testsuite/23_containers/unordered_multimap/55043.cc: Likewise. + * testsuite/23_containers/unordered_multiset/55043.cc: Likewise. + * testsuite/23_containers/unordered_set/55043.cc: Likewise. + * testsuite/23_containers/unordered_map/requirements/53339.cc: XFAIL, + cannot support incomplete types. + * testsuite/23_containers/unordered_multimap/requirements/53339.cc: + Likewise. + +2013-01-16 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55043 + * include/std/unordered_map: Include alloc_traits.h + * include/std/unordered_set: Likewise. + * include/bits/alloc_traits.h: Define __is_copy_insertable. + * include/bits/unordered_map.h: Use it. + * include/bits/unordered_set.h: Likewise. + * include/debug/unordered_map.h: Likewise. + * include/debug/unordered_set.h: Likewise. + * include/profile/unordered_map.h: Likewise. + * include/profile/unordered_set.h: Likewise. + * include/bits/hashtable.h: Fix comment typos. + * testsuite/23_containers/unordered_map/55043.cc: New. + * testsuite/23_containers/unordered_multimap/55043.cc: New. + * testsuite/23_containers/unordered_multiset/55043.cc: New. + * testsuite/23_containers/unordered_set/55043.cc: New. + +2013-01-03 Janis Johnson <janisjo@codesourcery.com> + + * testsuite/lib/gdb-test.exp (gdb_batch_check): Catch error running + gdb command. + +2013-01-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/status_cxx2011.xml: Document that N3189 is missing. + +2013-01-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55908 + * include/std/functional (_Mem_fn::operator()): Fix constraints to + avoid ambiguity. + * testsuite/20_util/function_objects/mem_fn/55908.cc: New. + * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line numbers. + +2013-01-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> + + PR libstdc++/55594 + * acinclude.m4 (GLIBCXX_CHECK_ASSEMBLER_HWCAP): Restrict test to + Solaris targets. + * configure: Regenerate. + +2013-01-07 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55847 + * src/c++11/shared_ptr.cc (bad_weak_ptr::what()): Correct string. + * testsuite/20_util/shared_ptr/cons/weak_ptr_expired.cc: Verify + string. + + PR libstdc++/55728 + * include/std/functional (bad_function_call::what()): Declare. + * src/c++11/functional.cc (bad_function_call::what()): Define. + * config/abi/pre/gnu.ver (bad_function_call::what()): Export. + * testsuite/20_util/bad_function_call/what.cc: New. + +2013-01-06 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/bits/unordered_map.h: Fix typo in comments. + * doc/xml/manual/status_cxx2011.xml: Add implementation-defined bucket + counts for unordered associative containers. + +2013-01-06 Jonathan Wakely <jwakely.gcc@gmail.com> + + * doc/xml/manual/abi.xml: Update library and symbol versions. + +2013-01-06 Richard Sandiford <rdsandiford@googlemail.com> + + * include/ext/pb_ds/detail/splay_tree_/insert_fn_imps.hpp: Fix typo + in copyright years. + * testsuite/22_locale/time_get/get_weekday/wchar_t/3.cc: Likewise. + + +Copyright (C) 2013 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. diff --git a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt index fb58c48cfce..291c753f661 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/amd64/baseline_symbols.txt @@ -388,6 +388,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 +FUNC:_ZNKSt16bad_array_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 @@ -401,6 +402,7 @@ FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4 +FUNC:_ZNKSt20bad_array_new_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10 @@ -1178,6 +1180,7 @@ FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt11regex_errorC1ENSt15regex_constants10error_typeE@@GLIBCXX_3.4.20 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15 @@ -1753,6 +1756,9 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Em@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4 @@ -1873,6 +1879,9 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@G FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt20bad_array_new_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt22condition_variable_anyC1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyD1Ev@@GLIBCXX_3.4.11 @@ -2177,13 +2186,16 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvmm@@CXXABI_1.3.5 +FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 +FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvmm@@CXXABI_1.3.5 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 +FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@@GLIBCXX_3.4.9 @@ -2221,6 +2233,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 +FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 @@ -2443,6 +2456,8 @@ FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_thread_atexit@@CXXABI_1.3.7 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_throw_bad_array_length@@CXXABI_1.3.8 +FUNC:__cxa_throw_bad_array_new_length@@CXXABI_1.3.8 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 @@ -2467,6 +2482,7 @@ OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 +OBJECT:0:CXXABI_1.3.8 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2481,6 +2497,7 @@ OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.18 OBJECT:0:GLIBCXX_3.4.19 OBJECT:0:GLIBCXX_3.4.2 +OBJECT:0:GLIBCXX_3.4.20 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -2922,6 +2939,7 @@ OBJECT:1:_ZSt7nothrow@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 +OBJECT:21:_ZTSSt16bad_array_length@@CXXABI_1.3.8 OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4 OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4 @@ -2996,6 +3014,7 @@ OBJECT:24:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE OBJECT:24:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15underflow_error@@GLIBCXX_3.4 +OBJECT:24:_ZTISt16bad_array_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt16invalid_argument@@GLIBCXX_3.4 OBJECT:24:_ZTISt17bad_function_call@@GLIBCXX_3.4.15 OBJECT:24:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4 @@ -3008,6 +3027,7 @@ OBJECT:24:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 +OBJECT:24:_ZTISt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt5ctypeIwE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -3030,6 +3050,7 @@ OBJECT:24:_ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBC OBJECT:24:_ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9strstream@@GLIBCXX_3.4 +OBJECT:25:_ZTSSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:272:_ZSt4cerr@@GLIBCXX_3.4 OBJECT:272:_ZSt4clog@@GLIBCXX_3.4 OBJECT:272:_ZSt4cout@@GLIBCXX_3.4 @@ -3201,8 +3222,10 @@ OBJECT:40:_ZTVSt14overflow_error@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15underflow_error@@GLIBCXX_3.4 +OBJECT:40:_ZTVSt16bad_array_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt16invalid_argument@@GLIBCXX_3.4 OBJECT:40:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt8bad_cast@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt index 4b047846641..40c0e577c5f 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/baseline_symbols.txt @@ -388,6 +388,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 +FUNC:_ZNKSt16bad_array_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 @@ -401,6 +402,7 @@ FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4 +FUNC:_ZNKSt20bad_array_new_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10 @@ -1178,6 +1180,7 @@ FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt11regex_errorC1ENSt15regex_constants10error_typeE@@GLIBCXX_3.4.20 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15 @@ -1753,6 +1756,9 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Ej@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4 @@ -1873,6 +1879,9 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@G FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt20bad_array_new_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt22condition_variable_anyC1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyD1Ev@@GLIBCXX_3.4.11 @@ -2177,13 +2186,16 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5 +FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 +FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvjj@@CXXABI_1.3.5 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 +FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9 @@ -2221,6 +2233,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 +FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 @@ -2443,6 +2456,8 @@ FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_thread_atexit@@CXXABI_1.3.7 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_throw_bad_array_length@@CXXABI_1.3.8 +FUNC:__cxa_throw_bad_array_new_length@@CXXABI_1.3.8 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 @@ -2467,6 +2482,7 @@ OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 +OBJECT:0:CXXABI_1.3.8 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2481,6 +2497,7 @@ OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.18 OBJECT:0:GLIBCXX_3.4.19 OBJECT:0:GLIBCXX_3.4.2 +OBJECT:0:GLIBCXX_3.4.20 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -2550,6 +2567,7 @@ OBJECT:12:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE OBJECT:12:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt15underflow_error@@GLIBCXX_3.4 +OBJECT:12:_ZTISt16bad_array_length@@CXXABI_1.3.8 OBJECT:12:_ZTISt16invalid_argument@@GLIBCXX_3.4 OBJECT:12:_ZTISt17bad_function_call@@GLIBCXX_3.4.15 OBJECT:12:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4 @@ -2562,6 +2580,7 @@ OBJECT:12:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 +OBJECT:12:_ZTISt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:12:_ZTISt5ctypeIwE@@GLIBCXX_3.4 OBJECT:12:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:12:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -3008,13 +3027,16 @@ OBJECT:20:_ZTVSt14overflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15underflow_error@@GLIBCXX_3.4 +OBJECT:20:_ZTVSt16bad_array_length@@CXXABI_1.3.8 OBJECT:20:_ZTVSt16invalid_argument@@GLIBCXX_3.4 OBJECT:20:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:20:_ZTVSt8bad_cast@@GLIBCXX_3.4 OBJECT:20:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:20:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:21:_ZTSSt16bad_array_length@@CXXABI_1.3.8 OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4 OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4 @@ -3035,6 +3057,7 @@ OBJECT:24:_ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBC OBJECT:24:_ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:25:_ZTSSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:28:_ZTSSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:28:_ZTSSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:28:_ZTTSd@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt index ff69637851f..c4a778d6d5b 100644 --- a/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.10/sparcv9/baseline_symbols.txt @@ -388,6 +388,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 +FUNC:_ZNKSt16bad_array_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 @@ -401,6 +402,7 @@ FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4 +FUNC:_ZNKSt20bad_array_new_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10 @@ -1178,6 +1180,7 @@ FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt11regex_errorC1ENSt15regex_constants10error_typeE@@GLIBCXX_3.4.20 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15 @@ -1566,8 +1569,6 @@ FUNC:_ZNSt15_List_node_base7_M_hookEPS_@@GLIBCXX_3.4.14 FUNC:_ZNSt15_List_node_base7reverseEv@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base8transferEPS_S0_@@GLIBCXX_3.4 FUNC:_ZNSt15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 -FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19 -FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19 FUNC:_ZNSt15__exception_ptr13exception_ptr4swapERS0_@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptr13exception_ptrC1EMS0_FvvE@@CXXABI_1.3.3 FUNC:_ZNSt15__exception_ptr13exception_ptrC1ERKS0_@@CXXABI_1.3.3 @@ -1755,6 +1756,9 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Em@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4 @@ -1875,6 +1879,9 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@G FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt20bad_array_new_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt22condition_variable_anyC1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt22condition_variable_anyD1Ev@@GLIBCXX_3.4.11 @@ -1905,6 +1912,8 @@ FUNC:_ZNSt6__norm15_List_node_base7reverseEv@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9 FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14 FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11 +FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19 +FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19 FUNC:_ZNSt6gslice8_IndexerC1EmRKSt8valarrayImES4_@@GLIBCXX_3.4 FUNC:_ZNSt6gslice8_IndexerC2EmRKSt8valarrayImES4_@@GLIBCXX_3.4 FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4 @@ -2177,13 +2186,16 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvmm@@CXXABI_1.3.5 +FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 +FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvmm@@CXXABI_1.3.5 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 +FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@@GLIBCXX_3.4.9 @@ -2221,6 +2233,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 +FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 @@ -2443,6 +2456,8 @@ FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_thread_atexit@@CXXABI_1.3.7 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_throw_bad_array_length@@CXXABI_1.3.8 +FUNC:__cxa_throw_bad_array_new_length@@CXXABI_1.3.8 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 @@ -2467,6 +2482,7 @@ OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 +OBJECT:0:CXXABI_1.3.8 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2481,6 +2497,7 @@ OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.18 OBJECT:0:GLIBCXX_3.4.19 OBJECT:0:GLIBCXX_3.4.2 +OBJECT:0:GLIBCXX_3.4.20 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -2922,6 +2939,7 @@ OBJECT:1:_ZSt7nothrow@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 +OBJECT:21:_ZTSSt16bad_array_length@@CXXABI_1.3.8 OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4 OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4 @@ -2996,6 +3014,7 @@ OBJECT:24:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE OBJECT:24:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15underflow_error@@GLIBCXX_3.4 +OBJECT:24:_ZTISt16bad_array_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt16invalid_argument@@GLIBCXX_3.4 OBJECT:24:_ZTISt17bad_function_call@@GLIBCXX_3.4.15 OBJECT:24:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4 @@ -3008,6 +3027,7 @@ OBJECT:24:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 +OBJECT:24:_ZTISt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt5ctypeIwE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -3030,6 +3050,7 @@ OBJECT:24:_ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBC OBJECT:24:_ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9strstream@@GLIBCXX_3.4 +OBJECT:25:_ZTSSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:272:_ZSt4cerr@@GLIBCXX_3.4 OBJECT:272:_ZSt4clog@@GLIBCXX_3.4 OBJECT:272:_ZSt4cout@@GLIBCXX_3.4 @@ -3201,8 +3222,10 @@ OBJECT:40:_ZTVSt14overflow_error@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15underflow_error@@GLIBCXX_3.4 +OBJECT:40:_ZTVSt16bad_array_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt16invalid_argument@@GLIBCXX_3.4 OBJECT:40:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt8bad_cast@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt index 63c0ec55b24..a1dfa30bb48 100644 --- a/libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.9/baseline_symbols.txt @@ -387,6 +387,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 +FUNC:_ZNKSt16bad_array_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 @@ -400,6 +401,7 @@ FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4 +FUNC:_ZNKSt20bad_array_new_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10 @@ -1177,6 +1179,7 @@ FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt11regex_errorC1ENSt15regex_constants10error_typeE@@GLIBCXX_3.4.20 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15 @@ -1740,6 +1743,9 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Ej@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4 @@ -1853,6 +1859,9 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@G FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt20bad_array_new_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPKjbj@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPiPKjbj@@GLIBCXX_3.4 @@ -2149,13 +2158,16 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvjj@@CXXABI_1.3.5 +FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 +FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvjj@@CXXABI_1.3.5 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 +FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_i@@GLIBCXX_3.4.9 @@ -2193,6 +2205,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 +FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 @@ -2415,6 +2428,8 @@ FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_thread_atexit@@CXXABI_1.3.7 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_throw_bad_array_length@@CXXABI_1.3.8 +FUNC:__cxa_throw_bad_array_new_length@@CXXABI_1.3.8 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 @@ -2481,6 +2496,7 @@ OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 +OBJECT:0:CXXABI_1.3.8 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2495,6 +2511,7 @@ OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.18 OBJECT:0:GLIBCXX_3.4.19 OBJECT:0:GLIBCXX_3.4.2 +OBJECT:0:GLIBCXX_3.4.20 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -2562,6 +2579,7 @@ OBJECT:12:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE OBJECT:12:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt15underflow_error@@GLIBCXX_3.4 +OBJECT:12:_ZTISt16bad_array_length@@CXXABI_1.3.8 OBJECT:12:_ZTISt16invalid_argument@@GLIBCXX_3.4 OBJECT:12:_ZTISt17bad_function_call@@GLIBCXX_3.4.15 OBJECT:12:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4 @@ -2574,6 +2592,7 @@ OBJECT:12:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:12:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 +OBJECT:12:_ZTISt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:12:_ZTISt5ctypeIwE@@GLIBCXX_3.4 OBJECT:12:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:12:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -3015,13 +3034,16 @@ OBJECT:20:_ZTVSt14overflow_error@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt15underflow_error@@GLIBCXX_3.4 +OBJECT:20:_ZTVSt16bad_array_length@@CXXABI_1.3.8 OBJECT:20:_ZTVSt16invalid_argument@@GLIBCXX_3.4 OBJECT:20:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15 +OBJECT:20:_ZTVSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:20:_ZTVSt8bad_cast@@GLIBCXX_3.4 OBJECT:20:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:20:_ZTVSt9bad_alloc@@GLIBCXX_3.4 OBJECT:20:_ZTVSt9exception@@GLIBCXX_3.4 +OBJECT:21:_ZTSSt16bad_array_length@@CXXABI_1.3.8 OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4 OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4 @@ -3042,6 +3064,7 @@ OBJECT:24:_ZTVSt9money_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBC OBJECT:24:_ZTVSt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTVSt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTVSt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:25:_ZTSSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:28:_ZTSSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:28:_ZTSSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:28:_ZTTSd@@GLIBCXX_3.4 diff --git a/libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt b/libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt index d4bcf7e4804..24a218125cd 100644 --- a/libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt +++ b/libstdc++-v3/config/abi/post/solaris2.9/sparcv9/baseline_symbols.txt @@ -387,6 +387,7 @@ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE5pbaseEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 +FUNC:_ZNKSt16bad_array_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 @@ -400,6 +401,7 @@ FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4 FUNC:_ZNKSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE5rdbufEv@@GLIBCXX_3.4 +FUNC:_ZNKSt20bad_array_new_length4whatEv@@CXXABI_1.3.8 FUNC:_ZNKSt3tr14hashIRKSbIwSt11char_traitsIwESaIwEEEclES6_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashIRKSsEclES2_@@GLIBCXX_3.4.10 FUNC:_ZNKSt3tr14hashISbIwSt11char_traitsIwESaIwEEEclES4_@@GLIBCXX_3.4.10 @@ -1177,6 +1179,7 @@ FUNC:_ZNSt11range_errorC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11range_errorD2Ev@@GLIBCXX_3.4.15 +FUNC:_ZNSt11regex_errorC1ENSt15regex_constants10error_typeE@@GLIBCXX_3.4.20 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15 @@ -1740,6 +1743,9 @@ FUNC:_ZNSt16__numpunct_cacheIwEC2Em@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt16__numpunct_cacheIwED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt16bad_array_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt16bad_array_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt16invalid_argumentC1ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentC2ERKSs@@GLIBCXX_3.4 FUNC:_ZNSt16invalid_argumentD0Ev@@GLIBCXX_3.4 @@ -1853,6 +1859,9 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@G FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt20bad_array_new_lengthD0Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD1Ev@@CXXABI_1.3.8 +FUNC:_ZNSt20bad_array_new_lengthD2Ev@@CXXABI_1.3.8 FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPKjbm@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPiPKjbm@@GLIBCXX_3.4 @@ -2149,13 +2158,16 @@ FUNC:_ZNSt9type_infoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt9type_infoD2Ev@@GLIBCXX_3.4 FUNC:_ZSt10unexpectedv@@GLIBCXX_3.4 FUNC:_ZSt11_Hash_bytesPKvmm@@CXXABI_1.3.5 +FUNC:_ZSt13get_terminatev@@GLIBCXX_3.4.20 FUNC:_ZSt13set_terminatePFvvE@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIdEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIeEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 FUNC:_ZSt14__convert_to_vIfEvPKcRT_RSt12_Ios_IostateRKPi@@GLIBCXX_3.4 +FUNC:_ZSt14get_unexpectedv@@GLIBCXX_3.4.20 FUNC:_ZSt14set_unexpectedPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15_Fnv_hash_bytesPKvmm@@CXXABI_1.3.5 FUNC:_ZSt15future_categoryv@@GLIBCXX_3.4.15 +FUNC:_ZSt15get_new_handlerv@@GLIBCXX_3.4.20 FUNC:_ZSt15set_new_handlerPFvvE@@GLIBCXX_3.4 FUNC:_ZSt15system_categoryv@@GLIBCXX_3.4.11 FUNC:_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l@@GLIBCXX_3.4.9 @@ -2193,6 +2205,7 @@ FUNC:_ZSt21__throw_runtime_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt22__throw_overflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt23__throw_underflow_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt24__throw_invalid_argumentPKc@@GLIBCXX_3.4 +FUNC:_ZSt24__throw_out_of_range_fmtPKcz@@GLIBCXX_3.4.20 FUNC:_ZSt25__throw_bad_function_callv@@GLIBCXX_3.4.14 FUNC:_ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_@@GLIBCXX_3.4 FUNC:_ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_@@GLIBCXX_3.4 @@ -2415,6 +2428,8 @@ FUNC:__cxa_pure_virtual@@CXXABI_1.3 FUNC:__cxa_rethrow@@CXXABI_1.3 FUNC:__cxa_thread_atexit@@CXXABI_1.3.7 FUNC:__cxa_throw@@CXXABI_1.3 +FUNC:__cxa_throw_bad_array_length@@CXXABI_1.3.8 +FUNC:__cxa_throw_bad_array_new_length@@CXXABI_1.3.8 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1 FUNC:__cxa_vec_cctor@@CXXABI_1.3 FUNC:__cxa_vec_cleanup@@CXXABI_1.3 @@ -2481,6 +2496,7 @@ OBJECT:0:CXXABI_1.3.4 OBJECT:0:CXXABI_1.3.5 OBJECT:0:CXXABI_1.3.6 OBJECT:0:CXXABI_1.3.7 +OBJECT:0:CXXABI_1.3.8 OBJECT:0:CXXABI_TM_1 OBJECT:0:GLIBCXX_3.4 OBJECT:0:GLIBCXX_3.4.1 @@ -2495,6 +2511,7 @@ OBJECT:0:GLIBCXX_3.4.17 OBJECT:0:GLIBCXX_3.4.18 OBJECT:0:GLIBCXX_3.4.19 OBJECT:0:GLIBCXX_3.4.2 +OBJECT:0:GLIBCXX_3.4.20 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -2933,6 +2950,7 @@ OBJECT:1:_ZSt7nothrow@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 +OBJECT:21:_ZTSSt16bad_array_length@@CXXABI_1.3.8 OBJECT:21:_ZTSSt16invalid_argument@@GLIBCXX_3.4 OBJECT:22:_ZTSNSt8ios_base7failureE@@GLIBCXX_3.4 OBJECT:22:_ZTSSt10moneypunctIcLb0EE@@GLIBCXX_3.4 @@ -3005,6 +3023,7 @@ OBJECT:24:_ZTISt15time_get_bynameIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE OBJECT:24:_ZTISt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt15underflow_error@@GLIBCXX_3.4 +OBJECT:24:_ZTISt16bad_array_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt16invalid_argument@@GLIBCXX_3.4 OBJECT:24:_ZTISt17bad_function_call@@GLIBCXX_3.4.15 OBJECT:24:_ZTISt17moneypunct_bynameIcLb0EE@@GLIBCXX_3.4 @@ -3017,6 +3036,7 @@ OBJECT:24:_ZTISt19basic_istringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_istringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIcSt11char_traitsIcESaIcEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4 +OBJECT:24:_ZTISt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:24:_ZTISt5ctypeIwE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -3039,6 +3059,7 @@ OBJECT:24:_ZTISt9money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBC OBJECT:24:_ZTISt9money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTISt9strstream@@GLIBCXX_3.4 +OBJECT:25:_ZTSSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:272:_ZSt4cerr@@GLIBCXX_3.4 OBJECT:272:_ZSt4clog@@GLIBCXX_3.4 OBJECT:272:_ZSt4cout@@GLIBCXX_3.4 @@ -3206,8 +3227,10 @@ OBJECT:40:_ZTVSt14overflow_error@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15time_put_bynameIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt15underflow_error@@GLIBCXX_3.4 +OBJECT:40:_ZTVSt16bad_array_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt16invalid_argument@@GLIBCXX_3.4 OBJECT:40:_ZTVSt17bad_function_call@@GLIBCXX_3.4.15 +OBJECT:40:_ZTVSt20bad_array_new_length@@CXXABI_1.3.8 OBJECT:40:_ZTVSt8bad_cast@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:40:_ZTVSt8time_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4 diff --git a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml index 869b63f1992..2a2f77d216a 100644 --- a/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml +++ b/libstdc++-v3/doc/xml/manual/backwards_compatibility.xml @@ -782,18 +782,25 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [ </title></info> -<para> The existence of <code>ios::nocreate</code> being used for -input-streams has been confirmed, most probably because the author -thought it would be more correct to specify nocreate explicitly. So -it can be left out for input-streams. +<para>Historically these flags were used with iostreams to control whether +new files are created or not when opening a file stream, similar to the +<code>O_CREAT</code> and <code>O_EXCL</code> flags for the +<function>open(2)</function> system call. Because iostream modes correspond +to <function>fopen(3)</function> modes these flags are not supported. +For input streams a new file will not be created anyway, so +<code>ios::nocreate</code> is not needed. +For output streams, a new file will be created if it does not exist, which is +consistent with the behaviour of <function>fopen</function>. </para> -<para>For output streams, <quote>nocreate</quote> is probably the default, -unless you specify <code>std::ios::trunc</code> ? To be safe, you can -open the file for reading, check if it has been opened, and then -decide whether you want to create/replace or not. To my knowledge, -even older implementations support <code>app</code>, <code>ate</code> -and <code>trunc</code> (except for <code>app</code> ?). +<para>When one of these flags is needed a possible alternative is to attempt +to open the file using <type>std::ifstream</type> first to determine whether +the file already exists or not. This may not be reliable however, because +whether the file exists or not could change between opening the +<type>std::istream</type> and re-opening with an output stream. If you need +to check for existence and open a file as a single operation then you will +need to use OS-specific facilities outside the C++ standard library, such +as <function>open(2)</function>. </para> </section> diff --git a/libstdc++-v3/doc/xml/manual/codecvt.xml b/libstdc++-v3/doc/xml/manual/codecvt.xml index 9961515d491..76120060e30 100644 --- a/libstdc++-v3/doc/xml/manual/codecvt.xml +++ b/libstdc++-v3/doc/xml/manual/codecvt.xml @@ -15,11 +15,11 @@ The standard class codecvt attempts to address conversions between different character encoding schemes. In particular, the standard attempts to detail conversions between the implementation-defined wide -characters (hereafter referred to as wchar_t) and the standard type -char that is so beloved in classic <quote>C</quote> (which can now be -referred to as narrow characters.) This document attempts to describe -how the GNU libstdc++ implementation deals with the conversion between -wide and narrow characters, and also presents a framework for dealing +characters (hereafter referred to as <type>wchar_t</type>) and the standard +type <type>char</type> that is so beloved in classic <quote>C</quote> +(which can now be referred to as narrow characters.) This document attempts +to describe how the GNU libstdc++ implementation deals with the conversion +between wide and narrow characters, and also presents a framework for dealing with the huge number of other encodings that iconv can convert, including Unicode and UTF8. Design issues and requirements are addressed, and examples of correct usage for both the required @@ -47,8 +47,8 @@ The text around the codecvt definition gives some clues: <blockquote> <para> <emphasis> --1- The class codecvt<internT,externT,stateT> is for use when -converting from one codeset to another, such as from wide characters +-1- The class <code>codecvt<internT,externT,stateT></code> is for use +when converting from one codeset to another, such as from wide characters to multibyte characters, between wide character encodings such as Unicode and EUC. </emphasis> @@ -64,7 +64,7 @@ class. <blockquote> <para> <emphasis> --2- The stateT argument selects the pair of codesets being mapped between. +-2- The <type>stateT</type> argument selects the pair of codesets being mapped between. </emphasis> </para> </blockquote> @@ -76,17 +76,19 @@ Ah ha! Another clue... <blockquote> <para> <emphasis> --3- The instantiations required in the Table ?? -(lib.locale.category), namely codecvt<wchar_t,char,mbstate_t> and -codecvt<char,char,mbstate_t>, convert the implementation-defined -native character set. codecvt<char,char,mbstate_t> implements a -degenerate conversion; it does not convert at -all. codecvt<wchar_t,char,mbstate_t> converts between the native -character sets for tiny and wide characters. Instantiations on -mbstate_t perform conversion between encodings known to the library +-3- The instantiations required in the Table 51 (lib.locale.category), namely +<classname>codecvt<wchar_t,char,mbstate_t></classname> and +<classname>codecvt<char,char,mbstate_t></classname>, convert the +implementation-defined native character set. +<classname>codecvt<char,char,mbstate_t></classname> implements a +degenerate conversion; it does not convert at all. +<classname>codecvt<wchar_t,char,mbstate_t></classname> converts between +the native character sets for tiny and wide characters. Instantiations on +<type>mbstate_t</type> perform conversion between encodings known to the library implementor. Other encodings can be converted by specializing on a -user-defined stateT type. The stateT object can contain any state that -is useful to communicate to or from the specialized do_convert member. +user-defined <type>stateT</type> type. The <type>stateT</type> object can +contain any state that is useful to communicate to or from the specialized +<function>do_convert</function> member. </emphasis> </para> </blockquote> @@ -98,13 +100,14 @@ At this point, a couple points become clear: <para> One: The standard clearly implies that attempts to add non-required (yet useful and widely used) conversions need to do so through the -third template parameter, stateT.</para> +third template parameter, <type>stateT</type>.</para> <para> -Two: The required conversions, by specifying mbstate_t as the third -template parameter, imply an implementation strategy that is mostly +Two: The required conversions, by specifying <type>mbstate_t</type> as the +third template parameter, imply an implementation strategy that is mostly (or wholly) based on the underlying C library, and the functions -mcsrtombs and wcsrtombs in particular.</para> +<function>mcsrtombs</function> and <function>wcsrtombs</function> in +particular.</para> </section> <section xml:id="facet.codecvt.design"><info><title>Design</title></info> @@ -114,7 +117,7 @@ mcsrtombs and wcsrtombs in particular.</para> <para> - The simple implementation detail of wchar_t's size seems to + The simple implementation detail of <type>wchar_t</type>'s size seems to repeatedly confound people. Many systems use a two byte, unsigned integral type to represent wide characters, and use an internal encoding of Unicode or UCS2. (See AIX, Microsoft NT, @@ -122,7 +125,7 @@ mcsrtombs and wcsrtombs in particular.</para> type to represent wide characters, and use an internal encoding of UCS4. (GNU/Linux systems using glibc, in particular.) The C programming language (and thus C++) does not specify a specific - size for the type wchar_t. + size for the type <type>wchar_t</type>. </para> <para> @@ -136,9 +139,12 @@ mcsrtombs and wcsrtombs in particular.</para> Probably the most frequently asked question about code conversion is: "So dudes, what's the deal with Unicode strings?" The dude part is optional, but apparently the usefulness of - Unicode strings is pretty widely appreciated. Sadly, this specific - encoding (And other useful encodings like UTF8, UCS4, ISO 8859-10, - etc etc etc) are not mentioned in the C++ standard. + Unicode strings is pretty widely appreciated. The Unicode character + set (and useful encodings like UTF-8, UCS-4, ISO 8859-10, + etc etc etc) were not mentioned in the first C++ standard. (The 2011 + standard added support for string literals with different encodings + and some library facilities for converting between encodings, but the + notes below have not been updated to reflect that.) </para> <para> @@ -149,8 +155,8 @@ mcsrtombs and wcsrtombs in particular.</para> The thought that all one needs to convert between two arbitrary codesets is two types and some kind of state argument is unfortunate. In particular, encodings may be stateless. The naming - of the third parameter as stateT is unfortunate, as what is really - needed is some kind of generalized type that accounts for the + of the third parameter as <type>stateT</type> is unfortunate, as what is + really needed is some kind of generalized type that accounts for the issues that abstract encodings will need. The minimum information that is required includes: </para> @@ -240,7 +246,8 @@ mechanism may be required. <para> In addition, multi-threaded and multi-locale environments also impact the design and requirements for code conversions. In particular, they -affect the required specialization codecvt<wchar_t, char, mbstate_t> +affect the required specialization +<classname>codecvt<wchar_t, char, mbstate_t></classname> when implemented using standard "C" functions. </para> @@ -249,7 +256,8 @@ Three problems arise, one big, one of medium importance, and one small. </para> <para> -First, the small: mcsrtombs and wcsrtombs may not be multithread-safe +First, the small: <function>mcsrtombs</function> and +<function>wcsrtombs</function> may not be multithread-safe on all systems required by the GNU tools. For GNU/Linux and glibc, this is not an issue. </para> @@ -275,7 +283,8 @@ option, a high-quality implementation, damn the additional complexity! </para> <para> -For the required specialization codecvt<wchar_t, char, mbstate_t> , +For the required specialization +<classname>codecvt<wchar_t, char, mbstate_t></classname>, conversions are made between the internal character set (always UCS4 on GNU/Linux) and whatever the currently selected locale for the LC_CTYPE category implements. @@ -311,37 +320,39 @@ codecvt<char, wchar_t, mbstate_t> <para> This specialization, by specifying all the template parameters, pretty much ties the hands of implementors. As such, the implementation is -straightforward, involving mcsrtombs for the conversions between char -to wchar_t and wcsrtombs for conversions between wchar_t and char. +straightforward, involving <function>mcsrtombs</function> for the conversions +between <type>char</type> to <type>wchar_t</type> and +<function>wcsrtombs</function> for conversions between <type>wchar_t</type> +and <type>char</type>. </para> <para> Neither of these two required specializations deals with Unicode characters. As such, libstdc++ implements a partial specialization -of the codecvt class with and iconv wrapper class, encoding_state as the -third template parameter. +of the <type>codecvt</type> class with an iconv wrapper class, +<classname>encoding_state</classname> as the third template parameter. </para> <para> This implementation should be standards conformant. First of all, the standard explicitly points out that instantiations on the third -template parameter, stateT, are the proper way to implement +template parameter, <type>stateT</type>, are the proper way to implement non-required conversions. Second of all, the standard says (in Chapter -17) that partial specializations of required classes are a-ok. Third -of all, the requirements for the stateT type elsewhere in the standard -(see 21.1.2 traits typedefs) only indicate that this type be copy +17) that partial specializations of required classes are A-OK. Third +of all, the requirements for the <type>stateT</type> type elsewhere in the +standard (see 21.1.2 traits typedefs) only indicate that this type be copy constructible. </para> <para> -As such, the type encoding_state is defined as a non-templatized, POD -type to be used as the third type of a codecvt instantiation. This -type is just a wrapper class for iconv, and provides an easy interface +As such, the type <type>encoding_state</type> is defined as a non-templatized, +POD type to be used as the third type of a <type>codecvt</type> instantiation. +This type is just a wrapper class for iconv, and provides an easy interface to iconv functionality. </para> <para> -There are two constructors for encoding_state: +There are two constructors for <type>encoding_state</type>: </para> <para> @@ -352,7 +363,7 @@ encoding_state() : __in_desc(0), __out_desc(0) <para> This default constructor sets the internal encoding to some default (currently UCS4) and the external encoding to whatever is returned by -nl_langinfo(CODESET). +<code>nl_langinfo(CODESET)</code>. </para> <para> @@ -370,7 +381,7 @@ either argument. <para> One of the issues with iconv is that the string literals identifying conversions are not standardized. Because of this, the thought of -mandating and or enforcing some set of pre-determined valid +mandating and/or enforcing some set of pre-determined valid identifiers seems iffy: thus, a more practical (and non-migraine inducing) strategy was implemented: end-users can specify any string (subject to a pre-determined length qualifier, currently 32 bytes) for @@ -400,12 +411,12 @@ _M_good() </para> <para> -Provides a way to see if the given encoding_state object has been +Provides a way to see if the given <type>encoding_state</type> object has been properly initialized. If the string literals describing the desired internal and external encoding are not valid, initialization will fail, and this will return false. If the internal and external -encodings are valid, but iconv_open could not allocate conversion -descriptors, this will also return false. Otherwise, the object is +encodings are valid, but <function>iconv_open</function> could not allocate +conversion descriptors, this will also return false. Otherwise, the object is ready to convert and will return true. </para> @@ -424,8 +435,8 @@ themselves. <para> Definitions for all the required codecvt member functions are provided -for this specialization, and usage of codecvt<internal character type, -external character type, encoding_state> is consistent with other +for this specialization, and usage of <code>codecvt<<replaceable>internal +character type</replaceable>, <replaceable>external character type</replaceable>, <replaceable>encoding_state</replaceable>></code> is consistent with other codecvt usage. </para> @@ -433,7 +444,7 @@ codecvt usage. <section xml:id="facet.codecvt.use"><info><title>Use</title></info> -<para>A conversions involving string literal.</para> +<para>A conversion involving a string literal.</para> <programlisting> typedef codecvt_base::result result; @@ -490,7 +501,7 @@ codecvt usage. <listitem> <para> - b. conversions involving std::string + b. conversions involving <type>std::string</type> </para> <itemizedlist> <listitem><para> diff --git a/libstdc++-v3/doc/xml/manual/ctype.xml b/libstdc++-v3/doc/xml/manual/ctype.xml index 21b70724fd7..4e9777d7846 100644 --- a/libstdc++-v3/doc/xml/manual/ctype.xml +++ b/libstdc++-v3/doc/xml/manual/ctype.xml @@ -18,10 +18,10 @@ <para> -For the required specialization codecvt<wchar_t, char, mbstate_t> , +For the required specialization <classname>codecvt<wchar_t, char, mbstate_t></classname>, conversions are made between the internal character set (always UCS4 on GNU/Linux) and whatever the currently selected locale for the -LC_CTYPE category implements. +<code>LC_CTYPE</code> category implements. </para> <para> @@ -45,8 +45,10 @@ ctype<wchar_t> <para> This specialization, by specifying all the template parameters, pretty much ties the hands of implementors. As such, the implementation is -straightforward, involving mcsrtombs for the conversions between char -to wchar_t and wcsrtombs for conversions between wchar_t and char. +straightforward, involving <function>mcsrtombs</function> for the +conversions between <type>char</type> to <type>wchar_t</type> and +<function>wcsrtombs</function> for conversions between <type>wchar_t</type> +and <type>char</type>. </para> <para> @@ -69,7 +71,8 @@ characters. <listitem> <para> - How to deal with different types than char, wchar_t? </para></listitem> + How to deal with types other than <type>char</type>, <type>wchar_t</type>? + </para></listitem> <listitem><para> Overlap between codecvt/ctype: narrow/widen @@ -77,8 +80,8 @@ characters. <listitem> <para> - Mask typedef in codecvt_base, argument types in codecvt. what - is know about this type? + <type>mask</type> typedef in <classname>codecvt_base</classname>, + argument types in <type>codecvt</type>. what is know about this type? </para></listitem> <listitem> @@ -95,10 +98,11 @@ characters. <listitem> <para> - Get the ctype<wchar_t>::mask stuff under control. Need to - make some kind of static table, and not do lookup every time - somebody hits the do_is... functions. Too bad we can't just - redefine mask for ctype<wchar_t> + Get the <type>ctype<wchar_t>::mask</type> stuff under control. + Need to make some kind of static table, and not do lookup every time + somebody hits the <code>do_is...</code> functions. Too bad we can't + just redefine <type>mask</type> for + <classname>ctype<wchar_t></classname> </para></listitem> <listitem> diff --git a/libstdc++-v3/doc/xml/manual/status_cxx1998.xml b/libstdc++-v3/doc/xml/manual/status_cxx1998.xml index 1541343e0cb..3bc6a16722b 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx1998.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx1998.xml @@ -1075,7 +1075,7 @@ particular release. in the sections where the function itself occurs. --> <para><emphasis>[18.1]/4</emphasis> The type of <code>NULL</code> is described - <link linkend="std.support.types.null">here</link>. + under <link linkend="std.support.types.null">Support</link>. </para> <para><emphasis>[18.3]/8</emphasis> Even though it's listed in the library sections, libstdc++ has zero control over what the cleanup code hands @@ -1107,9 +1107,10 @@ particular release. implementations, any requirements imposed on allocators by containers beyond those requirements that appear in Table 32, and the semantics of containers and algorithms when allocator instances compare - non-equal, are implementation-defined."</emphasis> As yet we don't - have any allocators which compare non-equal, so we can't describe how - they behave. + non-equal, are implementation-defined."</emphasis> There is experimental + support for non-equal allocators in the standard containers in C++98 + mode. There are no additional requirements on allocators. It is undefined + behaviour to swap two containers if their allocators are not equal. </para> <para><emphasis>[21.1.3.1]/3,4</emphasis>, <emphasis>[21.1.3.2]/2</emphasis>, @@ -1121,16 +1122,16 @@ particular release. here would defeat the purpose. :-) </para> <para><emphasis>[21.1.3.1]/5</emphasis> I don't really know about - the mbstate_t stuff... see - the <link linkend="std.localization.facet.codecvt">chapter 22 + the <type>mbstate_t</type> stuff... see + the <link linkend="std.localization.facet.codecvt"><code>codecvt</code> notes</link> for what does exist. </para> <para><emphasis>[22.*]</emphasis> Anything and everything we have on locale - implementation will be described - <link linkend="std.localization.locales.locale">over here</link>. + implementation will be described under + <link linkend="std.localization.locales.locale">Localization</link>. </para> <para><emphasis>[26.2.8]/9</emphasis> I have no idea what - <code>complex<T></code>'s pow(0,0) returns. + <code>complex<T></code>'s <code>pow(0,0)</code> returns. </para> <para><emphasis>[27.4.2.4]/2</emphasis> Calling <code>std::ios_base::sync_with_stdio</code> after I/O has already been @@ -1138,8 +1139,8 @@ particular release. flush the buffers, and <!-- this line might go away --> destroy and recreate the underlying buffer instances. Whether or not the previously-written I/O is destroyed in this process depends mostly - on the --enable-libio choice: for stdio, if the written data is - already in the stdio buffer, the data may be completely safe! + on the <code>--enable-libio</code> choice: for stdio, if the written + data is already in the stdio buffer, the data may be completely safe! </para> <para><emphasis>[27.6.1.1.2]</emphasis>, <emphasis>[27.6.2.3]</emphasis> The I/O sentry ctor and dtor can perform @@ -1148,8 +1149,8 @@ particular release. </para> <para><emphasis>[27.7.1.3]/16</emphasis>, <emphasis>[27.8.1.4]/10</emphasis> - The effects of <code>pubsetbuf/setbuf</code> are described - <link linkend="std.io">in this chapter</link>. + The effects of <code>pubsetbuf/setbuf</code> are described in the + <link linkend="std.io">Input and Output</link> chapter. </para> <para><emphasis>[27.8.1.4]/16</emphasis> Calling <code>fstream::sync</code> when a get area exists will... whatever <code>fflush()</code> does, I think. diff --git a/libstdc++-v3/doc/xml/manual/support.xml b/libstdc++-v3/doc/xml/manual/support.xml index 4d33a46f4a0..410f7140347 100644 --- a/libstdc++-v3/doc/xml/manual/support.xml +++ b/libstdc++-v3/doc/xml/manual/support.xml @@ -169,16 +169,18 @@ <constant>NULL</constant> is always a pointer.) </para> - <para>In his book <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-92488-9/"><emphasis>Effective - C++</emphasis></link>, Scott Meyers points out that the best way + <para>In his book <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="http://www.aristeia.com/books.html"><emphasis>Effective + C++</emphasis></link>, Scott Meyers points out that the best way to solve this problem is to not overload on pointer-vs-integer types to begin with. He also offers a way to make your own magic <constant>NULL</constant> that will match pointers before it matches integers. </para> - <para>See - <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.awprofessional.com/titles/0-201-31015-5/">the - Effective C++ CD example</link> + <para>See the + <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="http://www.aristeia.com/books.html"><emphasis>Effective + C++ CD</emphasis></link> example. </para> </section> diff --git a/libstdc++-v3/include/bits/regex.h b/libstdc++-v3/include/bits/regex.h index 4e091e06736..ae8e1f5d363 100644 --- a/libstdc++-v3/include/bits/regex.h +++ b/libstdc++-v3/include/bits/regex.h @@ -30,6 +30,15 @@ namespace std _GLIBCXX_VISIBILITY(default) { +_GLIBCXX_BEGIN_NAMESPACE_VERSION + template<typename, typename> + class basic_regex; + + template<typename, typename> + class match_results; + +_GLIBCXX_END_NAMESPACE_VERSION + namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -48,6 +57,56 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const basic_regex<_CharT, _TraitsT>& __re, regex_constants::match_flag_type __flags); + template<typename, typename, typename, bool> + class _Executor; + + template<typename _Tp> + struct __has_contiguous_iter : std::false_type { }; + + template<typename _Ch, typename _Tr, typename _Alloc> + struct __has_contiguous_iter<std::basic_string<_Ch, _Tr, _Alloc>> + : std::true_type // string<Ch> storage is contiguous + { }; + + template<typename _Tp, typename _Alloc> + struct __has_contiguous_iter<std::vector<_Tp, _Alloc>> + : std::true_type // vector<Tp> storage is contiguous + { }; + + template<typename _Alloc> + struct __has_contiguous_iter<std::vector<bool, _Alloc>> + : std::false_type // vector<bool> storage is not contiguous + { }; + + template<typename _Tp> + struct __is_contiguous_normal_iter : std::false_type { }; + + template<typename _Tp, typename _Cont> + struct + __is_contiguous_normal_iter<__gnu_cxx::__normal_iterator<_Tp, _Cont>> + : __has_contiguous_iter<_Cont>::type + { }; + + template<typename _Iter, typename _TraitsT> + using __enable_if_contiguous_normal_iter + = typename enable_if< __is_contiguous_normal_iter<_Iter>::value, + std::shared_ptr<_NFA<_TraitsT>> >::type; + + template<typename _Iter, typename _TraitsT> + using __disable_if_contiguous_normal_iter + = typename enable_if< !__is_contiguous_normal_iter<_Iter>::value, + std::shared_ptr<_NFA<_TraitsT>> >::type; + + template<typename _FwdIter, typename _TraitsT> + __disable_if_contiguous_normal_iter<_FwdIter, _TraitsT> + __compile_nfa(_FwdIter __first, _FwdIter __last, const _TraitsT& __traits, + regex_constants::syntax_option_type __flags); + + template<typename _Iter, typename _TraitsT> + __enable_if_contiguous_normal_iter<_Iter, _TraitsT> + __compile_nfa(_Iter __first, _Iter __last, const _TraitsT& __traits, + regex_constants::syntax_option_type __flags); + _GLIBCXX_END_NAMESPACE_VERSION } @@ -501,6 +560,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION basic_regex(_FwdIter __first, _FwdIter __last, flag_type __f = ECMAScript) : _M_flags(__f), + _M_original_str(__first, __last), _M_automaton(__detail::__compile_nfa(__first, __last, _M_traits, _M_flags)) { } @@ -637,6 +697,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION flag_type __flags = ECMAScript) { _M_flags = __flags; + _M_original_str.assign(__s.begin(), __s.end()); _M_automaton = __detail::__compile_nfa(__s.begin(), __s.end(), _M_traits, _M_flags); return *this; @@ -701,7 +762,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ locale_type imbue(locale_type __loc) - { return _M_traits.imbue(__loc); } + { + auto __ret = _M_traits.imbue(__loc); + this->assign(_M_original_str, _M_flags); + return __ret; + } /** * @brief Gets the locale currently imbued in the regular expression @@ -744,9 +809,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename, typename, typename, bool> friend class __detail::_Executor; - flag_type _M_flags; - _Rx_traits _M_traits; - _AutomatonPtr _M_automaton; + flag_type _M_flags; + _Rx_traits _M_traits; + basic_string<_Ch_type> _M_original_str; + _AutomatonPtr _M_automaton; }; /** @brief Standard regular expressions. */ diff --git a/libstdc++-v3/include/bits/regex_compiler.h b/libstdc++-v3/include/bits/regex_compiler.h index c38013113ed..4ac67dfed97 100644 --- a/libstdc++-v3/include/bits/regex_compiler.h +++ b/libstdc++-v3/include/bits/regex_compiler.h @@ -129,43 +129,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _StackT _M_stack; }; - template<typename _Tp> - struct __has_contiguous_iter : std::false_type { }; - - template<typename _Ch, typename _Tr, typename _Alloc> - struct __has_contiguous_iter<std::basic_string<_Ch, _Tr, _Alloc>> - : std::true_type // string<Ch> storage is contiguous - { }; - - template<typename _Tp, typename _Alloc> - struct __has_contiguous_iter<std::vector<_Tp, _Alloc>> - : std::true_type // vector<Tp> storage is contiguous - { }; - - template<typename _Alloc> - struct __has_contiguous_iter<std::vector<bool, _Alloc>> - : std::false_type // vector<bool> storage is not contiguous - { }; - - template<typename _Tp> - struct __is_contiguous_normal_iter : std::false_type { }; - - template<typename _Tp, typename _Cont> - struct - __is_contiguous_normal_iter<__gnu_cxx::__normal_iterator<_Tp, _Cont>> - : __has_contiguous_iter<_Cont>::type - { }; - - template<typename _Iter, typename _TraitsT> - using __enable_if_contiguous_normal_iter - = typename enable_if< __is_contiguous_normal_iter<_Iter>::value, - std::shared_ptr<_NFA<_TraitsT>> >::type; - - template<typename _Iter, typename _TraitsT> - using __disable_if_contiguous_normal_iter - = typename enable_if< !__is_contiguous_normal_iter<_Iter>::value, - std::shared_ptr<_NFA<_TraitsT>> >::type; - template<typename _FwdIter, typename _TraitsT> inline __disable_if_contiguous_normal_iter<_FwdIter, _TraitsT> __compile_nfa(_FwdIter __first, _FwdIter __last, const _TraitsT& __traits, @@ -185,7 +148,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return __compile_nfa(__cfirst, __cfirst + __len, __traits, __flags); } - template<typename _TraitsT> + template<typename _TraitsT, bool __is_ecma> struct _AnyMatcher { typedef typename _TraitsT::char_type _CharT; @@ -197,25 +160,55 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool operator()(_CharT __ch) const + { return _M_apply(__ch, typename is_same<_CharT, char>::type()); } + + bool + _M_apply(_CharT __ch, true_type) const { - return _M_traits.translate(__ch) != '\n' - && _M_traits.translate(__ch) != '\r' - && _M_traits.translate(__ch) != u'\u2028' - && _M_traits.translate(__ch) != u'\u2029'; + auto __c = _M_traits.translate(__ch); + if (__is_ecma) + { + static auto __n = _M_traits.translate('\n'); + static auto __r = _M_traits.translate('\r'); + return __c != __n && __c != __r; + } + else + { + static auto __nul = _M_traits.translate('\0'); + return __c != __nul; + } + } + + bool + _M_apply(_CharT __ch, false_type) const + { + auto __c = _M_traits.translate(__ch); + if (__is_ecma) + { + static auto __n = _M_traits.translate('\n'); + static auto __r = _M_traits.translate('\r'); + static auto __u2028 = _M_traits.translate(u'\u2028'); + static auto __u2029 = _M_traits.translate(u'\u2029'); + return __c != __n && __c != __r && __c != __u2028 + && __c != __u2029; + } + else + { + static auto __nul = _M_traits.translate('\0'); + return __c != __nul; + } } const _TraitsT& _M_traits; }; - template<typename _TraitsT> + template<typename _TraitsT, bool __icase> struct _CharMatcher { typedef typename _TraitsT::char_type _CharT; - typedef regex_constants::syntax_option_type _FlagT; - explicit - _CharMatcher(_CharT __ch, const _TraitsT& __traits, _FlagT __flags) - : _M_traits(__traits), _M_flags(__flags), _M_ch(_M_translate(__ch)) + _CharMatcher(_CharT __ch, const _TraitsT& __traits) + : _M_traits(__traits), _M_ch(_M_translate(__ch)) { } bool @@ -225,44 +218,56 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _CharT _M_translate(_CharT __ch) const { - if (_M_flags & regex_constants::icase) + if (__icase) return _M_traits.translate_nocase(__ch); else return _M_traits.translate(__ch); } const _TraitsT& _M_traits; - _FlagT _M_flags; _CharT _M_ch; }; /// Matches a character range (bracket expression) // TODO: Convert used _M_flags fields to template parameters, including // collate and icase. Avoid using std::set, could use flat_set - // (sorted vector and binary search) instead; use an fixed sized (256) - // vector<bool> for char specialization if necessary. + // (sorted vector and binary search) instead. template<typename _TraitsT> struct _BracketMatcher { + public: typedef typename _TraitsT::char_type _CharT; typedef typename _TraitsT::char_class_type _CharClassT; typedef typename _TraitsT::string_type _StringT; typedef regex_constants::syntax_option_type _FlagT; - explicit + public: _BracketMatcher(bool __is_non_matching, const _TraitsT& __traits, _FlagT __flags) - : _M_traits(__traits), _M_class_set(0), _M_flags(__flags), + : +#ifdef _GLIBCXX_DEBUG + _M_is_ready(false), +#endif + _M_traits(__traits), _M_class_set(0), _M_flags(__flags), _M_is_non_matching(__is_non_matching) { } bool - operator()(_CharT) const; + operator()(_CharT __ch) const + { + _GLIBCXX_DEBUG_ASSERT(_M_is_ready); + return _M_apply(__ch, _IsChar()); + } void _M_add_char(_CharT __c) - { _M_char_set.insert(_M_translate(__c)); } + { + _M_char_set.insert(_M_translate(__c)); +#ifdef _GLIBCXX_DEBUG + _M_is_ready = false; +#endif + } void _M_add_collating_element(const _StringT& __s) @@ -272,6 +277,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__st.empty()) __throw_regex_error(regex_constants::error_collate); _M_char_set.insert(_M_translate(__st[0])); +#ifdef _GLIBCXX_DEBUG + _M_is_ready = false; +#endif } void @@ -284,6 +292,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __st = _M_traits.transform_primary(__st.data(), __st.data() + __st.size()); _M_equiv_set.insert(__st); +#ifdef _GLIBCXX_DEBUG + _M_is_ready = false; +#endif } void @@ -295,6 +306,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (__mask == 0) __throw_regex_error(regex_constants::error_ctype); _M_class_set |= __mask; +#ifdef _GLIBCXX_DEBUG + _M_is_ready = false; +#endif } void @@ -306,8 +320,36 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_get_str(_M_translate(__r)))); else _M_range_set.insert(make_pair(_M_get_str(__l), _M_get_str(__r))); +#ifdef _GLIBCXX_DEBUG + _M_is_ready = false; +#endif } + void + _M_ready() + { + _M_make_cache(_IsChar()); +#ifdef _GLIBCXX_DEBUG + _M_is_ready = true; +#endif + } + + private: + typedef typename is_same<_CharT, char>::type _IsChar; + struct _Dummy { }; + typedef typename conditional<_IsChar::value, + std::bitset<1 << (8 * sizeof(_CharT))>, + _Dummy>::type _CacheT; + typedef typename make_unsigned<_CharT>::type _UnsignedCharT; + + private: + bool + _M_apply(_CharT __ch, false_type) const; + + bool + _M_apply(_CharT __ch, true_type) const + { return _M_cache[static_cast<_UnsignedCharT>(__ch)]; } + _CharT _M_translate(_CharT __c) const { @@ -328,6 +370,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION return _M_traits.transform(__s.begin(), __s.end()); } + void + _M_make_cache(true_type) + { + for (int __i = 0; __i < _M_cache.size(); __i++) + _M_cache[static_cast<_UnsignedCharT>(__i)] = + _M_apply(__i, false_type()); + } + + void + _M_make_cache(false_type) + { } + + private: + _CacheT _M_cache; std::set<_CharT> _M_char_set; std::set<_StringT> _M_equiv_set; std::set<pair<_StringT, _StringT>> _M_range_set; @@ -335,6 +391,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _CharClassT _M_class_set; _FlagT _M_flags; bool _M_is_non_matching; +#ifdef _GLIBCXX_DEBUG + bool _M_is_ready; +#endif }; //@} regex-detail diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc b/libstdc++-v3/include/bits/regex_compiler.tcc index 0d90681bde7..4da653f2aa3 100644 --- a/libstdc++-v3/include/bits/regex_compiler.tcc +++ b/libstdc++-v3/include/bits/regex_compiler.tcc @@ -284,15 +284,33 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_atom() { if (_M_match_token(_ScannerT::_S_token_anychar)) - _M_stack.push(_StateSeqT(_M_nfa, - _M_nfa._M_insert_matcher - (_AnyMatcher<_TraitsT>(_M_traits)))); + { + if (_M_flags & regex_constants::ECMAScript) + _M_stack.push(_StateSeqT(_M_nfa, + _M_nfa._M_insert_matcher + (_AnyMatcher<_TraitsT, + true>(_M_traits)))); + else + _M_stack.push(_StateSeqT(_M_nfa, + _M_nfa._M_insert_matcher + (_AnyMatcher<_TraitsT, + false>(_M_traits)))); + } else if (_M_try_char()) - _M_stack.push(_StateSeqT(_M_nfa, - _M_nfa._M_insert_matcher - (_CharMatcher<_TraitsT>(_M_value[0], - _M_traits, - _M_flags)))); + { + if (_M_flags & regex_constants::icase) + _M_stack.push(_StateSeqT(_M_nfa, + _M_nfa._M_insert_matcher + (_CharMatcher<_TraitsT, + true>(_M_value[0], + _M_traits)))); + else + _M_stack.push(_StateSeqT(_M_nfa, + _M_nfa._M_insert_matcher + (_CharMatcher<_TraitsT, + false>(_M_value[0], + _M_traits)))); + } else if (_M_match_token(_ScannerT::_S_token_backref)) _M_stack.push(_StateSeqT(_M_nfa, _M_nfa. _M_insert_backref(_M_cur_int_value(10)))); @@ -302,6 +320,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _BMatcherT __matcher(_M_ctype.is(_CtypeT::upper, _M_value[0]), _M_traits, _M_flags); __matcher._M_add_character_class(_M_value); + __matcher._M_ready(); _M_stack.push(_StateSeqT(_M_nfa, _M_nfa._M_insert_matcher(std::move(__matcher)))); } @@ -341,6 +360,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _BMatcherT __matcher(__neg, _M_traits, _M_flags); while (!_M_match_token(_ScannerT::_S_token_bracket_end)) _M_expression_term(__matcher); + __matcher._M_ready(); _M_stack.push(_StateSeqT(_M_nfa, _M_nfa._M_insert_matcher(std::move(__matcher)))); return true; @@ -432,7 +452,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _TraitsT> bool - _BracketMatcher<_TraitsT>::operator()(_CharT __ch) const + _BracketMatcher<_TraitsT>::_M_apply(_CharT __ch, false_type) const { bool __ret = false; if (_M_traits.isctype(__ch, _M_class_set) diff --git a/libstdc++-v3/include/bits/regex_executor.h b/libstdc++-v3/include/bits/regex_executor.h index 980c6dedcb6..bed90148da8 100644 --- a/libstdc++-v3/include/bits/regex_executor.h +++ b/libstdc++-v3/include/bits/regex_executor.h @@ -32,17 +32,6 @@ namespace std _GLIBCXX_VISIBILITY(default) { -_GLIBCXX_BEGIN_NAMESPACE_VERSION - template<typename, typename> - class basic_regex; - - template<typename> - class sub_match; - - template<typename, typename> - class match_results; -_GLIBCXX_END_NAMESPACE_VERSION - namespace __detail { _GLIBCXX_BEGIN_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 28bdb6bb170..2cedd39cae8 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -1433,7 +1433,8 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER void _M_move_assign(vector&& __x, std::true_type) noexcept { - const vector __tmp(std::move(*this)); + vector __tmp(get_allocator()); + this->_M_impl._M_swap_data(__tmp._M_impl); this->_M_impl._M_swap_data(__x._M_impl); if (_Alloc_traits::_S_propagate_on_move_assign()) std::__alloc_on_move(_M_get_Tp_allocator(), diff --git a/libstdc++-v3/include/debug/safe_base.h b/libstdc++-v3/include/debug/safe_base.h index c2a2b6df97b..4b1d082d264 100644 --- a/libstdc++-v3/include/debug/safe_base.h +++ b/libstdc++-v3/include/debug/safe_base.h @@ -192,6 +192,12 @@ namespace __gnu_debug : _M_iterators(0), _M_const_iterators(0), _M_version(1) { } +#if __cplusplus >= 201103L + _Safe_sequence_base(_Safe_sequence_base&& __x) noexcept + : _Safe_sequence_base() + { _M_swap(__x); } +#endif + /** Notify all iterators that reference this sequence that the sequence is being destroyed. */ ~_Safe_sequence_base() diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index a376f69ff7d..2b750d792a3 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -52,6 +52,7 @@ namespace __debug typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal; #if __cplusplus >= 201103L + typedef __gnu_debug::_Safe_sequence<vector<_Tp, _Allocator> > _Safe_base; typedef __gnu_cxx::__alloc_traits<_Allocator> _Alloc_traits; #endif @@ -111,18 +112,16 @@ namespace __debug vector(const vector& __x) : _Base(__x), _M_guaranteed_capacity(__x.size()) { } - /// Construction from a release-mode vector + /// Construction from a normal-mode vector vector(const _Base& __x) : _Base(__x), _M_guaranteed_capacity(__x.size()) { } #if __cplusplus >= 201103L vector(vector&& __x) noexcept : _Base(std::move(__x)), + _Safe_base(std::move(__x)), _M_guaranteed_capacity(this->size()) - { - this->_M_swap(__x); - __x._M_guaranteed_capacity = 0; - } + { __x._M_guaranteed_capacity = 0; } vector(const vector& __x, const allocator_type& __a) : _Base(__x, __a), _M_guaranteed_capacity(__x.size()) { } @@ -131,7 +130,10 @@ namespace __debug : _Base(std::move(__x), __a), _M_guaranteed_capacity(this->size()) { - __x._M_invalidate_all(); + if (__x.get_allocator() == __a) + this->_M_swap(__x); + else + __x._M_invalidate_all(); __x._M_guaranteed_capacity = 0; } @@ -146,7 +148,7 @@ namespace __debug vector& operator=(const vector& __x) { - static_cast<_Base&>(*this) = __x; + _M_base() = __x; this->_M_invalidate_all(); _M_update_guaranteed_capacity(); return *this; @@ -157,8 +159,13 @@ namespace __debug operator=(vector&& __x) noexcept(_Alloc_traits::_S_nothrow_move()) { __glibcxx_check_self_move_assign(__x); - _Base::operator=(std::move(__x)); - this->_M_invalidate_all(); + bool xfer_memory = _Alloc_traits::_S_propagate_on_move_assign() + || __x.get_allocator() == this->get_allocator(); + _M_base() = std::move(__x._M_base()); + if (xfer_memory) + this->_M_swap(__x); + else + this->_M_invalidate_all(); _M_update_guaranteed_capacity(); __x._M_invalidate_all(); __x._M_guaranteed_capacity = 0; @@ -168,7 +175,7 @@ namespace __debug vector& operator=(initializer_list<value_type> __l) { - static_cast<_Base&>(*this) = __l; + _M_base() = __l; this->_M_invalidate_all(); _M_update_guaranteed_capacity(); return *this; diff --git a/libstdc++-v3/include/std/regex b/libstdc++-v3/include/std/regex index 442a095a417..9395f5011e0 100644 --- a/libstdc++-v3/include/std/regex +++ b/libstdc++-v3/include/std/regex @@ -56,11 +56,11 @@ #include <bits/regex_constants.h> #include <bits/regex_error.h> -#include <bits/regex_scanner.h> #include <bits/regex_automaton.h> +#include <bits/regex.h> +#include <bits/regex_scanner.h> #include <bits/regex_compiler.h> #include <bits/regex_executor.h> -#include <bits/regex.h> #endif // C++11 diff --git a/libstdc++-v3/src/c++11/thread.cc b/libstdc++-v3/src/c++11/thread.cc index d7c3fb10e8c..49aacb5a96d 100644 --- a/libstdc++-v3/src/c++11/thread.cc +++ b/libstdc++-v3/src/c++11/thread.cc @@ -183,7 +183,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ::usleep(__us); } # else - ::sleep(__s.count() + (__ns >= 1000000)); + ::sleep(__s.count() + (__ns.count() >= 1000000)); # endif #elif defined(_GLIBCXX_HAVE_WIN32_SLEEP) unsigned long ms = __ns.count() / 1000000; diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc index 87200a70d6d..c6f90d86e1d 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc @@ -32,9 +32,11 @@ void test01() typedef std::vector<T, alloc_type> test_type; test_type v1(alloc_type(1)); v1 = { T() }; + auto it = v1.begin(); test_type v2(std::move(v1)); VERIFY(1 == v1.get_allocator().get_personality()); VERIFY(1 == v2.get_allocator().get_personality()); + VERIFY( it == v2.begin() ); } void test02() diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc index b88672989c6..88c5ad0f30a 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc @@ -46,16 +46,35 @@ void test02() typedef std::vector<T, alloc_type> test_type; test_type v1(alloc_type(1)); v1.push_back(T()); + auto it = v1.begin(); test_type v2(alloc_type(2)); - v2 = std::move(v1); v2.push_back(T()); + v2 = std::move(v1); + VERIFY( it == v2.begin() ); VERIFY(0 == v1.get_allocator().get_personality()); VERIFY(1 == v2.get_allocator().get_personality()); } +void test03() +{ + bool test __attribute__((unused)) = true; + typedef propagating_allocator<T, false> alloc_type; + typedef std::vector<T, alloc_type> test_type; + test_type v1(alloc_type(1)); + v1.push_back(T()); + auto it = v1.begin(); + test_type v2(alloc_type(1)); + v2.push_back(T()); + v2 = std::move(v1); + VERIFY( it == v2.begin() ); + VERIFY(1 == v1.get_allocator().get_personality()); + VERIFY(1 == v2.get_allocator().get_personality()); +} + int main() { test01(); test02(); + test03(); return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/vector/debug/move_assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/debug/move_assign_neg.cc new file mode 100644 index 00000000000..eb2233b35fe --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/debug/move_assign_neg.cc @@ -0,0 +1,50 @@ +// Copyright (C) 2013 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 run { xfail *-*-* } } + +#include <debug/vector> + +#include <testsuite_allocator.h> +#include <testsuite_hooks.h> + +void test01() +{ + bool test __attribute__((unused)) = true; + + typedef __gnu_test::uneq_allocator<int> alloc_type; + typedef __gnu_debug::vector<int, alloc_type> test_type; + + test_type v1(alloc_type(1)); + v1 = { 0, 1, 2, 3 }; + + test_type v2(alloc_type(2)); + v2 = { 4, 5, 6, 7 }; + + auto it = v2.begin(); + + v1 = std::move(v2); + + VERIFY( it == v1.begin() ); // Error, it is singular +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/28_regex/traits/char/user_defined.cc b/libstdc++-v3/testsuite/28_regex/traits/char/user_defined.cc new file mode 100644 index 00000000000..7e8f21dc991 --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/traits/char/user_defined.cc @@ -0,0 +1,60 @@ +// { dg-options "-std=gnu++11" } +// { dg-do run } + +// +// 2014-01-07 Tim Shen <timshen91@gmail.com> +// +// Copyright (C) 2010-2014 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/>. + +// 28.3 Requirements [re.req] +// 28.2 (4) Table 127 - Regular expression traits class requirements +// 28.7 Class template regex_traits [re.traits] + +#include <regex> +#include <string> +#include <testsuite_hooks.h> + +using namespace std; + +template<typename CharT> + class MyRegexTraits + : public regex_traits<CharT> + { + public: + CharT + translate(CharT c) const + { + return c+1; + } + }; + +void +test01() +{ + bool test __attribute__((unused)) = true; + + basic_regex<char, MyRegexTraits<char>> re("."); + VERIFY(!regex_match("\n", re)); + VERIFY(!regex_match("\r", re)); +} + +int main() +{ + test01(); + return 0; +} diff --git a/libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc b/libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc new file mode 100644 index 00000000000..7eca2d5474d --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/traits/wchar_t/user_defined.cc @@ -0,0 +1,62 @@ +// { dg-options "-std=gnu++11" } +// { dg-do run } + +// +// 2014-01-07 Tim Shen <timshen91@gmail.com> +// +// Copyright (C) 2010-2014 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/>. + +// 28.3 Requirements [re.req] +// 28.2 (4) Table 127 - Regular expression traits class requirements +// 28.7 Class template regex_traits [re.traits] + +#include <regex> +#include <string> +#include <testsuite_hooks.h> + +using namespace std; + +template<typename CharT> + class MyRegexTraits + : public regex_traits<CharT> + { + public: + CharT + translate(CharT c) const + { + return c+1; + } + }; + +void +test01() +{ + bool test __attribute__((unused)) = true; + + basic_regex<wchar_t, MyRegexTraits<wchar_t>> re(L"."); + VERIFY(!regex_match(L"\n", re)); + VERIFY(!regex_match(L"\r", re)); + VERIFY(!regex_match(L"\u2028", re)); + VERIFY(!regex_match(L"\u2029", re)); +} + +int main() +{ + test01(); + return 0; +} |