diff options
author | Yvan Roux <yvan.roux@linaro.org> | 2012-12-05 21:32:59 +0100 |
---|---|---|
committer | Yvan Roux <yvan.roux@linaro.org> | 2012-12-05 21:32:59 +0100 |
commit | 4f42b3a23cda11b9ab474294433eba54280981e0 (patch) | |
tree | 7fea79c42a56ea958d920bee42b409e15446ef89 | |
parent | ebb8b21a05be633e75c2605600962033f730dbc1 (diff) |
Merge from FSF GCC 4.7.2 (svn branches/gcc-4_7-branch 194184).
284 files changed, 2530 insertions, 1164 deletions
diff --git a/ChangeLog.linaro b/ChangeLog.linaro index 7e34bf45cbd..765a3c91c05 100644 --- a/ChangeLog.linaro +++ b/ChangeLog.linaro @@ -1,3 +1,7 @@ +2012-12-05 Yvan Roux <yvan.roux@linaro.org> + + Merge from FSF GCC 4.7.2 (svn branches/gcc-4_7-branch 194184). + 2012-11-26 Michael Hope <michael.hope@linaro.org> Merge from FSF arm/aarch64-4.7-branch r193473..r193768. diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8467e9effdb..1cab51a227a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,197 @@ +2012-12-03 Eric Botcazou <ebotcazou@adacore.com> + + * config/ia64/ia64.c (ia64_compute_frame_size): Allocate the scratch + area if the function allocates dynamic stack space. + (ia64_initial_elimination_offset): Adjust offsets to above change. + +2012-12-03 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2012-09-24 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/53663 + * tree-ssa-sccvn.c (vn_reference_lookup_3): Conditional + native encode/interpret translation on VN_WALKREWRITE. + +2012-12-03 Kai Tietz <ktietz@redhat.com> + + PR target/53912 + * ggc-common.c (POINTER_HASH): Cast from pointer via intptr_t. + + PR target/53912 + * tree-dump.c (dump_pointer): Print pointer via HOST_WIDE_INT_PRINT. + + PR target/53912 + * pointer-set.c (hash1): Cast from pointer via uintptr_t. + +2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + Backport from mainline: + 2012-11-12 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR target/55195 + * config/pa/pa.md (type): Add sibcall and sh_func_adrs insn types. + (in_branch_delay): Don't allow sibcall or sh_func_adrs insns. + (in_nullified_branch_delay): Likewise. + (in_call_delay): Likewise. + Define delay for sibcall insns. Adjust Z3 and Z4 insn reservations for + new types. Add opaque cond to mark all calls, sibcalls, dyncalls and + the $$sh_func_adrs call as variable. Update type of sibcalls and + $$sh_func_adrs call. + * config/pa/pa.c (pa_adjust_insn_length): Revise to return updated + length instead of adjustment. Handle negative and undefined call + adjustments for insn_default_length. Remove adjustment for millicode + insn with unfilled delay slot. + (pa_output_millicode_call): Update for revised millicode length. + * config/pa/pa.h (ADJUST_INSN_LENGTH): Revise to set LENGTH. + +2012-11-29 Kai Tietz <ktietz@redhat.com> + + PR target/55171 + * prefix.c (lookup_key): Replace xmalloc/xrealloc + use by XNEWVEC/XRESIZEVEC. + + * i386.c (get_scratch_register_on_entry): Handle + thiscall-convention. + (split_stack_prologue_scratch_regno): Likewise. + (ix86_static_chain): Likewise. + (x86_output_mi_thunk): Likewise. + +2012-11-28 H.J. Lu <hongjiu.lu@intel.com> + + Backported from mainline + 2012-11-27 H.J. Lu <hongjiu.lu@intel.com> + Markus Trippelsdorf <markus@trippelsdorf.de> + + PR lto/54795 + * lto-opts.c (lto_write_options): Also handle + OPT_SPECIAL_unknown, OPT_SPECIAL_ignore and + OPT_SPECIAL_program_name. + + PR lto/55474 + * lto-wrapper.c (merge_and_complain): Handle + OPT_SPECIAL_unknown, OPT_SPECIAL_ignore, + OPT_SPECIAL_program_name and OPT_SPECIAL_input_file. + +2012-11-27 Paolo Bonzini <pbonzini@redhat.com> + + PR rtl-optimization/55489 + * gcse.c (compute_transp): Precompute a canonical version + of XEXP (x, 0), and pass it to canon_true_dependence. + +2012-11-27 Richard Biener <rguenther@suse.de> + + PR middle-end/55331 + * gimple-fold.c (gimplify_and_update_call_from_tree): Replace + stmt with a NOP instead of removing it. + +2012-11-26 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2012-10-19 Richard Biener <rguenther@suse.de> + + PR tree-optimization/54976 + * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): + Robustify against odd inner_mode inputs. + + 2012-10-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/54894 + * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size): + Handle over-aligned scalar types properly. + + 2012-10-02 Richard Guenther <rguenther@suse.de> + + PR middle-end/54735 + * tree-ssa-pre.c (do_pre): Make sure to update virtual SSA form before + cleaning up the CFG. + +2012-11-21 Michael Meissner <meissner@linux.vnet.ibm.com> + + Backport from mainline + 2012-11-20 Michael Meissner <meissner@linux.vnet.ibm.com> + + * config/rs6000/rs6000.md (movdf_hardfloat32): Add a comment + explaining the register ordering preferences. + + 2012-11-19 Michael Meissner <meissner@linux.vnet.ibm.com> + * config/rs6000/rs6000.md (movdf_hardfloat32): Reorder move + constraints so that the traditional floating point loads, stores, + and moves are done first, then the VSX loads, stores, and moves, + and finally the GPR loads, stores, and moves so that reload + chooses FPRs over GPRs, and uses the traditional load/store + instructions which provide an offset. + (movdf_hardfloat64): Likewise. + +2012-11-19 H.J. Lu <hongjiu.lu@intel.com> + + Backported from mainline + 2012-11-13 Eric Botcazou <ebotcazou@adacore.com> + H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/55142 + * config/i386/i386.c (legitimize_pic_address): Properly handle + REG + CONST. + (ix86_print_operand_address): Set code to 'k' when forcing + addr32 prefix. For x32, zero-extend negative displacement if + it < -16*1024*1024. + +2012-11-12 Eric Botcazou <ebotcazou@adacore.com> + + * common.opt (fvar-tracking-uninit): Document. + * toplev.c (process_options): Fix handling of flag_var_tracking_uninit. + * config/darwin.c (darwin_override_options): Likewise. + +2012-11-11 Eric Botcazou <ebotcazou@adacore.com> + + * config/sparc/sparc.h (AS_NIAGARA3_FLAG): Tweak. + * config/sparc/sol2.h (TARGET_CPU_niagara4 support): Fix pasto. + +2012-11-09 Eric Botcazou <ebotcazou@adacore.com> + + * doc/install.texi (sparc64-x-solaris2): Mention MPC as well. + +2012-11-09 Eric Botcazou <ebotcazou@adacore.com> + + * config/i386/i386.c (release_scratch_register_on_entry): Also adjust + sp_offset manually. + +2012-11-07 Uros Bizjak <ubizjak@gmail.com> + + Backport from mainline + 2012-11-06 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (ix86_init_machine_status): Do not + explicitly clear tls_descriptor_call_expanded_p again. + + 2012-11-06 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/sse.md + (<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>): Mark operand 0 + as read and written by the instruction. + + 2012-11-06 Uros Bizjak <ubizjak@gmail.com> + + * config/i386/i386.c (TARGET_INSTANTIATE_DECLS): New define. + (ix86_instantiate_decls): New function. + (ix86_expand_builtin) <case IX86_BUILTIN_LDMXCSR>: Use SLOT_TEMP + stack slot instead of SLOT_VIRTUAL. + <case IX86_BUILTIN_STMXCSR>: Ditto. + (assign_386_stack_local): Do not assert when virtual slot is valid. + * config/i386/i386.h (enum ix86_stack_slot): Remove SLOT_VIRTUAL. + * config/i386/i386.md (truncdfsf2): Do not use SLOT_VIRTUAL stack slot. + (truncxf<mode>2): Ditto. + (floatunssi<mode>2): Ditto. + (isinf<mode>2): Ditto. + * config/i386/sync.md (atomic_load<mode>): Ditto. + (atomic_store<mode>): Ditto. + +2012-11-07 Eric Botcazou <ebotcazou@adacore.com> + + PR middle-end/55219 + * fold-const.c (fold_binary_op_with_conditional_arg): Do not fold if + the argument is itself a conditional expression. + 2012-11-05 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (print_reg): Replace REX_INT_REG_P with diff --git a/gcc/DATESTAMP b/gcc/DATESTAMP index 8dbf6812d54..baca56c919b 100644 --- a/gcc/DATESTAMP +++ b/gcc/DATESTAMP @@ -1 +1 @@ -20121106 +20121205 diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index c8c9b74d4f5..61c28a0a2f4 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,18 @@ +2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR ada/52110 + * s-osinte-hpux-dce.ads: Declare pthread_rwlockattr_t and + pthread_rwlock_t subtypes. Delete duplicate declaration of clockid_t. + * s-taspri-hpux-dce.ads: Change "pragma Atomic (Thread)" to comment. + +2012-11-09 Eric Botcazou <ebotcazou@adacore.com> + + PR other/52438 + * s-taspri-lynxos.ads: Delete. + * s-osinte-kfreebsd-gnu.ads: Change license to GPL V3+. + * s-tpopsp-rtems.adb: Likewise. + * s-osinte-rtems.adb: Likewise. + 2012-10-30 Eric Botcazou <ebotcazou@adacore.com> * gcc-interface/Make-lang.in: Fix and clean up rules for C files. diff --git a/gcc/ada/s-osinte-hpux-dce.ads b/gcc/ada/s-osinte-hpux-dce.ads index 3b156a26597..e6ee0ed5e8f 100644 --- a/gcc/ada/s-osinte-hpux-dce.ads +++ b/gcc/ada/s-osinte-hpux-dce.ads @@ -244,6 +244,14 @@ package System.OS_Interface is type pthread_condattr_t is limited private; type pthread_key_t is private; + -- Read/Write lock not supported on HPUX. To add support both types + -- pthread_rwlock_t and pthread_rwlockattr_t must properly be defined + -- with the associated routines pthread_rwlock_[init/destroy] and + -- pthread_rwlock_[rdlock/wrlock/unlock]. + + subtype pthread_rwlock_t is pthread_mutex_t; + subtype pthread_rwlockattr_t is pthread_mutexattr_t; + ----------- -- Stack -- ----------- @@ -444,7 +452,6 @@ private end record; pragma Convention (C, timespec); - type clockid_t is new int; CLOCK_REALTIME : constant clockid_t := 1; type cma_t_address is new System.Address; diff --git a/gcc/ada/s-osinte-kfreebsd-gnu.ads b/gcc/ada/s-osinte-kfreebsd-gnu.ads index 958d4217de4..23a28e2d545 100644 --- a/gcc/ada/s-osinte-kfreebsd-gnu.ads +++ b/gcc/ada/s-osinte-kfreebsd-gnu.ads @@ -9,23 +9,21 @@ -- Copyright (C) 1991-1994, Florida State University -- -- Copyright (C) 1995-2005,2008 Free Software Foundation, Inc. -- -- -- --- GNARL is free software; you can redistribute it and/or modify it under -- +-- 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- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- --- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT 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 distributed with GNARL; see file COPYING. If not, write -- --- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- --- Boston, MA 02110-1301, USA. -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- --- As a special exception, if other files instantiate generics from this -- --- unit, or you link this unit with other files to produce an executable, -- --- this unit does not by itself cause the resulting executable to be -- --- covered by the GNU General Public License. This exception does not -- --- however invalidate any other reasons why the executable file might be -- --- covered by the GNU Public License. -- +-- As a special exception 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/>. -- -- -- -- GNARL was developed by the GNARL team at Florida State University. -- -- Extensive contributions were provided by Ada Core Technologies, Inc. -- diff --git a/gcc/ada/s-osinte-rtems.adb b/gcc/ada/s-osinte-rtems.adb index fc99ce4e848..de21785941a 100644 --- a/gcc/ada/s-osinte-rtems.adb +++ b/gcc/ada/s-osinte-rtems.adb @@ -8,23 +8,21 @@ -- -- -- Copyright (C) 1991-2009 Florida State University -- -- -- --- GNARL is free software; you can redistribute it and/or modify it under -- +-- 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- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- --- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT 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 distributed with GNARL; see file COPYING. If not, write -- --- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- --- Boston, MA 02110-1301, USA. -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- --- As a special exception, if other files instantiate generics from this -- --- unit, or you link this unit with other files to produce an executable, -- --- this unit does not by itself cause the resulting executable to be -- --- covered by the GNU General Public License. This exception does not -- --- however invalidate any other reasons why the executable file might be -- --- covered by the GNU Public License. -- +-- As a special exception 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/>. -- -- -- GNARL was developed by the GNARL team at Florida State University. It is -- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida -- diff --git a/gcc/ada/s-taspri-hpux-dce.ads b/gcc/ada/s-taspri-hpux-dce.ads index 9d51d5c4517..6cde3474699 100644 --- a/gcc/ada/s-taspri-hpux-dce.ads +++ b/gcc/ada/s-taspri-hpux-dce.ads @@ -102,7 +102,9 @@ private type Private_Data is record Thread : aliased System.OS_Interface.pthread_t; - pragma Atomic (Thread); + -- pragma Atomic (Thread); + -- Unfortunately, the above fails because Thread is 64 bits. + -- Thread field may be updated by two different threads of control. -- (See, Enter_Task and Create_Task in s-taprop.adb). They put the -- same value (thr_self value). We do not want to use lock on those diff --git a/gcc/ada/s-taspri-lynxos.ads b/gcc/ada/s-taspri-lynxos.ads deleted file mode 100644 index 4e08865d831..00000000000 --- a/gcc/ada/s-taspri-lynxos.ads +++ /dev/null @@ -1,125 +0,0 @@ ------------------------------------------------------------------------------- --- -- --- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- --- -- --- S Y S T E M . T A S K _ P R I M I T I V E S -- --- -- --- S p e c -- --- -- --- Copyright (C) 1991-1994, Florida State University -- --- Copyright (C) 1995-2008, AdaCore -- --- -- --- GNARL 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- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- --- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- --- OUT 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 distributed with GNARL; see file COPYING. If not, write -- --- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- --- Boston, MA 02110-1301, USA. -- --- -- --- As a special exception, if other files instantiate generics from this -- --- unit, or you link this unit with other files to produce an executable, -- --- this unit does not by itself cause the resulting executable to be -- --- covered by the GNU General Public License. This exception does not -- --- however invalidate any other reasons why the executable file might be -- --- covered by the GNU Public License. -- --- -- --- GNARL was developed by the GNARL team at Florida State University. -- --- Extensive contributions were provided by Ada Core Technologies, Inc. -- --- -- ------------------------------------------------------------------------------- - --- This is a LynxOS version of this package, derived from s-taspri-posix.ads - -pragma Polling (Off); --- Turn off polling, we do not want ATC polling to take place during tasking --- operations. It causes infinite loops and other problems. - -with System.OS_Interface; - -package System.Task_Primitives is - pragma Preelaborate; - - type Lock is limited private; - -- Should be used for implementation of protected objects - - type RTS_Lock is limited private; - -- Should be used inside the runtime system. The difference between Lock - -- and the RTS_Lock is that the later one serves only as a semaphore so - -- that do not check for ceiling violations. - - type Suspension_Object is limited private; - -- Should be used for the implementation of Ada.Synchronous_Task_Control - - type Task_Body_Access is access procedure; - -- Pointer to the task body's entry point (or possibly a wrapper - -- declared local to the GNARL). - - type Private_Data is limited private; - -- Any information that the GNULLI needs maintained on a per-task basis. - -- A component of this type is guaranteed to be included in the - -- Ada_Task_Control_Block. - - subtype Task_Address is System.Address; - -- In some versions of Task_Primitives, notably for VMS, Task_Address is - -- the short version of address defined in System.Aux_DEC. To avoid - -- dragging Aux_DEC into tasking packages a tasking specific subtype is - -- defined here. - - Task_Address_Size : constant := Standard'Address_Size; - -- The size of Task_Address - - Alternate_Stack_Size : constant := 0; - -- No alternate signal stack is used on this platform - -private - - type Lock is record - Mutex : aliased System.OS_Interface.pthread_mutex_t; - Ceiling : System.Any_Priority; - Saved_Priority : System.Any_Priority; - end record; - - type RTS_Lock is new System.OS_Interface.pthread_mutex_t; - - type Suspension_Object is record - State : Boolean; - pragma Atomic (State); - -- Boolean that indicates whether the object is open. This field is - -- marked Atomic to ensure that we can read its value without locking - -- the access to the Suspension_Object. - - Waiting : Boolean; - -- Flag showing if there is a task already suspended on this object - - L : aliased System.OS_Interface.pthread_mutex_t; - -- Protection for ensuring mutual exclusion on the Suspension_Object - - CV : aliased System.OS_Interface.pthread_cond_t; - -- Condition variable used to queue threads until condition is signaled - end record; - - type Private_Data is record - Thread : aliased System.OS_Interface.pthread_t; - pragma Atomic (Thread); - -- Thread field may be updated by two different threads of control. - -- (See, Enter_Task and Create_Task in s-taprop.adb). They put the - -- same value (thr_self value). We do not want to use lock on those - -- operations and the only thing we have to make sure is that they - -- are updated in atomic fashion. - - LWP : aliased System.Address; - -- The purpose of this field is to provide a better tasking support on - -- gdb. The order of the two first fields (Thread and LWP) is important. - -- On targets where lwp is not relevant, this is equivalent to Thread. - - CV : aliased System.OS_Interface.pthread_cond_t; - - L : aliased RTS_Lock; - -- Protection for all components is lock L - end record; - -end System.Task_Primitives; diff --git a/gcc/ada/s-tpopsp-rtems.adb b/gcc/ada/s-tpopsp-rtems.adb index 1d672b95324..a0aec9ef745 100644 --- a/gcc/ada/s-tpopsp-rtems.adb +++ b/gcc/ada/s-tpopsp-rtems.adb @@ -14,21 +14,19 @@ -- -- -- GNARL 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- -- --- ware Foundation; either version 2, or (at your option) any later ver- -- --- sion. GNARL is distributed in the hope that it will be useful, but WITH- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- -- OUT 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 distributed with GNARL; see file COPYING. If not, write -- --- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, -- --- Boston, MA 02110-1301, USA. -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- -- -- --- As a special exception, if other files instantiate generics from this -- --- unit, or you link this unit with other files to produce an executable, -- --- this unit does not by itself cause the resulting executable to be -- --- covered by the GNU General Public License. This exception does not -- --- however invalidate any other reasons why the executable file might be -- --- covered by the GNU Public License. -- +-- As a special exception 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/>. -- -- -- -- GNARL was developed by the GNARL team at Florida State University. It is -- -- now maintained by Ada Core Technologies Inc. in cooperation with Florida -- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d8298e01227..1cc6f263be6 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,12 @@ +2012-12-03 Marek Polacek <polacek@redhat.com> + + Backported from mainline + 2012-12-03 Marek Polacek <polacek@redhat.com> + + PR c/55570 + * c-common.c (check_user_alignment): Swap order of tests, + check TREE_CODE first. + 2012-09-20 Release Manager * GCC 4.7.2 released. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 1d19251a65f..82a2b8d6cd2 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -6741,8 +6741,8 @@ check_user_alignment (const_tree align, bool allow_zero) { int i; - if (!INTEGRAL_TYPE_P (TREE_TYPE (align)) - || TREE_CODE (align) != INTEGER_CST) + if (TREE_CODE (align) != INTEGER_CST + || !INTEGRAL_TYPE_P (TREE_TYPE (align))) { error ("requested alignment is not an integer constant"); return -1; diff --git a/gcc/common.opt b/gcc/common.opt index 628f765d634..fbeb4810817 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -2129,6 +2129,10 @@ fvar-tracking-assignments-toggle Common Report Var(flag_var_tracking_assignments_toggle) Optimization Toggle -fvar-tracking-assignments +; Positive if we should track uninitialized variables, negative if +; we should run the var-tracking pass only to discard debug +; annotations. When flag_var_tracking_uninit == AUTODETECT_VALUE it +; will be set according to flag_var_tracking. fvar-tracking-uninit Common Report Var(flag_var_tracking_uninit) Optimization Perform variable tracking and also tag variables that are uninitialized diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index ba253dd7dbf..63684e3a02c 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -3024,12 +3024,12 @@ darwin_override_options (void) darwin_emit_branch_islands = true; } - if (flag_var_tracking + if (flag_var_tracking_uninit == 0 && generating_for_darwin_version >= 9 && (flag_gtoggle ? (debug_info_level == DINFO_LEVEL_NONE) : (debug_info_level >= DINFO_LEVEL_NORMAL)) && write_symbols == DWARF2_DEBUG) - flag_var_tracking_uninit = 1; + flag_var_tracking_uninit = flag_var_tracking; if (MACHO_DYNAMIC_NO_PIC_P) { diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index b42870f663f..d89adae3447 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -9558,6 +9558,8 @@ get_scratch_register_on_entry (struct scratch_reg *sr) tree decl = current_function_decl, fntype = TREE_TYPE (decl); bool fastcall_p = lookup_attribute ("fastcall", TYPE_ATTRIBUTES (fntype)) != NULL_TREE; + bool thiscall_p + = lookup_attribute ("thiscall", TYPE_ATTRIBUTES (fntype)) != NULL_TREE; bool static_chain_p = DECL_STATIC_CHAIN (decl); int regparm = ix86_function_regparm (fntype, decl); int drap_regno @@ -9568,10 +9570,15 @@ get_scratch_register_on_entry (struct scratch_reg *sr) if ((regparm < 1 || (fastcall_p && !static_chain_p)) && drap_regno != AX_REG) regno = AX_REG; - else if (regparm < 2 && drap_regno != DX_REG) + /* 'thiscall' sets regparm to 1, uses ecx for arguments and edx + for the static chain register. */ + else if (thiscall_p && !static_chain_p && drap_regno != AX_REG) + regno = AX_REG; + else if (regparm < 2 && !thiscall_p && drap_regno != DX_REG) regno = DX_REG; /* ecx is the static chain register. */ - else if (regparm < 3 && !fastcall_p && !static_chain_p + else if (regparm < 3 && !fastcall_p && !thiscall_p + && !static_chain_p && drap_regno != CX_REG) regno = CX_REG; else if (ix86_save_reg (BX_REG, true)) @@ -9604,6 +9611,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr) { if (sr->saved) { + struct machine_function *m = cfun->machine; rtx x, insn = emit_insn (gen_pop (sr->reg)); /* The RTX_FRAME_RELATED_P mechanism doesn't know about pop. */ @@ -9611,6 +9619,7 @@ release_scratch_register_on_entry (struct scratch_reg *sr) x = gen_rtx_PLUS (Pmode, stack_pointer_rtx, GEN_INT (UNITS_PER_WORD)); x = gen_rtx_SET (VOIDmode, stack_pointer_rtx, x); add_reg_note (insn, REG_FRAME_RELATED_EXPR, x); + m->fs.sp_offset -= UNITS_PER_WORD; } } @@ -11081,12 +11090,15 @@ split_stack_prologue_scratch_regno (void) return R11_REG; else { - bool is_fastcall; + bool is_fastcall, is_thiscall; int regparm; is_fastcall = (lookup_attribute ("fastcall", TYPE_ATTRIBUTES (TREE_TYPE (cfun->decl))) != NULL); + is_thiscall = (lookup_attribute ("thiscall", + TYPE_ATTRIBUTES (TREE_TYPE (cfun->decl))) + != NULL); regparm = ix86_function_regparm (TREE_TYPE (cfun->decl), cfun->decl); if (is_fastcall) @@ -11099,6 +11111,12 @@ split_stack_prologue_scratch_regno (void) } return AX_REG; } + else if (is_thiscall) + { + if (!DECL_STATIC_CHAIN (cfun->decl)) + return DX_REG; + return AX_REG; + } else if (regparm < 3) { if (!DECL_STATIC_CHAIN (cfun->decl)) @@ -12328,7 +12346,6 @@ legitimize_pic_address (rtx orig, rtx reg) { rtx addr = orig; rtx new_rtx = orig; - rtx base; #if TARGET_MACHO if (TARGET_MACHO && !TARGET_64BIT) @@ -12533,20 +12550,33 @@ legitimize_pic_address (rtx orig, rtx reg) } else { - base = legitimize_pic_address (XEXP (addr, 0), reg); - new_rtx = legitimize_pic_address (XEXP (addr, 1), - base == reg ? NULL_RTX : reg); + rtx base = legitimize_pic_address (op0, reg); + enum machine_mode mode = GET_MODE (base); + new_rtx + = legitimize_pic_address (op1, base == reg ? NULL_RTX : reg); if (CONST_INT_P (new_rtx)) - new_rtx = plus_constant (base, INTVAL (new_rtx)); + { + if (INTVAL (new_rtx) < -16*1024*1024 + || INTVAL (new_rtx) >= 16*1024*1024) + { + if (!x86_64_immediate_operand (new_rtx, mode)) + new_rtx = force_reg (mode, new_rtx); + new_rtx + = gen_rtx_PLUS (mode, force_reg (mode, base), new_rtx); + } + else + new_rtx = plus_constant (base, INTVAL (new_rtx)); + } else { - if (GET_CODE (new_rtx) == PLUS && CONSTANT_P (XEXP (new_rtx, 1))) + if (GET_CODE (new_rtx) == PLUS + && CONSTANT_P (XEXP (new_rtx, 1))) { - base = gen_rtx_PLUS (Pmode, base, XEXP (new_rtx, 0)); + base = gen_rtx_PLUS (mode, base, XEXP (new_rtx, 0)); new_rtx = XEXP (new_rtx, 1); } - new_rtx = gen_rtx_PLUS (Pmode, base, new_rtx); + new_rtx = gen_rtx_PLUS (mode, base, new_rtx); } } } @@ -14640,7 +14670,30 @@ ix86_print_operand_address (FILE *file, rtx addr) } #endif gcc_assert (!code); - code = 'l'; + code = 'k'; + } + else if (code == 0 + && TARGET_X32 + && disp + && CONST_INT_P (disp) + && INTVAL (disp) < -16*1024*1024) + { + /* X32 runs in 64-bit mode, where displacement, DISP, in + address DISP(%r64), is encoded as 32-bit immediate sign- + extended from 32-bit to 64-bit. For -0x40000300(%r64), + address is %r64 + 0xffffffffbffffd00. When %r64 < + 0x40000300, like 0x37ffe064, address is 0xfffffffff7ffdd64, + which is invalid for x32. The correct address is %r64 + - 0x40000300 == 0xf7ffdd64. To properly encode + -0x40000300(%r64) for x32, we zero-extend negative + displacement by forcing addr32 prefix which truncates + 0xfffffffff7ffdd64 to 0xf7ffdd64. In theory, we should + zero-extend all negative displacements, including -1(%rsp). + However, for small negative displacements, sign-extension + won't cause overflow. We only zero-extend negative + displacements if they < -16*1024*1024, which is also used + to check legitimate address displacements for PIC. */ + code = 'k'; } if (ASSEMBLER_DIALECT == ASM_ATT) @@ -23318,7 +23371,6 @@ ix86_init_machine_status (void) f = ggc_alloc_cleared_machine_function (); f->use_fast_prologue_epilogue_nregs = -1; - f->tls_descriptor_call_expanded_p = 0; f->call_abi = ix86_abi; return f; @@ -23337,9 +23389,6 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n) gcc_assert (n < MAX_386_STACK_LOCALS); - /* Virtual slot is valid only before vregs are instantiated. */ - gcc_assert ((n == SLOT_VIRTUAL) == !virtuals_instantiated); - for (s = ix86_stack_locals; s; s = s->next) if (s->mode == mode && s->n == n) return validize_mem (copy_rtx (s->rtl)); @@ -23353,6 +23402,16 @@ assign_386_stack_local (enum machine_mode mode, enum ix86_stack_slot n) ix86_stack_locals = s; return validize_mem (s->rtl); } + +static void +ix86_instantiate_decls (void) +{ + struct stack_local_entry *s; + + for (s = ix86_stack_locals; s; s = s->next) + if (s->rtl != NULL_RTX) + instantiate_decl_rtl (s->rtl); +} /* Calculate the length of the memory address in the instruction encoding. Includes addr32 prefix, does not include the one-byte modrm, opcode, @@ -24405,7 +24464,7 @@ ix86_static_chain (const_tree fndecl, bool incoming_p) fntype = TREE_TYPE (fndecl); ccvt = ix86_get_callcvt (fntype); - if ((ccvt & (IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL)) != 0) + if ((ccvt & IX86_CALLCVT_FASTCALL) != 0) { /* Fastcall functions use ecx/edx for arguments, which leaves us with EAX for the static chain. @@ -24413,6 +24472,13 @@ ix86_static_chain (const_tree fndecl, bool incoming_p) leaves us with EAX for the static chain. */ regno = AX_REG; } + else if ((ccvt & IX86_CALLCVT_THISCALL) != 0) + { + /* Thiscall functions use ecx for arguments, which leaves + us with EAX and EDX for the static chain. + We are using for abi-compatibility EAX. */ + regno = AX_REG; + } else if (ix86_function_regparm (fntype, fndecl) == 3) { /* For regparm 3, we have no free call-clobbered registers in @@ -29401,13 +29467,13 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, case IX86_BUILTIN_LDMXCSR: op0 = expand_normal (CALL_EXPR_ARG (exp, 0)); - target = assign_386_stack_local (SImode, SLOT_VIRTUAL); + target = assign_386_stack_local (SImode, SLOT_TEMP); emit_move_insn (target, op0); emit_insn (gen_sse_ldmxcsr (target)); return 0; case IX86_BUILTIN_STMXCSR: - target = assign_386_stack_local (SImode, SLOT_VIRTUAL); + target = assign_386_stack_local (SImode, SLOT_TEMP); emit_insn (gen_sse_stmxcsr (target)); return copy_to_mode_reg (SImode, target); @@ -32202,8 +32268,10 @@ x86_output_mi_thunk (FILE *file, else { unsigned int ccvt = ix86_get_callcvt (TREE_TYPE (function)); - if ((ccvt & (IX86_CALLCVT_FASTCALL | IX86_CALLCVT_THISCALL)) != 0) + if ((ccvt & IX86_CALLCVT_FASTCALL) != 0) tmp_regno = AX_REG; + else if ((ccvt & IX86_CALLCVT_THISCALL) != 0) + tmp_regno = DX_REG; else tmp_regno = CX_REG; } @@ -38906,6 +38974,9 @@ ix86_autovectorize_vector_sizes (void) #undef TARGET_PROMOTE_FUNCTION_MODE #define TARGET_PROMOTE_FUNCTION_MODE ix86_promote_function_mode +#undef TARGET_INSTANTIATE_DECLS +#define TARGET_INSTANTIATE_DECLS ix86_instantiate_decls + #undef TARGET_SECONDARY_RELOAD #define TARGET_SECONDARY_RELOAD ix86_secondary_reload diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 3a49803dc30..80d19f1daf2 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -2113,8 +2113,7 @@ enum ix86_entity enum ix86_stack_slot { - SLOT_VIRTUAL = 0, - SLOT_TEMP, + SLOT_TEMP = 0, SLOT_CW_STORED, SLOT_CW_TRUNC, SLOT_CW_FLOOR, diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f1b53a04655..affc5dd199a 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -3968,10 +3968,7 @@ ; else { - enum ix86_stack_slot slot = (virtuals_instantiated - ? SLOT_TEMP - : SLOT_VIRTUAL); - rtx temp = assign_386_stack_local (SFmode, slot); + rtx temp = assign_386_stack_local (SFmode, SLOT_TEMP); emit_insn (gen_truncdfsf2_with_temp (operands[0], operands[1], temp)); DONE; } @@ -4152,12 +4149,7 @@ DONE; } else - { - enum ix86_stack_slot slot = (virtuals_instantiated - ? SLOT_TEMP - : SLOT_VIRTUAL); - operands[2] = assign_386_stack_local (<MODE>mode, slot); - } + operands[2] = assign_386_stack_local (<MODE>mode, SLOT_TEMP); }) (define_insn "*truncxfsf2_mixed" @@ -5365,12 +5357,7 @@ DONE; } else - { - enum ix86_stack_slot slot = (virtuals_instantiated - ? SLOT_TEMP - : SLOT_VIRTUAL); - operands[2] = assign_386_stack_local (DImode, slot); - } + operands[2] = assign_386_stack_local (DImode, SLOT_TEMP); }) (define_expand "floatunsdisf2" @@ -15574,10 +15561,7 @@ emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, operands[1])); else { - enum ix86_stack_slot slot = (virtuals_instantiated - ? SLOT_TEMP - : SLOT_VIRTUAL); - rtx temp = assign_386_stack_local (<MODE>mode, slot); + rtx temp = assign_386_stack_local (<MODE>mode, SLOT_TEMP); emit_move_insn (temp, operands[1]); emit_insn (gen_fxam<mode>2_i387_with_temp (scratch, temp)); diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md index 0621d61d68a..e1600decc47 100644 --- a/gcc/config/i386/sse.md +++ b/gcc/config/i386/sse.md @@ -12315,7 +12315,7 @@ (set_attr "mode" "<sseinsnmode>")]) (define_insn "<avx_avx2>_maskstore<ssemodesuffix><avxsizesuffix>" - [(set (match_operand:V48_AVX2 0 "memory_operand" "=m") + [(set (match_operand:V48_AVX2 0 "memory_operand" "+m") (unspec:V48_AVX2 [(match_operand:<sseintvecmode> 1 "register_operand" "x") (match_operand:V48_AVX2 2 "register_operand" "x") diff --git a/gcc/config/i386/sync.md b/gcc/config/i386/sync.md index ddff1e680ea..a58a1b94895 100644 --- a/gcc/config/i386/sync.md +++ b/gcc/config/i386/sync.md @@ -149,9 +149,7 @@ if (<MODE>mode == DImode && !TARGET_64BIT) emit_insn (gen_atomic_loaddi_fpu (operands[0], operands[1], - assign_386_stack_local (DImode, - (virtuals_instantiated - ? SLOT_TEMP : SLOT_VIRTUAL)))); + assign_386_stack_local (DImode, SLOT_TEMP))); else emit_move_insn (operands[0], operands[1]); DONE; @@ -212,9 +210,7 @@ out to be significantly larger than this plus a barrier. */ emit_insn (gen_atomic_storedi_fpu (operands[0], operands[1], - assign_386_stack_local (DImode, - (virtuals_instantiated - ? SLOT_TEMP : SLOT_VIRTUAL)))); + assign_386_stack_local (DImode, SLOT_TEMP))); } else { diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 77be75787b1..0c6bf7804c4 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -2943,8 +2943,10 @@ ia64_compute_frame_size (HOST_WIDE_INT size) /* We always use the 16-byte scratch area provided by the caller, but if we are a leaf function, there's no one to which we need to provide - a scratch area. */ - if (current_function_is_leaf) + a scratch area. However, if the function allocates dynamic stack space, + the dynamic offset is computed early and contains STACK_POINTER_OFFSET, + so we need to cope. */ + if (current_function_is_leaf && !cfun->calls_alloca) total_size = MAX (0, total_size - 16); current_frame_info.total_size = total_size; @@ -2978,18 +2980,15 @@ ia64_initial_elimination_offset (int from, int to) switch (to) { case HARD_FRAME_POINTER_REGNUM: - if (current_function_is_leaf) - offset = -current_frame_info.total_size; - else - offset = -(current_frame_info.total_size - - crtl->outgoing_args_size - 16); + offset = -current_frame_info.total_size; + if (!current_function_is_leaf || cfun->calls_alloca) + offset += 16 + crtl->outgoing_args_size; break; case STACK_POINTER_REGNUM: - if (current_function_is_leaf) - offset = 0; - else - offset = 16 + crtl->outgoing_args_size; + offset = 0; + if (!current_function_is_leaf || cfun->calls_alloca) + offset += 16 + crtl->outgoing_args_size; break; default: diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 509e37f0440..1a87adcd6ac 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -4851,12 +4851,9 @@ pa_issue_rate (void) -/* Return any length adjustment needed by INSN which already has its length - computed as LENGTH. Return zero if no adjustment is necessary. - - For the PA: function calls, millicode calls, and backwards short - conditional branches with unfilled delay slots need an adjustment by +1 - (to account for the NOP which will be inserted into the instruction stream). +/* Return any length plus adjustment needed by INSN which already has + its length computed as LENGTH. Return LENGTH if no adjustment is + necessary. Also compute the length of an inline block move here as it is too complicated to express as a length attribute in pa.md. */ @@ -4865,19 +4862,40 @@ pa_adjust_insn_length (rtx insn, int length) { rtx pat = PATTERN (insn); + /* If length is negative or undefined, provide initial length. */ + if ((unsigned int) length >= INT_MAX) + { + if (GET_CODE (pat) == SEQUENCE) + insn = XVECEXP (pat, 0, 0); + + switch (get_attr_type (insn)) + { + case TYPE_MILLI: + length = pa_attr_length_millicode_call (insn); + break; + case TYPE_CALL: + length = pa_attr_length_call (insn, 0); + break; + case TYPE_SIBCALL: + length = pa_attr_length_call (insn, 1); + break; + case TYPE_DYNCALL: + length = pa_attr_length_indirect_call (insn); + break; + case TYPE_SH_FUNC_ADRS: + length = pa_attr_length_millicode_call (insn) + 20; + break; + default: + gcc_unreachable (); + } + } + /* Jumps inside switch tables which have unfilled delay slots need adjustment. */ if (GET_CODE (insn) == JUMP_INSN && GET_CODE (pat) == PARALLEL && get_attr_type (insn) == TYPE_BTABLE_BRANCH) - return 4; - /* Millicode insn with an unfilled delay slot. */ - else if (GET_CODE (insn) == INSN - && GET_CODE (pat) != SEQUENCE - && GET_CODE (pat) != USE - && GET_CODE (pat) != CLOBBER - && get_attr_type (insn) == TYPE_MILLI) - return 4; + length += 4; /* Block move pattern. */ else if (GET_CODE (insn) == INSN && GET_CODE (pat) == PARALLEL @@ -4886,7 +4904,7 @@ pa_adjust_insn_length (rtx insn, int length) && GET_CODE (XEXP (XVECEXP (pat, 0, 0), 1)) == MEM && GET_MODE (XEXP (XVECEXP (pat, 0, 0), 0)) == BLKmode && GET_MODE (XEXP (XVECEXP (pat, 0, 0), 1)) == BLKmode) - return compute_movmem_length (insn) - 4; + length += compute_movmem_length (insn) - 4; /* Block clear pattern. */ else if (GET_CODE (insn) == INSN && GET_CODE (pat) == PARALLEL @@ -4894,7 +4912,7 @@ pa_adjust_insn_length (rtx insn, int length) && GET_CODE (XEXP (XVECEXP (pat, 0, 0), 0)) == MEM && XEXP (XVECEXP (pat, 0, 0), 1) == const0_rtx && GET_MODE (XEXP (XVECEXP (pat, 0, 0), 0)) == BLKmode) - return compute_clrmem_length (insn) - 4; + length += compute_clrmem_length (insn) - 4; /* Conditional branch with an unfilled delay slot. */ else if (GET_CODE (insn) == JUMP_INSN && ! simplejump_p (insn)) { @@ -4903,11 +4921,11 @@ pa_adjust_insn_length (rtx insn, int length) && length == 4 && JUMP_LABEL (insn) != NULL_RTX && ! forward_branch_p (insn)) - return 4; + length += 4; else if (GET_CODE (pat) == PARALLEL && get_attr_type (insn) == TYPE_PARALLEL_BRANCH && length == 4) - return 4; + length += 4; /* Adjust dbra insn with short backwards conditional branch with unfilled delay slot -- only for case where counter is in a general register register. */ @@ -4917,11 +4935,9 @@ pa_adjust_insn_length (rtx insn, int length) && ! FP_REG_P (XEXP (XVECEXP (pat, 0, 1), 0)) && length == 4 && ! forward_branch_p (insn)) - return 4; - else - return 0; + length += 4; } - return 0; + return length; } /* Implement the TARGET_PRINT_OPERAND_PUNCT_VALID_P hook. */ @@ -7481,15 +7497,13 @@ pa_output_millicode_call (rtx insn, rtx call_dest) /* Handle the common case where we are sure that the branch will reach the beginning of the $CODE$ subspace. The within reach - form of the $$sh_func_adrs call has a length of 28. Because - it has an attribute type of multi, it never has a nonzero - sequence length. The length of the $$sh_func_adrs is the same - as certain out of reach PIC calls to other routines. */ + form of the $$sh_func_adrs call has a length of 28. Because it + has an attribute type of sh_func_adrs, it never has a nonzero + sequence length (i.e., the delay slot is never filled). */ if (!TARGET_LONG_CALLS - && ((seq_length == 0 - && (attr_length == 12 - || (attr_length == 28 && get_attr_type (insn) == TYPE_MULTI))) - || (seq_length != 0 && attr_length == 8))) + && (attr_length == 8 + || (attr_length == 28 + && get_attr_type (insn) == TYPE_SH_FUNC_ADRS))) { output_asm_insn ("{bl|b,l} %0,%2", xoperands); } diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h index d977c64fdb2..7a1a6fa7e09 100644 --- a/gcc/config/pa/pa.h +++ b/gcc/config/pa/pa.h @@ -1273,8 +1273,8 @@ do { \ /* Handling the special cases is going to get too complicated for a macro, just call `pa_adjust_insn_length' to do the real work. */ -#define ADJUST_INSN_LENGTH(INSN, LENGTH) \ - LENGTH += pa_adjust_insn_length (INSN, LENGTH); +#define ADJUST_INSN_LENGTH(INSN, LENGTH) \ + ((LENGTH) = pa_adjust_insn_length ((INSN), (LENGTH))) /* Millicode insns are actually function calls with some special constraints on arguments and register usage. diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 057eef0b4b7..570245bd4db 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -81,7 +81,7 @@ ;; type "binary" insns have two input operands (1,2) and one output (0) (define_attr "type" - "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,parallel_branch,fpstore_load,store_fpload" + "move,unary,binary,shift,nullshift,compare,load,store,uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,fpload,fpstore,fpalu,fpcc,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,multi,milli,sh_func_adrs,parallel_branch,fpstore_load,store_fpload" (const_string "binary")) (define_attr "pa_combine_type" @@ -124,7 +124,7 @@ ;; For conditional branches. Frame related instructions are not allowed ;; because they confuse the unwind support. (define_attr "in_branch_delay" "false,true" - (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch") + (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch") (eq_attr "length" "4") (not (match_test "RTX_FRAME_RELATED_P (insn)"))) (const_string "true") @@ -133,7 +133,7 @@ ;; Disallow instructions which use the FPU since they will tie up the FPU ;; even if the instruction is nullified. (define_attr "in_nullified_branch_delay" "false,true" - (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch") + (if_then_else (and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,fpcc,fpalu,fpmulsgl,fpmuldbl,fpdivsgl,fpdivdbl,fpsqrtsgl,fpsqrtdbl,parallel_branch") (eq_attr "length" "4") (not (match_test "RTX_FRAME_RELATED_P (insn)"))) (const_string "true") @@ -142,7 +142,7 @@ ;; For calls and millicode calls. Allow unconditional branches in the ;; delay slot. (define_attr "in_call_delay" "false,true" - (cond [(and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch") + (cond [(and (eq_attr "type" "!uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch") (eq_attr "length" "4") (not (match_test "RTX_FRAME_RELATED_P (insn)"))) (const_string "true") @@ -157,6 +157,10 @@ (define_delay (eq_attr "type" "call") [(eq_attr "in_call_delay" "true") (nil) (nil)]) +;; Sibcall delay slot description. +(define_delay (eq_attr "type" "sibcall") + [(eq_attr "in_call_delay" "true") (nil) (nil)]) + ;; Millicode call delay slot description. (define_delay (eq_attr "type" "milli") [(eq_attr "in_call_delay" "true") (nil) (nil)]) @@ -611,7 +615,7 @@ ;; to assume have zero latency. (define_insn_reservation "Z3" 0 (and - (eq_attr "type" "!load,fpload,store,fpstore,uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch,fpcc,fpalu,fpmulsgl,fpmuldbl,fpsqrtsgl,fpsqrtdbl,fpdivsgl,fpdivdbl,fpstore_load,store_fpload") + (eq_attr "type" "!load,fpload,store,fpstore,uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch,fpcc,fpalu,fpmulsgl,fpmuldbl,fpsqrtsgl,fpsqrtdbl,fpdivsgl,fpdivdbl,fpstore_load,store_fpload") (eq_attr "cpu" "8000")) "inm_8000,rnm_8000") @@ -619,7 +623,7 @@ ;; retirement unit. (define_insn_reservation "Z4" 0 (and - (eq_attr "type" "uncond_branch,btable_branch,branch,cbranch,fbranch,call,dyncall,multi,milli,parallel_branch") + (eq_attr "type" "uncond_branch,btable_branch,branch,cbranch,fbranch,call,sibcall,dyncall,multi,milli,sh_func_adrs,parallel_branch") (eq_attr "cpu" "8000")) "inm0_8000+inm1_8000,rnm0_8000+rnm1_8000") @@ -5336,7 +5340,9 @@ "!TARGET_64BIT" "* return pa_output_mul_insn (0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_insn "" [(set (reg:SI 29) (mult:SI (reg:SI 26) (reg:SI 25))) @@ -5347,7 +5353,9 @@ "TARGET_64BIT" "* return pa_output_mul_insn (0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_expand "muldi3" [(set (match_operand:DI 0 "register_operand" "") @@ -5438,7 +5446,9 @@ "* return pa_output_div_insn (operands, 0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_insn "" [(set (reg:SI 29) @@ -5452,7 +5462,9 @@ "* return pa_output_div_insn (operands, 0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_expand "udivsi3" [(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" "")) @@ -5495,7 +5507,9 @@ "* return pa_output_div_insn (operands, 1, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_insn "" [(set (reg:SI 29) @@ -5509,7 +5523,9 @@ "* return pa_output_div_insn (operands, 1, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_expand "modsi3" [(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" "")) @@ -5548,7 +5564,9 @@ "* return pa_output_mod_insn (0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_insn "" [(set (reg:SI 29) (mod:SI (reg:SI 26) (reg:SI 25))) @@ -5561,7 +5579,9 @@ "* return pa_output_mod_insn (0, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_expand "umodsi3" [(set (reg:SI 26) (match_operand:SI 1 "move_src_operand" "")) @@ -5600,7 +5620,9 @@ "* return pa_output_mod_insn (1, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) (define_insn "" [(set (reg:SI 29) (umod:SI (reg:SI 26) (reg:SI 25))) @@ -5613,7 +5635,9 @@ "* return pa_output_mod_insn (1, insn);" [(set_attr "type" "milli") - (set (attr "length") (symbol_ref "pa_attr_length_millicode_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_millicode_call (insn)")))]) ;;- and instructions ;; We define DImode `and` so with DImode `not` we can get @@ -7189,7 +7213,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[0], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) (define_insn "call_symref_pic" [(set (match_operand:SI 2 "register_operand" "=&r") (reg:SI 19)) @@ -7266,7 +7292,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[0], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -7351,7 +7379,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[0], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) (define_insn "call_reg" [(call (mem:SI (reg:SI 22)) @@ -7365,7 +7395,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22)); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -7443,7 +7475,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22)); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -7527,7 +7561,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, operands[0]); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) (define_expand "call_value" [(parallel [(set (match_operand 0 "" "") @@ -7653,7 +7689,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[1], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) (define_insn "call_val_symref_pic" [(set (match_operand:SI 3 "register_operand" "=&r") (reg:SI 19)) @@ -7736,7 +7774,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[1], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -7827,7 +7867,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_call (insn, operands[1], 0); }" [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 0)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 0)")))]) (define_insn "call_val_reg" [(set (match_operand 0 "" "") @@ -7842,7 +7884,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22)); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -7926,7 +7970,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, gen_rtx_REG (word_mode, 22)); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) ;; This pattern is split if it is necessary to save and restore the ;; PIC register. @@ -8016,7 +8062,9 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" return pa_output_indirect_call (insn, operands[1]); }" [(set_attr "type" "dyncall") - (set (attr "length") (symbol_ref "pa_attr_length_indirect_call (insn)"))]) + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)] + (symbol_ref "pa_attr_length_indirect_call (insn)")))]) ;; Call subroutine returning any type. @@ -8109,8 +8157,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" pa_output_arg_descriptor (insn); return pa_output_call (insn, operands[0], 1); }" - [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))]) + [(set_attr "type" "sibcall") + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 1)")))]) (define_insn "sibcall_internal_symref_64bit" [(call (mem:SI (match_operand 0 "call_operand_address" "")) @@ -8124,8 +8174,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" pa_output_arg_descriptor (insn); return pa_output_call (insn, operands[0], 1); }" - [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))]) + [(set_attr "type" "sibcall") + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 1)")))]) (define_expand "sibcall_value" [(set (match_operand 0 "" "") @@ -8193,8 +8245,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" pa_output_arg_descriptor (insn); return pa_output_call (insn, operands[1], 1); }" - [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))]) + [(set_attr "type" "sibcall") + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 1)")))]) (define_insn "sibcall_value_internal_symref_64bit" [(set (match_operand 0 "" "") @@ -8209,8 +8263,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" pa_output_arg_descriptor (insn); return pa_output_call (insn, operands[1], 1); }" - [(set_attr "type" "call") - (set (attr "length") (symbol_ref "pa_attr_length_call (insn, 1)"))]) + [(set_attr "type" "sibcall") + (set (attr "length") + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)] + (symbol_ref "pa_attr_length_call (insn, 1)")))]) (define_insn "nop" [(const_int 0)] @@ -9246,10 +9302,11 @@ add,l %2,%3,%3\;bv,n %%r0(%3)" gen_rtx_SYMBOL_REF (SImode, \"$$sh_func_adrs\")); }" - [(set_attr "type" "multi") + [(set_attr "type" "sh_func_adrs") (set (attr "length") - (plus (symbol_ref "pa_attr_length_millicode_call (insn)") - (const_int 20)))]) + (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 28)] + (plus (symbol_ref "pa_attr_length_millicode_call (insn)") + (const_int 20))))]) ;; On the PA, the PIC register is call clobbered, so it must ;; be saved & restored around calls by the caller. If the call diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index f0780c61ab5..181c9cd0fe2 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -9662,47 +9662,39 @@ ;; the constant into an FP register, since it will probably be used there. ;; The "??" is a kludge until we can figure out a more reasonable way ;; of handling these non-offsettable values. + +;; The move constraints are ordered to prefer floating point registers before +;; general purpose registers to avoid doing a store and a load to get the value +;; into a floating point register when it is needed for a floating point +;; operation. Prefer traditional floating point registers over VSX registers, +;; since the D-form version of the memory instructions does not need a GPR for +;; reloading. + (define_insn "*movdf_hardfloat32" - [(set (match_operand:DF 0 "nonimmediate_operand" "=!r,??r,m,ws,?wa,ws,?wa,Z,?Z,d,d,m,wa,!r,!r,!r") - (match_operand:DF 1 "input_operand" "r,m,r,ws,wa,Z,Z,ws,wa,d,m,d,j,G,H,F"))] + [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,ws,?wa,Z,?Z,ws,?wa,wa,Y,??r,!r,!r,!r,!r") + (match_operand:DF 1 "input_operand" "d,m,d,Z,Z,ws,wa,ws,wa,j,r,Y,r,G,H,F"))] "! TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && (gpc_reg_operand (operands[0], DFmode) || gpc_reg_operand (operands[1], DFmode))" - "* -{ - switch (which_alternative) - { - default: - gcc_unreachable (); - case 0: - case 1: - case 2: - return \"#\"; - case 3: - case 4: - return \"xxlor %x0,%x1,%x1\"; - case 5: - case 6: - return \"lxsd%U1x %x0,%y1\"; - case 7: - case 8: - return \"stxsd%U0x %x1,%y0\"; - case 9: - return \"fmr %0,%1\"; - case 10: - return \"lfd%U1%X1 %0,%1\"; - case 11: - return \"stfd%U0%X0 %1,%0\"; - case 12: - return \"xxlxor %x0,%x0,%x0\"; - case 13: - case 14: - case 15: - return \"#\"; - } -}" - [(set_attr "type" "two,load,store,fp,fp,fpload,fpload,fpstore,fpstore,fp,fpload,fpstore,vecsimple,*,*,*") - (set_attr "length" "8,16,16,4,4,4,4,4,4,4,4,4,4,8,12,16")]) + "@ + stfd%U0%X0 %1,%0 + lfd%U1%X1 %0,%1 + fmr %0,%1 + lxsd%U1x %x0,%y1 + lxsd%U1x %x0,%y1 + stxsd%U0x %x1,%y0 + stxsd%U0x %x1,%y0 + xxlor %x0,%x1,%x1 + xxlor %x0,%x1,%x1 + xxlxor %x0,%x0,%x0 + # + # + # + # + # + #" + [(set_attr "type" "fpstore,fpload,fp,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,store,load,two,fp,fp,*") + (set_attr "length" "4,4,4,4,4,4,4,4,4,4,8,8,8,8,12,16")]) (define_insn "*movdf_softfloat32" [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,r,r,r") @@ -9774,33 +9766,33 @@ ; ld/std require word-aligned displacements -> 'Y' constraint. ; List Y->r and r->Y before r->r for reload. (define_insn "*movdf_hardfloat64" - [(set (match_operand:DF 0 "nonimmediate_operand" "=Y,r,!r,ws,?wa,ws,?wa,Z,?Z,d,d,m,wa,*c*l,!r,*h,!r,!r,!r") - (match_operand:DF 1 "input_operand" "r,Y,r,ws,wa,Z,Z,ws,wa,d,m,d,j,r,h,0,G,H,F"))] + [(set (match_operand:DF 0 "nonimmediate_operand" "=m,d,d,Y,??r,!r,ws,?wa,Z,?Z,ws,?wa,wa,*c*l,!r,*h,!r,!r,!r") + (match_operand:DF 1 "input_operand" "d,m,d,r,Y,r,Z,Z,ws,wa,ws,wa,j,r,h,0,G,H,F"))] "TARGET_POWERPC64 && !TARGET_MFPGPR && TARGET_HARD_FLOAT && TARGET_FPRS && TARGET_DOUBLE_FLOAT && (gpc_reg_operand (operands[0], DFmode) || gpc_reg_operand (operands[1], DFmode))" "@ + stfd%U0%X0 %1,%0 + lfd%U1%X1 %0,%1 + fmr %0,%1 std%U0%X0 %1,%0 ld%U1%X1 %0,%1 mr %0,%1 - xxlor %x0,%x1,%x1 - xxlor %x0,%x1,%x1 lxsd%U1x %x0,%y1 lxsd%U1x %x0,%y1 stxsd%U0x %x1,%y0 stxsd%U0x %x1,%y0 - fmr %0,%1 - lfd%U1%X1 %0,%1 - stfd%U0%X0 %1,%0 + xxlor %x0,%x1,%x1 + xxlor %x0,%x1,%x1 xxlxor %x0,%x0,%x0 mt%0 %1 mf%1 %0 - {cror 0,0,0|nop} + nop # # #" - [(set_attr "type" "store,load,*,fp,fp,fpload,fpload,fpstore,fpstore,fp,fpload,fpstore,vecsimple,mtjmpr,mfjmpr,*,*,*,*") + [(set_attr "type" "fpstore,fpload,fp,store,load,*,fpload,fpload,fpstore,fpstore,vecsimple,vecsimple,vecsimple,mtjmpr,mfjmpr,*,*,*,*") (set_attr "length" "4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,8,12,16")]) (define_insn "*movdf_softfloat64" diff --git a/gcc/config/sparc/sol2.h b/gcc/config/sparc/sol2.h index ba2ec35e20a..90dfd89a134 100644 --- a/gcc/config/sparc/sol2.h +++ b/gcc/config/sparc/sol2.h @@ -136,9 +136,9 @@ along with GCC; see the file COPYING3. If not see #undef CPP_CPU64_DEFAULT_SPEC #define CPP_CPU64_DEFAULT_SPEC "" #undef ASM_CPU32_DEFAULT_SPEC -#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plusb" +#define ASM_CPU32_DEFAULT_SPEC "-xarch=v8plus" AS_NIAGARA3_FLAG #undef ASM_CPU64_DEFAULT_SPEC -#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG "b" +#define ASM_CPU64_DEFAULT_SPEC AS_SPARC64_FLAG AS_NIAGARA3_FLAG #undef ASM_CPU_DEFAULT_SPEC #define ASM_CPU_DEFAULT_SPEC ASM_CPU32_DEFAULT_SPEC #endif diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index a1919b4e7e7..93c09388243 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -1742,10 +1742,10 @@ extern int sparc_indent_opcode; #define TARGET_SUN_TLS TARGET_TLS #define TARGET_GNU_TLS 0 -#ifndef HAVE_AS_FMAF_HPC_VIS3 -#define AS_NIAGARA3_FLAG "b" -#else +#ifdef HAVE_AS_FMAF_HPC_VIS3 #define AS_NIAGARA3_FLAG "d" +#else +#define AS_NIAGARA3_FLAG "b" #endif /* The number of Pmode words for the setjmp buffer. */ diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d125ab37cf4..73241eb5901 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,48 @@ +2012-11-29 Jason Merrill <jason@redhat.com> + + PR c++/53137 + * pt.c (tsubst_expr) [DECL_EXPR]: Set LAMBDA_EXPR_THIS_CAPTURE here. + (tsubst_copy_and_build) [LAMBDA_EXPR]: And clear it here. + (instantiate_class_template_1): Not here. + + PR c++/53862 + * pt.c (tsubst_arg_types): Add "end" parameter. + (check_undeduced_parms): Use it. + + PR c++/53039 + * pt.c (arg_from_parm_pack_p): Go back to using same_type_p or + cp_tree_equal. + + * cp-tree.h (TEMPLATE_PARM_NUM_SIBLINGS): Remove. + (struct template_parm_index_s): Remove num_siblings. + * pt.c (fixup_template_parms, fixup_template_parm_index): Remove. + (fixup_template_type_parm_type): Remove. + (build_template_parm_index): Remove num_siblings parm. + (process_template_parm): Likewise. + * parser.c (cp_parser_template_parameter_list): Adjust. + * tree.c (cp_tree_equal): Don't compare num_siblings. + * typeck.c (comp_template_parms_position): Likewise. + + PR c++/50852 + PR c++/53039 + * tree.c (strip_typedefs_expr): New. + * cp-tree.h: Declare it. + * pt.c (convert_template_argument, unify): Use it. + * parser.c (cp_parser_template_declaration_after_export): Don't call + fixup_template_parms. + +2012-11-29 Kai Tietz <ktietz@redhat.com> + + PR target/53912 + * class.c (dump_class_hierarchy_r): Cast from pointer via uintptr_t. + (dump_vtable): Likewise. + +2012-11-24 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55446 + * init.c (build_vec_init): Do not early return error_mark_mode + when integer_all_onesp (maxindex). + 2012-11-05 Jakub Jelinek <jakub@redhat.com> Backported from mainline diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 633bff3390d..ce7798a8fdd 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -7536,9 +7536,9 @@ dump_class_hierarchy_r (FILE *stream, int i; indented = maybe_indent_hierarchy (stream, indent, 0); - fprintf (stream, "%s (0x%lx) ", + fprintf (stream, "%s (0x" HOST_WIDE_INT_PRINT_HEX ") ", type_as_string (BINFO_TYPE (binfo), TFF_PLAIN_IDENTIFIER), - (unsigned long) binfo); + (HOST_WIDE_INT) (uintptr_t) binfo); if (binfo != igo) { fprintf (stream, "alternative-path\n"); @@ -7560,10 +7560,10 @@ dump_class_hierarchy_r (FILE *stream, if (BINFO_PRIMARY_P (binfo)) { indented = maybe_indent_hierarchy (stream, indent + 3, indented); - fprintf (stream, " primary-for %s (0x%lx)", + fprintf (stream, " primary-for %s (0x" HOST_WIDE_INT_PRINT_HEX ")", type_as_string (BINFO_TYPE (BINFO_INHERITANCE_CHAIN (binfo)), TFF_PLAIN_IDENTIFIER), - (unsigned long)BINFO_INHERITANCE_CHAIN (binfo)); + (HOST_WIDE_INT) (uintptr_t) BINFO_INHERITANCE_CHAIN (binfo)); } if (BINFO_LOST_PRIMARY_P (binfo)) { @@ -7696,7 +7696,8 @@ dump_vtable (tree t, tree binfo, tree vtable) if (ctor_vtbl_p) { if (!BINFO_VIRTUAL_P (binfo)) - fprintf (stream, " (0x%lx instance)", (unsigned long)binfo); + fprintf (stream, " (0x" HOST_WIDE_INT_PRINT_HEX " instance)", + (HOST_WIDE_INT) (uintptr_t) binfo); fprintf (stream, " in %s", type_as_string (t, TFF_PLAIN_IDENTIFIER)); } fprintf (stream, "\n"); diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 3126963919a..0981cb88dff 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -248,7 +248,6 @@ struct GTY(()) template_parm_index_s { int index; int level; int orig_level; - int num_siblings; tree decl; }; typedef struct template_parm_index_s template_parm_index; @@ -646,8 +645,9 @@ enum cp_lambda_default_capture_mode_type { #define LAMBDA_EXPR_CAPTURE_LIST(NODE) \ (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->capture_list) -/* During parsing of the lambda, the node in the capture-list that holds - the 'this' capture. */ +/* During parsing of the lambda-introducer, the node in the capture-list + that holds the 'this' capture. During parsing of the body, the + capture proxy for that node. */ #define LAMBDA_EXPR_THIS_CAPTURE(NODE) \ (((struct tree_lambda_expr *)LAMBDA_EXPR_CHECK (NODE))->this_capture) @@ -4515,9 +4515,6 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, TYPENAME_FLAG }; ((template_parm_index*)TEMPLATE_PARM_INDEX_CHECK (NODE)) #define TEMPLATE_PARM_IDX(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->index) #define TEMPLATE_PARM_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->level) -/* The Number of sibling parms this template parm has. */ -#define TEMPLATE_PARM_NUM_SIBLINGS(NODE) \ - (TEMPLATE_PARM_INDEX_CAST (NODE)->num_siblings) #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE)) #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level) #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl) @@ -5288,9 +5285,8 @@ extern void append_type_to_template_for_access_check (tree, tree, tree, extern tree splice_late_return_type (tree, tree); extern bool is_auto (const_tree); extern tree process_template_parm (tree, location_t, tree, - bool, bool, unsigned); + bool, bool); extern tree end_template_parm_list (tree); -void fixup_template_parms (void); extern void end_template_decl (void); extern tree maybe_update_decl_type (tree, tree); extern bool check_default_tmpl_args (tree, tree, int, int, int); @@ -5663,6 +5659,7 @@ extern bool type_has_nontrivial_copy_init (const_tree); extern bool class_tmpl_impl_spec_p (const_tree); extern int zero_init_p (const_tree); extern tree strip_typedefs (tree); +extern tree strip_typedefs_expr (tree); extern tree copy_binfo (tree, tree, tree, tree *, int); extern int member_p (const_tree); diff --git a/gcc/cp/init.c b/gcc/cp/init.c index a84d1f97a0d..483752abd09 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -3151,8 +3151,7 @@ build_vec_init (tree base, tree maxindex, tree init, if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype)) maxindex = array_type_nelts (atype); - if (maxindex == NULL_TREE || maxindex == error_mark_node - || integer_all_onesp (maxindex)) + if (maxindex == NULL_TREE || maxindex == error_mark_node) return error_mark_node; if (explicit_value_init_p) diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a7018d423d3..26205e21c83 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -11967,8 +11967,7 @@ cp_parser_template_parameter_list (cp_parser* parser) parm_loc, parameter, is_non_type, - is_parameter_pack, - 0); + is_parameter_pack); else { tree err_parm = build_tree_list (parameter, parameter); @@ -21134,7 +21133,6 @@ cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p) { /* Parse the template parameters. */ parameter_list = cp_parser_template_parameter_list (parser); - fixup_template_parms (); } /* Get the deferred access checks from the parameter list. These diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 0c512393d38..f2a869c3da1 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -148,7 +148,7 @@ static tree convert_template_argument (tree, tree, tree, static int for_each_template_parm (tree, tree_fn_t, void*, struct pointer_set_t*, bool); static tree expand_template_argument_pack (tree); -static tree build_template_parm_index (int, int, int, int, tree, tree); +static tree build_template_parm_index (int, int, int, tree, tree); static bool inline_needs_template_parms (tree); static void push_inline_template_parms_recursive (tree, int); static tree retrieve_local_specialization (tree); @@ -172,7 +172,7 @@ static tree tsubst_template_parms (tree, tree, tsubst_flags_t); static void regenerate_decl_from_template (tree, tree); static tree most_specialized_class (tree, tree, tsubst_flags_t); static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int); -static tree tsubst_arg_types (tree, tree, tsubst_flags_t, tree); +static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree); static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree); static bool check_specialization_scope (void); static tree process_partial_specialization (tree); @@ -205,8 +205,6 @@ static tree listify_autos (tree, tree); static tree template_parm_to_arg (tree t); static bool arg_from_parm_pack_p (tree, tree); static tree current_template_args (void); -static tree fixup_template_type_parm_type (tree, int); -static tree fixup_template_parm_index (tree, tree, int); static tree tsubst_template_parm (tree, tree, tsubst_flags_t); /* Make the current scope suitable for access checking when we are @@ -3430,14 +3428,12 @@ check_template_shadow (tree decl) } /* Return a new TEMPLATE_PARM_INDEX with the indicated INDEX, LEVEL, - ORIG_LEVEL, DECL, and TYPE. NUM_SIBLINGS is the total number of - template parameters. */ + ORIG_LEVEL, DECL, and TYPE. */ static tree build_template_parm_index (int index, int level, int orig_level, - int num_siblings, tree decl, tree type) { @@ -3445,7 +3441,6 @@ build_template_parm_index (int index, TEMPLATE_PARM_IDX (t) = index; TEMPLATE_PARM_LEVEL (t) = level; TEMPLATE_PARM_ORIG_LEVEL (t) = orig_level; - TEMPLATE_PARM_NUM_SIBLINGS (t) = num_siblings; TEMPLATE_PARM_DECL (t) = decl; TREE_TYPE (t) = type; TREE_CONSTANT (t) = TREE_CONSTANT (decl); @@ -3511,7 +3506,6 @@ reduce_template_parm_level (tree index, tree type, int levels, tree args, t = build_template_parm_index (TEMPLATE_PARM_IDX (index), TEMPLATE_PARM_LEVEL (index) - levels, TEMPLATE_PARM_ORIG_LEVEL (index), - TEMPLATE_PARM_NUM_SIBLINGS (index), decl, type); TEMPLATE_PARM_DESCENDANTS (index) = t; TEMPLATE_PARM_PARAMETER_PACK (t) @@ -3539,8 +3533,7 @@ reduce_template_parm_level (tree index, tree type, int levels, tree args, tree process_template_parm (tree list, location_t parm_loc, tree parm, - bool is_non_type, bool is_parameter_pack, - unsigned num_template_parms) + bool is_non_type, bool is_parameter_pack) { tree decl = 0; tree defval; @@ -3615,7 +3608,6 @@ process_template_parm (tree list, location_t parm_loc, tree parm, DECL_INITIAL (parm) = DECL_INITIAL (decl) = build_template_parm_index (idx, processing_template_decl, processing_template_decl, - num_template_parms, decl, TREE_TYPE (parm)); TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm)) @@ -3649,7 +3641,6 @@ process_template_parm (tree list, location_t parm_loc, tree parm, TEMPLATE_TYPE_PARM_INDEX (t) = build_template_parm_index (idx, processing_template_decl, processing_template_decl, - num_template_parms, decl, TREE_TYPE (parm)); TEMPLATE_TYPE_PARAMETER_PACK (t) = is_parameter_pack; TYPE_CANONICAL (t) = canonical_type_parameter (t); @@ -3689,305 +3680,6 @@ end_template_parm_list (tree parms) return saved_parmlist; } -/* Create a new type almost identical to TYPE but which has the - following differences: - - 1/ T has a new TEMPLATE_PARM_INDEX that carries the new number of - template sibling parameters of T. - - 2/ T has a new canonical type that matches the new number - of sibling parms. - - 3/ From now on, T is going to be what lookups referring to the - name of TYPE will return. No lookup should return TYPE anymore. - - NUM_PARMS is the new number of sibling parms TYPE belongs to. - - This is a subroutine of fixup_template_parms. */ - -static tree -fixup_template_type_parm_type (tree type, int num_parms) -{ - tree orig_idx = TEMPLATE_TYPE_PARM_INDEX (type), idx; - tree t; - /* This is the decl which name is inserted into the symbol table for - the template parm type. So whenever we lookup the type name, this - is the DECL we get. */ - tree decl; - - /* Do not fix up the type twice. */ - if (orig_idx && TEMPLATE_PARM_NUM_SIBLINGS (orig_idx) != 0) - return type; - - t = copy_type (type); - decl = TYPE_NAME (t); - - TYPE_MAIN_VARIANT (t) = t; - TYPE_NEXT_VARIANT (t)= NULL_TREE; - TYPE_POINTER_TO (t) = 0; - TYPE_REFERENCE_TO (t) = 0; - - idx = build_template_parm_index (TEMPLATE_PARM_IDX (orig_idx), - TEMPLATE_PARM_LEVEL (orig_idx), - TEMPLATE_PARM_ORIG_LEVEL (orig_idx), - num_parms, - decl, t); - TEMPLATE_PARM_DESCENDANTS (idx) = TEMPLATE_PARM_DESCENDANTS (orig_idx); - TEMPLATE_PARM_PARAMETER_PACK (idx) = TEMPLATE_PARM_PARAMETER_PACK (orig_idx); - TEMPLATE_TYPE_PARM_INDEX (t) = idx; - - TYPE_STUB_DECL (t) = decl; - TEMPLATE_TYPE_DECL (t) = decl; - if (TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM) - TREE_TYPE (DECL_TEMPLATE_RESULT (decl)) = t; - - /* Update the type associated to the type name stored in the symbol - table. Now, whenever the type name is looked up, the resulting - type is properly fixed up. */ - TREE_TYPE (decl) = t; - - TYPE_CANONICAL (t) = canonical_type_parameter (t); - - return t; -} - -/* Create and return a new TEMPLATE_PARM_INDEX that is almost - identical to I, but that is fixed up as to: - - 1/ carry the number of sibling parms (NUM_PARMS) of the template - parm represented by I. - - 2/ replace all references to template parm types declared before I - (in the same template parm list as I) by references to template - parm types contained in ARGS. ARGS should contain the list of - template parms that have been fixed up so far, in a form suitable - to be passed to tsubst. - - This is a subroutine of fixup_template_parms. */ - -static tree -fixup_template_parm_index (tree i, tree args, int num_parms) -{ - tree index, decl, type; - - if (i == NULL_TREE - || TREE_CODE (i) != TEMPLATE_PARM_INDEX - /* Do not fix up the index twice. */ - || (TEMPLATE_PARM_NUM_SIBLINGS (i) != 0)) - return i; - - decl = TEMPLATE_PARM_DECL (i); - type = TREE_TYPE (decl); - - index = build_template_parm_index (TEMPLATE_PARM_IDX (i), - TEMPLATE_PARM_LEVEL (i), - TEMPLATE_PARM_ORIG_LEVEL (i), - num_parms, - decl, type); - - TEMPLATE_PARM_DESCENDANTS (index) = TEMPLATE_PARM_DESCENDANTS (i); - TEMPLATE_PARM_PARAMETER_PACK (index) = TEMPLATE_PARM_PARAMETER_PACK (i); - - type = tsubst (type, args, tf_none, NULL_TREE); - - TREE_TYPE (decl) = type; - TREE_TYPE (index) = type; - - return index; -} - -/* - This is a subroutine of fixup_template_parms. - - It computes the canonical type of the type of the template - parameter PARM_DESC and update all references to that type so that - they use the newly computed canonical type. No access check is - performed during the fixup. PARM_DESC is a TREE_LIST which - TREE_VALUE is the template parameter and its TREE_PURPOSE is the - default argument of the template parm if any. IDX is the index of - the template parameter, starting at 0. NUM_PARMS is the number of - template parameters in the set PARM_DESC belongs to. ARGLIST is a - TREE_VEC containing the full set of template parameters in a form - suitable to be passed to substs functions as their ARGS - argument. This is what current_template_args returns for a given - template. The innermost vector of args in ARGLIST is the set of - template parms that have been fixed up so far. This function adds - the fixed up parameter into that vector. */ - -static void -fixup_template_parm (tree parm_desc, - int idx, - int num_parms, - tree arglist) -{ - tree parm = TREE_VALUE (parm_desc); - tree fixedup_args = INNERMOST_TEMPLATE_ARGS (arglist); - - push_deferring_access_checks (dk_no_check); - - if (TREE_CODE (parm) == TYPE_DECL) - { - /* PARM is a template type parameter. Fix up its type, add - the fixed-up template parm to the vector of fixed-up - template parms so far, and substitute the fixed-up - template parms into the default argument of this - parameter. */ - tree t = - fixup_template_type_parm_type (TREE_TYPE (parm), num_parms); - TREE_TYPE (parm) = t; - - TREE_VEC_ELT (fixedup_args, idx) = template_parm_to_arg (parm_desc); - } - else if (TREE_CODE (parm) == TEMPLATE_DECL) - { - /* PARM is a template template parameter. This is going to - be interesting. */ - tree tparms, targs, innermost_args, t; - int j; - - /* First, fix up the parms of the template template parm - because the parms are involved in defining the new canonical - type of the template template parm. */ - - /* So we need to substitute the template parm types that have - been fixed up so far into the template parms of this template - template parm. E.g, consider this: - - template<class T, template<T u> class TT> class S; - - In this case we want to substitute T into the - template parameters of TT. - - So let's walk the template parms of PARM here, and - tsubst ARGLIST into into each of the template - parms. */ - - /* For this substitution we need to build the full set of - template parameters and use that as arguments for the - tsubsting function. */ - tparms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (parm)); - - /* This will contain the innermost parms of PARM into which - we have substituted so far. */ - innermost_args = make_tree_vec (TREE_VEC_LENGTH (tparms)); - targs = add_to_template_args (arglist, innermost_args); - for (j = 0; j < TREE_VEC_LENGTH (tparms); ++j) - { - tree parameter; - - parameter = TREE_VEC_ELT (tparms, j); - - /* INNERMOST_ARGS needs to have at least the same number - of elements as the index PARAMETER, ortherwise - tsubsting into PARAMETER will result in partially - instantiating it, reducing its tempate parm - level. Let's tactically fill INNERMOST_ARGS for that - purpose. */ - TREE_VEC_ELT (innermost_args, j) = - template_parm_to_arg (parameter); - - fixup_template_parm (parameter, j, - TREE_VEC_LENGTH (tparms), - targs); - } - - /* Now fix up the type of the template template parm. */ - - t = fixup_template_type_parm_type (TREE_TYPE (parm), num_parms); - TREE_TYPE (parm) = t; - - TREE_VEC_ELT (fixedup_args, idx) = - template_parm_to_arg (parm_desc); - } - else if (TREE_CODE (parm) == PARM_DECL) - { - /* PARM is a non-type template parameter. We need to: - - * Fix up its TEMPLATE_PARM_INDEX to make it carry the - proper number of sibling parameters. - - * Make lookups of the template parameter return a reference - to the fixed-up index. No lookup should return references - to the former index anymore. - - * Substitute the template parms that got fixed up so far - - * into the type of PARM. */ - - tree index = DECL_INITIAL (parm); - - /* PUSHED_DECL is the decl added to the symbol table with - the name of the parameter. E,g: - - template<class T, T u> //#0 - auto my_function(T t) -> decltype(u); //#1 - - Here, when looking up u at //#1, we get the decl of u - resulting from the declaration in #0. This is what - PUSHED_DECL is. We need to replace the reference to the - old TEMPLATE_PARM_INDEX carried by PUSHED_DECL by the - fixed-up TEMPLATE_PARM_INDEX. */ - tree pushed_decl = TEMPLATE_PARM_DECL (index); - - /* Let's fix up the TEMPLATE_PARM_INDEX then. Note that we must - fixup the type of PUSHED_DECL as well and luckily - fixup_template_parm_index does it for us too. */ - tree fixed_up_index = - fixup_template_parm_index (index, arglist, num_parms); - - DECL_INITIAL (pushed_decl) = DECL_INITIAL (parm) = fixed_up_index; - - /* Add this fixed up PARM to the template parms we've fixed - up so far and use that to substitute the fixed-up - template parms into the type of PARM. */ - TREE_VEC_ELT (fixedup_args, idx) = - template_parm_to_arg (parm_desc); - TREE_TYPE (parm) = tsubst (TREE_TYPE (parm), arglist, - tf_none, NULL_TREE); - } - - TREE_PURPOSE (parm_desc) = - tsubst_template_arg (TREE_PURPOSE (parm_desc), - arglist, tf_none, parm); - - pop_deferring_access_checks (); -} - -/* Walk the current template parms and properly compute the canonical - types of the dependent types created during - cp_parser_template_parameter_list. */ - -void -fixup_template_parms (void) -{ - tree arglist; - tree parameter_vec; - tree fixedup_args; - int i, num_parms; - - parameter_vec = INNERMOST_TEMPLATE_PARMS (current_template_parms); - if (parameter_vec == NULL_TREE) - return; - - num_parms = TREE_VEC_LENGTH (parameter_vec); - - /* This vector contains the current innermost template parms that - have been fixed up so far. The form of FIXEDUP_ARGS is suitable - to be passed to tsubst* functions as their ARGS argument. */ - fixedup_args = make_tree_vec (num_parms); - - /* This vector contains the full set of template parms in a form - suitable to be passed to substs functions as their ARGS - argument. */ - arglist = current_template_args (); - arglist = add_outermost_template_args (arglist, fixedup_args); - - /* Let's do the proper fixup now. */ - for (i = 0; i < num_parms; ++i) - fixup_template_parm (TREE_VEC_ELT (parameter_vec, i), - i, num_parms, arglist); -} - /* end_template_decl is called after a template declaration is seen. */ void @@ -4091,34 +3783,13 @@ arg_from_parm_pack_p (tree arg_pack, tree parm_pack) { tree expansion = TREE_VEC_ELT (ARGUMENT_PACK_ARGS (arg_pack), 0); tree pattern = PACK_EXPANSION_PATTERN (expansion); - /* So we have an argument_pack<P...>. We want to test if P - is actually PARM_PACK. We will not use cp_tree_equal to - test P and PARM_PACK because during type fixup (by - fixup_template_parm) P can be a pre-fixup version of a - type and PARM_PACK be its post-fixup version. - cp_tree_equal would consider them as different even - though we would want to consider them compatible for our - precise purpose here. - - Thus we are going to consider that P and PARM_PACK are - compatible if they have the same DECL. */ - if ((/* If ARG_PACK is a type parameter pack named by the - same DECL as parm_pack ... */ - (TYPE_P (pattern) - && TYPE_P (parm_pack) - && TYPE_NAME (pattern) == TYPE_NAME (parm_pack)) - /* ... or if PARM_PACK is a non-type parameter named by the - same DECL as ARG_PACK. Note that PARM_PACK being a - non-type parameter means it's either a PARM_DECL or a - TEMPLATE_PARM_INDEX. */ - || (TREE_CODE (pattern) == TEMPLATE_PARM_INDEX - && ((TREE_CODE (parm_pack) == PARM_DECL - && (TEMPLATE_PARM_DECL (pattern) - == TEMPLATE_PARM_DECL (DECL_INITIAL (parm_pack)))) - || (TREE_CODE (parm_pack) == TEMPLATE_PARM_INDEX - && (TEMPLATE_PARM_DECL (pattern) - == TEMPLATE_PARM_DECL (parm_pack)))))) - && template_parameter_pack_p (pattern)) + if ((TYPE_P (pattern) && same_type_p (pattern, parm_pack)) + || (!TYPE_P (pattern) && cp_tree_equal (parm_pack, pattern))) + /* The argument pack that the parameter maps to is just an + expansion of the parameter itself, such as one would + find in the implicit typedef of a class inside the + class itself. Consider this parameter "unsubstituted", + so that we will maintain the outer pack expansion. */ return true; } return false; @@ -6609,7 +6280,7 @@ convert_template_argument (tree parm, argument specification is valid. */ val = convert_nontype_argument (t, orig_arg, complain); else - val = orig_arg; + val = strip_typedefs_expr (orig_arg); if (val == NULL_TREE) val = error_mark_node; @@ -9195,13 +8866,8 @@ instantiate_class_template_1 (tree type) LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE; } - LAMBDA_EXPR_THIS_CAPTURE (lambda) - = lookup_field_1 (type, get_identifier ("__this"), false); - instantiate_decl (decl, false, false); maybe_add_lambda_conv_op (type); - - LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE; } else gcc_assert (errorcount); @@ -10867,11 +10533,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) return r; } -/* Substitute into the ARG_TYPES of a function type. */ +/* Substitute into the ARG_TYPES of a function type. + If END is a TREE_CHAIN, leave it and any following types + un-substituted. */ static tree tsubst_arg_types (tree arg_types, tree args, + tree end, tsubst_flags_t complain, tree in_decl) { @@ -10881,11 +10550,11 @@ tsubst_arg_types (tree arg_types, tree expanded_args = NULL_TREE; tree default_arg; - if (!arg_types || arg_types == void_list_node) + if (!arg_types || arg_types == void_list_node || arg_types == end) return arg_types; remaining_arg_types = tsubst_arg_types (TREE_CHAIN (arg_types), - args, complain, in_decl); + args, end, complain, in_decl); if (remaining_arg_types == error_mark_node) return error_mark_node; @@ -11010,7 +10679,7 @@ tsubst_function_type (tree t, } /* Substitute the argument types. */ - arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, + arg_types = tsubst_arg_types (TYPE_ARG_TYPES (t), args, NULL_TREE, complain, in_decl); if (arg_types == error_mark_node) return error_mark_node; @@ -12930,6 +12599,12 @@ tsubst_expr (tree t, tree args, tsubst_flags_t complain, tree in_decl, else if (is_capture_proxy (DECL_EXPR_DECL (t))) { DECL_CONTEXT (decl) = current_function_decl; + if (DECL_NAME (decl) == this_identifier) + { + tree lam = DECL_CONTEXT (current_function_decl); + lam = CLASSTYPE_LAMBDA_EXPR (lam); + LAMBDA_EXPR_THIS_CAPTURE (lam) = decl; + } insert_capture_proxy (decl); } else @@ -14431,6 +14106,7 @@ tsubst_copy_and_build (tree t, wait until after we finish instantiating the type. */ LAMBDA_EXPR_CAPTURE_LIST (r) = RECUR (LAMBDA_EXPR_CAPTURE_LIST (t)); + LAMBDA_EXPR_THIS_CAPTURE (r) = NULL_TREE; return build_lambda_object (r); } @@ -16592,6 +16268,7 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict, && !TEMPLATE_PARM_PARAMETER_PACK (parm)) return unify_parameter_pack_mismatch (explain_p, parm, arg); + arg = strip_typedefs_expr (arg); TREE_VEC_ELT (INNERMOST_TEMPLATE_ARGS (targs), idx) = arg; return unify_success (explain_p); @@ -17079,12 +16756,9 @@ check_undeduced_parms (tree targs, tree args, tree end) } if (found) { - for (; args != end; args = TREE_CHAIN (args)) - { - tree substed = tsubst (TREE_VALUE (args), targs, tf_none, NULL_TREE); - if (substed == error_mark_node) - return true; - } + tree substed = tsubst_arg_types (args, targs, end, tf_none, NULL_TREE); + if (substed == error_mark_node) + return true; } return false; } @@ -20325,7 +19999,7 @@ make_auto (void) TYPE_STUB_DECL (au) = TYPE_NAME (au); TEMPLATE_TYPE_PARM_INDEX (au) = build_template_parm_index (0, processing_template_decl + 1, processing_template_decl + 1, - 0, TYPE_NAME (au), NULL_TREE); + TYPE_NAME (au), NULL_TREE); TYPE_CANONICAL (au) = canonical_type_parameter (au); DECL_ARTIFICIAL (TYPE_NAME (au)) = 1; SET_DECL_TEMPLATE_PARM_P (TYPE_NAME (au)); diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 2878ba57689..499b1e3c9f2 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1097,7 +1097,7 @@ cv_unqualified (tree type) * If T is a type that needs structural equality its TYPE_CANONICAL (T) will be NULL. * TYPE_CANONICAL (T) desn't carry type attributes - and looses template parameter names. */ + and loses template parameter names. */ tree strip_typedefs (tree t) @@ -1187,6 +1187,16 @@ strip_typedefs (tree t) TYPENAME_TYPE_FULLNAME (t), typename_type, tf_none); break; + case DECLTYPE_TYPE: + result = strip_typedefs_expr (DECLTYPE_TYPE_EXPR (t)); + if (result == DECLTYPE_TYPE_EXPR (t)) + return t; + else + result = (finish_decltype_type + (result, + DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (t), + tf_none)); + break; default: break; } @@ -1208,6 +1218,186 @@ strip_typedefs (tree t) return cp_build_qualified_type (result, cp_type_quals (t)); } +/* Like strip_typedefs above, but works on expressions, so that in + + template<class T> struct A + { + typedef T TT; + B<sizeof(TT)> b; + }; + + sizeof(TT) is replaced by sizeof(T). */ + +tree +strip_typedefs_expr (tree t) +{ + unsigned i,n; + tree r, type, *ops; + enum tree_code code; + + if (t == NULL_TREE || t == error_mark_node) + return t; + + if (DECL_P (t) || CONSTANT_CLASS_P (t)) + return t; + + /* Some expressions have type operands, so let's handle types here rather + than check TYPE_P in multiple places below. */ + if (TYPE_P (t)) + return strip_typedefs (t); + + code = TREE_CODE (t); + switch (code) + { + case IDENTIFIER_NODE: + case TEMPLATE_PARM_INDEX: + case OVERLOAD: + case BASELINK: + case ARGUMENT_PACK_SELECT: + return t; + + case TRAIT_EXPR: + { + tree type1 = strip_typedefs (TRAIT_EXPR_TYPE1 (t)); + tree type2 = strip_typedefs (TRAIT_EXPR_TYPE2 (t)); + if (type1 == TRAIT_EXPR_TYPE1 (t) + && type2 == TRAIT_EXPR_TYPE2 (t)) + return t; + r = copy_node (t); + TRAIT_EXPR_TYPE1 (t) = type1; + TRAIT_EXPR_TYPE2 (t) = type2; + return r; + } + + case TREE_LIST: + { + VEC(tree,gc) *vec = make_tree_vector (); + bool changed = false; + tree it; + for (it = t; it; it = TREE_CHAIN (it)) + { + tree val = strip_typedefs_expr (TREE_VALUE (t)); + VEC_safe_push (tree, gc, vec, val); + if (val != TREE_VALUE (t)) + changed = true; + gcc_assert (TREE_PURPOSE (it) == NULL_TREE); + } + if (changed) + { + r = NULL_TREE; + FOR_EACH_VEC_ELT_REVERSE (tree, vec, i, it) + r = tree_cons (NULL_TREE, it, r); + } + else + r = t; + release_tree_vector (vec); + return r; + } + + case TREE_VEC: + { + bool changed = false; + VEC(tree,gc)* vec = make_tree_vector (); + n = TREE_VEC_LENGTH (t); + VEC_reserve (tree, gc, vec, n); + for (i = 0; i < n; ++i) + { + tree op = strip_typedefs_expr (TREE_VEC_ELT (t, i)); + VEC_quick_push (tree, vec, op); + if (op != TREE_VEC_ELT (t, i)) + changed = true; + } + if (changed) + { + r = copy_node (t); + for (i = 0; i < n; ++i) + TREE_VEC_ELT (r, i) = VEC_index (tree, vec, i); + } + else + r = t; + release_tree_vector (vec); + return r; + } + + case CONSTRUCTOR: + { + bool changed = false; + VEC(constructor_elt,gc) *vec + = VEC_copy (constructor_elt, gc, CONSTRUCTOR_ELTS (t)); + n = CONSTRUCTOR_NELTS (t); + type = strip_typedefs (TREE_TYPE (t)); + for (i = 0; i < n; ++i) + { + constructor_elt *e = VEC_index (constructor_elt, vec, i); + tree op = strip_typedefs_expr (e->value); + if (op != e->value) + { + changed = true; + e->value = op; + } + gcc_checking_assert (e->index == strip_typedefs_expr (e->index)); + } + + if (!changed && type == TREE_TYPE (t)) + { + VEC_free (constructor_elt, gc, vec); + return t; + } + else + { + r = copy_node (t); + TREE_TYPE (r) = type; + CONSTRUCTOR_ELTS (r) = vec; + return r; + } + } + + case LAMBDA_EXPR: + gcc_unreachable (); + + default: + break; + } + + gcc_assert (EXPR_P (t)); + + n = TREE_OPERAND_LENGTH (t); + ops = XALLOCAVEC (tree, n); + type = TREE_TYPE (t); + + switch (code) + { + CASE_CONVERT: + case IMPLICIT_CONV_EXPR: + case DYNAMIC_CAST_EXPR: + case STATIC_CAST_EXPR: + case CONST_CAST_EXPR: + case REINTERPRET_CAST_EXPR: + case CAST_EXPR: + case NEW_EXPR: + type = strip_typedefs (type); + /* fallthrough */ + + default: + for (i = 0; i < n; ++i) + ops[i] = strip_typedefs_expr (TREE_OPERAND (t, i)); + break; + } + + /* If nothing changed, return t. */ + for (i = 0; i < n; ++i) + if (ops[i] != TREE_OPERAND (t, i)) + break; + if (i == n && type == TREE_TYPE (t)) + return t; + + r = copy_node (t); + TREE_TYPE (r) = type; + for (i = 0; i < n; ++i) + TREE_OPERAND (r, i) = ops[i]; + return r; +} + /* Makes a copy of BINFO and TYPE, which is to be inherited into a graph dominated by T. If BINFO is NULL, TYPE is a dependent base, and we do a shallow copy. If BINFO is non-NULL, we do a deep copy. @@ -2381,9 +2571,6 @@ cp_tree_equal (tree t1, tree t2) BASELINK_FUNCTIONS (t2))); case TEMPLATE_PARM_INDEX: - if (TEMPLATE_PARM_NUM_SIBLINGS (t1) - != TEMPLATE_PARM_NUM_SIBLINGS (t2)) - return false; return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2) && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2) && (TEMPLATE_PARM_PARAMETER_PACK (t1) diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 96b7d4e4419..17b6e604dbf 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -1137,12 +1137,6 @@ comp_template_parms_position (tree t1, tree t2) index1 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t1)); index2 = TEMPLATE_TYPE_PARM_INDEX (TYPE_MAIN_VARIANT (t2)); - /* If T1 and T2 belong to template parm lists of different size, - let's assume they are different. */ - if (TEMPLATE_PARM_NUM_SIBLINGS (index1) - != TEMPLATE_PARM_NUM_SIBLINGS (index2)) - return false; - /* Then compare their relative position. */ if (TEMPLATE_PARM_IDX (index1) != TEMPLATE_PARM_IDX (index2) || TEMPLATE_PARM_LEVEL (index1) != TEMPLATE_PARM_LEVEL (index2) diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 598873aea11..b74ea7acb72 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -4436,9 +4436,9 @@ releases mishandled unaligned relocations on @code{sparc-*-*} targets. @end html @heading @anchor{sparc64-x-solaris2}sparc64-*-solaris2* -When configuring the GNU Multiple Precision Library (GMP) or the -MPFR library, the canonical target triplet must be specified as -the @command{build} parameter on the configure line. For example +When configuring the GNU Multiple Precision Library (GMP), the MPFR +library or the MPC library, the canonical target triplet must be specified +as the @command{build} parameter on the configure line. For example on a Solaris 9 system: @smallexample diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 3636a2f34ee..d5fd2a42752 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -6026,10 +6026,11 @@ fold_binary_op_with_conditional_arg (location_t loc, } /* This transformation is only worthwhile if we don't have to wrap ARG - in a SAVE_EXPR and the operation can be simplified on at least one - of the branches once its pushed inside the COND_EXPR. */ + in a SAVE_EXPR and the operation can be simplified without recursing + on at least one of the branches once its pushed inside the COND_EXPR. */ if (!TREE_CONSTANT (arg) && (TREE_SIDE_EFFECTS (arg) + || TREE_CODE (arg) == COND_EXPR || TREE_CODE (arg) == VEC_COND_EXPR || TREE_CONSTANT (true_value) || TREE_CONSTANT (false_value))) return NULL_TREE; diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 688f5723821..e2766538360 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,23 @@ +2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/55314 + Backport from trunk + * resolve.c (resolve_allocate_deallocate): Compare all + subscripts when deciding if to reject a (de)allocate + statement. + +2012-11-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/55352 + * trans-decl.c (generate_local_decl): Don't warn for explicitly imported + but unused module variables which are in a namelist or common block. + +2012-11-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/54917 + * target-memory.c (gfc_target_expr_size,gfc_target_interpret_expr): + Handle BT_CLASS. + 2012-10-14 Janus Weil <janus@gcc.gnu.org> PR fortran/54784 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 33913aa8634..bbc1c2208fb 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -7280,8 +7280,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) } } - /* Check that an allocate-object appears only once in the statement. - FIXME: Checking derived types is disabled. */ + /* Check that an allocate-object appears only once in the statement. */ + for (p = code->ext.alloc.list; p; p = p->next) { pe = p->expr; @@ -7329,11 +7329,18 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) if (pr->next && qr->next) { + int i; gfc_array_ref *par = &(pr->u.ar); gfc_array_ref *qar = &(qr->u.ar); - if (gfc_dep_compare_expr (par->start[0], - qar->start[0]) != 0) - break; + + for (i=0; i<par->dimen; i++) + { + if ((par->start[i] != NULL + || qar->start[i] != NULL) + && gfc_dep_compare_expr (par->start[i], + qar->start[i]) != 0) + goto break_label; + } } } else @@ -7345,6 +7352,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) pr = pr->next; qr = qr->next; } + break_label: + ; } } } diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c index 63878959b47..213ee52d307 100644 --- a/gcc/fortran/target-memory.c +++ b/gcc/fortran/target-memory.c @@ -120,6 +120,7 @@ gfc_target_expr_size (gfc_expr *e) case BT_HOLLERITH: return e->representation.length; case BT_DERIVED: + case BT_CLASS: { /* Determine type size without clobbering the typespec for ISO C binding types. */ @@ -563,6 +564,9 @@ gfc_target_interpret_expr (unsigned char *buffer, size_t buffer_size, gfc_interpret_character (buffer, buffer_size, result); break; + case BT_CLASS: + result->ts = CLASS_DATA (result)->ts; + /* Fall through. */ case BT_DERIVED: result->representation.length = gfc_interpret_derived (buffer, buffer_size, result); diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index e497fd6ede3..f225ab3b8c0 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -4586,22 +4586,25 @@ generate_local_decl (gfc_symbol * sym) } /* Warn for unused variables, but not if they're inside a common - block, a namelist, or are use-associated. */ + block or a namelist. */ else if (warn_unused_variable - && !(sym->attr.in_common || sym->attr.use_assoc || sym->mark - || sym->attr.in_namelist)) + && !(sym->attr.in_common || sym->mark || sym->attr.in_namelist)) { - gfc_warning ("Unused variable '%s' declared at %L", sym->name, - &sym->declared_at); - if (sym->backend_decl != NULL_TREE) - TREE_NO_WARNING(sym->backend_decl) = 1; - } - else if (warn_unused_variable && sym->attr.use_only) - { - gfc_warning ("Unused module variable '%s' which has been explicitly " - "imported at %L", sym->name, &sym->declared_at); - if (sym->backend_decl != NULL_TREE) - TREE_NO_WARNING(sym->backend_decl) = 1; + if (sym->attr.use_only) + { + gfc_warning ("Unused module variable '%s' which has been " + "explicitly imported at %L", sym->name, + &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } + else if (!sym->attr.use_assoc) + { + gfc_warning ("Unused variable '%s' declared at %L", + sym->name, &sym->declared_at); + if (sym->backend_decl != NULL_TREE) + TREE_NO_WARNING(sym->backend_decl) = 1; + } } /* For variable length CHARACTER parameters, the PARM_DECL already diff --git a/gcc/gcse.c b/gcc/gcse.c index 6f149bb402f..0fdc51a74f9 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -1658,6 +1658,10 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap) { bitmap_iterator bi; unsigned bb_index; + rtx x_addr; + + x_addr = get_addr (XEXP (x, 0)); + x_addr = canon_rtx (x_addr); /* First handle all the blocks with calls. We don't need to do any list walking for them. */ @@ -1666,27 +1670,27 @@ compute_transp (const_rtx x, int indx, sbitmap *bmap) RESET_BIT (bmap[bb_index], indx); } - /* Now iterate over the blocks which have memory modifications - but which do not have any calls. */ - EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set, - blocks_with_calls, - 0, bb_index, bi) - { - VEC (modify_pair,heap) *list - = canon_modify_mem_list[bb_index]; - modify_pair *pair; - unsigned ix; + /* Now iterate over the blocks which have memory modifications + but which do not have any calls. */ + EXECUTE_IF_AND_COMPL_IN_BITMAP (modify_mem_list_set, + blocks_with_calls, + 0, bb_index, bi) + { + VEC (modify_pair,heap) *list + = canon_modify_mem_list[bb_index]; + modify_pair *pair; + unsigned ix; - FOR_EACH_VEC_ELT_REVERSE (modify_pair, list, ix, pair) - { - rtx dest = pair->dest; - rtx dest_addr = pair->dest_addr; + FOR_EACH_VEC_ELT_REVERSE (modify_pair, list, ix, pair) + { + rtx dest = pair->dest; + rtx dest_addr = pair->dest_addr; - if (canon_true_dependence (dest, GET_MODE (dest), - dest_addr, x, NULL_RTX)) - RESET_BIT (bmap[bb_index], indx); - } - } + if (canon_true_dependence (dest, GET_MODE (dest), + dest_addr, x, x_addr)) + RESET_BIT (bmap[bb_index], indx); + } + } } x = XEXP (x, 0); diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c index 3ff64ffdd7d..f0a4d81c785 100644 --- a/gcc/ggc-common.c +++ b/gcc/ggc-common.c @@ -308,7 +308,7 @@ struct ptr_data enum gt_types_enum type; }; -#define POINTER_HASH(x) (hashval_t)((long)x >> 3) +#define POINTER_HASH(x) (hashval_t)((intptr_t)x >> 3) /* Register an object in the hash table. */ diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 5e4bd23db51..0210ccfedb9 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -572,7 +572,7 @@ gimplify_and_update_call_from_tree (gimple_stmt_iterator *si_p, tree expr) unlink_stmt_vdef (stmt); release_defs (stmt); } - gsi_remove (si_p, true); + gsi_replace (si_p, gimple_build_nop (), true); return; } } diff --git a/gcc/go/gofrontend/expressions.cc b/gcc/go/gofrontend/expressions.cc index 3fa1cd6bc23..e16cd84d0a0 100644 --- a/gcc/go/gofrontend/expressions.cc +++ b/gcc/go/gofrontend/expressions.cc @@ -89,10 +89,11 @@ Expression::do_traverse(Traverse*) // expression is being discarded. By default, we give an error. // Expressions with side effects override. -void +bool Expression::do_discarding_value() { this->unused_value_error(); + return false; } // This virtual function is called to export expressions. This will @@ -109,7 +110,7 @@ Expression::do_export(Export*) const void Expression::unused_value_error() { - error_at(this->location(), "value computed is not used"); + this->report_error(_("value computed is not used")); } // Note that this expression is an error. This is called by children @@ -789,9 +790,9 @@ class Error_expression : public Expression return true; } - void + bool do_discarding_value() - { } + { return true; } Type* do_type() @@ -1152,9 +1153,9 @@ class Sink_expression : public Expression { } protected: - void + bool do_discarding_value() - { } + { return true; } Type* do_type(); @@ -5323,13 +5324,19 @@ Binary_expression::do_numeric_constant_value(Numeric_constant* nc) const // Note that the value is being discarded. -void +bool Binary_expression::do_discarding_value() { if (this->op_ == OPERATOR_OROR || this->op_ == OPERATOR_ANDAND) - this->right_->discarding_value(); + { + this->right_->discarding_value(); + return true; + } else - this->unused_value_error(); + { + this->unused_value_error(); + return false; + } } // Get type. @@ -6528,7 +6535,7 @@ class Builtin_call_expression : public Call_expression bool do_numeric_constant_value(Numeric_constant*) const; - void + bool do_discarding_value(); Type* @@ -7330,7 +7337,7 @@ Builtin_call_expression::do_numeric_constant_value(Numeric_constant* nc) const // discarding the value of an ordinary function call, but we do for // builtin functions, purely for consistency with the gc compiler. -void +bool Builtin_call_expression::do_discarding_value() { switch (this->code_) @@ -7351,7 +7358,7 @@ Builtin_call_expression::do_discarding_value() case BUILTIN_OFFSETOF: case BUILTIN_SIZEOF: this->unused_value_error(); - break; + return false; case BUILTIN_CLOSE: case BUILTIN_COPY: @@ -7360,7 +7367,7 @@ Builtin_call_expression::do_discarding_value() case BUILTIN_PRINT: case BUILTIN_PRINTLN: case BUILTIN_RECOVER: - break; + return true; } } @@ -8506,6 +8513,16 @@ Call_expression::do_lower(Gogo* gogo, Named_object* function, return Expression::make_cast(this->fn_->type(), this->args_->front(), loc); + // Because do_type will return an error type and thus prevent future + // errors, check for that case now to ensure that the error gets + // reported. + if (this->get_function_type() == NULL) + { + if (!this->fn_->type()->is_error()) + this->report_error(_("expected function")); + return Expression::make_error(loc); + } + // Recognize a call to a builtin function. Func_expression* fne = this->fn_->func_expression(); if (fne != NULL @@ -9195,6 +9212,9 @@ Call_expression::do_get_tree(Translate_context* context) } } + if (func == NULL) + fn = save_expr(fn); + tree ret = build_call_array(excess_type != NULL_TREE ? excess_type : rettype, fn, nargs, args); delete[] args; @@ -9228,6 +9248,24 @@ Call_expression::do_get_tree(Translate_context* context) if (this->results_ != NULL) ret = this->set_results(context, ret); + // We can't unwind the stack past a call to nil, so we need to + // insert an explicit check so that the panic can be recovered. + if (func == NULL) + { + tree compare = fold_build2_loc(location.gcc_location(), EQ_EXPR, + boolean_type_node, fn, + fold_convert_loc(location.gcc_location(), + TREE_TYPE(fn), + null_pointer_node)); + tree crash = build3_loc(location.gcc_location(), COND_EXPR, + void_type_node, compare, + gogo->runtime_error(RUNTIME_ERROR_NIL_DEREFERENCE, + location), + NULL_TREE); + ret = fold_build2_loc(location.gcc_location(), COMPOUND_EXPR, + TREE_TYPE(ret), crash, ret); + } + this->tree_ = ret; return ret; @@ -14079,7 +14117,7 @@ Numeric_constant::check_int_type(Integer_type* type, bool issue_error, bool Numeric_constant::check_float_type(Float_type* type, bool issue_error, - Location location) const + Location location) { mpfr_t val; switch (this->classification_) @@ -14132,6 +14170,29 @@ Numeric_constant::check_float_type(Float_type* type, bool issue_error, } ret = exp <= max_exp; + + if (ret) + { + // Round the constant to the desired type. + mpfr_t t; + mpfr_init(t); + switch (type->bits()) + { + case 32: + mpfr_set_prec(t, 24); + break; + case 64: + mpfr_set_prec(t, 53); + break; + default: + go_unreachable(); + } + mpfr_set(t, val, GMP_RNDN); + mpfr_set(val, t, GMP_RNDN); + mpfr_clear(t); + + this->set_float(type, val); + } } mpfr_clear(val); @@ -14146,7 +14207,7 @@ Numeric_constant::check_float_type(Float_type* type, bool issue_error, bool Numeric_constant::check_complex_type(Complex_type* type, bool issue_error, - Location location) const + Location location) { if (type->is_abstract()) return true; @@ -14165,46 +14226,77 @@ Numeric_constant::check_complex_type(Complex_type* type, bool issue_error, } mpfr_t real; + mpfr_t imag; switch (this->classification_) { case NC_INT: case NC_RUNE: mpfr_init_set_z(real, this->u_.int_val, GMP_RNDN); + mpfr_init_set_ui(imag, 0, GMP_RNDN); break; case NC_FLOAT: mpfr_init_set(real, this->u_.float_val, GMP_RNDN); + mpfr_init_set_ui(imag, 0, GMP_RNDN); break; case NC_COMPLEX: - if (!mpfr_nan_p(this->u_.complex_val.imag) - && !mpfr_inf_p(this->u_.complex_val.imag) - && !mpfr_zero_p(this->u_.complex_val.imag)) - { - if (mpfr_get_exp(this->u_.complex_val.imag) > max_exp) - { - if (issue_error) - error_at(location, "complex imaginary part overflow"); - return false; - } - } mpfr_init_set(real, this->u_.complex_val.real, GMP_RNDN); + mpfr_init_set(imag, this->u_.complex_val.imag, GMP_RNDN); break; default: go_unreachable(); } - bool ret; - if (mpfr_nan_p(real) || mpfr_inf_p(real) || mpfr_zero_p(real)) - ret = true; - else - ret = mpfr_get_exp(real) <= max_exp; + bool ret = true; + if (!mpfr_nan_p(real) + && !mpfr_inf_p(real) + && !mpfr_zero_p(real) + && mpfr_get_exp(real) > max_exp) + { + if (issue_error) + error_at(location, "complex real part overflow"); + ret = false; + } - mpfr_clear(real); + if (!mpfr_nan_p(imag) + && !mpfr_inf_p(imag) + && !mpfr_zero_p(imag) + && mpfr_get_exp(imag) > max_exp) + { + if (issue_error) + error_at(location, "complex imaginary part overflow"); + ret = false; + } - if (!ret && issue_error) - error_at(location, "complex real part overflow"); + if (ret) + { + // Round the constant to the desired type. + mpfr_t t; + mpfr_init(t); + switch (type->bits()) + { + case 64: + mpfr_set_prec(t, 24); + break; + case 128: + mpfr_set_prec(t, 53); + break; + default: + go_unreachable(); + } + mpfr_set(t, real, GMP_RNDN); + mpfr_set(real, t, GMP_RNDN); + mpfr_set(t, imag, GMP_RNDN); + mpfr_set(imag, t, GMP_RNDN); + mpfr_clear(t); + + this->set_complex(type, real, imag); + } + + mpfr_clear(real); + mpfr_clear(imag); return ret; } diff --git a/gcc/go/gofrontend/expressions.h b/gcc/go/gofrontend/expressions.h index eea141fe776..1b74b801748 100644 --- a/gcc/go/gofrontend/expressions.h +++ b/gcc/go/gofrontend/expressions.h @@ -360,10 +360,11 @@ class Expression // This is called if the value of this expression is being // discarded. This issues warnings about computed values being - // unused. - void + // unused. This returns true if all is well, false if it issued an + // error message. + bool discarding_value() - { this->do_discarding_value(); } + { return this->do_discarding_value(); } // Return whether this is an error expression. bool @@ -689,7 +690,7 @@ class Expression { return false; } // Called by the parser if the value is being discarded. - virtual void + virtual bool do_discarding_value(); // Child class holds type. @@ -1205,7 +1206,7 @@ class Binary_expression : public Expression bool do_numeric_constant_value(Numeric_constant*) const; - void + bool do_discarding_value(); Type* @@ -1373,9 +1374,9 @@ class Call_expression : public Expression virtual Expression* do_lower(Gogo*, Named_object*, Statement_inserter*, int); - void + bool do_discarding_value() - { } + { return true; } virtual Type* do_type(); @@ -2051,9 +2052,9 @@ class Receive_expression : public Expression do_traverse(Traverse* traverse) { return Expression::traverse(&this->channel_, traverse); } - void + bool do_discarding_value() - { } + { return true; } Type* do_type(); @@ -2219,10 +2220,10 @@ class Numeric_constant check_int_type(Integer_type*, bool, Location) const; bool - check_float_type(Float_type*, bool, Location) const; + check_float_type(Float_type*, bool, Location); bool - check_complex_type(Complex_type*, bool, Location) const; + check_complex_type(Complex_type*, bool, Location); // The kinds of constants. enum Classification diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index ab2bb7cf29d..c65325d016e 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -2955,6 +2955,8 @@ Parse::primary_expr(bool may_be_sink, bool may_be_composite_lit, this->advance_token(); Expression* expr = this->expression(PRECEDENCE_NORMAL, false, true, NULL); + if (this->peek_token()->is_op(OPERATOR_COMMA)) + this->advance_token(); if (this->peek_token()->is_op(OPERATOR_ELLIPSIS)) { error_at(this->location(), diff --git a/gcc/go/gofrontend/statements.cc b/gcc/go/gofrontend/statements.cc index af34670aee0..58057f84a56 100644 --- a/gcc/go/gofrontend/statements.cc +++ b/gcc/go/gofrontend/statements.cc @@ -2006,6 +2006,8 @@ Thunk_statement::do_determine_types() void Thunk_statement::do_check_types(Gogo*) { + if (!this->call_->discarding_value()) + return; Call_expression* ce = this->call_->call_expression(); if (ce == NULL) { @@ -2471,11 +2473,15 @@ Thunk_statement::build_thunk(Gogo* gogo, const std::string& thunk_name) Expression_statement* es = static_cast<Expression_statement*>(call_statement); Call_expression* ce = es->expr()->call_expression(); - go_assert(ce != NULL); - if (may_call_recover) - ce->set_is_deferred(); - if (recover_arg != NULL) - ce->set_recover_arg(recover_arg); + if (ce == NULL) + go_assert(saw_errors()); + else + { + if (may_call_recover) + ce->set_is_deferred(); + if (recover_arg != NULL) + ce->set_recover_arg(recover_arg); + } } // That is all the thunk has to do. diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index 90856a0c05d..795a1b51026 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -54,8 +54,7 @@ get_backend_interface_fields(Gogo* gogo, Interface_type* type, // Class Type. Type::Type(Type_classification classification) - : classification_(classification), btype_is_placeholder_(false), - btype_(NULL), type_descriptor_var_(NULL) + : classification_(classification), btype_(NULL), type_descriptor_var_(NULL) { } @@ -919,11 +918,7 @@ Btype* Type::get_backend(Gogo* gogo) { if (this->btype_ != NULL) - { - if (this->btype_is_placeholder_ && gogo->named_types_are_converted()) - this->finish_backend(gogo); - return this->btype_; - } + return this->btype_; if (this->forward_declaration_type() != NULL || this->named_type() != NULL) @@ -937,20 +932,36 @@ Type::get_backend(Gogo* gogo) // that. There is no need to use the hash table for named types, as // named types are only identical to themselves. - std::pair<Type*, Btype*> val(this, NULL); + std::pair<Type*, Type_btype_entry> val; + val.first = this; + val.second.btype = NULL; + val.second.is_placeholder = false; std::pair<Type_btypes::iterator, bool> ins = Type::type_btypes.insert(val); - if (!ins.second && ins.first->second != NULL) + if (!ins.second && ins.first->second.btype != NULL) { - if (gogo != NULL && gogo->named_types_are_converted()) - this->btype_ = ins.first->second; - return ins.first->second; + // Note that GOGO can be NULL here, but only when the GCC + // middle-end is asking for a frontend type. That will only + // happen for simple types, which should never require + // placeholders. + if (!ins.first->second.is_placeholder) + this->btype_ = ins.first->second.btype; + else if (gogo->named_types_are_converted()) + { + this->finish_backend(gogo, ins.first->second.btype); + ins.first->second.is_placeholder = false; + } + + return ins.first->second.btype; } Btype* bt = this->get_btype_without_hash(gogo); - if (ins.first->second == NULL) - ins.first->second = bt; + if (ins.first->second.btype == NULL) + { + ins.first->second.btype = bt; + ins.first->second.is_placeholder = false; + } else { // We have already created a backend representation for this @@ -958,10 +969,9 @@ Type::get_backend(Gogo* gogo) // a named type which in turns uses an identical unnamed type. // Use the tree we created earlier and ignore the one we just // built. - bt = ins.first->second; - if (gogo == NULL || !gogo->named_types_are_converted()) - return bt; - this->btype_ = bt; + if (this->btype_ == bt) + this->btype_ = ins.first->second.btype; + bt = ins.first->second.btype; } return bt; @@ -1028,6 +1038,37 @@ Type::get_backend_placeholder(Gogo* gogo) // These are simple types that can just be created directly. return this->get_backend(gogo); + case TYPE_MAP: + case TYPE_CHANNEL: + // All maps and channels have the same backend representation. + return this->get_backend(gogo); + + case TYPE_NAMED: + case TYPE_FORWARD: + // Named types keep track of their own dependencies and manage + // their own placeholders. + return this->get_backend(gogo); + + case TYPE_INTERFACE: + if (this->interface_type()->is_empty()) + return Interface_type::get_backend_empty_interface_type(gogo); + break; + + default: + break; + } + + std::pair<Type*, Type_btype_entry> val; + val.first = this; + val.second.btype = NULL; + val.second.is_placeholder = false; + std::pair<Type_btypes::iterator, bool> ins = + Type::type_btypes.insert(val); + if (!ins.second && ins.first->second.btype != NULL) + return ins.first->second.btype; + + switch (this->classification_) + { case TYPE_FUNCTION: { Location loc = this->function_type()->location(); @@ -1070,37 +1111,36 @@ Type::get_backend_placeholder(Gogo* gogo) } break; - case TYPE_MAP: - case TYPE_CHANNEL: - // All maps and channels have the same backend representation. - return this->get_backend(gogo); - case TYPE_INTERFACE: - if (this->interface_type()->is_empty()) - return Interface_type::get_backend_empty_interface_type(gogo); - else - { - std::vector<Backend::Btyped_identifier> bfields; - get_backend_interface_fields(gogo, this->interface_type(), true, - &bfields); - bt = gogo->backend()->struct_type(bfields); - } + { + go_assert(!this->interface_type()->is_empty()); + std::vector<Backend::Btyped_identifier> bfields; + get_backend_interface_fields(gogo, this->interface_type(), true, + &bfields); + bt = gogo->backend()->struct_type(bfields); + } break; - case TYPE_NAMED: - case TYPE_FORWARD: - // Named types keep track of their own dependencies and manage - // their own placeholders. - return this->get_backend(gogo); - case TYPE_SINK: case TYPE_CALL_MULTIPLE_RESULT: + /* Note that various classifications were handled in the earlier + switch. */ default: go_unreachable(); } - this->btype_ = bt; - this->btype_is_placeholder_ = true; + if (ins.first->second.btype == NULL) + { + ins.first->second.btype = bt; + ins.first->second.is_placeholder = true; + } + else + { + // A placeholder for this type got created along the way. Use + // that one and ignore the one we just built. + bt = ins.first->second.btype; + } + return bt; } @@ -1108,12 +1148,8 @@ Type::get_backend_placeholder(Gogo* gogo) // using a placeholder type. void -Type::finish_backend(Gogo* gogo) +Type::finish_backend(Gogo* gogo, Btype *placeholder) { - go_assert(this->btype_ != NULL); - if (!this->btype_is_placeholder_) - return; - switch (this->classification_) { case TYPE_ERROR: @@ -1129,7 +1165,7 @@ Type::finish_backend(Gogo* gogo) case TYPE_FUNCTION: { Btype* bt = this->do_get_backend(gogo); - if (!gogo->backend()->set_placeholder_function_type(this->btype_, bt)) + if (!gogo->backend()->set_placeholder_function_type(placeholder, bt)) go_assert(saw_errors()); } break; @@ -1137,7 +1173,7 @@ Type::finish_backend(Gogo* gogo) case TYPE_POINTER: { Btype* bt = this->do_get_backend(gogo); - if (!gogo->backend()->set_placeholder_pointer_type(this->btype_, bt)) + if (!gogo->backend()->set_placeholder_pointer_type(placeholder, bt)) go_assert(saw_errors()); } break; @@ -1174,7 +1210,7 @@ Type::finish_backend(Gogo* gogo) go_unreachable(); } - this->btype_is_placeholder_ = false; + this->btype_ = placeholder; } // Return a pointer to the type descriptor for this type. @@ -2391,7 +2427,7 @@ class Error_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -2429,7 +2465,7 @@ class Void_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -2467,7 +2503,7 @@ class Boolean_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return true; } Btype* @@ -2966,8 +3002,8 @@ String_type::do_get_backend(Gogo* gogo) // backend representation, so force it to be finished now. if (!gogo->named_types_are_converted()) { - pb->get_backend_placeholder(gogo); - pb->finish_backend(gogo); + Btype* bt = pb->get_backend_placeholder(gogo); + pb->finish_backend(gogo, bt); } fields[0].name = "__data"; @@ -3090,7 +3126,7 @@ class Sink_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -3968,7 +4004,7 @@ class Nil_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -4019,7 +4055,7 @@ class Call_multiple_result_type : public Type } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -4296,7 +4332,7 @@ Struct_type::struct_has_hidden_fields(const Named_type* within, // comparisons. bool -Struct_type::do_compare_is_identity(Gogo* gogo) const +Struct_type::do_compare_is_identity(Gogo* gogo) { const Struct_field_list* fields = this->fields_; if (fields == NULL) @@ -4328,6 +4364,16 @@ Struct_type::do_compare_is_identity(Gogo* gogo) const return false; offset += field_size; } + + unsigned int struct_size; + if (!this->backend_type_size(gogo, &struct_size)) + return false; + if (offset != struct_size) + { + // Trailing padding may not be zero when on the stack. + return false; + } + return true; } @@ -5272,7 +5318,7 @@ Array_type::do_verify() // Whether we can use memcmp to compare this array. bool -Array_type::do_compare_is_identity(Gogo* gogo) const +Array_type::do_compare_is_identity(Gogo* gogo) { if (this->length_ == NULL) return false; @@ -7967,7 +8013,7 @@ Named_type::do_has_pointer() const // function. bool -Named_type::do_compare_is_identity(Gogo* gogo) const +Named_type::do_compare_is_identity(Gogo* gogo) { // We don't use this->seen_ here because compare_is_identity may // call base() later, and that will mess up if seen_ is set here. diff --git a/gcc/go/gofrontend/types.h b/gcc/go/gofrontend/types.h index cced68ddd68..bdda7a4280e 100644 --- a/gcc/go/gofrontend/types.h +++ b/gcc/go/gofrontend/types.h @@ -576,7 +576,7 @@ class Type // identity function which gets nothing but a pointer to the value // and a size. bool - compare_is_identity(Gogo* gogo) const + compare_is_identity(Gogo* gogo) { return this->do_compare_is_identity(gogo); } // Return a hash code for this type for the method hash table. @@ -869,7 +869,7 @@ class Type // Finish the backend representation of a placeholder. void - finish_backend(Gogo*); + finish_backend(Gogo*, Btype*); // Build a type descriptor entry for this type. Return a pointer to // it. The location is the location which causes us to need the @@ -950,7 +950,7 @@ class Type { return false; } virtual bool - do_compare_is_identity(Gogo*) const = 0; + do_compare_is_identity(Gogo*) = 0; virtual unsigned int do_hash_for_method(Gogo*) const; @@ -1191,10 +1191,18 @@ class Type Btype* get_btype_without_hash(Gogo*); + // A backend type that may be a placeholder. + struct Type_btype_entry + { + Btype *btype; + bool is_placeholder; + }; + // A mapping from Type to Btype*, used to ensure that the backend - // representation of identical types is identical. - typedef Unordered_map_hash(const Type*, Btype*, Type_hash_identical, - Type_identical) Type_btypes; + // representation of identical types is identical. This is only + // used for unnamed types. + typedef Unordered_map_hash(const Type*, Type_btype_entry, + Type_hash_identical, Type_identical) Type_btypes; static Type_btypes type_btypes; @@ -1211,9 +1219,6 @@ class Type // The type classification. Type_classification classification_; - // Whether btype_ is a placeholder type used while named types are - // being converted. - bool btype_is_placeholder_; // The backend representation of the type, once it has been // determined. Btype* btype_; @@ -1458,7 +1463,7 @@ class Integer_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return true; } unsigned int @@ -1535,7 +1540,7 @@ class Float_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } unsigned int @@ -1604,7 +1609,7 @@ class Complex_type : public Type protected: bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } unsigned int @@ -1664,7 +1669,7 @@ class String_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } Btype* @@ -1778,7 +1783,7 @@ class Function_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } unsigned int @@ -1853,7 +1858,7 @@ class Pointer_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return true; } unsigned int @@ -2139,7 +2144,7 @@ class Struct_type : public Type do_has_pointer() const; bool - do_compare_is_identity(Gogo*) const; + do_compare_is_identity(Gogo*); unsigned int do_hash_for_method(Gogo*) const; @@ -2272,7 +2277,7 @@ class Array_type : public Type } bool - do_compare_is_identity(Gogo*) const; + do_compare_is_identity(Gogo*); unsigned int do_hash_for_method(Gogo*) const; @@ -2365,7 +2370,7 @@ class Map_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } unsigned int @@ -2451,7 +2456,7 @@ class Channel_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return true; } unsigned int @@ -2582,7 +2587,7 @@ class Interface_type : public Type { return true; } bool - do_compare_is_identity(Gogo*) const + do_compare_is_identity(Gogo*) { return false; } unsigned int @@ -2865,7 +2870,7 @@ class Named_type : public Type do_has_pointer() const; bool - do_compare_is_identity(Gogo*) const; + do_compare_is_identity(Gogo*); unsigned int do_hash_for_method(Gogo*) const; @@ -2949,7 +2954,7 @@ class Named_type : public Type // function exits. mutable bool seen_; // Like seen_, but used only by do_compare_is_identity. - mutable bool seen_in_compare_is_identity_; + bool seen_in_compare_is_identity_; // Like seen_, but used only by do_get_backend. bool seen_in_get_backend_; }; @@ -3004,7 +3009,7 @@ class Forward_declaration_type : public Type { return this->real_type()->has_pointer(); } bool - do_compare_is_identity(Gogo* gogo) const + do_compare_is_identity(Gogo* gogo) { return this->real_type()->compare_is_identity(gogo); } unsigned int diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c index 668a5ce9163..8c504c28639 100644 --- a/gcc/lto-opts.c +++ b/gcc/lto-opts.c @@ -93,6 +93,20 @@ lto_write_options (void) { struct cl_decoded_option *option = &save_decoded_options[i]; + /* Skip explicitly some common options that we do not need. */ + switch (option->opt_index) + { + case OPT_dumpbase: + case OPT_SPECIAL_unknown: + case OPT_SPECIAL_ignore: + case OPT_SPECIAL_program_name: + case OPT_SPECIAL_input_file: + continue; + + default: + break; + } + /* Skip frontend and driver specific options here. */ if (!(cl_options[option->opt_index].flags & (CL_COMMON|CL_TARGET|CL_LTO))) continue; @@ -108,17 +122,6 @@ lto_write_options (void) if (cl_options[option->opt_index].flags & (CL_DRIVER|CL_WARNING)) continue; - /* Skip explicitly some common options that we do not need. */ - switch (option->opt_index) - { - case OPT_dumpbase: - case OPT_SPECIAL_input_file: - continue; - - default: - break; - } - for (j = 0; j < option->canonical_option_num_elements; ++j) append_to_collect_gcc_options (&temporary_obstack, &first_p, option->canonical_option[j]); diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c index 1c9aa833dbc..fcc9b724641 100644 --- a/gcc/lto-wrapper.c +++ b/gcc/lto-wrapper.c @@ -393,6 +393,12 @@ merge_and_complain (struct cl_decoded_option **decoded_options, struct cl_decoded_option *foption = &fdecoded_options[i]; switch (foption->opt_index) { + case OPT_SPECIAL_unknown: + case OPT_SPECIAL_ignore: + case OPT_SPECIAL_program_name: + case OPT_SPECIAL_input_file: + break; + default: if (!(cl_options[foption->opt_index].flags & CL_TARGET)) break; diff --git a/gcc/pointer-set.c b/gcc/pointer-set.c index b57c404f6a1..ebad5dbf5b3 100644 --- a/gcc/pointer-set.c +++ b/gcc/pointer-set.c @@ -64,7 +64,7 @@ hash1 (const void *p, unsigned long max, unsigned long logmax) #endif const unsigned long shift = HOST_BITS_PER_LONG - logmax; - return ((A * (unsigned long) p) >> shift) & (max - 1); + return ((A * (uintptr_t) p) >> shift) & (max - 1); } /* Allocate an empty pointer set. */ diff --git a/gcc/prefix.c b/gcc/prefix.c index 369ede70309..c7003f8c674 100644 --- a/gcc/prefix.c +++ b/gcc/prefix.c @@ -157,12 +157,12 @@ lookup_key (char *key) } size = 32; - dst = xmalloc (size); + dst = XNEWVEC (char, size); res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size); if (res == ERROR_MORE_DATA && type == REG_SZ) { - dst = xrealloc (dst, size); + dst = XRESIZEVEC (char, dst, size); res = RegQueryValueExA (reg_key, key, 0, &type, (LPBYTE) dst, &size); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8e2c69b73bd..feed2684d8f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,96 @@ +2012-12-03 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2012-09-24 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/53663 + * gcc.dg/torture/pr53663-1.c: New testcase. + * gcc.dg/torture/pr53663-2.c: Likewise. + * gcc.dg/torture/pr53663-3.c: Likewise. + +2012-12-03 Marek Polacek <polacek@redhat.com> + + Backported from mainline + 2012-12-03 Marek Polacek <polacek@redhat.com> + + PR c/55570 + * gcc.dg/pr55570.c: New test. + +2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + * gcc.dg/torture/pr54920.c: Add "-fno-common" option on hppa*-*-hpux*. + +2012-11-29 Jason Merrill <jason@redhat.com> + + PR c++/53862 + * g++.dg/cpp0x/variadic134.C: New. + + PR c++/53858 + * g++.dg/cpp0x/alias-decl-20.C: New. + + PR c++/50852 + * g++.dg/template/typedef39.C: New. + + PR c++/53039 + * g++.dg/cpp0x/variadic133.C: New. + * g++.dg/template/param1.C: Adjust. + +2012-11-27 Richard Biener <rguenther@suse.de> + + PR middle-end/55331 + * g++.dg/opt/pr55331.C: New testcase. + +2012-11-26 Richard Biener <rguenther@suse.de> + + Backport from mainline + 2012-10-12 Richard Biener <rguenther@suse.de> + + PR tree-optimization/54894 + * gcc.dg/torture/pr54894.c: New testcase. + + 2012-10-02 Richard Guenther <rguenther@suse.de> + + PR middle-end/54735 + * g++.dg/torture/pr54735.C: New testcase. + +2012-11-24 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/55446 + * g++.dg/init/new41.C: New. + +2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/55314 + Backport from trunk + * gfortran.dg/allocate_error_4.f90: New test. + +2012-11-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/55352 + * gfortran.dg/namelist_76.f90: New. + +2012-11-19 H.J. Lu <hongjiu.lu@intel.com> + + Backported from mainline + 2012-11-13 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/55142 + * gcc.target/i386/pr55142-1.c: New file. + * gcc.target/i386/pr55142-2.c: Likewise. + +2012-11-09 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/stack_check3.ad[sb]: New test. + +2012-11-07 Eric Botcazou <ebotcazou@adacore.com> + + * gcc.c-torture/compile/20121107-1.c: New test. + +2012-11-06 Janus Weil <janus@gcc.gnu.org> + + PR fortran/54917 + * gfortran.dg/transfer_class_1.f90: New. + 2012-11-05 Eric Botcazou <ebotcazou@adacore.com> * g++.dg/torture/20121105-1.C: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C new file mode 100644 index 00000000000..078d257187a --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-20.C @@ -0,0 +1,9 @@ +// PR c++/53858 +// { dg-do compile { target c++11 } } + +template <typename T> struct s0 { typedef T tdef0; }; +template <typename T> struct s1 { typedef T tdef1; }; +template <typename T> using us1 = typename s1<T>::tdef1; +template <typename T, typename TT = typename us1<T>::tdef0> struct s2 {}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C new file mode 100644 index 00000000000..acf4eaa7fcb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this6.C @@ -0,0 +1,32 @@ +// PR c++/53137 +// { dg-options -std=c++11 } + +template <typename STORE> +void getParent(STORE& tStore) +{ +} + +struct Store +{ + template <typename CheckParentFunc> + void updateChildCommon(CheckParentFunc c) + { + c(); + } + + template <typename T> + int& getStore(); + + template <typename T> + void updateChild(const T& obj) + { + updateChildCommon([this] () { getParent(getStore<T>()); }); + } + + void update(int obj); +}; + +void Store::update(int obj) +{ + updateChild(obj); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic133.C b/gcc/testsuite/g++.dg/cpp0x/variadic133.C new file mode 100644 index 00000000000..0265f0991c1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic133.C @@ -0,0 +1,46 @@ +// PR c++/53039 +// { dg-do compile { target c++11 } } + +template <class, class> +struct is_convertible +{ + static const bool value = true; +}; + +template<bool, class T> +struct enable_if +{ + typedef T type; +}; + +template <bool...> +struct Xs +{ + static const bool value = true; +}; + +template<typename... BTs> + class BType + { + template <typename... BUs, + typename enable_if< + Xs<is_convertible<BUs, BTs>::value...>::value, + bool>::type = false> + void fooX(BUs&&...); + }; + +template <typename... ATs> + struct AType + { + template <typename... AUs, + typename enable_if< + Xs<is_convertible<AUs, ATs>::value...>::value, + bool>::type = false> + void foo(AUs&&...); + }; + +int main() +{ + AType<int, int> t; + t.foo(1, 1); +} diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic134.C b/gcc/testsuite/g++.dg/cpp0x/variadic134.C new file mode 100644 index 00000000000..d4181b02c8e --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic134.C @@ -0,0 +1,17 @@ +// PR c++/53862 +// { dg-do compile { target c++11 } } + +typedef unsigned long size_t; + +template<typename> struct is_scalar { static const bool value = true; }; +template<bool, typename T> struct enable_if { typedef T type; }; + +template <size_t N, typename... Args> +void f(Args...) {} + +template <size_t N, typename T, typename... Args> +typename enable_if<is_scalar<T>::value, void>::type f(T, Args...) {} + +int main() { + f<1>(1); +} diff --git a/gcc/testsuite/g++.dg/init/new41.C b/gcc/testsuite/g++.dg/init/new41.C new file mode 100644 index 00000000000..0559b1dac58 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/new41.C @@ -0,0 +1,22 @@ +// PR c++/55446 +// { dg-do run } + +struct S +{ + S() { } +}; + +int n = 1; + +void* operator new[](__SIZE_TYPE__) +{ + n = -1; + return &n; +} + +int main() +{ + new S[0]; + if (n != -1) + __builtin_abort(); +} diff --git a/gcc/testsuite/g++.dg/opt/pr55331.C b/gcc/testsuite/g++.dg/opt/pr55331.C new file mode 100644 index 00000000000..4717db8091f --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr55331.C @@ -0,0 +1,14 @@ +// PR tree-optimization/55331 +// { dg-do compile } +// { dg-options "-O2 -fno-tree-fre" } + +struct A {}; + +void +foo (A *p, bool x) +{ + A a; + char *e = (char *) (&a + 1); + if (x) + __builtin_memmove (p, &a, e - (char *) &a); +} diff --git a/gcc/testsuite/g++.dg/template/param1.C b/gcc/testsuite/g++.dg/template/param1.C index a8c3791254f..e3784736fc4 100644 --- a/gcc/testsuite/g++.dg/template/param1.C +++ b/gcc/testsuite/g++.dg/template/param1.C @@ -2,11 +2,11 @@ // Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de> // { dg-do compile } -template<int> struct A // { dg-error "declaration" } +template<int> struct A { A(); }; -template<int N, char> A<N>::A() {} // { dg-error "invalid use of incomplete type" } +template<int N, char> A<N>::A() {} // { dg-error "got 2 template parameters|1 required" } A<0> a; diff --git a/gcc/testsuite/g++.dg/template/typedef39.C b/gcc/testsuite/g++.dg/template/typedef39.C new file mode 100644 index 00000000000..85e8ddc4081 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typedef39.C @@ -0,0 +1,15 @@ +// PR c++/50852 + +template<int d> class A; +template<class T> struct B {typedef int K;typedef int L;}; +template<class U,class V> struct C +{ + typedef typename U::L X; + typedef A<X::a-1> W; +}; +template<class U,int d> struct D +{ + typedef typename U::L X; + typedef A<X::a-1> W; // { dg-error "not a member" } +}; +template class D<B<A<1> >,3>; diff --git a/gcc/testsuite/g++.dg/torture/pr54735.C b/gcc/testsuite/g++.dg/torture/pr54735.C new file mode 100644 index 00000000000..0604ec5179b --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr54735.C @@ -0,0 +1,179 @@ +// { dg-do compile } + +class Gmpfr +{}; +class M : Gmpfr +{ +public: + Gmpfr infconst; + M(int); +}; +template<typename>struct A; +template<typename, int, int, int = 0 ? : 0, int = 0, int = 0>class N; +template<typename>class O; +template<typename>struct B; +struct C +{ + enum + { value }; +}; +class D +{ +public: + enum + { ret }; +}; +struct F +{ + enum + { ret = 0 ? : 0 }; +}; +template<typename Derived>struct G +{ + typedef O<Derived>type; +}; +struct H +{ + void operator * (); +}; +struct I +{ + enum + { RequireInitialization = C::value ? : 0, ReadCost }; +}; +template<typename Derived>struct J +{ + enum + { ret = A<Derived>::InnerStrideAtCompileTime }; +}; +template<typename Derived>struct K +{ + enum + { ret = A<Derived>::OuterStrideAtCompileTime }; +}; +template<typename Derived>class P : H +{ +public: + using H::operator *; + typedef typename A<Derived>::Scalar Scalar; + enum + { RowsAtCompileTime = + A<Derived>::RowsAtCompileTime, ColsAtCompileTime = + A<Derived>::ColsAtCompileTime, SizeAtCompileTime = + F::ret, MaxRowsAtCompileTime = + A<Derived>::MaxRowsAtCompileTime, MaxColsAtCompileTime = + A<Derived>::MaxColsAtCompileTime, MaxSizeAtCompileTime = + F::ret, Flags = + A<Derived>::Flags ? : 0 ? : 0, CoeffReadCost = + A<Derived>::CoeffReadCost, InnerStrideAtCompileTime = + J<Derived>::ret, OuterStrideAtCompileTime = K<Derived>::ret }; + B<Derived> operator << (const Scalar&); +}; + +template<typename Derived>class O : public P<Derived> +{}; + +template<int _Cols>class L +{ +public: + + int cols() + { + return _Cols; + } +}; +template<typename Derived>class Q : public G<Derived>::type +{ +public: + typedef typename G<Derived>::type Base; + typedef typename A<Derived>::Index Index; + typedef typename A<Derived>::Scalar Scalar; + L<Base::ColsAtCompileTime> m_storage; + Index cols() + { + return m_storage.cols(); + } + + Scalar& coeffRef(Index, + Index); +}; + +template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, + int _MaxCols>struct A<N<_Scalar, _Rows, _Cols, _Options, _MaxRows, + _MaxCols> > +{ + typedef _Scalar Scalar; + typedef int Index; + enum + { RowsAtCompileTime, ColsAtCompileTime = + _Cols, MaxRowsAtCompileTime, MaxColsAtCompileTime, Flags = + D::ret, CoeffReadCost = + I::ReadCost, InnerStrideAtCompileTime, OuterStrideAtCompileTime = + 0 ? : 0 }; +}; +template<typename _Scalar, int, int _Cols, int, int, + int>class N : public Q<N<_Scalar, 0, _Cols> > +{ +public: + Q<N> Base; + template<typename T0, typename T1>N(const T0&, + const T1&); +}; +void +__assert_fail(int) +throw() __attribute__((__noreturn__)); +template<typename XprType>struct B +{ + typedef typename XprType::Scalar Scalar; + typedef typename XprType::Index Index; + B(XprType & p1, const Scalar &) : m_xpr(p1), m_col(), + m_currentBlockRows(1) + {} B& operator, (const Scalar&) + { + Index a; + + if (m_col == m_xpr.cols()) + { + m_col = 0; + m_currentBlockRows = 1; + a && "Too " ? static_cast<void>(0) : __assert_fail(0); + } + m_col < m_xpr.cols() + && "Too " ? static_cast<void>(0) : __assert_fail(1); + m_currentBlockRows ? static_cast<void>(0) : __assert_fail(4); + m_xpr.coeffRef(0, m_col++) = 0; + return *this; + } + ~B() + { + 1 + m_currentBlockRows && m_col + && "Too " ? static_cast<void>(0) : __assert_fail(0); + } + + XprType& m_xpr; + Index m_col; + Index m_currentBlockRows; +}; + +template<typename Derived>B<Derived>P< + Derived >::operator << (const Scalar&) +{ + return B<Derived>(*static_cast<Derived *>(this), 0); +} + +template<class NT, int s>void + check_() +{ + N<NT, 0, s>m(0, 0); + m << 0, 0, 0, 0; +} + +template<class NT>void check() +{ + check_<NT, 3>(); +} + +int main() +{ + check<M>(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/20121107-1.c b/gcc/testsuite/gcc.c-torture/compile/20121107-1.c new file mode 100644 index 00000000000..a86206702af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20121107-1.c @@ -0,0 +1,14 @@ +/* PR middle-end/55219 */ +/* Testcase by Markus Trippelsdorf <markus@trippelsdorf.de> */ + +int x, c, d, e, f, g, h, i; +double j; +const int k; +const enum { B } a; +void +fn1 (void) +{ + h = (g ? c : g ? f : g ? e : g ? i : g ? f : g ? e : g ? d : x) + + (a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a ? : a + ? j : a ? : 0 ? : a ? : a ? : a ? : a ? : a ? : a ? k : a ? : x); +} diff --git a/gcc/testsuite/gcc.dg/pr55570.c b/gcc/testsuite/gcc.dg/pr55570.c new file mode 100644 index 00000000000..903bb033df9 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr55570.c @@ -0,0 +1,4 @@ +/* PR c/55570 */ +/* { dg-do compile } */ + +char array[16] __attribute__((aligned (SOME_NOT_DEFINED_MACRO))); /* { dg-error "requested alignment is not an integer constant" } */ diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-1.c b/gcc/testsuite/gcc.dg/torture/pr53663-1.c new file mode 100644 index 00000000000..3392ddecb51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr53663-1.c @@ -0,0 +1,30 @@ +/* { dg-do run } */ + +extern void abort (void); + +union u +{ + int i; + _Bool b; +}; + +void f(union u * vp, union u v) +{ + *vp = v; +} + +int main() +{ + union u v; + union u v1; + union u v2; + + v.i = 10; + f(&v1, v); + + v.b = 0; + f(&v2, v); + if (v2.b != 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-2.c b/gcc/testsuite/gcc.dg/torture/pr53663-2.c new file mode 100644 index 00000000000..9589a9e2054 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr53663-2.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ + +extern void abort (void); + +union u +{ + int i; + short f; +} v; + +short foo (short *f) +{ + *f = 1; + v.i = 0; + v.f = 0; + return *f; +} + +int main() +{ + if (foo (&v.f) != 0) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr53663-3.c b/gcc/testsuite/gcc.dg/torture/pr53663-3.c new file mode 100644 index 00000000000..96af5db10ac --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr53663-3.c @@ -0,0 +1,24 @@ +/* { dg-do run } */ + +extern void abort (void); + +union u +{ + int i; + float f; +} v; + +float foo (float *f) +{ + *f = 1; + v.i = 0; + v.f = 0.; + return *f; +} + +int main() +{ + if (foo (&v.f) != 0.) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/torture/pr54894.c b/gcc/testsuite/gcc.dg/torture/pr54894.c new file mode 100644 index 00000000000..277e371de62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr54894.c @@ -0,0 +1,27 @@ +/* { dg-do compile } */ + +typedef unsigned long long uint64_t; + +#define n 4096 +double A[n][n] __attribute__((aligned(16))); +double B[n][n] __attribute__((aligned(16))); +double C[n][n] __attribute__((aligned(16))); + +#define tilesize 128 + +typedef double adouble __attribute__((__aligned__(16))); + +void foo () +{ + int ih, jh, kh, il, kl, jl; + for (ih = 0; ih < n; ih += tilesize) + for (jh = 0; jh < n; jh += tilesize) + for (kh = 0; kh < n; kh += tilesize) + for (il = 0; il < tilesize; ++il) + { + adouble *Ap = (adouble *)&A[ih+il][kh]; + for (kl = 0; kl < tilesize; ++kl) + for (jl = 0; jl < tilesize; ++jl) + C[ih+il][jh+jl] += Ap[kl] * B[kh+kl][jh+jl]; + } +} diff --git a/gcc/testsuite/gcc.dg/torture/pr54920.c b/gcc/testsuite/gcc.dg/torture/pr54920.c index d1622f765a7..6b99e9ed2eb 100644 --- a/gcc/testsuite/gcc.dg/torture/pr54920.c +++ b/gcc/testsuite/gcc.dg/torture/pr54920.c @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-options "-fno-common" { target { hppa*-*-hpux* } } } */ typedef short __v8hi __attribute__ ((__vector_size__ (16))); typedef long long __m128i __attribute__ ((__vector_size__ (16))); diff --git a/gcc/testsuite/gcc.target/i386/pr55142-1.c b/gcc/testsuite/gcc.target/i386/pr55142-1.c new file mode 100644 index 00000000000..28375b54765 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr55142-1.c @@ -0,0 +1,34 @@ +/* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-O2 -mx32 -fpic" } */ + +typedef int int32_t; +typedef unsigned int uint32_t; +typedef int32_t Elf32_Sword; +typedef struct +{ + Elf32_Sword d_tag; +} Elf32_Dyn; +struct link_map +{ + Elf32_Dyn *l_ld; + Elf32_Dyn *l_info[34]; +}; +extern struct link_map _dl_rtld_map __attribute__ ((visibility ("hidden"))); +static void elf_get_dynamic_info (struct link_map *l) +{ + Elf32_Dyn *dyn = l->l_ld; + Elf32_Dyn **info; + info = l->l_info; + while (dyn->d_tag != 0) + { + if ((uint32_t) (0x6ffffeff - dyn->d_tag) < 11) + info[0x6ffffeff - dyn->d_tag + 12] = dyn; + ++dyn; + } +} +void +foo (void) +{ + elf_get_dynamic_info (&_dl_rtld_map); +} diff --git a/gcc/testsuite/gcc.target/i386/pr55142-2.c b/gcc/testsuite/gcc.target/i386/pr55142-2.c new file mode 100644 index 00000000000..9daae9dca95 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr55142-2.c @@ -0,0 +1,33 @@ +/* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-require-effective-target fpic } */ +/* { dg-options "-O3 -mx32 -fpic" } */ +/* { dg-final { scan-assembler-not "movl\[\\t \]*%.*,\[\\t \]*-1073742592\\(%r(.x|.i|.p|\[1-9\]*)\\)" } } */ + +typedef int int32_t; +typedef unsigned int uint32_t; +typedef uint32_t Elf32_Word; +typedef int32_t Elf32_Sword; +typedef uint32_t Elf32_Addr; +typedef struct { + Elf32_Sword d_tag; + union { + Elf32_Word d_val; + Elf32_Addr d_ptr; + } d_un; +} Elf32_Dyn; +struct link_map { + Elf32_Dyn *l_ld; + Elf32_Dyn *l_info[34 + 16 + 3 + 12 + 11]; +}; +void +elf_get_dynamic_info (struct link_map *l) +{ + Elf32_Dyn *dyn = l->l_ld; + Elf32_Dyn **info = l->l_info; + typedef Elf32_Word d_tag_utype; + while (dyn->d_tag != 0) { + if ((d_tag_utype) (0x6ffffeff - dyn->d_tag) < 11) + info[(0x6ffffeff - dyn->d_tag) + 34 + 16 + 3 + 12] = dyn; + ++dyn; + } +} diff --git a/gcc/testsuite/gfortran.dg/allocate_error_4.f90 b/gcc/testsuite/gfortran.dg/allocate_error_4.f90 new file mode 100644 index 00000000000..6652b472f49 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_error_4.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! PR fortran/55314 - the second allocate statement was rejected. + +program main + implicit none + integer :: max_nb + type comm_mask + integer(4), pointer :: mask(:) + end type comm_mask + type (comm_mask), allocatable, save :: encode(:,:) + max_nb=2 + allocate( encode(1:1,1:max_nb)) + allocate( encode(1,1)%mask(1),encode(1,2)%mask(1)) + deallocate( encode(1,1)%mask,encode(1,2)%mask) + allocate( encode(1,1)%mask(1),encode(1,1)%mask(1)) ! { dg-error "also appears at" } +end program main diff --git a/gcc/testsuite/gfortran.dg/namelist_76.f90 b/gcc/testsuite/gfortran.dg/namelist_76.f90 new file mode 100644 index 00000000000..acb3b2f6561 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/namelist_76.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 55352: [4.7/4.8 Regression] Erroneous gfortran warning of unused module variable when variable is only used in namelist +! +! Contributed by <AstroFloyd@gmail.com> + +module data + implicit none + integer :: a +end module data + +program test + use data, only: a + implicit none + a = 1 + call write_data() +end program test + +subroutine write_data() + use data, only: a + implicit none + namelist /write_data_list/ a + open(unit=10,form='formatted',status='replace',action='write',file='test.dat') + write(10, nml=write_data_list) + close(10) +end subroutine write_data + +! { dg-final { cleanup-modules "data" } } diff --git a/gcc/testsuite/gfortran.dg/transfer_class_1.f90 b/gcc/testsuite/gfortran.dg/transfer_class_1.f90 new file mode 100644 index 00000000000..00b3a2405f3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/transfer_class_1.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-options "-Wsurprising" } +! +! PR 54917: [4.7/4.8 Regression] [OOP] TRANSFER on polymorphic variable causes ICE +! +! Contributed by Sean Santos <quantheory@gmail.com> + +subroutine test_routine1(arg) + implicit none + type test_type + integer :: test_comp + end type + class(test_type) :: arg + integer :: i + i = transfer(arg, 1) +end subroutine diff --git a/gcc/testsuite/stack_check3.adb b/gcc/testsuite/stack_check3.adb new file mode 100644 index 00000000000..734ed422733 --- /dev/null +++ b/gcc/testsuite/stack_check3.adb @@ -0,0 +1,36 @@ +-- { dg-do compile } +-- { dg-options "-O -fstack-check" } + +package body Stack_Check3 is + + type Int_Arr is array (1 .. 34) of Integer; + + type Rec (D : Boolean := False) is + record + case D is + when True => IA : Int_Arr; + when False => null; + end case; + end record; + + type Rec_Arr is array (1 .. 256) of Rec; + + protected Prot_Arr is + procedure Reset; + private + A : Rec_Arr; + end Prot_Arr; + + protected body Prot_Arr is + procedure Reset is + begin + A := (others => (D => False)); + end Reset; + end Prot_Arr; + + procedure Reset is + begin + Prot_Arr.Reset; + end Reset; + +end Stack_Check3; diff --git a/gcc/testsuite/stack_check3.ads b/gcc/testsuite/stack_check3.ads new file mode 100644 index 00000000000..869c418839e --- /dev/null +++ b/gcc/testsuite/stack_check3.ads @@ -0,0 +1,5 @@ +package Stack_Check3 is + + procedure Reset; + +end Stack_Check3; diff --git a/gcc/toplev.c b/gcc/toplev.c index c145af48fb9..6f1da41b761 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1494,12 +1494,15 @@ process_options (void) /* If the user specifically requested variable tracking with tagging uninitialized variables, we need to turn on variable tracking. (We already determined above that variable tracking is feasible.) */ - if (flag_var_tracking_uninit) + if (flag_var_tracking_uninit == 1) flag_var_tracking = 1; if (flag_var_tracking == AUTODETECT_VALUE) flag_var_tracking = optimize >= 1; + if (flag_var_tracking_uninit == AUTODETECT_VALUE) + flag_var_tracking_uninit = flag_var_tracking; + if (flag_var_tracking_assignments == AUTODETECT_VALUE) flag_var_tracking_assignments = flag_var_tracking && !(flag_selective_scheduling || flag_selective_scheduling2); diff --git a/gcc/tree-dump.c b/gcc/tree-dump.c index 3e89cdf11f3..2882611c5bf 100644 --- a/gcc/tree-dump.c +++ b/gcc/tree-dump.c @@ -169,7 +169,8 @@ void dump_pointer (dump_info_p di, const char *field, void *ptr) { dump_maybe_newline (di); - fprintf (di->stream, "%-4s: %-8lx ", field, (unsigned long) ptr); + fprintf (di->stream, "%-4s: %-8" HOST_WIDE_INT_PRINT "x ", field, + (unsigned HOST_WIDE_INT) (uintptr_t) ptr); di->column += 15; } diff --git a/gcc/tree-ssa-pre.c b/gcc/tree-ssa-pre.c index 8d58e9c88fc..24d4bcd4b42 100644 --- a/gcc/tree-ssa-pre.c +++ b/gcc/tree-ssa-pre.c @@ -4981,6 +4981,13 @@ execute_pre (bool do_fre) todo |= tail_merge_optimize (todo); free_scc_vn (); + /* Tail merging invalidates the virtual SSA web, together with + cfg-cleanup opportunities exposed by PRE this will wreck the + SSA updating machinery. So make sure to run update-ssa + manually, before eventually scheduling cfg-cleanup as part of + the todo. */ + update_ssa (TODO_update_ssa_only_virtuals); + return todo; } @@ -5014,8 +5021,7 @@ struct gimple_opt_pass pass_pre = 0, /* properties_provided */ 0, /* properties_destroyed */ TODO_rebuild_alias, /* todo_flags_start */ - TODO_update_ssa_only_virtuals | TODO_ggc_collect - | TODO_verify_ssa /* todo_flags_finish */ + TODO_ggc_collect | TODO_verify_ssa /* todo_flags_finish */ } }; diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index f7a0b53e8e0..c2bd59d6416 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -1484,7 +1484,8 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_) /* 3) Assignment from a constant. We can use folds native encode/interpret routines to extract the assigned bits. */ - else if (CHAR_BIT == 8 && BITS_PER_UNIT == 8 + else if (vn_walk_kind == VN_WALKREWRITE + && CHAR_BIT == 8 && BITS_PER_UNIT == 8 && ref->size == maxsize && maxsize % BITS_PER_UNIT == 0 && offset % BITS_PER_UNIT == 0 diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 20690e67961..705f4f3a510 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -5793,11 +5793,6 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size) && GET_MODE_CLASS (inner_mode) != MODE_FLOAT) return NULL_TREE; - /* We can't build a vector type of elements with alignment bigger than - their size. */ - if (nbytes < TYPE_ALIGN_UNIT (scalar_type)) - return NULL_TREE; - /* For vector types of elements whose mode precision doesn't match their types precision we use a element type of mode precision. The vectorization routines will have to make sure @@ -5814,11 +5809,21 @@ get_vectype_for_scalar_type_and_size (tree scalar_type, unsigned size) When the component mode passes the above test simply use a type corresponding to that mode. The theory is that any use that would cause problems with this will disable vectorization anyway. */ - if (!SCALAR_FLOAT_TYPE_P (scalar_type) - && !INTEGRAL_TYPE_P (scalar_type) - && !POINTER_TYPE_P (scalar_type)) + else if (!SCALAR_FLOAT_TYPE_P (scalar_type) + && !INTEGRAL_TYPE_P (scalar_type) + && !POINTER_TYPE_P (scalar_type)) + scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1); + + /* We can't build a vector type of elements with alignment bigger than + their size. */ + else if (nbytes < TYPE_ALIGN_UNIT (scalar_type)) scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1); + /* If we felt back to using the mode fail if there was + no scalar type for it. */ + if (scalar_type == NULL_TREE) + return NULL_TREE; + /* If no size was supplied use the mode the target prefers. Otherwise lookup a vector mode of the specified size. */ if (size == 0) diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index c91be9a1c29..d204c767221 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,14 @@ +2012-12-04 Richard Henderson <rth@redhat.com> + + PR bootstrap/55571 + * Makefile.in (libgcc_s.so): Depend on and link with libgcc.a. + +2012-11-28 Richard Henderson <rth@redhat.com> + + PR libgcc/48076 + * emutls.c (__emutls_get_address): Avoid race condition between + obj->loc.offset read and emutls_key initialization. + 2012-11-04 Uros Bizjak <ubizjak@gmail.com> PR target/55175 diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in index f38d5b4a250..e1cac49b386 100644 --- a/libgcc/Makefile.in +++ b/libgcc/Makefile.in @@ -918,7 +918,7 @@ libgcc-std.ver: $(srcdir)/libgcc-std.ver.in sed -e 's/__PFX__/$(LIBGCC_VER_GNU_PREFIX)/g' \ -e 's/__FIXPTPFX__/$(LIBGCC_VER_FIXEDPOINT_GNU_PREFIX)/g' < $< > $@ -libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) +libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) libgcc.a # @multilib_flags@ is still needed because this may use # $(GCC_FOR_TARGET) and $(LIBGCC2_CFLAGS) directly. # @multilib_dir@ is not really necessary, but sometimes it has @@ -926,7 +926,7 @@ libgcc_s$(SHLIB_EXT): $(libgcc-s-objects) $(extra-parts) $(mkinstalldirs) $(MULTIDIR) $(subst @multilib_flags@,$(CFLAGS) -B./,$(subst \ @multilib_dir@,$(MULTIDIR),$(subst \ - @shlib_objs@,$(objects),$(subst \ + @shlib_objs@,$(objects) libgcc.a,$(subst \ @shlib_base_name@,libgcc_s,$(subst \ @shlib_map_file@,$(mapfile),$(subst \ @shlib_slibdir_qual@,$(MULTIOSSUBDIR),$(subst \ diff --git a/libgcc/emutls.c b/libgcc/emutls.c index 22ea4403edb..f1b653b7d54 100644 --- a/libgcc/emutls.c +++ b/libgcc/emutls.c @@ -136,7 +136,7 @@ __emutls_get_address (struct __emutls_object *obj) #ifndef __GTHREADS abort (); #else - pointer offset = obj->loc.offset; + pointer offset = __atomic_load_n (&obj->loc.offset, __ATOMIC_ACQUIRE); if (__builtin_expect (offset == 0, 0)) { @@ -147,7 +147,7 @@ __emutls_get_address (struct __emutls_object *obj) if (offset == 0) { offset = ++emutls_size; - obj->loc.offset = offset; + __atomic_store_n (&obj->loc.offset, offset, __ATOMIC_RELEASE); } __gthread_mutex_unlock (&emutls_mutex); } diff --git a/libgo/go/reflect/type.go b/libgo/go/reflect/type.go index 93021bae263..f2675c5784c 100644 --- a/libgo/go/reflect/type.go +++ b/libgo/go/reflect/type.go @@ -1230,8 +1230,19 @@ func directlyAssignable(T, V *commonType) bool { for i := range t.fields { tf := &t.fields[i] vf := &v.fields[i] - if tf.name != vf.name || tf.pkgPath != vf.pkgPath || - tf.typ != vf.typ || tf.tag != vf.tag || tf.offset != vf.offset { + if tf.name != vf.name && (tf.name == nil || vf.name == nil || *tf.name != *vf.name) { + return false + } + if tf.pkgPath != vf.pkgPath && (tf.pkgPath == nil || vf.pkgPath == nil || *tf.pkgPath != *vf.pkgPath) { + return false + } + if tf.typ != vf.typ { + return false + } + if tf.tag != vf.tag && (tf.tag == nil || vf.tag == nil || *tf.tag != *vf.tag) { + return false + } + if tf.offset != vf.offset { return false } } diff --git a/libgo/go/reflect/value.go b/libgo/go/reflect/value.go index b25e5c73d1a..5d0890016ed 100644 --- a/libgo/go/reflect/value.go +++ b/libgo/go/reflect/value.go @@ -841,7 +841,7 @@ func valueInterface(v Value, safe bool) interface{} { eface.typ = v.typ.runtimeType() eface.word = v.iword() - if v.flag&flagIndir != 0 && v.typ.size > ptrSize { + if v.flag&flagIndir != 0 && v.kind() != Ptr && v.kind() != UnsafePointer { // eface.word is a pointer to the actual data, // which might be changed. We need to return // a pointer to unchanging data, so make a copy. diff --git a/libgo/go/syscall/libcall_linux.go b/libgo/go/syscall/libcall_linux.go index 8d7da192514..23164042ed9 100644 --- a/libgo/go/syscall/libcall_linux.go +++ b/libgo/go/syscall/libcall_linux.go @@ -310,11 +310,13 @@ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n i var lroff _loff_t var plroff *_loff_t if roff != nil { + lroff = _loff_t(*roff) plroff = &lroff } var lwoff _loff_t var plwoff *_loff_t if woff != nil { + lwoff = _loff_t(*woff) plwoff = &lwoff } n, err = splice(rfd, plroff, wfd, plwoff, len, flags) diff --git a/libgo/go/syscall/socket.go b/libgo/go/syscall/socket.go index 973759086ce..d11d6cd7534 100644 --- a/libgo/go/syscall/socket.go +++ b/libgo/go/syscall/socket.go @@ -87,12 +87,16 @@ func (sa *SockaddrUnix) sockaddr() (*RawSockaddrAny, Socklen_t, error) { for i := 0; i < n; i++ { sa.raw.Path[i] = int8(name[i]) } + // length is family (uint16), name, NUL. + sl := 2 + Socklen_t(n) + 1 if sa.raw.Path[0] == '@' { sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- } // length is family (uint16), name, NUL. - return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), 2 + Socklen_t(n) + 1, nil + return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), sl, nil } func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { diff --git a/libgo/go/syscall/socket_linux.go b/libgo/go/syscall/socket_linux.go index 42ab2185084..224ca55ae21 100644 --- a/libgo/go/syscall/socket_linux.go +++ b/libgo/go/syscall/socket_linux.go @@ -103,7 +103,7 @@ func (sa *RawSockaddrUnix) getLen() (int, error) { // to be uninterpreted fixed-size binary blobs--but // everyone uses this convention. n := 0 - for n < len(sa.Path) - 3 && sa.Path[n] != 0 { + for n < len(sa.Path) && sa.Path[n] != 0 { n++ } diff --git a/libgo/mksysinfo.sh b/libgo/mksysinfo.sh index 12e0310bb43..606a46324ff 100755 --- a/libgo/mksysinfo.sh +++ b/libgo/mksysinfo.sh @@ -168,6 +168,12 @@ enum { #ifdef TIOCGWINSZ TIOCGWINSZ_val = TIOCGWINSZ, #endif +#ifdef TIOCNOTTY + TIOCNOTTY_val = TIOCNOTTY, +#endif +#ifdef TIOCSCTTY + TIOCSCTTY_val = TIOCSCTTY, +#endif }; EOF @@ -714,6 +720,16 @@ if ! grep '^const TIOCGWINSZ' ${OUT} >/dev/null 2>&1; then echo 'const TIOCGWINSZ = _TIOCGWINSZ_val' >> ${OUT} fi fi +if ! grep '^const TIOCNOTTY' ${OUT} >/dev/null 2>&1; then + if grep '^const _TIOCNOTTY_val' ${OUT} >/dev/null 2>&1; then + echo 'const TIOCNOTTY = _TIOCNOTTY_val' >> ${OUT} + fi +fi +if ! grep '^const TIOCSCTTY' ${OUT} >/dev/null 2>&1; then + if grep '^const _TIOCSCTTY_val' ${OUT} >/dev/null 2>&1; then + echo 'const TIOCSCTTY = _TIOCSCTTY_val' >> ${OUT} + fi +fi # The ioctl flags for terminal control grep '^const _TC[GS]ET' gen-sysinfo.go | \ diff --git a/libgo/runtime/print.c b/libgo/runtime/print.c index 5a8e47e5373..fcf57ea4144 100644 --- a/libgo/runtime/print.c +++ b/libgo/runtime/print.c @@ -17,7 +17,10 @@ gwrite(const void *v, int32 n) G* g = runtime_g(); if(g == nil || g->writebuf == nil) { - runtime_write(2, v, n); + // Avoid -D_FORTIFY_SOURCE problems. + int rv __attribute__((unused)); + + rv = runtime_write(2, v, n); return; } diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 11845a9bd12..25a5994469f 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,9 @@ +2012-11-21 Jakub Jelinek <jakub@redhat.com> + + PR libgomp/55411 + * team.c (gomp_free_thread): Decrease gomp_managed_threads + if pool had any threads_used. + 2012-09-20 Release Manager * GCC 4.7.2 released. diff --git a/libgomp/team.c b/libgomp/team.c index 633902ca567..110bd47116b 100644 --- a/libgomp/team.c +++ b/libgomp/team.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011 +/* Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc. Contributed by Richard Henderson <rth@redhat.com>. @@ -232,6 +232,15 @@ gomp_free_thread (void *arg __attribute__((unused))) gomp_barrier_wait (&pool->threads_dock); /* Now it is safe to destroy the barrier and free the pool. */ gomp_barrier_destroy (&pool->threads_dock); + +#ifdef HAVE_SYNC_BUILTINS + __sync_fetch_and_add (&gomp_managed_threads, + 1L - pool->threads_used); +#else + gomp_mutex_lock (&gomp_remaining_threads_lock); + gomp_managed_threads -= pool->threads_used - 1L; + gomp_mutex_unlock (&gomp_remaining_threads_lock); +#endif } free (pool->threads); if (pool->last_team) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 11cf39b26e6..ecf623bfed4 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,66 @@ +2012-12-01 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR libstdc++/55503 + * testsuite/30_threads/condition_variable/members/53841.cc: Add + hppa*-hp-hpux11* to -pthread dg-options. + +2012-11-20 Paolo Carlini <paolo.carlini@oracle.com> + + PR libstdc++/55413 + * include/bits/hashtable.h (_Hashtable<>::_M_rehash_aux): Initialize + __bbegin_bkt and __prev_bkt to avoid uninitialized warnings. + * testsuite/23_containers/unordered_set/instantiation_neg.cc: Adjust + dg-error line number. + +2012-11-15 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/53841 + * include/std/condition_variable (condition_variable::wait_until): + Handle clocks with higher resolution than __clock_t. + * testsuite/30_threads/condition_variable/members/53841.cc: New. + +2012-11-14 Jonathan Wakely <jwakely.gcc@gmail.com> + + PR libstdc++/55320 + * include/std/functional (function::function(F)): Set _M_manager after + operations that could throw. + (_Function_base::_Ref_manager::_M_init_functor): Use addressof. + * include/tr1/functional + (_Function_base::_Ref_manager::_M_init_functor): Use addressof. + (_Function_base::_Base_manager::_M_get_pointer): Likewise. + * testsuite/20_util/function/cons/55320.cc: New. + * testsuite/20_util/function/cons/addressof.cc: New. + * testsuite/20_util/bind/ref_neg.cc: Adjust dg-error line numbers. + * testsuite/tr1/3_function_objects/function/10.cc: New. + +2012-11-12 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/std/future (atomic_future): Remove declaration of + non-standard name. + +2012-11-08 François Dumont <fdumont@gcc.gnu.org> + + PR libstdc++/54075 + * include/bits/hashtable.h (_Hashtable<>::rehash): Reset hash + policy state if no rehash. + * testsuite/23_containers/unordered_set/modifiers/reserve.cc + (test02): New. + +2012-11-08 Jonathan Wakely <jwakely.gcc@gmail.com> + + * include/profile/iterator_tracker.h (operator++): Fix returning + dangling reference. + (operator--): Likewise. + +2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/20_util/shared_ptr/cons/55123.cc: Remove duplicate + include. + +2012-11-06 Jonathan Wakely <jwakely.gcc@gmail.com> + + * testsuite/*: Fix copying permission statements. + 2012-11-05 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/28811 @@ -81,10 +144,10 @@ 2012-10-29 Jonathan Wakely <jwakely.gcc@gmail.com> - PR libstdc++/55123 - * include/bits/shared_ptr_base.h (__shared_count::_S_create_from_up): - Do not instantiate allocator with element_type. - * testsuite/20_util/shared_ptr/cons/55123.cc: New. + PR libstdc++/55123 + * include/bits/shared_ptr_base.h (__shared_count::_S_create_from_up): + Do not instantiate allocator with element_type. + * testsuite/20_util/shared_ptr/cons/55123.cc: New. 2012-10-10 Andrew MacLeod <amacleod@redhat.com> diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 929f0bb790a..b58189f9685 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -1,7 +1,6 @@ // hashtable.h header -*- C++ -*- -// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012 -// Free Software Foundation, Inc. +// Copyright (C) 2007-2012 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 @@ -1597,6 +1596,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // level. _M_rehash_policy._M_prev_resize = 0; } + else + // No rehash, restore previous state to keep a consistent state. + _M_rehash_policy._M_reset(__saved_state); } template<typename _Key, typename _Value, @@ -1634,7 +1636,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Bucket* __new_buckets = _M_allocate_buckets(__n); _Node* __p = _M_begin(); _M_before_begin._M_nxt = nullptr; - std::size_t __bbegin_bkt; + std::size_t __bbegin_bkt = 0; while (__p) { _Node* __next = __p->_M_next(); @@ -1675,8 +1677,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _Node* __p = _M_begin(); _M_before_begin._M_nxt = nullptr; - std::size_t __bbegin_bkt; - std::size_t __prev_bkt; + std::size_t __bbegin_bkt = 0; + std::size_t __prev_bkt = 0; _Node* __prev_p = nullptr; bool __check_bucket = false; @@ -1704,8 +1706,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (__check_bucket) { - // Check if we shall update the next bucket because of insertions - // into __prev_bkt bucket. + // Check if we shall update the next bucket because of + // insertions into __prev_bkt bucket. if (__prev_p->_M_nxt) { std::size_t __next_bkt diff --git a/libstdc++-v3/include/profile/iterator_tracker.h b/libstdc++-v3/include/profile/iterator_tracker.h index 733429daad3..91f733cf757 100644 --- a/libstdc++-v3/include/profile/iterator_tracker.h +++ b/libstdc++-v3/include/profile/iterator_tracker.h @@ -93,7 +93,7 @@ namespace __profile return *this; } - __iterator_tracker& + __iterator_tracker operator++(int) { _M_ds->_M_profile_iterate(); @@ -110,7 +110,7 @@ namespace __profile return *this; } - __iterator_tracker& + __iterator_tracker operator--(int) { _M_ds->_M_profile_iterate(1); diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable index 0a85e1a3e20..60c72bacff0 100644 --- a/libstdc++-v3/include/std/condition_variable +++ b/libstdc++-v3/include/std/condition_variable @@ -107,8 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // DR 887 - Sync unknown clock to known clock. const typename _Clock::time_point __c_entry = _Clock::now(); const __clock_t::time_point __s_entry = __clock_t::now(); - const chrono::nanoseconds __delta = __atime - __c_entry; - const __clock_t::time_point __s_atime = __s_entry + __delta; + const auto __delta = __atime - __c_entry; + const auto __s_atime = __s_entry + __delta; return __wait_until_impl(__lock, __s_atime); } diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional index 4be1bc793f3..782400b39c6 100644 --- a/libstdc++-v3/include/std/functional +++ b/libstdc++-v3/include/std/functional @@ -1,7 +1,7 @@ // <functional> -*- C++ -*- // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -// 2011 Free Software Foundation, Inc. +// 2011, 2012 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 @@ -1872,8 +1872,7 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) static void _M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f) { - // TBD: Use address_of function instead. - _Base::_M_init_functor(__functor, &__f.get()); + _Base::_M_init_functor(__functor, std::__addressof(__f.get())); } }; @@ -2295,9 +2294,9 @@ _GLIBCXX_HAS_NESTED_TYPE(result_type) if (_My_handler::_M_not_empty_function(__f)) { + _My_handler::_M_init_functor(_M_functor, std::move(__f)); _M_invoker = &_My_handler::_M_invoke; _M_manager = &_My_handler::_M_manager; - _My_handler::_M_init_functor(_M_functor, std::move(__f)); } } diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index 22fd36a6fce..98c7b843812 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -113,9 +113,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _Res> class shared_future; - template<typename _Res> - class atomic_future; - template<typename _Signature> class packaged_task; diff --git a/libstdc++-v3/include/tr1/functional b/libstdc++-v3/include/tr1/functional index ff2bd2a7134..ef1461b694c 100644 --- a/libstdc++-v3/include/tr1/functional +++ b/libstdc++-v3/include/tr1/functional @@ -1,6 +1,6 @@ // TR1 functional header -*- C++ -*- -// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011 +// Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010, 2011, 2012 // Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free @@ -1616,7 +1616,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_get_pointer(const _Any_data& __source) { const _Functor* __ptr = - __stored_locally? &__source._M_access<_Functor>() + __stored_locally? std::__addressof(__source._M_access<_Functor>()) /* have stored a pointer */ : __source._M_access<_Functor*>(); return const_cast<_Functor*>(__ptr); } @@ -1745,8 +1745,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static void _M_init_functor(_Any_data& __functor, reference_wrapper<_Functor> __f) { - // TBD: Use address_of function instead. - _Base::_M_init_functor(__functor, &__f.get()); + _Base::_M_init_functor(__functor, std::__addressof(__f.get())); } }; diff --git a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc index f4bf96bb3ef..ba5a0d4909d 100644 --- a/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc +++ b/libstdc++-v3/testsuite/18_support/initializer_list/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc index fa2123114d5..2bc87b1615e 100644 --- a/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc +++ b/libstdc++-v3/testsuite/20_util/bind/ref_neg.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2010, 2011 Free Software Foundation, Inc. +// Copyright (C) 2010, 2011, 2012 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 @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// 20.7.11 Function template bind +// 20.8.9 Function template bind // { dg-do compile } // { dg-options "-std=gnu++0x" } diff --git a/libstdc++-v3/testsuite/20_util/function/cons/55320.cc b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc new file mode 100644 index 00000000000..611e8acbbf4 --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function/cons/55320.cc @@ -0,0 +1,46 @@ +// Copyright (C) 2012 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +// libstdc++/55320 + +// { dg-options "-std=gnu++0x" } + +#include <functional> +#include <testsuite_hooks.h> + +struct X +{ + X() { ++count; } + X(const X&) { throw 1; } + ~X() { --count; } + void operator()() { } + static int count; +}; + +int X::count = 0; + +int main() +{ + try + { + std::function<void()> f = X(); + } + catch (int) + { + VERIFY( X::count == 0 ); + } +} diff --git a/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc new file mode 100644 index 00000000000..25b6fb84bec --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/function/cons/addressof.cc @@ -0,0 +1,41 @@ +// Copyright (C) 2012 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++0x" } +// { dg-do compile } + +#include <functional> + +struct F +{ + void operator()() { } + void operator&() const { } +}; + +void test01() +{ + F f; + std::function<void()> f1 = f; + std::function<void()> f2 = std::ref(f); +} + +int main() +{ + test01(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc index 35b517e8863..6628d4bf16e 100644 --- a/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc +++ b/libstdc++-v3/testsuite/20_util/shared_ptr/cons/55123.cc @@ -22,8 +22,6 @@ // libstdc++/55123 -#include <memory> - void f() { std::unique_ptr<const int> y; std::shared_ptr<const int> x = std::move(y); diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc index 5d1ba942d54..788f7b17279 100644 --- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc +++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/move_iterators/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc index fc11a74eba9..1a29613f4fe 100644 --- a/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc +++ b/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/move_iterators/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc index 666445a152d..cd0d4eb51fb 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/char/shrink_to_fit.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc index 9fce4403ddf..88f7c0ab08e 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/capacity/wchar_t/shrink_to_fit.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc index 458bf53e2c5..2a0a1bc6365 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/char/1.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc index e300b092389..b58332c014a 100644 --- a/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/21_strings/basic_string/range_access/wchar_t/1.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc index 4b3814f3b12..08b91e5937c 100644 --- a/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/array/element_access/at_neg.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/array/range_access.cc b/libstdc++-v3/testsuite/23_containers/array/range_access.cc index 77d036276fb..fb691d0d80e 100644 --- a/libstdc++-v3/testsuite/23_containers/array/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/array/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc index 6e34f0bff41..c5d70dcf704 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134-2.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc index b7e12b3d1c7..23d4dfc7021 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc index 5f7fac6df4a..4cd5564560b 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/capacity/shrink_to_fit.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc index d996ed6d1b0..7c758895453 100644 --- a/libstdc++-v3/testsuite/23_containers/deque/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/deque/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc index 4798e93e077..702acfe34cc 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/capacity/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc index 0f9eb458581..7dec2a4b49a 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc index c12282b7168..eb447274b5d 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc index 572b9ee331b..6197731cb78 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/3.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc index a19d47a869e..3d23719ca68 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc index 6f45a73a77a..ca7b5f7e6e6 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/5.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc index 3fccff43451..f385661f2c8 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/6.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc index 54e3527a8b8..f037791346b 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/7.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc index 42470342e6c..3cf4288f42b 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/8.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc index 590fad669bc..ce7bb859745 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/cons/9.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc index 23ea900b87d..57e0e2f532e 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/clear.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc index f2cd59370a2..8f36076194c 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after1_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc index 6e243359505..2efaa74cac8 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after2_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc index 70a0a345688..b17707e6160 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after3_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc index 9e4b3d49933..087abcecdbb 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after4_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc index 6aabbea6085..46a74da5f9f 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after5_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc index 29c418a08dd..a057c9cfa70 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after6_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc index 9390827c086..49a48f74d8f 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after7_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc index 77dcb750eb7..a1ff667f586 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after8_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc index 42fe2023423..3d25787dee3 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/erase_after9_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc index 08d49a54ab3..84d39ae993a 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after1_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc index db9fd5e093c..18e1670cc31 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after2_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc index 4ad698f3c95..325028c72a4 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/insert_after3_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc index 4a93666b224..6238f6f8fd6 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/move_constructor.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc index 4cc1cfcf78d..e19be90ebdb 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc index 3ee7f689aeb..d0cee48b2b2 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after1_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc index 6a7fcfb22c2..54556232294 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after2_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc index 55e50dc0511..1e63e90a5c1 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after3_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc index 4c161906e0a..9582a8b3ec1 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/splice_after4_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc index 486bfcf0724..85884c0af05 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/debug/swap.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc index 18b6f3c0541..09ad6aa6ed3 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc index b6ae3f3795c..b6c6e35eb8a 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc index cade58f7dac..349be4c2eb3 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/3.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc index 10444f0500c..554ac030dfb 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc index 65190789cc7..26a422665c1 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/5.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc index e160381a776..43a11be2856 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/modifiers/6.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc index 4a9e3644527..31eaaa5a460 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc index 32a7db3eaa7..fe12af9aa63 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc index f227daa1f3e..f112bc2d89f 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/3.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc index 3bf61aad9fa..6c09065e553 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc index 1291a269044..55d1634c400 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/5.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc index 2b8e3c74d4f..082d2adbbcb 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/6.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc index bad78e26509..fd71cb63143 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/operations/7.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc index 378cd9f0b1e..350b8286ca1 100644 --- a/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/forward_list/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc index cb6c29ac8d1..3b0e8dc7255 100644 --- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc +++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h index 4a2f2bc06a2..408e0786c52 100644 --- a/libstdc++-v3/testsuite/23_containers/list/capacity/1.h +++ b/libstdc++-v3/testsuite/23_containers/list/capacity/1.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc index f2f51f22352..d8c88b526b0 100644 --- a/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/list/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc index cf8c20a6578..4d56b154ab1 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h index 2d7e45bb1ed..2abc063e1b1 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc index c055f70bc74..dea0d4c44cf 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/1_c++0x.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc index ee9b54923df..1879ed2e5ae 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h index e95f797cb51..b25467bdb19 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/2.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc index 8454c3f46fa..990cf227cfa 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h index 64602ac4c1b..c4017db49a9 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/3.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc index eb286e0f54d..6fbcf6c1723 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h index aebbe0ba537..772128d95bf 100644 --- a/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h +++ b/libstdc++-v3/testsuite/23_containers/list/modifiers/insert/25288.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc index 2c98213e2a5..48c7d908cf6 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/1.h b/libstdc++-v3/testsuite/23_containers/list/operations/1.h index 2f3f9df9465..601c5e77260 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/1.h +++ b/libstdc++-v3/testsuite/23_containers/list/operations/1.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc index 100066fc29b..7cd57622019 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/2.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2.h b/libstdc++-v3/testsuite/23_containers/list/operations/2.h index 8eb3da4e780..6db3333bd08 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/2.h +++ b/libstdc++-v3/testsuite/23_containers/list/operations/2.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc index faaf2f765b1..6d744a0151c 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/2_c++0x.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc index 53570b4a694..1ed46b21dc6 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/3.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3.h b/libstdc++-v3/testsuite/23_containers/list/operations/3.h index 4d28daea12b..9181e7ea9fc 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/3.h +++ b/libstdc++-v3/testsuite/23_containers/list/operations/3.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc index 0598cfb225b..37a480606ff 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/3_c++0x.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc index a220b9b331f..4e14f1ae62a 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/4.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/4.h b/libstdc++-v3/testsuite/23_containers/list/operations/4.h index 0a3ea4d234d..6502827470c 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/4.h +++ b/libstdc++-v3/testsuite/23_containers/list/operations/4.h @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc index a61071acc10..7e6c9c4f12d 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/42352.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc index ad99c27ae42..bcfbb81b77e 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/5.cc +++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/operations/5.h b/libstdc++-v3/testsuite/23_containers/list/operations/5.h index 2b54d5195ff..0820e8a6952 100644 --- a/libstdc++-v3/testsuite/23_containers/list/operations/5.h +++ b/libstdc++-v3/testsuite/23_containers/list/operations/5.h @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/list/range_access.cc b/libstdc++-v3/testsuite/23_containers/list/range_access.cc index afe148d9e66..768bd638a68 100644 --- a/libstdc++-v3/testsuite/23_containers/list/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/list/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc index 41e43c6688a..303160801aa 100644 --- a/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/map/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/map/range_access.cc b/libstdc++-v3/testsuite/23_containers/map/range_access.cc index 2fb7f4ac943..1e4e3c18780 100644 --- a/libstdc++-v3/testsuite/23_containers/map/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/map/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc index 8ec893114dc..a8e407daf90 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc index da4c77b4aca..0f1c5bc5384 100644 --- a/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/multimap/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc index 84372de8078..0a05f83c521 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc index b8e3accce6c..d3fb95ea2a1 100644 --- a/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/multiset/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc index a0ab5405116..7d9bccd0f05 100644 --- a/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/set/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/set/range_access.cc b/libstdc++-v3/testsuite/23_containers/set/range_access.cc index ffbda4e93fe..b1c33b773ef 100644 --- a/libstdc++-v3/testsuite/23_containers/set/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/set/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc index c509a34afee..d651732a66f 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/final_hash.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc index 4a6847e5c0b..089cf512d99 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/observers.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc index b41b6a5b3ee..1555c48963c 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc index bf05fab0d28..c75ed9b09aa 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/52942.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc index 704f5998c0d..ed05d208f5b 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/53067.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc index 4e2920c2437..7950713a7e0 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/final_hash.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc index 634bd9d3b68..456074e30d1 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/observers.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc index f95a6681b1b..bfc8ac1c4d2 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc index 242642f2bba..c65b17d3309 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/final_hash.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc index 0ea3e5bf0c8..2c8b4e6cc91 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/observers.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc index 137b0d6d2e9..ac0fdaa2cc3 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc index 5dced4cd1a6..e661ee401fb 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/final_hash.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc index b8957c31813..3a6984c4500 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/instantiation_neg.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. @@ -19,7 +19,7 @@ // with this library; see the file COPYING3. If not see // <http://www.gnu.org/licenses/>. -// { dg-error "static assertion failed" "" { target *-*-* } 186 } +// { dg-error "static assertion failed" "" { target *-*-* } 185 } #include <unordered_set> diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc index aba6f771d81..41f428a51db 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/reserve.cc @@ -40,8 +40,28 @@ void test01() } } +void test02() +{ + const int N = 1000; + + typedef std::unordered_set<int> Set; + Set s; + s.reserve(N); + s.reserve(N); + + std::size_t bkts = s.bucket_count(); + for (int i = 0; i != N; ++i) + { + s.insert(i); + // As long as we insert less than the reserved number of elements we + // shouldn't experiment any rehash. + VERIFY( s.bucket_count() == bkts ); + } +} + int main() { test01(); + test02(); return 0; } diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc index c18b0598464..a1c0c8474e0 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/observers.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc index ea116c364af..2bb738afd91 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc index 067e57a5e26..9053b000e4d 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/52942.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc index 760f10c7e85..7cfa4ad474b 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/requirements/53067.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc index cd5a6a42483..f6d0e15eddd 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc index fc591997318..5cd3d0e1314 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/31370.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc index 7f6f9f252a3..c48e474e938 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134-2.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc index af6460a2bf0..72fac56c2b2 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc index 2a737891b0a..482166cab29 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc index 81cd55a8f27..2cc5a7d0cee 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc index 0a10959b240..cbcbf614496 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/range_access.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/24_iterators/range_access.cc b/libstdc++-v3/testsuite/24_iterators/range_access.cc index 3bd1d2e5da3..e2e37e34c68 100644 --- a/libstdc++-v3/testsuite/24_iterators/range_access.cc +++ b/libstdc++-v3/testsuite/24_iterators/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc index 92c5adebc72..d73c15427ff 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc index 9a6e3036e2f..08d3f59949a 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/2.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc index 5822b783d07..29caf3ae9a0 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/3.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc index ebc8d9c54a4..612eb48724e 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/34595.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc index e3de207f57b..885561a2bf4 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/4.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc index 5d100e8714d..172c2aed2b5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/deque_iterators/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc index e07c4920cd2..4781ba1de3a 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/move_iterators/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc index aef55f1a049..ab66f725142 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc index d1beb445744..201e2787192 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc index 37eb415352c..d8f5dbfc61b 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/3.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc index 7b36e26f957..62ecf686ddf 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc index c378c571fb7..655b3242dc0 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc index f4d8b8b8256..d7871320b07 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc index 016f241ddbd..ac50b87de3c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/3.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc index ad3aae527d8..56a5cdef631 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy/streambuf_iterators/wchar_t/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc index 57405cc80e8..211de81293d 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/deque_iterators/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc index aaf50064f16..2f697b0b357 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_backward/move_iterators/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc index ce820bb2c7f..85c5db792a2 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc index c59fdb5b67e..8d3411badf7 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/2.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc index b12e4b85189..75d139b8ffa 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/3.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc index d6759fab58c..21a95a076fb 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/4.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc index 6803f964467..d6f0630a740 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/50119.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc index 6c22ba672ac..2db2479bd53 100644 --- a/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/copy_n/move_iterators/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc index bf7094e9279..838a71720e5 100644 --- a/libstdc++-v3/testsuite/25_algorithms/fill/4.cc +++ b/libstdc++-v3/testsuite/25_algorithms/fill/4.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc index edabe1fcc29..78a3c231227 100644 --- a/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc index 25206629a42..fca18d9161a 100644 --- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc index 695fe46d416..1a4b339d78c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/char/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc index 235a6338387..8dc5742b3b1 100644 --- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc index 161b2250e7e..9251d611776 100644 --- a/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/find/istreambuf_iterators/wchar_t/2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc index 49d3dee1a8b..1683a83f78f 100644 --- a/libstdc++-v3/testsuite/25_algorithms/heap/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/heap/1.cc @@ -8,7 +8,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc index 1506b5f72f7..b16667911c7 100644 --- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc +++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc index 86eefbee63c..562ab466ae7 100644 --- a/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc +++ b/libstdc++-v3/testsuite/25_algorithms/heap/moveable2.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc index 954a65dfa66..605fc45ce72 100644 --- a/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/is_heap/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc index 7c612e659d5..e4cc7a06762 100644 --- a/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/is_heap_until/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc index 41339b85bf3..87efdeff383 100644 --- a/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc index 1c3d7aa31d1..cb756ca4f86 100644 --- a/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/is_sorted_until/1.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/move/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/1.cc index b577cfa5d6d..65c42d12d65 100644 --- a/libstdc++-v3/testsuite/25_algorithms/move/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/move/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc index 0e0debf7baa..a97dfc01113 100644 --- a/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/move/deque_iterators/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc index 436ccb03124..21120046641 100644 --- a/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc index 9a8ba71206f..f695a6d720c 100644 --- a/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/move_backward/deque_iterators/1.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc index 0ea55ef3d81..bbad940a413 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partition/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partition/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc index 925811bd61b..94ef5a980fe 100644 --- a/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc +++ b/libstdc++-v3/testsuite/25_algorithms/partition/moveable.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc index 022a1b29af5..de6b4765b16 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty2_neg.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc index 57b3f17f01d..e5183011493 100644 --- a/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc +++ b/libstdc++-v3/testsuite/25_algorithms/pop_heap/empty_neg.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc index 7ca9ea4d56c..a77e8893840 100644 --- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc +++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/1.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc index 95d50061879..6a98a72ac22 100644 --- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc +++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc index c5f95f36779..7a3d214e33e 100644 --- a/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc +++ b/libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc @@ -9,7 +9,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc index be08d0298d3..10f67dac866 100644 --- a/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc +++ b/libstdc++-v3/testsuite/26_numerics/valarray/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/28_regex/range_access.cc b/libstdc++-v3/testsuite/28_regex/range_access.cc index 0bd620f0bd5..b913bc47c0b 100644 --- a/libstdc++-v3/testsuite/28_regex/range_access.cc +++ b/libstdc++-v3/testsuite/28_regex/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc new file mode 100644 index 00000000000..f91509c492a --- /dev/null +++ b/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc @@ -0,0 +1,50 @@ +// { dg-do compile } +// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* powerpc-ibm-aix* hppa*-hp-hpux11* } } +// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } } +// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } +// { dg-require-cstdint "" } +// { dg-require-gthreads "" } + +// Copyright (C) 2012 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/>. + +// PR libstdc++/53841 + +#include <chrono> +#include <mutex> +#include <condition_variable> + +namespace ch = std::chrono; + +struct FPClock : ch::system_clock +{ + typedef double rep; + typedef std::ratio<1> period; + typedef ch::duration<rep, period> duration; + typedef ch::time_point<FPClock> time_point; + + static time_point now() + { return time_point(duration(system_clock::now().time_since_epoch())); } +}; + +void f() +{ + std::mutex mx; + std::unique_lock<std::mutex> l(mx); + std::condition_variable cv; + cv.wait_until(l, FPClock::now()); +} diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc index 337df66706f..b572f1eb7a1 100644 --- a/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc +++ b/libstdc++-v3/testsuite/ext/vstring/capacity/29134.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc index e6737de0e31..bed965a5e56 100644 --- a/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc +++ b/libstdc++-v3/testsuite/ext/vstring/capacity/shrink_to_fit.cc @@ -11,7 +11,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc index db0bc03f096..94dce3787f6 100644 --- a/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc +++ b/libstdc++-v3/testsuite/ext/vstring/hash/char/1.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc index 83edbe11a8c..d23a882de3e 100644 --- a/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc +++ b/libstdc++-v3/testsuite/ext/vstring/hash/wchar_t/1.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/ext/vstring/range_access.cc b/libstdc++-v3/testsuite/ext/vstring/range_access.cc index 32322924709..f734e92c72b 100644 --- a/libstdc++-v3/testsuite/ext/vstring/range_access.cc +++ b/libstdc++-v3/testsuite/ext/vstring/range_access.cc @@ -10,7 +10,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc index c7dbdc006c2..461dfc044ad 100644 --- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc +++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_backward_deque_iterators.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc index 4318bd4f460..35d5d79dec9 100644 --- a/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc +++ b/libstdc++-v3/testsuite/performance/25_algorithms/copy_deque_iterators.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc new file mode 100644 index 00000000000..ca29e3cc3fb --- /dev/null +++ b/libstdc++-v3/testsuite/tr1/3_function_objects/function/10.cc @@ -0,0 +1,41 @@ +// Copyright (C) 2012 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++0x" } +// { dg-do compile } + +#include <tr1/functional> + +struct F +{ + void operator()() { } + void operator&() const { } +}; + +void test01() +{ + F f; + std::tr1::function<void()> f1 = f; + std::tr1::function<void()> f2 = std::tr1::ref(f); +} + +int main() +{ + test01(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc index 5d2927077e7..08d87f2df27 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_map/capacity/29134-map.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc index 4f1b060f800..970593e0d6e 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multimap/capacity/29134-multimap.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc index 2a74c3c3629..a0b3fd85c4f 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_multiset/capacity/29134-multiset.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. diff --git a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc index 0831bd5295d..63abcd41e91 100644 --- a/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc +++ b/libstdc++-v3/testsuite/tr1/6_containers/unordered_set/capacity/29134-set.cc @@ -7,7 +7,7 @@ // any later version. // This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// 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. |