Index: patches/gcc-4.8.2-branch_update-2.patch
===================================================================
--- patches/gcc-4.8.2-branch_update-2.patch	(revision 3e1d58b6bd56369f2d6f79bfaaf2988061cb4424)
+++ patches/gcc-4.8.2-branch_update-2.patch	(revision 3e1d58b6bd56369f2d6f79bfaaf2988061cb4424)
@@ -0,0 +1,36195 @@
+Submitted By: William Harrington (kb0iic at cross-lfs dot org)
+Date: 30-03-2014
+Initial Package Version: 4.8.2
+Origin: Upstream
+Upstream Status: Applied
+Description: This is a branch update for gcc-4.8.2, and should be
+             rechecked periodically.
+
+Includes PR tree-optimization/54094
+
+This patch was made from Revision # 208943.
+
+diff -Naur gcc-4.8.2.orig/boehm-gc/include/private/gcconfig.h gcc-4.8.2/boehm-gc/include/private/gcconfig.h
+--- gcc-4.8.2.orig/boehm-gc/include/private/gcconfig.h	2013-03-06 15:08:58.000000000 +0000
++++ gcc-4.8.2/boehm-gc/include/private/gcconfig.h	2014-03-30 20:21:40.550931139 +0000
+@@ -837,7 +837,15 @@
+ #     define NO_PTHREAD_TRYLOCK
+ #   endif
+ #   ifdef FREEBSD
++#   if defined(__powerpc64__)
++#       define ALIGNMENT 8
++#       define CPP_WORDSZ 64
++#       ifndef HBLKSIZE
++#           define HBLKSIZE 4096
++#       endif
++#   else
+ #       define ALIGNMENT 4
++#   endif
+ #       define OS_TYPE "FREEBSD"
+ #       ifndef GC_FREEBSD_THREADS
+ #           define MPROTECT_VDB
+diff -Naur gcc-4.8.2.orig/contrib/gcc_update gcc-4.8.2/contrib/gcc_update
+--- gcc-4.8.2.orig/contrib/gcc_update	2012-11-14 11:09:00.000000000 +0000
++++ gcc-4.8.2/contrib/gcc_update	2014-03-30 20:21:40.550931139 +0000
+@@ -382,7 +382,7 @@
+ 	fi
+ 
+ 	revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
+-	branch=`$GCC_SVN info | sed -ne "/URL:/ {
++	branch=`$GCC_SVN info | sed -ne "/^URL:/ {
+ 	    s,.*/trunk,trunk,
+ 	    s,.*/branches/,,
+ 	    s,.*/tags/,,
+diff -Naur gcc-4.8.2.orig/gcc/ChangeLog gcc-4.8.2/gcc/ChangeLog
+--- gcc-4.8.2.orig/gcc/ChangeLog	2013-10-16 07:20:05.000000000 +0000
++++ gcc-4.8.2/gcc/ChangeLog	2014-03-30 20:29:59.087238765 +0000
+@@ -696,6 +696,15 @@
+ 	top. Promote lra_assert to gcc_assert.
+ 	(reload_pseudo_compare_func): Check regs first for reload pseudos.
+ 
++2013-07-13  Tobias Grosser  <tobias@grosser.es>
++
++	PR tree-optimization/54094
++	* graphite-clast-to-gimple.c (translate_clast_for_loop): Derive the
++	  scheduling dimension for the parallelism check from the polyhedral
++	  information in the AST.
++	* graphite-dependences.c (carries_deps): Do not assume the schedule is
++	  in 2D + 1 form.
++
+ 2013-07-11  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	Backport from 2013-07-19 trunk r201051.
+diff -Naur gcc-4.8.2.orig/gcc/DATESTAMP gcc-4.8.2/gcc/DATESTAMP
+--- gcc-4.8.2.orig/gcc/DATESTAMP	2013-10-16 00:16:34.000000000 +0000
++++ gcc-4.8.2/gcc/DATESTAMP	2014-03-30 20:21:40.650928664 +0000
+@@ -1 +1 @@
+-20131016
++20140330
+diff -Naur gcc-4.8.2.orig/gcc/Makefile.in gcc-4.8.2/gcc/Makefile.in
+--- gcc-4.8.2.orig/gcc/Makefile.in	2013-07-08 09:14:34.000000000 +0000
++++ gcc-4.8.2/gcc/Makefile.in	2014-03-30 20:21:40.694263438 +0000
+@@ -1827,7 +1827,7 @@
+ 	    "$(MULTILIB_EXCLUSIONS)" \
+ 	    "$(MULTILIB_OSDIRNAMES)" \
+ 	    "$(MULTILIB_REQUIRED)" \
+-	    "$(MULTIARCH_DIRNAME)" \
++	    "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
+ 	    "$(MULTILIB_REUSE)" \
+ 	    "@enable_multilib@" \
+ 	    > tmp-mlib.h; \
+@@ -2256,7 +2256,7 @@
+    $(FUNCTION_H) $(TM_H) coretypes.h \
+    $(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
+    $(FLAGS_H) $(HASHTAB_H) pointer-set.h \
+-   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
++   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
+ tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
+    $(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
+    toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
+@@ -3037,7 +3037,7 @@
+     $(TM_H) coretypes.h $(GIMPLE_H) \
+     $(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
+     $(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
+-    $(GIMPLE_PRETTY_PRINT_H) langhooks.h
++    $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
+ tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
+     $(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
+     tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
+@@ -3276,12 +3276,12 @@
+    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
+    $(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
+    $(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
+-   ira.h rtl-error.h $(LRA_INT_H)
++   ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
+ lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
+    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
+    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
+    $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
+-   rtl-error.h $(LRA_INT_H)
++   rtl-error.h $(LRA_INT_H) $(OPTABS_H)
+ lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
+    $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
+    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
+diff -Naur gcc-4.8.2.orig/gcc/ada/back_end.ads gcc-4.8.2/gcc/ada/back_end.ads
+--- gcc-4.8.2.orig/gcc/ada/back_end.ads	2011-08-04 08:33:14.000000000 +0000
++++ gcc-4.8.2/gcc/ada/back_end.ads	2014-03-30 20:21:40.554264291 +0000
+@@ -55,6 +55,7 @@
+       Complex   : Boolean;  -- True iff type has real and imaginary parts
+       Count     : Natural;  -- Number of elements in vector, 0 otherwise
+       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
++      Precision : Positive; -- Precision of representation in bits
+       Size      : Positive; -- Size of representation in bits
+       Alignment : Natural); -- Required alignment in bits
+    pragma Convention (C, Register_Type_Proc);
+diff -Naur gcc-4.8.2.orig/gcc/ada/cstand.adb gcc-4.8.2/gcc/ada/cstand.adb
+--- gcc-4.8.2.orig/gcc/ada/cstand.adb	2012-10-01 09:41:22.000000000 +0000
++++ gcc-4.8.2/gcc/ada/cstand.adb	2014-03-30 20:21:40.554264291 +0000
+@@ -151,6 +151,7 @@
+       Complex   : Boolean;  -- True iff type has real and imaginary parts
+       Count     : Natural;  -- Number of elements in vector, 0 otherwise
+       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
++      Precision : Positive; -- Precision of representation in bits
+       Size      : Positive; -- Size of representation in bits
+       Alignment : Natural); -- Required alignment in bits
+    pragma Convention (C, Register_Float_Type);
+@@ -2014,6 +2015,7 @@
+       Complex   : Boolean;
+       Count     : Natural;
+       Float_Rep : Float_Rep_Kind;
++      Precision : Positive;
+       Size      : Positive;
+       Alignment : Natural)
+    is
+@@ -2063,13 +2065,24 @@
+ 
+          else
+             Write_Str ("mod 2**");
+-            Write_Int (Int (Size / Positive'Max (1, Count)));
++            Write_Int (Int (Precision / Positive'Max (1, Count)));
+             Write_Line (";");
+          end if;
+ 
+-         Write_Str ("for " & T & "'Size use ");
+-         Write_Int (Int (Size));
+-         Write_Line (";");
++         if Precision = Size then
++            Write_Str ("for " & T (1 .. Last) & "'Size use ");
++            Write_Int (Int (Size));
++            Write_Line (";");
++
++         else
++            Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
++            Write_Int (Int (Precision));
++            Write_Line (";");
++
++            Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
++            Write_Int (Int (Size));
++            Write_Line (";");
++         end if;
+ 
+          Write_Str ("for " & T & "'Alignment use ");
+          Write_Int (Int (Alignment / 8));
+@@ -2092,15 +2105,13 @@
+       if Digs > 0 and then not Complex and then Count = 0 then
+          declare
+             Ent   : constant Entity_Id := New_Standard_Entity;
+-            Esize : constant Pos := Pos ((Size + Alignment - 1)
+-                                           / Alignment * Alignment);
+          begin
+             Set_Defining_Identifier
+               (New_Node (N_Full_Type_Declaration, Stloc), Ent);
+             Make_Name (Ent, T (1 .. Last));
+             Set_Scope (Ent, Standard_Standard);
+-            Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
+-            Set_RM_Size (Ent, UI_From_Int (Int (Size)));
++            Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
++            Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
+             Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
+ 
+             if No (Back_End_Float_Types) then
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/Make-lang.in gcc-4.8.2/gcc/ada/gcc-interface/Make-lang.in
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/Make-lang.in	2013-02-06 11:13:07.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/Make-lang.in	2014-03-30 20:21:40.557597408 +0000
+@@ -625,7 +625,7 @@
+ ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
+ 	-$(MKDIR) ada/doctools
+ 	$(CP) $^ ada/doctools
+-	cd ada/doctools && $(GNATMAKE) -q xgnatugn
++	cd ada/doctools && gnatmake -q xgnatugn
+ 
+ # Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
+ # xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/Makefile.in gcc-4.8.2/gcc/ada/gcc-interface/Makefile.in
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/Makefile.in	2013-02-06 11:19:08.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/Makefile.in	2014-03-30 20:21:40.554264291 +0000
+@@ -2397,7 +2397,7 @@
+ 	"GNATLINK=$(GNATLINK)"	\
+ 	"GNATBIND=$(GNATBIND)"
+ 
+-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
++GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
+ 
+ # Build directory for the tools. Let's copy the target-dependent
+ # sources using the same mechanism as for gnatlib. The other sources are
+@@ -2519,12 +2519,10 @@
+ 
+ # Likewise for the tools
+ ../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
+-	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
+-		    $(TOOLS_LIBS)
++	+$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
+ 
+ ../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
+-	$(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
+-		    $(TOOLS_LIBS)
++	+$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
+ 
+ ../stamp-gnatlib-$(RTSDIR):
+ 	@if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/cuintp.c gcc-4.8.2/gcc/ada/gcc-interface/cuintp.c
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/cuintp.c	2012-05-10 15:05:39.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/cuintp.c	2014-03-30 20:21:40.554264291 +0000
+@@ -6,7 +6,7 @@
+  *                                                                          *
+  *                          C Implementation File                           *
+  *                                                                          *
+- *          Copyright (C) 1992-2012, Free Software Foundation, Inc.         *
++ *          Copyright (C) 1992-2014, Free Software Foundation, Inc.         *
+  *                                                                          *
+  * GNAT is free software;  you can  redistribute it  and/or modify it under *
+  * terms of the  GNU General Public License as published  by the Free Soft- *
+@@ -59,8 +59,8 @@
+ static tree
+ build_cst_from_int (tree type, HOST_WIDE_INT low)
+ {
+-  if (TREE_CODE (type) == REAL_TYPE)
+-    return convert (type, build_int_cst (NULL_TREE, low));
++  if (SCALAR_FLOAT_TYPE_P (type))
++    return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
+   else
+     return build_int_cst_type (type, low);
+ }
+@@ -99,19 +99,12 @@
+       gcc_assert (Length > 0);
+ 
+       /* The computations we perform below always require a type at least as
+-	 large as an integer not to overflow.  REAL types are always fine, but
++	 large as an integer not to overflow.  FP types are always fine, but
+ 	 INTEGER or ENUMERAL types we are handed may be too short.  We use a
+ 	 base integer type node for the computations in this case and will
+-	 convert the final result back to the incoming type later on.
+-	 The base integer precision must be superior than 16.  */
+-
+-      if (TREE_CODE (comp_type) != REAL_TYPE
+-	  && TYPE_PRECISION (comp_type)
+-	     < TYPE_PRECISION (long_integer_type_node))
+-	{
+-	  comp_type = long_integer_type_node;
+-	  gcc_assert (TYPE_PRECISION (comp_type) > 16);
+-	}
++	 convert the final result back to the incoming type later on.  */
++      if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
++	comp_type = gnat_type_for_size (32, 0);
+ 
+       gnu_base = build_cst_from_int (comp_type, Base);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/gigi.h gcc-4.8.2/gcc/ada/gcc-interface/gigi.h
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/gigi.h	2013-06-13 07:51:32.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/gigi.h	2014-03-30 20:21:40.554264291 +0000
+@@ -1014,7 +1014,7 @@
+ /* This function is called by the front-end to enumerate all the supported
+    modes for the machine, as well as some predefined C types.  */
+ extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
+-					int));
++					int, int));
+ 
+ #ifdef __cplusplus
+ }
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/misc.c gcc-4.8.2/gcc/ada/gcc-interface/misc.c
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/misc.c	2013-01-02 10:45:00.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/misc.c	2014-03-30 20:21:40.557597408 +0000
+@@ -648,7 +648,7 @@
+ /* This function is called by the front-end to enumerate all the supported
+    modes for the machine, as well as some predefined C types.  F is a function
+    which is called back with the parameters as listed below, first a string,
+-   then six ints.  The name is any arbitrary null-terminated string and has
++   then seven ints.  The name is any arbitrary null-terminated string and has
+    no particular significance, except for the case of predefined C types, where
+    it should be the name of the C type.  For integer types, only signed types
+    should be listed, unsigned versions are assumed.  The order of types should
+@@ -664,11 +664,12 @@
+    COMPLEX_P	nonzero is this represents a complex mode
+    COUNT	count of number of items, nonzero for vector mode
+    FLOAT_REP	Float_Rep_Kind for FP, otherwise undefined
+-   SIZE		number of bits used to store data
++   PRECISION	number of bits used to store data
++   SIZE		number of bits occupied by the mode
+    ALIGN	number of bits to which mode is aligned.  */
+ 
+ void
+-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
++enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
+ {
+   const tree c_types[]
+     = { float_type_node, double_type_node, long_double_type_node };
+@@ -742,28 +743,26 @@
+ 
+       /* First register any C types for this mode that the front end
+ 	 may need to know about, unless the mode should be skipped.  */
+-
+-      if (!skip_p)
++      if (!skip_p && !vector_p)
+ 	for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
+ 	  {
+-	    tree typ = c_types[nameloop];
+-	    const char *nam = c_names[nameloop];
++	    tree type = c_types[nameloop];
++	    const char *name = c_names[nameloop];
+ 
+-	    if (TYPE_MODE (typ) == i)
++	    if (TYPE_MODE (type) == i)
+ 	      {
+-		f (nam, digs, complex_p,
+-		   vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
+-		   TYPE_PRECISION (typ), TYPE_ALIGN (typ));
++		f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
++		   TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
+ 		skip_p = true;
+ 	      }
+ 	  }
+ 
+       /* If no predefined C types were found, register the mode itself.  */
+-
+       if (!skip_p)
+ 	f (GET_MODE_NAME (i), digs, complex_p,
+ 	   vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
+-	   GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
++	   GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
++	   GET_MODE_ALIGNMENT (i));
+     }
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c gcc-4.8.2/gcc/ada/gcc-interface/utils.c
+--- gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c	2013-06-13 07:51:32.000000000 +0000
++++ gcc-4.8.2/gcc/ada/gcc-interface/utils.c	2014-03-30 20:21:40.557597408 +0000
+@@ -232,6 +232,7 @@
+ static tree split_plus (tree, tree *);
+ static tree float_type_for_precision (int, enum machine_mode);
+ static tree convert_to_fat_pointer (tree, tree);
++static unsigned int scale_by_factor_of (tree, unsigned int);
+ static bool potential_alignment_gap (tree, tree, tree);
+ static void process_attributes (tree, struct attrib *);
+ 
+
+@@ -532,6 +533,22 @@
+   free_binding_level = level;
+ }
+ 
+
++/* Set the context of TYPE and its parallel types (if any) to CONTEXT.  */
++
++static void
++gnat_set_type_context (tree type, tree context)
++{
++  tree decl = TYPE_STUB_DECL (type);
++
++  TYPE_CONTEXT (type) = context;
++
++  while (decl && DECL_PARALLEL_TYPE (decl))
++    {
++      TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
++      decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
++    }
++}
++
+ /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
+    for location information and flag propagation.  */
+ 
+@@ -613,7 +630,7 @@
+ 	      if (TREE_CODE (t) == POINTER_TYPE)
+ 		TYPE_NEXT_PTR_TO (t) = tt;
+ 	      TYPE_NAME (tt) = DECL_NAME (decl);
+-	      TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++	      gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ 	      TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
+ 	      DECL_ORIGINAL_TYPE (decl) = tt;
+ 	    }
+@@ -623,7 +640,7 @@
+ 	  /* We need a variant for the placeholder machinery to work.  */
+ 	  tree tt = build_variant_type_copy (t);
+ 	  TYPE_NAME (tt) = decl;
+-	  TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++	  gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ 	  TREE_USED (tt) = TREE_USED (t);
+ 	  TREE_TYPE (decl) = tt;
+ 	  if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
+@@ -645,7 +662,7 @@
+ 	  if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
+ 	    {
+ 	      TYPE_NAME (t) = decl;
+-	      TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
++	      gnat_set_type_context (t, DECL_CONTEXT (decl));
+ 	    }
+     }
+ }
+@@ -1692,93 +1709,74 @@
+       TYPE_SIZE_UNIT (new_record_type)
+ 	= size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
+ 
+-      /* Now scan all the fields, replacing each field with a new
+-	 field corresponding to the new encoding.  */
++      /* Now scan all the fields, replacing each field with a new field
++	 corresponding to the new encoding.  */
+       for (old_field = TYPE_FIELDS (record_type); old_field;
+ 	   old_field = DECL_CHAIN (old_field))
+ 	{
+ 	  tree field_type = TREE_TYPE (old_field);
+ 	  tree field_name = DECL_NAME (old_field);
+-	  tree new_field;
+ 	  tree curpos = bit_position (old_field);
++	  tree pos, new_field;
+ 	  bool var = false;
+ 	  unsigned int align = 0;
+-	  tree pos;
+-
+-	  /* See how the position was modified from the last position.
+ 
+-	  There are two basic cases we support: a value was added
+-	  to the last position or the last position was rounded to
+-	  a boundary and they something was added.  Check for the
+-	  first case first.  If not, see if there is any evidence
+-	  of rounding.  If so, round the last position and try
+-	  again.
++	  /* We're going to do some pattern matching below so remove as many
++	     conversions as possible.  */
++	  curpos = remove_conversions (curpos, true);
+ 
+-	  If this is a union, the position can be taken as zero. */
++	  /* See how the position was modified from the last position.
+ 
+-	  /* Some computations depend on the shape of the position expression,
+-	     so strip conversions to make sure it's exposed.  */
+-	  curpos = remove_conversions (curpos, true);
++	     There are two basic cases we support: a value was added
++	     to the last position or the last position was rounded to
++	     a boundary and they something was added.  Check for the
++	     first case first.  If not, see if there is any evidence
++	     of rounding.  If so, round the last position and retry.
+ 
++	     If this is a union, the position can be taken as zero.  */
+ 	  if (TREE_CODE (new_record_type) == UNION_TYPE)
+-	    pos = bitsize_zero_node, align = 0;
++	    pos = bitsize_zero_node;
+ 	  else
+ 	    pos = compute_related_constant (curpos, last_pos);
+ 
+-	  if (!pos && TREE_CODE (curpos) == MULT_EXPR
++	  if (!pos
++	      && TREE_CODE (curpos) == MULT_EXPR
+ 	      && host_integerp (TREE_OPERAND (curpos, 1), 1))
+ 	    {
+ 	      tree offset = TREE_OPERAND (curpos, 0);
+ 	      align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
+-
+-	      /* An offset which is a bitwise AND with a mask increases the
+-		 alignment according to the number of trailing zeros.  */
+-	      offset = remove_conversions (offset, true);
+-	      if (TREE_CODE (offset) == BIT_AND_EXPR
+-		  && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
+-		{
+-		  unsigned HOST_WIDE_INT mask
+-		    = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
+-		  unsigned int i;
+-
+-		  for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
+-		    {
+-		      if (mask & 1)
+-			break;
+-		      mask >>= 1;
+-		      align *= 2;
+-		    }
+-		}
+-
+-	      pos = compute_related_constant (curpos,
+-					      round_up (last_pos, align));
++	      align = scale_by_factor_of (offset, align);
++	      last_pos = round_up (last_pos, align);
++	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+-	  else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
+-		   && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
++	  else if (!pos
++		   && TREE_CODE (curpos) == PLUS_EXPR
++		   && host_integerp (TREE_OPERAND (curpos, 1), 1)
+ 		   && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
+-		   && host_integerp (TREE_OPERAND
+-				     (TREE_OPERAND (curpos, 0), 1),
+-				     1))
++		   && host_integerp
++		      (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
+ 	    {
++	      tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
++	      unsigned HOST_WIDE_INT addend
++	        = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
+ 	      align
+-		= tree_low_cst
+-		(TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
+-	      pos = compute_related_constant (curpos,
+-					      round_up (last_pos, align));
++		= tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
++	      align = scale_by_factor_of (offset, align);
++	      align = MIN (align, addend & -addend);
++	      last_pos = round_up (last_pos, align);
++	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+-	  else if (potential_alignment_gap (prev_old_field, old_field,
+-					    pos))
++	  else if (potential_alignment_gap (prev_old_field, old_field, pos))
+ 	    {
+ 	      align = TYPE_ALIGN (field_type);
+-	      pos = compute_related_constant (curpos,
+-					      round_up (last_pos, align));
++	      last_pos = round_up (last_pos, align);
++	      pos = compute_related_constant (curpos, last_pos);
+ 	    }
+ 
+ 	  /* If we can't compute a position, set it to zero.
+ 
+-	  ??? We really should abort here, but it's too much work
+-	  to get this correct for all cases.  */
+-
++	     ??? We really should abort here, but it's too much work
++	     to get this correct for all cases.  */
+ 	  if (!pos)
+ 	    pos = bitsize_zero_node;
+ 
+@@ -2553,6 +2551,32 @@
+   return false;
+ }
+ 
++/* Return VALUE scaled by the biggest power-of-2 factor of EXPR.  */
++
++static unsigned int
++scale_by_factor_of (tree expr, unsigned int value)
++{
++  expr = remove_conversions (expr, true);
++
++  /* An expression which is a bitwise AND with a mask has a power-of-2 factor
++     corresponding to the number of trailing zeros of the mask.  */
++  if (TREE_CODE (expr) == BIT_AND_EXPR
++      && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
++    {
++      unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
++      unsigned int i = 0;
++
++      while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
++	{
++	  mask >>= 1;
++	  value *= 2;
++	  i++;
++	}
++    }
++
++  return value;
++}
++
+ /* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
+    unless we can prove these 2 fields are laid out in such a way that no gap
+    exist between the end of PREV_FIELD and the beginning of CURR_FIELD.  OFFSET
+diff -Naur gcc-4.8.2.orig/gcc/ada/indepsw-darwin.adb gcc-4.8.2/gcc/ada/indepsw-darwin.adb
+--- gcc-4.8.2.orig/gcc/ada/indepsw-darwin.adb	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/ada/indepsw-darwin.adb	2014-03-30 20:21:40.560930524 +0000
+@@ -0,0 +1,67 @@
++------------------------------------------------------------------------------
++--                                                                          --
++--                         GNAT COMPILER COMPONENTS                         --
++--                                                                          --
++--                              I N D E P S W                               --
++--                                                                          --
++--                                 B o d y                                  --
++--                            (Darwin version)                              --
++--                                                                          --
++--            Copyright (C) 2013, Free Software Foundation, Inc.            --
++--                                                                          --
++-- GNAT is free software;  you can  redistribute it  and/or modify it under --
++-- terms of the  GNU General Public License as published  by the Free Soft- --
++-- 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.                                     --
++--                                                                          --
++-- 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/>.                                          --
++--                                                                          --
++-- GNAT was originally developed  by the GNAT team at  New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc.      --
++--                                                                          --
++------------------------------------------------------------------------------
++
++--  This is the Darwin version
++
++package body Indepsw is
++
++   Map_Switch : aliased constant String := "-Wl,-map,";
++
++   -------------
++   -- Convert --
++   -------------
++
++   procedure Convert
++     (Switch   : Switch_Kind;
++      Argument : String;
++      To       : out String_List_Access)
++   is
++   begin
++      case Switch is
++         when Map_File =>
++            To := new Argument_List'(1 => new String'(Map_Switch & Argument));
++      end case;
++   end Convert;
++
++   ------------------
++   -- Is_Supported --
++   ------------------
++
++   function Is_Supported (Switch : Switch_Kind) return Boolean is
++   begin
++      case Switch is
++         when Map_File =>
++            return True;
++      end case;
++   end Is_Supported;
++
++end Indepsw;
+diff -Naur gcc-4.8.2.orig/gcc/alias.c gcc-4.8.2/gcc/alias.c
+--- gcc-4.8.2.orig/gcc/alias.c	2013-03-05 09:40:38.000000000 +0000
++++ gcc-4.8.2/gcc/alias.c	2014-03-30 20:21:40.560930524 +0000
+@@ -156,7 +156,9 @@
+ static alias_set_entry get_alias_set_entry (alias_set_type);
+ static bool nonoverlapping_component_refs_p (const_rtx, const_rtx);
+ static tree decl_for_component_ref (tree);
+-static int write_dependence_p (const_rtx, const_rtx, int);
++static int write_dependence_p (const_rtx,
++	    		              const_rtx, enum machine_mode, rtx,
++				      		             bool, bool, bool);
+ 
+ static void memory_modified_1 (rtx, const_rtx, void *);
+ 
+@@ -2558,15 +2560,24 @@
+ }
+ 
+ /* Returns nonzero if a write to X might alias a previous read from
+-   (or, if WRITEP is nonzero, a write to) MEM.  */
++   (or, if WRITEP is true, a write to) MEM.
++   If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
++   and X_MODE the mode for that access.
++   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
+ 
+ static int
+-write_dependence_p (const_rtx mem, const_rtx x, int writep)
++write_dependence_p (const_rtx mem,
++		    	           const_rtx x, enum machine_mode x_mode, rtx x_addr,
++				   	         bool mem_canonicalized, bool x_canonicalized, bool writep)
+ {
+-  rtx x_addr, mem_addr;
++  rtx mem_addr;
+   rtx base;
+   int ret;
+ 
++  gcc_checking_assert (x_canonicalized
++  		              ? (x_addr != NULL_RTX && x_mode != VOIDmode)
++			      	       : (x_addr == NULL_RTX && x_mode == VOIDmode));
++
+   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
+     return 1;
+ 
+@@ -2590,17 +2601,21 @@
+   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
+     return 1;
+ 
+-  x_addr = XEXP (x, 0);
+   mem_addr = XEXP (mem, 0);
+-  if (!((GET_CODE (x_addr) == VALUE
+-	 && GET_CODE (mem_addr) != VALUE
+-	 && reg_mentioned_p (x_addr, mem_addr))
+-	|| (GET_CODE (x_addr) != VALUE
+-	    && GET_CODE (mem_addr) == VALUE
+-	    && reg_mentioned_p (mem_addr, x_addr))))
++  if (!x_addr)
+     {
+-      x_addr = get_addr (x_addr);
+-      mem_addr = get_addr (mem_addr);
++      x_addr = XEXP (x, 0);
++      if (!((GET_CODE (x_addr) == VALUE
++	     && GET_CODE (mem_addr) != VALUE
++	     && reg_mentioned_p (x_addr, mem_addr))
++	    || (GET_CODE (x_addr) != VALUE
++		&& GET_CODE (mem_addr) == VALUE
++		&& reg_mentioned_p (mem_addr, x_addr))))
++	{
++	  x_addr = get_addr (x_addr);
++	  if (!mem_canonicalized)
++	    mem_addr = get_addr (mem_addr);
++	}
+     }
+ 
+   if (! writep)
+@@ -2616,11 +2631,16 @@
+ 			  GET_MODE (mem)))
+     return 0;
+ 
+-  x_addr = canon_rtx (x_addr);
+-  mem_addr = canon_rtx (mem_addr);
++  if (!x_canonicalized)
++    {
++      x_addr = canon_rtx (x_addr);
++      x_mode = GET_MODE (x);
++    }
++  if (!mem_canonicalized)
++    mem_addr = canon_rtx (mem_addr);
+ 
+   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
+-				 SIZE_FOR_MODE (x), x_addr, 0)) != -1)
++				 GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
+     return ret;
+ 
+   if (nonoverlapping_memrefs_p (x, mem, false))
+@@ -2634,7 +2654,23 @@
+ int
+ anti_dependence (const_rtx mem, const_rtx x)
+ {
+-  return write_dependence_p (mem, x, /*writep=*/0);
++  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
++  	  		          /*mem_canonicalized=*/false,
++						     /*x_canonicalized*/false, /*writep=*/false);
++}
++
++/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
++   Also, consider X in X_MODE (which might be from an enclosing
++   STRICT_LOW_PART / ZERO_EXTRACT).
++   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
++
++int
++canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
++		       		         const_rtx x, enum machine_mode x_mode, rtx x_addr)
++{
++  return write_dependence_p (mem, x, x_mode, x_addr,
++  	  		          mem_canonicalized, /*x_canonicalized=*/true,
++							     /*writep=*/false);
+ }
+ 
+ /* Output dependence: X is written after store in MEM takes place.  */
+@@ -2642,7 +2678,9 @@
+ int
+ output_dependence (const_rtx mem, const_rtx x)
+ {
+-  return write_dependence_p (mem, x, /*writep=*/1);
++  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
++  	  		          /*mem_canonicalized=*/false,
++						     /*x_canonicalized*/false, /*writep=*/true);
+ }
+ 
+
+ 
+@@ -2871,16 +2909,13 @@
+       /* Wipe the reg_seen array clean.  */
+       bitmap_clear (reg_seen);
+ 
+-      /* Mark all hard registers which may contain an address.
+-	 The stack, frame and argument pointers may contain an address.
+-	 An argument register which can hold a Pmode value may contain
+-	 an address even if it is not in BASE_REGS.
+-
+-	 The address expression is VOIDmode for an argument and
+-	 Pmode for other registers.  */
+-
+-      memcpy (new_reg_base_value, static_reg_base_value,
+-	      FIRST_PSEUDO_REGISTER * sizeof (rtx));
++      /* Initialize the alias information for this pass.  */
++      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
++	if (static_reg_base_value[i])
++	  {
++	    new_reg_base_value[i] = static_reg_base_value[i];
++	    bitmap_set_bit (reg_seen, i);
++	  }
+ 
+       /* Walk the insns adding values to the new_reg_base_value array.  */
+       for (i = 0; i < rpo_cnt; i++)
+diff -Naur gcc-4.8.2.orig/gcc/bb-reorder.c gcc-4.8.2/gcc/bb-reorder.c
+--- gcc-4.8.2.orig/gcc/bb-reorder.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/bb-reorder.c	2014-03-30 20:21:40.560930524 +0000
+@@ -1685,9 +1685,8 @@
+ 	  edge e;
+ 	  edge_iterator ei;
+ 
+-	  /* Find EDGE_CAN_FALLTHRU edge.  */
+ 	  FOR_EACH_EDGE (e, ei, cur_bb->succs)
+-	    if (e->flags & EDGE_CAN_FALLTHRU)
++	    if (e->flags & EDGE_FALLTHRU)
+ 	      {
+ 		fall_thru = e;
+ 		break;
+diff -Naur gcc-4.8.2.orig/gcc/builtins.c gcc-4.8.2/gcc/builtins.c
+--- gcc-4.8.2.orig/gcc/builtins.c	2013-05-03 08:55:08.000000000 +0000
++++ gcc-4.8.2/gcc/builtins.c	2014-03-30 20:21:40.560930524 +0000
+@@ -180,7 +180,6 @@
+ static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
+ static tree fold_builtin_strstr (location_t, tree, tree, tree);
+ static tree fold_builtin_strrchr (location_t, tree, tree, tree);
+-static tree fold_builtin_strcat (location_t, tree, tree);
+ static tree fold_builtin_strncat (location_t, tree, tree, tree);
+ static tree fold_builtin_strspn (location_t, tree, tree);
+ static tree fold_builtin_strcspn (location_t, tree, tree);
+@@ -1958,6 +1957,7 @@
+   tree fndecl = get_callee_fndecl (exp);
+   enum machine_mode mode;
+   bool errno_set = false;
++  bool try_widening = false;
+   tree arg;
+ 
+   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
+@@ -1969,6 +1969,7 @@
+     {
+     CASE_FLT_FN (BUILT_IN_SQRT):
+       errno_set = ! tree_expr_nonnegative_p (arg);
++      try_widening = true;
+       builtin_optab = sqrt_optab;
+       break;
+     CASE_FLT_FN (BUILT_IN_EXP):
+@@ -2025,8 +2026,10 @@
+   if (! flag_errno_math || ! HONOR_NANS (mode))
+     errno_set = false;
+ 
+-  /* Before working hard, check whether the instruction is available.  */
+-  if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
++  /* Before working hard, check whether the instruction is available, but try
++     to widen the mode for specific operations.  */
++  if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
++       || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
+       && (!errno_set || !optimize_insn_for_size_p ()))
+     {
+       rtx result = gen_reg_rtx (mode);
+@@ -5347,7 +5350,7 @@
+ expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp, 
+ 					rtx target)
+ {
+-  rtx expect, desired, mem, oldval;
++  rtx expect, desired, mem, oldval, label;
+   enum memmodel success, failure;
+   tree weak;
+   bool is_weak;
+@@ -5385,14 +5388,26 @@
+   if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
+     is_weak = true;
+ 
+-  oldval = expect;
+-  if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
+-				       &oldval, mem, oldval, desired,
++  if (target == const0_rtx)
++    target = NULL;
++
++  /* Lest the rtl backend create a race condition with an imporoper store
++     to memory, always create a new pseudo for OLDVAL.  */
++  oldval = NULL;
++
++  if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
+ 				       is_weak, success, failure))
+     return NULL_RTX;
+ 
+-  if (oldval != expect)
+-    emit_move_insn (expect, oldval);
++  /* Conditionally store back to EXPECT, lest we create a race condition
++     with an improper store to memory.  */
++  /* ??? With a rearrangement of atomics at the gimple level, we can handle
++     the normal case where EXPECT is totally private, i.e. a register.  At
++     which point the store can be unconditional.  */
++  label = gen_label_rtx ();
++  emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
++  emit_move_insn (expect, oldval);
++  emit_label (label);
+ 
+   return target;
+ }
+@@ -10766,7 +10781,7 @@
+       return fold_builtin_strstr (loc, arg0, arg1, type);
+ 
+     case BUILT_IN_STRCAT:
+-      return fold_builtin_strcat (loc, arg0, arg1);
++      return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
+ 
+     case BUILT_IN_STRSPN:
+       return fold_builtin_strspn (loc, arg0, arg1);
+@@ -11809,8 +11824,9 @@
+    COMPOUND_EXPR in the chain will contain the tree for the simplified
+    form of the builtin function call.  */
+ 
+-static tree
+-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
++tree
++fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
++		     tree len)
+ {
+   if (!validate_arg (dst, POINTER_TYPE)
+       || !validate_arg (src, POINTER_TYPE))
+@@ -11828,22 +11844,17 @@
+ 	  /* See if we can store by pieces into (dst + strlen(dst)).  */
+ 	  tree newdst, call;
+ 	  tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
+-	  tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
++	  tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
+ 
+-	  if (!strlen_fn || !strcpy_fn)
++	  if (!strlen_fn || !memcpy_fn)
+ 	    return NULL_TREE;
+ 
+-	  /* If we don't have a movstr we don't want to emit an strcpy
+-	     call.  We have to do that if the length of the source string
+-	     isn't computable (in that case we can use memcpy probably
+-	     later expanding to a sequence of mov instructions).  If we
+-	     have movstr instructions we can emit strcpy calls.  */
+-	  if (!HAVE_movstr)
+-	    {
+-	      tree len = c_strlen (src, 1);
+-	      if (! len || TREE_SIDE_EFFECTS (len))
+-		return NULL_TREE;
+-	    }
++	  /* If the length of the source string isn't computable don't
++	     split strcat into strlen and memcpy.  */
++	  if (! len)
++	    len = c_strlen (src, 1);
++	  if (! len || TREE_SIDE_EFFECTS (len))
++	    return NULL_TREE;
+ 
+ 	  /* Stabilize the argument list.  */
+ 	  dst = builtin_save_expr (dst);
+@@ -11855,7 +11866,11 @@
+ 	  newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
+ 	  newdst = builtin_save_expr (newdst);
+ 
+-	  call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
++	  len = fold_convert_loc (loc, size_type_node, len);
++	  len = size_binop_loc (loc, PLUS_EXPR, len,
++				build_int_cst (size_type_node, 1));
++
++	  call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
+ 	  return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
+ 	}
+       return NULL_TREE;
+diff -Naur gcc-4.8.2.orig/gcc/c/c-decl.c gcc-4.8.2/gcc/c/c-decl.c
+--- gcc-4.8.2.orig/gcc/c/c-decl.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/c/c-decl.c	2014-03-30 20:21:40.564263645 +0000
+@@ -4632,7 +4632,9 @@
+     {
+       int failure = complete_array_type (&TREE_TYPE (decl),
+ 					 DECL_INITIAL (decl), true);
+-      gcc_assert (!failure);
++      /* If complete_array_type returns 3, it means that the
++         initial value of the compound literal is empty.  Allow it.  */
++      gcc_assert (failure == 0 || failure == 3);
+ 
+       type = TREE_TYPE (decl);
+       TREE_TYPE (DECL_INITIAL (decl)) = type;
+diff -Naur gcc-4.8.2.orig/gcc/c/c-typeck.c gcc-4.8.2/gcc/c/c-typeck.c
+--- gcc-4.8.2.orig/gcc/c/c-typeck.c	2013-01-24 16:59:44.000000000 +0000
++++ gcc-4.8.2/gcc/c/c-typeck.c	2014-03-30 20:21:40.564263645 +0000
+@@ -3629,7 +3629,8 @@
+       /* Report invalid types.  */
+ 
+       if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
+-	  && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
++	  && typecode != INTEGER_TYPE && typecode != REAL_TYPE
++	  && typecode != VECTOR_TYPE)
+ 	{
+ 	  if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
+ 	    error_at (location, "wrong type argument to increment");
+@@ -3694,7 +3695,9 @@
+ 	  }
+ 	else
+ 	  {
+-	    inc = integer_one_node;
++	    inc = (TREE_CODE (argtype) == VECTOR_TYPE
++		   ? build_one_cst (argtype)
++		   : integer_one_node);
+ 	    inc = convert (argtype, inc);
+ 	  }
+ 
+@@ -4331,8 +4334,10 @@
+     {
+       if (int_operands)
+ 	{
+-	  op1 = remove_c_maybe_const_expr (op1);
+-	  op2 = remove_c_maybe_const_expr (op2);
++	  /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
++	     nested inside of the expression.  */
++	  op1 = c_fully_fold (op1, false, NULL);
++	  op2 = c_fully_fold (op2, false, NULL);
+ 	}
+       ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
+       if (int_operands)
+@@ -10618,7 +10623,8 @@
+ 			"%qE has invalid type for %<reduction%>", t);
+ 	      remove = true;
+ 	    }
+-	  else if (FLOAT_TYPE_P (TREE_TYPE (t)))
++	  else if (FLOAT_TYPE_P (TREE_TYPE (t))
++		   || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
+ 	    {
+ 	      enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
+ 	      const char *r_name = NULL;
+@@ -10628,8 +10634,14 @@
+ 		case PLUS_EXPR:
+ 		case MULT_EXPR:
+ 		case MINUS_EXPR:
++		  break;
+ 		case MIN_EXPR:
++		  if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
++		    r_name = "min";
++		  break;
+ 		case MAX_EXPR:
++		  if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
++		    r_name = "max";
+ 		  break;
+ 		case BIT_AND_EXPR:
+ 		  r_name = "&";
+@@ -10641,10 +10653,12 @@
+ 		  r_name = "|";
+ 		  break;
+ 		case TRUTH_ANDIF_EXPR:
+-		  r_name = "&&";
++		  if (FLOAT_TYPE_P (TREE_TYPE (t)))
++		    r_name = "&&";
+ 		  break;
+ 		case TRUTH_ORIF_EXPR:
+-		  r_name = "||";
++		  if (FLOAT_TYPE_P (TREE_TYPE (t)))
++		    r_name = "||";
+ 		  break;
+ 		default:
+ 		  gcc_unreachable ();
+diff -Naur gcc-4.8.2.orig/gcc/c-family/c-common.c gcc-4.8.2/gcc/c-family/c-common.c
+--- gcc-4.8.2.orig/gcc/c-family/c-common.c	2013-05-14 20:52:27.000000000 +0000
++++ gcc-4.8.2/gcc/c-family/c-common.c	2014-03-30 20:21:40.564263645 +0000
+@@ -2894,7 +2894,7 @@
+ 	  }
+       if (!found)
+ 	{
+-	  *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
++	  *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
+ 	  end = &(*end)->next;
+ 	  *end = 0;
+ 	}
+@@ -3052,7 +3052,7 @@
+       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
+       warn_for_collisions (tmp_list2);
+       merge_tlist (pbefore_sp, tmp_before, 0);
+-      merge_tlist (pbefore_sp, tmp_list2, 1);
++      merge_tlist (pbefore_sp, tmp_list2, 0);
+ 
+       tmp_list3 = tmp_nosp = 0;
+       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
+@@ -3156,12 +3156,7 @@
+ 	    warn_for_collisions (tmp_nosp);
+ 
+ 	    tmp_list3 = 0;
+-	    while (tmp_nosp)
+-	      {
+-		struct tlist *t = tmp_nosp;
+-		tmp_nosp = t->next;
+-		merge_tlist (&tmp_list3, t, 0);
+-	      }
++	    merge_tlist (&tmp_list3, tmp_nosp, 0);
+ 	    t->cache_before_sp = tmp_before;
+ 	    t->cache_after_sp = tmp_list3;
+ 	  }
+@@ -5511,13 +5506,13 @@
+     uint8_type_node =
+       TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
+   if (UINT16_TYPE)
+-    c_uint16_type_node =
++    c_uint16_type_node = uint16_type_node =
+       TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
+   if (UINT32_TYPE)
+-    c_uint32_type_node =
++    c_uint32_type_node = uint32_type_node =
+       TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
+   if (UINT64_TYPE)
+-    c_uint64_type_node =
++    c_uint64_type_node = uint64_type_node =
+       TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
+   if (INT_LEAST8_TYPE)
+     int_least8_type_node =
+@@ -6917,6 +6912,10 @@
+     }
+ 
+   arg = TREE_VALUE (args);
++  if (TREE_CODE (arg) == IDENTIFIER_NODE)
++    goto invalid;
++  if (arg == error_mark_node)
++    return DEFAULT_INIT_PRIORITY;
+   arg = default_conversion (arg);
+   if (!host_integerp (arg, /*pos=*/0)
+       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
+@@ -9763,6 +9762,11 @@
+ 		"invalid type argument of %<->%> (have %qT)",
+ 		type);
+       break;
++    case RO_ARROW_STAR:
++      error_at (loc,
++		"invalid type argument of %<->*%> (have %qT)",
++		type);
++      break;
+     case RO_IMPLICIT_CONVERSION:
+       error_at (loc,
+ 		"invalid type argument of implicit conversion (have %qT)",
+diff -Naur gcc-4.8.2.orig/gcc/cfgcleanup.c gcc-4.8.2/gcc/cfgcleanup.c
+--- gcc-4.8.2.orig/gcc/cfgcleanup.c	2013-09-10 11:48:30.000000000 +0000
++++ gcc-4.8.2/gcc/cfgcleanup.c	2014-03-30 20:21:40.567596893 +0000
+@@ -1293,7 +1293,6 @@
+ {
+   rtx i1, i2, last1, last2, afterlast1, afterlast2;
+   int ninsns = 0;
+-  rtx p1;
+   enum replace_direction dir, last_dir, afterlast_dir;
+   bool follow_fallthru, did_fallthru;
+ 
+@@ -1321,8 +1320,9 @@
+       || (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
+     {
+       last2 = i2;
+-      /* Count everything except for unconditional jump as insn.  */
+-      if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
++      /* Count everything except for unconditional jump as insn.
++	 Don't count any jumps if dir_p is NULL.  */
++      if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
+ 	ninsns++;
+       i2 = PREV_INSN (i2);
+     }
+@@ -1373,8 +1373,8 @@
+ 	  last1 = i1, last2 = i2;
+ 	  afterlast_dir = last_dir;
+ 	  last_dir = dir;
+-	  p1 = PATTERN (i1);
+-	  if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
++	  if (GET_CODE (PATTERN (i1)) != USE
++	      && GET_CODE (PATTERN (i1)) != CLOBBER)
+ 	    ninsns++;
+ 	}
+ 
+@@ -1420,7 +1420,8 @@
+ /* Like flow_find_cross_jump, except start looking for a matching sequence from
+    the head of the two blocks.  Do not include jumps at the end.
+    If STOP_AFTER is nonzero, stop after finding that many matching
+-   instructions.  */
++   instructions.  If STOP_AFTER is zero, count all INSN_P insns, if it is
++   non-zero, only count active insns.  */
+ 
+ int
+ flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
+@@ -1492,7 +1493,10 @@
+ 
+ 	  beforelast1 = last1, beforelast2 = last2;
+ 	  last1 = i1, last2 = i2;
+-	  ninsns++;
++	  if (!stop_after
++	      || (GET_CODE (PATTERN (i1)) != USE
++		  && GET_CODE (PATTERN (i1)) != CLOBBER))
++	    ninsns++;
+ 	}
+ 
+       if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
+diff -Naur gcc-4.8.2.orig/gcc/cfgexpand.c gcc-4.8.2/gcc/cfgexpand.c
+--- gcc-4.8.2.orig/gcc/cfgexpand.c	2013-03-05 22:31:50.000000000 +0000
++++ gcc-4.8.2/gcc/cfgexpand.c	2014-03-30 20:21:40.567596893 +0000
+@@ -331,7 +331,7 @@
+    enter its partition number into bitmap DATA.  */
+ 
+ static bool
+-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++visit_op (gimple, tree op, tree, void *data)
+ {
+   bitmap active = (bitmap)data;
+   op = get_base_address (op);
+@@ -351,7 +351,7 @@
+    from bitmap DATA.  */
+ 
+ static bool
+-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++visit_conflict (gimple, tree op, tree, void *data)
+ {
+   bitmap active = (bitmap)data;
+   op = get_base_address (op);
+@@ -385,7 +385,7 @@
+   edge e;
+   edge_iterator ei;
+   gimple_stmt_iterator gsi;
+-  bool (*visit)(gimple, tree, void *);
++  walk_stmt_load_store_addr_fn visit;
+ 
+   bitmap_clear (work);
+   FOR_EACH_EDGE (e, ei, bb->preds)
+@@ -4707,14 +4707,18 @@
+ 	  if (e->insns.r)
+ 	    {
+ 	      rebuild_jump_labels_chain (e->insns.r);
+-	      /* Avoid putting insns before parm_birth_insn.  */
++	      /* Put insns after parm birth, but before
++		 NOTE_INSNS_FUNCTION_BEG.  */
+ 	      if (e->src == ENTRY_BLOCK_PTR
+-		  && single_succ_p (ENTRY_BLOCK_PTR)
+-		  && parm_birth_insn)
++		  && single_succ_p (ENTRY_BLOCK_PTR))
+ 		{
+ 		  rtx insns = e->insns.r;
+ 		  e->insns.r = NULL_RTX;
+-		  emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
++		  if (NOTE_P (parm_birth_insn)
++		      && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
++		    emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
++		  else
++		    emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
+ 		}
+ 	      else
+ 		commit_one_edge_insertion (e);
+diff -Naur gcc-4.8.2.orig/gcc/cgraph.c gcc-4.8.2/gcc/cgraph.c
+--- gcc-4.8.2.orig/gcc/cgraph.c	2013-05-22 07:50:40.000000000 +0000
++++ gcc-4.8.2/gcc/cgraph.c	2014-03-30 20:21:40.567596893 +0000
+@@ -2596,4 +2596,47 @@
+   FOR_EACH_FUNCTION (node)
+     verify_cgraph_node (node);
+ }
++
++/* Create external decl node for DECL.
++   The difference i nbetween cgraph_get_create_node and
++   cgraph_get_create_real_symbol_node is that cgraph_get_create_node
++   may return inline clone, while cgraph_get_create_real_symbol_node
++   will create a new node in this case.
++   FIXME: This function should be removed once clones are put out of decl
++   hash.  */
++
++struct cgraph_node *
++cgraph_get_create_real_symbol_node (tree decl)
++{
++  struct cgraph_node *first_clone = cgraph_get_node (decl);
++  struct cgraph_node *node;
++  /* create symbol table node.  even if inline clone exists, we can not take
++     it as a target of non-inlined call.  */
++  node = cgraph_get_node (decl);
++  if (node && !node->global.inlined_to)
++    return node;
++
++  node = cgraph_create_node (decl);
++
++  /* ok, we previously inlined the function, then removed the offline copy and
++     now we want it back for external call.  this can happen when devirtualizing
++     while inlining function called once that happens after extern inlined and
++     virtuals are already removed.  in this case introduce the external node
++     and make it available for call.  */
++  if (first_clone)
++    {
++      first_clone->clone_of = node;
++      node->clones = first_clone;
++      symtab_prevail_in_asm_name_hash ((symtab_node) node);
++      symtab_insert_node_to_hashtable ((symtab_node) node);
++      if (dump_file)
++	fprintf (dump_file, "Introduced new external node "
++		 "(%s/%i) and turned into root of the clone tree.\n",
++		 xstrdup (cgraph_node_name (node)), node->uid);
++    }
++  else if (dump_file)
++    fprintf (dump_file, "Introduced new external node "
++	     "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
++  return node;
++}
+ #include "gt-cgraph.h"
+diff -Naur gcc-4.8.2.orig/gcc/cgraph.h gcc-4.8.2/gcc/cgraph.h
+--- gcc-4.8.2.orig/gcc/cgraph.h	2013-01-17 11:43:14.000000000 +0000
++++ gcc-4.8.2/gcc/cgraph.h	2014-03-30 20:21:40.567596893 +0000
+@@ -575,6 +575,7 @@
+ struct cgraph_node * cgraph_create_node (tree);
+ struct cgraph_node * cgraph_create_empty_node (void);
+ struct cgraph_node * cgraph_get_create_node (tree);
++struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
+ struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
+ struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
+ 				       HOST_WIDE_INT, tree, tree);
+diff -Naur gcc-4.8.2.orig/gcc/cgraphbuild.c gcc-4.8.2/gcc/cgraphbuild.c
+--- gcc-4.8.2.orig/gcc/cgraphbuild.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/cgraphbuild.c	2014-03-30 20:21:40.567596893 +0000
+@@ -73,7 +73,7 @@
+       decl = get_base_var (*tp);
+       if (TREE_CODE (decl) == FUNCTION_DECL)
+ 	{
+-	  struct cgraph_node *node = cgraph_get_create_node (decl);
++	  struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
+ 	  if (!ctx->only_vars)
+ 	    cgraph_mark_address_taken_node (node);
+ 	  ipa_record_reference ((symtab_node)ctx->varpool_node,
+@@ -143,7 +143,7 @@
+     {
+       struct cgraph_node *per_node;
+ 
+-      per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
++      per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
+       ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
+       cgraph_mark_address_taken_node (per_node);
+     }
+@@ -218,12 +218,12 @@
+ /* Mark address taken in STMT.  */
+ 
+ static bool
+-mark_address (gimple stmt, tree addr, void *data)
++mark_address (gimple stmt, tree addr, tree, void *data)
+ {
+   addr = get_base_address (addr);
+   if (TREE_CODE (addr) == FUNCTION_DECL)
+     {
+-      struct cgraph_node *node = cgraph_get_create_node (addr);
++      struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
+       cgraph_mark_address_taken_node (node);
+       ipa_record_reference ((symtab_node)data,
+ 			    (symtab_node)node,
+@@ -245,14 +245,14 @@
+ /* Mark load of T.  */
+ 
+ static bool
+-mark_load (gimple stmt, tree t, void *data)
++mark_load (gimple stmt, tree t, tree, void *data)
+ {
+   t = get_base_address (t);
+   if (t && TREE_CODE (t) == FUNCTION_DECL)
+     {
+       /* ??? This can happen on platforms with descriptors when these are
+ 	 directly manipulated in the code.  Pretend that it's an address.  */
+-      struct cgraph_node *node = cgraph_get_create_node (t);
++      struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
+       cgraph_mark_address_taken_node (node);
+       ipa_record_reference ((symtab_node)data,
+ 			    (symtab_node)node,
+@@ -273,7 +273,7 @@
+ /* Mark store of T.  */
+ 
+ static bool
+-mark_store (gimple stmt, tree t, void *data)
++mark_store (gimple stmt, tree t, tree, void *data)
+ {
+   t = get_base_address (t);
+   if (t && TREE_CODE (t) == VAR_DECL
+@@ -330,7 +330,7 @@
+ 	    {
+ 	      tree fn = gimple_omp_parallel_child_fn (stmt);
+ 	      ipa_record_reference ((symtab_node)node,
+-				    (symtab_node)cgraph_get_create_node (fn),
++				    (symtab_node)cgraph_get_create_real_symbol_node (fn),
+ 				    IPA_REF_ADDR, stmt);
+ 	    }
+ 	  if (gimple_code (stmt) == GIMPLE_OMP_TASK)
+@@ -338,12 +338,12 @@
+ 	      tree fn = gimple_omp_task_child_fn (stmt);
+ 	      if (fn)
+ 		ipa_record_reference ((symtab_node)node,
+-				      (symtab_node) cgraph_get_create_node (fn),
++				      (symtab_node) cgraph_get_create_real_symbol_node (fn),
+ 				      IPA_REF_ADDR, stmt);
+ 	      fn = gimple_omp_task_copy_fn (stmt);
+ 	      if (fn)
+ 		ipa_record_reference ((symtab_node)node,
+-				      (symtab_node)cgraph_get_create_node (fn),
++				      (symtab_node)cgraph_get_create_real_symbol_node (fn),
+ 				      IPA_REF_ADDR, stmt);
+ 	    }
+ 	}
+diff -Naur gcc-4.8.2.orig/gcc/combine.c gcc-4.8.2/gcc/combine.c
+--- gcc-4.8.2.orig/gcc/combine.c	2013-05-03 13:19:51.000000000 +0000
++++ gcc-4.8.2/gcc/combine.c	2014-03-30 20:21:40.567596893 +0000
+@@ -3884,15 +3884,19 @@
+ 
+       PATTERN (undobuf.other_insn) = other_pat;
+ 
+-      /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
+-	 are still valid.  Then add any non-duplicate notes added by
+-	 recog_for_combine.  */
++      /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
++	 ensure that they are still valid.  Then add any non-duplicate
++	 notes added by recog_for_combine.  */
+       for (note = REG_NOTES (undobuf.other_insn); note; note = next)
+ 	{
+ 	  next = XEXP (note, 1);
+ 
+-	  if (REG_NOTE_KIND (note) == REG_UNUSED
+-	      && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
++	  if ((REG_NOTE_KIND (note) == REG_DEAD
++	       && !reg_referenced_p (XEXP (note, 0),
++				     PATTERN (undobuf.other_insn)))
++	      ||(REG_NOTE_KIND (note) == REG_UNUSED
++		 && !reg_set_p (XEXP (note, 0),
++				PATTERN (undobuf.other_insn))))
+ 	    remove_note (undobuf.other_insn, note);
+ 	}
+ 
+@@ -5798,8 +5802,15 @@
+ 		return x;
+ 	    }
+ 
+-	  /* If the code changed, return a whole new comparison.  */
+-	  if (new_code != code)
++	  /* If the code changed, return a whole new comparison.
++	     We also need to avoid using SUBST in cases where
++	     simplify_comparison has widened a comparison with a CONST_INT,
++	     since in that case the wider CONST_INT may fail the sanity
++	     checks in do_SUBST.  */
++	  if (new_code != code
++	      || (CONST_INT_P (op1)
++		  && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
++		  && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
+ 	    return gen_rtx_fmt_ee (new_code, mode, op0, op1);
+ 
+ 	  /* Otherwise, keep this operation, but maybe change its operands.
+@@ -7991,7 +8002,7 @@
+   if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
+     return x;
+ 
+-  /* We want to perform the operation is its present mode unless we know
++  /* We want to perform the operation in its present mode unless we know
+      that the operation is valid in MODE, in which case we do the operation
+      in MODE.  */
+   op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
+@@ -8427,9 +8438,10 @@
+ 					    GET_MODE (x), GEN_INT (mask),
+ 					    XEXP (x, 1));
+ 	  if (temp && CONST_INT_P (temp))
+-	    SUBST (XEXP (x, 0),
+-		   force_to_mode (XEXP (x, 0), GET_MODE (x),
+-				  INTVAL (temp), next_select));
++	    x = simplify_gen_binary (code, GET_MODE (x),
++				     force_to_mode (XEXP (x, 0), GET_MODE (x),
++						    INTVAL (temp), next_select),
++				     XEXP (x, 1));
+ 	}
+       break;
+ 
+@@ -8497,14 +8509,16 @@
+       /* We have no way of knowing if the IF_THEN_ELSE can itself be
+ 	 written in a narrower mode.  We play it safe and do not do so.  */
+ 
+-      SUBST (XEXP (x, 1),
+-	     gen_lowpart_or_truncate (GET_MODE (x),
+-				      force_to_mode (XEXP (x, 1), mode,
+-						     mask, next_select)));
+-      SUBST (XEXP (x, 2),
+-	     gen_lowpart_or_truncate (GET_MODE (x),
+-				      force_to_mode (XEXP (x, 2), mode,
+-						     mask, next_select)));
++      op0 = gen_lowpart_or_truncate (GET_MODE (x),
++				     force_to_mode (XEXP (x, 1), mode,
++						    mask, next_select));
++      op1 = gen_lowpart_or_truncate (GET_MODE (x),
++				     force_to_mode (XEXP (x, 2), mode,
++						    mask, next_select));
++      if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
++	x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
++				  GET_MODE (XEXP (x, 0)), XEXP (x, 0),
++				  op0, op1);
+       break;
+ 
+     default:
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/aarch64-simd-builtins.def gcc-4.8.2/gcc/config/aarch64/aarch64-simd-builtins.def
+--- gcc-4.8.2.orig/gcc/config/aarch64/aarch64-simd-builtins.def	2013-07-17 09:06:21.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/aarch64-simd-builtins.def	2014-03-30 20:21:40.574262822 +0000
+@@ -217,8 +217,8 @@
+   BUILTIN_VSDQ_I_DI (BINOP, cmle)
+   BUILTIN_VSDQ_I_DI (BINOP, cmlt)
+   /* Implemented by aarch64_cm<cmp><mode>.  */
+-  BUILTIN_VSDQ_I_DI (BINOP, cmhs)
+-  BUILTIN_VSDQ_I_DI (BINOP, cmhi)
++  BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
++  BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
+   BUILTIN_VSDQ_I_DI (BINOP, cmtst)
+ 
+   /* Implemented by aarch64_<fmaxmin><mode>.  */
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/aarch64-simd.md gcc-4.8.2/gcc/config/aarch64/aarch64-simd.md
+--- gcc-4.8.2.orig/gcc/config/aarch64/aarch64-simd.md	2013-07-17 09:06:21.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/aarch64-simd.md	2014-03-30 20:21:40.574262822 +0000
+@@ -21,7 +21,7 @@
+ 
+ ; Main data types used by the insntructions
+ 
+-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
++(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,SF,HI,QI"
+   (const_string "unknown"))
+ 
+ 
+@@ -1548,12 +1548,12 @@
+ 
+     case LTU:
+     case GEU:
+-      emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
++      emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
+       break;
+ 
+     case LEU:
+     case GTU:
+-      emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
++      emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
+       break;
+ 
+     case NE:
+@@ -3034,48 +3034,181 @@
+ )
+ 
+ 
+-;; cm(eq|ge|le|lt|gt)
++;; cm(eq|ge|gt|lt|le)
++;; Note, we have constraints for Dz and Z as different expanders
++;; have different ideas of what should be passed to this pattern.
+ 
+-(define_insn "aarch64_cm<cmp><mode>"
++(define_insn "aarch64_cm<optab><mode>"
+   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
+-        (unspec:<V_cmp_result>
+-	  [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
+-	   (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
+-          VCMP_S))]
++	(neg:<V_cmp_result>
++	  (COMPARISONS:<V_cmp_result>
++	    (match_operand:VDQ 1 "register_operand" "w,w")
++	    (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
++	  )))]
+   "TARGET_SIMD"
+   "@
+-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
+-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
++  cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
++  cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
+   [(set_attr "simd_type" "simd_cmp")
+    (set_attr "simd_mode" "<MODE>")]
+ )
+ 
+-;; cm(hs|hi|tst)
++(define_insn_and_split "aarch64_cm<optab>di"
++  [(set (match_operand:DI 0 "register_operand" "=w,w,r")
++	(neg:DI
++	  (COMPARISONS:DI
++	    (match_operand:DI 1 "register_operand" "w,w,r")
++	    (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
++	  )))]
++  "TARGET_SIMD"
++  "@
++  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
++  cm<optab>\t%d0, %d1, #0
++  #"
++  "reload_completed
++   /* We need to prevent the split from
++      happening in the 'w' constraint cases.  */
++   && GP_REGNUM_P (REGNO (operands[0]))
++   && GP_REGNUM_P (REGNO (operands[1]))"
++  [(set (reg:CC CC_REGNUM)
++    (compare:CC
++      (match_dup 1)
++      (match_dup 2)))
++  (set (match_dup 0)
++    (neg:DI
++      (COMPARISONS:DI
++	(match_operand 3 "cc_register" "")
++	(const_int 0))))]
++  {
++    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
++    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
++    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
++    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
++    DONE;
++  }
++  [(set_attr "simd_type" "simd_cmp")
++   (set_attr "simd_mode" "DI")]
++)
++
++;; cm(hs|hi)
+ 
+-(define_insn "aarch64_cm<cmp><mode>"
++(define_insn "aarch64_cm<optab><mode>"
+   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
+-        (unspec:<V_cmp_result>
+-	  [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
+-	   (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
+-          VCMP_U))]
++	(neg:<V_cmp_result>
++	  (UCOMPARISONS:<V_cmp_result>
++	    (match_operand:VDQ 1 "register_operand" "w")
++	    (match_operand:VDQ 2 "register_operand" "w")
++	  )))]
+   "TARGET_SIMD"
+-  "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++  "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
+   [(set_attr "simd_type" "simd_cmp")
+    (set_attr "simd_mode" "<MODE>")]
+ )
+ 
+-;; fcm(eq|ge|le|lt|gt)
++(define_insn_and_split "aarch64_cm<optab>di"
++  [(set (match_operand:DI 0 "register_operand" "=w,r")
++	(neg:DI
++	  (UCOMPARISONS:DI
++	    (match_operand:DI 1 "register_operand" "w,r")
++	    (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
++	  )))]
++  "TARGET_SIMD"
++  "@
++  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
++  #"
++  "reload_completed
++   /* We need to prevent the split from
++      happening in the 'w' constraint cases.  */
++   && GP_REGNUM_P (REGNO (operands[0]))
++   && GP_REGNUM_P (REGNO (operands[1]))"
++  [(set (reg:CC CC_REGNUM)
++    (compare:CC
++      (match_dup 1)
++      (match_dup 2)))
++  (set (match_dup 0)
++    (neg:DI
++      (UCOMPARISONS:DI
++	(match_operand 3 "cc_register" "")
++	(const_int 0))))]
++  {
++    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
++    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
++    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
++    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
++    DONE;
++  }
++  [(set_attr "simd_type" "simd_cmp")
++   (set_attr "simd_mode" "DI")]
++)
++
++;; cmtst
++
++(define_insn "aarch64_cmtst<mode>"
++  [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
++	(neg:<V_cmp_result>
++	  (ne:<V_cmp_result>
++	    (and:VDQ
++	      (match_operand:VDQ 1 "register_operand" "w")
++	      (match_operand:VDQ 2 "register_operand" "w"))
++	    (vec_duplicate:<V_cmp_result> (const_int 0)))))]
++  "TARGET_SIMD"
++  "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++  [(set_attr "simd_type" "simd_cmp")
++   (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn_and_split "aarch64_cmtstdi"
++  [(set (match_operand:DI 0 "register_operand" "=w,r")
++	(neg:DI
++	  (ne:DI
++	    (and:DI
++	      (match_operand:DI 1 "register_operand" "w,r")
++	      (match_operand:DI 2 "register_operand" "w,r"))
++	    (const_int 0))))]
++  "TARGET_SIMD"
++  "@
++  cmtst\t%d0, %d1, %d2
++  #"
++  "reload_completed
++   /* We need to prevent the split from
++      happening in the 'w' constraint cases.  */
++   && GP_REGNUM_P (REGNO (operands[0]))
++   && GP_REGNUM_P (REGNO (operands[1]))"
++   [(set (reg:CC_NZ CC_REGNUM)
++	(compare:CC_NZ
++	 (and:DI (match_dup 1)
++		  (match_dup 2))
++	 (const_int 0)))
++  (set (match_dup 0)
++    (neg:DI
++      (ne:DI
++	(match_operand 3 "cc_register" "")
++	(const_int 0))))]
++  {
++    rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
++    enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
++    rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
++    rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
++    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
++    DONE;
++  }
++  [(set_attr "simd_type" "simd_cmp")
++   (set_attr "simd_mode" "DI")]
++)
++
++;; fcm(eq|ge|gt|le|lt)
+ 
+-(define_insn "aarch64_cm<cmp><mode>"
++(define_insn "aarch64_cm<optab><mode>"
+   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
+-	(unspec:<V_cmp_result>
+-	  [(match_operand:VDQF 1 "register_operand" "w,w")
+-	   (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
+-	   VCMP_S))]
++	(neg:<V_cmp_result>
++	  (COMPARISONS:<V_cmp_result>
++	    (match_operand:VALLF 1 "register_operand" "w,w")
++	    (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
++	  )))]
+   "TARGET_SIMD"
+   "@
+-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
+-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
++  fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
++  fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
+   [(set_attr "simd_type" "simd_fcmp")
+    (set_attr "simd_mode" "<MODE>")]
+ )
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/aarch64.c gcc-4.8.2/gcc/config/aarch64/aarch64.c
+--- gcc-4.8.2.orig/gcc/config/aarch64/aarch64.c	2013-06-03 15:33:09.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/aarch64.c	2014-03-30 20:21:40.570929878 +0000
+@@ -2274,7 +2274,7 @@
+       if (ncount < zcount)
+ 	{
+ 	  emit_move_insn (gen_rtx_REG (Pmode, regnum),
+-			  GEN_INT ((~val) & 0xffff));
++			  GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
+ 	  tval = 0xffff;
+ 	}
+       else
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/aarch64.md gcc-4.8.2/gcc/config/aarch64/aarch64.md
+--- gcc-4.8.2.orig/gcc/config/aarch64/aarch64.md	2013-10-04 14:57:04.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/aarch64.md	2014-03-30 20:21:40.570929878 +0000
+@@ -2211,7 +2211,7 @@
+    (set_attr "mode" "SI")]
+ )
+ 
+-(define_insn "*cstore<mode>_neg"
++(define_insn "cstore<mode>_neg"
+   [(set (match_operand:ALLI 0 "register_operand" "=r")
+ 	(neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator"
+ 		  [(match_operand 2 "cc_register" "") (const_int 0)])))]
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/arm_neon.h gcc-4.8.2/gcc/config/aarch64/arm_neon.h
+--- gcc-4.8.2.orig/gcc/config/aarch64/arm_neon.h	2013-10-12 08:23:31.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/arm_neon.h	2014-03-30 20:21:40.577595807 +0000
+@@ -19551,28 +19551,28 @@
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+ vcge_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
++  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
+ 						 (int8x8_t) __b);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+ vcge_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
++  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
+ 						  (int16x4_t) __b);
+ }
+ 
+ __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+ vcge_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
++  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
+ 						  (int32x2_t) __b);
+ }
+ 
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vcge_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
++  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
+ 						(int64x1_t) __b);
+ }
+ 
+@@ -19603,28 +19603,28 @@
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+ vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
++  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
+ 						   (int8x16_t) __b);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+ vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
++  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
+ 						  (int16x8_t) __b);
+ }
+ 
+ __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+ vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
++  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
+ 						  (int32x4_t) __b);
+ }
+ 
+ __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+ vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
++  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
+ 						  (int64x2_t) __b);
+ }
+ 
+@@ -19637,7 +19637,7 @@
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vcged_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
++  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
+ 						(int64x1_t) __b);
+ }
+ 
+@@ -19676,28 +19676,28 @@
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+ vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
++  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
+ 						 (int8x8_t) __b);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+ vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
++  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
+ 						  (int16x4_t) __b);
+ }
+ 
+ __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+ vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
++  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
+ 						  (int32x2_t) __b);
+ }
+ 
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
++  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
+ 						(int64x1_t) __b);
+ }
+ 
+@@ -19728,28 +19728,28 @@
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+ vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
++  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
+ 						   (int8x16_t) __b);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+ vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
++  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
+ 						  (int16x8_t) __b);
+ }
+ 
+ __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+ vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
++  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
+ 						  (int32x4_t) __b);
+ }
+ 
+ __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+ vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
++  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
+ 						  (int64x2_t) __b);
+ }
+ 
+@@ -19762,7 +19762,7 @@
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
++  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
+ 						(int64x1_t) __b);
+ }
+ 
+@@ -19801,28 +19801,28 @@
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+ vcle_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
++  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
+ 						 (int8x8_t) __a);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+ vcle_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
++  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
+ 						  (int16x4_t) __a);
+ }
+ 
+ __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+ vcle_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
++  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
+ 						  (int32x2_t) __a);
+ }
+ 
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vcle_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
++  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
+ 						(int64x1_t) __a);
+ }
+ 
+@@ -19853,28 +19853,28 @@
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+ vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
++  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
+ 						   (int8x16_t) __a);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+ vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
++  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
+ 						  (int16x8_t) __a);
+ }
+ 
+ __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+ vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
++  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
+ 						  (int32x4_t) __a);
+ }
+ 
+ __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+ vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
++  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
+ 						  (int64x2_t) __a);
+ }
+ 
+@@ -19919,28 +19919,28 @@
+ __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
+ vclt_u8 (uint8x8_t __a, uint8x8_t __b)
+ {
+-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
++  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
+ 						 (int8x8_t) __a);
+ }
+ 
+ __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
+ vclt_u16 (uint16x4_t __a, uint16x4_t __b)
+ {
+-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
++  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
+ 						  (int16x4_t) __a);
+ }
+ 
+ __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
+ vclt_u32 (uint32x2_t __a, uint32x2_t __b)
+ {
+-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
++  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
+ 						  (int32x2_t) __a);
+ }
+ 
+ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
+ vclt_u64 (uint64x1_t __a, uint64x1_t __b)
+ {
+-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
++  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
+ 						(int64x1_t) __a);
+ }
+ 
+@@ -19971,28 +19971,28 @@
+ __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
+ vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
+ {
+-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
++  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
+ 						   (int8x16_t) __a);
+ }
+ 
+ __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
+ vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
+ {
+-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
++  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
+ 						  (int16x8_t) __a);
+ }
+ 
+ __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
+ vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
+ {
+-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
++  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
+ 						  (int32x4_t) __a);
+ }
+ 
+ __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
+ vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
+ {
+-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
++  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
+ 						  (int64x2_t) __a);
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/iterators.md gcc-4.8.2/gcc/config/aarch64/iterators.md
+--- gcc-4.8.2.orig/gcc/config/aarch64/iterators.md	2013-01-25 11:35:03.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/iterators.md	2014-03-30 20:21:40.577595807 +0000
+@@ -83,6 +83,9 @@
+ ;; Vector Float modes.
+ (define_mode_iterator VDQF [V2SF V4SF V2DF])
+ 
++;; All Float modes.
++(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
++
+ ;; Vector Float modes with 2 elements.
+ (define_mode_iterator V2F [V2SF V2DF])
+ 
+@@ -213,13 +216,6 @@
+     UNSPEC_URSHL	; Used in aarch64-simd.md.
+     UNSPEC_SQRSHL	; Used in aarch64-simd.md.
+     UNSPEC_UQRSHL	; Used in aarch64-simd.md.
+-    UNSPEC_CMEQ		; Used in aarch64-simd.md.
+-    UNSPEC_CMLE		; Used in aarch64-simd.md.
+-    UNSPEC_CMLT		; Used in aarch64-simd.md.
+-    UNSPEC_CMGE		; Used in aarch64-simd.md.
+-    UNSPEC_CMGT		; Used in aarch64-simd.md.
+-    UNSPEC_CMHS		; Used in aarch64-simd.md.
+-    UNSPEC_CMHI		; Used in aarch64-simd.md.
+     UNSPEC_SSLI		; Used in aarch64-simd.md.
+     UNSPEC_USLI		; Used in aarch64-simd.md.
+     UNSPEC_SSRI		; Used in aarch64-simd.md.
+@@ -227,7 +223,6 @@
+     UNSPEC_SSHLL	; Used in aarch64-simd.md.
+     UNSPEC_USHLL	; Used in aarch64-simd.md.
+     UNSPEC_ADDP		; Used in aarch64-simd.md.
+-    UNSPEC_CMTST	; Used in aarch64-simd.md.
+     UNSPEC_FMAX		; Used in aarch64-simd.md.
+     UNSPEC_FMIN		; Used in aarch64-simd.md.
+     UNSPEC_BSL		; Used in aarch64-simd.md.
+@@ -251,6 +246,7 @@
+ 
+ ;; For scalar usage of vector/FP registers
+ (define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
++		    (SF "s") (DF "d")
+ 		    (V8QI "") (V16QI "")
+ 		    (V4HI "") (V8HI "")
+ 		    (V2SI "") (V4SI  "")
+@@ -305,7 +301,8 @@
+ 			 (V4SF ".4s") (V2DF ".2d")
+ 			 (DI   "")    (SI   "")
+ 			 (HI   "")    (QI   "")
+-			 (TI   "")])
++			 (TI   "")    (SF   "")
++			 (DF   "")])
+ 
+ ;; Register suffix narrowed modes for VQN.
+ (define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
+@@ -444,7 +441,8 @@
+ 				(V2SI "V2SI") (V4SI  "V4SI")
+ 				(DI   "DI")   (V2DI  "V2DI")
+ 				(V2SF "V2SI") (V4SF  "V4SI")
+-				(V2DF "V2DI")])
++				(V2DF "V2DI") (DF    "DI")
++				(SF   "SI")])
+ 
+ ;; Lower case mode of results of comparison operations.
+ (define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
+@@ -452,7 +450,8 @@
+ 				(V2SI "v2si") (V4SI  "v4si")
+ 				(DI   "di")   (V2DI  "v2di")
+ 				(V2SF "v2si") (V4SF  "v4si")
+-				(V2DF "v2di")])
++				(V2DF "v2di") (DF    "di")
++				(SF   "si")])
+ 
+ ;; Vm for lane instructions is restricted to FP_LO_REGS.
+ (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
+@@ -543,6 +542,12 @@
+ ;; Code iterator for signed variants of vector saturating binary ops.
+ (define_code_iterator SBINQOPS [ss_plus ss_minus])
+ 
++;; Comparison operators for <F>CM.
++(define_code_iterator COMPARISONS [lt le eq ge gt])
++
++;; Unsigned comparison operators.
++(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
++
+ ;; -------------------------------------------------------------------
+ ;; Code Attributes
+ ;; -------------------------------------------------------------------
+@@ -571,7 +576,28 @@
+ 			 (eq "eq")
+ 			 (ne "ne")
+ 			 (lt "lt")
+-			 (ge "ge")])
++			 (ge "ge")
++			 (le "le")
++			 (gt "gt")
++			 (ltu "ltu")
++			 (leu "leu")
++			 (geu "geu")
++			 (gtu "gtu")])
++
++;; For comparison operators we use the FCM* and CM* instructions.
++;; As there are no CMLE or CMLT instructions which act on 3 vector
++;; operands, we must use CMGE or CMGT and swap the order of the
++;; source operands.
++
++(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
++			   (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
++(define_code_attr cmp_1   [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
++			   (ltu "2") (leu "2") (geu "1") (gtu "1")])
++(define_code_attr cmp_2   [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
++			   (ltu "1") (leu "1") (geu "2") (gtu "2")])
++
++(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
++			   (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
+ 
+ ;; Optab prefix for sign/zero-extending operations
+ (define_code_attr su_optab [(sign_extend "") (zero_extend "u")
+@@ -680,11 +706,6 @@
+                                UNSPEC_SQSHRN UNSPEC_UQSHRN
+                                UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
+ 
+-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
+-			     UNSPEC_CMLE UNSPEC_CMLT])
+-
+-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
+-
+ (define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
+ 			      UNSPEC_TRN1 UNSPEC_TRN2
+ 			      UNSPEC_UZP1 UNSPEC_UZP2])
+@@ -768,12 +789,6 @@
+ 			 (UNSPEC_RADDHN2 "add")
+ 			 (UNSPEC_RSUBHN2 "sub")])
+ 
+-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
+-		      (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
+-                      (UNSPEC_CMEQ "eq")
+-		      (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
+-		      (UNSPEC_CMTST "tst")])
+-
+ (define_int_attr offsetlr [(UNSPEC_SSLI	"1") (UNSPEC_USLI "1")
+ 			   (UNSPEC_SSRI	"0") (UNSPEC_USRI "0")])
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/aarch64/predicates.md gcc-4.8.2/gcc/config/aarch64/predicates.md
+--- gcc-4.8.2.orig/gcc/config/aarch64/predicates.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/aarch64/predicates.md	2014-03-30 20:21:40.577595807 +0000
+@@ -31,6 +31,11 @@
+        (ior (match_operand 0 "register_operand")
+ 	    (match_test "op == const0_rtx"))))
+ 
++(define_predicate "aarch64_reg_or_fp_zero"
++  (and (match_code "reg,subreg,const_double")
++       (ior (match_operand 0 "register_operand")
++	    (match_test "aarch64_float_const_zero_rtx_p (op)"))))
++
+ (define_predicate "aarch64_reg_zero_or_m1_or_1"
+   (and (match_code "reg,subreg,const_int")
+        (ior (match_operand 0 "register_operand")
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/arm-ldmstm.ml gcc-4.8.2/gcc/config/arm/arm-ldmstm.ml
+--- gcc-4.8.2.orig/gcc/config/arm/arm-ldmstm.ml	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/arm-ldmstm.ml	2014-03-30 20:21:40.580928836 +0000
+@@ -67,10 +67,13 @@
+     Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
+       (nregs + 1) (inout_constr op_type) (constr thumb)
+ 
++let reg_predicate thumb =
++  if thumb then "low_register_operand" else "arm_hard_general_register_operand"
++
+ let write_ldm_set thumb nregs offset opnr first =
+   let indent = "     " in
+   Printf.printf "%s" (if first then "    [" else indent);
+-  Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
++  Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
+   Printf.printf "%s     (mem:SI " indent;
+   begin if offset != 0 then Printf.printf "(plus:SI " end;
+   Printf.printf "%s" (destreg nregs first IN thumb);
+@@ -84,7 +87,7 @@
+   begin if offset != 0 then Printf.printf "(plus:SI " end;
+   Printf.printf "%s" (destreg nregs first IN thumb);
+   begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
+-  Printf.printf ")\n%s     (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr 
++  Printf.printf ")\n%s     (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
+ 
+ let write_ldm_peep_set extra_indent nregs opnr first =
+   let indent = "   " ^ extra_indent in
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/arm.c gcc-4.8.2/gcc/config/arm/arm.c
+--- gcc-4.8.2.orig/gcc/config/arm/arm.c	2013-09-18 16:37:35.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/arm.c	2014-03-30 20:21:40.580928836 +0000
+@@ -5425,7 +5425,8 @@
+   if (!crtl->uses_pic_offset_table)
+     {
+       gcc_assert (can_create_pseudo_p ());
+-      if (arm_pic_register != INVALID_REGNUM)
++      if (arm_pic_register != INVALID_REGNUM
++	  && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
+ 	{
+ 	  if (!cfun->machine->pic_reg)
+ 	    cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
+@@ -5451,7 +5452,12 @@
+ 	      crtl->uses_pic_offset_table = 1;
+ 	      start_sequence ();
+ 
+-	      arm_load_pic_register (0UL);
++	      if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
++		  && arm_pic_register > LAST_LO_REGNUM)
++		emit_move_insn (cfun->machine->pic_reg,
++				gen_rtx_REG (Pmode, arm_pic_register));
++	      else
++		arm_load_pic_register (0UL);
+ 
+ 	      seq = get_insns ();
+ 	      end_sequence ();
+@@ -5709,6 +5715,14 @@
+ 	      emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
+ 	      emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
+ 	    }
++	  else if (arm_pic_register != INVALID_REGNUM
++		   && arm_pic_register > LAST_LO_REGNUM
++		   && REGNO (pic_reg) <= LAST_LO_REGNUM)
++	    {
++	      emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
++	      emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
++	      emit_use (gen_rtx_REG (Pmode, arm_pic_register));
++	    }
+ 	  else
+ 	    emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
+ 	}
+@@ -21279,7 +21293,11 @@
+ 						    type_mode);
+             }
+ 
+-          op[argc] = expand_normal (arg[argc]);
++	  /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
++	     be returned.  */
++	  op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
++				  (thisarg == NEON_ARG_MEMORY
++				   ? EXPAND_MEMORY : EXPAND_NORMAL));
+ 
+           switch (thisarg)
+             {
+@@ -21298,6 +21316,9 @@
+               break;
+ 
+             case NEON_ARG_MEMORY:
++	      /* Check if expand failed.  */
++	      if (op[argc] == const0_rtx)
++		return 0;
+ 	      gcc_assert (MEM_P (op[argc]));
+ 	      PUT_MODE (op[argc], mode[argc]);
+ 	      /* ??? arm_neon.h uses the same built-in functions for signed
+@@ -23555,6 +23576,7 @@
+   num_regs = bit_count (saved_regs_mask);
+   if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca)
+     {
++      emit_insn (gen_blockage ());
+       /* Unwind the stack to just below the saved registers.  */
+       emit_insn (gen_addsi3 (stack_pointer_rtx,
+                              hard_frame_pointer_rtx,
+@@ -23583,8 +23605,8 @@
+ 
+   if (crtl->calls_eh_return)
+     emit_insn (gen_addsi3 (stack_pointer_rtx,
+-               stack_pointer_rtx,
+-               GEN_INT (ARM_EH_STACKADJ_REGNUM)));
++			   stack_pointer_rtx,
++			   gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
+ 
+   if (IS_STACKALIGN (func_type))
+     /* Restore the original stack pointer.  Before prologue, the stack was
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/arm.h gcc-4.8.2/gcc/config/arm/arm.h
+--- gcc-4.8.2.orig/gcc/config/arm/arm.h	2013-03-17 16:28:55.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/arm.h	2014-03-30 20:21:40.580928836 +0000
+@@ -1213,11 +1213,15 @@
+    VFPv2.
+    In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
+    VFP registers in little-endian order.  We can't describe that accurately to
+-   GCC, so avoid taking subregs of such values.  */
+-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)	\
+-  (TARGET_VFP && TARGET_BIG_END				\
+-   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD		\
+-       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)		\
++   GCC, so avoid taking subregs of such values.
++   The only exception is going from a 128-bit to a 64-bit type.  In that case
++   the data layout happens to be consistent for big-endian, so we explicitly allow
++   that case.  */
++#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)		\
++  (TARGET_VFP && TARGET_BIG_END					\
++   && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8)	\
++   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD			\
++       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)			\
+    && reg_classes_intersect_p (VFP_REGS, (CLASS)))
+ 
+ /* The class value for index registers, and the one for base regs.  */
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/arm.md gcc-4.8.2/gcc/config/arm/arm.md
+--- gcc-4.8.2.orig/gcc/config/arm/arm.md	2013-02-22 14:23:12.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/arm.md	2014-03-30 20:21:40.584261912 +0000
+@@ -11036,7 +11036,7 @@
+     [(set (match_operand:SI 1 "s_register_operand" "+rk")
+           (plus:SI (match_dup 1)
+                    (match_operand:SI 2 "const_int_operand" "I")))
+-     (set (match_operand:DF 3 "arm_hard_register_operand" "")
++     (set (match_operand:DF 3 "vfp_hard_register_operand" "")
+           (mem:DF (match_dup 1)))])]
+   "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
+   "*
+@@ -11270,7 +11270,9 @@
+ 	     (match_operand:SI 1 "" "")
+ 	     (match_operand:SI 2 "" ""))]
+   "TARGET_32BIT && arm_arch5e"
+-  "pld\\t%a0")
++  "pld\\t%a0"
++  [(set_attr "type" "load1")]
++)
+ 
+ ;; General predication pattern
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/iterators.md gcc-4.8.2/gcc/config/arm/iterators.md
+--- gcc-4.8.2.orig/gcc/config/arm/iterators.md	2013-04-04 14:34:01.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/iterators.md	2014-03-30 20:21:40.584261912 +0000
+@@ -493,6 +493,10 @@
+                                   (UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
+                                   (UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
+ 
++(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
++                              (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
++                              (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
++
+ (define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
+                                 (UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
+                                 (UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/ldmstm.md gcc-4.8.2/gcc/config/arm/ldmstm.md
+--- gcc-4.8.2.orig/gcc/config/arm/ldmstm.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/ldmstm.md	2014-03-30 20:21:40.584261912 +0000
+@@ -23,15 +23,15 @@
+ 
+ (define_insn "*ldm4_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -41,15 +41,15 @@
+ 
+ (define_insn "*thumb_ldm4_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_operand:SI 5 "s_register_operand" "l")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -60,15 +60,15 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int 16)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 5)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -80,15 +80,15 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 5 "s_register_operand" "+&l")
+           (plus:SI (match_dup 5) (const_int 16)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_dup 5)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+@@ -98,13 +98,13 @@
+ (define_insn "*stm4_ia"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+   "stm%(ia%)\t%5, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -115,13 +115,13 @@
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int 16)))
+      (set (mem:SI (match_dup 5))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -132,29 +132,29 @@
+     [(set (match_operand:SI 5 "s_register_operand" "+&l")
+           (plus:SI (match_dup 5) (const_int 16)))
+      (set (mem:SI (match_dup 5))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "low_register_operand" ""))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")])
+ 
+ (define_insn "*ldm4_ib"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 16))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -166,16 +166,16 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int 16)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 12))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int 16))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+@@ -186,13 +186,13 @@
+ (define_insn "*stm4_ib"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "stm%(ib%)\t%5, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -203,13 +203,13 @@
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int 16)))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+   "stm%(ib%)\t%5!, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -217,16 +217,16 @@
+ 
+ (define_insn "*ldm4_da"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+                   (const_int -12))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -4))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 5)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "ldm%(da%)\t%5, {%1, %2, %3, %4}"
+@@ -237,16 +237,16 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int -16)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -12))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -4))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 5)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+   "ldm%(da%)\t%5!, {%1, %2, %3, %4}"
+@@ -256,13 +256,13 @@
+ (define_insn "*stm4_da"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 5))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "stm%(da%)\t%5, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -273,13 +273,13 @@
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int -16)))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 5))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+   "stm%(da%)\t%5!, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -287,16 +287,16 @@
+ 
+ (define_insn "*ldm4_db"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+                   (const_int -16))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -12))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -308,16 +308,16 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int -16)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -16))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -12))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -8))))
+-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
++     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 5)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -328,13 +328,13 @@
+ (define_insn "*stm4_db"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+   "stm%(db%)\t%5, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -345,13 +345,13 @@
+     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 5) (const_int -16)))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+   "stm%(db%)\t%5!, {%1, %2, %3, %4}"
+   [(set_attr "type" "store4")
+@@ -466,12 +466,12 @@
+ 
+ (define_insn "*ldm3_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -481,12 +481,12 @@
+ 
+ (define_insn "*thumb_ldm3_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_operand:SI 4 "s_register_operand" "l")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -497,12 +497,12 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int 12)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 4)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -514,12 +514,12 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 4 "s_register_operand" "+&l")
+           (plus:SI (match_dup 4) (const_int 12)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_dup 4)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -529,11 +529,11 @@
+ (define_insn "*stm3_ia"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+   "stm%(ia%)\t%4, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -544,11 +544,11 @@
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int 12)))
+      (set (mem:SI (match_dup 4))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+   "stm%(ia%)\t%4!, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -559,24 +559,24 @@
+     [(set (match_operand:SI 4 "s_register_operand" "+&l")
+           (plus:SI (match_dup 4) (const_int 12)))
+      (set (mem:SI (match_dup 4))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "low_register_operand" ""))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+   "stm%(ia%)\t%4!, {%1, %2, %3}"
+   [(set_attr "type" "store3")])
+ 
+ (define_insn "*ldm3_ib"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 12))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -588,13 +588,13 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int 12)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int 12))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -605,11 +605,11 @@
+ (define_insn "*stm3_ib"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "stm%(ib%)\t%4, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -620,11 +620,11 @@
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int 12)))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "stm%(ib%)\t%4!, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -632,13 +632,13 @@
+ 
+ (define_insn "*ldm3_da"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+                   (const_int -8))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 4)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "ldm%(da%)\t%4, {%1, %2, %3}"
+@@ -649,13 +649,13 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int -12)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -8))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -4))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 4)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "ldm%(da%)\t%4!, {%1, %2, %3}"
+@@ -665,11 +665,11 @@
+ (define_insn "*stm3_da"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 4))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "stm%(da%)\t%4, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -680,11 +680,11 @@
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int -12)))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 4))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+   "stm%(da%)\t%4!, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -692,13 +692,13 @@
+ 
+ (define_insn "*ldm3_db"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+                   (const_int -12))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -710,13 +710,13 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int -12)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -12))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -8))))
+-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
++     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 4)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -727,11 +727,11 @@
+ (define_insn "*stm3_db"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+   "stm%(db%)\t%4, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -742,11 +742,11 @@
+     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 4) (const_int -12)))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+   "stm%(db%)\t%4!, {%1, %2, %3}"
+   [(set_attr "type" "store3")
+@@ -847,9 +847,9 @@
+ 
+ (define_insn "*ldm2_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -859,9 +859,9 @@
+ 
+ (define_insn "*thumb_ldm2_ia"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_operand:SI 3 "s_register_operand" "l")))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 4))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
+@@ -872,9 +872,9 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int 8)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 3)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -886,9 +886,9 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 3 "s_register_operand" "+&l")
+           (plus:SI (match_dup 3) (const_int 8)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "low_register_operand" "")
+           (mem:SI (match_dup 3)))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "low_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 4))))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -898,9 +898,9 @@
+ (define_insn "*stm2_ia"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+   "stm%(ia%)\t%3, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -911,9 +911,9 @@
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int 8)))
+      (set (mem:SI (match_dup 3))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+   "stm%(ia%)\t%3!, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -924,19 +924,19 @@
+     [(set (match_operand:SI 3 "s_register_operand" "+&l")
+           (plus:SI (match_dup 3) (const_int 8)))
+      (set (mem:SI (match_dup 3))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "low_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "low_register_operand" ""))])]
+   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+   "stm%(ia%)\t%3!, {%1, %2}"
+   [(set_attr "type" "store2")])
+ 
+ (define_insn "*ldm2_ib"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 8))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+@@ -948,10 +948,10 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int 8)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int 8))))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -962,9 +962,9 @@
+ (define_insn "*stm2_ib"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+   "stm%(ib%)\t%3, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -975,9 +975,9 @@
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int 8)))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "stm%(ib%)\t%3!, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -985,10 +985,10 @@
+ 
+ (define_insn "*ldm2_da"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+                   (const_int -4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 3)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+   "ldm%(da%)\t%3, {%1, %2}"
+@@ -999,10 +999,10 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int -8)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int -4))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (match_dup 3)))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "ldm%(da%)\t%3!, {%1, %2}"
+@@ -1012,9 +1012,9 @@
+ (define_insn "*stm2_da"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 3))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+   "stm%(da%)\t%3, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -1025,9 +1025,9 @@
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int -8)))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (match_dup 3))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+   "stm%(da%)\t%3!, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -1035,10 +1035,10 @@
+ 
+ (define_insn "*ldm2_db"
+   [(match_parallel 0 "load_multiple_operation"
+-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+                   (const_int -8))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -1050,10 +1050,10 @@
+   [(match_parallel 0 "load_multiple_operation"
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int -8)))
+-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
++     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int -8))))
+-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
++     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+           (mem:SI (plus:SI (match_dup 3)
+                   (const_int -4))))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -1064,9 +1064,9 @@
+ (define_insn "*stm2_db"
+   [(match_parallel 0 "store_multiple_operation"
+     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+   "stm%(db%)\t%3, {%1, %2}"
+   [(set_attr "type" "store2")
+@@ -1077,9 +1077,9 @@
+     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+           (plus:SI (match_dup 3) (const_int -8)))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
+-          (match_operand:SI 1 "arm_hard_register_operand" ""))
++          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+   "stm%(db%)\t%3!, {%1, %2}"
+   [(set_attr "type" "store2")
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/predicates.md gcc-4.8.2/gcc/config/arm/predicates.md
+--- gcc-4.8.2.orig/gcc/config/arm/predicates.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/predicates.md	2014-03-30 20:21:40.584261912 +0000
+@@ -31,11 +31,11 @@
+ 	      || REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
+ })
+ 
+-;; Any hard register.
+-(define_predicate "arm_hard_register_operand"
++;; Any general register.
++(define_predicate "arm_hard_general_register_operand"
+   (match_code "reg")
+ {
+-  return REGNO (op) < FIRST_PSEUDO_REGISTER;
++  return REGNO (op) <= LAST_ARM_REGNUM;
+ })
+ 
+ ;; A low register.
+@@ -76,6 +76,12 @@
+ 		  && REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
+ })
+ 
++(define_predicate "vfp_hard_register_operand"
++  (match_code "reg")
++{
++  return (IS_VFP_REGNUM (REGNO (op)));
++})
++
+ (define_predicate "zero_operand"
+   (and (match_code "const_int,const_double,const_vector")
+        (match_test "op == CONST0_RTX (mode)")))
+diff -Naur gcc-4.8.2.orig/gcc/config/arm/vfp.md gcc-4.8.2/gcc/config/arm/vfp.md
+--- gcc-4.8.2.orig/gcc/config/arm/vfp.md	2013-09-10 16:53:15.000000000 +0000
++++ gcc-4.8.2/gcc/config/arm/vfp.md	2014-03-30 20:21:40.584261912 +0000
+@@ -1264,6 +1264,7 @@
+   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
+   "vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
+   [(set_attr "predicable" "<vrint_predicable>")
++   (set_attr "conds" "<vrint_conds>")
+    (set_attr "type" "f_rint<vfp_type>")]
+ )
+ 
+@@ -1280,7 +1281,8 @@
+ 		  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
+   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
+   "vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+-  [(set_attr "type" "f_minmax<vfp_type>")]
++  [(set_attr "type" "f_minmax<vfp_type>")
++   (set_attr "conds" "unconditional")]
+ )
+ 
+ (define_insn "smin<mode>3"
+@@ -1289,7 +1291,8 @@
+ 		  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
+   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
+   "vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
+-  [(set_attr "type" "f_minmax<vfp_type>")]
++  [(set_attr "type" "f_minmax<vfp_type>")
++   (set_attr "conds" "unconditional")]
+ )
+ 
+ ;; Unimplemented insns:
+diff -Naur gcc-4.8.2.orig/gcc/config/avr/avr.c gcc-4.8.2/gcc/config/avr/avr.c
+--- gcc-4.8.2.orig/gcc/config/avr/avr.c	2013-07-19 11:15:26.000000000 +0000
++++ gcc-4.8.2/gcc/config/avr/avr.c	2014-03-30 20:21:40.587595031 +0000
+@@ -587,10 +587,14 @@
+       const char *name;
+ 
+       name = DECL_ASSEMBLER_NAME_SET_P (decl)
+-        /* Remove the leading '*' added in set_user_assembler_name.  */
+-        ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
++        ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
+         : IDENTIFIER_POINTER (DECL_NAME (decl));
+ 
++      /* Skip a leading '*' that might still prefix the assembler name,
++         e.g. in non-LTO runs.  */
++
++      name = default_strip_name_encoding (name);
++
+       /* Silently ignore 'signal' if 'interrupt' is present.  AVR-LibC startet
+          using this when it switched from SIGNAL and INTERRUPT to ISR.  */
+ 
+@@ -6806,8 +6810,8 @@
+ 
+   /* Work out the shortest sequence.  */
+ 
+-  avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
+-  avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
++  avr_out_plus_1 (op, &len_minus, MINUS, &cc_minus, code_sat, sign, out_label);
++  avr_out_plus_1 (op, &len_plus, PLUS, &cc_plus, code_sat, sign, out_label);
+ 
+   if (plen)
+     {
+diff -Naur gcc-4.8.2.orig/gcc/config/cris/cris.md gcc-4.8.2/gcc/config/cris/cris.md
+--- gcc-4.8.2.orig/gcc/config/cris/cris.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/cris/cris.md	2014-03-30 20:21:40.587595031 +0000
+@@ -758,7 +758,7 @@
+ 		      (match_operand:SI 1 "const_int_operand" ""))
+ 	     (match_operand:SI 2 "register_operand" ""))])
+ 	  (match_operand 3 "register_operand" ""))
+-     (set (match_operand:SI 4 "register_operand" "")
++     (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
+ 	  (plus:SI (mult:SI (match_dup 0)
+ 			    (match_dup 1))
+ 		   (match_dup 2)))])]
+@@ -859,7 +859,7 @@
+ 	     (match_operand:SI 0 "cris_bdap_operand" "")
+ 	     (match_operand:SI 1 "cris_bdap_operand" ""))])
+ 	  (match_operand 2 "register_operand" ""))
+-     (set (match_operand:SI 3 "register_operand" "")
++     (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
+ 	  (plus:SI (match_dup 0) (match_dup 1)))])]
+   "reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
+   [(set (match_dup 4) (match_dup 2))
+@@ -3960,7 +3960,7 @@
+ ;; up.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 4 "cris_operand_extend_operator"
+ 	 [(match_operand 1 "register_operand" "")
+@@ -3990,7 +3990,7 @@
+ ;; Call this op-extend-split-rx=rz
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 4 "cris_plus_or_bound_operator"
+ 	 [(match_operand 1 "register_operand" "")
+@@ -4018,7 +4018,7 @@
+ ;; Call this op-extend-split-swapped
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 4 "cris_plus_or_bound_operator"
+ 	 [(match_operator
+@@ -4044,7 +4044,7 @@
+ ;; bound.  Call this op-extend-split-swapped-rx=rz.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 4 "cris_plus_or_bound_operator"
+ 	 [(match_operator
+@@ -4075,7 +4075,7 @@
+ ;; Call this op-extend.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 3 "cris_orthogonal_operator"
+ 	 [(match_operand 1 "register_operand" "")
+@@ -4099,7 +4099,7 @@
+ ;; Call this op-split-rx=rz
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 3 "cris_commutative_orth_op"
+ 	 [(match_operand 2 "memory_operand" "")
+@@ -4123,7 +4123,7 @@
+ ;; Call this op-split-swapped.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 3 "cris_commutative_orth_op"
+ 	 [(match_operand 1 "register_operand" "")
+@@ -4146,7 +4146,7 @@
+ ;; Call this op-split-swapped-rx=rz.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 3 "cris_orthogonal_operator"
+ 	 [(match_operand 2 "memory_operand" "")
+@@ -4555,10 +4555,11 @@
+ ;; We're not allowed to generate copies of registers with different mode
+ ;; until after reload; copying pseudos upsets reload.  CVS as of
+ ;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
+-;; cselib_invalidate_regno.
++;; cselib_invalidate_regno.  Also, don't do this for the stack-pointer,
++;; as we don't want it set temporarily to an invalid value.
+ 
+ (define_split ; indir_to_reg_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operand 1 "indirect_operand" ""))]
+   "reload_completed
+    && REG_P (operands[0])
+@@ -4574,7 +4575,7 @@
+ ;; As the above, but MOVS and MOVU.
+ 
+ (define_split
+-  [(set (match_operand 0 "register_operand" "")
++  [(set (match_operand 0 "cris_nonsp_register_operand" "")
+ 	(match_operator
+ 	 4 "cris_extend_operator"
+ 	 [(match_operand 1 "indirect_operand" "")]))]
+diff -Naur gcc-4.8.2.orig/gcc/config/cris/predicates.md gcc-4.8.2/gcc/config/cris/predicates.md
+--- gcc-4.8.2.orig/gcc/config/cris/predicates.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/cris/predicates.md	2014-03-30 20:21:40.587595031 +0000
+@@ -76,6 +76,10 @@
+ 	    (match_test "cris_simple_address_operand (XEXP (op, 0),
+ 						      Pmode)"))))
+ 
++(define_predicate "cris_nonsp_register_operand"
++  (and (match_operand 0 "register_operand")
++       (match_test "op != stack_pointer_rtx")))
++
+ ;; The caller needs to use :SI.
+ (define_predicate "cris_bdap_sign_extend_operand"
+ ; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/driver-i386.c gcc-4.8.2/gcc/config/i386/driver-i386.c
+--- gcc-4.8.2.orig/gcc/config/i386/driver-i386.c	2013-08-28 08:25:13.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/driver-i386.c	2014-03-30 20:21:40.587595031 +0000
+@@ -126,6 +126,18 @@
+       case 0x0c:
+ 	level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
+ 	break;
++      case 0x0d:
++	level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
++	break;
++      case 0x0e:
++	level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
++	break;
++      case 0x21:
++	level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
++	break;
++      case 0x24:
++	level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
++	break;
+       case 0x2c:
+ 	level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
+ 	break;
+@@ -162,6 +174,9 @@
+       case 0x45:
+ 	level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
+ 	break;
++      case 0x48:
++	level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
++	break;
+       case 0x49:
+ 	if (xeon_mp)
+ 	  break;
+@@ -203,6 +218,9 @@
+       case 0x7f:
+ 	level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
+ 	break;
++      case 0x80:
++	level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
++	break;
+       case 0x82:
+ 	level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
+ 	break;
+@@ -470,6 +488,28 @@
+       has_xsaveopt = eax & bit_XSAVEOPT;
+     }
+ 
++  /* Check cpuid level of extended features.  */
++  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
++
++  if (ext_level > 0x80000000)
++    {
++      __cpuid (0x80000001, eax, ebx, ecx, edx);
++
++      has_lahf_lm = ecx & bit_LAHF_LM;
++      has_sse4a = ecx & bit_SSE4a;
++      has_abm = ecx & bit_ABM;
++      has_lwp = ecx & bit_LWP;
++      has_fma4 = ecx & bit_FMA4;
++      has_xop = ecx & bit_XOP;
++      has_tbm = ecx & bit_TBM;
++      has_lzcnt = ecx & bit_LZCNT;
++      has_prfchw = ecx & bit_PRFCHW;
++
++      has_longmode = edx & bit_LM;
++      has_3dnowp = edx & bit_3DNOWP;
++      has_3dnow = edx & bit_3DNOW;
++    }
++
+   /* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv.  */
+ #define XCR_XFEATURE_ENABLED_MASK	0x0
+ #define XSTATE_FP			0x1
+@@ -488,33 +528,12 @@
+       has_avx2 = 0;
+       has_fma = 0;
+       has_fma4 = 0;
++      has_f16c = 0;
+       has_xop = 0;
+       has_xsave = 0;
+       has_xsaveopt = 0;
+     }
+ 
+-  /* Check cpuid level of extended features.  */
+-  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
+-
+-  if (ext_level > 0x80000000)
+-    {
+-      __cpuid (0x80000001, eax, ebx, ecx, edx);
+-
+-      has_lahf_lm = ecx & bit_LAHF_LM;
+-      has_sse4a = ecx & bit_SSE4a;
+-      has_abm = ecx & bit_ABM;
+-      has_lwp = ecx & bit_LWP;
+-      has_fma4 = ecx & bit_FMA4;
+-      has_xop = ecx & bit_XOP;
+-      has_tbm = ecx & bit_TBM;
+-      has_lzcnt = ecx & bit_LZCNT;
+-      has_prfchw = ecx & bit_PRFCHW;
+-
+-      has_longmode = edx & bit_LM;
+-      has_3dnowp = edx & bit_3DNOWP;
+-      has_3dnow = edx & bit_3DNOW;
+-    }
+-
+   if (!arch)
+     {
+       if (vendor == signature_AMD_ebx
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/f16cintrin.h gcc-4.8.2/gcc/config/i386/f16cintrin.h
+--- gcc-4.8.2.orig/gcc/config/i386/f16cintrin.h	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/f16cintrin.h	2014-03-30 20:21:40.587595031 +0000
+@@ -35,7 +35,7 @@
+ extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _cvtsh_ss (unsigned short __S)
+ {
+-  __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
++  __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
+   __v4sf __A = __builtin_ia32_vcvtph2ps (__H);
+   return __builtin_ia32_vec_ext_v4sf (__A, 0);
+ }
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.c gcc-4.8.2/gcc/config/i386/i386.c
+--- gcc-4.8.2.orig/gcc/config/i386/i386.c	2013-08-23 10:01:34.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/i386.c	2014-03-30 20:21:40.594261397 +0000
+@@ -1378,7 +1378,7 @@
+   8,					/* MMX or SSE register to integer */
+   8,					/* size of l1 cache.  */
+   1024,					/* size of l2 cache.  */
+-  128,					/* size of prefetch block */
++  64,					/* size of prefetch block */
+   8,					/* number of parallel prefetches */
+   1,					/* Branch cost */
+   COSTS_N_INSNS (6),			/* cost of FADD and FSUB insns.  */
+@@ -1894,10 +1894,10 @@
+   m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM  | m_AMDFAM10 | m_BDVER | m_GENERIC,
+ 
+   /* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
+-  m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
++  m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
+ 
+   /* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
+-  m_COREI7 | m_BDVER,
++  m_COREI7 | m_HASWELL| m_BDVER,
+ 
+   /* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
+   m_BDVER ,
+@@ -2409,6 +2409,7 @@
+ /* Processor target table, indexed by processor number */
+ struct ptt
+ {
++  const char *const name;			/* processor name  */
+   const struct processor_costs *cost;		/* Processor costs */
+   const int align_loop;				/* Default alignments.  */
+   const int align_loop_max_skip;
+@@ -2417,66 +2418,31 @@
+   const int align_func;
+ };
+ 
++/* This table must be in sync with enum processor_type in i386.h.  */ 
+ static const struct ptt processor_target_table[PROCESSOR_max] =
+ {
+-  {&i386_cost, 4, 3, 4, 3, 4},
+-  {&i486_cost, 16, 15, 16, 15, 16},
+-  {&pentium_cost, 16, 7, 16, 7, 16},
+-  {&pentiumpro_cost, 16, 15, 16, 10, 16},
+-  {&geode_cost, 0, 0, 0, 0, 0},
+-  {&k6_cost, 32, 7, 32, 7, 32},
+-  {&athlon_cost, 16, 7, 16, 7, 16},
+-  {&pentium4_cost, 0, 0, 0, 0, 0},
+-  {&k8_cost, 16, 7, 16, 7, 16},
+-  {&nocona_cost, 0, 0, 0, 0, 0},
+-  /* Core 2  */
+-  {&core_cost, 16, 10, 16, 10, 16},
+-  /* Core i7  */
+-  {&core_cost, 16, 10, 16, 10, 16},
+-  /* Core avx2  */
+-  {&core_cost, 16, 10, 16, 10, 16},
+-  {&generic32_cost, 16, 7, 16, 7, 16},
+-  {&generic64_cost, 16, 10, 16, 10, 16},
+-  {&amdfam10_cost, 32, 24, 32, 7, 32},
+-  {&bdver1_cost, 16, 10, 16, 7, 11},
+-  {&bdver2_cost, 16, 10, 16, 7, 11},
+-  {&bdver3_cost, 16, 10, 16, 7, 11},
+-  {&btver1_cost, 16, 10, 16, 7, 11},
+-  {&btver2_cost, 16, 10, 16, 7, 11},
+-  {&atom_cost, 16, 15, 16, 7, 16}
+-};
+-
+-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
+-{
+-  "generic",
+-  "i386",
+-  "i486",
+-  "pentium",
+-  "pentium-mmx",
+-  "pentiumpro",
+-  "pentium2",
+-  "pentium3",
+-  "pentium4",
+-  "pentium-m",
+-  "prescott",
+-  "nocona",
+-  "core2",
+-  "corei7",
+-  "core-avx2",
+-  "atom",
+-  "geode",
+-  "k6",
+-  "k6-2",
+-  "k6-3",
+-  "athlon",
+-  "athlon-4",
+-  "k8",
+-  "amdfam10",
+-  "bdver1",
+-  "bdver2",
+-  "bdver3",
+-  "btver1",
+-  "btver2"
++  {"generic", &generic32_cost, 16, 7, 16, 7, 16},
++  {"generic", &generic64_cost, 16, 10, 16, 10, 16},
++  {"i386", &i386_cost, 4, 3, 4, 3, 4},
++  {"i486", &i486_cost, 16, 15, 16, 15, 16},
++  {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
++  {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
++  {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
++  {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
++  {"core2", &core_cost, 16, 10, 16, 10, 16},
++  {"corei7", &core_cost, 16, 10, 16, 10, 16},
++  {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
++  {"atom", &atom_cost, 16, 15, 16, 7, 16},
++  {"geode", &geode_cost, 0, 0, 0, 0, 0},
++  {"k6", &k6_cost, 32, 7, 32, 7, 32},
++  {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
++  {"k8", &k8_cost, 16, 7, 16, 7, 16},
++  {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
++  {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
++  {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
++  {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
++  {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
++  {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
+ };
+ 
+
+ static bool
+@@ -2983,7 +2949,7 @@
+       {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
+ 	PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ 	| PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
+-	| PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
++	| PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
+ 	| PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
+ 	| PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE 
+ 	| PTA_XSAVEOPT},
+@@ -3125,7 +3091,8 @@
+ 	ix86_tune_string = ix86_arch_string;
+       if (!ix86_tune_string)
+ 	{
+-	  ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
++	  ix86_tune_string
++	    = processor_target_table[TARGET_CPU_DEFAULT].name;
+ 	  ix86_tune_defaulted = 1;
+ 	}
+ 
+@@ -4078,19 +4045,15 @@
+     = ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
+ 			  NULL, NULL, ptr->x_ix86_fpmath, false);
+ 
++  gcc_assert (ptr->arch < PROCESSOR_max);
+   fprintf (file, "%*sarch = %d (%s)\n",
+ 	   indent, "",
+-	   ptr->arch,
+-	   ((ptr->arch < TARGET_CPU_DEFAULT_max)
+-	    ? cpu_names[ptr->arch]
+-	    : "<unknown>"));
++	   ptr->arch, processor_target_table[ptr->arch].name);
+ 
++  gcc_assert (ptr->tune < PROCESSOR_max);
+   fprintf (file, "%*stune = %d (%s)\n",
+ 	   indent, "",
+-	   ptr->tune,
+-	   ((ptr->tune < TARGET_CPU_DEFAULT_max)
+-	    ? cpu_names[ptr->tune]
+-	    : "<unknown>"));
++	   ptr->tune, processor_target_table[ptr->tune].name);
+ 
+   fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
+ 
+@@ -5213,7 +5176,12 @@
+   /* Use register calling convention for local functions when possible.  */
+   if (decl
+       && TREE_CODE (decl) == FUNCTION_DECL
+-      && optimize
++      /* Caller and callee must agree on the calling convention, so
++	 checking here just optimize means that with
++	 __attribute__((optimize (...))) caller could use regparm convention
++	 and callee not, or vice versa.  Instead look at whether the callee
++	 is optimized or not.  */
++      && opt_for_fn (decl, optimize)
+       && !(profile_flag && !flag_fentry))
+     {
+       /* FIXME: remove this CONST_CAST when cgraph.[ch] is constified.  */
+@@ -5409,6 +5377,17 @@
+ 	  bool win;
+ 	  int j;
+ 
++	  /* For pre-AVX disallow unaligned loads/stores where the
++	     instructions don't support it.  */
++	  if (!TARGET_AVX
++	      && VECTOR_MODE_P (GET_MODE (op))
++	      && misaligned_operand (op, GET_MODE (op)))
++	    {
++	      int min_align = get_attr_ssememalign (insn);
++	      if (min_align == 0)
++		return false;
++	    }
++
+ 	  /* A unary operator may be accepted by the predicate, but it
+ 	     is irrelevant for matching constraints.  */
+ 	  if (UNARY_P (op))
+@@ -5747,9 +5726,9 @@
+ 	  cum->nregs = 0;
+ 	  cum->sse_nregs = 0;
+ 	  cum->mmx_nregs = 0;
+-	  cum->warn_avx = 0;
+-	  cum->warn_sse = 0;
+-	  cum->warn_mmx = 0;
++	  cum->warn_avx = false;
++	  cum->warn_sse = false;
++	  cum->warn_mmx = false;
+ 	  return;
+ 	}
+ 
+@@ -5790,10 +5769,14 @@
+ 
+    The midde-end can't deal with the vector types > 16 bytes.  In this
+    case, we return the original mode and warn ABI change if CUM isn't
+-   NULL.  */
++   NULL. 
++
++   If INT_RETURN is true, warn ABI change if the vector mode isn't
++   available for function return value.  */
+ 
+ static enum machine_mode
+-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
++type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
++		   bool in_return)
+ {
+   enum machine_mode mode = TYPE_MODE (type);
+ 
+@@ -5819,33 +5802,61 @@
+ 		if (size == 32 && !TARGET_AVX)
+ 		  {
+ 		    static bool warnedavx;
++		    static bool warnedavx_ret;
+ 
+-		    if (cum
+-			&& !warnedavx
+-			&& cum->warn_avx)
++		    if (cum && cum->warn_avx && !warnedavx)
+ 		      {
+-			warnedavx = true;
+-			warning (0, "AVX vector argument without AVX "
+-				 "enabled changes the ABI");
++			if (warning (OPT_Wpsabi, "AVX vector argument "
++				     "without AVX enabled changes the ABI"))
++			  warnedavx = true;
+ 		      }
++		    else if (in_return && !warnedavx_ret)
++		      {
++			if (warning (OPT_Wpsabi, "AVX vector return "
++				     "without AVX enabled changes the ABI"))
++			  warnedavx_ret = true;
++		      }
++
+ 		    return TYPE_MODE (type);
+ 		  }
+-		else if ((size == 8 || size == 16) && !TARGET_SSE)
++		else if (((size == 8 && TARGET_64BIT) || size == 16)
++			 && !TARGET_SSE)
+ 		  {
+ 		    static bool warnedsse;
++		    static bool warnedsse_ret;
+ 
+-		    if (cum
+-			&& !warnedsse
+-			&& cum->warn_sse)
++		    if (cum && cum->warn_sse && !warnedsse)
+ 		      {
+-			warnedsse = true;
+-			warning (0, "SSE vector argument without SSE "
+-				 "enabled changes the ABI");
++			if (warning (OPT_Wpsabi, "SSE vector argument "
++				     "without SSE enabled changes the ABI"))
++			  warnedsse = true;
++		      }
++		    else if (!TARGET_64BIT && in_return && !warnedsse_ret)
++		      {
++			if (warning (OPT_Wpsabi, "SSE vector return "
++				     "without SSE enabled changes the ABI"))
++			  warnedsse_ret = true;
+ 		      }
+-		    return mode;
+ 		  }
+-		else
+-		  return mode;
++		else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
++		  {
++		    static bool warnedmmx;
++		    static bool warnedmmx_ret;
++
++		    if (cum && cum->warn_mmx && !warnedmmx)
++		      {
++			if (warning (OPT_Wpsabi, "MMX vector argument "
++				     "without MMX enabled changes the ABI"))
++			  warnedmmx = true;
++		      }
++		    else if (in_return && !warnedmmx_ret)
++		      {
++			if (warning (OPT_Wpsabi, "MMX vector return "
++				     "without MMX enabled changes the ABI"))
++			  warnedmmx_ret = true;
++		      }
++		  }
++		return mode;
+ 	      }
+ 
+ 	  gcc_unreachable ();
+@@ -6190,25 +6201,28 @@
+     case CHImode:
+     case CQImode:
+       {
+-	int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
++	int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
++
++	/* Analyze last 128 bits only.  */
++	size = (size - 1) & 0x7f;
+ 
+-	if (size <= 32)
++	if (size < 32)
+ 	  {
+ 	    classes[0] = X86_64_INTEGERSI_CLASS;
+ 	    return 1;
+ 	  }
+-	else if (size <= 64)
++	else if (size < 64)
+ 	  {
+ 	    classes[0] = X86_64_INTEGER_CLASS;
+ 	    return 1;
+ 	  }
+-	else if (size <= 64+32)
++	else if (size < 64+32)
+ 	  {
+ 	    classes[0] = X86_64_INTEGER_CLASS;
+ 	    classes[1] = X86_64_INTEGERSI_CLASS;
+ 	    return 2;
+ 	  }
+-	else if (size <= 64+64)
++	else if (size < 64+64)
+ 	  {
+ 	    classes[0] = classes[1] = X86_64_INTEGER_CLASS;
+ 	    return 2;
+@@ -6475,7 +6489,7 @@
+   if (n == 2
+       && regclass[0] == X86_64_INTEGER_CLASS
+       && regclass[1] == X86_64_INTEGER_CLASS
+-      && (mode == CDImode || mode == TImode || mode == TFmode)
++      && (mode == CDImode || mode == TImode)
+       && intreg[0] + 1 == intreg[1])
+     return gen_rtx_REG (mode, intreg[0]);
+ 
+@@ -6725,7 +6739,7 @@
+   words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+ 
+   if (type)
+-    mode = type_natural_mode (type, NULL);
++    mode = type_natural_mode (type, NULL, false);
+ 
+   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
+     function_arg_advance_ms_64 (cum, bytes, words);
+@@ -6753,8 +6767,6 @@
+ 		 enum machine_mode orig_mode, const_tree type,
+ 		 HOST_WIDE_INT bytes, HOST_WIDE_INT words)
+ {
+-  static bool warnedsse, warnedmmx;
+-
+   /* Avoid the AL settings for the Unix64 ABI.  */
+   if (mode == VOIDmode)
+     return constm1_rtx;
+@@ -6811,12 +6823,6 @@
+     case V2DFmode:
+       if (!type || !AGGREGATE_TYPE_P (type))
+ 	{
+-	  if (!TARGET_SSE && !warnedsse && cum->warn_sse)
+-	    {
+-	      warnedsse = true;
+-	      warning (0, "SSE vector argument without SSE enabled "
+-		       "changes the ABI");
+-	    }
+ 	  if (cum->sse_nregs)
+ 	    return gen_reg_or_parallel (mode, orig_mode,
+ 				        cum->sse_regno + FIRST_SSE_REG);
+@@ -6849,12 +6855,6 @@
+     case V1DImode:
+       if (!type || !AGGREGATE_TYPE_P (type))
+ 	{
+-	  if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
+-	    {
+-	      warnedmmx = true;
+-	      warning (0, "MMX vector argument without MMX enabled "
+-		       "changes the ABI");
+-	    }
+ 	  if (cum->mmx_nregs)
+ 	    return gen_reg_or_parallel (mode, orig_mode,
+ 				        cum->mmx_regno + FIRST_MMX_REG);
+@@ -6977,7 +6977,7 @@
+   /* To simplify the code below, represent vector types with a vector mode
+      even if MMX/SSE are not active.  */
+   if (type && TREE_CODE (type) == VECTOR_TYPE)
+-    mode = type_natural_mode (type, cum);
++    mode = type_natural_mode (type, cum, false);
+ 
+   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
+     arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
+@@ -7235,9 +7235,15 @@
+   switch (regno)
+     {
+     case AX_REG:
++    case DX_REG:
+       return true;
+-
+-    case FIRST_FLOAT_REG:
++    case DI_REG:
++    case SI_REG:
++      return TARGET_64BIT && ix86_abi != MS_ABI;
++
++      /* Complex values are returned in %st(0)/%st(1) pair.  */
++    case ST0_REG:
++    case ST1_REG:
+       /* TODO: The function should depend on current function ABI but
+        builtins.c would need updating then. Therefore we use the
+        default ABI.  */
+@@ -7245,10 +7251,12 @@
+ 	return false;
+       return TARGET_FLOAT_RETURNS_IN_80387;
+ 
+-    case FIRST_SSE_REG:
++      /* Complex values are returned in %xmm0/%xmm1 pair.  */
++    case XMM0_REG:
++    case XMM1_REG:
+       return TARGET_SSE;
+ 
+-    case FIRST_MMX_REG:
++    case MM0_REG:
+       if (TARGET_MACHO || TARGET_64BIT)
+ 	return false;
+       return TARGET_MMX;
+@@ -7420,7 +7428,7 @@
+   enum machine_mode mode, orig_mode;
+ 
+   orig_mode = TYPE_MODE (valtype);
+-  mode = type_natural_mode (valtype, NULL);
++  mode = type_natural_mode (valtype, NULL, true);
+   return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
+ }
+ 
+@@ -7535,7 +7543,7 @@
+ #ifdef SUBTARGET_RETURN_IN_MEMORY
+   return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
+ #else
+-  const enum machine_mode mode = type_natural_mode (type, NULL);
++  const enum machine_mode mode = type_natural_mode (type, NULL, true);
+ 
+   if (TARGET_64BIT)
+     {
+@@ -7549,52 +7557,6 @@
+ #endif
+ }
+ 
+-/* When returning SSE vector types, we have a choice of either
+-     (1) being abi incompatible with a -march switch, or
+-     (2) generating an error.
+-   Given no good solution, I think the safest thing is one warning.
+-   The user won't be able to use -Werror, but....
+-
+-   Choose the STRUCT_VALUE_RTX hook because that's (at present) only
+-   called in response to actually generating a caller or callee that
+-   uses such a type.  As opposed to TARGET_RETURN_IN_MEMORY, which is called
+-   via aggregate_value_p for general type probing from tree-ssa.  */
+-
+-static rtx
+-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
+-{
+-  static bool warnedsse, warnedmmx;
+-
+-  if (!TARGET_64BIT && type)
+-    {
+-      /* Look at the return type of the function, not the function type.  */
+-      enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
+-
+-      if (!TARGET_SSE && !warnedsse)
+-	{
+-	  if (mode == TImode
+-	      || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
+-	    {
+-	      warnedsse = true;
+-	      warning (0, "SSE vector return without SSE enabled "
+-		       "changes the ABI");
+-	    }
+-	}
+-
+-      if (!TARGET_MMX && !warnedmmx)
+-	{
+-	  if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
+-	    {
+-	      warnedmmx = true;
+-	      warning (0, "MMX vector return without MMX enabled "
+-		       "changes the ABI");
+-	    }
+-	}
+-    }
+-
+-  return NULL;
+-}
+-
+ 
+
+ /* Create the va_list data type.  */
+ 
+@@ -8019,7 +7981,7 @@
+   size = int_size_in_bytes (type);
+   rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
+ 
+-  nat_mode = type_natural_mode (type, NULL);
++  nat_mode = type_natural_mode (type, NULL, false);
+   switch (nat_mode)
+     {
+     case V8SFmode:
+@@ -10560,18 +10522,20 @@
+ 	}
+       m->fs.sp_offset += allocate;
+ 
++      /* Use stack_pointer_rtx for relative addressing so that code
++	 works for realigned stack, too.  */
+       if (r10_live && eax_live)
+         {
+-	  t = choose_baseaddr (m->fs.sp_offset - allocate);
++	  t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ 	  emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
+ 			  gen_frame_mem (word_mode, t));
+-	  t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
++	  t = plus_constant (Pmode, t, UNITS_PER_WORD);
+ 	  emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
+ 			  gen_frame_mem (word_mode, t));
+ 	}
+       else if (eax_live || r10_live)
+ 	{
+-	  t = choose_baseaddr (m->fs.sp_offset - allocate);
++	  t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ 	  emit_move_insn (gen_rtx_REG (word_mode,
+ 				       (eax_live ? AX_REG : R10_REG)),
+ 			  gen_frame_mem (word_mode, t));
+@@ -11561,30 +11525,6 @@
+     }
+ }
+ 
+
+-/* Determine if op is suitable SUBREG RTX for address.  */
+-
+-static bool
+-ix86_address_subreg_operand (rtx op)
+-{
+-  enum machine_mode mode;
+-
+-  if (!REG_P (op))
+-    return false;
+-
+-  mode = GET_MODE (op);
+-
+-  if (GET_MODE_CLASS (mode) != MODE_INT)
+-    return false;
+-
+-  /* Don't allow SUBREGs that span more than a word.  It can lead to spill
+-     failures when the register is one word out of a two word structure.  */
+-  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+-    return false;
+-
+-  /* Allow only SUBREGs of non-eliminable hard registers.  */
+-  return register_no_elim_operand (op, mode);
+-}
+-
+ /* Extract the parts of an RTL expression that is a valid memory address
+    for an instruction.  Return 0 if the structure of the address is
+    grossly off.  Return -1 if the address contains ASHIFT, so it is not
+@@ -11641,7 +11581,7 @@
+     base = addr;
+   else if (GET_CODE (addr) == SUBREG)
+     {
+-      if (ix86_address_subreg_operand (SUBREG_REG (addr)))
++      if (REG_P (SUBREG_REG (addr)))
+ 	base = addr;
+       else
+ 	return 0;
+@@ -11705,7 +11645,7 @@
+ 	      break;
+ 
+ 	    case SUBREG:
+-	      if (!ix86_address_subreg_operand (SUBREG_REG (op)))
++	      if (!REG_P (SUBREG_REG (op)))
+ 		return 0;
+ 	      /* FALLTHRU */
+ 
+@@ -11750,19 +11690,6 @@
+       scale = 1 << scale;
+       retval = -1;
+     }
+-  else if (CONST_INT_P (addr))
+-    {
+-      if (!x86_64_immediate_operand (addr, VOIDmode))
+-	return 0;
+-
+-      /* Constant addresses are sign extended to 64bit, we have to
+-	 prevent addresses from 0x80000000 to 0xffffffff in x32 mode.  */
+-      if (TARGET_X32
+-	  && val_signbit_known_set_p (SImode, INTVAL (addr)))
+-	return 0;
+-
+-      disp = addr;
+-    }
+   else
+     disp = addr;			/* displacement */
+ 
+@@ -11771,18 +11698,12 @@
+       if (REG_P (index))
+ 	;
+       else if (GET_CODE (index) == SUBREG
+-	       && ix86_address_subreg_operand (SUBREG_REG (index)))
++	       && REG_P (SUBREG_REG (index)))
+ 	;
+       else
+ 	return 0;
+     }
+ 
+-/* Address override works only on the (%reg) part of %fs:(%reg).  */
+-  if (seg != SEG_DEFAULT
+-      && ((base && GET_MODE (base) != word_mode)
+-	  || (index && GET_MODE (index) != word_mode)))
+-    return 0;
+-
+   /* Extract the integral value of scale.  */
+   if (scale_rtx)
+     {
+@@ -12258,6 +12179,45 @@
+   return false;
+ }
+ 
++/* Determine if op is suitable RTX for an address register.
++   Return naked register if a register or a register subreg is
++   found, otherwise return NULL_RTX.  */
++
++static rtx
++ix86_validate_address_register (rtx op)
++{
++  enum machine_mode mode = GET_MODE (op);
++
++  /* Only SImode or DImode registers can form the address.  */
++  if (mode != SImode && mode != DImode)
++    return NULL_RTX;
++
++  if (REG_P (op))
++    return op;
++  else if (GET_CODE (op) == SUBREG)
++    {
++      rtx reg = SUBREG_REG (op);
++
++      if (!REG_P (reg))
++	return NULL_RTX;
++
++      mode = GET_MODE (reg);
++
++      /* Don't allow SUBREGs that span more than a word.  It can
++	 lead to spill failures when the register is one word out
++	 of a two word structure.  */
++      if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
++	return NULL_RTX;
++
++      /* Allow only SUBREGs of non-eliminable hard registers.  */
++      if (register_no_elim_operand (reg, mode))
++	return reg;
++    }
++
++  /* Op is not a register.  */
++  return NULL_RTX;
++}
++
+ /* Recognizes RTL expressions that are valid memory addresses for an
+    instruction.  The MODE argument is the machine mode for the MEM
+    expression that wants to use this address.
+@@ -12273,6 +12233,7 @@
+   struct ix86_address parts;
+   rtx base, index, disp;
+   HOST_WIDE_INT scale;
++  enum ix86_address_seg seg;
+ 
+   if (ix86_decompose_address (addr, &parts) <= 0)
+     /* Decomposition failed.  */
+@@ -12282,21 +12243,14 @@
+   index = parts.index;
+   disp = parts.disp;
+   scale = parts.scale;
++  seg = parts.seg;
+ 
+   /* Validate base register.  */
+   if (base)
+     {
+-      rtx reg;
+-
+-      if (REG_P (base))
+-  	reg = base;
+-      else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
+-	reg = SUBREG_REG (base);
+-      else
+-	/* Base is not a register.  */
+-	return false;
++      rtx reg = ix86_validate_address_register (base);
+ 
+-      if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
++      if (reg == NULL_RTX)
+ 	return false;
+ 
+       if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
+@@ -12308,17 +12262,9 @@
+   /* Validate index register.  */
+   if (index)
+     {
+-      rtx reg;
+-
+-      if (REG_P (index))
+-  	reg = index;
+-      else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
+-	reg = SUBREG_REG (index);
+-      else
+-	/* Index is not a register.  */
+-	return false;
++      rtx reg = ix86_validate_address_register (index);
+ 
+-      if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
++      if (reg == NULL_RTX)
+ 	return false;
+ 
+       if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
+@@ -12332,6 +12278,12 @@
+       && GET_MODE (base) != GET_MODE (index))
+     return false;
+ 
++  /* Address override works only on the (%reg) part of %fs:(%reg).  */
++  if (seg != SEG_DEFAULT
++      && ((base && GET_MODE (base) != word_mode)
++	  || (index && GET_MODE (index) != word_mode)))
++    return false;
++
+   /* Validate scale factor.  */
+   if (scale != 1)
+     {
+@@ -12453,6 +12405,12 @@
+ 	       && !x86_64_immediate_operand (disp, VOIDmode))
+ 	/* Displacement is out of range.  */
+ 	return false;
++      /* In x32 mode, constant addresses are sign extended to 64bit, so
++	 we have to prevent addresses from 0x80000000 to 0xffffffff.  */
++      else if (TARGET_X32 && !(index || base)
++	       && CONST_INT_P (disp)
++	       && val_signbit_known_set_p (SImode, INTVAL (disp)))
++	return false;
+     }
+ 
+   /* Everything looks valid.  */
+@@ -13817,8 +13775,6 @@
+ 	 Those same assemblers have the same but opposite lossage on cmov.  */
+       if (mode == CCmode)
+ 	suffix = fp ? "nbe" : "a";
+-      else if (mode == CCCmode)
+-	suffix = "b";
+       else
+ 	gcc_unreachable ();
+       break;
+@@ -13840,8 +13796,12 @@
+ 	}
+       break;
+     case LTU:
+-      gcc_assert (mode == CCmode || mode == CCCmode);
+-      suffix = "b";
++      if (mode == CCmode)
++	suffix = "b";
++      else if (mode == CCCmode)
++	suffix = "c";
++      else
++	gcc_unreachable ();
+       break;
+     case GE:
+       switch (mode)
+@@ -13861,20 +13821,20 @@
+ 	}
+       break;
+     case GEU:
+-      /* ??? As above.  */
+-      gcc_assert (mode == CCmode || mode == CCCmode);
+-      suffix = fp ? "nb" : "ae";
++      if (mode == CCmode)
++	suffix = fp ? "nb" : "ae";
++      else if (mode == CCCmode)
++	suffix = "nc";
++      else
++	gcc_unreachable ();
+       break;
+     case LE:
+       gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
+       suffix = "le";
+       break;
+     case LEU:
+-      /* ??? As above.  */
+       if (mode == CCmode)
+ 	suffix = "be";
+-      else if (mode == CCCmode)
+-	suffix = fp ? "nb" : "ae";
+       else
+ 	gcc_unreachable ();
+       break;
+@@ -15340,7 +15300,7 @@
+ 	      rtx arg = XEXP (XEXP (link, 0), 0);
+ 
+ 	      if (ix86_check_avx256_register (&arg, NULL))
+-		return AVX_U128_ANY;
++		return AVX_U128_DIRTY;
+ 	    }
+ 	}
+ 
+@@ -15460,8 +15420,8 @@
+     {
+       bool avx_reg256_found = false;
+       note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
+-      if (!avx_reg256_found)
+-	return AVX_U128_CLEAN;
++
++      return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
+     }
+ 
+   /* Otherwise, return current mode.  Remember that if insn
+@@ -17350,8 +17310,18 @@
+   if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
+     return false;
+ 
+-  /* Check it is correct to split here.  */
+-  if (!ix86_ok_to_clobber_flags(insn))
++  /* The "at least two components" test below might not catch simple
++     move or zero extension insns if parts.base is non-NULL and parts.disp
++     is const0_rtx as the only components in the address, e.g. if the
++     register is %rbp or %r13.  As this test is much cheaper and moves or
++     zero extensions are the common case, do this check first.  */
++  if (REG_P (operands[1])
++      || (SImode_address_operand (operands[1], VOIDmode)
++	  && REG_P (XEXP (operands[1], 0))))
++    return false;
++
++  /* Check if it is OK to split here.  */
++  if (!ix86_ok_to_clobber_flags (insn))
+     return false;
+ 
+   ok = ix86_decompose_address (operands[1], &parts);
+@@ -18486,12 +18456,7 @@
+ 	return CCmode;
+     case GTU:			/* CF=0 & ZF=0 */
+     case LEU:			/* CF=1 | ZF=1 */
+-      /* Detect overflow checks.  They need just the carry flag.  */
+-      if (GET_CODE (op0) == MINUS
+-	  && rtx_equal_p (op1, XEXP (op0, 0)))
+-	return CCCmode;
+-      else
+-	return CCmode;
++      return CCmode;
+       /* Codes possibly doable only with sign flag when
+          comparing against zero.  */
+     case GE:			/* SF=OF   or   SF=0 */
+@@ -20500,7 +20465,7 @@
+ 	  return;
+ 
+ 	case V8SFmode:
+-	  mask = gen_lowpart (V8SFmode, mask);
++	  mask = gen_lowpart (V8SImode, mask);
+ 	  if (one_operand_shuffle)
+ 	    emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
+ 	  else
+@@ -21740,6 +21705,21 @@
+   return SImode;
+ }
+ 
++/* Copy the address to a Pmode register.  This is used for x32 to
++   truncate DImode TLS address to a SImode register. */
++
++static rtx
++ix86_copy_addr_to_reg (rtx addr)
++{
++  if (GET_MODE (addr) == Pmode)
++    return copy_addr_to_reg (addr);
++  else
++    {
++      gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
++      return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
++    }
++}
++
+ /* When SRCPTR is non-NULL, output simple loop to move memory
+    pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
+    overall size is COUNT specified in bytes.  When SRCPTR is NULL, output the
+@@ -22728,8 +22708,8 @@
+   gcc_assert (alg != no_stringop);
+   if (!count)
+     count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
+-  destreg = copy_addr_to_reg (XEXP (dst, 0));
+-  srcreg = copy_addr_to_reg (XEXP (src, 0));
++  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
++  srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
+   switch (alg)
+     {
+     case libcall:
+@@ -23119,7 +23099,7 @@
+   gcc_assert (alg != no_stringop);
+   if (!count)
+     count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
+-  destreg = copy_addr_to_reg (XEXP (dst, 0));
++  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
+   switch (alg)
+     {
+     case libcall:
+@@ -24988,7 +24968,8 @@
+ int
+ ix86_data_alignment (tree type, int align)
+ {
+-  int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
++  int max_align
++    = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
+ 
+   if (AGGREGATE_TYPE_P (type)
+       && TYPE_SIZE (type)
+@@ -27984,8 +27965,8 @@
+   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3,         "__builtin_ia32_vpshlw",      IX86_BUILTIN_VPSHLW,      UNKNOWN,      (int)MULTI_ARG_2_HI },
+   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3,        "__builtin_ia32_vpshlb",      IX86_BUILTIN_VPSHLB,      UNKNOWN,      (int)MULTI_ARG_2_QI },
+ 
+-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_2_SF },
+-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_2_DF },
++  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
++  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
+   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2,         "__builtin_ia32_vfrczps",     IX86_BUILTIN_VFRCZPS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
+   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2,         "__builtin_ia32_vfrczpd",     IX86_BUILTIN_VFRCZPD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
+   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2,         "__builtin_ia32_vfrczps256",  IX86_BUILTIN_VFRCZPS256,  UNKNOWN,      (int)MULTI_ARG_1_SF2 },
+@@ -31245,11 +31226,12 @@
+ 
+ static rtx
+ ix86_expand_special_args_builtin (const struct builtin_description *d,
+-				    tree exp, rtx target)
++				  tree exp, rtx target)
+ {
+   tree arg;
+   rtx pat, op;
+   unsigned int i, nargs, arg_adjust, memory;
++  bool aligned_mem = false;
+   struct
+     {
+       rtx op;
+@@ -31295,6 +31277,15 @@
+       nargs = 1;
+       klass = load;
+       memory = 0;
++      switch (icode)
++	{
++	case CODE_FOR_sse4_1_movntdqa:
++	case CODE_FOR_avx2_movntdqa:
++	  aligned_mem = true;
++	  break;
++	default:
++	  break;
++	}
+       break;
+     case VOID_FTYPE_PV2SF_V4SF:
+     case VOID_FTYPE_PV4DI_V4DI:
+@@ -31312,6 +31303,26 @@
+       klass = store;
+       /* Reserve memory operand for target.  */
+       memory = ARRAY_SIZE (args);
++      switch (icode)
++	{
++	/* These builtins and instructions require the memory
++	   to be properly aligned.  */
++	case CODE_FOR_avx_movntv4di:
++	case CODE_FOR_sse2_movntv2di:
++	case CODE_FOR_avx_movntv8sf:
++	case CODE_FOR_sse_movntv4sf:
++	case CODE_FOR_sse4a_vmmovntv4sf:
++	case CODE_FOR_avx_movntv4df:
++	case CODE_FOR_sse2_movntv2df:
++	case CODE_FOR_sse4a_vmmovntv2df:
++	case CODE_FOR_sse2_movntidi:
++	case CODE_FOR_sse_movntq:
++	case CODE_FOR_sse2_movntisi:
++	  aligned_mem = true;
++	  break;
++	default:
++	  break;
++	}
+       break;
+     case V4SF_FTYPE_V4SF_PCV2SF:
+     case V2DF_FTYPE_V2DF_PCDOUBLE:
+@@ -31368,6 +31379,17 @@
+ 	{
+ 	  op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
+ 	  target = gen_rtx_MEM (tmode, op);
++	  /* target at this point has just BITS_PER_UNIT MEM_ALIGN
++	     on it.  Try to improve it using get_pointer_alignment,
++	     and if the special builtin is one that requires strict
++	     mode alignment, also from it's GET_MODE_ALIGNMENT.
++	     Failure to do so could lead to ix86_legitimate_combined_insn
++	     rejecting all changes to such insns.  */
++	  unsigned int align = get_pointer_alignment (arg);
++	  if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
++	    align = GET_MODE_ALIGNMENT (tmode);
++	  if (MEM_ALIGN (target) < align)
++	    set_mem_align (target, align);
+ 	}
+       else
+ 	target = force_reg (tmode, op);
+@@ -31413,8 +31435,17 @@
+ 	      /* This must be the memory operand.  */
+ 	      op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
+ 	      op = gen_rtx_MEM (mode, op);
+-	      gcc_assert (GET_MODE (op) == mode
+-			  || GET_MODE (op) == VOIDmode);
++	      /* op at this point has just BITS_PER_UNIT MEM_ALIGN
++		 on it.  Try to improve it using get_pointer_alignment,
++		 and if the special builtin is one that requires strict
++		 mode alignment, also from it's GET_MODE_ALIGNMENT.
++		 Failure to do so could lead to ix86_legitimate_combined_insn
++		 rejecting all changes to such insns.  */
++	      unsigned int align = get_pointer_alignment (arg);
++	      if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
++		align = GET_MODE_ALIGNMENT (mode);
++	      if (MEM_ALIGN (op) < align)
++		set_mem_align (op, align);
+ 	    }
+ 	  else
+ 	    {
+@@ -32208,7 +32239,9 @@
+       mode4 = insn_data[icode].operand[5].mode;
+ 
+       if (target == NULL_RTX
+-	  || GET_MODE (target) != insn_data[icode].operand[0].mode)
++	  || GET_MODE (target) != insn_data[icode].operand[0].mode
++	  || !insn_data[icode].operand[0].predicate (target,
++						     GET_MODE (target)))
+ 	subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
+       else
+ 	subtarget = target;
+@@ -33879,10 +33912,10 @@
+     {
+       /* We implement the move patterns for all vector modes into and
+ 	 out of SSE registers, even when no operation instructions
+-	 are available.  OImode move is available only when AVX is
+-	 enabled.  */
+-      return ((TARGET_AVX && mode == OImode)
+-	      || VALID_AVX256_REG_MODE (mode)
++	 are available.  OImode and AVX modes are available only when
++	 AVX is enabled.  */
++      return ((TARGET_AVX
++	       && VALID_AVX256_REG_OR_OI_MODE (mode))
+ 	      || VALID_SSE_REG_MODE (mode)
+ 	      || VALID_SSE2_REG_MODE (mode)
+ 	      || VALID_MMX_REG_MODE (mode)
+@@ -35020,7 +35053,7 @@
+ 	{
+ 	  tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL);
+ 	  tmp = gen_rtx_CONST (Pmode, tmp);
+-	  fnaddr = gen_rtx_MEM (Pmode, tmp);
++	  fnaddr = gen_const_mem (Pmode, tmp);
+ 	}
+     }
+   else
+@@ -35040,8 +35073,9 @@
+ 	  output_set_got (tmp, NULL_RTX);
+ 
+ 	  fnaddr = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOT);
+-	  fnaddr = gen_rtx_PLUS (Pmode, fnaddr, tmp);
+-	  fnaddr = gen_rtx_MEM (Pmode, fnaddr);
++	  fnaddr = gen_rtx_CONST (Pmode, fnaddr);
++	  fnaddr = gen_rtx_PLUS (Pmode, tmp, fnaddr);
++	  fnaddr = gen_const_mem (Pmode, fnaddr);
+ 	}
+     }
+ 
+@@ -35232,7 +35266,10 @@
+      The smallest offset in the page INSN can start is the case where START
+      ends on the offset 0.  Offset of INSN is then NBYTES - sizeof (INSN).
+      We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
+-     */
++
++     Don't consider asm goto as jump, while it can contain a jump, it doesn't
++     have to, control transfer to label(s) can be performed through other
++     means, and also we estimate minimum length of all asm stmts as 0.  */
+   for (insn = start; insn; insn = NEXT_INSN (insn))
+     {
+       int min_size;
+@@ -35260,6 +35297,7 @@
+ 		{
+ 		  start = NEXT_INSN (start);
+ 		  if ((JUMP_P (start)
++		       && asm_noperands (PATTERN (start)) < 0
+ 		       && GET_CODE (PATTERN (start)) != ADDR_VEC
+ 		       && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
+ 		      || CALL_P (start))
+@@ -35278,6 +35316,7 @@
+ 	fprintf (dump_file, "Insn %i estimated to %i bytes\n",
+ 		 INSN_UID (insn), min_size);
+       if ((JUMP_P (insn)
++	   && asm_noperands (PATTERN (insn)) < 0
+ 	   && GET_CODE (PATTERN (insn)) != ADDR_VEC
+ 	   && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
+ 	  || CALL_P (insn))
+@@ -35289,6 +35328,7 @@
+ 	{
+ 	  start = NEXT_INSN (start);
+ 	  if ((JUMP_P (start)
++	       && asm_noperands (PATTERN (start)) < 0
+ 	       && GET_CODE (PATTERN (start)) != ADDR_VEC
+ 	       && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
+ 	      || CALL_P (start))
+@@ -39371,7 +39411,9 @@
+       else
+ 	dfinal.perm[i] = e;
+     }
+-  dfinal.op0 = gen_reg_rtx (dfinal.vmode);
++
++  if (!d->testing_p)
++    dfinal.op0 = gen_reg_rtx (dfinal.vmode);
+   dfinal.op1 = dfinal.op0;
+   dfinal.one_operand_p = true;
+   dremap.target = dfinal.op0;
+@@ -39806,6 +39848,9 @@
+     return false;
+   gcc_assert (!d->one_operand_p);
+ 
++  if (d->testing_p)
++    return true;
++
+   nelt = d->nelt;
+   eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
+ 
+@@ -40005,6 +40050,8 @@
+   switch (d->vmode)
+     {
+     case V4DFmode:
++      if (d->testing_p)
++	break;
+       t1 = gen_reg_rtx (V4DFmode);
+       t2 = gen_reg_rtx (V4DFmode);
+ 
+@@ -40024,6 +40071,8 @@
+       {
+ 	int mask = odd ? 0xdd : 0x88;
+ 
++	if (d->testing_p)
++	  break;
+ 	t1 = gen_reg_rtx (V8SFmode);
+ 	t2 = gen_reg_rtx (V8SFmode);
+ 	t3 = gen_reg_rtx (V8SFmode);
+@@ -40065,6 +40114,8 @@
+ 	return expand_vec_perm_pshufb2 (d);
+       else
+ 	{
++	  if (d->testing_p)
++	    break;
+ 	  /* We need 2*log2(N)-1 operations to achieve odd/even
+ 	     with interleave. */
+ 	  t1 = gen_reg_rtx (V8HImode);
+@@ -40086,6 +40137,8 @@
+ 	return expand_vec_perm_pshufb2 (d);
+       else
+ 	{
++	  if (d->testing_p)
++	    break;
+ 	  t1 = gen_reg_rtx (V16QImode);
+ 	  t2 = gen_reg_rtx (V16QImode);
+ 	  t3 = gen_reg_rtx (V16QImode);
+@@ -40118,6 +40171,9 @@
+ 	  return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ 	}
+ 
++      if (d->testing_p)
++	break;
++
+       t1 = gen_reg_rtx (V4DImode);
+       t2 = gen_reg_rtx (V4DImode);
+ 
+@@ -40144,6 +40200,9 @@
+ 	  return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ 	}
+ 
++      if (d->testing_p)
++	break;
++
+       t1 = gen_reg_rtx (V8SImode);
+       t2 = gen_reg_rtx (V8SImode);
+ 
+@@ -40236,6 +40295,8 @@
+     case V16QImode:
+       /* These can be implemented via interleave.  We save one insn by
+ 	 stopping once we have promoted to V4SImode and then use pshufd.  */
++      if (d->testing_p)
++	return true;
+       do
+ 	{
+ 	  rtx dest;
+@@ -42473,8 +42534,6 @@
+ 
+ #undef TARGET_PROMOTE_PROTOTYPES
+ #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
+-#undef TARGET_STRUCT_VALUE_RTX
+-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
+ #undef TARGET_SETUP_INCOMING_VARARGS
+ #define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
+ #undef TARGET_MUST_PASS_IN_STACK
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.h gcc-4.8.2/gcc/config/i386/i386.h
+--- gcc-4.8.2.orig/gcc/config/i386/i386.h	2013-01-28 20:42:55.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/i386.h	2014-03-30 20:21:40.597594724 +0000
+@@ -197,10 +197,10 @@
+ 
+ /* Macros used in the machine description to test the flags.  */
+ 
+-/* configure can arrange to make this 2, to force a 486.  */
++/* configure can arrange to change it.  */
+ 
+ #ifndef TARGET_CPU_DEFAULT
+-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
++#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
+ #endif
+ 
+ #ifndef TARGET_FPMATH_DEFAULT
+@@ -591,43 +591,6 @@
+ /* Target Pragmas.  */
+ #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
+ 
+-enum target_cpu_default
+-{
+-  TARGET_CPU_DEFAULT_generic = 0,
+-
+-  TARGET_CPU_DEFAULT_i386,
+-  TARGET_CPU_DEFAULT_i486,
+-  TARGET_CPU_DEFAULT_pentium,
+-  TARGET_CPU_DEFAULT_pentium_mmx,
+-  TARGET_CPU_DEFAULT_pentiumpro,
+-  TARGET_CPU_DEFAULT_pentium2,
+-  TARGET_CPU_DEFAULT_pentium3,
+-  TARGET_CPU_DEFAULT_pentium4,
+-  TARGET_CPU_DEFAULT_pentium_m,
+-  TARGET_CPU_DEFAULT_prescott,
+-  TARGET_CPU_DEFAULT_nocona,
+-  TARGET_CPU_DEFAULT_core2,
+-  TARGET_CPU_DEFAULT_corei7,
+-  TARGET_CPU_DEFAULT_haswell,
+-  TARGET_CPU_DEFAULT_atom,
+-
+-  TARGET_CPU_DEFAULT_geode,
+-  TARGET_CPU_DEFAULT_k6,
+-  TARGET_CPU_DEFAULT_k6_2,
+-  TARGET_CPU_DEFAULT_k6_3,
+-  TARGET_CPU_DEFAULT_athlon,
+-  TARGET_CPU_DEFAULT_athlon_sse,
+-  TARGET_CPU_DEFAULT_k8,
+-  TARGET_CPU_DEFAULT_amdfam10,
+-  TARGET_CPU_DEFAULT_bdver1,
+-  TARGET_CPU_DEFAULT_bdver2,
+-  TARGET_CPU_DEFAULT_bdver3,
+-  TARGET_CPU_DEFAULT_btver1,
+-  TARGET_CPU_DEFAULT_btver2,
+-
+-  TARGET_CPU_DEFAULT_max
+-};
+-
+ #ifndef CC1_SPEC
+ #define CC1_SPEC "%(cc1_cpu) "
+ #endif
+@@ -2089,32 +2052,33 @@
+    with x86-64 medium memory model */
+ #define DEFAULT_LARGE_SECTION_THRESHOLD 65536
+ 
+
+-/* Which processor to tune code generation for.  */
++/* Which processor to tune code generation for.  These must be in sync
++   with processor_target_table in i386.c.  */ 
+ 
+ enum processor_type
+ {
+-  PROCESSOR_I386 = 0,			/* 80386 */
++  PROCESSOR_GENERIC32 = 0,
++  PROCESSOR_GENERIC64,
++  PROCESSOR_I386,			/* 80386 */
+   PROCESSOR_I486,			/* 80486DX, 80486SX, 80486DX[24] */
+   PROCESSOR_PENTIUM,
+   PROCESSOR_PENTIUMPRO,
+-  PROCESSOR_GEODE,
+-  PROCESSOR_K6,
+-  PROCESSOR_ATHLON,
+   PROCESSOR_PENTIUM4,
+-  PROCESSOR_K8,
+   PROCESSOR_NOCONA,
+   PROCESSOR_CORE2,
+   PROCESSOR_COREI7,
+   PROCESSOR_HASWELL,
+-  PROCESSOR_GENERIC32,
+-  PROCESSOR_GENERIC64,
++  PROCESSOR_ATOM,
++  PROCESSOR_GEODE,
++  PROCESSOR_K6,
++  PROCESSOR_ATHLON,
++  PROCESSOR_K8,
+   PROCESSOR_AMDFAM10,
+   PROCESSOR_BDVER1,
+   PROCESSOR_BDVER2,
+   PROCESSOR_BDVER3,
+   PROCESSOR_BTVER1,
+   PROCESSOR_BTVER2,
+-  PROCESSOR_ATOM,
+   PROCESSOR_max
+ };
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.md gcc-4.8.2/gcc/config/i386/i386.md
+--- gcc-4.8.2.orig/gcc/config/i386/i386.md	2013-08-13 12:45:06.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/i386.md	2014-03-30 20:21:40.597594724 +0000
+@@ -363,6 +363,13 @@
+ 	   (const_string "unknown")]
+ 	 (const_string "integer")))
+ 
++;; The minimum required alignment of vector mode memory operands of the SSE
++;; (non-VEX/EVEX) instruction in bits, if it is different from
++;; GET_MODE_ALIGNMENT of the operand, otherwise 0.  If an instruction has
++;; multiple alternatives, this should be conservative maximum of those minimum
++;; required alignments.
++(define_attr "ssememalign" "" (const_int 0))
++
+ ;; The (bounding maximum) length of an instruction immediate.
+ (define_attr "length_immediate" ""
+   (cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
+@@ -1570,7 +1577,7 @@
+   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+ 
+   operands[1] = gen_lowpart (DImode, operands[2]);
+-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ 						   GEN_INT (4)));
+ })
+ 
+@@ -1587,7 +1594,7 @@
+   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+ 
+   operands[1] = gen_lowpart (DImode, operands[2]);
+-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ 						   GEN_INT (4)));
+ })
+ 
+@@ -2715,7 +2722,20 @@
+   "reload_completed"
+   [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
+    (set (mem:SF (reg:P SP_REG)) (match_dup 1))]
+-  "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
++{
++  rtx op = XEXP (operands[0], 0);
++  if (GET_CODE (op) == PRE_DEC)
++    {
++      gcc_assert (!TARGET_64BIT);
++      op = GEN_INT (-4);
++    }
++  else
++    {
++      op = XEXP (XEXP (op, 1), 1);
++      gcc_assert (CONST_INT_P (op));
++    }
++  operands[2] = op;
++})
+ 
+ (define_split
+   [(set (match_operand:SF 0 "push_operand")
+@@ -5443,6 +5463,12 @@
+     mode = SImode;
+ 
+   ix86_split_lea_for_addr (curr_insn, operands, mode);
++
++  /* Zero-extend return register to DImode for zero-extended addresses.  */
++  if (mode != <MODE>mode)
++    emit_insn (gen_zero_extendsidi2
++    	       (operands[0], gen_lowpart (mode, operands[0])));
++
+   DONE;
+ }
+   [(set_attr "type" "lea")
+@@ -6589,7 +6615,7 @@
+    (set_attr "use_carry" "1")
+    (set_attr "mode" "<MODE>")])
+ 
+
+-;; Overflow setting add and subtract instructions
++;; Overflow setting add instructions
+ 
+ (define_insn "*add<mode>3_cconly_overflow"
+   [(set (reg:CCC FLAGS_REG)
+@@ -6604,43 +6630,31 @@
+   [(set_attr "type" "alu")
+    (set_attr "mode" "<MODE>")])
+ 
+-(define_insn "*sub<mode>3_cconly_overflow"
+-  [(set (reg:CCC FLAGS_REG)
+-	(compare:CCC
+-	  (minus:SWI
+-	    (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
+-	    (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
+-	  (match_dup 0)))]
+-  ""
+-  "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
+-  [(set_attr "type" "icmp")
+-   (set_attr "mode" "<MODE>")])
+-
+-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
++(define_insn "*add<mode>3_cc_overflow"
+   [(set (reg:CCC FLAGS_REG)
+ 	(compare:CCC
+-	    (plusminus:SWI
+-		(match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
++	    (plus:SWI
++		(match_operand:SWI 1 "nonimmediate_operand" "%0,0")
+ 		(match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
+ 	    (match_dup 1)))
+    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
+-	(plusminus:SWI (match_dup 1) (match_dup 2)))]
+-  "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
+-  "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
++	(plus:SWI (match_dup 1) (match_dup 2)))]
++  "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
++  "add{<imodesuffix>}\t{%2, %0|%0, %2}"
+   [(set_attr "type" "alu")
+    (set_attr "mode" "<MODE>")])
+ 
+-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
++(define_insn "*addsi3_zext_cc_overflow"
+   [(set (reg:CCC FLAGS_REG)
+ 	(compare:CCC
+-	  (plusminus:SI
+-	    (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
++	  (plus:SI
++	    (match_operand:SI 1 "nonimmediate_operand" "%0")
+ 	    (match_operand:SI 2 "x86_64_general_operand" "rme"))
+ 	  (match_dup 1)))
+    (set (match_operand:DI 0 "register_operand" "=r")
+-	(zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
+-  "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
+-  "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
++	(zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
++  "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
++  "add{l}\t{%2, %k0|%k0, %2}"
+   [(set_attr "type" "alu")
+    (set_attr "mode" "SI")])
+ 
+@@ -8012,7 +8026,18 @@
+ 	 (const_int 0)))
+    (set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
+ 	(and:DI (match_dup 1) (match_dup 2)))]
+-  "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
++  "TARGET_64BIT
++   && ix86_match_ccmode
++	(insn,
++	 /* If we are going to emit andl instead of andq, and the operands[2]
++	    constant might have the SImode sign bit set, make sure the sign
++	    flag isn't tested, because the instruction will set the sign flag
++	    based on bit 31 rather than bit 63.  If it isn't CONST_INT,
++	    conservatively assume it might have bit 31 set.  */
++	 (satisfies_constraint_Z (operands[2])
++	  && (!CONST_INT_P (operands[2])
++	      || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
++	 ? CCZmode : CCNOmode)
+    && ix86_binary_operator_ok (AND, DImode, operands)"
+   "@
+    and{l}\t{%k2, %k0|%k0, %k2}
+@@ -17569,7 +17594,13 @@
+ (define_insn "trap"
+   [(trap_if (const_int 1) (const_int 6))]
+   ""
+-  { return ASM_SHORT "0x0b0f"; }
++{
++#ifdef HAVE_AS_IX86_UD2
++  return "ud2";
++#else
++  return ASM_SHORT "0x0b0f";
++#endif
++}
+   [(set_attr "length" "2")])
+ 
+ (define_expand "prefetch"
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/sse.md gcc-4.8.2/gcc/config/i386/sse.md
+--- gcc-4.8.2.orig/gcc/config/i386/sse.md	2013-08-14 14:09:59.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/sse.md	2014-03-30 20:21:40.600927900 +0000
+@@ -605,6 +605,7 @@
+ }
+   [(set_attr "type" "ssemov")
+    (set_attr "movu" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "prefix" "maybe_vex")
+    (set (attr "mode")
+ 	(cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+@@ -634,6 +635,7 @@
+ }
+   [(set_attr "type" "ssemov")
+    (set_attr "movu" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "prefix" "maybe_vex")
+    (set (attr "mode")
+ 	(cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
+@@ -663,6 +665,7 @@
+ }
+   [(set_attr "type" "ssemov")
+    (set_attr "movu" "1")
++   (set_attr "ssememalign" "8")
+    (set (attr "prefix_data16")
+      (if_then_else
+        (match_test "TARGET_AVX")
+@@ -696,6 +699,7 @@
+ }
+   [(set_attr "type" "ssemov")
+    (set_attr "movu" "1")
++   (set_attr "ssememalign" "8")
+    (set (attr "prefix_data16")
+      (if_then_else
+        (match_test "TARGET_AVX")
+@@ -721,6 +725,7 @@
+   "%vlddqu\t{%1, %0|%0, %1}"
+   [(set_attr "type" "ssemov")
+    (set_attr "movu" "1")
++   (set_attr "ssememalign" "8")
+    (set (attr "prefix_data16")
+      (if_then_else
+        (match_test "TARGET_AVX")
+@@ -1001,6 +1006,7 @@
+    vrcpss\t{%1, %2, %0|%0, %2, %1}"
+   [(set_attr "isa" "noavx,avx")
+    (set_attr "type" "sse")
++   (set_attr "ssememalign" "32")
+    (set_attr "atom_sse_attr" "rcp")
+    (set_attr "btver2_sse_attr" "rcp")
+    (set_attr "prefix" "orig,vex")
+@@ -1089,6 +1095,7 @@
+    vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
+   [(set_attr "isa" "noavx,avx")
+    (set_attr "type" "sse")
++   (set_attr "ssememalign" "32")
+    (set_attr "prefix" "orig,vex")
+    (set_attr "mode" "SF")])
+ 
+@@ -2844,6 +2851,7 @@
+   "%vcvtdq2pd\t{%1, %0|%0, %q1}"
+   [(set_attr "type" "ssecvt")
+    (set_attr "prefix" "maybe_vex")
++   (set_attr "ssememalign" "64")
+    (set_attr "mode" "V2DF")])
+ 
+ (define_insn "avx_cvtpd2dq256"
+@@ -3572,6 +3580,7 @@
+    %vmovhps\t{%2, %0|%0, %2}"
+   [(set_attr "isa" "noavx,avx,noavx,avx,*")
+    (set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
+ 
+@@ -3617,6 +3626,7 @@
+    %vmovlps\t{%2, %H0|%H0, %2}"
+   [(set_attr "isa" "noavx,avx,noavx,avx,*")
+    (set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
+ 
+@@ -3941,6 +3951,7 @@
+    %vmovhlps\t{%1, %d0|%d0, %1}
+    %vmovlps\t{%H1, %d0|%d0, %H1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "V2SF,V4SF,V2SF")])
+ 
+@@ -3980,6 +3991,7 @@
+    %vmovlps\t{%2, %H0|%H0, %2}"
+   [(set_attr "isa" "noavx,avx,noavx,avx,*")
+    (set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
+ 
+@@ -4033,6 +4045,7 @@
+    %vmovlps\t{%2, %0|%0, %2}"
+   [(set_attr "isa" "noavx,avx,noavx,avx,*")
+    (set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "length_immediate" "1,1,*,*,*")
+    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
+@@ -4642,7 +4655,8 @@
+    vmovlpd\t{%H1, %2, %0|%0, %2, %H1}
+    %vmovhpd\t{%1, %0|%0, %1}"
+   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
+-  (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
++   (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_data16" "*,*,*,1,*,1")
+    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
+@@ -4744,6 +4758,7 @@
+    %vmovlpd\t{%2, %H0|%H0, %2}"
+   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
+    (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_data16" "*,*,*,1,*,1")
+    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
+    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
+@@ -4982,6 +4997,7 @@
+    movhlps\t{%1, %0|%0, %1}
+    movlps\t{%H1, %0|%0, %H1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "mode" "V2SF,V4SF,V2SF")])
+ 
+ ;; Avoid combining registers from different units in a single alternative,
+@@ -5077,6 +5093,7 @@
+    #"
+   [(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
+    (set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_data16" "1,*,*,*,*,*,*")
+    (set_attr "prefix" "orig,vex,orig,vex,*,*,*")
+    (set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
+@@ -5145,6 +5162,7 @@
+ 	      (const_string "imov")
+ 	   ]
+ 	   (const_string "ssemov")))
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
+    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
+    (set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
+@@ -5189,6 +5207,7 @@
+        (const_string "1")
+        (const_string "*")))
+    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
+    (set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
+ 
+@@ -8736,6 +8755,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -8766,6 +8786,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "32")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -8791,6 +8812,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -8818,6 +8840,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "16")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -8845,6 +8868,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "32")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -8868,6 +8892,7 @@
+   "TARGET_SSE4_1"
+   "%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
+   [(set_attr "type" "ssemov")
++   (set_attr "ssememalign" "64")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "mode" "TI")])
+@@ -9151,6 +9176,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "none,load")
+    (set_attr "mode" "TI")])
+@@ -9213,6 +9239,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "load")
+    (set_attr "mode" "TI")])
+@@ -9240,6 +9267,7 @@
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
+    (set_attr "prefix" "maybe_vex")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "btver2_decode" "vector")
+    (set_attr "memory" "none,load")
+@@ -9267,6 +9295,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "btver2_decode" "vector")
+@@ -9293,6 +9322,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "none,load,none,load")
+    (set_attr "btver2_decode" "vector,vector,vector,vector") 
+@@ -9346,6 +9376,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "none,load")
+    (set_attr "mode" "TI")])
+@@ -9399,6 +9430,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "load")
+    (set_attr "mode" "TI")])
+@@ -9421,6 +9453,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "none,load")
+@@ -9445,6 +9478,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "prefix" "maybe_vex")
+    (set_attr "memory" "none,load")
+@@ -9469,6 +9503,7 @@
+   [(set_attr "type" "sselog")
+    (set_attr "prefix_data16" "1")
+    (set_attr "prefix_extra" "1")
++   (set_attr "ssememalign" "8")
+    (set_attr "length_immediate" "1")
+    (set_attr "memory" "none,load,none,load")
+    (set_attr "prefix" "maybe_vex")
+@@ -10213,21 +10248,18 @@
+   [(set_attr "type" "ssecvt1")
+    (set_attr "mode" "<MODE>")])
+ 
+-;; scalar insns
+ (define_expand "xop_vmfrcz<mode>2"
+   [(set (match_operand:VF_128 0 "register_operand")
+ 	(vec_merge:VF_128
+ 	  (unspec:VF_128
+ 	   [(match_operand:VF_128 1 "nonimmediate_operand")]
+ 	   UNSPEC_FRCZ)
+-	  (match_dup 3)
++	  (match_dup 2)
+ 	  (const_int 1)))]
+   "TARGET_XOP"
+-{
+-  operands[3] = CONST0_RTX (<MODE>mode);
+-})
++  "operands[2] = CONST0_RTX (<MODE>mode);")
+ 
+-(define_insn "*xop_vmfrcz_<mode>"
++(define_insn "*xop_vmfrcz<mode>2"
+   [(set (match_operand:VF_128 0 "register_operand" "=x")
+ 	(vec_merge:VF_128
+ 	  (unspec:VF_128
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/t-rtems gcc-4.8.2/gcc/config/i386/t-rtems
+--- gcc-4.8.2.orig/gcc/config/i386/t-rtems	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/t-rtems	2014-03-30 20:21:40.600927900 +0000
+@@ -17,11 +17,10 @@
+ # <http://www.gnu.org/licenses/>.
+ #
+ 
+-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
+-msoft-float
++MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
+ MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
+-MULTILIB_MATCHES = msoft-float=mno-m80387
+-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
++MULTILIB_MATCHES = msoft-float=mno-80387
++MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
+ MULTILIB_EXCEPTIONS = \
+ mtune=pentium/*msoft-float* \
+ mtune=pentiumpro/*msoft-float*
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/winnt.c gcc-4.8.2/gcc/config/i386/winnt.c
+--- gcc-4.8.2.orig/gcc/config/i386/winnt.c	2013-05-10 01:54:06.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/winnt.c	2014-03-30 20:21:40.600927900 +0000
+@@ -547,8 +547,9 @@
+ 	 sets 'discard' characteristic, rather than telling linker
+ 	 to warn of size or content mismatch, so do the same.  */ 
+       bool discard = (flags & SECTION_CODE)
+-		      || lookup_attribute ("selectany",
+-					   DECL_ATTRIBUTES (decl));	 
++		      || (TREE_CODE (decl) != IDENTIFIER_NODE
++			  && lookup_attribute ("selectany",
++					       DECL_ATTRIBUTES (decl)));
+       fprintf (asm_out_file, "\t.linkonce %s\n",
+ 	       (discard  ? "discard" : "same_size"));
+     }
+diff -Naur gcc-4.8.2.orig/gcc/config/i386/xopintrin.h gcc-4.8.2/gcc/config/i386/xopintrin.h
+--- gcc-4.8.2.orig/gcc/config/i386/xopintrin.h	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/i386/xopintrin.h	2014-03-30 20:21:40.600927900 +0000
+@@ -745,13 +745,17 @@
+ extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_ss (__m128 __A, __m128 __B)
+ {
+-  return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
++  return (__m128) __builtin_ia32_movss ((__v4sf)__A,
++					(__v4sf)
++					__builtin_ia32_vfrczss ((__v4sf)__B));
+ }
+ 
+ extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_sd (__m128d __A, __m128d __B)
+ {
+-  return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
++  return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
++					 (__v2df)
++					 __builtin_ia32_vfrczsd ((__v2df)__B));
+ }
+ 
+ extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+diff -Naur gcc-4.8.2.orig/gcc/config/m68k/m68k.c gcc-4.8.2/gcc/config/m68k/m68k.c
+--- gcc-4.8.2.orig/gcc/config/m68k/m68k.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/m68k/m68k.c	2014-03-30 20:21:40.600927900 +0000
+@@ -3325,12 +3325,12 @@
+ 	latehalf[1] = adjust_address (operands[1], SImode, 0);
+     }
+ 
+-  /* If insn is effectively movd N(sp),-(sp) then we will do the
+-     high word first.  We should use the adjusted operand 1 (which is N+4(sp))
+-     for the low word as well, to compensate for the first decrement of sp.  */
++  /* If insn is effectively movd N(REG),-(REG) then we will do the high
++     word first.  We should use the adjusted operand 1 (which is N+4(REG))
++     for the low word as well, to compensate for the first decrement of
++     REG.  */
+   if (optype0 == PUSHOP
+-      && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
+-      && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
++      && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
+     operands[1] = middlehalf[1] = latehalf[1];
+ 
+   /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
+diff -Naur gcc-4.8.2.orig/gcc/config/microblaze/microblaze.c gcc-4.8.2/gcc/config/microblaze/microblaze.c
+--- gcc-4.8.2.orig/gcc/config/microblaze/microblaze.c	2013-03-14 15:43:23.000000000 +0000
++++ gcc-4.8.2/gcc/config/microblaze/microblaze.c	2014-03-30 20:21:40.600927900 +0000
+@@ -1609,21 +1609,28 @@
+ microblaze_version_to_int (const char *version)
+ {
+   const char *p, *v;
+-  const char *tmpl = "vX.YY.Z";
++  const char *tmpl = "vXX.YY.Z";
+   int iver = 0;
+ 
+   p = version;
+   v = tmpl;
+ 
+-  while (*v)
++  while (*p)
+     {
+       if (*v == 'X')
+ 	{			/* Looking for major  */
+-	  if (!(*p >= '0' && *p <= '9'))
+-	    return -1;
+-	  iver += (int) (*p - '0');
+-	  iver *= 10;
+-	}
++          if (*p == '.')
++            {
++              *v++;
++            }
++          else
++            {
++	      if (!(*p >= '0' && *p <= '9'))
++	        return -1;
++	      iver += (int) (*p - '0');
++              iver *= 10;
++	     }
++        }
+       else if (*v == 'Y')
+ 	{			/* Looking for minor  */
+ 	  if (!(*p >= '0' && *p <= '9'))
+@@ -3064,6 +3071,73 @@
+   return result;
+ }
+ 
++static void
++microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
++        HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
++        tree function)
++{
++  rtx this_rtx, insn, funexp;
++
++  reload_completed = 1;
++  epilogue_completed = 1;
++
++  /* Mark the end of the (empty) prologue.  */
++  emit_note (NOTE_INSN_PROLOGUE_END);
++
++  /* Find the "this" pointer.  If the function returns a structure,
++     the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM.  */
++  if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
++    this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
++  else
++    this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
++
++  /* Apply the constant offset, if required.  */
++  if (delta)
++    emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
++
++  /* Apply the offset from the vtable, if required.  */
++  if (vcall_offset)
++  {
++    rtx vcall_offset_rtx = GEN_INT (vcall_offset);
++    rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
++
++    emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
++
++    rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
++    emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
++
++    emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
++  }
++
++  /* Generate a tail call to the target function.  */
++  if (!TREE_USED (function))
++  {
++    assemble_external (function);
++    TREE_USED (function) = 1;
++  }
++
++  funexp = XEXP (DECL_RTL (function), 0);
++  rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
++
++  if (flag_pic)
++    emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
++  else
++    emit_move_insn (temp2, funexp);
++
++  emit_insn (gen_indirect_jump (temp2));
++
++  /* Run just enough of rest_of_compilation.  This sequence was
++     "borrowed" from rs6000.c.  */
++  insn = get_insns ();
++  shorten_branches (insn);
++  final_start_function (insn, file, 1);
++  final (insn, file, 1);
++  final_end_function ();
++
++  reload_completed = 0;
++  epilogue_completed = 0;
++}
++
+ bool
+ microblaze_expand_move (enum machine_mode mode, rtx operands[])
+ {
+@@ -3234,65 +3308,45 @@
+   emit_move_insn (mem, fnaddr);
+ }
+ 
+
+-/* Emit instruction to perform compare.  
+-   cmp is (compare_op op0 op1).  */
+-static rtx
+-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
++/* Generate conditional branch -- first, generate test condition,
++   second, generate correct branch instruction.  */
++
++void
++microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
+ {
+-  rtx cmp_op0 = XEXP (cmp, 0);
+-  rtx cmp_op1 = XEXP (cmp, 1);
++  enum rtx_code code = GET_CODE (operands[0]);
++  rtx cmp_op0 = operands[1];
++  rtx cmp_op1 = operands[2];
++  rtx label1 = operands[3];
+   rtx comp_reg = gen_reg_rtx (SImode);
+-  enum rtx_code code = *cmp_code;
+-  
++  rtx condition;
++
+   gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
+ 
+   /* If comparing against zero, just test source reg.  */
+-  if (cmp_op1 == const0_rtx) 
+-    return cmp_op0;
++  if (cmp_op1 == const0_rtx)
++    {
++      comp_reg = cmp_op0;
++      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
++      emit_jump_insn (gen_condjump (condition, label1));
++    }
+ 
+-  if (code == EQ || code == NE)
++  else if (code == EQ || code == NE)
+     {
+       /* Use xor for equal/not-equal comparison.  */
+       emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
++      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
++      emit_jump_insn (gen_condjump (condition, label1));
+     }
+-  else if (code == GT || code == GTU || code == LE || code == LEU)
+-    {
+-      /* MicroBlaze compare is not symmetrical.  */
+-      /* Swap argument order.  */
+-      cmp_op1 = force_reg (mode, cmp_op1);
+-      if (code == GT || code == LE) 
+-        emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
+-      else
+-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
+-      /* Translate test condition.  */
+-      *cmp_code = swap_condition (code);
+-    }
+-  else /* if (code == GE || code == GEU || code == LT || code == LTU) */
++  else
+     {
++      /* Generate compare and branch in single instruction. */
+       cmp_op1 = force_reg (mode, cmp_op1);
+-      if (code == GE || code == LT) 
+-        emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
+-      else
+-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
++      condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
++      emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
+     }
+-
+-  return comp_reg;
+ }
+ 
+-/* Generate conditional branch -- first, generate test condition,
+-   second, generate correct branch instruction.  */
+-
+-void
+-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
+-{
+-  enum rtx_code code = GET_CODE (operands[0]);
+-  rtx comp;
+-  rtx condition;
+-
+-  comp = microblaze_emit_compare (mode, operands[0], &code);
+-  condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
+-  emit_jump_insn (gen_condjump (condition, operands[3]));
+-}
+ 
+ void
+ microblaze_expand_conditional_branch_sf (rtx operands[])
+@@ -3501,6 +3555,12 @@
+ #undef TARGET_SECONDARY_RELOAD
+ #define TARGET_SECONDARY_RELOAD		microblaze_secondary_reload
+ 
++#undef  TARGET_ASM_OUTPUT_MI_THUNK
++#define TARGET_ASM_OUTPUT_MI_THUNK      microblaze_asm_output_mi_thunk
++
++#undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
++#define TARGET_ASM_CAN_OUTPUT_MI_THUNK  hook_bool_const_tree_hwi_hwi_const_tree_true
++
+ #undef TARGET_SCHED_ADJUST_COST
+ #define TARGET_SCHED_ADJUST_COST	microblaze_adjust_cost
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/microblaze/microblaze.h gcc-4.8.2/gcc/config/microblaze/microblaze.h
+--- gcc-4.8.2.orig/gcc/config/microblaze/microblaze.h	2013-03-14 15:43:23.000000000 +0000
++++ gcc-4.8.2/gcc/config/microblaze/microblaze.h	2014-03-30 20:21:40.600927900 +0000
+@@ -213,6 +213,12 @@
+ #define STRICT_ALIGNMENT        1
+ #define PCC_BITFIELD_TYPE_MATTERS 1
+ 
++#undef SIZE_TYPE
++#define SIZE_TYPE "unsigned int"
++
++#undef PTRDIFF_TYPE
++#define PTRDIFF_TYPE "int"
++
+ #define CONSTANT_ALIGNMENT(EXP, ALIGN)					\
+   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)	\
+    && (ALIGN) < BITS_PER_WORD						\
+@@ -407,9 +413,6 @@
+ 	  || GET_MODE (X) == VOIDmode)					\
+ 	 ? (GR_REGS) : (CLASS))))
+ 
+-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE)			\
+-  (GET_MODE_CLASS (MODE) == MODE_INT)
+-
+ /* Stack layout; function entry, exit and calling.  */
+ 
+ #define STACK_GROWS_DOWNWARD
+diff -Naur gcc-4.8.2.orig/gcc/config/microblaze/microblaze.md gcc-4.8.2/gcc/config/microblaze/microblaze.md
+--- gcc-4.8.2.orig/gcc/config/microblaze/microblaze.md	2013-03-14 15:43:23.000000000 +0000
++++ gcc-4.8.2/gcc/config/microblaze/microblaze.md	2014-03-30 20:21:40.600927900 +0000
+@@ -74,7 +74,7 @@
+ ;; bshift 	Shift operations
+ 
+ (define_attr "type"
+-  "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt"
++  "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap"
+   (const_string "unknown"))
+ 
+ ;; Main data type used by the insn
+@@ -365,7 +365,8 @@
+   [(set (match_operand:HI 0 "register_operand" "=r")
+         (bswap:HI (match_operand:HI 1 "register_operand" "r")))]
+   "TARGET_REORDER"
+-  "swaph %0, %1"
++  "swapb %0, %1
++   swaph %0, %0"
+ )
+ 
+ ;;----------------------------------------------------------------
+@@ -1118,6 +1119,18 @@
+   }
+ )
+ 
++;;Load and store reverse
++(define_insn "movsi4_rev"
++  [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
++        (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
++  "TARGET_REORDER"
++  "@
++   lwr\t%0,%y1,r0
++   swr\t%1,%y0,r0"
++  [(set_attr "type"     "load,store")
++  (set_attr "mode"      "SI")
++  (set_attr "length"    "4,4")])
++
+ ;; 32-bit floating point moves
+ 
+ (define_expand "movsf"
+@@ -1472,7 +1485,7 @@
+   (set_attr "length"   "124")]
+ )
+ 
+-(define_insn "*ashlri_reg"
++(define_insn "*ashrsi_reg"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+        (ashiftrt:SI (match_operand:SI 1 "register_operand"  "d")
+                    (match_operand:SI 2 "register_operand" "d")))]
+@@ -1561,7 +1574,7 @@
+   (set_attr "length"   "124")]
+ )
+ 
+-(define_insn "*lshlri_reg"
++(define_insn "*lshrsi_reg"
+   [(set (match_operand:SI 0 "register_operand" "=&d")
+        (lshiftrt:SI (match_operand:SI 1 "register_operand"  "d")
+                    (match_operand:SI 2 "register_operand" "d")))]
+@@ -1622,34 +1635,12 @@
+   (set_attr "length"	"4")]
+ )              
+ 
+-(define_insn "signed_compare"
+-  [(set (match_operand:SI 0 "register_operand" "=d")
+-	(unspec
+-		[(match_operand:SI 1 "register_operand" "d")
+-		 (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
+-  ""
+-  "cmp\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
+-  (set_attr "mode"	"SI")
+-  (set_attr "length"	"4")])
+-
+-(define_insn "unsigned_compare"
+-  [(set (match_operand:SI 0 "register_operand" "=d")
+-	(unspec 
+-		[(match_operand:SI 1 "register_operand" "d")
+-		 (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
+-  ""
+-  "cmpu\t%0,%1,%2"
+-  [(set_attr "type"	"arith")
+-  (set_attr "mode"	"SI")
+-  (set_attr "length"	"4")])
+-
+ ;;----------------------------------------------------------------
+ ;; Setting a register from an floating point comparison. 
+ ;;----------------------------------------------------------------
+ (define_insn "cstoresf4"
+    [(set (match_operand:SI 0 "register_operand" "=r")
+-        (match_operator 1 "comparison_operator"
++        (match_operator:SI 1 "ordered_comparison_operator"
+ 	      [(match_operand:SF 2 "register_operand" "r")
+ 	       (match_operand:SF 3 "register_operand" "r")]))]
+   "TARGET_HARD_FLOAT"
+@@ -1678,7 +1669,7 @@
+ 
+ (define_expand "cbranchsf4"
+   [(set (pc)
+-	(if_then_else (match_operator 0 "comparison_operator"
++	(if_then_else (match_operator 0 "ordered_comparison_operator"
+ 		       [(match_operand:SF 1 "register_operand")
+ 		        (match_operand:SF 2 "register_operand")])
+ 		      (label_ref (match_operand 3 ""))
+@@ -1717,6 +1708,47 @@
+    (set_attr "length"	"4")]
+ )
+ 
++(define_insn "branch_compare"
++  [(set (pc)
++        (if_then_else (match_operator:SI 0 "cmp_op"
++                                         [(match_operand:SI 1 "register_operand" "d")
++                                          (match_operand:SI 2 "register_operand" "d")
++                                         ])
++                      (label_ref (match_operand 3))
++                      (pc)))
++  (clobber(reg:SI R_TMP))]
++  ""
++  {
++    operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
++    enum rtx_code code = GET_CODE (operands[0]);
++
++    if (code == GT || code == LE)
++      {
++        output_asm_insn ("cmp\tr18,%z1,%z2", operands);
++        code = swap_condition (code);
++      }
++    else if (code == GTU || code == LEU)
++      {
++        output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
++        code = swap_condition (code);
++      }
++    else if (code == GE || code == LT)
++      {
++        output_asm_insn ("cmp\tr18,%z2,%z1", operands);
++      }
++    else if (code == GEU || code == LTU)
++      {
++        output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
++      }
++
++    operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
++    return "b%C0i%?\tr18,%3";
++  }
++  [(set_attr "type"     "branch")
++   (set_attr "mode"     "none")
++   (set_attr "length"   "12")]
++)
++
+ ;;----------------------------------------------------------------
+ ;; Unconditional branches
+ ;;----------------------------------------------------------------
+@@ -2201,6 +2233,14 @@
+   (set_attr "mode"	"none")
+   (set_attr "length"	"4")])
+ 
++;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
++(define_insn "trap"
++  [(trap_if (const_int 1) (const_int 0))]
++  ""
++  "brki\tr0,-1"
++ [(set_attr "type" "trap")]
++)
++
+ ;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
+ ;; between "mfs" and "addik" instructions.
+ (define_insn "set_got"
+diff -Naur gcc-4.8.2.orig/gcc/config/microblaze/predicates.md gcc-4.8.2/gcc/config/microblaze/predicates.md
+--- gcc-4.8.2.orig/gcc/config/microblaze/predicates.md	2013-03-14 15:43:23.000000000 +0000
++++ gcc-4.8.2/gcc/config/microblaze/predicates.md	2014-03-30 20:21:40.604261087 +0000
+@@ -85,6 +85,10 @@
+   (ior (match_operand 0 "const_0_operand")
+        (match_operand 0 "register_operand")))
+ 
++(define_predicate "reg_or_mem_operand"
++  (ior (match_operand 0 "memory_operand")
++       (match_operand 0 "register_operand")))
++
+ ;;  Return if the operand is either the PC or a label_ref.  
+ (define_special_predicate "pc_or_label_operand"
+   (ior (match_code "pc,label_ref")
+@@ -119,3 +123,7 @@
+ ;; Test for valid PIC call operand
+ (define_predicate "call_insn_plt_operand"
+   (match_test "PLT_ADDR_P (op)"))
++
++;; Return if the code of this rtx pattern is a comparison.
++(define_predicate "cmp_op"
++  (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
+diff -Naur gcc-4.8.2.orig/gcc/config/mips/driver-native.c gcc-4.8.2/gcc/config/mips/driver-native.c
+--- gcc-4.8.2.orig/gcc/config/mips/driver-native.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/mips/driver-native.c	2014-03-30 20:21:40.604261087 +0000
+@@ -58,11 +58,17 @@
+     if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
+       {
+ 	if (strstr (buf, "Godson2 V0.2") != NULL
+-	    || strstr (buf, "Loongson-2 V0.2") != NULL)
++	    || strstr (buf, "Loongson-2 V0.2") != NULL
++	    || strstr (buf, "Loongson-2E") != NULL)
+ 	  cpu = "loongson2e";
+ 	else if (strstr (buf, "Godson2 V0.3") != NULL
+-		 || strstr (buf, "Loongson-2 V0.3") != NULL)
++		 || strstr (buf, "Loongson-2 V0.3") != NULL
++		 || strstr (buf, "Loongson-2F") != NULL)
+ 	  cpu = "loongson2f";
++	else if (strstr (buf, "Godson3 V0.5") != NULL
++		 || strstr (buf, "Loongson-3 V0.5") != NULL
++		 || strstr (buf, "Loongson-3A") != NULL)
++	  cpu = "loongson3a";
+ 	else if (strstr (buf, "SiByte SB1") != NULL)
+ 	  cpu = "sb1";
+ 	else if (strstr (buf, "R5000") != NULL)
+diff -Naur gcc-4.8.2.orig/gcc/config/mips/mips.c gcc-4.8.2/gcc/config/mips/mips.c
+--- gcc-4.8.2.orig/gcc/config/mips/mips.c	2013-02-25 13:53:16.000000000 +0000
++++ gcc-4.8.2/gcc/config/mips/mips.c	2014-03-30 20:21:40.604261087 +0000
+@@ -3560,17 +3560,6 @@
+     }
+ }
+ 
+-/* Return the cost of an operand X that can be trucated for free.
+-   SPEED says whether we're optimizing for size or speed.  */
+-
+-static int
+-mips_truncated_op_cost (rtx x, bool speed)
+-{
+-  if (GET_CODE (x) == TRUNCATE)
+-    x = XEXP (x, 0);
+-  return set_src_cost (x, speed);
+-}
+-
+ /* Implement TARGET_RTX_COSTS.  */
+ 
+ static bool
+@@ -3951,13 +3940,12 @@
+     case ZERO_EXTEND:
+       if (outer_code == SET
+ 	  && ISA_HAS_BADDU
++	  && (GET_CODE (XEXP (x, 0)) == TRUNCATE
++	      || GET_CODE (XEXP (x, 0)) == SUBREG)
+ 	  && GET_MODE (XEXP (x, 0)) == QImode
+-	  && GET_CODE (XEXP (x, 0)) == PLUS)
++	  && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
+ 	{
+-	  rtx plus = XEXP (x, 0);
+-	  *total = (COSTS_N_INSNS (1)
+-		    + mips_truncated_op_cost (XEXP (plus, 0), speed)
+-		    + mips_truncated_op_cost (XEXP (plus, 1), speed));
++	  *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
+ 	  return true;
+ 	}
+       *total = mips_zero_extend_cost (mode, XEXP (x, 0));
+@@ -8057,7 +8045,7 @@
+     case 't':
+       {
+ 	int truth = (code == NE) == (letter == 'T');
+-	fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
++	fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
+       }
+       break;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/mips/mips.h gcc-4.8.2/gcc/config/mips/mips.h
+--- gcc-4.8.2.orig/gcc/config/mips/mips.h	2013-02-25 13:53:16.000000000 +0000
++++ gcc-4.8.2/gcc/config/mips/mips.h	2014-03-30 20:21:40.607594317 +0000
+@@ -949,6 +949,11 @@
+ 				  || TARGET_SMARTMIPS)			\
+ 				 && !TARGET_MIPS16)
+ 
++/* ISA has the WSBH (word swap bytes within halfwords) instruction.
++   64-bit targets also provide DSBH and DSHD.  */
++#define ISA_HAS_WSBH		((ISA_MIPS32R2 || ISA_MIPS64R2)		\
++				 && !TARGET_MIPS16)
++
+ /* ISA has data prefetch instructions.  This controls use of 'pref'.  */
+ #define ISA_HAS_PREFETCH	((ISA_MIPS4				\
+ 				  || TARGET_LOONGSON_2EF		\
+diff -Naur gcc-4.8.2.orig/gcc/config/mips/mips.md gcc-4.8.2/gcc/config/mips/mips.md
+--- gcc-4.8.2.orig/gcc/config/mips/mips.md	2013-02-25 13:53:16.000000000 +0000
++++ gcc-4.8.2/gcc/config/mips/mips.md	2014-03-30 20:21:40.607594317 +0000
+@@ -73,6 +73,11 @@
+   UNSPEC_STORE_LEFT
+   UNSPEC_STORE_RIGHT
+ 
++  ;; Integer operations that are too cumbersome to describe directly.
++  UNSPEC_WSBH
++  UNSPEC_DSBH
++  UNSPEC_DSHD
++
+   ;; Floating-point moves.
+   UNSPEC_LOAD_LOW
+   UNSPEC_LOAD_HIGH
+@@ -1294,20 +1299,32 @@
+ 
+ ;; Combiner patterns for unsigned byte-add.
+ 
+-(define_insn "*baddu_si"
++(define_insn "*baddu_si_eb"
++  [(set (match_operand:SI 0 "register_operand" "=d")
++        (zero_extend:SI
++	 (subreg:QI
++	  (plus:SI (match_operand:SI 1 "register_operand" "d")
++		   (match_operand:SI 2 "register_operand" "d")) 3)))]
++  "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
++  "baddu\\t%0,%1,%2"
++  [(set_attr "alu_type" "add")])
++
++(define_insn "*baddu_si_el"
+   [(set (match_operand:SI 0 "register_operand" "=d")
+         (zero_extend:SI
+-	 (plus:QI (match_operand:QI 1 "register_operand" "d")
+-		  (match_operand:QI 2 "register_operand" "d"))))]
+-  "ISA_HAS_BADDU"
++	 (subreg:QI
++	  (plus:SI (match_operand:SI 1 "register_operand" "d")
++		   (match_operand:SI 2 "register_operand" "d")) 0)))]
++  "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
+   "baddu\\t%0,%1,%2"
+   [(set_attr "alu_type" "add")])
+ 
+ (define_insn "*baddu_di<mode>"
+   [(set (match_operand:GPR 0 "register_operand" "=d")
+         (zero_extend:GPR
+-	 (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
+-		  (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
++	 (truncate:QI
++	  (plus:DI (match_operand:DI 1 "register_operand" "d")
++		   (match_operand:DI 2 "register_operand" "d")))))]
+   "ISA_HAS_BADDU && TARGET_64BIT"
+   "baddu\\t%0,%1,%2"
+   [(set_attr "alu_type" "add")])
+@@ -5367,6 +5384,56 @@
+ }
+   [(set_attr "type" "shift")
+    (set_attr "mode" "<MODE>")])
++
++(define_insn "bswaphi2"
++  [(set (match_operand:HI 0 "register_operand" "=d")
++	(bswap:HI (match_operand:HI 1 "register_operand" "d")))]
++  "ISA_HAS_WSBH"
++  "wsbh\t%0,%1"
++  [(set_attr "type" "shift")])
++
++(define_insn_and_split "bswapsi2"
++  [(set (match_operand:SI 0 "register_operand" "=d")
++	(bswap:SI (match_operand:SI 1 "register_operand" "d")))]
++  "ISA_HAS_WSBH && ISA_HAS_ROR"
++  "#"
++  ""
++  [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
++   (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
++  ""
++  [(set_attr "length" "8")])
++
++(define_insn_and_split "bswapdi2"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(bswap:DI (match_operand:DI 1 "register_operand" "d")))]
++  "TARGET_64BIT && ISA_HAS_WSBH"
++  "#"
++  ""
++  [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
++   (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
++  ""
++  [(set_attr "length" "8")])
++
++(define_insn "wsbh"
++  [(set (match_operand:SI 0 "register_operand" "=d")
++	(unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
++  "ISA_HAS_WSBH"
++  "wsbh\t%0,%1"
++  [(set_attr "type" "shift")])
++
++(define_insn "dsbh"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
++  "TARGET_64BIT && ISA_HAS_WSBH"
++  "dsbh\t%0,%1"
++  [(set_attr "type" "shift")])
++
++(define_insn "dshd"
++  [(set (match_operand:DI 0 "register_operand" "=d")
++	(unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
++  "TARGET_64BIT && ISA_HAS_WSBH"
++  "dshd\t%0,%1"
++  [(set_attr "type" "shift")])
+ 
+
+ ;;
+ ;;  ....................
+diff -Naur gcc-4.8.2.orig/gcc/config/pa/pa.c gcc-4.8.2/gcc/config/pa/pa.c
+--- gcc-4.8.2.orig/gcc/config/pa/pa.c	2013-09-21 00:00:38.000000000 +0000
++++ gcc-4.8.2/gcc/config/pa/pa.c	2014-03-30 20:21:40.607594317 +0000
+@@ -912,9 +912,12 @@
+ legitimize_tls_address (rtx addr)
+ {
+   rtx ret, insn, tmp, t1, t2, tp;
+-  enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
+ 
+-  switch (model) 
++  /* Currently, we can't handle anything but a SYMBOL_REF.  */
++  if (GET_CODE (addr) != SYMBOL_REF)
++    return addr;
++
++  switch (SYMBOL_REF_TLS_MODEL (addr)) 
+     {
+       case TLS_MODEL_GLOBAL_DYNAMIC:
+ 	tmp = gen_reg_rtx (Pmode);
+@@ -1035,7 +1038,7 @@
+       && !REG_POINTER (XEXP (x, 1)))
+     return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
+ 
+-  if (PA_SYMBOL_REF_TLS_P (x))
++  if (pa_tls_referenced_p (x))
+     return legitimize_tls_address (x);
+   else if (flag_pic)
+     return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
+@@ -1916,9 +1919,10 @@
+      not consider them legitimate constants.  Loop optimizations can
+      call the emit_move_xxx with one as a source.  */
+   if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
+-      || function_label_operand (operand1, VOIDmode)
+       || (GET_CODE (operand1) == HIGH
+-	  && symbolic_operand (XEXP (operand1, 0), mode)))
++	  && symbolic_operand (XEXP (operand1, 0), mode))
++      || function_label_operand (operand1, VOIDmode)
++      || pa_tls_referenced_p (operand1))
+     {
+       int ishighonly = 0;
+ 
+@@ -2625,14 +2629,14 @@
+   if (optype0 == REGOP)
+     latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+   else if (optype0 == OFFSOP)
+-    latehalf[0] = adjust_address (operands[0], SImode, 4);
++    latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
+   else
+     latehalf[0] = operands[0];
+ 
+   if (optype1 == REGOP)
+     latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
+   else if (optype1 == OFFSOP)
+-    latehalf[1] = adjust_address (operands[1], SImode, 4);
++    latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
+   else if (optype1 == CNSTOP)
+     split_double (operands[1], &operands[1], &latehalf[1]);
+   else
+@@ -7539,7 +7543,7 @@
+       if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
+ 	return 8;
+ 
+-      if (TARGET_LONG_ABS_CALL && !flag_pic)
++      if (!flag_pic)
+ 	return 12;
+ 
+       return 24;
+@@ -8104,7 +8108,8 @@
+     return 12;
+ 
+   if (TARGET_FAST_INDIRECT_CALLS
+-      || (!TARGET_PORTABLE_RUNTIME
++      || (!TARGET_LONG_CALLS
++	  && !TARGET_PORTABLE_RUNTIME
+ 	  && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
+ 	      || distance < MAX_PCREL17F_OFFSET)))
+     return 8;
+@@ -10397,7 +10402,7 @@
+   /* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
+      legitimate constants.  The other variants can't be handled by
+      the move patterns after reload starts.  */
+-  if (PA_SYMBOL_REF_TLS_P (x))
++  if (pa_tls_referenced_p (x))
+     return false;
+ 
+   if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
+@@ -10522,13 +10527,13 @@
+ 
+ 	  /* When INT14_OK_STRICT is false, a secondary reload is needed
+ 	     to adjust the displacement of SImode and DImode floating point
+-	     instructions.  So, we return false when STRICT is true.  We
++	     instructions but this may fail when the register also needs
++	     reloading.  So, we return false when STRICT is true.  We
+ 	     also reject long displacements for float mode addresses since
+ 	     the majority of accesses will use floating point instructions
+ 	     that don't support 14-bit offsets.  */
+ 	  if (!INT14_OK_STRICT
+-	      && reload_in_progress
+-	      && strict
++	      && (strict || !(reload_in_progress || reload_completed))
+ 	      && mode != QImode
+ 	      && mode != HImode)
+ 	    return false;
+@@ -10588,8 +10593,7 @@
+ 	    return true;
+ 
+ 	  if (!INT14_OK_STRICT
+-	      && reload_in_progress
+-	      && strict
++	      && (strict || !(reload_in_progress || reload_completed))
+ 	      && mode != QImode
+ 	      && mode != HImode)
+ 	    return false;
+diff -Naur gcc-4.8.2.orig/gcc/config/pa/pa.h gcc-4.8.2/gcc/config/pa/pa.h
+--- gcc-4.8.2.orig/gcc/config/pa/pa.h	2013-02-03 19:52:37.000000000 +0000
++++ gcc-4.8.2/gcc/config/pa/pa.h	2014-03-30 20:21:40.610927611 +0000
+@@ -784,9 +784,9 @@
+ 
+ #define MAX_REGS_PER_ADDRESS 2
+ 
+-/* Non-TLS symbolic references.  */
+-#define PA_SYMBOL_REF_TLS_P(RTX) \
+-  (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
++/* TLS symbolic reference.  */
++#define PA_SYMBOL_REF_TLS_P(X) \
++  (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
+ 
+ /* Recognize any constant value that is a valid address except
+    for symbolic addresses.  We get better CSE by rejecting them
+@@ -796,7 +796,8 @@
+ #define CONSTANT_ADDRESS_P(X) \
+   ((GET_CODE (X) == LABEL_REF 						\
+    || (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X))		\
+-   || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST		\
++   || GET_CODE (X) == CONST_INT						\
++   || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X))		\
+    || GET_CODE (X) == HIGH) 						\
+    && (reload_in_progress || reload_completed				\
+        || ! pa_symbolic_expression_p (X)))
+diff -Naur gcc-4.8.2.orig/gcc/config/rs6000/rs6000.c gcc-4.8.2/gcc/config/rs6000/rs6000.c
+--- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.c	2013-09-23 14:19:31.000000000 +0000
++++ gcc-4.8.2/gcc/config/rs6000/rs6000.c	2014-03-30 20:21:40.614260916 +0000
+@@ -5428,12 +5428,13 @@
+       break;
+ 
+     case TFmode:
+-    case TDmode:
+-    case TImode:
+       if (TARGET_E500_DOUBLE)
+ 	return (SPE_CONST_OFFSET_OK (offset)
+ 		&& SPE_CONST_OFFSET_OK (offset + 8));
++      /* fall through */
+ 
++    case TDmode:
++    case TImode:
+       extra = 8;
+       if (!worst_case)
+ 	break;
+diff -Naur gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md gcc-4.8.2/gcc/config/rs6000/rs6000.md
+--- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md	2013-09-23 14:27:06.000000000 +0000
++++ gcc-4.8.2/gcc/config/rs6000/rs6000.md	2014-03-30 20:21:40.614260916 +0000
+@@ -2412,7 +2412,7 @@
+ 			     (match_operand:SI 2 "gpc_reg_operand" "r,r"))
+ 		    (const_int 0)))
+    (clobber (match_scratch:SI 3 "=r,r"))]
+-  ""
++  "TARGET_32BIT"
+   "@
+    mullw. %3,%1,%2
+    #"
+@@ -2425,7 +2425,7 @@
+ 			     (match_operand:SI 2 "gpc_reg_operand" ""))
+ 		    (const_int 0)))
+    (clobber (match_scratch:SI 3 ""))]
+-  "reload_completed"
++  "TARGET_32BIT && reload_completed"
+   [(set (match_dup 3)
+ 	(mult:SI (match_dup 1) (match_dup 2)))
+    (set (match_dup 0)
+@@ -2440,7 +2440,7 @@
+ 		    (const_int 0)))
+    (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
+ 	(mult:SI (match_dup 1) (match_dup 2)))]
+-  ""
++  "TARGET_32BIT"
+   "@
+    mullw. %0,%1,%2
+    #"
+@@ -2454,7 +2454,7 @@
+ 		    (const_int 0)))
+    (set (match_operand:SI 0 "gpc_reg_operand" "")
+ 	(mult:SI (match_dup 1) (match_dup 2)))]
+-  "reload_completed"
++  "TARGET_32BIT && reload_completed"
+   [(set (match_dup 0)
+ 	(mult:SI (match_dup 1) (match_dup 2)))
+    (set (match_dup 3)
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/htmxlintrin.h gcc-4.8.2/gcc/config/s390/htmxlintrin.h
+--- gcc-4.8.2.orig/gcc/config/s390/htmxlintrin.h	2013-08-14 19:44:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/htmxlintrin.h	2014-03-30 20:21:40.614260916 +0000
+@@ -33,13 +33,20 @@
+    the IBM XL compiler.  For documentation please see the "z/OS XL
+    C/C++ Programming Guide" publically available on the web.  */
+ 
+-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
++/* FIXME: __TM_simple_begin and __TM_begin should be marked
++   __always_inline__ as well but this currently produces an error
++   since the tbegin builtins are "returns_twice" and setjmp_call_p
++   (calls.c) therefore identifies the functions as calling setjmp.
++   The tree inliner currently refuses to inline functions calling
++   setjmp.  */
++
++long
+ __TM_simple_begin ()
+ {
+   return __builtin_tbegin_nofloat (0);
+ }
+ 
+-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
++long
+ __TM_begin (void* const tdb)
+ {
+   return __builtin_tbegin_nofloat (tdb);
+@@ -78,7 +85,7 @@
+   if (depth != 0)
+     return depth;
+ 
+-  if (tdb->format == 0)
++  if (tdb->format != 1)
+     return 0;
+   return tdb->nesting_depth;
+ }
+@@ -90,7 +97,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  if (tdb->format == 0)
++  if (tdb->format != 1)
+     return 0;
+ 
+   return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
+@@ -101,7 +108,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  if (tdb->format == 0)
++  if (tdb->format != 1)
+     return 0;
+ 
+   if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
+@@ -117,7 +124,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  return (tdb->format == 0
++  return (tdb->format == 1
+ 	  && (tdb->abort_code == 4 /* unfiltered program interruption */
+ 	      || tdb->abort_code == 11 /* restricted instruction */));
+ }
+@@ -127,7 +134,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  return (tdb->format == 0
++  return (tdb->format == 1
+ 	  && (tdb->abort_code == 7 /* fetch overflow */
+ 	      || tdb->abort_code == 8 /* store overflow */));
+ }
+@@ -137,7 +144,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
++  return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
+ }
+ 
+ extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+@@ -145,7 +152,7 @@
+ {
+   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
+ 
+-  return (tdb->format == 0
++  return (tdb->format == 1
+ 	  && (tdb->abort_code == 9 /* fetch conflict */
+ 	      || tdb->abort_code == 10 /* store conflict */));
+ }
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/s390-protos.h gcc-4.8.2/gcc/config/s390/s390-protos.h
+--- gcc-4.8.2.orig/gcc/config/s390/s390-protos.h	2013-08-02 15:41:10.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/s390-protos.h	2014-03-30 20:21:40.617594188 +0000
+@@ -110,5 +110,6 @@
+ extern int s390_branch_condition_mask (rtx);
+ extern int s390_compare_and_branch_condition_mask (rtx);
+ extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
++extern void s390_asm_output_function_label (FILE *, const char *, tree);
+ 
+ #endif /* RTX_CODE */
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/s390.c gcc-4.8.2/gcc/config/s390/s390.c
+--- gcc-4.8.2.orig/gcc/config/s390/s390.c	2013-10-07 07:47:17.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/s390.c	2014-03-30 20:21:40.617594188 +0000
+@@ -407,6 +407,65 @@
+    bytes on a z10 (or higher) CPU.  */
+ #define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
+ 
++static const int s390_hotpatch_trampoline_halfwords_default = 12;
++static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
++static int s390_hotpatch_trampoline_halfwords = -1;
++
++/* Return the argument of the given hotpatch attribute or the default value if
++   no argument is present.  */
++
++static inline int
++get_hotpatch_attribute (tree hotpatch_attr)
++{
++  const_tree args;
++
++  args = TREE_VALUE (hotpatch_attr);
++
++  return (args) ?
++    TREE_INT_CST_LOW (TREE_VALUE (args)):
++    s390_hotpatch_trampoline_halfwords_default;
++}
++
++/* Check whether the hotpatch attribute is applied to a function and, if it has
++   an argument, the argument is valid.  */
++
++static tree
++s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
++				int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
++{
++  if (TREE_CODE (*node) != FUNCTION_DECL)
++    {
++      warning (OPT_Wattributes, "%qE attribute only applies to functions",
++	       name);
++      *no_add_attrs = true;
++    }
++  else if (args)
++    {
++      tree expr = TREE_VALUE (args);
++
++      if (TREE_CODE (expr) != INTEGER_CST
++	  || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
++	  || TREE_INT_CST_HIGH (expr) != 0
++	  || TREE_INT_CST_LOW (expr) > (unsigned int)
++	  s390_hotpatch_trampoline_halfwords_max)
++	{
++	  error ("requested %qE attribute is not a non-negative integer"
++		 " constant or too large (max. %d)", name,
++		 s390_hotpatch_trampoline_halfwords_max);
++	  *no_add_attrs = true;
++	}
++    }
++
++  return NULL_TREE;
++}
++
++static const struct attribute_spec s390_attribute_table[] = {
++  { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
++  },
++  /* End element.  */
++  { NULL,        0, 0, false, false, false, NULL, false }
++};
++
+ /* Return the alignment for LABEL.  We default to the -falign-labels
+    value except for the literal pool base label.  */
+ int
+@@ -883,7 +942,8 @@
+ 	{
+ 	  /* For CCRAWmode put the required cc mask into the second
+ 	     operand.  */
+-	  if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
++        if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
++            && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
+ 	    *op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
+ 	  *op0 = XVECEXP (*op0, 0, 0);
+ 	  *code = new_code;
+@@ -1594,6 +1654,46 @@
+ static void
+ s390_option_override (void)
+ {
++  unsigned int i;
++  cl_deferred_option *opt;
++  vec<cl_deferred_option> *v =
++    (vec<cl_deferred_option> *) s390_deferred_options;
++
++  if (v)
++    FOR_EACH_VEC_ELT (*v, i, opt)
++      {
++	switch (opt->opt_index)
++	  {
++	  case OPT_mhotpatch:
++	    s390_hotpatch_trampoline_halfwords = (opt->value) ?
++	      s390_hotpatch_trampoline_halfwords_default : -1;
++	    break;
++	  case OPT_mhotpatch_:
++	    {
++	      int val;
++
++	      val = integral_argument (opt->arg);
++	      if (val == -1)
++		{
++		  /* argument is not a plain number */
++		  error ("argument to %qs should be a non-negative integer",
++			 "-mhotpatch=");
++		  break;
++		}
++	      else if (val > s390_hotpatch_trampoline_halfwords_max)
++		{
++		  error ("argument to %qs is too large (max. %d)",
++			 "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
++		  break;
++		}
++	      s390_hotpatch_trampoline_halfwords = val;
++	      break;
++	    }
++	  default:
++	    gcc_unreachable ();
++	  }
++      }
++
+   /* Set up function hooks.  */
+   init_machine_status = s390_init_machine_status;
+ 
+@@ -3015,15 +3115,22 @@
+ 	 prefer ADDR_REGS.  If 'class' is not a superset
+ 	 of ADDR_REGS, e.g. FP_REGS, reject this reload.  */
+       case CONST:
+-	/* A larl operand with odd addend will get fixed via secondary
+-	   reload.  So don't request it to be pushed into literal
+-	   pool.  */
++	/* Symrefs cannot be pushed into the literal pool with -fPIC
++	   so we *MUST NOT* return NO_REGS for these cases
++	   (s390_cannot_force_const_mem will return true).  
++
++	   On the other hand we MUST return NO_REGS for symrefs with
++	   invalid addend which might have been pushed to the literal
++	   pool (no -fPIC).  Usually we would expect them to be
++	   handled via secondary reload but this does not happen if
++	   they are used as literal pool slot replacement in reload
++	   inheritance (see emit_input_reload_insns).  */
+ 	if (TARGET_CPU_ZARCH
+ 	    && GET_CODE (XEXP (op, 0)) == PLUS
+ 	    && GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
+ 	    && GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
+ 	  {
+-	    if (reg_class_subset_p (ADDR_REGS, rclass))
++	    if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
+ 	      return ADDR_REGS;
+ 	    else
+ 	      return NO_REGS;
+@@ -5311,6 +5418,101 @@
+   gcc_unreachable ();
+ }
+ 
++/* Returns -1 if the function should not be made hotpatchable.  Otherwise it
++   returns a number >= 0 that is the desired size of the hotpatch trampoline
++   in halfwords. */
++
++static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
++							    bool do_warn)
++{
++  tree attr;
++
++  if (DECL_DECLARED_INLINE_P (decl)
++      || DECL_ARTIFICIAL (decl)
++      || MAIN_NAME_P (DECL_NAME (decl)))
++    {
++      /* - Explicitly inlined functions cannot be hotpatched.
++	 - Artificial functions need not be hotpatched.
++	 - Making the main function hotpatchable is useless. */
++      return -1;
++    }
++  attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
++  if (attr || s390_hotpatch_trampoline_halfwords >= 0)
++    {
++      if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
++	{
++	  if (do_warn)
++	    warning (OPT_Wattributes, "function %qE with the %qs attribute"
++		     " is not hotpatchable", DECL_NAME (decl), "always_inline");
++	  return -1;
++	}
++      else
++	{
++	  return (attr) ?
++	    get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
++	}
++    }
++
++  return -1;
++}
++
++/* Hook to determine if one function can safely inline another.  */
++
++static bool
++s390_can_inline_p (tree caller, tree callee)
++{
++  if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
++    return false;
++
++  return default_target_can_inline_p (caller, callee);
++}
++
++/* Write the extra assembler code needed to declare a function properly.  */
++
++void
++s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
++				tree decl)
++{
++  int hotpatch_trampoline_halfwords = -1;
++
++  if (decl)
++    {
++      hotpatch_trampoline_halfwords =
++	s390_function_num_hotpatch_trampoline_halfwords (decl, true);
++      if (hotpatch_trampoline_halfwords >= 0
++	  && decl_function_context (decl) != NULL_TREE)
++	{
++	  warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
++		      "hotpatching is not compatible with nested functions");
++	  hotpatch_trampoline_halfwords = -1;
++	}
++    }
++
++  if (hotpatch_trampoline_halfwords > 0)
++    {
++      int i;
++
++      /* Add a trampoline code area before the function label and initialize it
++	 with two-byte nop instructions.  This area can be overwritten with code
++	 that jumps to a patched version of the function.  */
++      for (i = 0; i < hotpatch_trampoline_halfwords; i++)
++	asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
++      /* Note:  The function label must be aligned so that (a) the bytes of the
++	 following nop do not cross a cacheline boundary, and (b) a jump address
++	 (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
++	 stored directly before the label without crossing a cacheline
++	 boundary.  All this is necessary to make sure the trampoline code can
++	 be changed atomically.  */
++    }
++
++  ASM_OUTPUT_LABEL (asm_out_file, fname);
++
++  /* Output a four-byte nop if hotpatching is enabled.  This can be overwritten
++     atomically with a relative backwards jump to the trampoline area.  */
++  if (hotpatch_trampoline_halfwords >= 0)
++    asm_fprintf (asm_out_file, "\tnop\t0\n");
++}
++
+ /* Output machine-dependent UNSPECs occurring in address constant X
+    in assembler syntax to stdio stream FILE.  Returns true if the
+    constant X could be recognized, false otherwise.  */
+@@ -7846,6 +8048,9 @@
+     {
+       bb = BASIC_BLOCK (bb_index);
+ 
++      if (!bb)
++	continue;
++
+       FOR_BB_INSNS (bb, insn)
+ 	{
+ 	  rtx ite, cc, pat, target;
+@@ -7959,7 +8164,10 @@
+   if (!result)
+     return;
+ 
+-  PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
++  PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
++			    gen_rtvec (2,
++				       XVECEXP (PATTERN (tbegin_insn), 0, 0),
++				       XVECEXP (PATTERN (tbegin_insn), 0, 1)));
+   INSN_CODE (tbegin_insn) = -1;
+   df_insn_rescan (tbegin_insn);
+ 
+@@ -9568,61 +9776,47 @@
+ void
+ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
+ {
+-  const int CC0 = 1 << 3;
+-  const int CC1 = 1 << 2;
+-  const int CC3 = 1 << 0;
+-  rtx abort_label = gen_label_rtx ();
+-  rtx leave_label = gen_label_rtx ();
++  rtx retry_plus_two = gen_reg_rtx (SImode);
+   rtx retry_reg = gen_reg_rtx (SImode);
+   rtx retry_label = NULL_RTX;
+-  rtx jump;
+-  rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
+ 
+   if (retry != NULL_RTX)
+     {
+       emit_move_insn (retry_reg, retry);
++      emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
++      emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
+       retry_label = gen_label_rtx ();
+       emit_label (retry_label);
+     }
+ 
+   if (clobber_fprs_p)
+-    emit_insn (gen_tbegin_1 (tdb,
+-		 gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
++    emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
+   else
+-    emit_insn (gen_tbegin_nofloat_1 (tdb,
+-		 gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
+-
+-  jump = s390_emit_jump (abort_label,
+-			 gen_rtx_NE (VOIDmode,
+-				     gen_rtx_REG (CCRAWmode, CC_REGNUM),
+-				     gen_rtx_CONST_INT (VOIDmode, CC0)));
++    emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
++				     tdb));
+ 
+-  JUMP_LABEL (jump) = abort_label;
+-  LABEL_NUSES (abort_label) = 1;
+-  add_reg_note (jump, REG_BR_PROB, very_unlikely);
+-
+-  /* Initialize CC return value.  */
+-  emit_move_insn (dest, const0_rtx);
+-
+-  s390_emit_jump (leave_label, NULL_RTX);
+-  LABEL_NUSES (leave_label) = 1;
+-  emit_barrier ();
+-
+-  /* Abort handler code.  */
+-
+-  emit_label (abort_label);
++  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
++					gen_rtvec (1, gen_rtx_REG (CCRAWmode,
++								   CC_REGNUM)),
++					UNSPEC_CC_TO_INT));
+   if (retry != NULL_RTX)
+     {
++      const int CC0 = 1 << 3;
++      const int CC1 = 1 << 2;
++      const int CC3 = 1 << 0;
++      rtx jump;
+       rtx count = gen_reg_rtx (SImode);
++      rtx leave_label = gen_label_rtx ();
++
++      /* Exit for success and permanent failures.  */
+       jump = s390_emit_jump (leave_label,
+ 			     gen_rtx_EQ (VOIDmode,
+ 			       gen_rtx_REG (CCRAWmode, CC_REGNUM),
+-			       gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
+-      LABEL_NUSES (leave_label) = 2;
+-      add_reg_note (jump, REG_BR_PROB, very_unlikely);
++			       gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
++      LABEL_NUSES (leave_label) = 1;
+ 
+       /* CC2 - transient failure. Perform retry with ppa.  */
+-      emit_move_insn (count, retry);
++      emit_move_insn (count, retry_plus_two);
+       emit_insn (gen_subsi3 (count, count, retry_reg));
+       emit_insn (gen_tx_assist (count));
+       jump = emit_jump_insn (gen_doloop_si64 (retry_label,
+@@ -9630,13 +9824,8 @@
+ 					      retry_reg));
+       JUMP_LABEL (jump) = retry_label;
+       LABEL_NUSES (retry_label) = 1;
++      emit_label (leave_label);
+     }
+-
+-  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
+-					gen_rtvec (1, gen_rtx_REG (CCRAWmode,
+-								   CC_REGNUM)),
+-					UNSPEC_CC_TO_INT));
+-  emit_label (leave_label);
+ }
+ 
+ /* Builtins.  */
+@@ -9674,6 +9863,9 @@
+ s390_init_builtins (void)
+ {
+   tree ftype, uint64_type;
++  tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
++				       NULL, NULL);
++  tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
+ 
+   /* void foo (void) */
+   ftype = build_function_type_list (void_type_node, NULL_TREE);
+@@ -9684,17 +9876,17 @@
+   ftype = build_function_type_list (void_type_node, integer_type_node,
+ 				    NULL_TREE);
+   add_builtin_function ("__builtin_tabort", ftype,
+-			S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
++			S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
+   add_builtin_function ("__builtin_tx_assist", ftype,
+ 			S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
+ 
+   /* int foo (void *) */
+   ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
+   add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
+-			BUILT_IN_MD, NULL, NULL_TREE);
++			BUILT_IN_MD, NULL, returns_twice_attr);
+   add_builtin_function ("__builtin_tbegin_nofloat", ftype,
+ 			S390_BUILTIN_TBEGIN_NOFLOAT,
+-			BUILT_IN_MD, NULL, NULL_TREE);
++			BUILT_IN_MD, NULL, returns_twice_attr);
+ 
+   /* int foo (void *, int) */
+   ftype = build_function_type_list (integer_type_node, ptr_type_node,
+@@ -9702,11 +9894,11 @@
+   add_builtin_function ("__builtin_tbegin_retry", ftype,
+ 			S390_BUILTIN_TBEGIN_RETRY,
+ 			BUILT_IN_MD,
+-			NULL, NULL_TREE);
++			NULL, returns_twice_attr);
+   add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
+ 			S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
+ 			BUILT_IN_MD,
+-			NULL, NULL_TREE);
++			NULL, returns_twice_attr);
+ 
+   /* int foo (void) */
+   ftype = build_function_type_list (integer_type_node, NULL_TREE);
+@@ -11622,6 +11814,12 @@
+ #undef TARGET_CANONICALIZE_COMPARISON
+ #define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
+ 
++#undef TARGET_ATTRIBUTE_TABLE
++#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
++
++#undef TARGET_CAN_INLINE_P
++#define TARGET_CAN_INLINE_P s390_can_inline_p
++
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
+ #include "gt-s390.h"
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/s390.h gcc-4.8.2/gcc/config/s390/s390.h
+--- gcc-4.8.2.orig/gcc/config/s390/s390.h	2013-08-02 15:41:10.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/s390.h	2014-03-30 20:21:40.617594188 +0000
+@@ -217,7 +217,7 @@
+ #define STACK_BOUNDARY 64
+ 
+ /* Allocation boundary (in *bits*) for the code of a function.  */
+-#define FUNCTION_BOUNDARY 32
++#define FUNCTION_BOUNDARY 64
+ 
+ /* There is no point aligning anything to a rounder boundary than this.  */
+ #define BIGGEST_ALIGNMENT 64
+@@ -878,6 +878,9 @@
+   fputc ('\n', (FILE));							\
+ } while (0)
+ 
++#undef ASM_OUTPUT_FUNCTION_LABEL
++#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
++  s390_asm_output_function_label (FILE, NAME, DECL)
+ 
+ /* Miscellaneous parameters.  */
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/s390.md gcc-4.8.2/gcc/config/s390/s390.md
+--- gcc-4.8.2.orig/gcc/config/s390/s390.md	2013-10-07 07:45:12.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/s390.md	2014-03-30 20:21:40.617594188 +0000
+@@ -147,6 +147,7 @@
+ 
+    ; Transactional Execution support
+    UNSPECV_TBEGIN
++   UNSPECV_TBEGIN_TDB
+    UNSPECV_TBEGINC
+    UNSPECV_TEND
+    UNSPECV_TABORT
+@@ -9896,9 +9897,10 @@
+ 
+ (define_insn "tbegin_1"
+   [(set (reg:CCRAW CC_REGNUM)
+-	(unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
+-				(match_operand     1 "const_int_operand" " D")]
++	(unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
+ 			       UNSPECV_TBEGIN))
++   (set (match_operand:BLK 1 "memory_operand" "=Q")
++	(unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
+    (clobber (reg:DF 16))
+    (clobber (reg:DF 17))
+    (clobber (reg:DF 18))
+@@ -9917,18 +9919,19 @@
+    (clobber (reg:DF 31))]
+ ; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
+ ; not supposed to be used for immediates (see genpreds.c).
+-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
+-  "tbegin\t%0,%x1"
++  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
++  "tbegin\t%1,%x0"
+   [(set_attr "op_type" "SIL")])
+ 
+ ; Same as above but without the FPR clobbers
+ (define_insn "tbegin_nofloat_1"
+   [(set (reg:CCRAW CC_REGNUM)
+-	(unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
+-				(match_operand     1 "const_int_operand" " D")]
+-			       UNSPECV_TBEGIN))]
+-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
+-  "tbegin\t%0,%x1"
++	(unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
++			       UNSPECV_TBEGIN))
++   (set (match_operand:BLK 1 "memory_operand" "=Q")
++	(unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
++  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
++  "tbegin\t%1,%x0"
+   [(set_attr "op_type" "SIL")])
+ 
+ 
+@@ -10012,15 +10015,12 @@
+ ; Transaction perform processor assist
+ 
+ (define_expand "tx_assist"
+-  [(set (match_dup 1) (const_int 0))
+-   (unspec_volatile [(match_operand:SI 0 "register_operand" "")
+-		     (match_dup 1)
++  [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
++		     (reg:SI GPR0_REGNUM)
+ 		     (const_int 1)]
+ 		    UNSPECV_PPA)]
+   "TARGET_HTM"
+-{
+-  operands[1] = gen_reg_rtx (SImode);
+-})
++  "")
+ 
+ (define_insn "*ppa"
+   [(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
+@@ -10028,5 +10028,5 @@
+ 		     (match_operand 2 "const_int_operand" "I")]
+ 		    UNSPECV_PPA)]
+   "TARGET_HTM && INTVAL (operands[2]) < 16"
+-  "ppa\t%0,%1,1"
++  "ppa\t%0,%1,%2"
+   [(set_attr "op_type" "RRF")])
+diff -Naur gcc-4.8.2.orig/gcc/config/s390/s390.opt gcc-4.8.2/gcc/config/s390/s390.opt
+--- gcc-4.8.2.orig/gcc/config/s390/s390.opt	2013-08-02 15:41:10.000000000 +0000
++++ gcc-4.8.2/gcc/config/s390/s390.opt	2014-03-30 20:21:40.617594188 +0000
+@@ -96,6 +96,14 @@
+ Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
+ Enable hardware floating point
+ 
++mhotpatch
++Target Report Var(s390_deferred_options) Defer
++Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
++
++mhotpatch=
++Target RejectNegative Report Joined Var(s390_deferred_options) Defer
++Prepend the function label with the given number of two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
++
+ mlong-double-128
+ Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
+ Use 128-bit long double
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/constraints.md gcc-4.8.2/gcc/config/sh/constraints.md
+--- gcc-4.8.2.orig/gcc/config/sh/constraints.md	2013-02-03 20:06:01.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/constraints.md	2014-03-30 20:21:40.617594188 +0000
+@@ -221,6 +221,7 @@
+ (define_constraint "Q"
+   "A pc relative load operand."
+   (and (match_code "mem")
++       (match_test "GET_MODE (op) != QImode")
+        (match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
+ 
+ (define_constraint "Bsc"
+@@ -295,13 +296,15 @@
+ 
+ (define_memory_constraint "Sdd"
+   "A memory reference that uses displacement addressing."
+-  (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
++  (and (match_code "mem")
++       (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
+        (match_test "REG_P (XEXP (XEXP (op, 0), 0))")
+        (match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
+ 
+ (define_memory_constraint "Snd"
+   "A memory reference that excludes displacement addressing."
+-  (match_test "! satisfies_constraint_Sdd (op)"))
++  (and (match_code "mem")
++       (match_test "! satisfies_constraint_Sdd (op)")))
+ 
+ (define_memory_constraint "Sbv"
+   "A memory reference, as used in SH2A bclr.b, bset.b, etc."
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/predicates.md gcc-4.8.2/gcc/config/sh/predicates.md
+--- gcc-4.8.2.orig/gcc/config/sh/predicates.md	2013-02-03 20:06:01.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/predicates.md	2014-03-30 20:21:40.620927576 +0000
+@@ -389,6 +389,12 @@
+ 					   XEXP (XEXP (op, 0), 1),
+ 					   TARGET_SH2A, true)")))
+ 
++;; Returns true if OP is a displacement address that can fit into a
++;; 16 bit (non-SH2A) memory load / store insn.
++(define_predicate "short_displacement_mem_operand"
++  (match_test "sh_disp_addr_displacement (op)
++	       <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
++
+ ;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
+ (define_predicate "zero_extend_movu_operand"
+   (and (match_operand 0 "displacement_mem_operand")
+@@ -413,6 +419,11 @@
+   if (t_reg_operand (op, mode))
+     return 0;
+ 
++  /* Disallow PC relative QImode loads, since these is no insn to do that
++     and an imm8 load should be used instead.  */
++  if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
++    return false;
++
+   if (MEM_P (op))
+     {
+       rtx inside = XEXP (op, 0);
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh-protos.h gcc-4.8.2/gcc/config/sh/sh-protos.h
+--- gcc-4.8.2.orig/gcc/config/sh/sh-protos.h	2013-02-03 20:06:01.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/sh-protos.h	2014-03-30 20:21:40.624261021 +0000
+@@ -159,6 +159,8 @@
+ extern bool sh_cfun_trap_exit_p (void);
+ extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
+ extern int sh_eval_treg_value (rtx op);
++extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
++extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
+ 
+ /* Result value of sh_find_set_of_reg.  */
+ struct set_of_reg
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh.c gcc-4.8.2/gcc/config/sh/sh.c
+--- gcc-4.8.2.orig/gcc/config/sh/sh.c	2013-03-13 18:09:10.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/sh.c	2014-03-30 20:21:40.620927576 +0000
+@@ -310,9 +310,7 @@
+ static void sh_conditional_register_usage (void);
+ static bool sh_legitimate_constant_p (enum machine_mode, rtx);
+ static int mov_insn_size (enum machine_mode, bool);
+-static int max_mov_insn_displacement (enum machine_mode, bool);
+ static int mov_insn_alignment_mask (enum machine_mode, bool);
+-static HOST_WIDE_INT disp_addr_displacement (rtx);
+ static bool sequence_insn_p (rtx);
+ static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
+ static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
+@@ -3628,8 +3626,8 @@
+ 
+ /* Determine the maximum possible displacement for a move insn for the
+    specified mode.  */
+-static int
+-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
++int
++sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
+ {
+   /* The 4 byte displacement move insns are the same as the 2 byte
+      versions but take a 12 bit displacement.  All we need to do is to
+@@ -3665,8 +3663,8 @@
+ }
+ 
+ /* Return the displacement value of a displacement address.  */
+-static inline HOST_WIDE_INT
+-disp_addr_displacement (rtx x)
++HOST_WIDE_INT
++sh_disp_addr_displacement (rtx x)
+ {
+   gcc_assert (satisfies_constraint_Sdd (x));
+   return INTVAL (XEXP (XEXP (x, 0), 1));
+@@ -3703,12 +3701,12 @@
+ 	 HImode and QImode loads/stores with displacement put pressure on
+ 	 R0 which will most likely require another reg copy.  Thus account
+ 	 a higher cost for that.  */
+-      if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
++      if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
+ 	return (mode == HImode || mode == QImode) ? 2 : 1;
+ 
+       /* The displacement would fit into a 4 byte move insn (SH2A).  */
+       if (TARGET_SH2A
+-	  && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
++	  && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
+ 	return 2;
+ 
+       /* The displacement is probably out of range and will require extra
+@@ -10218,7 +10216,7 @@
+   else
+     {
+       const HOST_WIDE_INT offset = INTVAL (op);
+-      const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
++      const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
+       const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
+ 
+       /* If the mode does not support any displacement always return false.
+@@ -10404,7 +10402,7 @@
+      effectively disable the small displacement insns.  */
+   const int mode_sz = GET_MODE_SIZE (mode);
+   const int mov_insn_sz = mov_insn_size (mode, false);
+-  const int max_disp = max_mov_insn_displacement (mode, false);
++  const int max_disp = sh_max_mov_insn_displacement (mode, false);
+   const int max_disp_next = max_disp + mov_insn_sz;
+   HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
+   HOST_WIDE_INT offset_adjust;
+@@ -13165,7 +13163,8 @@
+      the insns must have the appropriate alternatives.  */
+   if ((mode == QImode || mode == HImode) && rclass != R0_REGS
+       && satisfies_constraint_Sdd (x)
+-      && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
++      && sh_disp_addr_displacement (x)
++	 <= sh_max_mov_insn_displacement (mode, false))
+     return R0_REGS;
+ 
+   /* When reload is trying to address a QImode or HImode subreg on the stack, 
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh.md gcc-4.8.2/gcc/config/sh/sh.md
+--- gcc-4.8.2.orig/gcc/config/sh/sh.md	2013-09-13 08:38:22.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/sh.md	2014-03-30 20:21:40.624261021 +0000
+@@ -6831,34 +6831,9 @@
+   prepare_move_operands (operands, QImode);
+ })
+ 
+-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
+-;; selected to copy QImode regs.  If one of them happens to be allocated
+-;; on the stack, reload will stick to movqi insn and generate wrong
+-;; displacement addressing because of the generic m alternatives.
+-;; With the movqi_reg_reg being specified before movqi it will be initially
+-;; picked to load/store regs.  If the regs regs are on the stack reload
+-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
+-;; pseudos in which case 'm' constraints pertain.
+-;; The same applies to the movhi variants.
+-;;
+-;; Notice, that T bit is not allowed as a mov src operand here.  This is to
+-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
+-;; introduces zero extensions after T bit stores and redundant reg copies.
+-;;
+-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
+-;; predicate for the mov src operand because reload will have trouble
+-;; reloading MAC subregs otherwise.  For that probably special patterns
+-;; would be required.
+-(define_insn "*mov<mode>_reg_reg"
+-  [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
+-	(match_operand:QIHI 1 "register_operand" "r,*z,m"))]
+-  "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
+-  "@
+-    mov		%1,%0
+-    mov.<bw>	%1,%0
+-    mov.<bw>	%1,%0"
+-  [(set_attr "type" "move,store,load")])
+-
++;; Specifying the displacement addressing load / store patterns separately
++;; before the generic movqi / movhi pattern allows controlling the order
++;; in which load / store insns are selected in a more fine grained way.
+ ;; FIXME: The non-SH2A and SH2A variants should be combined by adding
+ ;; "enabled" attribute as it is done in other targets.
+ (define_insn "*mov<mode>_store_mem_disp04"
+@@ -6908,38 +6883,44 @@
+   [(set_attr "type" "load")
+    (set_attr "length" "2,2,4")])
+ 
+-;; The m constraints basically allow any kind of addresses to be used with any
+-;; source/target register as the other operand.  This is not true for 
+-;; displacement addressing modes on anything but SH2A.  That's why the
+-;; specialized load/store insns are specified above.
+-(define_insn "*movqi"
+-  [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
+-	(match_operand:QI 1 "general_movsrc_operand"  "i,m,r,l,r"))]
++;; The order of the constraint alternatives is important here.
++;; Q/r has to come first, otherwise PC relative loads might wrongly get
++;; placed into delay slots.  Since there is no QImode PC relative load, the
++;; Q constraint and general_movsrc_operand will reject it for QImode.
++;; The Snd alternatives should come before Sdd in order to avoid a preference
++;; of using r0 als the register operand for addressing modes other than
++;; displacement addressing.
++;; The Sdd alternatives allow only r0 as register operand, even though on
++;; SH2A any register could be allowed by switching to a 32 bit insn.
++;; Generally sticking to the r0 is preferrable, since it generates smaller
++;; code.  Obvious r0 reloads can then be eliminated with a peephole on SH2A.
++(define_insn "*mov<mode>"
++  [(set (match_operand:QIHI 0 "general_movdst_operand"
++			      "=r,r,r,Snd,r,  Sdd,z,  r,l")
++	(match_operand:QIHI 1 "general_movsrc_operand"
++			       "Q,r,i,r,  Snd,z,  Sdd,l,r"))]
+   "TARGET_SH1
+-   && (arith_reg_operand (operands[0], QImode)
+-       || arith_reg_operand (operands[1], QImode))"
++   && (arith_reg_operand (operands[0], <MODE>mode)
++       || arith_reg_operand (operands[1], <MODE>mode))"
+   "@
++	mov.<bw>	%1,%0
+ 	mov	%1,%0
+-	mov.b	%1,%0
+-	mov.b	%1,%0
+-	sts	%1,%0
+-	lds	%1,%0"
+- [(set_attr "type" "movi8,load,store,prget,prset")])
+-
+-(define_insn "*movhi"
+-  [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
+-	(match_operand:HI 1 "general_movsrc_operand"  "Q,i,m,r,l,r"))]
+-  "TARGET_SH1
+-   && (arith_reg_operand (operands[0], HImode)
+-       || arith_reg_operand (operands[1], HImode))"
+-  "@
+-	mov.w	%1,%0
+ 	mov	%1,%0
+-	mov.w	%1,%0
+-	mov.w	%1,%0
++	mov.<bw>	%1,%0
++	mov.<bw>	%1,%0
++	mov.<bw>	%1,%0
++	mov.<bw>	%1,%0
+ 	sts	%1,%0
+ 	lds	%1,%0"
+- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
++  [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
++   (set (attr "length")
++	(cond [(and (match_operand 0 "displacement_mem_operand")
++		    (not (match_operand 0 "short_displacement_mem_operand")))
++	       (const_int 4)
++	       (and (match_operand 1 "displacement_mem_operand")
++		    (not (match_operand 1 "short_displacement_mem_operand")))
++	       (const_int 4)]
++	      (const_int 2)))])
+ 
+ (define_insn "*movqi_media"
+   [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
+@@ -8427,11 +8408,9 @@
+ 
+   while (true)
+     {
+-      /* It's not safe to go beyond the current basic block after reload.  */
+       set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
+-					  reload_completed
+-					  ? prev_nonnote_insn_bb
+-					  : prev_nonnote_insn);
++					  prev_nonnote_insn);
++
+       if (s1.set_src == NULL_RTX)
+ 	break;
+ 
+@@ -8449,15 +8428,25 @@
+ 	  continue;
+ 	}
+ 
+-	/* It's only safe to remove the testing insn if the T bit is not
+-	   modified between the testing insn and the insn that stores the
+-	   T bit.  Notice that some T bit stores such as negc also modify
+-	   the T bit.  */
+-	if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
+-	    || modified_in_p (get_t_reg_rtx (), s1.insn))
+-	  operands[2] = NULL_RTX;
++      /* It's only safe to remove the testing insn if the T bit is not
++	 modified between the testing insn and the insn that stores the
++	 T bit.  Notice that some T bit stores such as negc also modify
++	 the T bit.  */
++      if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
++	  || modified_in_p (get_t_reg_rtx (), s1.insn)
++	  || !no_labels_between_p (s1.insn, testing_insn))
++	operands[2] = NULL_RTX;
++      else
++	{
++	  /* If the insn that sets the tested reg has a REG_DEAD note on
++	     the T bit remove that note since we're extending the usage
++	     of the T bit.  */
++	  rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
++	  if (n != NULL_RTX)
++	    remove_note (s1.insn, n);
++	}
+ 
+-	break;
++      break;
+     }
+ 
+   if (operands[2] == NULL_RTX)
+diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh.opt gcc-4.8.2/gcc/config/sh/sh.opt
+--- gcc-4.8.2.orig/gcc/config/sh/sh.opt	2013-03-13 18:09:10.000000000 +0000
++++ gcc-4.8.2/gcc/config/sh/sh.opt	2014-03-30 20:21:40.624261021 +0000
+@@ -21,7 +21,7 @@
+ ;; Used for various architecture options.
+ Mask(SH_E)
+ 
+-;; Set if the default precision of th FPU is single.
++;; Set if the default precision of the FPU is single.
+ Mask(FPU_SINGLE)
+ 
+ ;; Set if the a double-precision FPU is present but is restricted to
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/leon.md gcc-4.8.2/gcc/config/sparc/leon.md
+--- gcc-4.8.2.orig/gcc/config/sparc/leon.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/leon.md	2014-03-30 20:21:40.624261021 +0000
+@@ -17,40 +17,48 @@
+ ;; along with GCC; see the file COPYING3.  If not see
+ ;; <http://www.gnu.org/licenses/>.
+ 
++;; Leon is a single-issue processor.
+ 
+ (define_automaton "leon")
+ 
+-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
+-(define_cpu_unit "leon_fpmds" "leon")
+-(define_cpu_unit "write_buf" "leon")
++(define_cpu_unit "leon_memory" "leon")
+ 
+ (define_insn_reservation "leon_load" 1
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "load,sload,fpload"))
++  (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
+   "leon_memory")
+ 
+-(define_insn_reservation "leon_store" 1
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "store,fpstore"))
+-  "leon_memory+write_buf")
+-  
+-(define_insn_reservation "leon_fp_alu" 1
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "fp,fpmove"))
+-  "leon_fpalu, nothing")
+-
+-(define_insn_reservation "leon_fp_mult" 1
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "fpmul"))
+-  "leon_fpmds, nothing")
+-
+-(define_insn_reservation "leon_fp_div" 16
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "fpdivs,fpdivd"))
+-  "leon_fpmds, nothing*15")
+-
+-(define_insn_reservation "leon_fp_sqrt" 23
+-  (and (eq_attr "cpu" "leon")
+-    (eq_attr "type" "fpsqrts,fpsqrtd"))
+-  "leon_fpmds, nothing*21")
++;; Use a double reservation to work around the load pipeline hazard on UT699.
++(define_insn_reservation "leon3_load" 1
++  (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
++  "leon_memory*2")
+ 
++(define_insn_reservation "leon_store" 2
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
++  "leon_memory*2")
++
++;; This describes Gaisler Research's FPU
++
++(define_automaton "grfpu")
++
++(define_cpu_unit "grfpu_alu" "grfpu")
++(define_cpu_unit "grfpu_ds" "grfpu")
++
++(define_insn_reservation "leon_fp_alu" 4
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
++  "grfpu_alu, nothing*3")
++
++(define_insn_reservation "leon_fp_divs" 16
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
++  "grfpu_ds*14, nothing*2")
++
++(define_insn_reservation "leon_fp_divd" 17
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
++  "grfpu_ds*15, nothing*2")
++
++(define_insn_reservation "leon_fp_sqrts" 24
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
++  "grfpu_ds*22, nothing*2")
++
++(define_insn_reservation "leon_fp_sqrtd" 25
++  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
++  "grfpu_ds*23, nothing*2")
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc-opts.h gcc-4.8.2/gcc/config/sparc/sparc-opts.h
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc-opts.h	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc-opts.h	2014-03-30 20:21:40.627594474 +0000
+@@ -30,6 +30,7 @@
+   PROCESSOR_SUPERSPARC,
+   PROCESSOR_HYPERSPARC,
+   PROCESSOR_LEON,
++  PROCESSOR_LEON3,
+   PROCESSOR_SPARCLITE,
+   PROCESSOR_F930,
+   PROCESSOR_F934,
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc-protos.h gcc-4.8.2/gcc/config/sparc/sparc-protos.h
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc-protos.h	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc-protos.h	2014-03-30 20:21:40.627594474 +0000
+@@ -84,9 +84,9 @@
+ extern int mems_ok_for_ldd_peep (rtx, rtx, rtx);
+ extern int empty_delay_slot (rtx);
+ extern int emit_cbcond_nop (rtx);
++extern int eligible_for_call_delay (rtx);
+ extern int eligible_for_return_delay (rtx);
+ extern int eligible_for_sibcall_delay (rtx);
+-extern int tls_call_delay (rtx);
+ extern int emit_move_sequence (rtx, enum machine_mode);
+ extern int fp_sethi_p (rtx);
+ extern int fp_mov_p (rtx);
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc.c gcc-4.8.2/gcc/config/sparc/sparc.c
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc.c	2013-08-02 21:42:26.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc.c	2014-03-30 20:21:40.624261021 +0000
+@@ -52,6 +52,7 @@
+ #include "params.h"
+ #include "df.h"
+ #include "opts.h"
++#include "tree-pass.h"
+ 
+ /* Processor costs */
+ 
+@@ -226,6 +227,30 @@
+ };
+ 
+ static const
++struct processor_costs leon3_costs = {
++  COSTS_N_INSNS (1), /* int load */
++  COSTS_N_INSNS (1), /* int signed load */
++  COSTS_N_INSNS (1), /* int zeroed load */
++  COSTS_N_INSNS (1), /* float load */
++  COSTS_N_INSNS (1), /* fmov, fneg, fabs */
++  COSTS_N_INSNS (1), /* fadd, fsub */
++  COSTS_N_INSNS (1), /* fcmp */
++  COSTS_N_INSNS (1), /* fmov, fmovr */
++  COSTS_N_INSNS (1), /* fmul */
++  COSTS_N_INSNS (14), /* fdivs */
++  COSTS_N_INSNS (15), /* fdivd */
++  COSTS_N_INSNS (22), /* fsqrts */
++  COSTS_N_INSNS (23), /* fsqrtd */
++  COSTS_N_INSNS (5), /* imul */
++  COSTS_N_INSNS (5), /* imulX */
++  0, /* imul bit factor */
++  COSTS_N_INSNS (35), /* idiv */
++  COSTS_N_INSNS (35), /* idivX */
++  COSTS_N_INSNS (1), /* movcc/movr */
++  0, /* shift penalty */
++};
++
++static const
+ struct processor_costs sparclet_costs = {
+   COSTS_N_INSNS (3), /* int load */
+   COSTS_N_INSNS (3), /* int signed load */
+@@ -538,7 +563,6 @@
+ 				   HOST_WIDE_INT, tree);
+ static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
+ 				       HOST_WIDE_INT, const_tree);
+-static void sparc_reorg (void);
+ static struct machine_function * sparc_init_machine_status (void);
+ static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
+ static rtx sparc_tls_get_addr (void);
+@@ -680,9 +704,6 @@
+ #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
+ #define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
+ 
+-#undef TARGET_MACHINE_DEPENDENT_REORG
+-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
+-
+ #undef TARGET_RTX_COSTS
+ #define TARGET_RTX_COSTS sparc_rtx_costs
+ #undef TARGET_ADDRESS_COST
+@@ -804,6 +825,306 @@
+ 
+ struct gcc_target targetm = TARGET_INITIALIZER;
+ 
++/* Return the memory reference contained in X if any, zero otherwise.  */
++
++static rtx
++mem_ref (rtx x)
++{
++  if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
++    x = XEXP (x, 0);
++
++  if (MEM_P (x))
++    return x;
++
++  return NULL_RTX;
++}
++
++/* We use a machine specific pass to enable workarounds for errata.
++   We need to have the (essentially) final form of the insn stream in order
++   to properly detect the various hazards.  Therefore, this machine specific
++   pass runs as late as possible.  The pass is inserted in the pass pipeline
++   at the end of sparc_option_override.  */
++
++static bool
++sparc_gate_work_around_errata (void)
++{
++  /* The only errata we handle are those of the AT697F and UT699.  */
++  return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
++}
++
++static unsigned int
++sparc_do_work_around_errata (void)
++{
++  rtx insn, next;
++
++  /* Force all instructions to be split into their final form.  */
++  split_all_insns_noflow ();
++
++  /* Now look for specific patterns in the insn stream.  */
++  for (insn = get_insns (); insn; insn = next)
++    {
++      bool insert_nop = false;
++      rtx set;
++
++      /* Look into the instruction in a delay slot.  */
++      if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
++	insn = XVECEXP (PATTERN (insn), 0, 1);
++
++      /* Look for a single-word load into an odd-numbered FP register.  */
++      if (sparc_fix_at697f
++	  && NONJUMP_INSN_P (insn)
++	  && (set = single_set (insn)) != NULL_RTX
++	  && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
++	  && MEM_P (SET_SRC (set))
++	  && REG_P (SET_DEST (set))
++	  && REGNO (SET_DEST (set)) > 31
++	  && REGNO (SET_DEST (set)) % 2 != 0)
++	{
++	  /* The wrong dependency is on the enclosing double register.  */
++	  const unsigned int x = REGNO (SET_DEST (set)) - 1;
++	  unsigned int src1, src2, dest;
++	  int code;
++
++	  next = next_active_insn (insn);
++	  if (!next)
++	    break;
++	  /* If the insn is a branch, then it cannot be problematic.  */
++	  if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
++	    continue;
++
++	  extract_insn (next);
++	  code = INSN_CODE (next);
++
++	  switch (code)
++	    {
++	    case CODE_FOR_adddf3:
++	    case CODE_FOR_subdf3:
++	    case CODE_FOR_muldf3:
++	    case CODE_FOR_divdf3:
++	      dest = REGNO (recog_data.operand[0]);
++	      src1 = REGNO (recog_data.operand[1]);
++	      src2 = REGNO (recog_data.operand[2]);
++	      if (src1 != src2)
++		{
++		  /* Case [1-4]:
++				 ld [address], %fx+1
++				 FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
++		  if ((src1 == x || src2 == x)
++		      && (dest == src1 || dest == src2))
++		    insert_nop = true;
++		}
++	      else
++		{
++		  /* Case 5:
++			     ld [address], %fx+1
++			     FPOPd %fx, %fx, %fx  */
++		  if (src1 == x
++		      && dest == src1
++		      && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
++		    insert_nop = true;
++		}
++	      break;
++
++	    case CODE_FOR_sqrtdf2:
++	      dest = REGNO (recog_data.operand[0]);
++	      src1 = REGNO (recog_data.operand[1]);
++	      /* Case 6:
++			 ld [address], %fx+1
++			 fsqrtd %fx, %fx  */
++	      if (src1 == x && dest == src1)
++		insert_nop = true;
++	      break;
++
++	    default:
++	      break;
++	    }
++	}
++
++      /* Look for a single-word load into an integer register.  */
++      else if (sparc_fix_ut699
++	       && NONJUMP_INSN_P (insn)
++	       && (set = single_set (insn)) != NULL_RTX
++	       && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
++	       && mem_ref (SET_SRC (set)) != NULL_RTX
++	       && REG_P (SET_DEST (set))
++	       && REGNO (SET_DEST (set)) < 32)
++	{
++	  /* There is no problem if the second memory access has a data
++	     dependency on the first single-cycle load.  */
++	  rtx x = SET_DEST (set);
++
++	  next = next_active_insn (insn);
++	  if (!next)
++	    break;
++	  /* If the insn is a branch, then it cannot be problematic.  */
++	  if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
++	    continue;
++
++	  /* Look for a second memory access to/from an integer register.  */
++	  if ((set = single_set (next)) != NULL_RTX)
++	    {
++	      rtx src = SET_SRC (set);
++	      rtx dest = SET_DEST (set);
++	      rtx mem;
++
++	      /* LDD is affected.  */
++	      if ((mem = mem_ref (src)) != NULL_RTX
++		  && REG_P (dest)
++		  && REGNO (dest) < 32
++		  && !reg_mentioned_p (x, XEXP (mem, 0)))
++		insert_nop = true;
++
++	      /* STD is *not* affected.  */
++	      else if (MEM_P (dest)
++		       && GET_MODE_SIZE (GET_MODE (dest)) <= 4
++		       && (src == CONST0_RTX (GET_MODE (dest))
++			   || (REG_P (src)
++			       && REGNO (src) < 32
++			       && REGNO (src) != REGNO (x)))
++		       && !reg_mentioned_p (x, XEXP (dest, 0)))
++		insert_nop = true;
++	    }
++	}
++
++      /* Look for a single-word load/operation into an FP register.  */
++      else if (sparc_fix_ut699
++	       && NONJUMP_INSN_P (insn)
++	       && (set = single_set (insn)) != NULL_RTX
++	       && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
++	       && REG_P (SET_DEST (set))
++	       && REGNO (SET_DEST (set)) > 31)
++	{
++	  /* Number of instructions in the problematic window.  */
++	  const int n_insns = 4;
++	  /* The problematic combination is with the sibling FP register.  */
++	  const unsigned int x = REGNO (SET_DEST (set));
++	  const unsigned int y = x ^ 1;
++	  rtx after;
++	  int i;
++
++	  next = next_active_insn (insn);
++	  if (!next)
++	    break;
++	  /* If the insn is a branch, then it cannot be problematic.  */
++	  if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
++	    continue;
++
++	  /* Look for a second load/operation into the sibling FP register.  */
++	  if (!((set = single_set (next)) != NULL_RTX
++		&& GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
++		&& REG_P (SET_DEST (set))
++		&& REGNO (SET_DEST (set)) == y))
++	    continue;
++
++	  /* Look for a (possible) store from the FP register in the next N
++	     instructions, but bail out if it is again modified or if there
++	     is a store from the sibling FP register before this store.  */
++	  for (after = next, i = 0; i < n_insns; i++)
++	    {
++	      bool branch_p;
++
++	      after = next_active_insn (after);
++	      if (!after)
++		break;
++
++	      /* This is a branch with an empty delay slot.  */
++	      if (!NONJUMP_INSN_P (after))
++		{
++		  if (++i == n_insns)
++		    break;
++		  branch_p = true;
++		  after = NULL_RTX;
++		}
++	      /* This is a branch with a filled delay slot.  */
++	      else if (GET_CODE (PATTERN (after)) == SEQUENCE)
++		{
++		  if (++i == n_insns)
++		    break;
++		  branch_p = true;
++		  after = XVECEXP (PATTERN (after), 0, 1);
++		}
++	      /* This is a regular instruction.  */
++	      else
++		branch_p = false;
++
++	      if (after && (set = single_set (after)) != NULL_RTX)
++		{
++		  const rtx src = SET_SRC (set);
++		  const rtx dest = SET_DEST (set);
++		  const unsigned int size = GET_MODE_SIZE (GET_MODE (dest));
++
++		  /* If the FP register is again modified before the store,
++		     then the store isn't affected.  */
++		  if (REG_P (dest)
++		      && (REGNO (dest) == x
++			  || (REGNO (dest) == y && size == 8)))
++		    break;
++
++		  if (MEM_P (dest) && REG_P (src))
++		    {
++		      /* If there is a store from the sibling FP register
++			 before the store, then the store is not affected.  */
++		      if (REGNO (src) == y || (REGNO (src) == x && size == 8))
++			break;
++
++		      /* Otherwise, the store is affected.  */
++		      if (REGNO (src) == x && size == 4)
++			{
++			  insert_nop = true;
++			  break;
++			}
++		    }
++		}
++
++	      /* If we have a branch in the first M instructions, then we
++		 cannot see the (M+2)th instruction so we play safe.  */
++	      if (branch_p && i <= (n_insns - 2))
++		{
++		  insert_nop = true;
++		  break;
++		}
++	    }
++	}
++
++      else
++	next = NEXT_INSN (insn);
++
++      if (insert_nop)
++	emit_insn_before (gen_nop (), next);
++    }
++
++  return 0;
++}
++
++struct rtl_opt_pass pass_work_around_errata =
++{
++ {
++  RTL_PASS,
++  "errata",				/* name */
++  OPTGROUP_NONE,			/* optinfo_flags */
++  sparc_gate_work_around_errata,	/* gate */
++  sparc_do_work_around_errata,		/* execute */
++  NULL,					/* sub */
++  NULL,					/* next */
++  0,					/* static_pass_number */
++  TV_MACH_DEP,				/* tv_id */
++  0,					/* properties_required */
++  0,					/* properties_provided */
++  0,					/* properties_destroyed */
++  0,					/* todo_flags_start */
++  TODO_verify_rtl_sharing,		/* todo_flags_finish */
++ }
++};
++
++struct register_pass_info insert_pass_work_around_errata =
++{
++  &pass_work_around_errata.pass,	/* pass */
++  "dbr",				/* reference_pass_name */
++  1,					/* ref_pass_instance_number */
++  PASS_POS_INSERT_AFTER			/* po_op */
++};
++
++/* Helpers for TARGET_DEBUG_OPTIONS.  */
+ static void
+ dump_target_flag_bits (const int flags)
+ {
+@@ -888,6 +1209,7 @@
+     { TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
+     { TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
+     { TARGET_CPU_leon, PROCESSOR_LEON },
++    { TARGET_CPU_leon3, PROCESSOR_LEON3 },
+     { TARGET_CPU_sparclite, PROCESSOR_F930 },
+     { TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
+     { TARGET_CPU_sparclet, PROCESSOR_TSC701 },
+@@ -902,7 +1224,7 @@
+   };
+   const struct cpu_default *def;
+   /* Table of values for -m{cpu,tune}=.  This must match the order of
+-     the PROCESSOR_* enumeration.  */
++     the enum processor_type in sparc-opts.h.  */
+   static struct cpu_table {
+     const char *const name;
+     const int disable;
+@@ -914,8 +1236,8 @@
+     /* TI TMS390Z55 supersparc */
+     { "supersparc",	MASK_ISA, MASK_V8 },
+     { "hypersparc",	MASK_ISA, MASK_V8|MASK_FPU },
+-    /* LEON */
+-    { "leon",		MASK_ISA, MASK_V8|MASK_FPU },
++    { "leon",		MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
++    { "leon3",		MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
+     { "sparclite",	MASK_ISA, MASK_SPARCLITE },
+     /* The Fujitsu MB86930 is the original sparclite chip, with no FPU.  */
+     { "f930",		MASK_ISA|MASK_FPU, MASK_SPARCLITE },
+@@ -1075,6 +1397,9 @@
+ #ifndef HAVE_AS_SPARC4
+ 		   & ~MASK_CBCOND
+ #endif
++#ifndef HAVE_AS_LEON
++		   & ~(MASK_LEON | MASK_LEON3)
++#endif
+ 		   );
+ 
+   /* If -mfpu or -mno-fpu was explicitly used, don't override with
+@@ -1164,6 +1489,9 @@
+     case PROCESSOR_LEON:
+       sparc_costs = &leon_costs;
+       break;
++    case PROCESSOR_LEON3:
++      sparc_costs = &leon3_costs;
++      break;
+     case PROCESSOR_SPARCLET:
+     case PROCESSOR_TSC701:
+       sparc_costs = &sparclet_costs;
+@@ -1200,6 +1528,10 @@
+       /* Choose the most relaxed model for the processor.  */
+       else if (TARGET_V9)
+ 	sparc_memory_model = SMM_RMO;
++      else if (TARGET_LEON3)
++	sparc_memory_model = SMM_TSO;
++      else if (TARGET_LEON)
++	sparc_memory_model = SMM_SC;
+       else if (TARGET_V8)
+ 	sparc_memory_model = SMM_PSO;
+       else
+@@ -1241,6 +1573,13 @@
+      pessimizes for double floating-point registers.  */
+   if (!global_options_set.x_flag_ira_share_save_slots)
+     flag_ira_share_save_slots = 0;
++
++  /* We register a machine specific pass to work around errata, if any.
++     The pass mut be scheduled as late as possible so that we have the
++     (essentially) final form of the insn stream to work on.
++     Registering the pass must be done at start up.  It's convenient to
++     do it here.  */
++  register_pass (&insert_pass_work_around_errata);
+ }
+ 
+
+ /* Miscellaneous utilities.  */
+@@ -3090,10 +3429,13 @@
+ /* Return nonzero if TRIAL can go into the call delay slot.  */
+ 
+ int
+-tls_call_delay (rtx trial)
++eligible_for_call_delay (rtx trial)
+ {
+   rtx pat;
+ 
++  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
++    return 0;
++
+   /* Binutils allows
+        call __tls_get_addr, %tgd_call (foo)
+         add %l7, %o0, %o0, %tgd_add (foo)
+@@ -3175,11 +3517,7 @@
+ 
+   /* If we have the 'return' instruction, anything that does not use
+      local or output registers and can go into a delay slot wins.  */
+-  else if (return_p
+-	   && TARGET_V9
+-	   && !epilogue_renumber (&pat, 1)
+-	   && get_attr_in_uncond_branch_delay (trial)
+-	       == IN_UNCOND_BRANCH_DELAY_TRUE)
++  else if (return_p && TARGET_V9 && !epilogue_renumber (&pat, 1))
+     return 1;
+ 
+   /* The 'restore src1,src2,dest' pattern for SImode.  */
+@@ -3222,21 +3560,20 @@
+   int regno;
+   rtx pat;
+ 
+-  if (GET_CODE (trial) != INSN)
+-    return 0;
+-
+-  if (get_attr_length (trial) != 1)
+-    return 0;
+-
+   /* If the function uses __builtin_eh_return, the eh_return machinery
+      occupies the delay slot.  */
+   if (crtl->calls_eh_return)
+     return 0;
+ 
++  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
++    return 0;
++
+   /* In the case of a leaf or flat function, anything can go into the slot.  */
+   if (sparc_leaf_function_p || TARGET_FLAT)
+-    return
+-      get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
++    return 1;
++
++  if (!NONJUMP_INSN_P (trial))
++    return 0;
+ 
+   pat = PATTERN (trial);
+   if (GET_CODE (pat) == PARALLEL)
+@@ -3256,9 +3593,7 @@
+ 	  if (regno >= 8 && regno < 24)
+ 	    return 0;
+ 	}
+-      return !epilogue_renumber (&pat, 1)
+-	&& (get_attr_in_uncond_branch_delay (trial)
+-	    == IN_UNCOND_BRANCH_DELAY_TRUE);
++      return !epilogue_renumber (&pat, 1);
+     }
+ 
+   if (GET_CODE (pat) != SET)
+@@ -3278,10 +3613,7 @@
+      instruction, it can probably go in.  But restore will not work
+      with FP_REGS.  */
+   if (! SPARC_INT_REG_P (regno))
+-    return (TARGET_V9
+-	    && !epilogue_renumber (&pat, 1)
+-	    && get_attr_in_uncond_branch_delay (trial)
+-	       == IN_UNCOND_BRANCH_DELAY_TRUE);
++    return TARGET_V9 && !epilogue_renumber (&pat, 1);
+ 
+   return eligible_for_restore_insn (trial, true);
+ }
+@@ -3293,10 +3625,10 @@
+ {
+   rtx pat;
+ 
+-  if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
++  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
+     return 0;
+ 
+-  if (get_attr_length (trial) != 1)
++  if (!NONJUMP_INSN_P (trial))
+     return 0;
+ 
+   pat = PATTERN (trial);
+@@ -3315,6 +3647,9 @@
+       return 1;
+     }
+ 
++  if (GET_CODE (pat) != SET)
++    return 0;
++
+   /* Otherwise, only operations which can be done in tandem with
+      a `restore' insn can go into the delay slot.  */
+   if (GET_CODE (SET_DEST (pat)) != REG
+@@ -10355,7 +10690,8 @@
+ 	      tmp = e0.add_with_sign (tmp, false, &add1_ovf);
+ 	      if (tmp.is_negative ())
+ 		tmp = tmp.neg_with_overflow (&neg2_ovf);
+-
++	      else
++		neg2_ovf = false;
+ 	      result = result.add_with_sign (tmp, false, &add2_ovf);
+ 	      overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
+ 	    }
+@@ -10897,107 +11233,6 @@
+   return (vcall_offset >= -32768 || ! fixed_regs[5]);
+ }
+ 
+-/* We use the machine specific reorg pass to enable workarounds for errata.  */
+-
+-static void
+-sparc_reorg (void)
+-{
+-  rtx insn, next;
+-
+-  /* The only erratum we handle for now is that of the AT697F processor.  */
+-  if (!sparc_fix_at697f)
+-    return;
+-
+-  /* We need to have the (essentially) final form of the insn stream in order
+-     to properly detect the various hazards.  Run delay slot scheduling.  */
+-  if (optimize > 0 && flag_delayed_branch)
+-    {
+-      cleanup_barriers ();
+-      dbr_schedule (get_insns ());
+-    }
+-
+-  /* Now look for specific patterns in the insn stream.  */
+-  for (insn = get_insns (); insn; insn = next)
+-    {
+-      bool insert_nop = false;
+-      rtx set;
+-
+-      /* Look for a single-word load into an odd-numbered FP register.  */
+-      if (NONJUMP_INSN_P (insn)
+-	  && (set = single_set (insn)) != NULL_RTX
+-	  && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
+-	  && MEM_P (SET_SRC (set))
+-	  && REG_P (SET_DEST (set))
+-	  && REGNO (SET_DEST (set)) > 31
+-	  && REGNO (SET_DEST (set)) % 2 != 0)
+-	{
+-	  /* The wrong dependency is on the enclosing double register.  */
+-	  unsigned int x = REGNO (SET_DEST (set)) - 1;
+-	  unsigned int src1, src2, dest;
+-	  int code;
+-
+-	  /* If the insn has a delay slot, then it cannot be problematic.  */
+-	  next = next_active_insn (insn);
+-	  if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
+-	    code = -1;
+-	  else
+-	    {
+-	      extract_insn (next);
+-	      code = INSN_CODE (next);
+-	    }
+-
+-	  switch (code)
+-	    {
+-	    case CODE_FOR_adddf3:
+-	    case CODE_FOR_subdf3:
+-	    case CODE_FOR_muldf3:
+-	    case CODE_FOR_divdf3:
+-	      dest = REGNO (recog_data.operand[0]);
+-	      src1 = REGNO (recog_data.operand[1]);
+-	      src2 = REGNO (recog_data.operand[2]);
+-	      if (src1 != src2)
+-		{
+-		  /* Case [1-4]:
+-				 ld [address], %fx+1
+-				 FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
+-		  if ((src1 == x || src2 == x)
+-		      && (dest == src1 || dest == src2))
+-		    insert_nop = true;
+-		}
+-	      else
+-		{
+-		  /* Case 5:
+-			     ld [address], %fx+1
+-			     FPOPd %fx, %fx, %fx  */
+-		  if (src1 == x
+-		      && dest == src1
+-		      && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
+-		    insert_nop = true;
+-		}
+-	      break;
+-
+-	    case CODE_FOR_sqrtdf2:
+-	      dest = REGNO (recog_data.operand[0]);
+-	      src1 = REGNO (recog_data.operand[1]);
+-	      /* Case 6:
+-			 ld [address], %fx+1
+-			 fsqrtd %fx, %fx  */
+-	      if (src1 == x && dest == src1)
+-		insert_nop = true;
+-	      break;
+-
+-	    default:
+-	      break;
+-	    }
+-	}
+-      else
+-	next = NEXT_INSN (insn);
+-
+-      if (insert_nop)
+-	emit_insn_after (gen_nop (), insn);
+-    }
+-}
+-
+ /* How to allocate a 'struct machine_function'.  */
+ 
+ static struct machine_function *
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc.h gcc-4.8.2/gcc/config/sparc/sparc.h
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc.h	2013-04-11 00:59:01.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc.h	2014-03-30 20:21:40.627594474 +0000
+@@ -136,21 +136,22 @@
+ #define TARGET_CPU_supersparc	2
+ #define TARGET_CPU_hypersparc	3
+ #define TARGET_CPU_leon		4
+-#define TARGET_CPU_sparclite	5
+-#define TARGET_CPU_f930		5       /* alias */
+-#define TARGET_CPU_f934		5       /* alias */
+-#define TARGET_CPU_sparclite86x	6
+-#define TARGET_CPU_sparclet	7
+-#define TARGET_CPU_tsc701	7       /* alias */
+-#define TARGET_CPU_v9		8	/* generic v9 implementation */
+-#define TARGET_CPU_sparcv9	8	/* alias */
+-#define TARGET_CPU_sparc64	8	/* alias */
+-#define TARGET_CPU_ultrasparc	9
+-#define TARGET_CPU_ultrasparc3	10
+-#define TARGET_CPU_niagara	11
+-#define TARGET_CPU_niagara2	12
+-#define TARGET_CPU_niagara3	13
+-#define TARGET_CPU_niagara4	14
++#define TARGET_CPU_leon3	5
++#define TARGET_CPU_sparclite	6
++#define TARGET_CPU_f930		6       /* alias */
++#define TARGET_CPU_f934		6       /* alias */
++#define TARGET_CPU_sparclite86x	7
++#define TARGET_CPU_sparclet	8
++#define TARGET_CPU_tsc701	8       /* alias */
++#define TARGET_CPU_v9		9	/* generic v9 implementation */
++#define TARGET_CPU_sparcv9	9	/* alias */
++#define TARGET_CPU_sparc64	9	/* alias */
++#define TARGET_CPU_ultrasparc	10
++#define TARGET_CPU_ultrasparc3	11
++#define TARGET_CPU_niagara	12
++#define TARGET_CPU_niagara2	13
++#define TARGET_CPU_niagara3	14
++#define TARGET_CPU_niagara4	15
+ 
+ #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
+  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
+@@ -232,9 +233,10 @@
+ #define ASM_CPU32_DEFAULT_SPEC ""
+ #endif
+ 
+-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
++#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
++ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
+ #define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
+-#define ASM_CPU32_DEFAULT_SPEC ""
++#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
+ #endif
+ 
+ #endif
+@@ -282,6 +284,7 @@
+ %{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
+ %{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
+ %{mcpu=leon:-D__leon__ -D__sparc_v8__} \
++%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
+ %{mcpu=v9:-D__sparc_v9__} \
+ %{mcpu=ultrasparc:-D__sparc_v9__} \
+ %{mcpu=ultrasparc3:-D__sparc_v9__} \
+@@ -329,7 +332,8 @@
+ %{mcpu=v8:-Av8} \
+ %{mcpu=supersparc:-Av8} \
+ %{mcpu=hypersparc:-Av8} \
+-%{mcpu=leon:-Av8} \
++%{mcpu=leon:" AS_LEON_FLAG "} \
++%{mcpu=leon3:" AS_LEON_FLAG "} \
+ %{mv8plus:-Av8plus} \
+ %{mcpu=v9:-Av9} \
+ %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
+@@ -1754,6 +1758,12 @@
+ #define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
+ #endif
+ 
++#ifdef HAVE_AS_LEON
++#define AS_LEON_FLAG "-Aleon"
++#else
++#define AS_LEON_FLAG "-Av8"
++#endif
++
+ /* We use gcc _mcount for profiling.  */
+ #define NO_PROFILE_COUNTERS 0
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc.md gcc-4.8.2/gcc/config/sparc/sparc.md
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc.md	2014-03-30 20:21:40.627594474 +0000
+@@ -206,7 +206,7 @@
+ ;; 'f' for all DF/TFmode values, including those that are specific to the v8.
+ 
+ ;; Attribute for cpu type.
+-;; These must match the values for enum processor_type in sparc.h.
++;; These must match the values of the enum processor_type in sparc-opts.h.
+ (define_attr "cpu"
+   "v7,
+    cypress,
+@@ -214,6 +214,7 @@
+    supersparc,
+    hypersparc,
+    leon,
++   leon3,
+    sparclite,
+    f930,
+    f934,
+@@ -284,7 +285,8 @@
+   (const_string "none"))
+ 
+ (define_attr "pic" "false,true"
+-  (symbol_ref "(flag_pic != 0 ? PIC_TRUE : PIC_FALSE)"))
++  (symbol_ref "(flag_pic != 0
++		? PIC_TRUE : PIC_FALSE)"))
+ 
+ (define_attr "calls_alloca" "false,true"
+   (symbol_ref "(cfun->calls_alloca != 0
+@@ -306,6 +308,10 @@
+   (symbol_ref "(TARGET_FLAT != 0
+ 		? FLAT_TRUE : FLAT_FALSE)"))
+ 
++(define_attr "fix_ut699" "false,true"
++   (symbol_ref "(sparc_fix_ut699 != 0
++		 ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
++
+ ;; Length (in # of insns).
+ ;; Beware that setting a length greater or equal to 3 for conditional branches
+ ;; has a side-effect (see output_cbranch and output_v9branch).
+@@ -420,32 +426,18 @@
+   [(set_attr "length" "2")
+    (set_attr "type" "multi")])
+ 
+-;; Attributes for instruction and branch scheduling
+-(define_attr "tls_call_delay" "false,true"
+-  (symbol_ref "(tls_call_delay (insn)
+-		? TLS_CALL_DELAY_TRUE : TLS_CALL_DELAY_FALSE)"))
+-
++;; Attributes for branch scheduling
+ (define_attr "in_call_delay" "false,true"
+-  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
+-		(const_string "false")
+-	 (eq_attr "type" "load,fpload,store,fpstore")
+-		(if_then_else (eq_attr "length" "1")
+-			      (const_string "true")
+-			      (const_string "false"))]
+-	 (if_then_else (and (eq_attr "length" "1")
+-			    (eq_attr "tls_call_delay" "true"))
+-		       (const_string "true")
+-		       (const_string "false"))))
++  (symbol_ref "(eligible_for_call_delay (insn)
++		? IN_CALL_DELAY_TRUE : IN_CALL_DELAY_FALSE)"))
+ 
+-(define_attr "eligible_for_sibcall_delay" "false,true"
++(define_attr "in_sibcall_delay" "false,true"
+   (symbol_ref "(eligible_for_sibcall_delay (insn)
+-		? ELIGIBLE_FOR_SIBCALL_DELAY_TRUE
+-		: ELIGIBLE_FOR_SIBCALL_DELAY_FALSE)"))
++		? IN_SIBCALL_DELAY_TRUE : IN_SIBCALL_DELAY_FALSE)"))
+ 
+-(define_attr "eligible_for_return_delay" "false,true"
++(define_attr "in_return_delay" "false,true"
+   (symbol_ref "(eligible_for_return_delay (insn)
+-		? ELIGIBLE_FOR_RETURN_DELAY_TRUE
+-		: ELIGIBLE_FOR_RETURN_DELAY_FALSE)"))
++		? IN_RETURN_DELAY_TRUE : IN_RETURN_DELAY_FALSE)"))
+ 
+ ;; ??? !v9: Should implement the notion of predelay slots for floating-point
+ ;; branches.  This would allow us to remove the nop always inserted before
+@@ -460,39 +452,32 @@
+ ;; because it prevents us from moving back the final store of inner loops.
+ 
+ (define_attr "in_branch_delay" "false,true"
+-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
+-		     (eq_attr "length" "1"))
+-		(const_string "true")
+-		(const_string "false")))
+-
+-(define_attr "in_uncond_branch_delay" "false,true"
+-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
+-		     (eq_attr "length" "1"))
+-		(const_string "true")
+-		(const_string "false")))
+-
+-(define_attr "in_annul_branch_delay" "false,true"
+-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
+-		     (eq_attr "length" "1"))
+-		(const_string "true")
+-		(const_string "false")))
++  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
++	   (const_string "false")
++	 (and (eq_attr "fix_ut699" "true") (eq_attr "type" "load,sload"))
++	   (const_string "false")
++	 (and (eq_attr "fix_ut699" "true")
++	      (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
++		   (eq_attr "fptype" "single")))
++	   (const_string "false")
++	 (eq_attr "length" "1")
++	   (const_string "true")
++	] (const_string "false")))
+ 
+ (define_delay (eq_attr "type" "call")
+   [(eq_attr "in_call_delay" "true") (nil) (nil)])
+ 
+ (define_delay (eq_attr "type" "sibcall")
+-  [(eq_attr "eligible_for_sibcall_delay" "true") (nil) (nil)])
++  [(eq_attr "in_sibcall_delay" "true") (nil) (nil)])
++
++(define_delay (eq_attr "type" "return")
++  [(eq_attr "in_return_delay" "true") (nil) (nil)])
+ 
+ (define_delay (eq_attr "type" "branch")
+-  [(eq_attr "in_branch_delay" "true")
+-   (nil) (eq_attr "in_annul_branch_delay" "true")])
++  [(eq_attr "in_branch_delay" "true") (nil) (eq_attr "in_branch_delay" "true")])
+ 
+ (define_delay (eq_attr "type" "uncond_branch")
+-  [(eq_attr "in_uncond_branch_delay" "true")
+-   (nil) (nil)])
+-
+-(define_delay (eq_attr "type" "return")
+-  [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
++  [(eq_attr "in_branch_delay" "true") (nil) (nil)])
+ 
+ 
+ ;; Include SPARC DFA schedulers
+@@ -5548,7 +5533,7 @@
+   [(set (match_operand:DF 0 "register_operand" "=e")
+ 	(mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
+ 		 (float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
+-  "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
++  "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
+   "fsmuld\t%1, %2, %0"
+   [(set_attr "type" "fpmul")
+    (set_attr "fptype" "double")])
+@@ -5575,22 +5560,39 @@
+ 		(match_operand:TF 2 "register_operand" "e")))]
+   "TARGET_FPU && TARGET_HARD_QUAD"
+   "fdivq\t%1, %2, %0"
+-  [(set_attr "type" "fpdivd")])
++  [(set_attr "type" "fpdivs")])
+ 
+-(define_insn "divdf3"
++(define_expand "divdf3"
+   [(set (match_operand:DF 0 "register_operand" "=e")
+ 	(div:DF (match_operand:DF 1 "register_operand" "e")
+ 		(match_operand:DF 2 "register_operand" "e")))]
+   "TARGET_FPU"
++  "")
++
++(define_insn "*divdf3_nofix"
++  [(set (match_operand:DF 0 "register_operand" "=e")
++	(div:DF (match_operand:DF 1 "register_operand" "e")
++		(match_operand:DF 2 "register_operand" "e")))]
++  "TARGET_FPU && !sparc_fix_ut699"
+   "fdivd\t%1, %2, %0"
+   [(set_attr "type" "fpdivd")
+    (set_attr "fptype" "double")])
+ 
++(define_insn "*divdf3_fix"
++  [(set (match_operand:DF 0 "register_operand" "=e")
++	(div:DF (match_operand:DF 1 "register_operand" "e")
++		(match_operand:DF 2 "register_operand" "e")))]
++  "TARGET_FPU && sparc_fix_ut699"
++  "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
++  [(set_attr "type" "fpdivd")
++   (set_attr "fptype" "double")
++   (set_attr "length" "2")])
++
+ (define_insn "divsf3"
+   [(set (match_operand:SF 0 "register_operand" "=f")
+ 	(div:SF (match_operand:SF 1 "register_operand" "f")
+ 		(match_operand:SF 2 "register_operand" "f")))]
+-  "TARGET_FPU"
++  "TARGET_FPU && !sparc_fix_ut699"
+   "fdivs\t%1, %2, %0"
+   [(set_attr "type" "fpdivs")])
+ 
+@@ -5789,20 +5791,35 @@
+ 	(sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
+   "TARGET_FPU && TARGET_HARD_QUAD"
+   "fsqrtq\t%1, %0"
+-  [(set_attr "type" "fpsqrtd")])
++  [(set_attr "type" "fpsqrts")])
+ 
+-(define_insn "sqrtdf2"
++(define_expand "sqrtdf2"
+   [(set (match_operand:DF 0 "register_operand" "=e")
+ 	(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
+   "TARGET_FPU"
++  "")
++
++(define_insn "*sqrtdf2_nofix"
++  [(set (match_operand:DF 0 "register_operand" "=e")
++	(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
++  "TARGET_FPU && !sparc_fix_ut699"
+   "fsqrtd\t%1, %0"
+   [(set_attr "type" "fpsqrtd")
+    (set_attr "fptype" "double")])
+ 
++(define_insn "*sqrtdf2_fix"
++  [(set (match_operand:DF 0 "register_operand" "=e")
++	(sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
++  "TARGET_FPU && sparc_fix_ut699"
++  "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
++  [(set_attr "type" "fpsqrtd")
++   (set_attr "fptype" "double")
++   (set_attr "length" "2")])
++
+ (define_insn "sqrtsf2"
+   [(set (match_operand:SF 0 "register_operand" "=f")
+ 	(sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
+-  "TARGET_FPU"
++  "TARGET_FPU && !sparc_fix_ut699"
+   "fsqrts\t%1, %0"
+   [(set_attr "type" "fpsqrts")])
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sparc.opt gcc-4.8.2/gcc/config/sparc/sparc.opt
+--- gcc-4.8.2.orig/gcc/config/sparc/sparc.opt	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sparc.opt	2014-03-30 20:21:40.627594474 +0000
+@@ -146,6 +146,9 @@
+ Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
+ 
+ EnumValue
++Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
++
++EnumValue
+ Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
+ 
+ EnumValue
+@@ -201,9 +204,19 @@
+ Enable workaround for single erratum of AT697F processor
+ (corresponding to erratum #13 of AT697E processor)
+ 
++mfix-ut699
++Target Report RejectNegative Var(sparc_fix_ut699)
++Enable workarounds for the errata of the UT699 processor
++
+ Mask(LONG_DOUBLE_128)
+ ;; Use 128-bit long double
+ 
++Mask(LEON)
++;; Generate code for LEON
++
++Mask(LEON3)
++;; Generate code for LEON3
++
+ Mask(SPARCLITE)
+ ;; Generate code for SPARClite
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/sync.md gcc-4.8.2/gcc/config/sparc/sync.md
+--- gcc-4.8.2.orig/gcc/config/sparc/sync.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/sync.md	2014-03-30 20:21:40.627594474 +0000
+@@ -161,7 +161,8 @@
+    (match_operand:SI 5 "const_int_operand" "")		;; is_weak
+    (match_operand:SI 6 "const_int_operand" "")		;; mod_s
+    (match_operand:SI 7 "const_int_operand" "")]		;; mod_f
+-  "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
++  "(TARGET_V9 || TARGET_LEON3)
++   && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
+ {
+   sparc_expand_compare_and_swap (operands);
+   DONE;
+@@ -176,7 +177,7 @@
+ 	     [(match_operand:I48MODE 2 "register_operand" "")
+ 	      (match_operand:I48MODE 3 "register_operand" "")]
+ 	     UNSPECV_CAS))])]
+-  "TARGET_V9"
++  "TARGET_V9 || TARGET_LEON3"
+   "")
+ 
+ (define_insn "*atomic_compare_and_swap<mode>_1"
+@@ -187,7 +188,7 @@
+ 	  [(match_operand:I48MODE 2 "register_operand" "r")
+ 	   (match_operand:I48MODE 3 "register_operand" "0")]
+ 	  UNSPECV_CAS))]
+-  "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
++  "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
+   "cas<modesuffix>\t%1, %2, %0"
+   [(set_attr "type" "multi")])
+ 
+@@ -220,7 +221,7 @@
+    (match_operand:SI 1 "memory_operand" "")
+    (match_operand:SI 2 "register_operand" "")
+    (match_operand:SI 3 "const_int_operand" "")]
+-  "TARGET_V8 || TARGET_V9"
++  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
+ {
+   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+ 
+@@ -236,7 +237,7 @@
+ 			    UNSPECV_SWAP))
+    (set (match_dup 1)
+ 	(match_operand:SI 2 "register_operand" "0"))]
+-  "TARGET_V8 || TARGET_V9"
++  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
+   "swap\t%1, %0"
+   [(set_attr "type" "multi")])
+ 
+@@ -244,7 +245,7 @@
+   [(match_operand:QI 0 "register_operand" "")
+    (match_operand:QI 1 "memory_operand" "")
+    (match_operand:SI 2 "const_int_operand" "")]
+-  ""
++  "!sparc_fix_ut699"
+ {
+   enum memmodel model = (enum memmodel) INTVAL (operands[2]);
+   rtx ret;
+@@ -268,6 +269,6 @@
+ 	(unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
+ 			    UNSPECV_LDSTUB))
+    (set (match_dup 1) (const_int -1))]
+-  ""
++  "!sparc_fix_ut699"
+   "ldstub\t%1, %0"
+   [(set_attr "type" "multi")])
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/t-rtems gcc-4.8.2/gcc/config/sparc/t-rtems
+--- gcc-4.8.2.orig/gcc/config/sparc/t-rtems	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/t-rtems	2014-03-30 20:21:40.627594474 +0000
+@@ -17,6 +17,6 @@
+ # <http://www.gnu.org/licenses/>.
+ #
+ 
+-MULTILIB_OPTIONS = msoft-float mcpu=v8
+-MULTILIB_DIRNAMES = soft v8
++MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
++MULTILIB_DIRNAMES = soft v8 leon3
+ MULTILIB_MATCHES = msoft-float=mno-fpu
+diff -Naur gcc-4.8.2.orig/gcc/config/sparc/t-sparc gcc-4.8.2/gcc/config/sparc/t-sparc
+--- gcc-4.8.2.orig/gcc/config/sparc/t-sparc	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/sparc/t-sparc	2014-03-30 20:21:40.627594474 +0000
+@@ -23,7 +23,7 @@
+   insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
+   $(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
+   $(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
+-  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
++  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
+   langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
+   gt-sparc.h
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/tilegx/sync.md gcc-4.8.2/gcc/config/tilegx/sync.md
+--- gcc-4.8.2.orig/gcc/config/tilegx/sync.md	2013-03-21 22:27:07.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilegx/sync.md	2014-03-30 20:21:40.627594474 +0000
+@@ -150,15 +150,22 @@
+    (match_operand:SI 3 "const_int_operand" "")]         ;; model
+   ""
+ {
++  rtx addend;
+   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+ 
+   if (operands[2] != const0_rtx)
+-    emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
++    {
++       addend = gen_reg_rtx (<MODE>mode);
++       emit_move_insn (addend,
++                       gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
++    }
++  else
++    addend = operands[2];
+ 
+   tilegx_pre_atomic_barrier (model);
+   emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
+                                               operands[1],
+-                                              operands[2]));
++                                              addend));
+   tilegx_post_atomic_barrier (model);
+   DONE;
+ })
+diff -Naur gcc-4.8.2.orig/gcc/config/tilegx/tilegx-c.c gcc-4.8.2/gcc/config/tilegx/tilegx-c.c
+--- gcc-4.8.2.orig/gcc/config/tilegx/tilegx-c.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilegx/tilegx-c.c	2014-03-30 20:21:40.627594474 +0000
+@@ -47,6 +47,9 @@
+   if (TARGET_32BIT)
+     builtin_define ("__tilegx32__");
+ 
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++
+   TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
+   GNU_USER_TARGET_OS_CPP_BUILTINS ();
+ }
+diff -Naur gcc-4.8.2.orig/gcc/config/tilegx/tilegx.c gcc-4.8.2/gcc/config/tilegx/tilegx.c
+--- gcc-4.8.2.orig/gcc/config/tilegx/tilegx.c	2013-03-27 06:29:49.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilegx/tilegx.c	2014-03-30 20:21:40.627594474 +0000
+@@ -702,6 +702,16 @@
+ }
+ 
+ 
++/* Implement TARGET_EXPAND_TO_RTL_HOOK.  */
++static void
++tilegx_expand_to_rtl_hook (void)
++{
++  /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
++     only care about uses actually emitted.  */
++  crtl->uses_pic_offset_table = 0;
++}
++
++
+ /* Implement TARGET_SHIFT_TRUNCATION_MASK.  DImode shifts use the mode
+    matching insns and therefore guarantee that the shift count is
+    modulo 64.  SImode shifts sometimes use the 64 bit version so do
+@@ -3543,6 +3553,12 @@
+     }
+   if (!pat)
+     return NULL_RTX;
++
++  /* If we are generating a prefetch, tell the scheduler not to move
++     it around.  */
++  if (GET_CODE (pat) == PREFETCH)
++    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+   emit_insn (pat);
+ 
+   if (nonvoid)
+@@ -4368,10 +4384,12 @@
+   basic_block bb;
+   FOR_EACH_BB (bb)
+     {
+-      rtx insn, next;
++      rtx insn, next, prev;
+       rtx end = NEXT_INSN (BB_END (bb));
+ 
+-      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
++      prev = NULL_RTX;
++      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
++	   prev = insn, insn = next)
+ 	{
+ 	  next = next_insn_to_bundle (NEXT_INSN (insn), end);
+ 
+@@ -4396,6 +4414,18 @@
+ 		  PUT_MODE (insn, SImode);
+ 		}
+ 	    }
++
++	  /* Delete barrier insns, because they can mess up the
++	     emitting of bundle braces.  If it is end-of-bundle, then
++	     the previous insn must be marked end-of-bundle.  */
++	  if (get_attr_type (insn) == TYPE_NOTHING) {
++	    if (GET_MODE (insn) == QImode && prev != NULL
++		&& GET_MODE (prev) == SImode)
++	      {
++		PUT_MODE (prev, QImode);
++	      }
++	    delete_insn (insn);
++	  }
+ 	}
+     }
+ }
+@@ -5498,6 +5528,9 @@
+ #undef  TARGET_RTX_COSTS
+ #define TARGET_RTX_COSTS tilegx_rtx_costs
+ 
++#undef  TARGET_EXPAND_TO_RTL_HOOK
++#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
++
+ #undef  TARGET_SHIFT_TRUNCATION_MASK
+ #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
+ 
+diff -Naur gcc-4.8.2.orig/gcc/config/tilegx/tilegx.md gcc-4.8.2/gcc/config/tilegx/tilegx.md
+--- gcc-4.8.2.orig/gcc/config/tilegx/tilegx.md	2013-03-27 06:27:57.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilegx/tilegx.md	2014-03-30 20:21:40.630928019 +0000
+@@ -5076,10 +5076,8 @@
+ 
+
+ ;; Network intrinsics
+ 
+-;; Note the "pseudo" text is handled specially by the
+-;; asm_output_opcode routine.  If the output is an empty string, the
+-;; instruction would bypass the asm_output_opcode routine, bypassing
+-;; the bundle handling code.
++;; Note the this barrier is of type "nothing," which is deleted after
++;; the final scheduling pass so that nothing is emitted for it.
+ (define_insn "tilegx_network_barrier"
+   [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
+   ""
+diff -Naur gcc-4.8.2.orig/gcc/config/tilepro/tilepro-c.c gcc-4.8.2/gcc/config/tilepro/tilepro-c.c
+--- gcc-4.8.2.orig/gcc/config/tilepro/tilepro-c.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilepro/tilepro-c.c	2014-03-30 20:21:40.630928019 +0000
+@@ -44,6 +44,11 @@
+   builtin_define ("__tile_chip__=1");
+   builtin_define ("__tile_chip_rev__=0");
+ 
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
++  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
++
+   TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
+   GNU_USER_TARGET_OS_CPP_BUILTINS ();
+ }
+diff -Naur gcc-4.8.2.orig/gcc/config/tilepro/tilepro.c gcc-4.8.2/gcc/config/tilepro/tilepro.c
+--- gcc-4.8.2.orig/gcc/config/tilepro/tilepro.c	2013-03-26 06:13:34.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilepro/tilepro.c	2014-03-30 20:21:40.630928019 +0000
+@@ -3167,6 +3167,12 @@
+     }
+   if (!pat)
+     return NULL_RTX;
++
++  /* If we are generating a prefetch, tell the scheduler not to move
++     it around.  */
++  if (GET_CODE (pat) == PREFETCH)
++    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+   emit_insn (pat);
+ 
+   if (nonvoid)
+diff -Naur gcc-4.8.2.orig/gcc/config/tilepro/tilepro.md gcc-4.8.2/gcc/config/tilepro/tilepro.md
+--- gcc-4.8.2.orig/gcc/config/tilepro/tilepro.md	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/config/tilepro/tilepro.md	2014-03-30 20:21:40.630928019 +0000
+@@ -795,7 +795,7 @@
+ 
+ (define_expand "ctzdi2"
+   [(set (match_operand:DI 0 "register_operand" "")
+-	(ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++	(ctz:DI (match_operand:DI 1 "register_operand" "")))]
+   ""
+ {
+   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
+@@ -823,7 +823,7 @@
+ 
+ (define_expand "clzdi2"
+   [(set (match_operand:DI 0 "register_operand" "")
+-	(clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++	(clz:DI (match_operand:DI 1 "register_operand" "")))]
+   ""
+ {
+   rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
+@@ -851,7 +851,7 @@
+ 
+ (define_expand "ffsdi2"
+   [(set (match_operand:DI 0 "register_operand" "")
+-	(ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++	(ffs:DI (match_operand:DI 1 "register_operand" "")))]
+   ""
+ {
+   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
+diff -Naur gcc-4.8.2.orig/gcc/config.gcc gcc-4.8.2/gcc/config.gcc
+--- gcc-4.8.2.orig/gcc/config.gcc	2013-10-03 00:47:24.000000000 +0000
++++ gcc-4.8.2/gcc/config.gcc	2014-03-30 20:21:40.630928019 +0000
+@@ -1761,6 +1761,14 @@
+ 	tmake_file="${tmake_file} microblaze/t-microblaze-linux"
+ 	;;
+ microblaze*-*-rtems*)
++	case $target in
++		microblazeel-*)
++			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
++			;;
++		microblaze-*)
++			tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
++			;;
++	esac
+ 	tm_file="${tm_file} dbxelf.h"
+ 	tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
+ 	c_target_objs="${c_target_objs} microblaze-c.o"
+@@ -2963,11 +2971,18 @@
+          with_cpu=8540
+       fi       
+       ;;
+-    sparc-leon*-*)
+-      with_cpu=v8;
+-      ;;
+     sparc*-*-*)
+-      with_cpu="`echo ${target} | sed 's/-.*$//'`"
++      case ${target} in
++	*-leon-*)
++	  with_cpu=leon
++	  ;;
++	*-leon[3-9]*)
++	  with_cpu=leon3
++	  ;;
++	*)
++	  with_cpu="`echo ${target} | sed 's/-.*$//'`"
++	  ;;
++      esac
+       ;;
+   esac
+ 
+@@ -3587,7 +3602,7 @@
+ 			case ${val} in
+ 			"" | sparc | sparcv9 | sparc64 \
+ 			| v7 | cypress \
+-			| v8 | supersparc | hypersparc | leon \
++			| v8 | supersparc | hypersparc | leon | leon3 \
+ 			| sparclite | f930 | f934 | sparclite86x \
+ 			| sparclet | tsc701 \
+ 			| v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
+@@ -3745,15 +3760,6 @@
+ 		cxx_target_objs="${cxx_target_objs} sh-c.o"
+ 		;;
+ 
+-	sparc-leon*-*)
+-		if test x$with_tune = x ; then
+-		  with_tune=leon;
+-		fi
+-
+-		# The SPARC port checks this value at compile-time.
+-		target_cpu_default2="TARGET_CPU_$with_cpu"
+-		;;
+-
+ 	sparc*-*-*)
+ 		# Some standard aliases.
+ 		case x$with_cpu in
+@@ -3765,6 +3771,17 @@
+ 			;;
+ 		esac
+ 
++		if test x$with_tune = x ; then
++		      case ${target} in
++		      *-leon-*)
++			  with_tune=leon
++			  ;;
++		      *-leon[3-9]*)
++			  with_tune=leon3
++			  ;;
++		      esac
++		fi
++
+ 		# The SPARC port checks this value at compile-time.
+ 		target_cpu_default2="TARGET_CPU_$with_cpu"
+ 		;;
+diff -Naur gcc-4.8.2.orig/gcc/config.in gcc-4.8.2/gcc/config.in
+--- gcc-4.8.2.orig/gcc/config.in	2013-10-16 07:27:58.000000000 +0000
++++ gcc-4.8.2/gcc/config.in	2014-03-30 20:21:40.630928019 +0000
+@@ -363,6 +363,12 @@
+ #endif
+ 
+ 
++/* Define if your assembler supports the 'ud2' mnemonic. */
++#ifndef USED_FOR_TARGET
++#undef HAVE_AS_IX86_UD2
++#endif
++
++
+ /* Define if your assembler supports the lituse_jsrdirect relocation. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AS_JSRDIRECT_RELOCS
+@@ -375,6 +381,12 @@
+ #endif
+ 
+ 
++/* Define if your assembler supports LEON instructions. */
++#ifndef USED_FOR_TARGET
++#undef HAVE_AS_LEON
++#endif
++
++
+ /* Define if the assembler won't complain about a line such as # 0 "" 2. */
+ #ifndef USED_FOR_TARGET
+ #undef HAVE_AS_LINE_ZERO
+diff -Naur gcc-4.8.2.orig/gcc/configure gcc-4.8.2/gcc/configure
+--- gcc-4.8.2.orig/gcc/configure	2013-06-19 01:18:38.000000000 +0000
++++ gcc-4.8.2/gcc/configure	2014-03-30 20:21:40.634261520 +0000
+@@ -11202,13 +11202,11 @@
+ 	/* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
+ 	*) realsrcdir=../${srcdir};;
+ 	esac
+-	saved_CFLAGS="${CFLAGS}"
+ 	CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+-	LDFLAGS="${LDFLAGS_FOR_BUILD}" \
++	LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
+ 	${realsrcdir}/configure \
+ 		--enable-languages=${enable_languages-all} \
+ 		--target=$target_alias --host=$build_alias --build=$build_alias
+-	CFLAGS="${saved_CFLAGS}"
+ 
+ 	# We just finished tests for the build machine, so rename
+ 	# the file auto-build.h in the gcc directory.
+@@ -11703,6 +11701,7 @@
+ if test x$build != x$host || test "x$coverage_flags" != x
+ then
+     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
++    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
+     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
+ fi
+ 
+@@ -17828,7 +17827,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 17831 "configure"
++#line 17830 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -17934,7 +17933,7 @@
+   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+   lt_status=$lt_dlunknown
+   cat > conftest.$ac_ext <<_LT_EOF
+-#line 17937 "configure"
++#line 17936 "configure"
+ #include "confdefs.h"
+ 
+ #if HAVE_DLFCN_H
+@@ -24263,6 +24262,43 @@
+ $as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
+ 
+ fi
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
++$as_echo_n "checking assembler for LEON instructions... " >&6; }
++if test "${gcc_cv_as_sparc_leon+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  gcc_cv_as_sparc_leon=no
++  if test x$gcc_cv_as != x; then
++    $as_echo '.text
++       .register %g2, #scratch
++       .register %g3, #scratch
++       .align 4
++       smac %g2, %g3, %g1
++       umac %g2, %g3, %g1
++       cas [%g2], %g3, %g1' > conftest.s
++    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }
++    then
++	gcc_cv_as_sparc_leon=yes
++    else
++      echo "configure: failed program was" >&5
++      cat conftest.s >&5
++    fi
++    rm -f conftest.o conftest.s
++  fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
++$as_echo "$gcc_cv_as_sparc_leon" >&6; }
++if test $gcc_cv_as_sparc_leon = yes; then
++
++$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
++
++fi
+     ;;
+ 
+   i[34567]86-*-* | x86_64-*-*)
+@@ -24745,6 +24781,10 @@
+ 
+     # These two are used unconditionally by i386.[ch]; it is to be defined
+     # to 1 if the feature is present, 0 otherwise.
++    as_ix86_gotoff_in_data_opt=
++    if test x$gas = xyes; then
++      as_ix86_gotoff_in_data_opt="--32"
++    fi
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
+ $as_echo_n "checking assembler for GOTOFF in data... " >&6; }
+ if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
+@@ -24761,7 +24801,7 @@
+ 	nop
+ 	.data
+ 	.long .L0@GOTOFF' > conftest.s
+-    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
++    if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
+   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+@@ -24822,6 +24862,37 @@
+ 
+ fi
+ 
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
++$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
++if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  gcc_cv_as_ix86_ud2=no
++  if test x$gcc_cv_as != x; then
++    $as_echo 'ud2' > conftest.s
++    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }
++    then
++	gcc_cv_as_ix86_ud2=yes
++    else
++      echo "configure: failed program was" >&5
++      cat conftest.s >&5
++    fi
++    rm -f conftest.o conftest.s
++  fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
++$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
++if test $gcc_cv_as_ix86_ud2 = yes; then
++
++$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
++
++fi
++
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
+ $as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
+ if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
+@@ -27239,8 +27310,8 @@
+ $as_echo_n "checking for exported symbols... " >&6; }
+   if test "x$export_sym_check" != x; then
+     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+-    if $export_sym_check conftest | grep foobar > /dev/null; then
++    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+       : # No need to use a flag
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+@@ -27249,8 +27320,8 @@
+ $as_echo "yes" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
+ $as_echo_n "checking for -rdynamic... " >&6; }
+-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+-      if $export_sym_check conftest | grep foobar > /dev/null; then
++      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+         plugin_rdynamic=yes
+         pluginlibs="-rdynamic"
+       else
+diff -Naur gcc-4.8.2.orig/gcc/configure.ac gcc-4.8.2/gcc/configure.ac
+--- gcc-4.8.2.orig/gcc/configure.ac	2013-06-19 01:18:38.000000000 +0000
++++ gcc-4.8.2/gcc/configure.ac	2014-03-30 20:21:40.634261520 +0000
+@@ -1516,13 +1516,11 @@
+ 	/* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
+ 	*) realsrcdir=../${srcdir};;
+ 	esac
+-	saved_CFLAGS="${CFLAGS}"
+ 	CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
+-	LDFLAGS="${LDFLAGS_FOR_BUILD}" \
++	LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
+ 	${realsrcdir}/configure \
+ 		--enable-languages=${enable_languages-all} \
+ 		--target=$target_alias --host=$build_alias --build=$build_alias
+-	CFLAGS="${saved_CFLAGS}"
+ 
+ 	# We just finished tests for the build machine, so rename
+ 	# the file auto-build.h in the gcc directory.
+@@ -1887,6 +1885,7 @@
+ if test x$build != x$host || test "x$coverage_flags" != x
+ then
+     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
++    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
+     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
+ fi
+ 
+@@ -3611,6 +3610,19 @@
+        kasumi_fi_xor %f46, %f48, %f50, %f52],,
+       [AC_DEFINE(HAVE_AS_SPARC4, 1,
+                 [Define if your assembler supports SPARC4 instructions.])])
++
++    gcc_GAS_CHECK_FEATURE([LEON instructions],
++      gcc_cv_as_sparc_leon,,
++      [-Aleon],
++      [.text
++       .register %g2, #scratch
++       .register %g3, #scratch
++       .align 4
++       smac %g2, %g3, %g1
++       umac %g2, %g3, %g1
++       cas [[%g2]], %g3, %g1],,
++      [AC_DEFINE(HAVE_AS_LEON, 1,
++                [Define if your assembler supports LEON instructions.])])
+     ;;
+ 
+ changequote(,)dnl
+@@ -3749,8 +3761,13 @@
+ 
+     # These two are used unconditionally by i386.[ch]; it is to be defined
+     # to 1 if the feature is present, 0 otherwise.
++    as_ix86_gotoff_in_data_opt=
++    if test x$gas = xyes; then
++      as_ix86_gotoff_in_data_opt="--32"
++    fi
+     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
+-        gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
++      gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
++      [$as_ix86_gotoff_in_data_opt],
+ [	.text
+ .L0:
+ 	nop
+@@ -3772,6 +3789,12 @@
+         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
+           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
+ 
++    gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
++	gcc_cv_as_ix86_ud2,,,
++	[ud2],,
++      [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
++	[Define if your assembler supports the 'ud2' mnemonic.])])
++
+     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
+         gcc_cv_as_ix86_tlsgdplt,,,
+ 	[call    tls_gd@tlsgdplt],
+@@ -5193,15 +5216,15 @@
+   AC_MSG_CHECKING([for exported symbols])
+   if test "x$export_sym_check" != x; then
+     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+-    if $export_sym_check conftest | grep foobar > /dev/null; then
++    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+       : # No need to use a flag
+       AC_MSG_RESULT([yes])
+     else
+       AC_MSG_RESULT([yes])
+       AC_MSG_CHECKING([for -rdynamic])
+-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+-      if $export_sym_check conftest | grep foobar > /dev/null; then
++      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+         plugin_rdynamic=yes
+         pluginlibs="-rdynamic"
+       else
+diff -Naur gcc-4.8.2.orig/gcc/cp/call.c gcc-4.8.2/gcc/cp/call.c
+--- gcc-4.8.2.orig/gcc/cp/call.c	2013-07-25 15:07:27.000000000 +0000
++++ gcc-4.8.2/gcc/cp/call.c	2014-03-30 20:21:40.637594959 +0000
+@@ -892,6 +892,9 @@
+ 
+       if (i < CONSTRUCTOR_NELTS (ctor))
+ 	val = CONSTRUCTOR_ELT (ctor, i)->value;
++      else if (TREE_CODE (ftype) == REFERENCE_TYPE)
++	/* Value-initialization of reference is ill-formed.  */
++	return NULL;
+       else
+ 	{
+ 	  if (empty_ctor == NULL_TREE)
+@@ -5806,9 +5809,11 @@
+       && convs->kind != ck_ambig
+       && (convs->kind != ck_ref_bind
+ 	  || convs->user_conv_p)
+-      && convs->kind != ck_rvalue
++      && (convs->kind != ck_rvalue
++	  || SCALAR_TYPE_P (totype))
+       && convs->kind != ck_base)
+     {
++      bool complained = false;
+       conversion *t = convs;
+ 
+       /* Give a helpful error if this is bad because of excess braces.  */
+@@ -5816,7 +5821,14 @@
+ 	  && SCALAR_TYPE_P (totype)
+ 	  && CONSTRUCTOR_NELTS (expr) > 0
+ 	  && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
+-	permerror (loc, "too many braces around initializer for %qT", totype);
++	{
++	  complained = true;
++	  permerror (loc, "too many braces around initializer "
++		     "for %qT", totype);
++	  while (BRACE_ENCLOSED_INITIALIZER_P (expr)
++		 && CONSTRUCTOR_NELTS (expr) == 1)
++	    expr = CONSTRUCTOR_ELT (expr, 0)->value;
++	}
+ 
+       for (; t ; t = next_conversion (t))
+ 	{
+@@ -5853,8 +5865,9 @@
+ 	    break;
+ 	}
+ 
+-      permerror (loc, "invalid conversion from %qT to %qT",
+-		 TREE_TYPE (expr), totype);
++      if (!complained)
++	permerror (loc, "invalid conversion from %qT to %qT",
++		   TREE_TYPE (expr), totype);
+       if (fn)
+ 	permerror (DECL_SOURCE_LOCATION (fn),
+ 		   "  initializing argument %P of %qD", argnum, fn);
+@@ -5999,6 +6012,8 @@
+ 	   to avoid the error about taking the address of a temporary.  */
+ 	array = cp_build_addr_expr (array, complain);
+ 	array = cp_convert (build_pointer_type (elttype), array, complain);
++	if (array == error_mark_node)
++	  return error_mark_node;
+ 
+ 	/* Build up the initializer_list object.  */
+ 	totype = complete_type (totype);
+@@ -6023,8 +6038,11 @@
+ 	  return fold_if_not_in_template (expr);
+ 	}
+       expr = reshape_init (totype, expr, complain);
+-      return get_target_expr_sfinae (digest_init (totype, expr, complain),
++      expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
+ 				     complain);
++      if (expr != error_mark_node)
++	TARGET_EXPR_LIST_INIT_P (expr) = true;
++      return expr;
+ 
+     default:
+       break;
+@@ -7414,7 +7432,7 @@
+   struct z_candidate *candidates = 0, *cand;
+   tree explicit_targs = NULL_TREE;
+   tree basetype = NULL_TREE;
+-  tree access_binfo;
++  tree access_binfo, binfo;
+   tree optype;
+   tree first_mem_arg = NULL_TREE;
+   tree instance_ptr;
+@@ -7454,6 +7472,7 @@
+   if (!conversion_path)
+     conversion_path = BASELINK_BINFO (fns);
+   access_binfo = BASELINK_ACCESS_BINFO (fns);
++  binfo = BASELINK_BINFO (fns);
+   optype = BASELINK_OPTYPE (fns);
+   fns = BASELINK_FUNCTIONS (fns);
+   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
+@@ -7697,13 +7716,13 @@
+ 	    {
+ 	      /* Optimize away vtable lookup if we know that this
+ 		 function can't be overridden.  We need to check if
+-		 the context and the instance type are the same,
++		 the context and the type where we found fn are the same,
+ 		 actually FN might be defined in a different class
+ 		 type because of a using-declaration. In this case, we
+ 		 do not want to perform a non-virtual call.  */
+ 	      if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
+ 		  && same_type_ignoring_top_level_qualifiers_p
+-		  (DECL_CONTEXT (fn), TREE_TYPE (instance))
++		  (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
+ 		  && resolves_to_fixed_type_p (instance, 0))
+ 		flags |= LOOKUP_NONVIRTUAL;
+               if (explicit_targs)
+diff -Naur gcc-4.8.2.orig/gcc/cp/cp-tree.h gcc-4.8.2/gcc/cp/cp-tree.h
+--- gcc-4.8.2.orig/gcc/cp/cp-tree.h	2013-08-20 12:59:37.000000000 +0000
++++ gcc-4.8.2/gcc/cp/cp-tree.h	2014-03-30 20:21:40.637594959 +0000
+@@ -344,7 +344,8 @@
+ /* Returns true iff NODE is a BASELINK.  */
+ #define BASELINK_P(NODE) \
+   (TREE_CODE (NODE) == BASELINK)
+-/* The BINFO indicating the base from which the BASELINK_FUNCTIONS came.  */
++/* The BINFO indicating the base in which lookup found the
++   BASELINK_FUNCTIONS.  */
+ #define BASELINK_BINFO(NODE) \
+   (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
+ /* The functions referred to by the BASELINK; either a FUNCTION_DECL,
+diff -Naur gcc-4.8.2.orig/gcc/cp/cvt.c gcc-4.8.2/gcc/cp/cvt.c
+--- gcc-4.8.2.orig/gcc/cp/cvt.c	2013-08-20 12:59:37.000000000 +0000
++++ gcc-4.8.2/gcc/cp/cvt.c	2014-03-30 20:21:40.637594959 +0000
+@@ -203,13 +203,13 @@
+ 
+   if (null_ptr_cst_p (expr))
+     {
+-      if (complain & tf_warning)
+-	maybe_warn_zero_as_null_pointer_constant (expr, loc);
+-
+       if (TYPE_PTRMEMFUNC_P (type))
+ 	return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
+ 				 /*c_cast_p=*/false, complain);
+ 
++      if (complain & tf_warning)
++	maybe_warn_zero_as_null_pointer_constant (expr, loc);
++
+       /* A NULL pointer-to-data-member is represented by -1, not by
+ 	 zero.  */
+       tree val = (TYPE_PTRDATAMEM_P (type)
+@@ -743,6 +743,7 @@
+ 	     unspecified.  */
+ 	  if ((complain & tf_warning)
+ 	      && TREE_CODE (e) == INTEGER_CST
++	      && ENUM_UNDERLYING_TYPE (type)
+ 	      && !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
+ 	    warning_at (loc, OPT_Wconversion, 
+ 			"the result of the conversion is unspecified because "
+diff -Naur gcc-4.8.2.orig/gcc/cp/decl.c gcc-4.8.2/gcc/cp/decl.c
+--- gcc-4.8.2.orig/gcc/cp/decl.c	2013-10-08 22:29:49.000000000 +0000
++++ gcc-4.8.2/gcc/cp/decl.c	2014-03-30 20:21:40.637594959 +0000
+@@ -1867,9 +1867,9 @@
+       /* Merge the data types specified in the two decls.  */
+       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
+ 
+-      /* If merge_types produces a non-typedef type, just use the old type.  */
+-      if (TREE_CODE (newdecl) == TYPE_DECL
+-	  && newtype == DECL_ORIGINAL_TYPE (newdecl))
++      /* For typedefs use the old type, as the new type's DECL_NAME points
++	 at newdecl, which will be ggc_freed.  */
++      if (TREE_CODE (newdecl) == TYPE_DECL)
+ 	newtype = oldtype;
+ 
+       if (TREE_CODE (newdecl) == VAR_DECL)
+@@ -8193,7 +8193,9 @@
+ 	      abi_1_itype = error_mark_node;
+ 	    }
+ 
+-	  size = maybe_constant_value (size);
++	  if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
++	    size = maybe_constant_value (size);
++
+ 	  if (!TREE_CONSTANT (size))
+ 	    size = osize;
+ 	}
+@@ -11891,7 +11893,10 @@
+ 
+   if (decl
+       && (DECL_CLASS_TEMPLATE_P (decl)
+-	  || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
++	  /* If scope is ts_current we're defining a class, so ignore a
++	     template template parameter.  */
++	  || (scope != ts_current
++	      && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
+     decl = DECL_TEMPLATE_RESULT (decl);
+ 
+   if (decl && TREE_CODE (decl) == TYPE_DECL)
+diff -Naur gcc-4.8.2.orig/gcc/cp/decl2.c gcc-4.8.2/gcc/cp/decl2.c
+--- gcc-4.8.2.orig/gcc/cp/decl2.c	2013-05-20 13:37:44.000000000 +0000
++++ gcc-4.8.2/gcc/cp/decl2.c	2014-03-30 20:21:40.637594959 +0000
+@@ -2884,7 +2884,7 @@
+       TREE_PUBLIC (fn) = TREE_PUBLIC (var);
+       DECL_ARTIFICIAL (fn) = true;
+       DECL_COMDAT (fn) = DECL_COMDAT (var);
+-      DECL_EXTERNAL (fn) = true;
++      DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
+       if (DECL_ONE_ONLY (var))
+ 	make_decl_one_only (fn, cxx_comdat_group (fn));
+       if (TREE_PUBLIC (var))
+@@ -3946,6 +3946,8 @@
+       if (TREE_PUBLIC (var))
+ 	{
+           tree single_init_fn = get_tls_init_fn (var);
++	  if (single_init_fn == NULL_TREE)
++	    continue;
+ 	  cgraph_node *alias
+ 	    = cgraph_same_body_alias (cgraph_get_create_node (fn),
+ 				      single_init_fn, fn);
+@@ -3960,6 +3962,22 @@
+   expand_or_defer_fn (finish_function (0));
+ }
+ 
++/* The entire file is now complete.  If requested, dump everything
++   to a file.  */
++
++static void
++dump_tu (void)
++{
++  int flags;
++  FILE *stream = dump_begin (TDI_tu, &flags);
++
++  if (stream)
++    {
++      dump_node (global_namespace, flags & ~TDF_SLIM, stream);
++      dump_end (TDI_tu, stream);
++    }
++}
++
+ /* This routine is called at the end of compilation.
+    Its job is to create all the code needed to initialize and
+    destroy the global aggregates.  We do the destruction
+@@ -3990,6 +4008,7 @@
+   if (pch_file)
+     {
+       c_common_write_pch ();
++      dump_tu ();
+       return;
+     }
+ 
+@@ -4359,16 +4378,7 @@
+ 
+   /* The entire file is now complete.  If requested, dump everything
+      to a file.  */
+-  {
+-    int flags;
+-    FILE *stream = dump_begin (TDI_tu, &flags);
+-
+-    if (stream)
+-      {
+-	dump_node (global_namespace, flags & ~TDF_SLIM, stream);
+-	dump_end (TDI_tu, stream);
+-      }
+-  }
++  dump_tu ();
+ 
+   if (flag_detailed_statistics)
+     {
+diff -Naur gcc-4.8.2.orig/gcc/cp/except.c gcc-4.8.2/gcc/cp/except.c
+--- gcc-4.8.2.orig/gcc/cp/except.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/cp/except.c	2014-03-30 20:21:40.640928378 +0000
+@@ -380,6 +380,9 @@
+ {
+   tree type = body ? TREE_TYPE (body) : void_type_node;
+ 
++  if (!flag_exceptions)
++    return body;
++
+   if (cond && !value_dependent_expression_p (cond))
+     {
+       cond = cxx_constant_value (cond);
+diff -Naur gcc-4.8.2.orig/gcc/cp/mangle.c gcc-4.8.2/gcc/cp/mangle.c
+--- gcc-4.8.2.orig/gcc/cp/mangle.c	2013-04-03 03:11:12.000000000 +0000
++++ gcc-4.8.2/gcc/cp/mangle.c	2014-03-30 20:21:40.640928378 +0000
+@@ -3478,6 +3478,7 @@
+ 
+   if (G.need_abi_warning
+       /* Don't do this for a fake symbol we aren't going to emit anyway.  */
++      && TREE_CODE (decl) != TYPE_DECL
+       && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
+       && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
+     {
+@@ -3773,7 +3774,8 @@
+ static void
+ write_guarded_var_name (const tree variable)
+ {
+-  if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
++  if (DECL_NAME (variable)
++      && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
+     /* The name of a guard variable for a reference temporary should refer
+        to the reference, not the temporary.  */
+     write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
+diff -Naur gcc-4.8.2.orig/gcc/cp/name-lookup.c gcc-4.8.2/gcc/cp/name-lookup.c
+--- gcc-4.8.2.orig/gcc/cp/name-lookup.c	2013-08-18 01:07:02.000000000 +0000
++++ gcc-4.8.2/gcc/cp/name-lookup.c	2014-03-30 20:21:40.640928378 +0000
+@@ -394,7 +394,8 @@
+     }
+ }
+ 
+-/* Strip non dependent using declarations.  */
++/* Strip non dependent using declarations. If DECL is dependent,
++   surreptitiously create a typename_type and return it.  */
+ 
+ tree
+ strip_using_decl (tree decl)
+@@ -404,6 +405,23 @@
+ 
+   while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
+     decl = USING_DECL_DECLS (decl);
++
++  if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
++      && USING_DECL_TYPENAME_P (decl))
++    {
++      /* We have found a type introduced by a using
++	 declaration at class scope that refers to a dependent
++	 type.
++	     
++	 using typename :: [opt] nested-name-specifier unqualified-id ;
++      */
++      decl = make_typename_type (TREE_TYPE (decl),
++				 DECL_NAME (decl),
++				 typename_type, tf_error);
++      if (decl != error_mark_node)
++	decl = TYPE_NAME (decl);
++    }
++
+   return decl;
+ }
+ 
+@@ -5605,9 +5623,9 @@
+ push_using_directive (tree used)
+ {
+   tree ret;
+-  timevar_start (TV_NAME_LOOKUP);
++  bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
+   ret = push_using_directive_1 (used);
+-  timevar_stop (TV_NAME_LOOKUP);
++  timevar_cond_stop (TV_NAME_LOOKUP, subtime);
+   return ret;
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/cp/parser.c gcc-4.8.2/gcc/cp/parser.c
+--- gcc-4.8.2.orig/gcc/cp/parser.c	2013-10-02 18:27:30.000000000 +0000
++++ gcc-4.8.2/gcc/cp/parser.c	2014-03-30 20:21:40.644261804 +0000
+@@ -6421,10 +6421,6 @@
+   /* Look for the `~'.  */
+   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
+ 
+-  /* Once we see the ~, this has to be a pseudo-destructor.  */
+-  if (!processing_template_decl && !cp_parser_error_occurred (parser))
+-    cp_parser_commit_to_tentative_parse (parser);
+-
+   /* Look for the type-name again.  We are not responsible for
+      checking that it matches the first type-name.  */
+   *type = cp_parser_nonclass_name (parser);
+@@ -14168,25 +14164,7 @@
+   /* Look up the type-name.  */
+   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
+ 
+-  if (TREE_CODE (type_decl) == USING_DECL)
+-    {
+-      if (!DECL_DEPENDENT_P (type_decl))
+-	type_decl = strip_using_decl (type_decl);
+-      else if (USING_DECL_TYPENAME_P (type_decl))
+-	{
+-	  /* We have found a type introduced by a using
+-	     declaration at class scope that refers to a dependent
+-	     type.
+-	     
+-	     using typename :: [opt] nested-name-specifier unqualified-id ;
+-	  */
+-	  type_decl = make_typename_type (TREE_TYPE (type_decl),
+-					  DECL_NAME (type_decl),
+-					  typename_type, tf_error);
+-	  if (type_decl != error_mark_node)
+-	    type_decl = TYPE_NAME (type_decl);
+-	}
+-    }
++  type_decl = strip_using_decl (type_decl);
+   
+   if (TREE_CODE (type_decl) != TYPE_DECL
+       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
+@@ -14742,7 +14720,8 @@
+         {
+           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
+                                             /*initialized=*/0, NULL);
+-          if (underlying_type == error_mark_node)
++          if (underlying_type == error_mark_node
++	      || check_for_bare_parameter_packs (underlying_type))
+             underlying_type = NULL_TREE;
+         }
+     }
+@@ -22209,6 +22188,9 @@
+   tree cast;
+   bool nonconst_p;
+ 
++  if (!type)
++    type = error_mark_node;
++
+   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
+     {
+       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
+@@ -22576,6 +22558,9 @@
+ 	      && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
+ 	    flags = LOOKUP_NORMAL;
+ 	  parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
++	  if (TREE_CODE (parsed_arg) == TARGET_EXPR)
++	    /* This represents the whole initialization.  */
++	    TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
+ 	}
+     }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/cp/pt.c gcc-4.8.2/gcc/cp/pt.c
+--- gcc-4.8.2.orig/gcc/cp/pt.c	2013-09-13 22:22:31.000000000 +0000
++++ gcc-4.8.2/gcc/cp/pt.c	2014-03-30 20:21:40.644261804 +0000
+@@ -170,7 +170,7 @@
+ static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
+ 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 most_specialized_class (tree, tsubst_flags_t);
+ static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
+ static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
+ static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
+@@ -1419,6 +1419,8 @@
+ 		    = DECL_DECLARED_INLINE_P (fn);
+ 		  DECL_SOURCE_LOCATION (clone)
+ 		    = DECL_SOURCE_LOCATION (fn);
++		  DECL_DELETED_FN (clone)
++		    = DECL_DELETED_FN (fn);
+ 		}
+ 	      check_specialization_namespace (tmpl);
+ 
+@@ -3436,7 +3438,7 @@
+           for (i = 0; i < num_packed; ++i, ++out_arg)
+             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
+ 	  if (non_default_args_count > 0)
+-	    non_default_args_count += num_packed;
++	    non_default_args_count += num_packed - 1;
+         }
+       else
+         {
+@@ -3491,6 +3493,11 @@
+       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
+     return true;
+ 
++  /* Don't complain about the injected class name, as we've already
++     complained about the class itself.  */
++  if (DECL_SELF_REFERENCE_P (decl))
++    return false;
++
+   error ("declaration of %q+#D", decl);
+   error (" shadows template parm %q+#D", olddecl);
+   return false;
+@@ -4261,7 +4268,7 @@
+       if (COMPLETE_TYPE_P (inst_type)
+ 	  && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
+ 	{
+-	  tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
++	  tree spec = most_specialized_class (inst_type, tf_none);
+ 	  if (spec && TREE_TYPE (spec) == type)
+ 	    permerror (input_location,
+ 		       "partial specialization of %qT after instantiation "
+@@ -6672,6 +6679,8 @@
+           /* Store this argument.  */
+           if (arg == error_mark_node)
+             lost++;
++	  if (lost)
++	    break;
+           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
+ 
+ 	  /* We are done with all of the arguments.  */
+@@ -8572,7 +8581,7 @@
+ 
+   /* Determine what specialization of the original template to
+      instantiate.  */
+-  t = most_specialized_class (type, templ, tf_warning_or_error);
++  t = most_specialized_class (type, tf_warning_or_error);
+   if (t == error_mark_node)
+     {
+       TYPE_BEING_DEFINED (type) = 1;
+@@ -12694,27 +12703,43 @@
+   tsubst_expr ((NODE), args, complain, in_decl,	\
+ 	       integral_constant_expression_p)
+   tree decl, init, cond, incr;
+-  bool init_decl;
+ 
+   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
+   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
+   decl = TREE_OPERAND (init, 0);
+   init = TREE_OPERAND (init, 1);
+-  /* Do this before substituting into decl to handle 'auto'.  */
+-  init_decl = (init && TREE_CODE (init) == DECL_EXPR);
+-  init = RECUR (init);
+-  decl = RECUR (decl);
+-  if (init_decl)
++  tree decl_expr = NULL_TREE;
++  if (init && TREE_CODE (init) == DECL_EXPR)
+     {
+-      gcc_assert (!processing_template_decl);
+-      init = DECL_INITIAL (decl);
+-      DECL_INITIAL (decl) = NULL_TREE;
++      /* We need to jump through some hoops to handle declarations in the
++	 for-init-statement, since we might need to handle auto deduction,
++	 but we need to keep control of initialization.  */
++      decl_expr = init;
++      init = DECL_INITIAL (DECL_EXPR_DECL (init));
++      decl = tsubst_decl (decl, args, complain);
+     }
++  else
++    decl = RECUR (decl);
++  init = RECUR (init);
++
++  tree auto_node = type_uses_auto (TREE_TYPE (decl));
++  if (auto_node && init)
++    TREE_TYPE (decl)
++      = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
+ 
+   gcc_assert (!type_dependent_expression_p (decl));
+ 
+   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
+     {
++      if (decl_expr)
++	{
++	  /* Declare the variable, but don't let that initialize it.  */
++	  tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
++	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
++	  RECUR (decl_expr);
++	  DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
++	}
++
+       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
+       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
+       if (TREE_CODE (incr) == MODIFY_EXPR)
+@@ -12731,7 +12756,13 @@
+       return;
+     }
+ 
+-  if (init && !init_decl)
++  if (decl_expr)
++    {
++      /* Declare and initialize the variable.  */
++      RECUR (decl_expr);
++      init = NULL_TREE;
++    }
++  else if (init)
+     {
+       tree c;
+       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
+@@ -13710,6 +13741,10 @@
+ 	RETURN (r);
+       }
+ 
++    case POINTER_PLUS_EXPR:
++      return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
++				      RECUR (TREE_OPERAND (t, 1)));
++
+     case SCOPE_REF:
+       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
+ 				  /*address_p=*/false));
+@@ -14471,12 +14506,12 @@
+ 
+     case TRAIT_EXPR:
+       {
+-	tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
+-				  complain, in_decl);
++	tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
++			     complain, in_decl);
+ 
+ 	tree type2 = TRAIT_EXPR_TYPE2 (t);
+ 	if (type2)
+-	  type2 = tsubst_copy (type2, args, complain, in_decl);
++	  type2 = tsubst (type2, args, complain, in_decl);
+ 	
+ 	RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
+       }
+@@ -14778,6 +14813,8 @@
+   /* Instantiation of the function happens in the context of the function
+      template, not the context of the overload resolution we're doing.  */
+   push_to_top_level ();
++  struct pointer_map_t *saved_local_specializations = local_specializations;
++  local_specializations = NULL;
+   /* If there are dependent arguments, e.g. because we're doing partial
+      ordering, make sure processing_template_decl stays set.  */
+   if (uses_template_parms (targ_ptr))
+@@ -14793,6 +14830,7 @@
+ 		   targ_ptr, complain, gen_tmpl);
+   if (DECL_CLASS_SCOPE_P (gen_tmpl))
+     pop_nested_class ();
++  local_specializations = saved_local_specializations;
+   pop_from_top_level ();
+ 
+   if (fndecl == error_mark_node)
+@@ -15192,8 +15230,11 @@
+ 
+   /* If we're looking for an exact match, check that what we got
+      is indeed an exact match.  It might not be if some template
+-     parameters are used in non-deduced contexts.  */
+-  if (strict == DEDUCE_EXACT)
++     parameters are used in non-deduced contexts.  But don't check
++     for an exact match if we have dependent template arguments;
++     in that case we're doing partial ordering, and we already know
++     that we have two candidates that will provide the actual type.  */
++  if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
+     {
+       tree substed = TREE_TYPE (decl);
+       unsigned int i;
+@@ -15749,7 +15790,7 @@
+ 	  if (subargs != error_mark_node
+ 	      && !any_dependent_template_arguments_p (subargs))
+ 	    {
+-	      elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
++	      elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
+ 	      if (try_one_overload (tparms, targs, tempargs, parm,
+ 				    elem, strict, sub_strict, addr_p, explain_p)
+ 		  && (!goodfn || !same_type_p (goodfn, elem)))
+@@ -16207,6 +16248,9 @@
+   tree pattern = PACK_EXPANSION_PATTERN (parm);
+   tree pack, packs = NULL_TREE;
+   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
++
++  packed_args = expand_template_argument_pack (packed_args);
++
+   int len = TREE_VEC_LENGTH (packed_args);
+ 
+   /* Determine the parameter packs we will be deducing from the
+@@ -16574,9 +16618,11 @@
+ 	  if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
+ 	      && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
+ 	    return unify_template_deduction_failure (explain_p, parm, arg);
+-
+ 	  {
+ 	    tree parmvec = TYPE_TI_ARGS (parm);
++	    /* An alias template name is never deduced.  */
++	    if (TYPE_ALIAS_P (arg))
++	      arg = strip_typedefs (arg);
+ 	    tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
+ 	    tree full_argvec = add_to_template_args (targs, argvec);
+ 	    tree parm_parms 
+@@ -17553,7 +17599,7 @@
+     return -1;
+ }
+ 
+-/* Determine which of two partial specializations of MAIN_TMPL is more
++/* Determine which of two partial specializations of TMPL is more
+    specialized.
+ 
+    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
+@@ -17569,7 +17615,7 @@
+    two templates is more specialized.  */
+ 
+ static int
+-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
++more_specialized_class (tree tmpl, tree pat1, tree pat2)
+ {
+   tree targs;
+   tree tmpl1, tmpl2;
+@@ -17584,7 +17630,7 @@
+      types in the arguments, and we need our dependency check functions
+      to behave correctly.  */
+   ++processing_template_decl;
+-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
++  targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
+ 			      CLASSTYPE_TI_ARGS (tmpl1),
+ 			      CLASSTYPE_TI_ARGS (tmpl2));
+   if (targs)
+@@ -17593,7 +17639,7 @@
+       any_deductions = true;
+     }
+ 
+-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
++  targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
+ 			      CLASSTYPE_TI_ARGS (tmpl2),
+ 			      CLASSTYPE_TI_ARGS (tmpl1));
+   if (targs)
+@@ -17673,7 +17719,7 @@
+ }
+ 
+ /* Return the innermost template arguments that, when applied to a partial
+-   specialization of MAIN_TMPL whose innermost template parameters are
++   specialization of TMPL whose innermost template parameters are
+    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
+    ARGS.
+ 
+@@ -17688,7 +17734,7 @@
+    is bound to `double'.  */
+ 
+ static tree
+-get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
++get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
+ {
+   int i, ntparms = TREE_VEC_LENGTH (tparms);
+   tree deduced_args;
+@@ -17728,8 +17774,8 @@
+      `T' is `A' but unify () does not check whether `typename T::X'
+      is `int'.  */
+   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
+-  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
+-				     spec_args, main_tmpl,
++  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
++				     spec_args, tmpl,
+ 				     tf_none, false, false);
+   if (spec_args == error_mark_node
+       /* We only need to check the innermost arguments; the other
+@@ -17877,30 +17923,30 @@
+ }
+ 
+ /* Return the most specialized of the class template partial
+-   specializations of TMPL which can produce TYPE, a specialization of
+-   TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
++   specializations which can produce TYPE, a specialization of some class
++   template.  The value returned is actually a TREE_LIST; the TREE_TYPE is
+    a _TYPE node corresponding to the partial specialization, while the
+    TREE_PURPOSE is the set of template arguments that must be
+    substituted into the TREE_TYPE in order to generate TYPE.
+ 
+    If the choice of partial specialization is ambiguous, a diagnostic
+    is issued, and the error_mark_node is returned.  If there are no
+-   partial specializations of TMPL matching TYPE, then NULL_TREE is
+-   returned.  */
++   partial specializations matching TYPE, then NULL_TREE is
++   returned, indicating that the primary template should be used.  */
+ 
+ static tree
+-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
++most_specialized_class (tree type, tsubst_flags_t complain)
+ {
+   tree list = NULL_TREE;
+   tree t;
+   tree champ;
+   int fate;
+   bool ambiguous_p;
+-  tree args;
+   tree outer_args = NULL_TREE;
+ 
+-  tmpl = most_general_template (tmpl);
+-  args = CLASSTYPE_TI_ARGS (type);
++  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
++  tree main_tmpl = most_general_template (tmpl);
++  tree args = CLASSTYPE_TI_ARGS (type);
+ 
+   /* For determining which partial specialization to use, only the
+      innermost args are interesting.  */
+@@ -17910,7 +17956,7 @@
+       args = INNERMOST_TEMPLATE_ARGS (args);
+     }
+ 
+-  for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
++  for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
+     {
+       tree partial_spec_args;
+       tree spec_args;
+@@ -17944,8 +17990,7 @@
+ 
+       partial_spec_args =
+ 	  coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
+-				 add_to_template_args (outer_args,
+-						       partial_spec_args),
++				 partial_spec_args,
+ 				 tmpl, tf_none,
+ 				 /*require_all_args=*/true,
+ 				 /*use_default_args=*/true);
+@@ -18553,6 +18598,10 @@
+ {
+   tree fntype, spec, noex, clone;
+ 
++  /* Don't instantiate a noexcept-specification from template context.  */
++  if (processing_template_decl)
++    return;
++
+   if (DECL_CLONED_FUNCTION_P (fn))
+     fn = DECL_CLONED_FUNCTION (fn);
+   fntype = TREE_TYPE (fn);
+@@ -19955,6 +20004,10 @@
+       if (TREE_CODE (expression) == SCOPE_REF)
+ 	return false;
+ 
++      /* Always dependent, on the number of arguments if nothing else.  */
++      if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
++	return true;
++
+       if (BASELINK_P (expression))
+ 	expression = BASELINK_FUNCTIONS (expression);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/cp/semantics.c gcc-4.8.2/gcc/cp/semantics.c
+--- gcc-4.8.2.orig/gcc/cp/semantics.c	2013-10-08 22:29:49.000000000 +0000
++++ gcc-4.8.2/gcc/cp/semantics.c	2014-03-30 20:21:40.647595228 +0000
+@@ -2501,7 +2501,8 @@
+   tree decl;
+ 
+   decl = fname_decl (input_location, C_RID_CODE (id), id);
+-  if (processing_template_decl && current_function_decl)
++  if (processing_template_decl && current_function_decl
++      && decl != error_mark_node)
+     decl = DECL_NAME (decl);
+   return decl;
+ }
+@@ -3853,7 +3854,7 @@
+ 	     linkage of all functions, and as that causes writes to
+ 	     the data mapped in from the PCH file, it's advantageous
+ 	     to mark the functions at this point.  */
+-	  if (!DECL_IMPLICIT_INSTANTIATION (fn))
++	  if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
+ 	    {
+ 	      /* This function must have external linkage, as
+ 		 otherwise DECL_INTERFACE_KNOWN would have been
+@@ -4291,7 +4292,8 @@
+ 	      error ("%qE has invalid type for %<reduction%>", t);
+ 	      remove = true;
+ 	    }
+-	  else if (FLOAT_TYPE_P (TREE_TYPE (t)))
++	  else if (FLOAT_TYPE_P (TREE_TYPE (t))
++		   || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
+ 	    {
+ 	      enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
+ 	      switch (r_code)
+@@ -4299,10 +4301,26 @@
+ 		case PLUS_EXPR:
+ 		case MULT_EXPR:
+ 		case MINUS_EXPR:
++		  break;
+ 		case MIN_EXPR:
+ 		case MAX_EXPR:
++		  if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
++		    r_code = ERROR_MARK;
+ 		  break;
++		case BIT_AND_EXPR:
++		case BIT_XOR_EXPR:
++		case BIT_IOR_EXPR:
+ 		default:
++		  r_code = ERROR_MARK;
++		  break;
++		case TRUTH_ANDIF_EXPR:
++		case TRUTH_ORIF_EXPR:
++		  if (FLOAT_TYPE_P (TREE_TYPE (t)))
++		    r_code = ERROR_MARK;
++		  break;
++		}
++	      if (r_code == ERROR_MARK)
++		{
+ 		  error ("%qE has invalid type for %<reduction(%s)%>",
+ 			 t, operator_name_info[r_code].name);
+ 		  remove = true;
+@@ -5059,7 +5077,7 @@
+ 	}
+       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
+     }
+-  add_stmt (stmt);
++  finish_expr_stmt (stmt);
+ }
+ 
+ void
+@@ -7543,7 +7561,7 @@
+ 	      unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
+ 	      tree index = bitsize_int (indexi);
+ 
+-	      if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
++	      if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
+ 		return fold_build3_loc (loc,
+ 					BIT_FIELD_REF, type, op00,
+ 					part_width, index);
+@@ -9481,7 +9499,14 @@
+   /* In unevaluated context this isn't an odr-use, so just return the
+      nearest 'this'.  */
+   if (cp_unevaluated_operand)
+-    return lookup_name (this_identifier);
++    {
++      /* In an NSDMI the fake 'this' pointer that we're using for
++	 parsing is in scope_chain.  */
++      if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
++	  && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
++	return scope_chain->x_current_class_ptr;
++      return lookup_name (this_identifier);
++    }
+ 
+   /* Try to default capture 'this' if we can.  */
+   if (!this_capture
+diff -Naur gcc-4.8.2.orig/gcc/cp/typeck.c gcc-4.8.2/gcc/cp/typeck.c
+--- gcc-4.8.2.orig/gcc/cp/typeck.c	2013-07-09 17:52:34.000000000 +0000
++++ gcc-4.8.2/gcc/cp/typeck.c	2014-03-30 20:21:40.647595228 +0000
+@@ -4103,6 +4103,11 @@
+     case TRUTH_ORIF_EXPR:
+     case TRUTH_AND_EXPR:
+     case TRUTH_OR_EXPR:
++      if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
++	{
++	  sorry ("logical operation on vector type");
++	  return error_mark_node;
++	}
+       result_type = boolean_type_node;
+       break;
+ 
+@@ -5010,7 +5015,10 @@
+ cp_truthvalue_conversion (tree expr)
+ {
+   tree type = TREE_TYPE (expr);
+-  if (TYPE_PTRDATAMEM_P (type))
++  if (TYPE_PTRDATAMEM_P (type)
++      /* Avoid ICE on invalid use of non-static member function.  */
++      || (TREE_CODE (expr) == FUNCTION_DECL
++	  && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
+     return build_binary_op (EXPR_LOCATION (expr),
+ 			    NE_EXPR, expr, nullptr_node, 1);
+   else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
+@@ -5588,7 +5596,9 @@
+ 	    inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
+ 	  }
+ 	else
+-	  inc = integer_one_node;
++	  inc = (TREE_CODE (argtype) == VECTOR_TYPE
++		 ? build_one_cst (argtype)
++		 : integer_one_node);
+ 
+ 	inc = cp_convert (argtype, inc, complain);
+ 
+@@ -7194,8 +7204,7 @@
+ 	     side effect associated with any single compound assignment
+ 	     operator. -- end note ]  */
+ 	  lhs = stabilize_reference (lhs);
+-	  if (TREE_SIDE_EFFECTS (rhs))
+-	    rhs = mark_rvalue_use (rhs);
++	  rhs = rvalue (rhs);
+ 	  rhs = stabilize_expr (rhs, &init);
+ 	  newrhs = cp_build_binary_op (input_location,
+ 				       modifycode, lhs, rhs,
+@@ -7611,7 +7620,7 @@
+   /* Handle null pointer to member function conversions.  */
+   if (null_ptr_cst_p (pfn))
+     {
+-      pfn = build_c_cast (input_location, type, pfn);
++      pfn = cp_build_c_cast (type, pfn, complain);
+       return build_ptrmemfunc1 (to_type,
+ 				integer_zero_node,
+ 				pfn);
+diff -Naur gcc-4.8.2.orig/gcc/cse.c gcc-4.8.2/gcc/cse.c
+--- gcc-4.8.2.orig/gcc/cse.c	2013-02-07 08:07:04.000000000 +0000
++++ gcc-4.8.2/gcc/cse.c	2014-03-30 20:21:40.647595228 +0000
+@@ -1824,7 +1824,7 @@
+       }
+ }
+ 
+
+-/* Function called for each rtx to check whether true dependence exist.  */
++/* Function called for each rtx to check whether an anti dependence exist.  */
+ struct check_dependence_data
+ {
+   enum machine_mode mode;
+@@ -1837,7 +1837,7 @@
+ {
+   struct check_dependence_data *d = (struct check_dependence_data *) data;
+   if (*x && MEM_P (*x))
+-    return canon_true_dependence (d->exp, d->mode, d->addr, *x, NULL_RTX);
++    return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr);
+   else
+     return 0;
+ }
+@@ -6081,6 +6081,18 @@
+ 	  validate_change (object, &XEXP (x, 0), new_rtx, 0);
+ 	return x;
+       }
++
++    case UNSIGNED_FLOAT:
++      {
++	rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
++	/* We don't substitute negative VOIDmode constants into these rtx,
++	   since they would impede folding.  */
++	if (GET_MODE (new_rtx) != VOIDmode
++	    || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
++	    || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
++	  validate_change (object, &XEXP (x, 0), new_rtx, 0);
++	return x;
++      }
+ 
+     case REG:
+       i = REG_QTY (REGNO (x));
+diff -Naur gcc-4.8.2.orig/gcc/cselib.c gcc-4.8.2/gcc/cselib.c
+--- gcc-4.8.2.orig/gcc/cselib.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/cselib.c	2014-03-30 20:21:40.650928664 +0000
+@@ -2260,8 +2260,8 @@
+ 	      continue;
+ 	    }
+ 	  if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
+-	      && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx),
+-					  mem_addr, x, NULL_RTX))
++	      && ! canon_anti_dependence (x, false, mem_rtx,
++					  GET_MODE (mem_rtx), mem_addr))
+ 	    {
+ 	      has_mem = true;
+ 	      num_mems++;
+diff -Naur gcc-4.8.2.orig/gcc/doc/extend.texi gcc-4.8.2/gcc/doc/extend.texi
+--- gcc-4.8.2.orig/gcc/doc/extend.texi	2013-10-07 07:45:12.000000000 +0000
++++ gcc-4.8.2/gcc/doc/extend.texi	2014-03-30 20:21:40.650928664 +0000
+@@ -3121,6 +3121,17 @@
+ prologue used in Win32 API functions in Microsoft Windows XP Service Pack 2
+ and newer.
+ 
++@item hotpatch [(@var{prologue-halfwords})]
++@cindex @code{hotpatch} attribute
++
++On S/390 System z targets, you can use this function attribute to
++make GCC generate a ``hot-patching'' function prologue.  The
++@code{hotpatch} has no effect on funtions that are explicitly
++inline.  If the @option{-mhotpatch} or @option{-mno-hotpatch}
++command-line option is used at the same time, the @code{hotpatch}
++attribute takes precedence.  If an argument is given, the maximum
++allowed value is 1000000.
++
+ @item naked
+ @cindex function without a prologue/epilogue code
+ Use this attribute on the ARM, AVR, MCORE, RX and SPU ports to indicate that
+diff -Naur gcc-4.8.2.orig/gcc/doc/invoke.texi gcc-4.8.2/gcc/doc/invoke.texi
+--- gcc-4.8.2.orig/gcc/doc/invoke.texi	2013-06-19 19:55:50.000000000 +0000
++++ gcc-4.8.2/gcc/doc/invoke.texi	2014-03-30 20:21:40.654262119 +0000
+@@ -161,7 +161,7 @@
+ -pipe  -pass-exit-codes  @gol
+ -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
+ --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
+--fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{arg} -fdump-go-spec=@var{file}}
++-fdump-ada-spec@r{[}-slim@r{]} -fada-spec-parent=@var{unit} -fdump-go-spec=@var{file}}
+ 
+ @item C Language Options
+ @xref{C Dialect Options,,Options Controlling C Dialect}.
+@@ -879,7 +879,8 @@
+ -msmall-exec  -mno-small-exec  -mmvcle -mno-mvcle @gol
+ -m64  -m31  -mdebug  -mno-debug  -mesa  -mzarch @gol
+ -mtpf-trace -mno-tpf-trace  -mfused-madd  -mno-fused-madd @gol
+--mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard}
++-mwarn-framesize  -mwarn-dynamicstack  -mstack-size -mstack-guard @gol
++-mhotpatch[=@var{halfwords}] -mno-hotpatch}
+ 
+ @emph{Score Options}
+ @gccoptlist{-meb -mel @gol
+@@ -928,7 +929,7 @@
+ -mvis2  -mno-vis2  -mvis3  -mno-vis3 @gol
+ -mcbcond -mno-cbcond @gol
+ -mfmaf  -mno-fmaf  -mpopc  -mno-popc @gol
+--mfix-at697f}
++-mfix-at697f -mfix-ut699}
+ 
+ @emph{SPU Options}
+ @gccoptlist{-mwarn-reloc -merror-reloc @gol
+@@ -1460,11 +1461,18 @@
+ for the plugin called @var{name}.
+ 
+ @item -fdump-ada-spec@r{[}-slim@r{]}
+-For C and C++ source and include files, generate corresponding Ada
+-specs. @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
++@opindex fdump-ada-spec
++For C and C++ source and include files, generate corresponding Ada specs.
++@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
+ GNAT User's Guide}, which provides detailed documentation on this feature.
+ 
++@item -fada-spec-parent=@var{unit}
++@opindex fada-spec-parent
++In conjunction with @option{-fdump-ada-spec@r{[}-slim@r{]}} above, generate
++Ada specs as child units of parent @var{unit}.
++
+ @item -fdump-go-spec=@var{file}
++@opindex fdump-go-spec
+ For input files in any language, generate corresponding Go
+ declarations in @var{file}.  This generates Go @code{const},
+ @code{type}, @code{var}, and @code{func} declarations which may be a
+@@ -11241,11 +11249,32 @@
+ big-endian ARM processors generated by versions of the compiler prior to
+ 2.8.  This option is now deprecated.
+ 
+-@item -mcpu=@var{name}
+-@opindex mcpu
+-This specifies the name of the target ARM processor.  GCC uses this name
+-to determine what kind of instructions it can emit when generating
+-assembly code.  Permissible names are: @samp{arm2}, @samp{arm250},
++@item -march=@var{name}
++@opindex march
++This specifies the name of the target ARM architecture.  GCC uses this
++name to determine what kind of instructions it can emit when generating
++assembly code.  This option can be used in conjunction with or instead
++of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
++@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
++@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
++@samp{armv6}, @samp{armv6j},
++@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
++@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m}, @samp{armv7e-m}
++@samp{armv8-a},
++@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
++
++@option{-march=native} causes the compiler to auto-detect the architecture
++of the build computer.  At present, this feature is only supported on
++Linux, and not all architectures are recognized.  If the auto-detect is
++unsuccessful the option has no effect.
++
++@item -mtune=@var{name}
++@opindex mtune
++This option specifies the name of the target ARM processor for
++which GCC should tune the performance of the code.
++For some ARM implementations better performance can be obtained by using
++this option.
++Permissible names are: @samp{arm2}, @samp{arm250},
+ @samp{arm3}, @samp{arm6}, @samp{arm60}, @samp{arm600}, @samp{arm610},
+ @samp{arm620}, @samp{arm7}, @samp{arm7m}, @samp{arm7d}, @samp{arm7dm},
+ @samp{arm7di}, @samp{arm7dmi}, @samp{arm70}, @samp{arm700},
+@@ -11273,27 +11302,6 @@
+ @samp{fa526}, @samp{fa626},
+ @samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}.
+ 
+-
+-@option{-mcpu=generic-@var{arch}} is also permissible, and is
+-equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
+-See @option{-mtune} for more information.
+-
+-@option{-mcpu=native} causes the compiler to auto-detect the CPU
+-of the build computer.  At present, this feature is only supported on
+-Linux, and not all architectures are recognized.  If the auto-detect is
+-unsuccessful the option has no effect.
+-
+-@item -mtune=@var{name}
+-@opindex mtune
+-This option is very similar to the @option{-mcpu=} option, except that
+-instead of specifying the actual target processor type, and hence
+-restricting which instructions can be used, it specifies that GCC should
+-tune the performance of the code as if the target were of the type
+-specified in this option, but still choosing the instructions it
+-generates based on the CPU specified by a @option{-mcpu=} option.
+-For some ARM implementations better performance can be obtained by using
+-this option.
+-
+ @option{-mtune=generic-@var{arch}} specifies that GCC should tune the
+ performance for a blend of processors within architecture @var{arch}.
+ The aim is to generate code that run well on the current most popular
+@@ -11306,21 +11314,23 @@
+ Linux, and not all architectures are recognized.  If the auto-detect is
+ unsuccessful the option has no effect.
+ 
+-@item -march=@var{name}
+-@opindex march
+-This specifies the name of the target ARM architecture.  GCC uses this
+-name to determine what kind of instructions it can emit when generating
+-assembly code.  This option can be used in conjunction with or instead
+-of the @option{-mcpu=} option.  Permissible names are: @samp{armv2},
+-@samp{armv2a}, @samp{armv3}, @samp{armv3m}, @samp{armv4}, @samp{armv4t},
+-@samp{armv5}, @samp{armv5t}, @samp{armv5e}, @samp{armv5te},
+-@samp{armv6}, @samp{armv6j},
+-@samp{armv6t2}, @samp{armv6z}, @samp{armv6zk}, @samp{armv6-m},
+-@samp{armv7}, @samp{armv7-a}, @samp{armv7-r}, @samp{armv7-m},
+-@samp{armv8-a},
+-@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}.
++@item -mcpu=@var{name}
++@opindex mcpu
++This specifies the name of the target ARM processor.  GCC uses this name
++to derive the name of the target ARM architecture (as if specified
++by @option{-march}) and the ARM processor type for which to tune for
++performance (as if specified by @option{-mtune}).  Where this option
++is used in conjunction with @option{-march} or @option{-mtune},
++those options take precedence over the appropriate part of this option.
+ 
+-@option{-march=native} causes the compiler to auto-detect the architecture
++Permissible names for this option are the same as those for
++@option{-mtune}.
++
++@option{-mcpu=generic-@var{arch}} is also permissible, and is
++equivalent to @option{-march=@var{arch} -mtune=generic-@var{arch}}.
++See @option{-mtune} for more information.
++
++@option{-mcpu=native} causes the compiler to auto-detect the CPU
+ of the build computer.  At present, this feature is only supported on
+ Linux, and not all architectures are recognized.  If the auto-detect is
+ unsuccessful the option has no effect.
+@@ -11409,8 +11419,11 @@
+ 
+ @item -mpic-register=@var{reg}
+ @opindex mpic-register
+-Specify the register to be used for PIC addressing.  The default is R10
+-unless stack-checking is enabled, when R9 is used.
++Specify the register to be used for PIC addressing.
++For standard PIC base case, the default will be any suitable register
++determined by compiler.  For single PIC base case, the default is
++@samp{R9} if target is EABI based or stack-checking is enabled,
++otherwise the default is @samp{R10}.
+ 
+ @item -mpoke-function-name
+ @opindex mpoke-function-name
+@@ -18449,6 +18462,21 @@
+ In order to be efficient the extra code makes the assumption that the stack starts
+ at an address aligned to the value given by @var{stack-size}.
+ The @var{stack-guard} option can only be used in conjunction with @var{stack-size}.
++
++@item -mhotpatch[=@var{halfwords}]
++@itemx -mno-hotpatch
++@opindex mhotpatch
++If the hotpatch option is enabled, a ``hot-patching'' function
++prologue is generated for all functions in the compilation unit.
++The funtion label is prepended with the given number of two-byte
++Nop instructions (@var{halfwords}, maximum 1000000) or 12 Nop
++instructions if no argument is present.  Functions with a
++hot-patching prologue are never inlined automatically, and a
++hot-patching prologue is never generated for functions functions
++that are explicitly inline.
++
++This option can be overridden for individual functions with the
++@code{hotpatch} attribute.
+ @end table
+ 
+ @node Score Options
+@@ -19133,10 +19161,10 @@
+ Set the instruction set, register set, and instruction scheduling parameters
+ for machine type @var{cpu_type}.  Supported values for @var{cpu_type} are
+ @samp{v7}, @samp{cypress}, @samp{v8}, @samp{supersparc}, @samp{hypersparc},
+-@samp{leon}, @samp{sparclite}, @samp{f930}, @samp{f934}, @samp{sparclite86x},
+-@samp{sparclet}, @samp{tsc701}, @samp{v9}, @samp{ultrasparc},
+-@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3},
+-and @samp{niagara4}.
++@samp{leon}, @samp{leon3}, @samp{sparclite}, @samp{f930}, @samp{f934},
++@samp{sparclite86x}, @samp{sparclet}, @samp{tsc701}, @samp{v9},
++@samp{ultrasparc}, @samp{ultrasparc3}, @samp{niagara}, @samp{niagara2},
++@samp{niagara3} and @samp{niagara4}.
+ 
+ Native Solaris and GNU/Linux toolchains also support the value @samp{native},
+ which selects the best architecture option for the host processor.
+@@ -19155,7 +19183,7 @@
+ cypress
+ 
+ @item v8
+-supersparc, hypersparc, leon
++supersparc, hypersparc, leon, leon3
+ 
+ @item sparclite
+ f930, f934, sparclite86x
+@@ -19217,10 +19245,11 @@
+ The same values for @option{-mcpu=@var{cpu_type}} can be used for
+ @option{-mtune=@var{cpu_type}}, but the only useful values are those
+ that select a particular CPU implementation.  Those are @samp{cypress},
+-@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{f930}, @samp{f934},
+-@samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc}, @samp{ultrasparc3},
+-@samp{niagara}, @samp{niagara2}, @samp{niagara3} and @samp{niagara4}.  With
+-native Solaris and GNU/Linux toolchains, @samp{native} can also be used.
++@samp{supersparc}, @samp{hypersparc}, @samp{leon}, @samp{leon3}, @samp{f930},
++@samp{f934}, @samp{sparclite86x}, @samp{tsc701}, @samp{ultrasparc},
++@samp{ultrasparc3}, @samp{niagara}, @samp{niagara2}, @samp{niagara3} and
++@samp{niagara4}.  With native Solaris and GNU/Linux toolchains, @samp{native}
++can also be used.
+ 
+ @item -mv8plus
+ @itemx -mno-v8plus
+@@ -19289,6 +19318,11 @@
+ @opindex mfix-at697f
+ Enable the documented workaround for the single erratum of the Atmel AT697F
+ processor (which corresponds to erratum #13 of the AT697E processor).
++
++@item -mfix-ut699
++@opindex mfix-ut699
++Enable the documented workarounds for the floating-point errata and the data
++cache nullify errata of the UT699 processor.
+ @end table
+ 
+ These @samp{-m} options are supported in addition to the above
+diff -Naur gcc-4.8.2.orig/gcc/expr.c gcc-4.8.2/gcc/expr.c
+--- gcc-4.8.2.orig/gcc/expr.c	2013-08-29 18:37:46.000000000 +0000
++++ gcc-4.8.2/gcc/expr.c	2014-03-30 20:21:40.654262119 +0000
+@@ -1994,12 +1994,14 @@
+       HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
+       enum machine_mode mode = GET_MODE (tmps[i]);
+       unsigned int bytelen = GET_MODE_SIZE (mode);
+-      unsigned int adj_bytelen = bytelen;
++      unsigned int adj_bytelen;
+       rtx dest = dst;
+ 
+       /* Handle trailing fragments that run over the size of the struct.  */
+       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
+ 	adj_bytelen = ssize - bytepos;
++      else
++	adj_bytelen = bytelen;
+ 
+       if (GET_CODE (dst) == CONCAT)
+ 	{
+@@ -2040,6 +2042,7 @@
+ 	    }
+ 	}
+ 
++      /* Handle trailing fragments that run over the size of the struct.  */
+       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
+ 	{
+ 	  /* store_bit_field always takes its value from the lsb.
+@@ -2057,16 +2060,22 @@
+ 	      tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
+ 				      shift, tmps[i], 0);
+ 	    }
+-	  bytelen = adj_bytelen;
++
++	  /* Make sure not to write past the end of the struct.  */
++	  store_bit_field (dest,
++			   adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
++			   bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
++			   VOIDmode, tmps[i]);
+ 	}
+ 
+       /* Optimize the access just a bit.  */
+-      if (MEM_P (dest)
+-	  && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
+-	      || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
+-	  && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
+-	  && bytelen == GET_MODE_SIZE (mode))
++      else if (MEM_P (dest)
++	       && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
++		   || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
++	       && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
++	       && bytelen == GET_MODE_SIZE (mode))
+ 	emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
++
+       else
+ 	store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
+ 			 0, 0, mode, tmps[i]);
+@@ -3602,12 +3611,21 @@
+ 	 into a new pseudo.  This constant may be used in different modes,
+ 	 and if not, combine will put things back together for us.  */
+       trunc_y = force_reg (srcmode, trunc_y);
+-      emit_unop_insn (ic, x, trunc_y, UNKNOWN);
++
++      /* If x is a hard register, perform the extension into a pseudo,
++	 so that e.g. stack realignment code is aware of it.  */
++      rtx target = x;
++      if (REG_P (x) && HARD_REGISTER_P (x))
++	target = gen_reg_rtx (dstmode);
++
++      emit_unop_insn (ic, target, trunc_y, UNKNOWN);
+       last_insn = get_last_insn ();
+ 
+-      if (REG_P (x))
++      if (REG_P (target))
+ 	set_unique_reg_note (last_insn, REG_EQUAL, y);
+ 
++      if (target != x)
++	return emit_move_insn (x, target);
+       return last_insn;
+     }
+ 
+@@ -4551,19 +4569,19 @@
+ 		- tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
+ 
+   /* If the adjustment is larger than bitpos, we would have a negative bit
+-     position for the lower bound and this may wreak havoc later.  This can
+-     occur only if we have a non-null offset, so adjust offset and bitpos
+-     to make the lower bound non-negative.  */
++     position for the lower bound and this may wreak havoc later.  Adjust
++     offset and bitpos to make the lower bound non-negative in that case.  */
+   if (bitoffset > *bitpos)
+     {
+       HOST_WIDE_INT adjust = bitoffset - *bitpos;
+-
+       gcc_assert ((adjust % BITS_PER_UNIT) == 0);
+-      gcc_assert (*offset != NULL_TREE);
+ 
+       *bitpos += adjust;
+-      *offset
+-	= size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
++      if (*offset == NULL_TREE)
++	*offset = size_int (-adjust / BITS_PER_UNIT);
++      else
++	*offset
++	  = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
+       *bitstart = 0;
+     }
+   else
+@@ -4668,8 +4686,7 @@
+ 	  expand_insn (icode, 2, ops);
+ 	}
+       else
+-	store_bit_field (mem, GET_MODE_BITSIZE (mode),
+-			 0, 0, 0, mode, reg);
++	store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
+       return;
+     }
+ 
+@@ -4698,6 +4715,15 @@
+       tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
+ 				 &unsignedp, &volatilep, true);
+ 
++      /* Make sure bitpos is not negative, it can wreak havoc later.  */
++      if (bitpos < 0)
++	{
++	  gcc_assert (offset == NULL_TREE);
++	  offset = size_int (bitpos >> (BITS_PER_UNIT == 8
++					? 3 : exact_log2 (BITS_PER_UNIT)));
++	  bitpos &= BITS_PER_UNIT - 1;
++	}
++
+       if (TREE_CODE (to) == COMPONENT_REF
+ 	  && DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
+ 	get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
+diff -Naur gcc-4.8.2.orig/gcc/fold-const.c gcc-4.8.2/gcc/fold-const.c
+--- gcc-4.8.2.orig/gcc/fold-const.c	2013-09-30 20:16:14.000000000 +0000
++++ gcc-4.8.2/gcc/fold-const.c	2014-03-30 20:21:40.657595568 +0000
+@@ -2664,10 +2664,11 @@
+ 	case COMPONENT_REF:
+ 	  /* Handle operand 2 the same as for ARRAY_REF.  Operand 0
+ 	     may be NULL when we're called to compare MEM_EXPRs.  */
+-	  if (!OP_SAME_WITH_NULL (0))
++	  if (!OP_SAME_WITH_NULL (0)
++	      || !OP_SAME (1))
+ 	    return 0;
+ 	  flags &= ~OEP_CONSTANT_ADDRESS_OF;
+-	  return OP_SAME (1) && OP_SAME_WITH_NULL (2);
++	  return OP_SAME_WITH_NULL (2);
+ 
+ 	case BIT_FIELD_REF:
+ 	  if (!OP_SAME (0))
+@@ -4920,12 +4921,16 @@
+   int in0_p, in1_p, in_p;
+   tree low0, low1, low, high0, high1, high;
+   bool strict_overflow_p = false;
+-  tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
+-  tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
+-  tree tem;
++  tree tem, lhs, rhs;
+   const char * const warnmsg = G_("assuming signed overflow does not occur "
+ 				  "when simplifying range test");
+ 
++  if (!INTEGRAL_TYPE_P (type))
++    return 0;
++
++  lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
++  rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
++
+   /* If this is an OR operation, invert both sides; we will invert
+      again at the end.  */
+   if (or_op)
+@@ -10927,6 +10932,13 @@
+ 				fold_build2_loc (loc, MULT_EXPR, type,
+ 					     build_int_cst (type, 2) , arg1));
+ 
++	  /* ((T) (X /[ex] C)) * C cancels out if the conversion is
++	     sign-changing only.  */
++	  if (TREE_CODE (arg1) == INTEGER_CST
++	      && TREE_CODE (arg0) == EXACT_DIV_EXPR
++	      && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
++	    return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
++
+ 	  strict_overflow_p = false;
+ 	  if (TREE_CODE (arg1) == INTEGER_CST
+ 	      && 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
+@@ -16587,7 +16599,7 @@
+ 	      unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
+ 	      tree index = bitsize_int (indexi);
+ 
+-	      if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
++	      if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
+ 		return fold_build3_loc (loc,
+ 					BIT_FIELD_REF, type, op00,
+ 					part_width, index);
+diff -Naur gcc-4.8.2.orig/gcc/fortran/check.c gcc-4.8.2/gcc/fortran/check.c
+--- gcc-4.8.2.orig/gcc/fortran/check.c	2013-04-26 19:20:55.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/check.c	2014-03-30 20:21:40.657595568 +0000
+@@ -3208,7 +3208,7 @@
+ 		 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
+       return FAILURE;
+     }
+-  else if (shape->expr_type == EXPR_ARRAY)
++  else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
+     {
+       gfc_expr *e;
+       int i, extent;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/class.c gcc-4.8.2/gcc/fortran/class.c
+--- gcc-4.8.2.orig/gcc/fortran/class.c	2013-01-27 07:09:06.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/class.c	2014-03-30 20:21:40.657595568 +0000
+@@ -2486,7 +2486,7 @@
+     return NULL;
+ 
+   /* Sometimes the typespec is passed from a single call.  */
+-  if (ts->type == BT_DERIVED)
++  if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
+     return gfc_find_derived_vtab (ts->u.derived);
+ 
+   /* Find the top-level namespace.  */
+diff -Naur gcc-4.8.2.orig/gcc/fortran/decl.c gcc-4.8.2/gcc/fortran/decl.c
+--- gcc-4.8.2.orig/gcc/fortran/decl.c	2013-02-02 09:50:58.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/decl.c	2014-03-30 20:21:40.657595568 +0000
+@@ -510,9 +510,7 @@
+       free (newdata);
+       return MATCH_ERROR;
+     }
+-
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
+ 
+   /* Mark the variable as having appeared in a data statement.  */
+   if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
+@@ -571,9 +569,7 @@
+       gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
+       return MATCH_ERROR;
+     }
+-
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
+ 
+   return MATCH_YES;
+ 
+@@ -1737,6 +1733,7 @@
+ 		 "a PURE procedure");
+       return MATCH_ERROR;
+     }
++  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
+ 
+   /* Match NULL() initialization.  */
+   m = gfc_match_null (init);
+@@ -2045,6 +2042,10 @@
+ 	      m = MATCH_ERROR;
+ 	    }
+ 
++	  if (current_attr.flavor != FL_PARAMETER
++	      && gfc_state_stack->state != COMP_DERIVED)
++	    gfc_unset_implicit_pure (gfc_current_ns->proc_name);
++
+ 	  if (m != MATCH_YES)
+ 	    goto cleanup;
+ 	}
+@@ -5069,7 +5070,14 @@
+       if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
+ 	return MATCH_ERROR;
+ 
+-      c->tb = tb;
++      if (num == 1)
++	c->tb = tb;
++      else
++	{
++	  c->tb = XCNEW (gfc_typebound_proc);
++	  c->tb->where = gfc_current_locus;
++	  *c->tb = *tb;
++	}
+ 
+       /* Set interface.  */
+       if (proc_if != NULL)
+@@ -7384,6 +7392,7 @@
+ 
+ 
+ /* Check a derived type that is being extended.  */
++
+ static gfc_symbol*
+ check_extended_derived_type (char *name)
+ {
+@@ -7395,14 +7404,15 @@
+       return NULL;
+     }
+ 
++  extended = gfc_find_dt_in_generic (extended);
++
++  /* F08:C428.  */
+   if (!extended)
+     {
+-      gfc_error ("No such symbol in TYPE definition at %C");
++      gfc_error ("Symbol '%s' at %C has not been previously defined", name);
+       return NULL;
+     }
+ 
+-  extended = gfc_find_dt_in_generic (extended);
+-
+   if (extended->attr.flavor != FL_DERIVED)
+     {
+       gfc_error ("'%s' in EXTENDS expression at %C is not a "
+diff -Naur gcc-4.8.2.orig/gcc/fortran/dump-parse-tree.c gcc-4.8.2/gcc/fortran/dump-parse-tree.c
+--- gcc-4.8.2.orig/gcc/fortran/dump-parse-tree.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/dump-parse-tree.c	2014-03-30 20:21:40.657595568 +0000
+@@ -110,7 +110,8 @@
+       break;
+ 
+     case BT_CHARACTER:
+-      show_expr (ts->u.cl->length);
++      if (ts->u.cl)
++	show_expr (ts->u.cl->length);
+       fprintf(dumpfile, " %d", ts->kind);
+       break;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/fortran/expr.c gcc-4.8.2/gcc/fortran/expr.c
+--- gcc-4.8.2.orig/gcc/fortran/expr.c	2013-04-26 19:20:55.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/expr.c	2014-03-30 20:21:40.660929013 +0000
+@@ -3555,11 +3555,13 @@
+ 	  return FAILURE;
+ 	}
+ 
+-      if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
+-				   err, sizeof(err), NULL, NULL))
++      /* Check F2008Cor2, C729.  */
++      if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
++	  && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
+ 	{
+-	  gfc_error ("Interface mismatch in procedure pointer assignment "
+-		     "at %L: %s", &rvalue->where, err);
++	  gfc_error ("Procedure pointer target '%s' at %L must be either an "
++		     "intrinsic, host or use associated, referenced or have "
++		     "the EXTERNAL attribute", s2->name, &rvalue->where);
+ 	  return FAILURE;
+ 	}
+ 
+@@ -3679,8 +3681,7 @@
+     }
+ 
+   if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
+-
++    gfc_unset_implicit_pure (gfc_current_ns->proc_name);
+ 
+   if (gfc_has_vector_index (rvalue))
+     {
+diff -Naur gcc-4.8.2.orig/gcc/fortran/frontend-passes.c gcc-4.8.2/gcc/fortran/frontend-passes.c
+--- gcc-4.8.2.orig/gcc/fortran/frontend-passes.c	2013-04-22 14:07:29.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/frontend-passes.c	2014-03-30 20:21:40.660929013 +0000
+@@ -623,12 +623,35 @@
+    to insert statements as needed.  */
+ 
+ static int
+-cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED,
+-	  void *data ATTRIBUTE_UNUSED)
++cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
+ {
+   current_code = c;
+   inserted_block = NULL;
+   changed_statement = NULL;
++
++  /* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs
++     and allocation on assigment are prohibited inside WHERE, and finally
++     masking an expression would lead to wrong-code when replacing
++
++     WHERE (a>0)
++       b = sum(foo(a) + foo(a))
++     END WHERE
++
++     with
++
++     WHERE (a > 0)
++       tmp = foo(a)
++       b = sum(tmp + tmp)
++     END WHERE
++*/
++
++  if ((*c)->op == EXEC_WHERE)
++    {
++      *walk_subtrees = 0;
++      return 0;
++    }
++  
++
+   return 0;
+ }
+ 
+@@ -1214,7 +1237,9 @@
+ 	  /* Replace A // B < A // C with B < C, and A // B < C // B
+ 	     with A < C.  */
+ 	  if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
++	      && op1->expr_type == EXPR_OP
+ 	      && op1->value.op.op == INTRINSIC_CONCAT
++	      && op2->expr_type == EXPR_OP
+ 	      && op2->value.op.op == INTRINSIC_CONCAT)
+ 	    {
+ 	      gfc_expr *op1_left = op1->value.op.op1;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/gfortran.h gcc-4.8.2/gcc/fortran/gfortran.h
+--- gcc-4.8.2.orig/gcc/fortran/gfortran.h	2013-03-03 17:34:42.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/gfortran.h	2014-03-30 20:21:40.660929013 +0000
+@@ -2830,6 +2830,7 @@
+ int gfc_impure_variable (gfc_symbol *);
+ int gfc_pure (gfc_symbol *);
+ int gfc_implicit_pure (gfc_symbol *);
++void gfc_unset_implicit_pure (gfc_symbol *);
+ int gfc_elemental (gfc_symbol *);
+ gfc_try gfc_resolve_iterator (gfc_iterator *, bool, bool);
+ gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
+diff -Naur gcc-4.8.2.orig/gcc/fortran/interface.c gcc-4.8.2/gcc/fortran/interface.c
+--- gcc-4.8.2.orig/gcc/fortran/interface.c	2013-05-31 18:10:03.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/interface.c	2014-03-30 20:21:40.660929013 +0000
+@@ -1245,7 +1245,8 @@
+ 	  return FAILURE;
+ 	}
+ 
+-      if (r1->ts.u.cl->length)
++      if (s1->ts.u.cl && s1->ts.u.cl->length
++	  && s2->ts.u.cl && s2->ts.u.cl->length)
+ 	{
+ 	  int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
+ 					      r2->ts.u.cl->length);
+@@ -1367,8 +1368,8 @@
+       if (s1->attr.function && s2->attr.function)
+ 	{
+ 	  /* If both are functions, check result characteristics.  */
+-	  if (check_result_characteristics (s1, s2, errmsg, err_len)
+-	      == FAILURE)
++	  if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
++	      || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
+ 	    return 0;
+ 	}
+ 
+diff -Naur gcc-4.8.2.orig/gcc/fortran/intrinsic.c gcc-4.8.2/gcc/fortran/intrinsic.c
+--- gcc-4.8.2.orig/gcc/fortran/intrinsic.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/intrinsic.c	2014-03-30 20:21:40.660929013 +0000
+@@ -4229,13 +4229,16 @@
+       c->resolved_sym->attr.elemental = isym->elemental;
+     }
+ 
+-  if (gfc_pure (NULL) && !isym->pure)
++  if (!isym->pure && gfc_pure (NULL))
+     {
+       gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
+ 		 &c->loc);
+       return MATCH_ERROR;
+     }
+ 
++  if (!isym->pure)
++    gfc_unset_implicit_pure (NULL);
++
+   c->resolved_sym->attr.noreturn = isym->noreturn;
+ 
+   return MATCH_YES;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/invoke.texi gcc-4.8.2/gcc/fortran/invoke.texi
+--- gcc-4.8.2.orig/gcc/fortran/invoke.texi	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/invoke.texi	2014-03-30 20:21:40.660929013 +0000
+@@ -982,11 +982,12 @@
+ into internal representation.  Only really useful for debugging the
+ GNU Fortran compiler itself.
+ 
+-@item -fdump-optimized-tree
++@item -fdump-fortran-optimized
+ @opindex @code{fdump-fortran-optimized}
+ Output the parse tree after front-end optimization.  Only really
+ useful for debugging the GNU Fortran compiler itself.
+ 
++@item -fdump-parse-tree
+ @opindex @code{fdump-parse-tree}
+ Output the internal parse tree after translating the source program
+ into internal representation.  Only really useful for debugging the
+diff -Naur gcc-4.8.2.orig/gcc/fortran/io.c gcc-4.8.2/gcc/fortran/io.c
+--- gcc-4.8.2.orig/gcc/fortran/io.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/io.c	2014-03-30 20:21:40.660929013 +0000
+@@ -1309,7 +1309,8 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
++  bool impure = gfc_impure_variable (result->symtree->n.sym);
++  if (impure && gfc_pure (NULL))
+     {
+       gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
+ 		 tag->name);
+@@ -1317,8 +1318,8 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  if (impure)
++    gfc_unset_implicit_pure (NULL);
+ 
+   *v = result;
+   return MATCH_YES;
+@@ -1838,8 +1839,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   warn = (open->err || open->iostat) ? true : false;
+ 
+@@ -2251,8 +2251,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   warn = (close->iostat || close->err) ? true : false;
+ 
+@@ -2419,8 +2418,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   new_st.op = op;
+   new_st.ext.filepos = fp;
+@@ -3276,9 +3274,8 @@
+ 		     "an internal file in a PURE procedure",
+ 		     io_kind_name (k));
+ 
+-      if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
+-
++      if (k == M_READ || k == M_WRITE)
++	gfc_unset_implicit_pure (NULL);
+     }
+ 
+   if (k != M_READ)
+@@ -3809,8 +3806,7 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   return MATCH_YES;
+ }
+@@ -3969,8 +3965,7 @@
+ 	  return MATCH_ERROR;
+ 	}
+ 
+-      if (gfc_implicit_pure (NULL))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++      gfc_unset_implicit_pure (NULL);
+ 
+       new_st.block = gfc_get_code ();
+       new_st.block->op = EXEC_IOLENGTH;
+@@ -4023,8 +4018,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+   
+   if (inquire->id != NULL && inquire->pending == NULL)
+     {
+@@ -4212,8 +4206,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   new_st.op = EXEC_WAIT;
+   new_st.ext.wait = wait;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/match.c gcc-4.8.2/gcc/fortran/match.c
+--- gcc-4.8.2.orig/gcc/fortran/match.c	2013-08-24 09:12:21.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/match.c	2014-03-30 20:21:40.664262457 +0000
+@@ -1753,8 +1753,7 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
+       == FAILURE)
+@@ -2683,8 +2682,7 @@
+       goto cleanup;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
+     {
+@@ -2824,8 +2822,7 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
+     {
+@@ -3020,8 +3017,7 @@
+       return MATCH_ERROR;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
+       == FAILURE)
+@@ -3500,15 +3496,15 @@
+       if (gfc_check_do_variable (tail->expr->symtree))
+ 	goto cleanup;
+ 
+-      if (gfc_pure (NULL) && gfc_impure_variable (tail->expr->symtree->n.sym))
++      bool impure = gfc_impure_variable (tail->expr->symtree->n.sym);
++      if (impure && gfc_pure (NULL))
+ 	{
+ 	  gfc_error ("Bad allocate-object at %C for a PURE procedure");
+ 	  goto cleanup;
+ 	}
+ 
+-      if (gfc_implicit_pure (NULL)
+-	    && gfc_impure_variable (tail->expr->symtree->n.sym))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++      if (impure)
++	gfc_unset_implicit_pure (NULL);
+ 
+       if (tail->expr->ts.deferred)
+ 	{
+@@ -3890,14 +3886,15 @@
+ 
+       sym = tail->expr->symtree->n.sym;
+ 
+-      if (gfc_pure (NULL) && gfc_impure_variable (sym))
++      bool impure = gfc_impure_variable (sym);
++      if (impure && gfc_pure (NULL))
+ 	{
+ 	  gfc_error ("Illegal allocate-object at %C for a PURE procedure");
+ 	  goto cleanup;
+ 	}
+ 
+-      if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++      if (impure)
++	gfc_unset_implicit_pure (NULL);
+ 
+       if (gfc_is_coarray (tail->expr)
+ 	  && gfc_find_state (COMP_DO_CONCURRENT) == SUCCESS)
+diff -Naur gcc-4.8.2.orig/gcc/fortran/module.c gcc-4.8.2/gcc/fortran/module.c
+--- gcc-4.8.2.orig/gcc/fortran/module.c	2013-07-28 14:13:17.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/module.c	2014-03-30 20:21:40.664262457 +0000
+@@ -386,37 +386,6 @@
+ }
+ 
+ 
+-/* Recursive function to find a pointer within a tree by brute force.  */
+-
+-static pointer_info *
+-fp2 (pointer_info *p, const void *target)
+-{
+-  pointer_info *q;
+-
+-  if (p == NULL)
+-    return NULL;
+-
+-  if (p->u.pointer == target)
+-    return p;
+-
+-  q = fp2 (p->left, target);
+-  if (q != NULL)
+-    return q;
+-
+-  return fp2 (p->right, target);
+-}
+-
+-
+-/* During reading, find a pointer_info node from the pointer value.
+-   This amounts to a brute-force search.  */
+-
+-static pointer_info *
+-find_pointer2 (void *p)
+-{
+-  return fp2 (pi_root, p);
+-}
+-
+-
+ /* Resolve any fixups using a known pointer.  */
+ 
+ static void
+@@ -2522,45 +2491,13 @@
+    the namespace and is not loaded again.  */
+ 
+ static void
+-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
++mio_component_ref (gfc_component **cp)
+ {
+-  char name[GFC_MAX_SYMBOL_LEN + 1];
+-  gfc_component *q;
+   pointer_info *p;
+ 
+   p = mio_pointer_ref (cp);
+   if (p->type == P_UNKNOWN)
+     p->type = P_COMPONENT;
+-
+-  if (iomode == IO_OUTPUT)
+-    mio_pool_string (&(*cp)->name);
+-  else
+-    {
+-      mio_internal_string (name);
+-
+-      if (sym && sym->attr.is_class)
+-	sym = sym->components->ts.u.derived;
+-
+-      /* It can happen that a component reference can be read before the
+-	 associated derived type symbol has been loaded. Return now and
+-	 wait for a later iteration of load_needed.  */
+-      if (sym == NULL)
+-	return;
+-
+-      if (sym->components != NULL && p->u.pointer == NULL)
+-	{
+-	  /* Symbol already loaded, so search by name.  */
+-	  q = gfc_find_component (sym, name, true, true);
+-
+-	  if (q)
+-	    associate_integer_pointer (p, q);
+-	}
+-
+-      /* Make sure this symbol will eventually be loaded.  */
+-      p = find_pointer2 (sym);
+-      if (p->u.rsym.state == UNUSED)
+-	p->u.rsym.state = NEEDED;
+-    }
+ }
+ 
+ 
+@@ -2917,7 +2854,7 @@
+ 
+     case REF_COMPONENT:
+       mio_symbol_ref (&r->u.c.sym);
+-      mio_component_ref (&r->u.c.component, r->u.c.sym);
++      mio_component_ref (&r->u.c.component);
+       break;
+ 
+     case REF_SUBSTRING:
+@@ -3772,7 +3709,9 @@
+ 
+ 
+ /* Unlike most other routines, the address of the symbol node is already
+-   fixed on input and the name/module has already been filled in.  */
++   fixed on input and the name/module has already been filled in.
++   If you update the symbol format here, don't forget to update read_module
++   as well (look for "seek to the symbol's component list").   */
+ 
+ static void
+ mio_symbol (gfc_symbol *sym)
+@@ -3782,6 +3721,7 @@
+   mio_lparen ();
+ 
+   mio_symbol_attribute (&sym->attr);
++
+   mio_typespec (&sym->ts);
+   if (sym->ts.type == BT_CLASS)
+     sym->attr.class_ok = 1;
+@@ -3812,7 +3752,6 @@
+ 
+   /* Note that components are always saved, even if they are supposed
+      to be private.  Component access is checked during searching.  */
+-
+   mio_component_list (&sym->components, sym->attr.vtype);
+ 
+   if (sym->components != NULL)
+@@ -3914,14 +3853,17 @@
+ }
+ 
+ 
+-/* Skip a list between balanced left and right parens.  */
++/* Skip a list between balanced left and right parens.
++   By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
++   have been already parsed by hand, and the remaining of the content is to be
++   skipped here.  The default value is 0 (balanced parens).  */
+ 
+ static void
+-skip_list (void)
++skip_list (int nest_level = 0)
+ {
+   int level;
+ 
+-  level = 0;
++  level = nest_level;
+   do
+     {
+       switch (parse_atom ())
+@@ -4555,7 +4497,6 @@
+       info->u.rsym.ns = atom_int;
+ 
+       get_module_locus (&info->u.rsym.where);
+-      skip_list ();
+ 
+       /* See if the symbol has already been loaded by a previous module.
+ 	 If so, we reference the existing symbol and prevent it from
+@@ -4566,10 +4507,56 @@
+ 
+       if (sym == NULL
+ 	  || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
+-	continue;
++	{
++	  skip_list ();
++	  continue;
++	}
+ 
+       info->u.rsym.state = USED;
+       info->u.rsym.sym = sym;
++      /* The current symbol has already been loaded, so we can avoid loading
++	 it again.  However, if it is a derived type, some of its components
++	 can be used in expressions in the module.  To avoid the module loading
++	 failing, we need to associate the module's component pointer indexes
++	 with the existing symbol's component pointers.  */
++      if (sym->attr.flavor == FL_DERIVED)
++	{
++	  gfc_component *c;
++
++	  /* First seek to the symbol's component list.  */
++	  mio_lparen (); /* symbol opening.  */
++	  skip_list (); /* skip symbol attribute.  */
++	  skip_list (); /* typespec.  */
++	  require_atom (ATOM_INTEGER); /* namespace ref.  */
++	  require_atom (ATOM_INTEGER); /* common ref.  */
++	  skip_list (); /* formal args.  */
++	  /* no value.  */
++	  skip_list (); /* array_spec.  */
++	  require_atom (ATOM_INTEGER); /* result.  */
++	  /* not a cray pointer.  */
++
++	  mio_lparen (); /* component list opening.  */
++	  for (c = sym->components; c; c = c->next)
++	    {
++	      pointer_info *p;
++	      const char *comp_name;
++	      int n;
++
++	      mio_lparen (); /* component opening.  */
++	      mio_integer (&n);
++	      p = get_integer (n);
++	      if (p->u.pointer == NULL)
++		associate_integer_pointer (p, c);
++	      mio_pool_string (&comp_name);
++	      gcc_assert (comp_name == c->name);
++	      skip_list (1); /* component end.  */
++	    }
++	  mio_rparen (); /* component list closing.  */
++
++	  skip_list (1); /* symbol end.  */
++	}
++      else
++	skip_list ();
+ 
+       /* Some symbols do not have a namespace (eg. formal arguments),
+ 	 so the automatic "unique symtree" mechanism must be suppressed
+diff -Naur gcc-4.8.2.orig/gcc/fortran/parse.c gcc-4.8.2/gcc/fortran/parse.c
+--- gcc-4.8.2.orig/gcc/fortran/parse.c	2013-04-18 18:20:22.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/parse.c	2014-03-30 20:21:40.664262457 +0000
+@@ -550,8 +550,7 @@
+       return ST_NONE;
+     }
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ 
+   old_locus = gfc_current_locus;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/fortran/primary.c gcc-4.8.2/gcc/fortran/primary.c
+--- gcc-4.8.2.orig/gcc/fortran/primary.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/primary.c	2014-03-30 20:21:40.664262457 +0000
+@@ -2252,7 +2252,7 @@
+     case EXPR_FUNCTION:
+       gfc_clear_attr (&attr);
+ 
+-      if (e->value.function.esym != NULL)
++      if (e->value.function.esym && e->value.function.esym->result)
+ 	{
+ 	  gfc_symbol *sym = e->value.function.esym->result;
+ 	  attr = sym->attr;
+@@ -2540,7 +2540,8 @@
+       if (parent && !comp)
+ 	break;
+ 
+-      actual = actual->next;
++      if (actual)
++	actual = actual->next;
+     }
+ 
+   if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
+diff -Naur gcc-4.8.2.orig/gcc/fortran/resolve.c gcc-4.8.2/gcc/fortran/resolve.c
+--- gcc-4.8.2.orig/gcc/fortran/resolve.c	2013-10-04 16:25:55.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/resolve.c	2014-03-30 20:21:40.667595899 +0000
+@@ -1,5 +1,5 @@
+ /* Perform type resolution on the various structures.
+-   Copyright (C) 2001-2013 Free Software Foundation, Inc.
++   Copyright (C) 2001-2014 Free Software Foundation, Inc.
+    Contributed by Andy Vaught
+ 
+ This file is part of GCC.
+@@ -1259,9 +1259,10 @@
+ 	}
+ 
+       /* F2003, C1272 (3).  */
+-      if (gfc_pure (NULL) && cons->expr->expr_type == EXPR_VARIABLE
+-	  && (gfc_impure_variable (cons->expr->symtree->n.sym)
+-	      || gfc_is_coindexed (cons->expr)))
++      bool impure = cons->expr->expr_type == EXPR_VARIABLE
++		    && (gfc_impure_variable (cons->expr->symtree->n.sym)
++			|| gfc_is_coindexed (cons->expr));
++      if (impure && gfc_pure (NULL))
+ 	{
+ 	  t = FAILURE;
+ 	  gfc_error ("Invalid expression in the structure constructor for "
+@@ -1269,12 +1270,8 @@
+ 		     comp->name, &cons->expr->where);
+ 	}
+ 
+-      if (gfc_implicit_pure (NULL)
+-	    && cons->expr->expr_type == EXPR_VARIABLE
+-	    && (gfc_impure_variable (cons->expr->symtree->n.sym)
+-		|| gfc_is_coindexed (cons->expr)))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
+-
++      if (impure)
++	gfc_unset_implicit_pure (NULL);
+     }
+ 
+   return t;
+@@ -3295,8 +3292,7 @@
+ 	  t = FAILURE;
+ 	}
+ 
+-      if (gfc_implicit_pure (NULL))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++      gfc_unset_implicit_pure (NULL);
+     }
+ 
+   /* Functions without the RECURSIVE attribution are not allowed to
+@@ -3361,8 +3357,7 @@
+     gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
+ 	       &c->loc);
+ 
+-  if (gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  gfc_unset_implicit_pure (NULL);
+ }
+ 
+ 
+@@ -8705,10 +8700,11 @@
+ 	 && exp->value.op.op == INTRINSIC_PARENTHESES)
+     exp = exp->value.op.op1;
+ 
+-  if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
++  if (exp && exp->expr_type == EXPR_NULL
++      && code->ext.dt)
+     {
+-      gfc_error ("NULL intrinsic at %L in data transfer statement requires "
+-		 "MOLD=", &exp->where);
++      gfc_error ("Invalid context for NULL () intrinsic at %L",
++		 &exp->where);
+       return;
+     }
+ 
+@@ -9612,7 +9608,7 @@
+       if (lhs->expr_type == EXPR_VARIABLE
+ 	    && lhs->symtree->n.sym != gfc_current_ns->proc_name
+ 	    && lhs->symtree->n.sym->ns != gfc_current_ns)
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++	gfc_unset_implicit_pure (NULL);
+ 
+       if (lhs->ts.type == BT_DERIVED
+ 	    && lhs->expr_type == EXPR_VARIABLE
+@@ -9620,11 +9616,11 @@
+ 	    && rhs->expr_type == EXPR_VARIABLE
+ 	    && (gfc_impure_variable (rhs->symtree->n.sym)
+ 		|| gfc_is_coindexed (rhs)))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++	gfc_unset_implicit_pure (NULL);
+ 
+       /* Fortran 2008, C1283.  */
+       if (gfc_is_coindexed (lhs))
+-	gfc_current_ns->proc_name->attr.implicit_pure = 0;
++	gfc_unset_implicit_pure (NULL);
+     }
+ 
+   /* F03:7.4.1.2.  */
+@@ -11057,7 +11053,7 @@
+ 	  init_expr = NULL;
+ 	}
+       if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
+-	  && sym->ts.u.cl->length)
++	  && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
+ 	{
+ 	  gfc_actual_arglist *arg;
+ 	  init_expr = gfc_get_expr ();
+@@ -11877,6 +11873,7 @@
+ {
+   gfc_symbol *sym1, *sym2;
+   const char *pass1, *pass2;
++  gfc_formal_arglist *dummy_args;
+ 
+   gcc_assert (t1->specific && t2->specific);
+   gcc_assert (!t1->specific->is_generic);
+@@ -11899,19 +11896,33 @@
+       return FAILURE;
+     }
+ 
+-  /* Compare the interfaces.  */
++  /* Determine PASS arguments.  */
+   if (t1->specific->nopass)
+     pass1 = NULL;
+   else if (t1->specific->pass_arg)
+     pass1 = t1->specific->pass_arg;
+   else
+-    pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
++    {
++      dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
++      if (dummy_args)
++	pass1 = dummy_args->sym->name;
++      else
++	pass1 = NULL;
++    }
+   if (t2->specific->nopass)
+     pass2 = NULL;
+   else if (t2->specific->pass_arg)
+     pass2 = t2->specific->pass_arg;
+   else
+-    pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
++    {
++      dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
++      if (dummy_args)
++	pass2 = dummy_args->sym->name;
++      else
++	pass2 = NULL;
++    }
++
++  /* Compare the interfaces.  */
+   if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
+ 			      NULL, 0, pass1, pass2))
+     {
+@@ -12425,9 +12436,6 @@
+   resolve_bindings_derived = derived;
+   resolve_bindings_result = SUCCESS;
+ 
+-  /* Make sure the vtab has been generated.  */
+-  gfc_find_derived_vtab (derived);
+-
+   if (derived->f2k_derived->tb_sym_root)
+     gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
+ 			  &resolve_typebound_procedure);
+@@ -13256,7 +13264,8 @@
+   if (sym->attr.flavor == FL_UNKNOWN
+       || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
+ 	  && !sym->attr.generic && !sym->attr.external
+-	  && sym->attr.if_source == IFSRC_UNKNOWN))
++	  && sym->attr.if_source == IFSRC_UNKNOWN
++	  && sym->ts.type == BT_UNKNOWN))
+     {
+ 
+     /* If we find that a flavorless symbol is an interface in one of the
+@@ -14376,6 +14385,33 @@
+ }
+ 
+ 
++void
++gfc_unset_implicit_pure (gfc_symbol *sym)
++{
++  gfc_namespace *ns;
++
++  if (sym == NULL)
++    {
++      /* Check if the current procedure is implicit_pure.  Walk up
++	 the procedure list until we find a procedure.  */
++      for (ns = gfc_current_ns; ns; ns = ns->parent)
++	{
++	  sym = ns->proc_name;
++	  if (sym == NULL)
++	    return;
++
++	  if (sym->attr.flavor == FL_PROCEDURE)
++	    break;
++	}
++    }
++
++  if (sym->attr.flavor == FL_PROCEDURE)
++    sym->attr.implicit_pure = 0;
++  else
++    sym->attr.pure = 0;
++}
++
++
+ /* Test whether the current procedure is elemental or not.  */
+ 
+ int
+diff -Naur gcc-4.8.2.orig/gcc/fortran/simplify.c gcc-4.8.2/gcc/fortran/simplify.c
+--- gcc-4.8.2.orig/gcc/fortran/simplify.c	2013-07-08 19:10:32.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/simplify.c	2014-03-30 20:21:40.667595899 +0000
+@@ -5528,7 +5528,7 @@
+       if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
+ 	{
+ 	  gfc_free_expr (result);
+-	  if (t)
++	  if (t == SUCCESS)
+ 	    gfc_clear_shape (shape, source->rank);
+ 	  return &gfc_bad_expr;
+ 	}
+@@ -5536,7 +5536,7 @@
+       gfc_constructor_append_expr (&result->value.constructor, e, NULL);
+     }
+ 
+-  if (t)
++  if (t == SUCCESS)
+     gfc_clear_shape (shape, source->rank);
+ 
+   return result;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/symbol.c gcc-4.8.2/gcc/fortran/symbol.c
+--- gcc-4.8.2.orig/gcc/fortran/symbol.c	2013-03-03 17:34:42.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/symbol.c	2014-03-30 20:21:40.667595899 +0000
+@@ -1110,8 +1110,8 @@
+       return FAILURE;
+     }
+ 
+-  if (s == SAVE_EXPLICIT && gfc_implicit_pure (NULL))
+-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
++  if (s == SAVE_EXPLICIT)
++    gfc_unset_implicit_pure (NULL);
+ 
+   if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
+     {
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-array.c gcc-4.8.2/gcc/fortran/trans-array.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-array.c	2013-08-24 12:46:17.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-array.c	2014-03-30 20:21:40.667595899 +0000
+@@ -1,5 +1,5 @@
+ /* Array translation routines
+-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
++   Copyright (C) 2002-2014 Free Software Foundation, Inc.
+    Contributed by Paul Brook <paul@nowt.org>
+    and Steven Bosscher <s.bosscher@student.tudelft.nl>
+ 
+@@ -2487,6 +2487,11 @@
+ 		 a reference to the value.  */
+ 	      gfc_conv_expr (&se, expr);
+ 	    }
++
++	  /* Ensure that a pointer to the string is stored.  */
++	  if (expr->ts.type == BT_CHARACTER)
++	    gfc_conv_string_parameter (&se);
++
+ 	  gfc_add_block_to_block (&outer_loop->pre, &se.pre);
+ 	  gfc_add_block_to_block (&outer_loop->post, &se.post);
+ 	  if (gfc_is_class_scalar_expr (expr))
+@@ -7940,6 +7945,7 @@
+   tree size1;
+   tree size2;
+   tree array1;
++  tree cond_null;
+   tree cond;
+   tree tmp;
+   tree tmp2;
+@@ -8015,9 +8021,9 @@
+   jump_label2 = gfc_build_label_decl (NULL_TREE);
+ 
+   /* Allocate if data is NULL.  */
+-  cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
++  cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
+ 			 array1, build_int_cst (TREE_TYPE (array1), 0));
+-  tmp = build3_v (COND_EXPR, cond,
++  tmp = build3_v (COND_EXPR, cond_null,
+ 		  build1_v (GOTO_EXPR, jump_label1),
+ 		  build_empty_stmt (input_location));
+   gfc_add_expr_to_block (&fblock, tmp);
+@@ -8069,13 +8075,25 @@
+   tmp = build1_v (LABEL_EXPR, jump_label1);
+   gfc_add_expr_to_block (&fblock, tmp);
+ 
+-  size1 = gfc_conv_descriptor_size (desc, expr1->rank);
++  /* If the lhs has not been allocated, its bounds will not have been
++     initialized and so its size is set to zero.  */
++  size1 = gfc_create_var (gfc_array_index_type, NULL);
++  gfc_init_block (&alloc_block);
++  gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
++  gfc_init_block (&realloc_block);
++  gfc_add_modify (&realloc_block, size1,
++		  gfc_conv_descriptor_size (desc, expr1->rank));
++  tmp = build3_v (COND_EXPR, cond_null,
++		  gfc_finish_block (&alloc_block),
++		  gfc_finish_block (&realloc_block));
++  gfc_add_expr_to_block (&fblock, tmp);
+ 
+-  /* Get the rhs size.  Fix both sizes.  */
++  /* Get the rhs size and fix it.  */
+   if (expr2)
+     desc2 = rss->info->data.array.descriptor;
+   else
+     desc2 = NULL_TREE;
++
+   size2 = gfc_index_one_node;
+   for (n = 0; n < expr2->rank; n++)
+     {
+@@ -8089,8 +8107,6 @@
+ 			       gfc_array_index_type,
+ 			       tmp, size2);
+     }
+-
+-  size1 = gfc_evaluate_now (size1, &fblock);
+   size2 = gfc_evaluate_now (size2, &fblock);
+ 
+   cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-decl.c gcc-4.8.2/gcc/fortran/trans-decl.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-decl.c	2013-03-01 10:24:11.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-decl.c	2014-03-30 20:21:40.667595899 +0000
+@@ -1013,6 +1013,10 @@
+   TREE_STATIC (decl) = 0;
+   DECL_EXTERNAL (decl) = 0;
+ 
++  /* Avoid uninitialized warnings for optional dummy arguments.  */
++  if (sym->attr.optional)
++    TREE_NO_WARNING (decl) = 1;
++
+   /* We should never get deferred shape arrays here.  We used to because of
+      frontend bugs.  */
+   gcc_assert (sym->as->type != AS_DEFERRED);
+@@ -1358,9 +1362,10 @@
+ 
+   if (sym->attr.flavor == FL_PROCEDURE)
+     {
+-      /* Catch function declarations. Only used for actual parameters,
++      /* Catch functions. Only used for actual parameters,
+ 	 procedure pointers and procptr initialization targets.  */
+-      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
++      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
++	  || sym->attr.if_source != IFSRC_DECL)
+ 	{
+ 	  decl = gfc_get_extern_function_decl (sym);
+ 	  gfc_set_decl_location (decl, &sym->declared_at);
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-expr.c gcc-4.8.2/gcc/fortran/trans-expr.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-expr.c	2013-01-29 21:40:51.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-expr.c	2014-03-30 20:21:40.670929339 +0000
+@@ -355,7 +355,11 @@
+ 	  gfc_conv_expr_descriptor (parmse, e);
+ 
+ 	  if (e->rank != class_ts.u.derived->components->as->rank)
+-	    class_array_data_assign (&block, ctree, parmse->expr, true);
++	    {
++	      gcc_assert (class_ts.u.derived->components->as->type
++			  == AS_ASSUMED_RANK);
++	      class_array_data_assign (&block, ctree, parmse->expr, false);
++	    }
+ 	  else
+ 	    {
+ 	      if (gfc_expr_attr (e).codimension)
+@@ -670,7 +674,6 @@
+     gfc_add_modify (&parmse->post, vptr,
+ 		    fold_convert (TREE_TYPE (vptr), ctree));
+ 
+-  gcc_assert (!optional || (optional && !copyback));
+   if (optional)
+     {
+       tree tmp2;
+@@ -6343,7 +6346,13 @@
+       /* Returns a reference to the scalar evaluated outside the loop
+ 	 for this case.  */
+       gfc_conv_expr (se, expr);
+-      se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
++      if (expr->ts.type == BT_CHARACTER
++	  && expr->expr_type != EXPR_FUNCTION)
++	gfc_conv_string_parameter (se);
++      else
++	se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
+       return;
+     }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-intrinsic.c gcc-4.8.2/gcc/fortran/trans-intrinsic.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-intrinsic.c	2013-08-11 11:31:41.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-intrinsic.c	2014-03-30 20:21:40.670929339 +0000
+@@ -4684,9 +4684,11 @@
+ static void
+ gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
+ {
+-  tree args[2], type, pchartype;
++  tree args[3], type, pchartype;
++  int nargs;
+ 
+-  gfc_conv_intrinsic_function_args (se, expr, args, 2);
++  nargs = gfc_intrinsic_argument_list_length (expr);
++  gfc_conv_intrinsic_function_args (se, expr, args, nargs);
+   gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
+   pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
+   args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-io.c gcc-4.8.2/gcc/fortran/trans-io.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-io.c	2013-03-01 10:24:11.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-io.c	2014-03-30 20:21:40.670929339 +0000
+@@ -243,16 +243,16 @@
+ 
+   /* The code to generate the error.  */
+   gfc_start_block (&block);
+-  
++
+   arg1 = gfc_build_addr_expr (NULL_TREE, var);
+-  
++
+   arg2 = build_int_cst (integer_type_node, error_code),
+-  
++
+   asprintf (&message, "%s", _(msgid));
+   arg3 = gfc_build_addr_expr (pchar_type_node,
+ 			      gfc_build_localized_cstring_const (message));
+   free (message);
+-  
++
+   tmp = build_call_expr_loc (input_location,
+ 			 gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
+ 
+@@ -521,7 +521,7 @@
+       gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
+ 			       "Unit number in I/O statement too small",
+ 			       &se.pre);
+-    
++
+       /* UNIT numbers should be less than the max.  */
+       val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
+       cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
+@@ -1000,7 +1000,7 @@
+   if (p->convert)
+     mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
+ 			p->convert);
+-			
++
+   if (p->newunit)
+     mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
+ 			       p->newunit);
+@@ -1234,7 +1234,7 @@
+     {
+       mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
+ 				 p->exist);
+-    
++
+       if (p->unit && !p->iostat)
+ 	{
+ 	  p->iostat = create_dummy_iostat ();
+@@ -1322,7 +1322,7 @@
+   if (p->pad)
+     mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
+ 			p->pad);
+-  
++
+   if (p->convert)
+     mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
+ 			p->convert);
+@@ -1547,7 +1547,7 @@
+   tree dtype;
+   tree dt_parm_addr;
+   tree decl = NULL_TREE;
+-  int n_dim; 
++  int n_dim;
+   int itype;
+   int rank = 0;
+ 
+@@ -2032,7 +2032,7 @@
+       if (gfc_notification_std (GFC_STD_GNU) != SILENT)
+ 	{
+ 	  gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
+-			 ts->u.derived->name, code != NULL ? &(code->loc) : 
++			 ts->u.derived->name, code != NULL ? &(code->loc) :
+ 			 &gfc_current_locus);
+ 	  return;
+ 	}
+@@ -2041,7 +2041,7 @@
+       ts->kind = ts->u.derived->ts.kind;
+       ts->f90_type = ts->u.derived->ts.f90_type;
+     }
+-  
++
+   kind = ts->kind;
+   function = NULL;
+   arg2 = NULL;
+@@ -2123,7 +2123,7 @@
+ 	    function = iocall[IOCALL_X_CHARACTER_WIDE];
+ 	  else
+ 	    function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
+-	    
++
+ 	  tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ 	  tmp = build_call_expr_loc (input_location,
+ 				 function, 4, tmp, addr_expr, arg2, arg3);
+@@ -2158,6 +2158,12 @@
+       expr = build_fold_indirect_ref_loc (input_location,
+ 				      expr);
+ 
++      /* Make sure that the derived type has been built.  An external
++	 function, if only referenced in an io statement requires this
++	 check (see PR58771).  */
++      if (ts->u.derived->backend_decl == NULL_TREE)
++	tmp = gfc_typenode_for_spec (ts);
++
+       for (c = ts->u.derived->components; c; c = c->next)
+ 	{
+ 	  field = c->backend_decl;
+diff -Naur gcc-4.8.2.orig/gcc/fortran/trans-stmt.c gcc-4.8.2/gcc/fortran/trans-stmt.c
+--- gcc-4.8.2.orig/gcc/fortran/trans-stmt.c	2013-01-29 21:40:51.000000000 +0000
++++ gcc-4.8.2/gcc/fortran/trans-stmt.c	2014-03-30 20:21:40.674262780 +0000
+@@ -5104,10 +5104,49 @@
+ 	{
+ 	  gfc_expr *lhs, *rhs;
+ 	  gfc_se lse;
++	  gfc_ref *ref, *class_ref, *tail;
++
++	  /* Find the last class reference.  */
++	  class_ref = NULL;
++	  for (ref = e->ref; ref; ref = ref->next)
++	    {
++	      if (ref->type == REF_COMPONENT
++		  && ref->u.c.component->ts.type == BT_CLASS)
++		class_ref = ref;
++
++	      if (ref->next == NULL)
++		break;
++	    }
++
++	  /* Remove and store all subsequent references after the
++	     CLASS reference.  */
++	  if (class_ref)
++	    {
++	      tail = class_ref->next;
++	      class_ref->next = NULL;
++	    }
++	  else
++	    {
++	      tail = e->ref;
++	      e->ref = NULL;
++	    }
+ 
+ 	  lhs = gfc_expr_to_initialize (e);
+ 	  gfc_add_vptr_component (lhs);
+ 
++	  /* Remove the _vptr component and restore the original tail
++	     references.  */
++	  if (class_ref)
++	    {
++	      gfc_free_ref_list (class_ref->next);
++	      class_ref->next = tail;
++	    }
++	  else
++	    {
++	      gfc_free_ref_list (e->ref);
++	      e->ref = tail;
++	    }
++
+ 	  if (class_expr != NULL_TREE)
+ 	    {
+ 	      /* Polymorphic SOURCE: VPTR must be determined at run time.  */
+diff -Naur gcc-4.8.2.orig/gcc/gcc.c gcc-4.8.2/gcc/gcc.c
+--- gcc-4.8.2.orig/gcc/gcc.c	2013-05-17 12:24:26.000000000 +0000
++++ gcc-4.8.2/gcc/gcc.c	2014-03-30 20:21:40.674262780 +0000
+@@ -5441,7 +5441,7 @@
+   const char *save_suffix_subst;
+ 
+   int save_growing_size;
+-  void *save_growing_value;
++  void *save_growing_value = NULL;
+ 
+   sf = lookup_spec_function (func);
+   if (sf == NULL)
+diff -Naur gcc-4.8.2.orig/gcc/gimple-fold.c gcc-4.8.2/gcc/gimple-fold.c
+--- gcc-4.8.2.orig/gcc/gimple-fold.c	2013-01-13 12:33:43.000000000 +0000
++++ gcc-4.8.2/gcc/gimple-fold.c	2014-03-30 20:21:40.677596222 +0000
+@@ -178,7 +178,7 @@
+ 	  /* Make sure we create a cgraph node for functions we'll reference.
+ 	     They can be non-existent if the reference comes from an entry
+ 	     of an external vtable for example.  */
+-	  cgraph_get_create_node (base);
++	  cgraph_get_create_real_symbol_node (base);
+ 	}
+       /* Fixup types in global initializers.  */
+       if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
+@@ -866,6 +866,7 @@
+       break;
+     case BUILT_IN_STRCPY:
+     case BUILT_IN_STRNCPY:
++    case BUILT_IN_STRCAT:
+       arg_idx = 1;
+       type = 0;
+       break;
+@@ -941,6 +942,13 @@
+ 				       val[1]);
+       break;
+ 
++    case BUILT_IN_STRCAT:
++      if (val[1] && is_gimple_val (val[1]) && nargs == 2)
++	result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
++				      gimple_call_arg (stmt, 1),
++				      val[1]);
++      break;
++
+     case BUILT_IN_FPUTS:
+       if (nargs == 2)
+ 	result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
+diff -Naur gcc-4.8.2.orig/gcc/gimple-low.c gcc-4.8.2/gcc/gimple-low.c
+--- gcc-4.8.2.orig/gcc/gimple-low.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/gimple-low.c	2014-03-30 20:21:40.677596222 +0000
+@@ -238,6 +238,7 @@
+ 	    break;
+ 	  arg = gimple_call_arg (stmt, i);
+ 	  if (p == error_mark_node
++	      || DECL_ARG_TYPE (p) == error_mark_node
+ 	      || arg == error_mark_node
+ 	      || (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
+ 		  && !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
+diff -Naur gcc-4.8.2.orig/gcc/gimple.c gcc-4.8.2/gcc/gimple.c
+--- gcc-4.8.2.orig/gcc/gimple.c	2013-08-16 09:06:41.000000000 +0000
++++ gcc-4.8.2/gcc/gimple.c	2014-03-30 20:21:40.674262780 +0000
+@@ -3841,42 +3841,46 @@
+ 
+ /* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
+    VISIT_ADDR if non-NULL on loads, store and address-taken operands
+-   passing the STMT, the base of the operand and DATA to it.  The base
+-   will be either a decl, an indirect reference (including TARGET_MEM_REF)
+-   or the argument of an address expression.
++   passing the STMT, the base of the operand, the operand itself containing
++   the base and DATA to it.  The base will be either a decl, an indirect
++   reference (including TARGET_MEM_REF) or the argument of an address
++   expression.
+    Returns the results of these callbacks or'ed.  */
+ 
+ bool
+ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
+-			       bool (*visit_load)(gimple, tree, void *),
+-			       bool (*visit_store)(gimple, tree, void *),
+-			       bool (*visit_addr)(gimple, tree, void *))
++			       walk_stmt_load_store_addr_fn visit_load,
++			       walk_stmt_load_store_addr_fn visit_store,
++			       walk_stmt_load_store_addr_fn visit_addr)
+ {
+   bool ret = false;
+   unsigned i;
+   if (gimple_assign_single_p (stmt))
+     {
+-      tree lhs, rhs;
++      tree lhs, rhs, arg;
+       if (visit_store)
+ 	{
+-	  lhs = get_base_loadstore (gimple_assign_lhs (stmt));
++	  arg = gimple_assign_lhs (stmt);
++	  lhs = get_base_loadstore (arg);
+ 	  if (lhs)
+-	    ret |= visit_store (stmt, lhs, data);
++	    ret |= visit_store (stmt, lhs, arg, data);
+ 	}
+-      rhs = gimple_assign_rhs1 (stmt);
++      arg = gimple_assign_rhs1 (stmt);
++      rhs = arg;
+       while (handled_component_p (rhs))
+ 	rhs = TREE_OPERAND (rhs, 0);
+       if (visit_addr)
+ 	{
+ 	  if (TREE_CODE (rhs) == ADDR_EXPR)
+-	    ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
+ 	  else if (TREE_CODE (rhs) == TARGET_MEM_REF
+ 		   && TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
+-	    ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
++			       data);
+ 	  else if (TREE_CODE (rhs) == OBJ_TYPE_REF
+ 		   && TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
+ 	    ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
+-						   0), data);
++						   0), arg, data);
+ 	  else if (TREE_CODE (rhs) == CONSTRUCTOR)
+ 	    {
+ 	      unsigned int ix;
+@@ -3884,23 +3888,23 @@
+ 
+ 	      FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
+ 		if (TREE_CODE (val) == ADDR_EXPR)
+-		  ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
++		  ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
+ 		else if (TREE_CODE (val) == OBJ_TYPE_REF
+ 			 && TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
+ 		  ret |= visit_addr (stmt,
+ 				     TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
+-						   0), data);
++						   0), arg, data);
+ 	    }
+           lhs = gimple_assign_lhs (stmt);
+ 	  if (TREE_CODE (lhs) == TARGET_MEM_REF
+               && TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
+-            ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
+ 	}
+       if (visit_load)
+ 	{
+ 	  rhs = get_base_loadstore (rhs);
+ 	  if (rhs)
+-	    ret |= visit_load (stmt, rhs, data);
++	    ret |= visit_load (stmt, rhs, arg, data);
+ 	}
+     }
+   else if (visit_addr
+@@ -3913,17 +3917,17 @@
+ 	  if (op == NULL_TREE)
+ 	    ;
+ 	  else if (TREE_CODE (op) == ADDR_EXPR)
+-	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
+ 	  /* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
+ 	     tree with two operands.  */
+ 	  else if (i == 1 && COMPARISON_CLASS_P (op))
+ 	    {
+ 	      if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
+ 		ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
+-						       0), data);
++						       0), op, data);
+ 	      if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
+ 		ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
+-						       0), data);
++						       0), op, data);
+ 	    }
+ 	}
+     }
+@@ -3931,38 +3935,39 @@
+     {
+       if (visit_store)
+ 	{
+-	  tree lhs = gimple_call_lhs (stmt);
+-	  if (lhs)
++	  tree arg = gimple_call_lhs (stmt);
++	  if (arg)
+ 	    {
+-	      lhs = get_base_loadstore (lhs);
++	      tree lhs = get_base_loadstore (arg);
+ 	      if (lhs)
+-		ret |= visit_store (stmt, lhs, data);
++		ret |= visit_store (stmt, lhs, arg, data);
+ 	    }
+ 	}
+       if (visit_load || visit_addr)
+ 	for (i = 0; i < gimple_call_num_args (stmt); ++i)
+ 	  {
+-	    tree rhs = gimple_call_arg (stmt, i);
++	    tree arg = gimple_call_arg (stmt, i);
+ 	    if (visit_addr
+-		&& TREE_CODE (rhs) == ADDR_EXPR)
+-	      ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
++		&& TREE_CODE (arg) == ADDR_EXPR)
++	      ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
+ 	    else if (visit_load)
+ 	      {
+-		rhs = get_base_loadstore (rhs);
++		tree rhs = get_base_loadstore (arg);
+ 		if (rhs)
+-		  ret |= visit_load (stmt, rhs, data);
++		  ret |= visit_load (stmt, rhs, arg, data);
+ 	      }
+ 	  }
+       if (visit_addr
+ 	  && gimple_call_chain (stmt)
+ 	  && TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
+ 	ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
+-			   data);
++			   gimple_call_chain (stmt), data);
+       if (visit_addr
+ 	  && gimple_call_return_slot_opt_p (stmt)
+ 	  && gimple_call_lhs (stmt) != NULL_TREE
+ 	  && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
+-	ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
++	ret |= visit_addr (stmt, gimple_call_lhs (stmt),
++			   gimple_call_lhs (stmt), data);
+     }
+   else if (gimple_code (stmt) == GIMPLE_ASM)
+     {
+@@ -3978,7 +3983,7 @@
+ 	    tree link = gimple_asm_output_op (stmt, i);
+ 	    tree op = get_base_loadstore (TREE_VALUE (link));
+ 	    if (op && visit_store)
+-	      ret |= visit_store (stmt, op, data);
++	      ret |= visit_store (stmt, op, TREE_VALUE (link), data);
+ 	    if (visit_addr)
+ 	      {
+ 		constraint = TREE_STRING_POINTER
+@@ -3987,7 +3992,7 @@
+ 		parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
+ 					 &allows_reg, &is_inout);
+ 		if (op && !allows_reg && allows_mem)
+-		  ret |= visit_addr (stmt, op, data);
++		  ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
+ 	      }
+ 	  }
+       if (visit_load || visit_addr)
+@@ -3997,14 +4002,14 @@
+ 	    tree op = TREE_VALUE (link);
+ 	    if (visit_addr
+ 		&& TREE_CODE (op) == ADDR_EXPR)
+-	      ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
++	      ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
+ 	    else if (visit_load || visit_addr)
+ 	      {
+ 		op = get_base_loadstore (op);
+ 		if (op)
+ 		  {
+ 		    if (visit_load)
+-		      ret |= visit_load (stmt, op, data);
++		      ret |= visit_load (stmt, op, TREE_VALUE (link), data);
+ 		    if (visit_addr)
+ 		      {
+ 			constraint = TREE_STRING_POINTER
+@@ -4013,7 +4018,8 @@
+ 						0, oconstraints,
+ 						&allows_mem, &allows_reg);
+ 			if (!allows_reg && allows_mem)
+-			  ret |= visit_addr (stmt, op, data);
++			  ret |= visit_addr (stmt, op, TREE_VALUE (link),
++					     data);
+ 		      }
+ 		  }
+ 	      }
+@@ -4026,12 +4032,12 @@
+ 	{
+ 	  if (visit_addr
+ 	      && TREE_CODE (op) == ADDR_EXPR)
+-	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
+ 	  else if (visit_load)
+ 	    {
+-	      op = get_base_loadstore (op);
+-	      if (op)
+-		ret |= visit_load (stmt, op, data);
++	      tree base = get_base_loadstore (op);
++	      if (base)
++		ret |= visit_load (stmt, base, op, data);
+ 	    }
+ 	}
+     }
+@@ -4042,7 +4048,7 @@
+ 	{
+ 	  tree op = PHI_ARG_DEF (stmt, i);
+ 	  if (TREE_CODE (op) == ADDR_EXPR)
+-	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
++	    ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
+ 	}
+     }
+   else if (visit_addr
+@@ -4050,7 +4056,7 @@
+     {
+       tree op = gimple_goto_dest (stmt);
+       if (TREE_CODE (op) == ADDR_EXPR)
+-	ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
++	ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
+     }
+ 
+   return ret;
+@@ -4061,8 +4067,8 @@
+ 
+ bool
+ walk_stmt_load_store_ops (gimple stmt, void *data,
+-			  bool (*visit_load)(gimple, tree, void *),
+-			  bool (*visit_store)(gimple, tree, void *))
++			  walk_stmt_load_store_addr_fn visit_load,
++			  walk_stmt_load_store_addr_fn visit_store)
+ {
+   return walk_stmt_load_store_addr_ops (stmt, data,
+ 					visit_load, visit_store, NULL);
+@@ -4071,8 +4077,7 @@
+ /* Helper for gimple_ior_addresses_taken_1.  */
+ 
+ static bool
+-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
+-			      tree addr, void *data)
++gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
+ {
+   bitmap addresses_taken = (bitmap)data;
+   addr = get_base_address (addr);
+diff -Naur gcc-4.8.2.orig/gcc/gimple.h gcc-4.8.2/gcc/gimple.h
+--- gcc-4.8.2.orig/gcc/gimple.h	2013-03-08 22:26:37.000000000 +0000
++++ gcc-4.8.2/gcc/gimple.h	2014-03-30 20:21:40.677596222 +0000
+@@ -888,13 +888,14 @@
+ extern alias_set_type gimple_get_alias_set (tree);
+ extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
+ 				   unsigned *);
++typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
+ extern bool walk_stmt_load_store_addr_ops (gimple, void *,
+-					   bool (*)(gimple, tree, void *),
+-					   bool (*)(gimple, tree, void *),
+-					   bool (*)(gimple, tree, void *));
++					   walk_stmt_load_store_addr_fn,
++					   walk_stmt_load_store_addr_fn,
++					   walk_stmt_load_store_addr_fn);
+ extern bool walk_stmt_load_store_ops (gimple, void *,
+-				      bool (*)(gimple, tree, void *),
+-				      bool (*)(gimple, tree, void *));
++				      walk_stmt_load_store_addr_fn,
++				      walk_stmt_load_store_addr_fn);
+ extern bool gimple_ior_addresses_taken (bitmap, gimple);
+ extern bool gimple_call_builtin_p (gimple, enum built_in_class);
+ extern bool gimple_call_builtin_p (gimple, enum built_in_function);
+diff -Naur gcc-4.8.2.orig/gcc/gimplify.c gcc-4.8.2/gcc/gimplify.c
+--- gcc-4.8.2.orig/gcc/gimplify.c	2013-01-28 14:05:40.000000000 +0000
++++ gcc-4.8.2/gcc/gimplify.c	2014-03-30 20:21:40.677596222 +0000
+@@ -2060,6 +2060,9 @@
+ /* Nonlocal VLAs seen in the current function.  */
+ static struct pointer_set_t *nonlocal_vlas;
+ 
++/* The VAR_DECLs created for nonlocal VLAs for debug info purposes.  */
++static tree nonlocal_vla_vars;
++
+ /* Gimplify a VAR_DECL or PARM_DECL.  Return GS_OK if we expanded a
+    DECL_VALUE_EXPR, and it's worth re-examining things.  */
+ 
+@@ -2106,14 +2109,13 @@
+ 	    ctx = ctx->outer_context;
+ 	  if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
+ 	    {
+-	      tree copy = copy_node (decl), block;
++	      tree copy = copy_node (decl);
+ 
+ 	      lang_hooks.dup_lang_specific_decl (copy);
+ 	      SET_DECL_RTL (copy, 0);
+ 	      TREE_USED (copy) = 1;
+-	      block = DECL_INITIAL (current_function_decl);
+-	      DECL_CHAIN (copy) = BLOCK_VARS (block);
+-	      BLOCK_VARS (block) = copy;
++	      DECL_CHAIN (copy) = nonlocal_vla_vars;
++	      nonlocal_vla_vars = copy;
+ 	      SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
+ 	      DECL_HAS_VALUE_EXPR_P (copy) = 1;
+ 	    }
+@@ -4369,7 +4371,7 @@
+           unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
+           tree index = bitsize_int (indexi);
+           if (offset / part_widthi
+-              <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
++              < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
+             return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
+                                 part_width, index);
+ 	}
+@@ -6131,7 +6133,7 @@
+    region's REDUCTION clause.  */
+ 
+ static bool
+-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
++omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
+ {
+   splay_tree_node n;
+ 
+@@ -6140,8 +6142,11 @@
+       ctx = ctx->outer_context;
+       if (ctx == NULL)
+ 	return !(is_global_var (decl)
+-		 /* References might be private, but might be shared too.  */
+-		 || lang_hooks.decls.omp_privatize_by_reference (decl));
++		 /* References might be private, but might be shared too,
++		    when checking for copyprivate, assume they might be
++		    private, otherwise assume they might be shared.  */
++		 || (!copyprivate
++		     && lang_hooks.decls.omp_privatize_by_reference (decl)));
+ 
+       n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
+       if (n != NULL)
+@@ -6267,12 +6272,36 @@
+ 	      remove = true;
+ 	      break;
+ 	    }
++	  if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
++	      && !remove
++	      && !omp_check_private (ctx, decl, true))
++	    {
++	      remove = true;
++	      if (is_global_var (decl))
++		{
++		  if (DECL_THREAD_LOCAL_P (decl))
++		    remove = false;
++		  else if (DECL_HAS_VALUE_EXPR_P (decl))
++		    {
++		      tree value = get_base_address (DECL_VALUE_EXPR (decl));
++
++		      if (value
++			  && DECL_P (value)
++			  && DECL_THREAD_LOCAL_P (value))
++			remove = false;
++		    }
++		}
++	      if (remove)
++		error_at (OMP_CLAUSE_LOCATION (c),
++			  "copyprivate variable %qE is not threadprivate"
++			  " or private in outer context", DECL_NAME (decl));
++	    }
+ 	do_notice:
+ 	  if (outer_ctx)
+ 	    omp_notice_variable (outer_ctx, decl, true);
+ 	  if (check_non_private
+ 	      && region_type == ORT_WORKSHARE
+-	      && omp_check_private (ctx, decl))
++	      && omp_check_private (ctx, decl, false))
+ 	    {
+ 	      error ("%s variable %qE is private in outer context",
+ 		     check_non_private, DECL_NAME (decl));
+@@ -8261,6 +8290,21 @@
+ 
+   if (nonlocal_vlas)
+     {
++      if (nonlocal_vla_vars)
++	{
++	  /* tree-nested.c may later on call declare_vars (..., true);
++	     which relies on BLOCK_VARS chain to be the tail of the
++	     gimple_bind_vars chain.  Ensure we don't violate that
++	     assumption.  */
++	  if (gimple_bind_block (outer_bind)
++	      == DECL_INITIAL (current_function_decl))
++	    declare_vars (nonlocal_vla_vars, outer_bind, true);
++	  else
++	    BLOCK_VARS (DECL_INITIAL (current_function_decl))
++	      = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
++			 nonlocal_vla_vars);
++	  nonlocal_vla_vars = NULL_TREE;
++	}
+       pointer_set_destroy (nonlocal_vlas);
+       nonlocal_vlas = NULL;
+     }
+diff -Naur gcc-4.8.2.orig/gcc/go/go-gcc.cc gcc-4.8.2/gcc/go/go-gcc.cc
+--- gcc-4.8.2.orig/gcc/go/go-gcc.cc	2013-10-04 18:07:35.000000000 +0000
++++ gcc-4.8.2/gcc/go/go-gcc.cc	2014-03-30 20:21:40.687596554 +0000
+@@ -232,6 +232,9 @@
+   Bexpression*
+   convert_expression(Btype* type, Bexpression* expr, Location);
+ 
++  Bexpression*
++  function_code_expression(Bfunction*, Location);
++
+   // Statements.
+ 
+   Bstatement*
+@@ -334,6 +337,17 @@
+   Bexpression*
+   label_address(Blabel*, Location);
+ 
++  // Functions.
++
++  Bfunction*
++  error_function()
++  { return this->make_function(error_mark_node); }
++
++  Bfunction*
++  function(Btype* fntype, const std::string& name, const std::string& asm_name,
++           bool is_visible, bool is_declaration, bool is_inlinable,
++           bool disable_split_stack, bool in_unique_section, Location);
++
+  private:
+   // Make a Bexpression from a tree.
+   Bexpression*
+@@ -350,6 +364,10 @@
+   make_type(tree t)
+   { return new Btype(t); }
+ 
++  Bfunction*
++  make_function(tree t)
++  { return new Bfunction(t); }
++
+   Btype*
+   fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
+ 
+@@ -966,6 +984,19 @@
+   return tree_to_expr(ret);
+ }
+ 
++// Get the address of a function.
++
++Bexpression*
++Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
++{
++  tree func = bfunc->get_tree();
++  if (func == error_mark_node)
++    return this->error_expression();
++
++  tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
++  return this->make_expression(ret);
++}
++
+ // An expression as a statement.
+ 
+ Bstatement*
+@@ -1724,6 +1755,56 @@
+   return this->make_expression(ret);
+ }
+ 
++// Declare or define a new function.
++
++Bfunction*
++Gcc_backend::function(Btype* fntype, const std::string& name,
++                      const std::string& asm_name, bool is_visible,
++                      bool is_declaration, bool is_inlinable,
++                      bool disable_split_stack, bool in_unique_section,
++                      Location location)
++{
++  tree functype = fntype->get_tree();
++  if (functype != error_mark_node)
++    {
++      gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
++      functype = TREE_TYPE(functype);
++    }
++  tree id = get_identifier_from_string(name);
++  if (functype == error_mark_node || id == error_mark_node)
++    return this->error_function();
++
++  tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
++  if (!asm_name.empty())
++    SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
++  if (is_visible)
++    TREE_PUBLIC(decl) = 1;
++  if (is_declaration)
++    DECL_EXTERNAL(decl) = 1;
++  else
++    {
++      tree restype = TREE_TYPE(functype);
++      tree resdecl =
++          build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
++      DECL_ARTIFICIAL(resdecl) = 1;
++      DECL_IGNORED_P(resdecl) = 1;
++      DECL_CONTEXT(resdecl) = decl;
++      DECL_RESULT(decl) = resdecl;
++    }
++  if (!is_inlinable)
++    DECL_UNINLINABLE(decl) = 1;
++  if (disable_split_stack)
++    {
++      tree attr = get_identifier("__no_split_stack__");
++      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
++    }
++  if (in_unique_section)
++    resolve_unique_section(decl, 0, 1);
++
++  go_preserve_from_gc(decl);
++  return new Bfunction(decl);
++}
++
+ // The single backend.
+ 
+ static Gcc_backend gcc_backend;
+@@ -1799,3 +1880,9 @@
+ {
+   return bv->get_tree();
+ }
++
++tree
++function_to_tree(Bfunction* bf)
++{
++  return bf->get_tree();
++}
+diff -Naur gcc-4.8.2.orig/gcc/go/go-lang.c gcc-4.8.2/gcc/go/go-lang.c
+--- gcc-4.8.2.orig/gcc/go/go-lang.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/go/go-lang.c	2014-03-30 20:21:40.687596554 +0000
+@@ -269,6 +269,10 @@
+   if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
+     flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
+ 
++  /* Tail call optimizations can confuse uses of runtime.Callers.  */
++  if (!global_options_set.x_flag_optimize_sibling_calls)
++    global_options.x_flag_optimize_sibling_calls = 0;
++
+   /* Returning false means that the backend should be used.  */
+   return false;
+ }
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/backend.h gcc-4.8.2/gcc/go/gofrontend/backend.h
+--- gcc-4.8.2.orig/gcc/go/gofrontend/backend.h	2013-10-04 18:07:35.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/backend.h	2014-03-30 20:21:40.680929667 +0000
+@@ -23,7 +23,7 @@
+ // The backend representation of a statement.
+ class Bstatement;
+ 
+-// The backend representation of a function definition.
++// The backend representation of a function definition or declaration.
+ class Bfunction;
+ 
+ // The backend representation of a block.
+@@ -266,6 +266,11 @@
+   virtual Bexpression*
+   convert_expression(Btype* type, Bexpression* expr, Location) = 0;
+ 
++  // Create an expression for the address of a function.  This is used to
++  // get the address of the code for a function.
++  virtual Bexpression*
++  function_code_expression(Bfunction*, Location) = 0;
++
+   // Statements.
+ 
+   // Create an error statement.  This is used for cases which should
+@@ -498,6 +503,32 @@
+   // recover.
+   virtual Bexpression*
+   label_address(Blabel*, Location) = 0;
++
++  // Functions.
++
++  // Create an error function.  This is used for cases which should
++  // not occur in a correct program, in order to keep the compilation
++  // going without crashing.
++  virtual Bfunction*
++  error_function() = 0;
++
++  // Declare or define a function of FNTYPE.
++  // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
++  // the name that should be used in the symbol table; this will be non-empty if
++  // a magic extern comment is used.
++  // IS_VISIBLE is true if this function should be visible outside of the
++  // current compilation unit. IS_DECLARATION is true if this is a function
++  // declaration rather than a definition; the function definition will be in
++  // another compilation unit.
++  // IS_INLINABLE is true if the function can be inlined.
++  // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
++  // is used for the implementation of recover.
++  // IN_UNIQUE_SECTION is true if this function should be put into a unique
++  // location if possible; this is used for field tracking.
++  virtual Bfunction*
++  function(Btype* fntype, const std::string& name, const std::string& asm_name,
++           bool is_visible, bool is_declaration, bool is_inlinable,
++           bool disable_split_stack, bool in_unique_section, Location) = 0;
+ };
+ 
+ // The backend interface has to define this function.
+@@ -517,5 +548,6 @@
+ extern tree stat_to_tree(Bstatement*);
+ extern tree block_to_tree(Bblock*);
+ extern tree var_to_tree(Bvariable*);
++extern tree function_to_tree(Bfunction*);
+ 
+ #endif // !defined(GO_BACKEND_H)
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc gcc-4.8.2/gcc/go/gofrontend/expressions.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc	2013-10-08 23:54:31.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/expressions.cc	2014-03-30 20:21:40.680929667 +0000
+@@ -1219,7 +1219,7 @@
+ 
+ // Get the tree for the code of a function expression.
+ 
+-tree
++Bexpression*
+ Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
+ {
+   Function_type* fntype;
+@@ -1237,25 +1237,18 @@
+       error_at(loc,
+ 	       "invalid use of special builtin function %qs; must be called",
+ 	       no->message_name().c_str());
+-      return error_mark_node;
++      return gogo->backend()->error_expression();
+     }
+ 
+-  tree id = no->get_id(gogo);
+-  if (id == error_mark_node)
+-    return error_mark_node;
+-
+-  tree fndecl;
++  Bfunction* fndecl;
+   if (no->is_function())
+-    fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
++    fndecl = no->func_value()->get_or_make_decl(gogo, no);
+   else if (no->is_function_declaration())
+-    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
++    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
+   else
+     go_unreachable();
+ 
+-  if (fndecl == error_mark_node)
+-    return error_mark_node;
+-
+-  return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
++  return gogo->backend()->function_code_expression(fndecl, loc);
+ }
+ 
+ // Get the tree for a function expression.  This is used when we take
+@@ -1492,8 +1485,10 @@
+ tree
+ Func_code_reference_expression::do_get_tree(Translate_context* context)
+ {
+-  return Func_expression::get_code_pointer(context->gogo(), this->function_,
+-					   this->location());
++  Bexpression* ret =
++      Func_expression::get_code_pointer(context->gogo(), this->function_,
++                                        this->location());
++  return expr_to_tree(ret);
+ }
+ 
+ // Make a reference to the code of a function.
+@@ -3055,8 +3050,7 @@
+   do_lower(Gogo*, Named_object*, Statement_inserter*, int);
+ 
+   bool
+-  do_is_constant() const
+-  { return this->expr_->is_constant(); }
++  do_is_constant() const;
+ 
+   bool
+   do_numeric_constant_value(Numeric_constant*) const;
+@@ -3198,6 +3192,27 @@
+   return this;
+ }
+ 
++// Return whether a type conversion is a constant.
++
++bool
++Type_conversion_expression::do_is_constant() const
++{
++  if (!this->expr_->is_constant())
++    return false;
++
++  // A conversion to a type that may not be used as a constant is not
++  // a constant.  For example, []byte(nil).
++  Type* type = this->type_;
++  if (type->integer_type() == NULL
++      && type->float_type() == NULL
++      && type->complex_type() == NULL
++      && !type->is_boolean_type()
++      && !type->is_string_type())
++    return false;
++
++  return true;
++}
++
+ // Return the constant numeric value if there is one.
+ 
+ bool
+@@ -5586,6 +5601,15 @@
+       subcontext.type = NULL;
+     }
+ 
++  if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
++    {
++      // For a logical operation, the context does not determine the
++      // types of the operands.  The operands must be some boolean
++      // type but if the context has a boolean type they do not
++      // inherit it.  See http://golang.org/issue/3924.
++      subcontext.type = NULL;
++    }
++
+   // Set the context for the left hand operand.
+   if (is_shift_op)
+     {
+@@ -5967,6 +5991,43 @@
+ 				right);
+     }
+ 
++  // For complex division Go wants slightly different results than the
++  // GCC library provides, so we have our own runtime routine.
++  if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
++    {
++      const char *name;
++      tree *pdecl;
++      Type* ctype;
++      static tree complex64_div_decl;
++      static tree complex128_div_decl;
++      switch (this->left_->type()->complex_type()->bits())
++	{
++	case 64:
++	  name = "__go_complex64_div";
++	  pdecl = &complex64_div_decl;
++	  ctype = Type::lookup_complex_type("complex64");
++	  break;
++	case 128:
++	  name = "__go_complex128_div";
++	  pdecl = &complex128_div_decl;
++	  ctype = Type::lookup_complex_type("complex128");
++	  break;
++	default:
++	  go_unreachable();
++	}
++      Btype* cbtype = ctype->get_backend(gogo);
++      tree ctype_tree = type_to_tree(cbtype);
++      return Gogo::call_builtin(pdecl,
++				this->location(),
++				name,
++				2,
++				ctype_tree,
++				ctype_tree,
++				fold_convert_loc(gccloc, ctype_tree, left),
++				type,
++				fold_convert_loc(gccloc, ctype_tree, right));
++    }
++
+   tree compute_type = excess_precision_type(type);
+   if (compute_type != NULL_TREE)
+     {
+@@ -7191,6 +7252,15 @@
+   if (this->code_ == BUILTIN_OFFSETOF)
+     {
+       Expression* arg = this->one_arg();
++
++      if (arg->bound_method_expression() != NULL
++	  || arg->interface_field_reference_expression() != NULL)
++	{
++	  this->report_error(_("invalid use of method value as argument "
++			       "of Offsetof"));
++	  return this;
++	}
++
+       Field_reference_expression* farg = arg->field_reference_expression();
+       while (farg != NULL)
+ 	{
+@@ -7200,7 +7270,8 @@
+ 	  // it must not be reached through pointer indirections.
+ 	  if (farg->expr()->deref() != farg->expr())
+ 	    {
+-	      this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
++	      this->report_error(_("argument of Offsetof implies "
++				   "indirection of an embedded field"));
+ 	      return this;
+ 	    }
+ 	  // Go up until we reach the original base.
+@@ -7476,7 +7547,7 @@
+       switch (nc.to_unsigned_long(&v))
+ 	{
+ 	case Numeric_constant::NC_UL_VALID:
+-	  return true;
++	  break;
+ 	case Numeric_constant::NC_UL_NOTINT:
+ 	  error_at(e->location(), "non-integer %s argument to make",
+ 		   is_length ? "len" : "cap");
+@@ -7488,8 +7559,23 @@
+ 	case Numeric_constant::NC_UL_BIG:
+ 	  // We don't want to give a compile-time error for a 64-bit
+ 	  // value on a 32-bit target.
+-	  return true;
++	  break;
+ 	}
++
++      mpz_t val;
++      if (!nc.to_int(&val))
++	go_unreachable();
++      int bits = mpz_sizeinbase(val, 2);
++      mpz_clear(val);
++      Type* int_type = Type::lookup_integer_type("int");
++      if (bits >= int_type->integer_type()->bits())
++	{
++	  error_at(e->location(), "%s argument too large for make",
++		   is_length ? "len" : "cap");
++	  return false;
++	}
++
++      return true;
+     }
+ 
+   if (e->type()->integer_type() != NULL)
+@@ -7595,6 +7681,8 @@
+ bool
+ Builtin_call_expression::do_is_constant() const
+ {
++  if (this->is_error_expression())
++    return true;
+   switch (this->code_)
+     {
+     case BUILTIN_LEN:
+@@ -9744,14 +9832,8 @@
+     }
+ 
+   tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
+-  if (fntype_tree == error_mark_node)
+-    return error_mark_node;
+-  go_assert(POINTER_TYPE_P(fntype_tree));
+-  if (TREE_TYPE(fntype_tree) == error_mark_node)
+-    return error_mark_node;
+-  go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
+-  tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
+-  if (fnfield_type == error_mark_node)
++  tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
++  if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
+     return error_mark_node;
+   go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
+   tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
+@@ -9763,7 +9845,7 @@
+   if (func != NULL)
+     {
+       Named_object* no = func->named_object();
+-      fn = Func_expression::get_code_pointer(gogo, no, location);
++      fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
+       if (!has_closure)
+ 	closure_tree = NULL_TREE;
+       else
+@@ -10817,11 +10899,20 @@
+ void
+ String_index_expression::do_check_types(Gogo*)
+ {
+-  if (this->start_->type()->integer_type() == NULL)
++  Numeric_constant nc;
++  unsigned long v;
++  if (this->start_->type()->integer_type() == NULL
++      && !this->start_->type()->is_error()
++      && (!this->start_->numeric_constant_value(&nc)
++	  || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
+     this->report_error(_("index must be integer"));
+   if (this->end_ != NULL
+       && this->end_->type()->integer_type() == NULL
+-      && !this->end_->is_nil_expression())
++      && !this->end_->type()->is_error()
++      && !this->end_->is_nil_expression()
++      && !this->end_->is_error_expression()
++      && (!this->end_->numeric_constant_value(&nc)
++	  || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
+     this->report_error(_("slice end must be integer"));
+ 
+   std::string sval;
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h gcc-4.8.2/gcc/go/gofrontend/expressions.h
+--- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h	2013-10-08 23:54:31.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/expressions.h	2014-03-30 20:21:40.680929667 +0000
+@@ -1514,8 +1514,8 @@
+   closure()
+   { return this->closure_; }
+ 
+-  // Return a tree for the code for a function.
+-  static tree
++  // Return a backend expression for the code of a function.
++  static Bexpression*
+   get_code_pointer(Gogo*, Named_object* function, Location loc);
+ 
+  protected:
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc	2013-09-28 20:23:56.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc	2014-03-30 20:21:40.684263111 +0000
+@@ -985,74 +985,6 @@
+   delete[] vec;
+ }
+ 
+-// Get a tree for the identifier for a named object.
+-
+-tree
+-Named_object::get_id(Gogo* gogo)
+-{
+-  go_assert(!this->is_variable() && !this->is_result_variable());
+-  std::string decl_name;
+-  if (this->is_function_declaration()
+-      && !this->func_declaration_value()->asm_name().empty())
+-    decl_name = this->func_declaration_value()->asm_name();
+-  else if (this->is_type()
+-	   && Linemap::is_predeclared_location(this->type_value()->location()))
+-    {
+-      // We don't need the package name for builtin types.
+-      decl_name = Gogo::unpack_hidden_name(this->name_);
+-    }
+-  else
+-    {
+-      std::string package_name;
+-      if (this->package_ == NULL)
+-	package_name = gogo->package_name();
+-      else
+-	package_name = this->package_->package_name();
+-
+-      // Note that this will be misleading if this is an unexported
+-      // method generated for an embedded imported type.  In that case
+-      // the unexported method should have the package name of the
+-      // package from which it is imported, but we are going to give
+-      // it our package name.  Fixing this would require knowing the
+-      // package name, but we only know the package path.  It might be
+-      // better to use package paths here anyhow.  This doesn't affect
+-      // the assembler code, because we always set that name in
+-      // Function::get_or_make_decl anyhow.  FIXME.
+-
+-      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
+-
+-      Function_type* fntype;
+-      if (this->is_function())
+-	fntype = this->func_value()->type();
+-      else if (this->is_function_declaration())
+-	fntype = this->func_declaration_value()->type();
+-      else
+-	fntype = NULL;
+-      if (fntype != NULL && fntype->is_method())
+-	{
+-	  decl_name.push_back('.');
+-	  decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
+-	}
+-    }
+-  if (this->is_type())
+-    {
+-      unsigned int index;
+-      const Named_object* in_function = this->type_value()->in_function(&index);
+-      if (in_function != NULL)
+-	{
+-	  decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
+-	  if (index > 0)
+-	    {
+-	      char buf[30];
+-	      snprintf(buf, sizeof buf, "%u", index);
+-	      decl_name += '$';
+-	      decl_name += buf;
+-	    }
+-	}
+-    }
+-  return get_identifier_from_string(decl_name);
+-}
+-
+ // Get a tree for a named object.
+ 
+ tree
+@@ -1067,11 +999,6 @@
+       return error_mark_node;
+     }
+ 
+-  tree name;
+-  if (this->classification_ == NAMED_OBJECT_TYPE)
+-    name = NULL_TREE;
+-  else
+-    name = this->get_id(gogo);
+   tree decl;
+   switch (this->classification_)
+     {
+@@ -1099,6 +1026,7 @@
+ 	      decl = error_mark_node;
+ 	    else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
+ 	      {
++                tree name = get_identifier_from_string(this->get_id(gogo));
+ 		decl = build_decl(named_constant->location().gcc_location(),
+                                   CONST_DECL, name, TREE_TYPE(expr_tree));
+ 		DECL_INITIAL(decl) = expr_tree;
+@@ -1161,7 +1089,7 @@
+     case NAMED_OBJECT_FUNC:
+       {
+ 	Function* func = this->u_.func_value;
+-	decl = func->get_or_make_decl(gogo, this, name);
++	decl = function_to_tree(func->get_or_make_decl(gogo, this));
+ 	if (decl != error_mark_node)
+ 	  {
+ 	    if (func->block() != NULL)
+@@ -1286,123 +1214,12 @@
+   return block_tree;
+ }
+ 
+-// Get a tree for a function decl.
++// Get the backend representation.
+ 
+-tree
+-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
++Bfunction*
++Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
+ {
+-  if (this->fndecl_ == NULL_TREE)
+-    {
+-      tree functype = type_to_tree(this->type_->get_backend(gogo));
+-
+-      if (functype != error_mark_node)
+-	{
+-	  // The type of a function comes back as a pointer to a
+-	  // struct whose first field is the function, but we want the
+-	  // real function type for a function declaration.
+-	  go_assert(POINTER_TYPE_P(functype)
+-		    && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
+-	  functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
+-	  go_assert(FUNCTION_POINTER_TYPE_P(functype));
+-	  functype = TREE_TYPE(functype);
+-	}
+-
+-      if (functype == error_mark_node)
+-	this->fndecl_ = error_mark_node;
+-      else
+-	{
+-	  tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
+-                                 id, functype);
+-
+-	  this->fndecl_ = decl;
+-
+-	  if (no->package() != NULL)
+-	    ;
+-	  else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
+-	    ;
+-	  else if (Gogo::unpack_hidden_name(no->name()) == "init"
+-		   && !this->type_->is_method())
+-	    ;
+-	  else if (Gogo::unpack_hidden_name(no->name()) == "main"
+-		   && gogo->is_main_package())
+-	    TREE_PUBLIC(decl) = 1;
+-	  // Methods have to be public even if they are hidden because
+-	  // they can be pulled into type descriptors when using
+-	  // anonymous fields.
+-	  else if (!Gogo::is_hidden_name(no->name())
+-		   || this->type_->is_method())
+-	    {
+-	      TREE_PUBLIC(decl) = 1;
+-	      std::string pkgpath = gogo->pkgpath_symbol();
+-	      if (this->type_->is_method()
+-		  && Gogo::is_hidden_name(no->name())
+-		  && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
+-		{
+-		  // This is a method we created for an unexported
+-		  // method of an imported embedded type.  We need to
+-		  // use the pkgpath of the imported package to avoid
+-		  // a possible name collision.  See bug478 for a test
+-		  // case.
+-		  pkgpath = Gogo::hidden_name_pkgpath(no->name());
+-		  pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
+-		}
+-
+-	      std::string asm_name = pkgpath;
+-	      asm_name.append(1, '.');
+-	      asm_name.append(Gogo::unpack_hidden_name(no->name()));
+-	      if (this->type_->is_method())
+-		{
+-		  asm_name.append(1, '.');
+-		  Type* rtype = this->type_->receiver()->type();
+-		  asm_name.append(rtype->mangled_name(gogo));
+-		}
+-	      SET_DECL_ASSEMBLER_NAME(decl,
+-				      get_identifier_from_string(asm_name));
+-	    }
+-
+-	  // Why do we have to do this in the frontend?
+-	  tree restype = TREE_TYPE(functype);
+-	  tree resdecl =
+-            build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
+-                       restype);
+-	  DECL_ARTIFICIAL(resdecl) = 1;
+-	  DECL_IGNORED_P(resdecl) = 1;
+-	  DECL_CONTEXT(resdecl) = decl;
+-	  DECL_RESULT(decl) = resdecl;
+-
+-	  // If a function calls the predeclared recover function, we
+-	  // can't inline it, because recover behaves differently in a
+-	  // function passed directly to defer.  If this is a recover
+-	  // thunk that we built to test whether a function can be
+-	  // recovered, we can't inline it, because that will mess up
+-	  // our return address comparison.
+-	  if (this->calls_recover_ || this->is_recover_thunk_)
+-	    DECL_UNINLINABLE(decl) = 1;
+-
+-	  // If this is a thunk created to call a function which calls
+-	  // the predeclared recover function, we need to disable
+-	  // stack splitting for the thunk.
+-	  if (this->is_recover_thunk_)
+-	    {
+-	      tree attr = get_identifier("__no_split_stack__");
+-	      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
+-	    }
+-
+-	  if (this->in_unique_section_)
+-	    resolve_unique_section (decl, 0, 1);
+-
+-	  go_preserve_from_gc(decl);
+-	}
+-    }
+-  return this->fndecl_;
+-}
+-
+-// Get a tree for a function declaration.
+-
+-tree
+-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
+-{
+-  if (this->fndecl_ == NULL_TREE)
++  if (this->fndecl_ == NULL)
+     {
+       // Let Go code use an asm declaration to pick up a builtin
+       // function.
+@@ -1412,56 +1229,44 @@
+ 	    builtin_functions.find(this->asm_name_);
+ 	  if (p != builtin_functions.end())
+ 	    {
+-	      this->fndecl_ = p->second;
++	      this->fndecl_ = tree_to_function(p->second);
+ 	      return this->fndecl_;
+ 	    }
+ 	}
+ 
+-      tree functype = type_to_tree(this->fntype_->get_backend(gogo));
++      std::string asm_name;
++      if (this->asm_name_.empty())
++        {
++          asm_name = (no->package() == NULL
++                                  ? gogo->pkgpath_symbol()
++                                  : no->package()->pkgpath_symbol());
++          asm_name.append(1, '.');
++          asm_name.append(Gogo::unpack_hidden_name(no->name()));
++          if (this->fntype_->is_method())
++            {
++              asm_name.append(1, '.');
++              Type* rtype = this->fntype_->receiver()->type();
++              asm_name.append(rtype->mangled_name(gogo));
++            }
++        }
++
++      Btype* functype = this->fntype_->get_backend_fntype(gogo);
++      this->fndecl_ =
++          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
++                                    true, true, true, false, false,
++                                    this->location());
++    }
+ 
+-      if (functype != error_mark_node)
+-	{
+-	  // The type of a function comes back as a pointer to a
+-	  // struct whose first field is the function, but we want the
+-	  // real function type for a function declaration.
+-	  go_assert(POINTER_TYPE_P(functype)
+-		    && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
+-	  functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
+-	  go_assert(FUNCTION_POINTER_TYPE_P(functype));
+-	  functype = TREE_TYPE(functype);
+-	}
++  return this->fndecl_;
++}
+ 
+-      tree decl;
+-      if (functype == error_mark_node)
+-	decl = error_mark_node;
+-      else
+-	{
+-	  decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
+-                            functype);
+-	  TREE_PUBLIC(decl) = 1;
+-	  DECL_EXTERNAL(decl) = 1;
++// Return the function's decl after it has been built.
+ 
+-	  if (this->asm_name_.empty())
+-	    {
+-	      std::string asm_name = (no->package() == NULL
+-				      ? gogo->pkgpath_symbol()
+-				      : no->package()->pkgpath_symbol());
+-	      asm_name.append(1, '.');
+-	      asm_name.append(Gogo::unpack_hidden_name(no->name()));
+-	      if (this->fntype_->is_method())
+-		{
+-		  asm_name.append(1, '.');
+-		  Type* rtype = this->fntype_->receiver()->type();
+-		  asm_name.append(rtype->mangled_name(gogo));
+-		}
+-	      SET_DECL_ASSEMBLER_NAME(decl,
+-				      get_identifier_from_string(asm_name));
+-	    }
+-	}
+-      this->fndecl_ = decl;
+-      go_preserve_from_gc(decl);
+-    }
+-  return this->fndecl_;
++tree
++Function::get_decl() const
++{
++  go_assert(this->fndecl_ != NULL);
++  return function_to_tree(this->fndecl_);
+ }
+ 
+ // We always pass the receiver to a method as a pointer.  If the
+@@ -1558,7 +1363,7 @@
+ void
+ Function::build_tree(Gogo* gogo, Named_object* named_function)
+ {
+-  tree fndecl = this->fndecl_;
++  tree fndecl = this->get_decl();
+   go_assert(fndecl != NULL_TREE);
+ 
+   tree params = NULL_TREE;
+@@ -1796,7 +1601,7 @@
+     set = NULL_TREE;
+   else
+     set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
+-			  DECL_RESULT(this->fndecl_), retval);
++			  DECL_RESULT(this->get_decl()), retval);
+   tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
+                                   void_type_node, set);
+   append_to_statement_list(ret_stmt, &stmt_list);
+@@ -1851,7 +1656,7 @@
+       retval = this->return_value(gogo, named_function, end_loc,
+ 				  &stmt_list);
+       set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
+-			    DECL_RESULT(this->fndecl_), retval);
++			    DECL_RESULT(this->get_decl()), retval);
+       ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
+                                  void_type_node, set);
+ 
+@@ -1869,7 +1674,7 @@
+   *fini = stmt_list;
+ }
+ 
+-// Return the value to assign to DECL_RESULT(this->fndecl_).  This may
++// Return the value to assign to DECL_RESULT(this->get_decl()).  This may
+ // also add statements to STMT_LIST, which need to be executed before
+ // the assignment.  This is used for a return statement with no
+ // explicit values.
+@@ -1902,7 +1707,7 @@
+     }
+   else
+     {
+-      tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
++      tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
+       retval = create_tmp_var(rettype, "RESULT");
+       tree field = TYPE_FIELDS(rettype);
+       int index = 0;
+@@ -2323,18 +2128,14 @@
+       go_assert(m != NULL);
+ 
+       Named_object* no = m->named_object();
+-
+-      tree fnid = no->get_id(this);
+-
+-      tree fndecl;
++      Bfunction* bf;
+       if (no->is_function())
+-	fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
++	bf = no->func_value()->get_or_make_decl(this, no);
+       else if (no->is_function_declaration())
+-	fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
+-								fnid);
++	bf = no->func_declaration_value()->get_or_make_decl(this, no);
+       else
+ 	go_unreachable();
+-      fndecl = build_fold_addr_expr(fndecl);
++      tree fndecl = build_fold_addr_expr(function_to_tree(bf));
+ 
+       elt = pointers->quick_push(empty);
+       elt->index = size_int(i);
+@@ -2353,10 +2154,11 @@
+   TREE_CONSTANT(decl) = 1;
+   DECL_INITIAL(decl) = constructor;
+ 
+-  // If the interface type has hidden methods, then this is the only
+-  // definition of the table.  Otherwise it is a comdat table which
+-  // may be defined in multiple packages.
+-  if (has_hidden_methods)
++  // If the interface type has hidden methods, and the table is for a
++  // named type, then this is the only definition of the table.
++  // Otherwise it is a comdat table which may be defined in multiple
++  // packages.
++  if (has_hidden_methods && type->named_type() != NULL)
+     TREE_PUBLIC(decl) = 1;
+   else
+     {
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc gcc-4.8.2/gcc/go/gofrontend/gogo.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc	2013-09-28 20:23:56.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/gogo.cc	2014-03-30 20:21:40.680929667 +0000
+@@ -2822,7 +2822,10 @@
+   if (orig_fntype->is_varargs())
+     new_fntype->set_is_varargs();
+ 
+-  std::string name = orig_no->name() + "$recover";
++  std::string name = orig_no->name();
++  if (orig_fntype->is_method())
++    name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
++  name += "$recover";
+   Named_object *new_no = gogo->start_function(name, new_fntype, false,
+ 					      location);
+   Function *new_func = new_no->func_value();
+@@ -2916,7 +2919,25 @@
+ 		 && !orig_rec_no->var_value()->is_receiver());
+       orig_rec_no->var_value()->set_is_receiver();
+ 
+-      const std::string& new_receiver_name(orig_fntype->receiver()->name());
++      std::string new_receiver_name(orig_fntype->receiver()->name());
++      if (new_receiver_name.empty())
++	{
++	  // Find the receiver.  It was named "r.NNN" in
++	  // Gogo::start_function.
++	  for (Bindings::const_definitions_iterator p =
++		 new_bindings->begin_definitions();
++	       p != new_bindings->end_definitions();
++	       ++p)
++	    {
++	      const std::string& pname((*p)->name());
++	      if (pname[0] == 'r' && pname[1] == '.')
++		{
++		  new_receiver_name = pname;
++		  break;
++		}
++	    }
++	  go_assert(!new_receiver_name.empty());
++	}
+       Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
+       if (new_rec_no == NULL)
+ 	go_assert(saw_errors());
+@@ -3320,7 +3341,8 @@
+     closure_var_(NULL), block_(block), location_(location), labels_(),
+     local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
+     is_sink_(false), results_are_named_(false), nointerface_(false),
+-    calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
++    is_unnamed_type_stub_method_(false), calls_recover_(false),
++    is_recover_thunk_(false), has_recover_thunk_(false),
+     in_unique_section_(false)
+ {
+ }
+@@ -3819,6 +3841,81 @@
+   *presults = results;
+ }
+ 
++// Get the backend representation.
++
++Bfunction*
++Function::get_or_make_decl(Gogo* gogo, Named_object* no)
++{
++  if (this->fndecl_ == NULL)
++    {
++      std::string asm_name;
++      bool is_visible = false;
++      if (no->package() != NULL)
++        ;
++      else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
++        ;
++      else if (Gogo::unpack_hidden_name(no->name()) == "init"
++               && !this->type_->is_method())
++        ;
++      else if (Gogo::unpack_hidden_name(no->name()) == "main"
++               && gogo->is_main_package())
++        is_visible = true;
++      // Methods have to be public even if they are hidden because
++      // they can be pulled into type descriptors when using
++      // anonymous fields.
++      else if (!Gogo::is_hidden_name(no->name())
++               || this->type_->is_method())
++        {
++	  if (!this->is_unnamed_type_stub_method_)
++	    is_visible = true;
++          std::string pkgpath = gogo->pkgpath_symbol();
++          if (this->type_->is_method()
++              && Gogo::is_hidden_name(no->name())
++              && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
++            {
++              // This is a method we created for an unexported
++              // method of an imported embedded type.  We need to
++              // use the pkgpath of the imported package to avoid
++              // a possible name collision.  See bug478 for a test
++              // case.
++              pkgpath = Gogo::hidden_name_pkgpath(no->name());
++              pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
++            }
++
++          asm_name = pkgpath;
++          asm_name.append(1, '.');
++          asm_name.append(Gogo::unpack_hidden_name(no->name()));
++          if (this->type_->is_method())
++            {
++              asm_name.append(1, '.');
++              Type* rtype = this->type_->receiver()->type();
++              asm_name.append(rtype->mangled_name(gogo));
++            }
++        }
++
++      // If a function calls the predeclared recover function, we
++      // can't inline it, because recover behaves differently in a
++      // function passed directly to defer.  If this is a recover
++      // thunk that we built to test whether a function can be
++      // recovered, we can't inline it, because that will mess up
++      // our return address comparison.
++      bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
++
++      // If this is a thunk created to call a function which calls
++      // the predeclared recover function, we need to disable
++      // stack splitting for the thunk.
++      bool disable_split_stack = this->is_recover_thunk_;
++
++      Btype* functype = this->type_->get_backend_fntype(gogo);
++      this->fndecl_ =
++          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
++                                    is_visible, false, is_inlinable,
++                                    disable_split_stack,
++                                    this->in_unique_section_, this->location());
++    }
++  return this->fndecl_;
++}
++
+ // Class Block.
+ 
+ Block::Block(Block* enclosing, Location location)
+@@ -5110,6 +5207,75 @@
+     go_unreachable();
+ }
+ 
++
++// Return the external identifier for this object.
++
++std::string
++Named_object::get_id(Gogo* gogo)
++{
++  go_assert(!this->is_variable() && !this->is_result_variable());
++  std::string decl_name;
++  if (this->is_function_declaration()
++      && !this->func_declaration_value()->asm_name().empty())
++    decl_name = this->func_declaration_value()->asm_name();
++  else if (this->is_type()
++	   && Linemap::is_predeclared_location(this->type_value()->location()))
++    {
++      // We don't need the package name for builtin types.
++      decl_name = Gogo::unpack_hidden_name(this->name_);
++    }
++  else
++    {
++      std::string package_name;
++      if (this->package_ == NULL)
++	package_name = gogo->package_name();
++      else
++	package_name = this->package_->package_name();
++
++      // Note that this will be misleading if this is an unexported
++      // method generated for an embedded imported type.  In that case
++      // the unexported method should have the package name of the
++      // package from which it is imported, but we are going to give
++      // it our package name.  Fixing this would require knowing the
++      // package name, but we only know the package path.  It might be
++      // better to use package paths here anyhow.  This doesn't affect
++      // the assembler code, because we always set that name in
++      // Function::get_or_make_decl anyhow.  FIXME.
++
++      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
++
++      Function_type* fntype;
++      if (this->is_function())
++	fntype = this->func_value()->type();
++      else if (this->is_function_declaration())
++	fntype = this->func_declaration_value()->type();
++      else
++	fntype = NULL;
++      if (fntype != NULL && fntype->is_method())
++	{
++	  decl_name.push_back('.');
++	  decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
++	}
++    }
++  if (this->is_type())
++    {
++      unsigned int index;
++      const Named_object* in_function = this->type_value()->in_function(&index);
++      if (in_function != NULL)
++	{
++	  decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
++	  if (index > 0)
++	    {
++	      char buf[30];
++	      snprintf(buf, sizeof buf, "%u", index);
++	      decl_name += '$';
++	      decl_name += buf;
++	    }
++	}
++    }
++  return decl_name;
++}
++
+ // Class Bindings.
+ 
+ Bindings::Bindings(Bindings* enclosing)
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h gcc-4.8.2/gcc/go/gofrontend/gogo.h
+--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h	2013-09-28 20:23:56.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/gogo.h	2014-03-30 20:21:40.680929667 +0000
+@@ -48,6 +48,7 @@
+ class Bblock;
+ class Bvariable;
+ class Blabel;
++class Bfunction;
+ 
+ // This file declares the basic classes used to hold the internal
+ // representation of Go which is built by the parser.
+@@ -952,6 +953,15 @@
+     this->nointerface_ = true;
+   }
+ 
++  // Record that this function is a stub method created for an unnamed
++  // type.
++  void
++  set_is_unnamed_type_stub_method()
++  {
++    go_assert(this->is_method());
++    this->is_unnamed_type_stub_method_ = true;
++  }
++
+   // Add a new field to the closure variable.
+   void
+   add_closure_field(Named_object* var, Location loc)
+@@ -1089,17 +1099,13 @@
+     this->descriptor_ = descriptor;
+   }
+ 
+-  // Return the function's decl given an identifier.
+-  tree
+-  get_or_make_decl(Gogo*, Named_object*, tree id);
++  // Return the backend representation.
++  Bfunction*
++  get_or_make_decl(Gogo*, Named_object*);
+ 
+   // Return the function's decl after it has been built.
+   tree
+-  get_decl() const
+-  {
+-    go_assert(this->fndecl_ != NULL);
+-    return this->fndecl_;
+-  }
++  get_decl() const;
+ 
+   // Set the function decl to hold a tree of the function code.
+   void
+@@ -1170,7 +1176,7 @@
+   // The function descriptor, if any.
+   Expression* descriptor_;
+   // The function decl.
+-  tree fndecl_;
++  Bfunction* fndecl_;
+   // The defer stack variable.  A pointer to this variable is used to
+   // distinguish the defer stack for one function from another.  This
+   // is NULL unless we actually need a defer stack.
+@@ -1181,6 +1187,9 @@
+   bool results_are_named_ : 1;
+   // True if this method should not be included in the type descriptor.
+   bool nointerface_ : 1;
++  // True if this function is a stub method created for an unnamed
++  // type.
++  bool is_unnamed_type_stub_method_ : 1;
+   // True if this function calls the predeclared recover function.
+   bool calls_recover_ : 1;
+   // True if this a thunk built for a function which calls recover.
+@@ -1265,9 +1274,9 @@
+   has_descriptor() const
+   { return this->descriptor_ != NULL; }
+ 
+-  // Return a decl for the function given an identifier.
+-  tree
+-  get_or_make_decl(Gogo*, Named_object*, tree id);
++  // Return a backend representation.
++  Bfunction*
++  get_or_make_decl(Gogo*, Named_object*);
+ 
+   // If there is a descriptor, build it into the backend
+   // representation.
+@@ -1290,7 +1299,7 @@
+   // The function descriptor, if any.
+   Expression* descriptor_;
+   // The function decl if needed.
+-  tree fndecl_;
++  Bfunction* fndecl_;
+ };
+ 
+ // A variable.
+@@ -2181,8 +2190,8 @@
+   Bvariable*
+   get_backend_variable(Gogo*, Named_object* function);
+ 
+-  // Return a tree for the external identifier for this object.
+-  tree
++  // Return the external identifier for this object.
++  std::string
+   get_id(Gogo*);
+ 
+   // Return a tree representing this object.
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/import.h gcc-4.8.2/gcc/go/gofrontend/import.h
+--- gcc-4.8.2.orig/gcc/go/gofrontend/import.h	2012-10-31 00:38:49.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/import.h	2014-03-30 20:21:40.684263111 +0000
+@@ -149,6 +149,11 @@
+   location() const
+   { return this->location_; }
+ 
++  // Return the package we are importing.
++  Package*
++  package() const
++  { return this->package_; }
++
+   // Return the next character.
+   int
+   peek_char()
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc gcc-4.8.2/gcc/go/gofrontend/lex.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc	2012-12-03 06:57:04.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/lex.cc	2014-03-30 20:21:40.684263111 +0000
+@@ -873,7 +873,28 @@
+ 	      && (cc < 'a' || cc > 'z')
+ 	      && cc != '_'
+ 	      && (cc < '0' || cc > '9'))
+-	    break;
++	    {
++	      // Check for an invalid character here, as we get better
++	      // error behaviour if we swallow them as part of the
++	      // identifier we are building.
++	      if ((cc >= ' ' && cc < 0x7f)
++		  || cc == '\t'
++		  || cc == '\r'
++		  || cc == '\n')
++		break;
++
++	      this->lineoff_ = p - this->linebuf_;
++	      error_at(this->location(),
++		       "invalid character 0x%x in identifier",
++		       cc);
++	      if (!has_non_ascii_char)
++		{
++		  buf.assign(pstart, p - pstart);
++		  has_non_ascii_char = true;
++		}
++	      if (!Lex::is_invalid_identifier(buf))
++		buf.append("$INVALID$");
++	    }
+ 	  ++p;
+ 	  if (is_first)
+ 	    {
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc gcc-4.8.2/gcc/go/gofrontend/parse.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc	2013-10-08 23:54:31.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/parse.cc	2014-03-30 20:21:40.684263111 +0000
+@@ -744,6 +744,8 @@
+     return NULL;
+ 
+   Parse::Names names;
++  if (receiver != NULL)
++    names[receiver->name()] = receiver;
+   if (params != NULL)
+     this->check_signature_names(params, &names);
+   if (results != NULL)
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc gcc-4.8.2/gcc/go/gofrontend/runtime.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc	2012-12-21 15:59:27.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/runtime.cc	2014-03-30 20:21:40.684263111 +0000
+@@ -42,6 +42,8 @@
+   RFT_RUNE,
+   // Go type float64, C type double.
+   RFT_FLOAT64,
++  // Go type complex64, C type __complex float.
++  RFT_COMPLEX64,
+   // Go type complex128, C type __complex double.
+   RFT_COMPLEX128,
+   // Go type string, C type struct __go_string.
+@@ -126,6 +128,10 @@
+ 	  t = Type::lookup_float_type("float64");
+ 	  break;
+ 
++	case RFT_COMPLEX64:
++	  t = Type::lookup_complex_type("complex64");
++	  break;
++
+ 	case RFT_COMPLEX128:
+ 	  t = Type::lookup_complex_type("complex128");
+ 	  break;
+@@ -216,6 +222,7 @@
+     case RFT_UINTPTR:
+     case RFT_RUNE:
+     case RFT_FLOAT64:
++    case RFT_COMPLEX64:
+     case RFT_COMPLEX128:
+     case RFT_STRING:
+     case RFT_POINTER:
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def gcc-4.8.2/gcc/go/gofrontend/runtime.def
+--- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def	2013-06-18 23:50:42.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/runtime.def	2014-03-30 20:21:40.684263111 +0000
+@@ -68,6 +68,12 @@
+ 	       P1(STRING), R1(SLICE))
+ 
+ 
++// Complex division.
++DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
++	       P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
++DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
++	       P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
++
+ // Make a slice.
+ DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
+ DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.cc gcc-4.8.2/gcc/go/gofrontend/types.cc
+--- gcc-4.8.2.orig/gcc/go/gofrontend/types.cc	2013-10-02 19:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/types.cc	2014-03-30 20:21:40.684263111 +0000
+@@ -1834,7 +1834,9 @@
+ 					       bloc);
+   gogo->start_block(bloc);
+ 
+-  if (this->struct_type() != NULL)
++  if (name != NULL && name->real_type()->named_type() != NULL)
++    this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
++  else if (this->struct_type() != NULL)
+     this->struct_type()->write_hash_function(gogo, name, hash_fntype,
+ 					     equal_fntype);
+   else if (this->array_type() != NULL)
+@@ -1852,7 +1854,9 @@
+ 						false, bloc);
+   gogo->start_block(bloc);
+ 
+-  if (this->struct_type() != NULL)
++  if (name != NULL && name->real_type()->named_type() != NULL)
++    this->write_named_equal(gogo, name);
++  else if (this->struct_type() != NULL)
+     this->struct_type()->write_equal_function(gogo, name);
+   else if (this->array_type() != NULL)
+     this->array_type()->write_equal_function(gogo, name);
+@@ -1865,6 +1869,100 @@
+   gogo->finish_function(bloc);
+ }
+ 
++// Write a hash function that simply calls the hash function for a
++// named type.  This is used when one named type is defined as
++// another.  This ensures that this case works when the other named
++// type is defined in another package and relies on calling hash
++// functions defined only in that package.
++
++void
++Type::write_named_hash(Gogo* gogo, Named_type* name,
++		       Function_type* hash_fntype, Function_type* equal_fntype)
++{
++  Location bloc = Linemap::predeclared_location();
++
++  Named_type* base_type = name->real_type()->named_type();
++  go_assert(base_type != NULL);
++
++  // The pointer to the type we are going to hash.  This is an
++  // unsafe.Pointer.
++  Named_object* key_arg = gogo->lookup("key", NULL);
++  go_assert(key_arg != NULL);
++
++  // The size of the type we are going to hash.
++  Named_object* keysz_arg = gogo->lookup("key_size", NULL);
++  go_assert(keysz_arg != NULL);
++
++  Named_object* hash_fn;
++  Named_object* equal_fn;
++  name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
++				    &hash_fn, &equal_fn);
++
++  // Call the hash function for the base type.
++  Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
++  Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
++  Expression_list* args = new Expression_list();
++  args->push_back(key_ref);
++  args->push_back(keysz_ref);
++  Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
++  Expression* call = Expression::make_call(func, args, false, bloc);
++
++  // Return the hash of the base type.
++  Expression_list* vals = new Expression_list();
++  vals->push_back(call);
++  Statement* s = Statement::make_return_statement(vals, bloc);
++  gogo->add_statement(s);
++}
++
++// Write an equality function that simply calls the equality function
++// for a named type.  This is used when one named type is defined as
++// another.  This ensures that this case works when the other named
++// type is defined in another package and relies on calling equality
++// functions defined only in that package.
++
++void
++Type::write_named_equal(Gogo* gogo, Named_type* name)
++{
++  Location bloc = Linemap::predeclared_location();
++
++  // The pointers to the types we are going to compare.  These have
++  // type unsafe.Pointer.
++  Named_object* key1_arg = gogo->lookup("key1", NULL);
++  Named_object* key2_arg = gogo->lookup("key2", NULL);
++  go_assert(key1_arg != NULL && key2_arg != NULL);
++
++  Named_type* base_type = name->real_type()->named_type();
++  go_assert(base_type != NULL);
++
++  // Build temporaries with the base type.
++  Type* pt = Type::make_pointer_type(base_type);
++
++  Expression* ref = Expression::make_var_reference(key1_arg, bloc);
++  ref = Expression::make_cast(pt, ref, bloc);
++  Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
++  gogo->add_statement(p1);
++
++  ref = Expression::make_var_reference(key2_arg, bloc);
++  ref = Expression::make_cast(pt, ref, bloc);
++  Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
++  gogo->add_statement(p2);
++
++  // Compare the values for equality.
++  Expression* t1 = Expression::make_temporary_reference(p1, bloc);
++  t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
++
++  Expression* t2 = Expression::make_temporary_reference(p2, bloc);
++  t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
++
++  Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
++
++  // Return the equality comparison.
++  Expression_list* vals = new Expression_list();
++  vals->push_back(cond);
++  Statement* s = Statement::make_return_statement(vals, bloc);
++  gogo->add_statement(s);
++}
++
+ // Return a composite literal for the type descriptor for a plain type
+ // of kind RUNTIME_TYPE_KIND named NAME.
+ 
+@@ -2164,26 +2262,9 @@
+ 
+   ++p;
+   go_assert(p->is_field_name("typ"));
+-  if (!only_value_methods && m->is_value_method())
+-    {
+-      // This is a value method on a pointer type.  Change the type of
+-      // the method to use a pointer receiver.  The implementation
+-      // always uses a pointer receiver anyhow.
+-      Type* rtype = mtype->receiver()->type();
+-      Type* prtype = Type::make_pointer_type(rtype);
+-      Typed_identifier* receiver =
+-	new Typed_identifier(mtype->receiver()->name(), prtype,
+-			     mtype->receiver()->location());
+-      mtype = Type::make_function_type(receiver,
+-				       (mtype->parameters() == NULL
+-					? NULL
+-					: mtype->parameters()->copy()),
+-				       (mtype->results() == NULL
+-					? NULL
+-					: mtype->results()->copy()),
+-				       mtype->location());
+-    }
+-  vals->push_back(Expression::make_type_descriptor(mtype, bloc));
++  bool want_pointer_receiver = !only_value_methods && m->is_value_method();
++  nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
++  vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
+ 
+   ++p;
+   go_assert(p->is_field_name("tfn"));
+@@ -3383,6 +3464,68 @@
+ // Get the backend representation for a function type.
+ 
+ Btype*
++Function_type::get_backend_fntype(Gogo* gogo)
++{
++  if (this->fnbtype_ == NULL)
++    {
++      Backend::Btyped_identifier breceiver;
++      if (this->receiver_ != NULL)
++        {
++          breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
++
++          // We always pass the address of the receiver parameter, in
++          // order to make interface calls work with unknown types.
++          Type* rtype = this->receiver_->type();
++          if (rtype->points_to() == NULL)
++            rtype = Type::make_pointer_type(rtype);
++          breceiver.btype = rtype->get_backend(gogo);
++          breceiver.location = this->receiver_->location();
++        }
++
++      std::vector<Backend::Btyped_identifier> bparameters;
++      if (this->parameters_ != NULL)
++        {
++          bparameters.resize(this->parameters_->size());
++          size_t i = 0;
++          for (Typed_identifier_list::const_iterator p =
++                   this->parameters_->begin(); p != this->parameters_->end();
++               ++p, ++i)
++	    {
++              bparameters[i].name = Gogo::unpack_hidden_name(p->name());
++              bparameters[i].btype = p->type()->get_backend(gogo);
++              bparameters[i].location = p->location();
++            }
++          go_assert(i == bparameters.size());
++        }
++
++      std::vector<Backend::Btyped_identifier> bresults;
++      if (this->results_ != NULL)
++        {
++          bresults.resize(this->results_->size());
++          size_t i = 0;
++          for (Typed_identifier_list::const_iterator p =
++                   this->results_->begin(); p != this->results_->end();
++               ++p, ++i)
++	    {
++              bresults[i].name = Gogo::unpack_hidden_name(p->name());
++              bresults[i].btype = p->type()->get_backend(gogo);
++              bresults[i].location = p->location();
++            }
++          go_assert(i == bresults.size());
++        }
++
++      this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
++                                                      bresults,
++                                                      this->location());
++
++    }
++
++  return this->fnbtype_;
++}
++
++// Get the backend representation for a Go function type.
++
++Btype*
+ Function_type::do_get_backend(Gogo* gogo)
+ {
+   // When we do anything with a function value other than call it, it
+@@ -3395,57 +3538,9 @@
+     gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
+   Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
+ 
+-  Backend::Btyped_identifier breceiver;
+-  if (this->receiver_ != NULL)
+-    {
+-      breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
+-
+-      // We always pass the address of the receiver parameter, in
+-      // order to make interface calls work with unknown types.
+-      Type* rtype = this->receiver_->type();
+-      if (rtype->points_to() == NULL)
+-	rtype = Type::make_pointer_type(rtype);
+-      breceiver.btype = rtype->get_backend(gogo);
+-      breceiver.location = this->receiver_->location();
+-    }
+-
+-  std::vector<Backend::Btyped_identifier> bparameters;
+-  if (this->parameters_ != NULL)
+-    {
+-      bparameters.resize(this->parameters_->size());
+-      size_t i = 0;
+-      for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
+-	   p != this->parameters_->end();
+-	   ++p, ++i)
+-	{
+-	  bparameters[i].name = Gogo::unpack_hidden_name(p->name());
+-	  bparameters[i].btype = p->type()->get_backend(gogo);
+-	  bparameters[i].location = p->location();
+-	}
+-      go_assert(i == bparameters.size());
+-    }
+-
+-  std::vector<Backend::Btyped_identifier> bresults;
+-  if (this->results_ != NULL)
+-    {
+-      bresults.resize(this->results_->size());
+-      size_t i = 0;
+-      for (Typed_identifier_list::const_iterator p = this->results_->begin();
+-	   p != this->results_->end();
+-	   ++p, ++i)
+-	{
+-	  bresults[i].name = Gogo::unpack_hidden_name(p->name());
+-	  bresults[i].btype = p->type()->get_backend(gogo);
+-	  bresults[i].location = p->location();
+-	}
+-      go_assert(i == bresults.size());
+-    }
+-
+-  Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
+-						 bresults, loc);
+   std::vector<Backend::Btyped_identifier> fields(1);
+   fields[0].name = "code";
+-  fields[0].btype = fntype;
++  fields[0].btype = this->get_backend_fntype(gogo);
+   fields[0].location = loc;
+   if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
+     return gogo->backend()->error_type();
+@@ -3821,6 +3916,32 @@
+   return ret;
+ }
+ 
++// Make a copy of a function type with the receiver as the first
++// parameter.
++
++Function_type*
++Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
++{
++  go_assert(this->is_method());
++  Typed_identifier_list* new_params = new Typed_identifier_list();
++  Type* rtype = this->receiver_->type();
++  if (want_pointer_receiver)
++    rtype = Type::make_pointer_type(rtype);
++  Typed_identifier receiver(this->receiver_->name(), rtype,
++			    this->receiver_->location());
++  new_params->push_back(receiver);
++  const Typed_identifier_list* orig_params = this->parameters_;
++  if (orig_params != NULL && !orig_params->empty())
++    {
++      for (Typed_identifier_list::const_iterator p = orig_params->begin();
++	   p != orig_params->end();
++	   ++p)
++	new_params->push_back(*p);
++    }
++  return Type::make_function_type(NULL, new_params, this->results_,
++				  this->location_);
++}
++
+ // Make a copy of a function type ignoring any receiver and adding a
+ // closure parameter.
+ 
+@@ -4195,7 +4316,8 @@
+ 
+       // This is a horrible hack caused by the fact that we don't pack
+       // the names of builtin types.  FIXME.
+-      if (nt != NULL
++      if (!this->is_imported_
++	  && nt != NULL
+ 	  && nt->is_builtin()
+ 	  && nt->name() == Gogo::unpack_hidden_name(name))
+ 	return true;
+@@ -4204,6 +4326,36 @@
+     }
+ }
+ 
++// Return whether this field is an unexported field named NAME.
++
++bool
++Struct_field::is_unexported_field_name(Gogo* gogo,
++				       const std::string& name) const
++{
++  const std::string& field_name(this->field_name());
++  if (Gogo::is_hidden_name(field_name)
++      && name == Gogo::unpack_hidden_name(field_name)
++      && gogo->pack_hidden_name(name, false) != field_name)
++    return true;
++
++  // Check for the name of a builtin type.  This is like the test in
++  // is_field_name, only there we return false if this->is_imported_,
++  // and here we return true.
++  if (this->is_imported_ && this->is_anonymous())
++    {
++      Type* t = this->typed_identifier_.type();
++      if (t->points_to() != NULL)
++	t = t->points_to();
++      Named_type* nt = t->named_type();
++      if (nt != NULL
++	  && nt->is_builtin()
++	  && nt->name() == Gogo::unpack_hidden_name(name))
++	return true;
++    }
++
++  return false;
++}
++
+ // Return whether this field is an embedded built-in type.
+ 
+ bool
+@@ -4264,12 +4416,7 @@
+        ++p)
+     {
+       Type* t = p->type();
+-      if (t->is_undefined())
+-	{
+-	  error_at(p->location(), "struct field type is incomplete");
+-	  p->set_type(Type::make_error_type());
+-	}
+-      else if (p->is_anonymous())
++      if (p->is_anonymous())
+ 	{
+ 	  if (t->named_type() != NULL && t->points_to() != NULL)
+ 	    {
+@@ -4641,13 +4788,8 @@
+       for (Struct_field_list::const_iterator pf = fields->begin();
+ 	   pf != fields->end();
+ 	   ++pf)
+-	{
+-	  const std::string& field_name(pf->field_name());
+-	  if (Gogo::is_hidden_name(field_name)
+-	      && name == Gogo::unpack_hidden_name(field_name)
+-	      && gogo->pack_hidden_name(name, false) != field_name)
+-	    return true;
+-	}
++	if (pf->is_unexported_field_name(gogo, name))
++	  return true;
+     }
+   return false;
+ }
+@@ -5250,6 +5392,7 @@
+ 	  Type* ftype = imp->read_type();
+ 
+ 	  Struct_field sf(Typed_identifier(name, ftype, imp->location()));
++	  sf.set_is_imported();
+ 
+ 	  if (imp->peek_char() == ' ')
+ 	    {
+@@ -9022,6 +9165,8 @@
+ 				      fntype->is_varargs(), location);
+ 	  gogo->finish_function(fntype->location());
+ 
++	  if (type->named_type() == NULL && stub->is_function())
++	    stub->func_value()->set_is_unnamed_type_stub_method();
+ 	  if (m->nointerface() && stub->is_function())
+ 	    stub->func_value()->set_nointerface();
+ 	}
+@@ -9289,7 +9434,9 @@
+       else
+ 	{
+ 	  bool is_unexported;
+-	  if (!Gogo::is_hidden_name(name))
++	  // The test for 'a' and 'z' is to handle builtin names,
++	  // which are not hidden.
++	  if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
+ 	    is_unexported = false;
+ 	  else
+ 	    {
+diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.h gcc-4.8.2/gcc/go/gofrontend/types.h
+--- gcc-4.8.2.orig/gcc/go/gofrontend/types.h	2013-09-18 21:54:08.000000000 +0000
++++ gcc-4.8.2/gcc/go/gofrontend/types.h	2014-03-30 20:21:40.687596554 +0000
+@@ -1138,6 +1138,13 @@
+ 			  Function_type* equal_fntype, Named_object** hash_fn,
+ 			  Named_object** equal_fn);
+ 
++  void
++  write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
++		   Function_type* equal_fntype);
++
++  void
++  write_named_equal(Gogo*, Named_type*);
++
+   // Build a composite literal for the uncommon type information.
+   Expression*
+   uncommon_type_constructor(Gogo*, Type* uncommon_type,
+@@ -1717,7 +1724,8 @@
+ 		Typed_identifier_list* results, Location location)
+     : Type(TYPE_FUNCTION),
+       receiver_(receiver), parameters_(parameters), results_(results),
+-      location_(location), is_varargs_(false), is_builtin_(false)
++      location_(location), is_varargs_(false), is_builtin_(false),
++      fnbtype_(NULL)
+   { }
+ 
+   // Get the receiver.
+@@ -1789,6 +1797,12 @@
+   Function_type*
+   copy_with_receiver(Type*) const;
+ 
++  // Return a copy of this type with the receiver treated as the first
++  // parameter.  If WANT_POINTER_RECEIVER is true, the receiver is
++  // forced to be a pointer.
++  Function_type*
++  copy_with_receiver_as_param(bool want_pointer_receiver) const;
++
+   // Return a copy of this type ignoring any receiver and using dummy
+   // names for all parameters.  This is used for thunks for method
+   // values.
+@@ -1798,6 +1812,11 @@
+   static Type*
+   make_function_type_descriptor_type();
+ 
++  // Return the backend representation of this function type. This is used
++  // as the real type of a backend function declaration or defintion.
++  Btype*
++  get_backend_fntype(Gogo*);
++
+  protected:
+   int
+   do_traverse(Traverse*);
+@@ -1851,6 +1870,9 @@
+   // Whether this is a special builtin function which can not simply
+   // be called.  This is used for len, cap, etc.
+   bool is_builtin_;
++  // The backend representation of this type for backend function
++  // declarations and definitions.
++  Btype* fnbtype_;
+ };
+ 
+ // The type of a pointer.
+@@ -1915,7 +1937,7 @@
+ {
+  public:
+   explicit Struct_field(const Typed_identifier& typed_identifier)
+-    : typed_identifier_(typed_identifier), tag_(NULL)
++    : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
+   { }
+ 
+   // The field name.
+@@ -1926,6 +1948,10 @@
+   bool
+   is_field_name(const std::string& name) const;
+ 
++  // Return whether this struct field is an unexported field named NAME.
++  bool
++  is_unexported_field_name(Gogo*, const std::string& name) const;
++
+   // Return whether this struct field is an embedded built-in type.
+   bool
+   is_embedded_builtin(Gogo*) const;
+@@ -1963,6 +1989,11 @@
+   set_tag(const std::string& tag)
+   { this->tag_ = new std::string(tag); }
+ 
++  // Record that this field is defined in an imported struct.
++  void
++  set_is_imported()
++  { this->is_imported_ = true; }
++
+   // Set the type.  This is only used in error cases.
+   void
+   set_type(Type* type)
+@@ -1973,6 +2004,8 @@
+   Typed_identifier typed_identifier_;
+   // The field tag.  This is NULL if the field has no tag.
+   std::string* tag_;
++  // Whether this field is defined in an imported struct.
++  bool is_imported_;
+ };
+ 
+ // A list of struct fields.
+diff -Naur gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c gcc-4.8.2/gcc/graphite-clast-to-gimple.c
+--- gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/graphite-clast-to-gimple.c	2014-03-30 20:28:17.513930767 +0000
+@@ -1170,8 +1170,11 @@
+   redirect_edge_succ_nodup (next_e, after);
+   set_immediate_dominator (CDI_DOMINATORS, next_e->dest, next_e->src);
+ 
++  isl_set *domain = isl_set_from_cloog_domain (stmt->domain);
++  int scheduling_dim = isl_set_n_dim (domain);
++
+   if (flag_loop_parallelize_all
+-      && loop_is_parallel_p (loop, bb_pbb_mapping, level))
++      && loop_is_parallel_p (loop, bb_pbb_mapping, scheduling_dim))
+     loop->can_be_parallel = true;
+ 
+   return last_e;
+diff -Naur gcc-4.8.2.orig/gcc/graphite-dependences.c gcc-4.8.2/gcc/graphite-dependences.c
+--- gcc-4.8.2.orig/gcc/graphite-dependences.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/graphite-dependences.c	2014-03-30 20:28:17.513930767 +0000
+@@ -297,7 +297,7 @@
+ 	      int depth)
+ {
+   bool res;
+-  int idx, i;
++  int i;
+   isl_space *space;
+   isl_map *lex, *x;
+   isl_constraint *ineq;
+@@ -312,13 +312,12 @@
+   space = isl_map_get_space (x);
+   ineq = isl_inequality_alloc (isl_local_space_from_space (space));
+ 
+-  idx = 2 * depth + 1;
+-  for (i = 0; i < idx; i++)
++  for (i = 0; i < depth - 1; i++)
+     lex = isl_map_equate (lex, isl_dim_in, i, isl_dim_out, i);
+ 
+   /* in + 1 <= out  */
+-  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, idx, 1);
+-  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, idx, -1);
++  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, depth - 1, 1);
++  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, depth - 1, -1);
+   ineq = isl_constraint_set_constant_si (ineq, -1);
+   lex = isl_map_add_constraint (lex, ineq);
+   x = isl_map_intersect (x, lex);
+diff -Naur gcc-4.8.2.orig/gcc/ifcvt.c gcc-4.8.2/gcc/ifcvt.c
+--- gcc-4.8.2.orig/gcc/ifcvt.c	2013-04-12 05:39:49.000000000 +0000
++++ gcc-4.8.2/gcc/ifcvt.c	2014-03-30 20:21:40.687596554 +0000
+@@ -115,7 +115,11 @@
+ 
+   while (1)
+     {
+-      if (CALL_P (insn) || NONJUMP_INSN_P (insn))
++      if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
++	  /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
++	     don't count them either and we need consistency.  */
++	  && GET_CODE (PATTERN (insn)) != USE
++	  && GET_CODE (PATTERN (insn)) != CLOBBER)
+ 	count++;
+ 
+       if (insn == BB_END (bb))
+@@ -505,7 +509,10 @@
+ 	  n_insns -= 2 * n_matching;
+ 	}
+ 
+-      if (then_start && else_start)
++      if (then_start
++	  && else_start
++	  && then_n_insns > n_matching
++	  && else_n_insns > n_matching)
+ 	{
+ 	  int longest_match = MIN (then_n_insns - n_matching,
+ 				   else_n_insns - n_matching);
+diff -Naur gcc-4.8.2.orig/gcc/ipa-cp.c gcc-4.8.2/gcc/ipa-cp.c
+--- gcc-4.8.2.orig/gcc/ipa-cp.c	2013-06-12 13:17:03.000000000 +0000
++++ gcc-4.8.2/gcc/ipa-cp.c	2014-03-30 20:21:40.687596554 +0000
+@@ -444,6 +444,9 @@
+     reason = "not a tree_versionable_function";
+   else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
+     reason = "insufficient body availability";
++  else if (!opt_for_fn (node->symbol.decl, optimize)
++	   || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
++    reason = "non-optimized function";
+ 
+   if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
+     fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
+@@ -3119,6 +3122,7 @@
+ 					  struct cgraph_node *node)
+ {
+   struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
++  struct ipa_node_params *orig_node_info;
+   struct ipa_agg_replacement_value *aggval;
+   int i, ec, count;
+ 
+@@ -3133,6 +3137,7 @@
+       if (aggval->index >= ec)
+ 	return false;
+ 
++  orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
+   if (orig_caller_info->ipcp_orig_node)
+     orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
+ 
+@@ -3150,7 +3155,7 @@
+       if (!interesting)
+ 	continue;
+ 
+-      plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
++      plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
+       if (plats->aggs_bottom)
+ 	return false;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/ipa-prop.c gcc-4.8.2/gcc/ipa-prop.c
+--- gcc-4.8.2.orig/gcc/ipa-prop.c	2013-06-24 12:57:52.000000000 +0000
++++ gcc-4.8.2/gcc/ipa-prop.c	2014-03-30 20:21:40.690929996 +0000
+@@ -623,16 +623,22 @@
+   if (parm_ainfo && parm_ainfo->parm_modified)
+     return false;
+ 
+-  gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
+-  ao_ref_init (&refd, parm_load);
+-  /* We can cache visited statements only when parm_ainfo is available and when
+-     we are looking at a naked load of the whole parameter.  */
+-  if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
+-    visited_stmts = NULL;
++  if (optimize)
++    {
++      gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
++      ao_ref_init (&refd, parm_load);
++      /* We can cache visited statements only when parm_ainfo is available and
++     when we are looking at a naked load of the whole parameter.  */
++      if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
++	visited_stmts = NULL;
++      else
++	visited_stmts = &parm_ainfo->parm_visited_statements;
++      walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
++			  visited_stmts);
++    }
+   else
+-    visited_stmts = &parm_ainfo->parm_visited_statements;
+-  walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
+-		      visited_stmts);
++    modified = true;
++
+   if (parm_ainfo && modified)
+     parm_ainfo->parm_modified = true;
+   return !modified;
+@@ -740,7 +746,7 @@
+ ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
+ 			  struct param_analysis_info *parms_ainfo, gimple stmt,
+ 			  tree op, int *index_p, HOST_WIDE_INT *offset_p,
+-			  bool *by_ref_p)
++			  HOST_WIDE_INT *size_p, bool *by_ref_p)
+ {
+   int index;
+   HOST_WIDE_INT size, max_size;
+@@ -758,6 +764,8 @@
+ 	{
+ 	  *index_p = index;
+ 	  *by_ref_p = false;
++	  if (size_p)
++	    *size_p = size;
+ 	  return true;
+ 	}
+       return false;
+@@ -800,6 +808,8 @@
+     {
+       *index_p = index;
+       *by_ref_p = true;
++      if (size_p)
++	*size_p = size;
+       return true;
+     }
+   return false;
+@@ -814,7 +824,7 @@
+ 			bool *by_ref_p)
+ {
+   return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
+-				   offset_p, by_ref_p);
++				   offset_p, NULL, by_ref_p);
+ }
+ 
+ /* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
+@@ -1051,7 +1061,8 @@
+     return;
+   parm = TREE_OPERAND (expr, 0);
+   index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
+-  gcc_assert (index >= 0);
++  if (index < 0)
++    return;
+ 
+   cond_bb = single_pred (assign_bb);
+   cond = last_stmt (cond_bb);
+@@ -1462,6 +1473,9 @@
+ {
+   struct cgraph_edge *cs;
+ 
++  if (!optimize)
++    return;
++
+   for (cs = node->callees; cs; cs = cs->next_callee)
+     {
+       struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
+@@ -1646,7 +1660,7 @@
+   if (gimple_assign_single_p (def)
+       && ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
+ 				   gimple_assign_rhs1 (def), &index, &offset,
+-				   &by_ref))
++				   NULL, &by_ref))
+     {
+       struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
+       cs->indirect_info->offset = offset;
+@@ -1847,8 +1861,7 @@
+    passed in DATA.  */
+ 
+ static bool
+-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
+-			     tree op, void *data)
++visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
+ {
+   struct ipa_node_params *info = (struct ipa_node_params *) data;
+ 
+@@ -2126,7 +2139,6 @@
+      we may create the first reference to the object in the unit.  */
+   if (!callee || callee->global.inlined_to)
+     {
+-      struct cgraph_node *first_clone = callee;
+ 
+       /* We are better to ensure we can refer to it.
+ 	 In the case of static functions we are out of luck, since we already	
+@@ -2142,31 +2154,7 @@
+ 		     xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
+ 	  return NULL;
+ 	}
+-
+-      /* Create symbol table node.  Even if inline clone exists, we can not take
+-	 it as a target of non-inlined call.  */
+-      callee = cgraph_create_node (target);
+-
+-      /* OK, we previously inlined the function, then removed the offline copy and
+-	 now we want it back for external call.  This can happen when devirtualizing
+-	 while inlining function called once that happens after extern inlined and
+-	 virtuals are already removed.  In this case introduce the external node
+-	 and make it available for call.  */
+-      if (first_clone)
+-	{
+-	  first_clone->clone_of = callee;
+-	  callee->clones = first_clone;
+-	  symtab_prevail_in_asm_name_hash ((symtab_node)callee);
+-	  symtab_insert_node_to_hashtable ((symtab_node)callee);
+-	  if (dump_file)
+-	    fprintf (dump_file, "ipa-prop: Introduced new external node "
+-		     "(%s/%i) and turned into root of the clone tree.\n",
+-		     xstrdup (cgraph_node_name (callee)), callee->uid);
+-	}
+-      else if (dump_file)
+-	fprintf (dump_file, "ipa-prop: Introduced new external node "
+-		 "(%s/%i).\n",
+-		 xstrdup (cgraph_node_name (callee)), callee->uid);
++      callee = cgraph_get_create_real_symbol_node (target);
+     }
+   ipa_check_create_node_params ();
+ 
+@@ -3902,7 +3890,7 @@
+ 	struct ipa_agg_replacement_value *v;
+ 	gimple stmt = gsi_stmt (gsi);
+ 	tree rhs, val, t;
+-	HOST_WIDE_INT offset;
++	HOST_WIDE_INT offset, size;
+ 	int index;
+ 	bool by_ref, vce;
+ 
+@@ -3929,13 +3917,15 @@
+ 	  continue;
+ 
+ 	if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
+-				       rhs, &index, &offset, &by_ref))
++				       rhs, &index, &offset, &size, &by_ref))
+ 	  continue;
+ 	for (v = aggval; v; v = v->next)
+ 	  if (v->index == index
+ 	      && v->offset == offset)
+ 	    break;
+-	if (!v || v->by_ref != by_ref)
++	if (!v
++	    || v->by_ref != by_ref
++	    || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
+ 	  continue;
+ 
+ 	gcc_checking_assert (is_gimple_ip_invariant (v->value));
+diff -Naur gcc-4.8.2.orig/gcc/ipa-pure-const.c gcc-4.8.2/gcc/ipa-pure-const.c
+--- gcc-4.8.2.orig/gcc/ipa-pure-const.c	2013-02-27 21:35:53.000000000 +0000
++++ gcc-4.8.2/gcc/ipa-pure-const.c	2014-03-30 20:21:40.690929996 +0000
+@@ -588,7 +588,7 @@
+ /* Wrapper around check_decl for loads in local more.  */
+ 
+ static bool
+-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++check_load (gimple, tree op, tree, void *data)
+ {
+   if (DECL_P (op))
+     check_decl ((funct_state)data, op, false, false);
+@@ -600,7 +600,7 @@
+ /* Wrapper around check_decl for stores in local more.  */
+ 
+ static bool
+-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++check_store (gimple, tree op, tree, void *data)
+ {
+   if (DECL_P (op))
+     check_decl ((funct_state)data, op, true, false);
+@@ -612,7 +612,7 @@
+ /* Wrapper around check_decl for loads in ipa mode.  */
+ 
+ static bool
+-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++check_ipa_load (gimple, tree op, tree, void *data)
+ {
+   if (DECL_P (op))
+     check_decl ((funct_state)data, op, false, true);
+@@ -624,7 +624,7 @@
+ /* Wrapper around check_decl for stores in ipa mode.  */
+ 
+ static bool
+-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
++check_ipa_store (gimple, tree op, tree, void *data)
+ {
+   if (DECL_P (op))
+     check_decl ((funct_state)data, op, true, true);
+diff -Naur gcc-4.8.2.orig/gcc/ipa-split.c gcc-4.8.2/gcc/ipa-split.c
+--- gcc-4.8.2.orig/gcc/ipa-split.c	2013-03-04 17:41:32.000000000 +0000
++++ gcc-4.8.2/gcc/ipa-split.c	2014-03-30 20:21:40.690929996 +0000
+@@ -136,7 +136,7 @@
+    variable, check it if it is present in bitmap passed via DATA.  */
+ 
+ static bool
+-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
++test_nonssa_use (gimple, tree t, tree, void *data)
+ {
+   t = get_base_address (t);
+ 
+@@ -229,7 +229,7 @@
+ 	    }
+ 	  if (gimple_code (stmt) == GIMPLE_LABEL
+ 	      && test_nonssa_use (stmt, gimple_label_label (stmt),
+-				  non_ssa_vars))
++				  NULL_TREE, non_ssa_vars))
+ 	  {
+ 	    ok = false;
+ 	    goto done;
+@@ -258,7 +258,7 @@
+ 	      if (virtual_operand_p (gimple_phi_result (stmt)))
+ 		continue;
+ 	      if (TREE_CODE (op) != SSA_NAME
+-		  && test_nonssa_use (stmt, op, non_ssa_vars))
++		  && test_nonssa_use (stmt, op, op, non_ssa_vars))
+ 		{
+ 		  ok = false;
+ 		  goto done;
+@@ -670,7 +670,7 @@
+    Return true when access to T prevents splitting the function.  */
+ 
+ static bool
+-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
++mark_nonssa_use (gimple, tree t, tree, void *data)
+ {
+   t = get_base_address (t);
+ 
+@@ -830,7 +830,7 @@
+ 	    if (TREE_CODE (op) == SSA_NAME)
+ 	      bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
+ 	    else
+-	      can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
++	      can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
+ 	  }
+       }
+   return can_split;
+diff -Naur gcc-4.8.2.orig/gcc/ipa.c gcc-4.8.2/gcc/ipa.c
+--- gcc-4.8.2.orig/gcc/ipa.c	2013-01-17 11:43:14.000000000 +0000
++++ gcc-4.8.2/gcc/ipa.c	2014-03-30 20:21:40.687596554 +0000
+@@ -359,6 +359,8 @@
+ 	    {
+ 	      if (file)
+ 		fprintf (file, " %s", cgraph_node_name (node));
++	      node->alias = false;
++	      node->thunk.thunk_p = false;
+ 	      cgraph_node_remove_callees (node);
+ 	      ipa_remove_all_references (&node->symbol.ref_list);
+ 	      changed = true;
+diff -Naur gcc-4.8.2.orig/gcc/ira.c gcc-4.8.2/gcc/ira.c
+--- gcc-4.8.2.orig/gcc/ira.c	2013-06-20 21:15:52.000000000 +0000
++++ gcc-4.8.2/gcc/ira.c	2014-03-30 20:21:40.690929996 +0000
+@@ -4742,6 +4742,18 @@
+   if (need_dce && optimize)
+     run_fast_dce ();
+ 
++  /* Diagnose uses of the hard frame pointer when it is used as a global
++     register.  Often we can get away with letting the user appropriate
++     the frame pointer, but we should let them know when code generation
++     makes that impossible.  */
++  if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
++    {
++      tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
++      error_at (DECL_SOURCE_LOCATION (current_function_decl),
++                "frame pointer required, but reserved");
++      inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
++    }
++
+   timevar_pop (TV_IRA);
+ }
+ 
+
+diff -Naur gcc-4.8.2.orig/gcc/loop-iv.c gcc-4.8.2/gcc/loop-iv.c
+--- gcc-4.8.2.orig/gcc/loop-iv.c	2013-04-23 19:36:20.000000000 +0000
++++ gcc-4.8.2/gcc/loop-iv.c	2014-03-30 20:21:40.690929996 +0000
+@@ -425,7 +425,9 @@
+       && !iv->first_special)
+     {
+       rtx val = get_iv_value (iv, const0_rtx);
+-      val = lowpart_subreg (mode, val, iv->extend_mode);
++      val = lowpart_subreg (mode, val,
++			    iv->extend == IV_UNKNOWN_EXTEND
++			    ? iv->mode : iv->extend_mode);
+ 
+       iv->base = val;
+       iv->extend = IV_UNKNOWN_EXTEND;
+@@ -465,8 +467,14 @@
+       && !iv->first_special)
+     {
+       rtx val = get_iv_value (iv, const0_rtx);
++      if (iv->extend_mode != iv->mode
++	  && iv->extend != IV_UNKNOWN_EXTEND
++	  && iv->extend != extend)
++	val = lowpart_subreg (iv->mode, val, iv->extend_mode);
+       val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
+-				val, iv->extend_mode);
++				val,
++				iv->extend == extend
++				? iv->extend_mode : iv->mode);
+       iv->base = val;
+       iv->extend = IV_UNKNOWN_EXTEND;
+       iv->mode = iv->extend_mode = mode;
+diff -Naur gcc-4.8.2.orig/gcc/loop-unswitch.c gcc-4.8.2/gcc/loop-unswitch.c
+--- gcc-4.8.2.orig/gcc/loop-unswitch.c	2013-02-13 11:42:04.000000000 +0000
++++ gcc-4.8.2/gcc/loop-unswitch.c	2014-03-30 20:21:40.690929996 +0000
+@@ -191,6 +191,7 @@
+   if (!test)
+     return NULL_RTX;
+ 
++  mode = VOIDmode;
+   for (i = 0; i < 2; i++)
+     {
+       op[i] = XEXP (test, i);
+@@ -205,11 +206,15 @@
+ 	return NULL_RTX;
+ 
+       op[i] = get_iv_value (&iv, const0_rtx);
++      if (iv.extend != IV_UNKNOWN_EXTEND
++	  && iv.mode != iv.extend_mode)
++	op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
++      if (mode == VOIDmode)
++	mode = iv.mode;
++      else
++	gcc_assert (mode == iv.mode);
+     }
+ 
+-  mode = GET_MODE (op[0]);
+-  if (mode == VOIDmode)
+-    mode = GET_MODE (op[1]);
+   if (GET_MODE_CLASS (mode) == MODE_CC)
+     {
+       if (at != BB_END (bb))
+diff -Naur gcc-4.8.2.orig/gcc/lra-coalesce.c gcc-4.8.2/gcc/lra-coalesce.c
+--- gcc-4.8.2.orig/gcc/lra-coalesce.c	2013-05-02 17:46:58.000000000 +0000
++++ gcc-4.8.2/gcc/lra-coalesce.c	2014-03-30 20:21:40.694263438 +0000
+@@ -221,9 +221,12 @@
+   basic_block bb;
+   rtx mv, set, insn, next, *sorted_moves;
+   int i, mv_num, sregno, dregno;
++  unsigned int regno;
+   int coalesced_moves;
+   int max_regno = max_reg_num ();
+   bitmap_head involved_insns_bitmap;
++  bitmap_head result_pseudo_vals_bitmap;
++  bitmap_iterator bi;
+ 
+   timevar_push (TV_LRA_COALESCE);
+ 
+@@ -318,6 +321,34 @@
+ 	      }
+ 	  }
+     }
++  /* If we have situation after inheritance pass:
++
++     r1 <- ...  insn originally setting p1
++     i1 <- r1   setting inheritance i1 from reload r1
++       ...
++     ... <- ... p2 ... dead p2
++     ..
++     p1 <- i1
++     r2 <- i1
++     ...<- ... r2 ...
++
++     And we are coalescing p1 and p2 using p1.  In this case i1 and p1
++     should have different values, otherwise they can get the same
++     hard reg and this is wrong for insn using p2 before coalescing.
++     So invalidate such inheritance pseudo values.  */
++  bitmap_initialize (&result_pseudo_vals_bitmap, &reg_obstack);
++  EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
++    bitmap_set_bit (&result_pseudo_vals_bitmap,
++		    lra_reg_info[first_coalesced_pseudo[regno]].val);
++  EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
++    if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
++      {
++	lra_set_regno_unique_value (regno);
++	if (lra_dump_file != NULL)
++	  fprintf (lra_dump_file,
++		   "	 Make unique value for inheritance r%d\n", regno);
++      }
++  bitmap_clear (&result_pseudo_vals_bitmap);
+   bitmap_clear (&used_pseudos_bitmap);
+   bitmap_clear (&involved_insns_bitmap);
+   bitmap_clear (&coalesced_pseudos_bitmap);
+diff -Naur gcc-4.8.2.orig/gcc/mode-switching.c gcc-4.8.2/gcc/mode-switching.c
+--- gcc-4.8.2.orig/gcc/mode-switching.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/mode-switching.c	2014-03-30 20:21:40.694263438 +0000
+@@ -568,12 +568,15 @@
+ 
+ 	  info[bb->index].computing = last_mode;
+ 	  /* Check for blocks without ANY mode requirements.
+-	     N.B. because of MODE_AFTER, last_mode might still be different
+-	     from no_mode.  */
++	     N.B. because of MODE_AFTER, last_mode might still
++	     be different from no_mode, in which case we need to
++	     mark the block as nontransparent.  */
+ 	  if (!any_set_required)
+ 	    {
+ 	      ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
+ 	      add_seginfo (info + bb->index, ptr);
++	      if (last_mode != no_mode)
++		bitmap_clear_bit (transp[bb->index], j);
+ 	    }
+ 	}
+ #if defined (MODE_ENTRY) && defined (MODE_EXIT)
+diff -Naur gcc-4.8.2.orig/gcc/optabs.c gcc-4.8.2/gcc/optabs.c
+--- gcc-4.8.2.orig/gcc/optabs.c	2013-03-09 07:54:02.000000000 +0000
++++ gcc-4.8.2/gcc/optabs.c	2014-03-30 20:21:40.694263438 +0000
+@@ -4558,8 +4558,11 @@
+   if (!COMPARISON_P (comparison))
+     return NULL_RTX;
+ 
+-  do_pending_stack_adjust ();
++  /* State variables we need to save and restore if cmove can't be used.  */
++  int save_pending_stack_adjust = pending_stack_adjust;
++  int save_stack_pointer_delta = stack_pointer_delta;
+   last = get_last_insn ();
++  do_pending_stack_adjust ();
+   prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
+ 		    GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
+ 		    &comparison, &cmode);
+@@ -4579,6 +4582,8 @@
+ 	}
+     }
+   delete_insns_since (last);
++  pending_stack_adjust = save_pending_stack_adjust;
++  stack_pointer_delta = save_stack_pointer_delta;
+   return NULL_RTX;
+ }
+ 
+@@ -6233,7 +6238,7 @@
+ 
+   /* If the optabs changed, record it.  */
+   if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
+-    TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
++    TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
+   else
+     {
+       TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
+@@ -7035,8 +7040,7 @@
+ 
+       create_output_operand (&ops[0], target, mode);
+       create_fixed_operand (&ops[1], mem);
+-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
+-      create_convert_operand_to (&ops[2], val, mode, true);
++      create_input_operand (&ops[2], val, mode);
+       create_integer_operand (&ops[3], model);
+       if (maybe_expand_insn (icode, 4, ops))
+ 	return ops[0].value;
+@@ -7075,8 +7079,7 @@
+       struct expand_operand ops[3];
+       create_output_operand (&ops[0], target, mode);
+       create_fixed_operand (&ops[1], mem);
+-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
+-      create_convert_operand_to (&ops[2], val, mode, true);
++      create_input_operand (&ops[2], val, mode);
+       if (maybe_expand_insn (icode, 3, ops))
+ 	return ops[0].value;
+     }
+@@ -7118,8 +7121,6 @@
+     {
+       if (!target || !register_operand (target, mode))
+ 	target = gen_reg_rtx (mode);
+-      if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
+-	val = convert_modes (mode, GET_MODE (val), val, 1);
+       if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
+ 	return target;
+     }
+@@ -7331,8 +7332,8 @@
+       create_output_operand (&ops[0], target_bool, bool_mode);
+       create_output_operand (&ops[1], target_oval, mode);
+       create_fixed_operand (&ops[2], mem);
+-      create_convert_operand_to (&ops[3], expected, mode, true);
+-      create_convert_operand_to (&ops[4], desired, mode, true);
++      create_input_operand (&ops[3], expected, mode);
++      create_input_operand (&ops[4], desired, mode);
+       create_integer_operand (&ops[5], is_weak);
+       create_integer_operand (&ops[6], succ_model);
+       create_integer_operand (&ops[7], fail_model);
+@@ -7353,8 +7354,8 @@
+ 
+       create_output_operand (&ops[0], target_oval, mode);
+       create_fixed_operand (&ops[1], mem);
+-      create_convert_operand_to (&ops[2], expected, mode, true);
+-      create_convert_operand_to (&ops[3], desired, mode, true);
++      create_input_operand (&ops[2], expected, mode);
++      create_input_operand (&ops[3], desired, mode);
+       if (!maybe_expand_insn (icode, 4, ops))
+ 	return false;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/params.def gcc-4.8.2/gcc/params.def
+--- gcc-4.8.2.orig/gcc/params.def	2013-04-11 16:22:38.000000000 +0000
++++ gcc-4.8.2/gcc/params.def	2014-03-30 20:21:40.694263438 +0000
+@@ -1014,6 +1014,12 @@
+ 	  "strength reduction",
+ 	  50, 1, 999999)
+ 
++DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
++	  "uninit-control-dep-attempts",
++	  "Maximum number of nested calls to search for control dependencies "
++	  "during uninitialized variable analysis",
++	  1000, 1, 0)
++
+ /*
+ Local variables:
+ mode:c
+diff -Naur gcc-4.8.2.orig/gcc/passes.c gcc-4.8.2/gcc/passes.c
+--- gcc-4.8.2.orig/gcc/passes.c	2013-09-11 12:23:15.000000000 +0000
++++ gcc-4.8.2/gcc/passes.c	2014-03-30 20:21:40.694263438 +0000
+@@ -1398,6 +1398,7 @@
+       /* After CCP we rewrite no longer addressed locals into SSA
+ 	 form if possible.  */
+       NEXT_PASS (pass_forwprop);
++      NEXT_PASS (pass_object_sizes);
+       /* pass_build_alias is a dummy pass that ensures that we
+ 	 execute TODO_rebuild_alias at this point.  */
+       NEXT_PASS (pass_build_alias);
+@@ -1435,7 +1436,6 @@
+       NEXT_PASS (pass_dce);
+       NEXT_PASS (pass_forwprop);
+       NEXT_PASS (pass_phiopt);
+-      NEXT_PASS (pass_object_sizes);
+       NEXT_PASS (pass_strlen);
+       NEXT_PASS (pass_ccp);
+       /* After CCP we rewrite no longer addressed locals into SSA
+diff -Naur gcc-4.8.2.orig/gcc/print-rtl.c gcc-4.8.2/gcc/print-rtl.c
+--- gcc-4.8.2.orig/gcc/print-rtl.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/print-rtl.c	2014-03-30 20:21:40.694263438 +0000
+@@ -582,6 +582,8 @@
+ 
+       if (MEM_EXPR (in_rtx))
+ 	print_mem_expr (outfile, MEM_EXPR (in_rtx));
++      else
++	fputc (' ', outfile);
+ 
+       if (MEM_OFFSET_KNOWN_P (in_rtx))
+ 	fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
+diff -Naur gcc-4.8.2.orig/gcc/recog.c gcc-4.8.2/gcc/recog.c
+--- gcc-4.8.2.orig/gcc/recog.c	2013-08-05 20:24:39.000000000 +0000
++++ gcc-4.8.2/gcc/recog.c	2014-03-30 20:21:40.694263438 +0000
+@@ -3061,6 +3061,9 @@
+   return 1;
+ }
+ 
++/* Regno offset to be used in the register search.  */
++static int search_ofs;
++
+ /* Try to find a hard register of mode MODE, matching the register class in
+    CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
+    remains available until the end of LAST_INSN.  LAST_INSN may be NULL_RTX,
+@@ -3076,7 +3079,6 @@
+ peep2_find_free_register (int from, int to, const char *class_str,
+ 			  enum machine_mode mode, HARD_REG_SET *reg_set)
+ {
+-  static int search_ofs;
+   enum reg_class cl;
+   HARD_REG_SET live;
+   df_ref *def_rec;
+@@ -3541,6 +3543,7 @@
+   /* Initialize the regsets we're going to use.  */
+   for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
+     peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
++  search_ofs = 0;
+   live = BITMAP_ALLOC (&reg_obstack);
+ 
+   FOR_EACH_BB_REVERSE (bb)
+diff -Naur gcc-4.8.2.orig/gcc/regcprop.c gcc-4.8.2/gcc/regcprop.c
+--- gcc-4.8.2.orig/gcc/regcprop.c	2013-04-25 21:50:26.000000000 +0000
++++ gcc-4.8.2/gcc/regcprop.c	2014-03-30 20:21:40.697596881 +0000
+@@ -747,6 +747,7 @@
+       int n_ops, i, alt, predicated;
+       bool is_asm, any_replacements;
+       rtx set;
++      rtx link;
+       bool replaced[MAX_RECOG_OPERANDS];
+       bool changed = false;
+       struct kill_set_value_data ksvd;
+@@ -815,6 +816,23 @@
+ 	if (recog_op_alt[i][alt].earlyclobber)
+ 	  kill_value (recog_data.operand[i], vd);
+ 
++      /* If we have dead sets in the insn, then we need to note these as we
++	 would clobbers.  */
++      for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
++	{
++	  if (REG_NOTE_KIND (link) == REG_UNUSED)
++	    {
++	      kill_value (XEXP (link, 0), vd);
++	      /* Furthermore, if the insn looked like a single-set,
++		 but the dead store kills the source value of that
++		 set, then we can no-longer use the plain move
++		 special case below.  */
++	      if (set
++		  && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
++		set = NULL;
++	    }
++	}
++
+       /* Special-case plain move instructions, since we may well
+ 	 be able to do the move from a different register class.  */
+       if (set && REG_P (SET_SRC (set)))
+diff -Naur gcc-4.8.2.orig/gcc/reginfo.c gcc-4.8.2/gcc/reginfo.c
+--- gcc-4.8.2.orig/gcc/reginfo.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/reginfo.c	2014-03-30 20:21:40.697596881 +0000
+@@ -85,7 +85,7 @@
+ char global_regs[FIRST_PSEUDO_REGISTER];
+ 
+ /* Declaration for the global register. */
+-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
++tree global_regs_decl[FIRST_PSEUDO_REGISTER];
+ 
+ /* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
+    in dataflow more conveniently.  */
+@@ -620,40 +620,35 @@
+        mode = GET_MODE_WIDER_MODE (mode))
+     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
+ 	&& HARD_REGNO_MODE_OK (regno, mode)
+-	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
++	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
++	&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
+       found_mode = mode;
+ 
+-  if (found_mode != VOIDmode)
+-    return found_mode;
+-
+   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
+        mode != VOIDmode;
+        mode = GET_MODE_WIDER_MODE (mode))
+     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
+ 	&& HARD_REGNO_MODE_OK (regno, mode)
+-	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
++	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
++	&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
+       found_mode = mode;
+ 
+-  if (found_mode != VOIDmode)
+-    return found_mode;
+-
+   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
+        mode != VOIDmode;
+        mode = GET_MODE_WIDER_MODE (mode))
+     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
+ 	&& HARD_REGNO_MODE_OK (regno, mode)
+-	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
++	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
++	&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
+       found_mode = mode;
+ 
+-  if (found_mode != VOIDmode)
+-    return found_mode;
+-
+   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
+        mode != VOIDmode;
+        mode = GET_MODE_WIDER_MODE (mode))
+     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
+ 	&& HARD_REGNO_MODE_OK (regno, mode)
+-	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
++	&& (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
++	&& GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
+       found_mode = mode;
+ 
+   if (found_mode != VOIDmode)
+diff -Naur gcc-4.8.2.orig/gcc/reorg.c gcc-4.8.2/gcc/reorg.c
+--- gcc-4.8.2.orig/gcc/reorg.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/reorg.c	2014-03-30 20:21:40.697596881 +0000
+@@ -1105,6 +1105,7 @@
+   int used_annul = 0;
+   int i;
+   struct resources cc_set;
++  bool *redundant;
+ 
+   /* We can't do anything if there are more delay slots in SEQ than we
+      can handle, or if we don't know that it will be a taken branch.
+@@ -1145,6 +1146,7 @@
+     return delay_list;
+ #endif
+ 
++  redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
+   for (i = 1; i < XVECLEN (seq, 0); i++)
+     {
+       rtx trial = XVECEXP (seq, 0, i);
+@@ -1166,7 +1168,8 @@
+ 
+       /* If this insn was already done (usually in a previous delay slot),
+ 	 pretend we put it in our delay slot.  */
+-      if (redundant_insn (trial, insn, new_delay_list))
++      redundant[i] = redundant_insn (trial, insn, new_delay_list);
++      if (redundant[i])
+ 	continue;
+ 
+       /* We will end up re-vectoring this branch, so compute flags
+@@ -1199,6 +1202,12 @@
+ 	return delay_list;
+     }
+ 
++  /* Record the effect of the instructions that were redundant and which
++     we therefore decided not to copy.  */
++  for (i = 1; i < XVECLEN (seq, 0); i++)
++    if (redundant[i])
++      update_block (XVECEXP (seq, 0, i), insn);
++
+   /* Show the place to which we will be branching.  */
+   *pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
+ 
+@@ -1262,6 +1271,7 @@
+       /* If this insn was already done, we don't need it.  */
+       if (redundant_insn (trial, insn, delay_list))
+ 	{
++	  update_block (trial, insn);
+ 	  delete_from_delay_slot (trial);
+ 	  continue;
+ 	}
+@@ -3266,6 +3276,7 @@
+ 	 to reprocess this insn.  */
+       if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
+ 	{
++	  update_block (XVECEXP (pat, 0, 1), insn);
+ 	  delete_from_delay_slot (XVECEXP (pat, 0, 1));
+ 	  next = prev_active_insn (next);
+ 	  continue;
+@@ -3385,6 +3396,7 @@
+ 	      && redirect_with_delay_slots_safe_p (delay_insn, target_label,
+ 						   insn))
+ 	    {
++	      update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
+ 	      reorg_redirect_jump (delay_insn, target_label);
+ 	      next = insn;
+ 	      continue;
+diff -Naur gcc-4.8.2.orig/gcc/rtl.h gcc-4.8.2/gcc/rtl.h
+--- gcc-4.8.2.orig/gcc/rtl.h	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/rtl.h	2014-03-30 20:21:40.697596881 +0000
+@@ -2705,6 +2705,8 @@
+ 				  const_rtx, rtx);
+ extern int read_dependence (const_rtx, const_rtx);
+ extern int anti_dependence (const_rtx, const_rtx);
++extern int canon_anti_dependence (const_rtx, bool,
++	    			  	        const_rtx, enum machine_mode, rtx);
+ extern int output_dependence (const_rtx, const_rtx);
+ extern int may_alias_p (const_rtx, const_rtx);
+ extern void init_alias_target (void);
+@@ -2789,6 +2791,8 @@
+ #define fatal_insn_not_found(insn) \
+ 	_fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
+ 
++/* reginfo.c */
++extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
+ 
+ 
+ #endif /* ! GCC_RTL_H */
+diff -Naur gcc-4.8.2.orig/gcc/rtlanal.c gcc-4.8.2/gcc/rtlanal.c
+--- gcc-4.8.2.orig/gcc/rtlanal.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/rtlanal.c	2014-03-30 20:21:40.697596881 +0000
+@@ -224,10 +224,10 @@
+   return 0;
+ }
+ 
+-/* Return nonzero if the use of X as an address in a MEM can cause a trap.
+-   MODE is the mode of the MEM (not that of X) and UNALIGNED_MEMS controls
+-   whether nonzero is returned for unaligned memory accesses on strict
+-   alignment machines.  */
++/* Return nonzero if the use of X+OFFSET as an address in a MEM with SIZE
++   bytes can cause a trap.  MODE is the mode of the MEM (not that of X) and
++   UNALIGNED_MEMS controls whether nonzero is returned for unaligned memory
++   references on strict alignment machines.  */
+ 
+ static int
+ rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size,
+@@ -235,11 +235,12 @@
+ {
+   enum rtx_code code = GET_CODE (x);
+ 
+-  if (STRICT_ALIGNMENT
+-      && unaligned_mems
+-      && GET_MODE_SIZE (mode) != 0)
++  /* The offset must be a multiple of the mode size if we are considering
++     unaligned memory references on strict alignment machines.  */
++  if (STRICT_ALIGNMENT && unaligned_mems && GET_MODE_SIZE (mode) != 0)
+     {
+       HOST_WIDE_INT actual_offset = offset;
++
+ #ifdef SPARC_STACK_BOUNDARY_HACK
+       /* ??? The SPARC port may claim a STACK_BOUNDARY higher than
+ 	     the real alignment of %sp.  However, when it does this, the
+@@ -298,8 +299,27 @@
+       return 0;
+ 
+     case REG:
+-      /* As in rtx_varies_p, we have to use the actual rtx, not reg number.  */
+-      if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx
++      /* Stack references are assumed not to trap, but we need to deal with
++	 nonsensical offsets.  */
++      if (x == frame_pointer_rtx)
++	{
++	  HOST_WIDE_INT adj_offset = offset - STARTING_FRAME_OFFSET;
++	  if (size == 0)
++	    size = GET_MODE_SIZE (mode);
++	  if (FRAME_GROWS_DOWNWARD)
++	    {
++	      if (adj_offset < frame_offset || adj_offset + size - 1 >= 0)
++		return 1;
++	    }
++	  else
++	    {
++	      if (adj_offset < 0 || adj_offset + size - 1 >= frame_offset)
++		return 1;
++	    }
++	  return 0;
++	}
++      /* ??? Need to add a similar guard for nonsensical offsets.  */
++      if (x == hard_frame_pointer_rtx
+ 	  || x == stack_pointer_rtx
+ 	  /* The arg pointer varies if it is not a fixed register.  */
+ 	  || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
+@@ -320,9 +340,7 @@
+       if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1)))
+ 	return 0;
+ 
+-      /* - or it is an address that can't trap plus a constant integer,
+-	   with the proper remainder modulo the mode size if we are
+-	   considering unaligned memory references.  */
++      /* - or it is an address that can't trap plus a constant integer.  */
+       if (CONST_INT_P (XEXP (x, 1))
+ 	  && !rtx_addr_can_trap_p_1 (XEXP (x, 0), offset + INTVAL (XEXP (x, 1)),
+ 				     size, mode, unaligned_mems))
+diff -Naur gcc-4.8.2.orig/gcc/sdbout.c gcc-4.8.2/gcc/sdbout.c
+--- gcc-4.8.2.orig/gcc/sdbout.c	2013-03-05 17:59:38.000000000 +0000
++++ gcc-4.8.2/gcc/sdbout.c	2014-03-30 20:21:40.697596881 +0000
+@@ -1226,7 +1226,10 @@
+ sdbout_parms (tree parms)
+ {
+   for (; parms; parms = TREE_CHAIN (parms))
+-    if (DECL_NAME (parms))
++    if (DECL_NAME (parms)
++	&& TREE_TYPE (parms) != error_mark_node
++	&& DECL_RTL_SET_P (parms)
++	&& DECL_INCOMING_RTL (parms))
+       {
+ 	int current_sym_value = 0;
+ 	const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
+@@ -1358,7 +1361,10 @@
+ sdbout_reg_parms (tree parms)
+ {
+   for (; parms; parms = TREE_CHAIN (parms))
+-    if (DECL_NAME (parms))
++    if (DECL_NAME (parms)
++        && TREE_TYPE (parms) != error_mark_node
++        && DECL_RTL_SET_P (parms)
++        && DECL_INCOMING_RTL (parms))
+       {
+ 	const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
+ 
+diff -Naur gcc-4.8.2.orig/gcc/sel-sched.c gcc-4.8.2/gcc/sel-sched.c
+--- gcc-4.8.2.orig/gcc/sel-sched.c	2013-02-19 13:50:50.000000000 +0000
++++ gcc-4.8.2/gcc/sel-sched.c	2014-03-30 20:21:40.697596881 +0000
+@@ -1253,7 +1253,7 @@
+ 
+       if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
+         add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs, 
+-			     Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
++			     Pmode, HARD_FRAME_POINTER_REGNUM);
+     }
+ 
+ #ifdef STACK_REGS
+diff -Naur gcc-4.8.2.orig/gcc/simplify-rtx.c gcc-4.8.2/gcc/simplify-rtx.c
+--- gcc-4.8.2.orig/gcc/simplify-rtx.c	2013-07-08 08:15:01.000000000 +0000
++++ gcc-4.8.2/gcc/simplify-rtx.c	2014-03-30 20:21:40.700930325 +0000
+@@ -639,11 +639,16 @@
+ 				   XEXP (op, 0), origmode);
+     }
+ 
+-  /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
+-     to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))).  */
+-  if (GET_CODE (op) == PLUS
+-      || GET_CODE (op) == MINUS
+-      || GET_CODE (op) == MULT)
++  /* If the machine can perform operations in the truncated mode, distribute
++     the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
++     (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))).  */
++  if (1
++#ifdef WORD_REGISTER_OPERATIONS
++      && precision >= BITS_PER_WORD
++#endif
++      && (GET_CODE (op) == PLUS
++	  || GET_CODE (op) == MINUS
++	  || GET_CODE (op) == MULT))
+     {
+       rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
+       if (op0)
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/convert-vec-1.c gcc-4.8.2/gcc/testsuite/c-c++-common/convert-vec-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/convert-vec-1.c	2012-10-09 06:18:29.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/convert-vec-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -1,3 +1,4 @@
+ /* { dg-do compile } */
++/* { dg-prune-output "changes the ABI" } */
+ typedef float v2sf __attribute__ ((vector_size (8)));
+ v2sf sub (void) { return (v2sf) 0.0; } /* { dg-error "can't convert" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr58844-1.c gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr58844-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr58844-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr58844-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,8 @@
++/* PR preprocessor/58844 */
++/* { dg-do compile } */
++/* { dg-options "-ftrack-macro-expansion=0" } */
++
++#define A x######x
++int A = 1;
++#define A x######x	/* { dg-message "previous definition" } */
++#define A x##x		/* { dg-warning "redefined" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr58844-2.c gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr58844-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr58844-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr58844-2.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,8 @@
++/* PR preprocessor/58844 */
++/* { dg-do compile } */
++/* { dg-options "-ftrack-macro-expansion=2" } */
++
++#define A x######x
++int A = 1;
++#define A x######x	/* { dg-message "previous definition" } */
++#define A x##x		/* { dg-warning "redefined" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400-1.h gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400-1.h
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400-1.h	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400-1.h	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,3 @@
++??=ifndef PR60400_1_H
++??=define PR60400_1_H
++??=endif
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400-2.h gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400-2.h
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400-2.h	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400-2.h	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,4 @@
++??=ifndef PR60400_2_H
++??=define PR60400_2_H
++??=include "pr60400-1.h"
++??=endif
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400.c gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/cpp/pr60400.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/cpp/pr60400.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,13 @@
++/* PR preprocessor/60400 */
++/* { dg-do compile } */
++/* { dg-options "-trigraphs -Wtrigraphs" } */
++
++??=include "pr60400-1.h"
++??=include "pr60400-2.h"
++
++/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
++/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
++/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
++/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
++/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
++/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/fold-divmul-1.c gcc-4.8.2/gcc/testsuite/c-c++-common/fold-divmul-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/fold-divmul-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/fold-divmul-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-fdump-tree-original" } */
++
++int *
++fx (int *b, int *e)
++{
++  return b + (e - b);
++}
++
++/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
++/* { dg-final { cleanup-tree-dump "original" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/gomp/pr58809.c gcc-4.8.2/gcc/testsuite/c-c++-common/gomp/pr58809.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/gomp/pr58809.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/gomp/pr58809.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,31 @@
++/* PR middle-end/58809 */
++/* { dg-do compile } */
++/* { dg-options "-fopenmp" } */
++
++_Complex int j;
++_Complex double d;
++
++void
++foo (void)
++{
++  #pragma omp parallel reduction (&:j)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (|:j)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (^:j)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (&:d)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (|:d)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (^:d)	/* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
++    ;
++  #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
++    ;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/gomp/pr59467.c gcc-4.8.2/gcc/testsuite/c-c++-common/gomp/pr59467.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/gomp/pr59467.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/gomp/pr59467.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,68 @@
++/* PR libgomp/59467 */
++
++int v;
++
++void
++foo (void)
++{
++  int x = 0, y = 0;
++  #pragma omp parallel
++  {
++    int z;
++    #pragma omp single copyprivate (x)	/* { dg-error "is not threadprivate or private in outer context" } */
++    {
++      #pragma omp atomic write
++	x = 6;
++    }
++    #pragma omp atomic read
++    z = x;
++    #pragma omp atomic
++    y += z;
++  }
++  #pragma omp parallel
++  {
++    int z;
++    #pragma omp single copyprivate (v)	/* { dg-error "is not threadprivate or private in outer context" } */
++    {
++      #pragma omp atomic write
++	v = 6;
++    }
++    #pragma omp atomic read
++    z = v;
++    #pragma omp atomic
++    y += z;
++  }
++  #pragma omp parallel private (x)
++  {
++    int z;
++    #pragma omp single copyprivate (x)
++    {
++      #pragma omp atomic write
++	x = 6;
++    }
++    #pragma omp atomic read
++    z = x;
++    #pragma omp atomic
++    y += z;
++  }
++  x = 0;
++  #pragma omp parallel reduction (+:x)
++  {
++    #pragma omp single copyprivate (x)
++    {
++      #pragma omp atomic write
++	x = 6;
++    }
++    #pragma omp atomic
++    y += x;
++  }
++  #pragma omp single copyprivate (x)
++  {
++    x = 7;
++  }
++  #pragma omp single copyprivate (v)	/* { dg-error "is not threadprivate or private in outer context" } */
++  {
++    #pragma omp atomic write
++      v = 6;
++  }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr37743.c gcc-4.8.2/gcc/testsuite/c-c++-common/pr37743.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr37743.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/pr37743.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,13 @@
++/* PR c/37743 */
++/* This needs to be run only on targets where __UINT32_TYPE__ is defined
++   to unsigned int.  */
++/* { dg-do compile { target *-*-linux-gnu* } } */
++/* { dg-options "-Wformat" } */
++
++int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
++
++void
++bar (unsigned int x)
++{
++  foo ("%x", __builtin_bswap32 (x));
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59032.c gcc-4.8.2/gcc/testsuite/c-c++-common/pr59032.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59032.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/pr59032.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,30 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++void
++foo()
++{
++  float v __attribute__((vector_size(8)));
++  v++;
++}
++
++void
++foo2 ()
++{
++  float v __attribute__((vector_size(8)));
++  ++v;
++}
++
++void
++foo3 ()
++{
++  float v __attribute__((vector_size(8)));
++  v--;
++}
++
++void
++foo4 ()
++{
++  float v __attribute__((vector_size(8)));
++  --v;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59037.c gcc-4.8.2/gcc/testsuite/c-c++-common/pr59037.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59037.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/pr59037.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,12 @@
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++
++typedef int v4si __attribute__ ((vector_size (16)));
++
++int
++main (int argc, char** argv)
++{
++  v4si x = {0,1,2,3};
++  x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
++  return x[4];
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59280.c gcc-4.8.2/gcc/testsuite/c-c++-common/pr59280.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr59280.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/pr59280.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,4 @@
++/* PR c/59280 */
++/* { dg-do compile } */
++
++void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr60101.c gcc-4.8.2/gcc/testsuite/c-c++-common/pr60101.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/pr60101.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/pr60101.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,112 @@
++/* PR c/60101 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -Wall" } */
++
++extern int *a, b, *c, *d;
++
++void
++foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
++{
++  unsigned int e = (unsigned int) a[3];
++  double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
++  double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
++  unsigned int g = c[0] * c[1] * c[2];
++  unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
++  unsigned int i;
++
++  for (i = 0; i < e; i++)
++    {
++      int j = e * d[3] + i;
++
++      unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
++      float _Complex s = 0.;
++      unsigned int t = 0;
++
++      for (n0 = 0; n0 < l; n0++)
++	for (n1 = 0; n1 < l; n1++)
++	  for (n2 = 0; n2 < l; n2++)
++	    for (n3 = 0; n3 < l; n3++)
++	      for (n4 = 0; n4 < l; n4++)
++		for (n5 = 0; n5 < l; n5++)
++		  for (n6 = 0; n6 < l; n6++)
++		    for (n7 = 0; n7 < l; n7++)
++		      for (n8 = 0; n8 < l; n8++)
++			for (n9 = 0; n9 < l; n9++)
++			  for (n10 = 0; n10 < l; n10++)
++			    for (n11 = 0; n11 < l; n11++)
++			      {
++				if (t % g == h)
++				  s
++				    += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
++				       * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
++					  + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
++					  + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
++					  - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
++					  - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
++					  + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
++					  + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
++					  - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
++					  * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
++					  - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
++					  * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
++					  - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
++					  * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
++				t++;
++			      }
++      int u = (j - w + b) % b;
++      int q = (j >= w ? +1 : -1);
++      int r = q;
++      x[u] += r * s;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/scal-to-vec2.c gcc-4.8.2/gcc/testsuite/c-c++-common/scal-to-vec2.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/scal-to-vec2.c	2012-11-10 14:26:54.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/scal-to-vec2.c	2014-03-30 20:21:40.700930325 +0000
+@@ -1,6 +1,7 @@
+ /* { dg-do compile } */   
+ /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
+ /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
++/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
+ /* Ignore warning on some powerpc-ibm-aix configurations. */
+ /* { dg-prune-output "non-standard ABI extension" } */
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr58794-1.c gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr58794-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr58794-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr58794-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,29 @@
++/* { dg-do compile } */
++
++struct S0
++{
++  int f;
++};
++
++struct S1
++{
++  struct S0 f1;
++  volatile int f2;
++};
++
++struct S2
++{
++  struct S1 g;
++} a, b; 
++
++static int *c[1][2] = {{0, (int *)&a.g.f2}};
++static int d; 
++
++int
++main ()
++{
++  for (d = 0; d < 1; d++)
++    for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
++      *c[b.g.f1.f][d + 1] = 0;
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr58794-2.c gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr58794-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr58794-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr58794-2.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++
++struct S 
++{
++  volatile int f;
++} a;
++
++unsigned int b;
++
++static int *c[1][2] = {{0, (int *)&a.f}};
++static unsigned int d;
++
++int 
++main ()
++{
++  for (; d < 1; d++)
++    for (; b < 1; b++)
++      *c[b][d + 1] = 0;
++
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr60026.c gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr60026.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/torture/pr60026.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/torture/pr60026.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,28 @@
++/* PR ipa/60026 */
++/* { dg-do compile } */
++
++struct S { int f; } a;
++
++__attribute__((optimize (0)))
++struct S foo (int x, struct S y)
++{
++  int b = y.f;
++  return a; 
++}
++
++void
++bar ()
++{
++  while (a.f)
++    {
++      struct S c = {0};
++      foo (0, c);
++    }
++}
++
++int
++main ()
++{
++  bar (); 
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/c-c++-common/vector-compare-2.c gcc-4.8.2/gcc/testsuite/c-c++-common/vector-compare-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/c-c++-common/vector-compare-2.c	2012-11-10 14:26:54.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/c-c++-common/vector-compare-2.c	2014-03-30 20:21:40.700930325 +0000
+@@ -1,6 +1,7 @@
+ /* { dg-do compile } */   
+ /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
+ /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
++/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
+ /* Ignore warning on some powerpc-ibm-aix configurations. */
+ /* { dg-prune-output "non-standard ABI extension" } */
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/conversion/simd1.C gcc-4.8.2/gcc/testsuite/g++.dg/conversion/simd1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/conversion/simd1.C	2010-12-08 21:37:51.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/conversion/simd1.C	2014-03-30 20:21:40.720930982 +0000
+@@ -1,4 +1,5 @@
+ /* { dg-do compile } */
++/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
+ 
+ /* Test overload resolution of vector types.
+    From Janis Johnson and Paolo Bonzini, based on PR/16882 */
+@@ -17,7 +18,7 @@
+ void foo ()
+ {
+   vss = vld(i, vscp);        /* { dg-error "no matching function for call" } */
+-  // { dg-message "candidate" "candidate note" { target *-*-* } 19 }
++  // { dg-message "candidate" "candidate note" { target *-*-* } 20 }
+   vss = vld(i, vssp);
+   vss = vld(i, cvssp);
+ }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/access02.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/access02.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/access02.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/access02.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,39 @@
++// PR c++/58954
++// { dg-require-effective-target c++11 }
++
++template<class T>
++T&& declval();
++
++template<class T>
++struct foo_argument
++{
++  template<class Ret, class C, class Arg>
++  static Arg test(Ret (C::*)(Arg));
++
++  typedef decltype(test(&T::template foo<>)) type;
++};
++
++template<class T, class>
++struct dependent { typedef T type; };
++
++template<class T>
++struct base
++{
++  template<class Ignore = void>
++  auto foo(int i) -> decltype(declval<
++    typename dependent<T&, Ignore>::type
++  >().foo_impl(i));
++};
++
++struct derived : base<derived>
++{
++  friend struct base<derived>;
++private:
++  int foo_impl(int i);
++};
++
++int main()
++{
++  foo_argument<derived>::type var = 0;
++  return var;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,18 @@
++// PR c++/60182
++// { dg-require-effective-target c++11 }
++
++class B {};
++template <typename> using __allocator_base = B;
++template <typename> class F : __allocator_base<int> {};
++class C {};
++template <typename, typename = F<int> > class G : C {};
++template <typename> class D;
++class A {
++  using Container = G<D<char>>;
++  A();
++  A(D<char> const &);
++  Container m_elements;
++};
++template <template <class, class> class C, class A = F<D<int>>>
++void doSomething(C<D<char>, A> &);
++A::A(D<char> const &) : A() { doSomething(m_elements); }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C	2013-01-30 16:33:14.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C	2014-03-30 20:21:40.720930982 +0000
+@@ -2,6 +2,7 @@
+ // { dg-options "-std=gnu++11" }
+ // Ignore warning on some powerpc-ibm-aix configurations.
+ // { dg-prune-output "non-standard ABI extension" }
++// { dg-prune-output "changes the ABI" }
+ 
+ typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
+ constexpr V4 build (float x, float y, float z) { return (V4){ x, y, z, 0 };}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,20 @@
++// PR c++/59268
++// { dg-do compile }
++// { dg-options "-std=c++11" }
++
++template <typename>
++struct A
++{
++  constexpr A (int) {}
++  virtual void foo ()
++  {
++    constexpr A<void> a (0);
++  }
++};
++
++void
++bar ()
++{
++  A<int> a (3);
++  a.foo ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,8 @@
++// PR c++/58633
++// { dg-do compile { target c++11 } }
++
++void foo(int i)
++{
++  typedef int I;
++  decltype(i.I::~I())* p;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/defaulted48.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/defaulted48.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/defaulted48.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/defaulted48.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,17 @@
++// PR c++/60108
++// { dg-require-effective-target c++11 }
++
++template<int> struct A
++{
++  virtual ~A();
++};
++
++template<typename> struct B : A<0>, A<1>
++{
++  ~B() = default;
++};
++
++struct C : B<bool>
++{
++  C() {}
++};
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/deleted3.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/deleted3.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/deleted3.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/deleted3.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,11 @@
++// PR c++/60216
++// { dg-require-effective-target c++11 }
++
++struct A
++{
++  template<typename T> A(T) = delete;
++};
++
++template<> A::A<int>(int) {}
++
++A a(0);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C	2011-05-28 22:01:28.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C	2014-03-30 20:21:40.720930982 +0000
+@@ -4,5 +4,5 @@
+ int main(void) {
+   enum e {};
+   e ev;
+-  ev.e::~e_u();	// { dg-error "e_u. has not been declared" }
++  ev.e::~e_u();	// { dg-error "" }
+ }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum_base2.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum_base2.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum_base2.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum_base2.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,9 @@
++// PR c++/60187
++// { dg-require-effective-target c++11 }
++
++template<typename... T> struct A
++{
++  enum E : T {};		// { dg-error "parameter pack" }
++};
++
++A<int> a;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist76.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist76.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist76.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist76.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,5 @@
++// PR c++/58812
++// { dg-require-effective-target c++11 }
++
++int i;
++int&& j{{ i }};			// { dg-error "too many braces" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist78.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist78.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist78.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist78.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,12 @@
++// PR c++/58639
++// { dg-require-effective-target c++11 }
++
++struct node {
++  node &parent;
++};
++
++struct vector {
++  node n;
++};
++
++vector v({});			// { dg-error "" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist79.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist79.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/initlist79.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/initlist79.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,8 @@
++// PR c++/59646
++// { dg-require-effective-target c++11 }
++
++#include <initializer_list>
++
++struct A {};
++
++std::initializer_list<volatile A> x = {{}};
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C	2014-03-30 20:21:40.720930982 +0000
+@@ -0,0 +1,7 @@
++// PR c++/58596
++// { dg-do compile { target c++11 } }
++
++struct A
++{
++  int i = [] { return decltype(i)(); }();
++};
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/noexcept22.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/noexcept22.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/noexcept22.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/noexcept22.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,21 @@
++// PR c++/60046
++// { dg-require-effective-target c++11 }
++
++constexpr bool foo () { return noexcept (true); }
++template <typename T>
++struct V
++{
++  void bar (V &) noexcept (foo ()) {}
++};
++template <typename T>
++struct W : public V <int>
++{
++  void bar (W &x) { V <int>::bar (x); }
++};
++
++int
++main ()
++{
++  W <int> a, b;
++  a.bar (b);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,10 @@
++// PR c++/58965
++// { dg-require-effective-target c++11 }
++
++void foo()
++{
++  static union
++  {
++    int i = i;
++  };
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,13 @@
++// PR c++/58162
++// { dg-require-effective-target c++11 }
++
++struct A {
++ A();
++ A(A&&);
++};
++
++struct B {
++ A const a = A();
++};
++
++B b;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/static_assert9.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/static_assert9.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/static_assert9.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/static_assert9.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,7 @@
++// PR c++/58837
++// { dg-require-effective-target c++11 }
++
++void f();
++static_assert(f, "");
++struct A {};
++static_assert(A::~A, "");      // { dg-error "non-static member function" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic144.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic144.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic144.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic144.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,15 @@
++// PR c++/56060
++// { dg-do compile { target c++11 } }
++
++template<typename T> struct baz { };
++template<typename T> T bar();
++
++template<typename T, typename ... U>
++baz<decltype(bar<T>()(bar<U> ...))>  // { dg-error "cannot be used" }
++foo();
++
++int main()
++{
++  foo<int>();     // { dg-error "no matching" }
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic145.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic145.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic145.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic145.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,13 @@
++// PR c++/59730
++// { dg-do compile { target c++11 } }
++
++template <typename> void declval();
++template <typename> void forward();
++template <typename> class D;
++template <typename _Functor, typename... _Bound_args>
++class D <_Functor(_Bound_args...)> {
++  template <typename... _Args, decltype(declval<_Functor>)>
++  void operator()(...) {
++    0(forward<_Args>...);
++  }
++};
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic147.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic147.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic147.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic147.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,10 @@
++// PR c++/58466
++// { dg-require-effective-target c++11 }
++
++template<char, char...> struct A;
++
++template<typename> struct B;
++
++template<char... C> struct B<A<C...>> {};
++
++B<A<'X'>> b;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic148.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic148.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic148.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic148.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,6 @@
++// PR c++/59989
++// { dg-require-effective-target c++11 }
++
++template<typename T> struct X {};
++template<template<typename...> class D, typename ...U> int test(D<U...>*);
++int n = test<X, int>(0);	// { dg-error "no match" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic149.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic149.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic149.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic149.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,11 @@
++// PR c++/60248
++// { dg-options "-std=c++11 -g -fabi-version=2" }
++
++template<int...> struct A {};
++
++template<> struct A<0>
++{
++  typedef enum { e } B;
++};
++
++A<0> a;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic150.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic150.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/variadic150.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/variadic150.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,9 @@
++// PR c++/60219
++// { dg-require-effective-target c++11 }
++
++template<typename..., int> void foo();
++
++void bar()
++{
++  foo<0>;			// { dg-error "" }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/diagnostic/pr58979.C gcc-4.8.2/gcc/testsuite/g++.dg/diagnostic/pr58979.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/diagnostic/pr58979.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/diagnostic/pr58979.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,4 @@
++// PR c++/58979
++// { dg-do compile }
++
++int i = 0->*0; // { dg-error "invalid type argument of" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/diagnostic/pr59838.C gcc-4.8.2/gcc/testsuite/g++.dg/diagnostic/pr59838.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/diagnostic/pr59838.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/diagnostic/pr59838.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,4 @@
++// PR c++/59838
++// { dg-do compile }
++
++enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/eh/uncaught1.C gcc-4.8.2/gcc/testsuite/g++.dg/eh/uncaught1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/eh/uncaught1.C	2006-02-24 21:43:01.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/eh/uncaught1.C	2014-03-30 20:21:40.724264425 +0000
+@@ -13,7 +13,7 @@
+ 
+ static Check const data[] = {
+   { 0, 0, false },	// construct [0]
+-  { 1, 0, true  },	// [1] = [0]
++  { 1, 0, false  },	// [1] = [0]
+   { 0, 0, true  },	// destruct [0]
+   { 2, 1, true  },	// [2] = [1]
+   { 2, 2, true  },      // destruct [2]
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/eh/uncaught4.C gcc-4.8.2/gcc/testsuite/g++.dg/eh/uncaught4.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/eh/uncaught4.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/eh/uncaught4.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,29 @@
++// PR c++/41174
++// { dg-do run }
++
++#include <exception>
++
++#define assert(E) if (!(E)) __builtin_abort();
++
++struct e {
++  e()
++  {
++    assert( !std::uncaught_exception() );
++    try {
++      throw 1;
++    } catch (int i) {
++      assert( !std::uncaught_exception() );
++      throw;
++    }
++  }
++};
++
++int main()
++{
++  try {
++    throw e();
++  } catch (int i) {
++    assert( !std::uncaught_exception() );
++  }
++  assert( !std::uncaught_exception() );
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attrib48.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/attrib48.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attrib48.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/attrib48.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,6 @@
++// PR c++/54652
++
++typedef unsigned L __attribute__ ((aligned));
++typedef unsigned L __attribute__ ((aligned));
++
++L l;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-1.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-1.C	2009-01-12 19:28:58.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-1.C	2014-03-30 20:21:40.724264425 +0000
+@@ -36,3 +36,4 @@
+ 
+ /* Ignore a warning that is irrelevant to the purpose of this test.  */
+ /* { dg-prune-output ".*GCC vector returned by reference.*" } */
++/* { dg-prune-output "changes the ABI" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-2.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-2.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-2.C	2010-03-03 20:24:45.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-2.C	2014-03-30 20:21:40.724264425 +0000
+@@ -50,3 +50,4 @@
+ 
+ /* Ignore a warning that is irrelevant to the purpose of this test.  */
+ /* { dg-prune-output ".*GCC vector returned by reference.*" } */
++/* { dg-prune-output "changes the ABI" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-3.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-3.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-3.C	2009-01-12 19:28:58.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-3.C	2014-03-30 20:21:40.724264425 +0000
+@@ -52,3 +52,4 @@
+ 
+ /* Ignore a warning that is irrelevant to the purpose of this test.  */
+ /* { dg-prune-output ".*GCC vector returned by reference.*" } */
++/* { dg-prune-output "changes the ABI" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-4.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-4.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/attribute-test-4.C	2009-01-12 19:28:58.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/attribute-test-4.C	2014-03-30 20:21:40.724264425 +0000
+@@ -49,3 +49,4 @@
+ 
+ /* Ignore a warning that is irrelevant to the purpose of this test.  */
+ /* { dg-prune-output ".*GCC vector returned by reference.*" } */
++/* { dg-prune-output "changes the ABI" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/builtin-bswap1.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/builtin-bswap1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/builtin-bswap1.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/builtin-bswap1.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,22 @@
++// PR c/37743
++// { dg-do compile }
++
++#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
++
++void foo (__UINT32_TYPE__);
++void foo (__INT32_TYPE__);
++
++void
++bar (__UINT32_TYPE__ x)
++{
++  foo (__builtin_bswap32 (x));
++}
++
++#else
++
++void
++bar ()
++{
++}
++
++#endif
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/stmtexpr15.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/stmtexpr15.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/stmtexpr15.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/stmtexpr15.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,7 @@
++// PR c++/59097
++// { dg-options "" }
++
++void foo()
++{
++  int x[({ return; })];		// { dg-error "non-integral" }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/timevar2.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/timevar2.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/timevar2.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/timevar2.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,14 @@
++// PR c++/57524
++// { dg-options "-ftime-report" }
++// { dg-prune-output "wall" }
++// { dg-prune-output "times" }
++// { dg-prune-output "TOTAL" }
++// { dg-prune-output "checks" }
++
++namespace detail {
++namespace indirect_traits {}
++using namespace indirect_traits;
++void fn1() {
++using namespace detail;
++}
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/traits1.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/traits1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/traits1.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/traits1.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,4 @@
++// PR c++/58504
++
++template<bool = __has_nothrow_assign(void)> struct A {};
++A<> a;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/vector25.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/vector25.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/vector25.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/vector25.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,6 @@
++volatile int i __attribute__((vector_size(8)));
++
++void foo()
++{
++  i += i;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/vector27.C gcc-4.8.2/gcc/testsuite/g++.dg/ext/vector27.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ext/vector27.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ext/vector27.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,7 @@
++// PR c++/58845
++
++void foo()
++{
++  int v __attribute__((vector_size(8)));
++  v = v || v;			// { dg-bogus "" "" { xfail *-*-* } }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/gomp/for-20.C gcc-4.8.2/gcc/testsuite/g++.dg/gomp/for-20.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/gomp/for-20.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/gomp/for-20.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,16 @@
++// PR c++/60146
++// { dg-do compile }
++// { dg-options -fopenmp }
++
++int foo() { return 0; }
++
++template<typename T> void bar()
++{
++#pragma omp parallel for
++  for (T i = foo(); i < 8; ++i) {}
++}
++
++void baz()
++{
++  bar<int>();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/gomp/pr59297.C gcc-4.8.2/gcc/testsuite/g++.dg/gomp/pr59297.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/gomp/pr59297.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/gomp/pr59297.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,25 @@
++// PR c++/59297
++// { dg-do compile }
++// { dg-options "-fopenmp" }
++
++template <typename T>
++struct A
++{
++  ~A ();
++  const T &operator[] (int) const;
++};
++
++struct B
++{
++  int &operator () (A <int>);
++};
++
++void
++foo (B &x, int &z)
++{
++  A<A<int> > y;
++  #pragma omp atomic
++  x (y[0]) += 1;
++  #pragma omp atomic
++  z += x(y[1]);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/inherit/virtual11.C gcc-4.8.2/gcc/testsuite/g++.dg/inherit/virtual11.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/inherit/virtual11.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/inherit/virtual11.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,17 @@
++// PR c++/59031
++// { dg-do compile }
++// { dg-options "-fdump-tree-gimple " }
++class B {
++ public:
++  virtual int add (int a, int b) {return a+ b;}
++};
++
++class D : public B {
++};
++
++int foo (int a, int b) {
++  D d;
++  return d.add(a, b);
++}
++// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
++// { dg-final { cleanup-tree-dump "gimple" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/ipa/pr60419.C gcc-4.8.2/gcc/testsuite/g++.dg/ipa/pr60419.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/ipa/pr60419.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/ipa/pr60419.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,80 @@
++// PR middle-end/60419
++// { dg-do compile }
++// { dg-options "-O2" }
++
++struct C
++{
++};
++
++struct I : C
++{
++  I ();
++};
++
++struct J
++{
++  void foo ();
++  J ();
++  virtual void foo (int &, int);
++};
++
++template <class>
++struct D
++{
++  virtual void foo (I &) const;
++  void bar ()
++  {
++    I p;
++    foo (p);
++  }
++};
++
++struct K : J, public D<int>
++{
++};
++
++struct F
++{
++  K *operator->();
++};
++
++struct N : public K
++{
++  void foo (int &, int);
++  I n;
++  void foo (I &) const {}
++};
++
++struct L : J
++{
++  F l;
++};
++
++struct M : F
++{
++  L *operator->();
++};
++
++struct G
++{
++  G ();
++};
++
++M h;
++
++G::G ()
++try
++{
++  N f;
++  f.bar ();
++  throw;
++}
++catch (int)
++{
++}
++
++void
++baz ()
++{
++  h->l->bar ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr58864.C gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr58864.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr58864.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr58864.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,21 @@
++// PR target/58864
++// { dg-do compile }
++// { dg-options "-Os" }
++// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
++
++struct A { A (); ~A (); };
++struct B { B (); };
++
++float d, e;
++
++void
++foo ()
++{
++  A a;
++  float c = d;
++  while (1)
++    {
++      B b;
++      e = c ? -c : 0;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr59470.C gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr59470.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr59470.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr59470.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,188 @@
++// PR middle-end/59470
++// { dg-do run }
++// { dg-options "-O2 -fstack-protector" }
++// { dg-additional-options "-fPIC" { target fpic } }
++// { dg-require-effective-target fstack_protector }
++
++struct A
++{
++  int a1;
++  A () throw () : a1 (0) {}
++};
++
++struct B
++{
++  unsigned int b1 () throw ();
++};
++
++__attribute__((noinline, noclone)) unsigned int
++B::b1 () throw ()
++{
++  asm volatile ("" : : : "memory");
++  return 0;
++}
++
++struct C
++{
++  const A **c1;
++  void c2 (const A *, unsigned int);
++};
++
++__attribute__((noinline, noclone)) void
++C::c2 (const A *, unsigned int)
++{
++  asm volatile ("" : : : "memory");
++}
++
++struct D
++{
++  C *d1;
++};
++
++struct E
++{
++  int e1;
++  int e2;
++  D e3;
++};
++
++struct F
++{
++  virtual int f1 (const char * s, int n);
++};
++
++struct G
++{
++  F *g1;
++  bool g2;
++  G & g3 (const char * ws, int len)
++  {
++    if (__builtin_expect (!g2, true)
++	&& __builtin_expect (this->g1->f1 (ws, len) != len, false))
++      g2 = true;
++    return *this;
++  }
++};
++
++struct H : public A
++{
++  const char *h1;
++  unsigned int h2;
++  bool h3;
++  const char *h4;
++  char h5;
++  char h6;
++  char h7[31];
++  bool h8;
++  H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
++  void h9 (const D &) __attribute__((noinline, noclone));
++};
++
++void
++H::h9 (const D &)
++{
++  h3 = true;
++  __builtin_memset (h7, 0, sizeof (h7));
++  asm volatile ("" : : : "memory");
++};
++
++B b;
++
++inline const H *
++foo (const D &x)
++{
++  const unsigned int i = b.b1 ();
++  const A **j = x.d1->c1;
++  if (!j[i])
++    {
++      H *k = 0;
++      try
++	{
++	  k = new H;
++	  k->h9 (x);
++	}
++      catch (...)
++	{
++	}
++      x.d1->c2 (k, i);
++    }
++    return static_cast <const H *>(j[i]);
++}
++
++__attribute__((noinline, noclone)) int
++bar (char *x, unsigned long v, const char *y, int z, bool w)
++{
++  asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
++  asm volatile ("" : : "r" (z), "r" (w) : "memory");
++  return 8;
++}
++
++__attribute__((noinline, noclone)) void
++baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
++{
++  asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
++  asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
++  asm volatile ("" : : "r" (c), "r" (&l) : "memory");
++  if (n == c)
++    __builtin_abort ();
++  int i = 0;
++  asm ("" : "+r" (i));
++  if (i == 0)
++    __builtin_exit (0);
++}
++
++__attribute__((noinline, noclone)) G
++test (void *z, G s, E &x, char, long v)
++{
++  const D &d = x.e3;
++  const H *h = foo (d);
++  const char *q = h->h7;
++  const int f = x.e2;
++  const int i = 5 * sizeof (long);
++  char *c = static_cast <char *>(__builtin_alloca (i));
++  const int b = f & 74;
++  const bool e = (b != 64 && b != 8);
++  const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
++  int l = bar (c + i, u, q, f, e);
++  c += i - l;
++  if (h->h3)
++    {
++      char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
++      baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
++      c = c2 + 2;
++    }
++  if (__builtin_expect (e, true))
++    {
++    }
++  else if ((f & 4096) && v)
++    {
++      {
++	const bool m = f & 176;
++	*--c = q[m];
++	*--c = q[1];
++      }
++    }
++  const int w = x.e1;
++  if (w > l)
++    {
++      char * c3 = static_cast <char *>(__builtin_alloca (w));
++      c = c3;
++    }
++  return s.g3 (c, l);
++}
++
++int
++main ()
++{
++  H h;
++  const A *j[1];
++  C c;
++  G g;
++  E e;
++  h.h9 (e.e3);
++  j[0] = &h;
++  c.c1 = j;
++  e.e3.d1 = &c;
++  test (0, g, e, 0, 0);
++  __builtin_abort ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr59647.C gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr59647.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/opt/pr59647.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/opt/pr59647.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,32 @@
++// PR rtl-optimization/59647
++// { dg-do compile }
++// { dg-options "-O2 -fno-tree-vrp" }
++// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
++
++void f1 (int);
++void f2 ();
++double f3 (int);
++
++struct A
++{
++  int f4 () const
++  {
++    if (a == 0)
++      return 1;
++    return 0;
++  }
++  unsigned f5 ()
++  {
++    if (!f4 ())
++      f2 ();
++    return a;
++  }
++  int a;
++};
++
++void
++f6 (A *x)
++{
++  unsigned b = x->f5 ();
++  f1 (b - 1 - f3 (x->f5 () - 1U));
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/pr59695.C gcc-4.8.2/gcc/testsuite/g++.dg/pr59695.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/pr59695.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/pr59695.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,125 @@
++
++/* PR target/59695 */
++/* { dg-do run } */
++/* { dg-options "-O0" } */
++
++#define  DEFINE_VIRTUALS_FNS(i)	virtual void  xxx##i ()	{} \
++  virtual void  foo1_##i ()	{}\
++  virtual void  foo2_##i ()	{}\
++  virtual void  foo3_##i ()	{}\
++  virtual void  foo4_##i ()	{}\
++  virtual void  foo5_##i ()	{}\
++  virtual void  foo6_##i ()	{}\
++  virtual void  foo7_##i ()	{}\
++  virtual void  foo8_##i ()	{}\
++  virtual void  foo9_##i ()	{}\
++  virtual void  foo10_##i ()	{}\
++  virtual void  foo11_##i ()	{}\
++  virtual void  foo12_##i ()	{}\
++  virtual void  foo13_##i ()	{}\
++  virtual void  foo14_##i ()	{}\
++  virtual void  foo15_##i ()	{}\
++  virtual void  foo16_##i ()	{}\
++  virtual void  foo17_##i ()	{}\
++  virtual void  foo18_##i ()	{}\
++  virtual void  foo19_##i ()	{}\
++  virtual void  foo20_##i ()	{}\
++  virtual void  foo21_##i ()	{}\
++  virtual void  foo22_##i ()	{}\
++
++class base_class_2
++{
++
++public:
++  /* Define lots of virtual functions */
++  DEFINE_VIRTUALS_FNS (1)
++  DEFINE_VIRTUALS_FNS (2)
++  DEFINE_VIRTUALS_FNS (3)
++  DEFINE_VIRTUALS_FNS (4)
++  DEFINE_VIRTUALS_FNS (5)
++  DEFINE_VIRTUALS_FNS (6)
++  DEFINE_VIRTUALS_FNS (7)
++  DEFINE_VIRTUALS_FNS (8)
++  DEFINE_VIRTUALS_FNS (9)
++  DEFINE_VIRTUALS_FNS (10)
++  DEFINE_VIRTUALS_FNS (11)
++  DEFINE_VIRTUALS_FNS (12)
++  DEFINE_VIRTUALS_FNS (13)
++  DEFINE_VIRTUALS_FNS (14)
++  DEFINE_VIRTUALS_FNS (15)
++  DEFINE_VIRTUALS_FNS (16)
++  DEFINE_VIRTUALS_FNS (17)
++  DEFINE_VIRTUALS_FNS (18)
++  DEFINE_VIRTUALS_FNS (19)
++  DEFINE_VIRTUALS_FNS (20)
++
++  base_class_2();
++  virtual ~base_class_2 ();
++};
++
++base_class_2::base_class_2()
++{
++}
++
++base_class_2::~base_class_2 ()
++{
++}
++
++class base_class_1
++{
++public:
++  virtual ~base_class_1();
++  base_class_1();
++};
++
++base_class_1::base_class_1()
++{
++}
++
++base_class_1::~base_class_1()
++{
++}
++
++class base_Impl_class :
++  virtual public base_class_2, public base_class_1
++{
++public:
++  base_Impl_class ();
++  virtual ~base_Impl_class ();
++};
++
++base_Impl_class::base_Impl_class ()
++{
++}
++
++base_Impl_class::~base_Impl_class ()
++{
++}
++
++
++class test_cls : public base_Impl_class
++{
++public:
++  test_cls();
++  virtual ~test_cls();
++};
++
++test_cls::test_cls()
++{
++}
++
++test_cls::~test_cls()
++{
++}
++
++int main()
++{
++  test_cls *test = new test_cls;
++  base_class_2 *p1 = test;
++
++  /* PR59695  destructor thunk offsets are not setup
++   correctly resulting in crash.  */
++  delete p1;
++  return 0;
++}
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/partial14.C gcc-4.8.2/gcc/testsuite/g++.dg/template/partial14.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/partial14.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/partial14.C	2014-03-30 20:21:40.724264425 +0000
+@@ -0,0 +1,16 @@
++// PR c++/59044
++
++template <class T>
++class C {
++private:
++  template <T a, T b>
++  struct Implementation {};
++public:
++  typedef typename Implementation<0, 0>::Typedef Type;
++};
++
++template <class T>
++template <T b>
++struct C<T>::Implementation<0, b> { typedef void Typedef; };
++
++template class C<unsigned>;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/partial15.C gcc-4.8.2/gcc/testsuite/g++.dg/template/partial15.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/partial15.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/partial15.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,19 @@
++// PR c++/57043
++// { dg-do link }
++
++template<typename D> struct complex { };
++
++template<typename Tp>
++complex<Tp>
++pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
++
++template<typename T, typename U>
++struct promote_2 { typedef T type; };
++
++template<typename Tp, typename Up>
++complex<typename promote_2<Tp, Up>::type>
++pow(const complex<Tp>& x, const complex<Up>& y);
++
++complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
++
++int main() {}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/ref7.C gcc-4.8.2/gcc/testsuite/g++.dg/template/ref7.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/ref7.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/ref7.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,16 @@
++// PR c++/60274
++
++typedef const char *const&  ProtocolIdType;
++
++template <ProtocolIdType protocolId>
++struct C {
++  typedef int ProtocolVersion;
++  struct D {
++    ProtocolVersion GetProtocolVersion();
++  };
++};
++template <ProtocolIdType protocolId>
++typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
++{
++    return 1;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/shadow1.C gcc-4.8.2/gcc/testsuite/g++.dg/template/shadow1.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/shadow1.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/shadow1.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,4 @@
++// PR c++/58632
++
++template<template<int I> class A> // { dg-message "shadows" }
++class A {};			// { dg-error "declaration" }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using27.C gcc-4.8.2/gcc/testsuite/g++.dg/template/using27.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using27.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/using27.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,33 @@
++// PR c++/37140
++
++struct X
++{
++  typedef int nested_type;
++};
++
++template <class T>
++struct A
++{
++  typedef X type;
++};
++
++template <class T>
++struct B : A<T>
++{
++  using typename A<T>::type;
++  typename type::nested_type x;
++};
++
++template <class T> 
++struct C : B<T>
++{
++  using typename B<T>::type;
++  typename type::nested_type y;
++};
++
++struct D : C<int>
++{
++  using C<int>::type;
++  type::nested_type z;
++};
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using28.C gcc-4.8.2/gcc/testsuite/g++.dg/template/using28.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using28.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/using28.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,17 @@
++// PR c++/37140
++
++struct C
++{
++  static const int block_size = 1;
++};
++
++template <typename T> struct A {
++  typedef C type;
++};
++
++template <typename T> struct B : public A<T> {
++  using typename A<T>::type;
++  static const int block_size = type::block_size;
++};
++
++template class B<int>;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using29.C gcc-4.8.2/gcc/testsuite/g++.dg/template/using29.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/template/using29.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/template/using29.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,21 @@
++// PR c++/58047
++
++template <int N>
++struct print_arg { };
++
++struct const_holder {
++  static const int CONSTANT = 42;
++};
++
++template <typename T>
++struct identity {
++  typedef T type;
++};
++
++template <class T>
++struct test_case : public identity<T> {
++  using typename identity<T>::type;
++  print_arg<type::CONSTANT> printer;
++};
++
++template struct test_case<const_holder>;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tls/thread_local-ice2.C gcc-4.8.2/gcc/testsuite/g++.dg/tls/thread_local-ice2.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tls/thread_local-ice2.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/tls/thread_local-ice2.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,11 @@
++// PR c++/58672
++// { dg-options "-std=c++11" }
++// { dg-require-effective-target tls }
++
++struct A
++{
++  A(int);
++  i;				// { dg-error "" }
++};
++
++thread_local A a(0);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tls/thread_local8.C gcc-4.8.2/gcc/testsuite/g++.dg/tls/thread_local8.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tls/thread_local8.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/tls/thread_local8.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,12 @@
++// PR c++/55800
++// { dg-options "-std=c++11" }
++// { dg-require-alias "" }
++// { dg-require-effective-target tls }
++// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
++
++struct foo
++{
++  foo();
++};
++
++thread_local foo foo_instance;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/noexcept-6.C gcc-4.8.2/gcc/testsuite/g++.dg/tm/noexcept-6.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/noexcept-6.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/tm/noexcept-6.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,23 @@
++// { dg-do compile }
++// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
++
++struct TrueFalse
++{
++  static constexpr bool v() { return true; }
++};
++
++int global;
++
++template<typename T> int foo()
++{
++  return __transaction_atomic noexcept(T::v()) (global + 1);
++}
++
++int f1()
++{
++  return foo<TrueFalse>();
++}
++
++/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
++/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
++/* { dg-final { cleanup-tree-dump "tmlower" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/pr60004.C gcc-4.8.2/gcc/testsuite/g++.dg/tm/pr60004.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/pr60004.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/tm/pr60004.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,10 @@
++// { dg-do compile }
++// { dg-options "-fgnu-tm" }
++
++int a;
++int f() {
++    __transaction_atomic {
++        if (a == 5)
++            return 1;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr38565.C gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr38565.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr38565.C	2009-01-07 17:50:45.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr38565.C	2014-03-30 20:21:40.727597868 +0000
+@@ -1,6 +1,7 @@
+ // { dg-do compile }
+ // Ignore warning on some powerpc-linux configurations.
+ // { dg-prune-output "non-standard ABI extension" }
++// { dg-prune-output "changes the ABI" }
+ #define vector __attribute__((vector_size(16) ))
+ vector unsigned int f(int a)
+ {
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr57499.C gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr57499.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr57499.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr57499.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,14 @@
++// PR middle-end/57499
++// { dg-do compile }
++
++struct S
++{
++  ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
++};
++
++void
++foo ()
++{
++  S s;
++  throw 1;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr59163.C gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr59163.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/torture/pr59163.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/torture/pr59163.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,30 @@
++// PR target/59163
++// { dg-do run }
++
++struct A { float a[4]; };
++struct B { int b; A a; };
++
++__attribute__((noinline, noclone)) void
++bar (A &a)
++{
++  if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
++    __builtin_abort ();
++}
++
++__attribute__((noinline, noclone)) void
++foo (A &a)
++{
++  int i;
++  A c = a;
++  for (i = 0; i < 4; i++)
++    c.a[i] *= 6.0f;
++  a = c;
++  bar (a);
++}
++
++int
++main ()
++{
++  B b = { 5, { 6, 7, 8, 9 } };
++  foo (b.a);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/tree-prof/pr59255.C gcc-4.8.2/gcc/testsuite/g++.dg/tree-prof/pr59255.C
+--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tree-prof/pr59255.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/g++.dg/tree-prof/pr59255.C	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,29 @@
++// PR c++/59255
++// { dg-options "-O2 -std=c++11" }
++
++struct S
++{
++  __attribute__((noinline, noclone)) ~S () noexcept (true)
++  {
++    if (fn)
++      fn (1);
++  }
++  void (*fn) (int);
++};
++
++__attribute__((noinline, noclone)) void
++foo (int x)
++{
++  if (x != 1)
++    throw 1;
++}
++
++int
++main ()
++{
++  for (int i = 0; i < 100; i++)
++    {
++      S s;
++      s.fn = foo;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,11 @@
++/* PR middle-end/58970 */
++
++struct T { int b : 1; };
++struct S { struct T t[1]; };
++
++void
++foo (int x, struct S *s)
++{
++  if (x == -1)
++    s->t[x].b = 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,11 @@
++/* PR middle-end/58970 */
++
++struct T { char a : 8; char b : 1; };
++struct S { char x; struct T t[1]; };
++
++void
++foo (int x, struct S *s)
++{
++  if (x == -1)
++    s->t[x].b = 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58997.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58997.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr58997.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr58997.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,19 @@
++/* PR rtl-optimization/58997 */
++
++int a, b, c, e;
++short d;
++char h;
++
++void
++foo ()
++{
++  while (b)
++    {
++      d = a ? c : 1 % a;
++      c = d;
++      h = d;
++      if (!h)
++	while (e)
++	  ;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr59362.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr59362.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr59362.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr59362.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,21 @@
++/* PR tree-optimization/59362 */
++
++char *
++foo (char *r, int s)
++{
++  r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
++  if (s)
++    r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
++  return r;
++}
++
++char *a;
++long int b;
++
++void
++bar (void)
++{
++  b = __builtin_object_size (0, 0);
++  a = __builtin___stpcpy_chk (0, "", b);
++  b = __builtin_object_size (a, 0);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr59803.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr59803.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/compile/pr59803.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/compile/pr59803.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,27 @@
++/* PR target/59803 */
++
++extern void baz (void) __attribute__ ((__noreturn__));
++struct A { int g, h; };
++extern struct A a;
++struct B { unsigned char i, j, k, l, m; };
++int c, d, e;
++static int f;
++
++void
++foo (void)
++{
++  f = 1;
++}
++
++void
++bar (struct B *x)
++{
++  x->i = e;
++  x->k = c;
++  x->l = d;
++  x->j = a.h;
++  x->m = f;
++  if (x->i != e) baz ();
++  if (x->k != c) baz ();
++  if (x->j != a.h) baz ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20131127-1.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20131127-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20131127-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20131127-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,34 @@
++/* PR middle-end/59138 */
++/* Testcase by John Regehr <regehr@cs.utah.edu> */
++
++extern void abort (void);
++
++#pragma pack(1)
++
++struct S0 {
++  int f0;
++  int f1;
++  int f2;
++  short f3;
++};
++
++short a = 1;
++
++struct S0 b = { 1 }, c, d, e;
++
++struct S0 fn1() { return c; }
++
++void fn2 (void)
++{
++  b = fn1 ();
++  a = 0;
++  d = e;
++}
++
++int main (void)
++{
++  fn2 ();
++  if (a != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20140212-1.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20140212-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20140212-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20140212-1.c	2014-03-30 20:21:40.700930325 +0000
+@@ -0,0 +1,37 @@
++/* PR rtl-optimization/60116 */
++/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
++
++extern void abort (void);
++
++int a, b, c, d = 1, e, f = 1, h, i, k;
++char g, j;
++
++void
++fn1 (void)
++{
++  int l;
++  e = 0;
++  c = 0;
++  for (;;)
++    {
++      k = a && b;
++      j = k * 54;
++      g = j * 147;
++      l = ~g + (long long) e && 1;
++      if (d)
++	c = l;
++      else
++	h = i = l * 9UL;
++      if (f)
++	return;
++    }
++}
++
++int
++main (void)
++{
++  fn1 ();
++  if (c != 1)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20140326-1.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20140326-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/20140326-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/20140326-1.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,10 @@
++int a;
++
++int
++main (void)
++{
++  char e[2] = { 0, 0 }, f = 0;
++  if (a == 131072)
++    f = e[a];
++  return f;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58726.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58726.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58726.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58726.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,26 @@
++/* PR rtl-optimization/58726 */
++
++int a, c;
++union { int f1; int f2 : 1; } b;
++
++short
++foo (short p)
++{
++  return p < 0 ? p : a;
++}
++
++int
++main ()
++{
++  if (sizeof (short) * __CHAR_BIT__ != 16
++      || sizeof (int) * __CHAR_BIT__ != 32)
++    return 0;
++  b.f1 = 56374;
++  unsigned short d;
++  int e = b.f2;
++  d = e == 0 ? b.f1 : 0;
++  c = foo (d);
++  if (c != (short) 56374)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58831.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58831.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58831.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58831.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,40 @@
++#include <assert.h>
++
++int a, *b, c, d, f, **i, p, q, *r;
++short o, j;
++
++static int __attribute__((noinline, noclone))
++fn1 (int *p1, int **p2)
++{
++  int **e = &b;
++  for (; p; p++)
++    *p1 = 1;
++  *e = *p2 = &d;
++
++  assert (r);
++
++  return c;
++}
++
++static int ** __attribute__((noinline, noclone))
++fn2 (void)
++{
++  for (f = 0; f != 42; f++)
++    {
++      int *g[3] = {0, 0, 0};
++      for (o = 0; o; o--)
++        for (; a > 1;)
++          {
++            int **h[1] = { &g[2] };
++          }
++    }
++  return &r;
++}
++
++int
++main (void)
++{
++  i = fn2 ();
++  fn1 (b, i);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58984.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58984.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58984.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58984.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,57 @@
++/* PR tree-optimization/58984 */
++
++struct S { int f0 : 8; int : 6; int f1 : 5; };
++struct T { char f0; int : 6; int f1 : 5; };
++
++int a, *c = &a, e, n, b, m;
++
++static int
++foo (struct S p)
++{
++  const unsigned short *f[36];
++  for (; e < 2; e++)
++    {
++      const unsigned short **i = &f[0];
++      *c ^= 1;
++      if (p.f1)
++	{
++	  *i = 0;
++	  return b;
++	}
++    }
++  return 0;
++}
++
++static int
++bar (struct T p)
++{
++  const unsigned short *f[36];
++  for (; e < 2; e++)
++    {
++      const unsigned short **i = &f[0];
++      *c ^= 1;
++      if (p.f1)
++	{
++	  *i = 0;
++	  return b;
++	}
++    }
++  return 0;
++}
++
++int
++main ()
++{
++  struct S o = { 1, 1 };
++  foo (o);
++  m = n || o.f0;
++  if (a != 1)
++    __builtin_abort ();
++  e = 0;
++  struct T p = { 1, 1 };
++  bar (p);
++  m |= n || p.f0;
++  if (a != 0)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,23 @@
++/* PR tree-optimization/59014 */
++
++__attribute__((noinline, noclone)) long long int
++foo (long long int x, long long int y)
++{
++  if (((int) x | (int) y) != 0)
++    return 6;
++  return x + y;
++}
++
++int
++main ()
++{
++  if (sizeof (long long) == sizeof (int))
++    return 0;
++  int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
++  long long int x = (3LL << shift_half) << shift_half;
++  long long int y = (5LL << shift_half) << shift_half;
++  long long int z = foo (x, y);
++  if (z != ((8LL << shift_half) << shift_half))
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59014.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59014.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59014.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59014.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,25 @@
++/* PR tree-optimization/59014 */
++
++int a = 2, b, c, d;
++
++int
++foo ()
++{
++  for (;; c++)
++    if ((b > 0) | (a & 1))
++      ;
++    else
++      {
++	d = a;
++	return 0;
++      }
++}
++
++int
++main ()
++{
++  foo ();
++  if (d != 2)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59101.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59101.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59101.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59101.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,15 @@
++/* PR target/59101 */
++
++__attribute__((noinline, noclone)) int
++foo (int a)
++{
++  return (~a & 4102790424LL) > 0 | 6;
++}
++
++int
++main ()
++{
++  if (foo (0) != 7)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59358.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59358.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59358.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59358.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,44 @@
++/* PR tree-optimization/59358 */
++
++__attribute__((noinline, noclone)) int
++foo (int *x, int y)
++{
++  int z = *x;
++  if (y > z && y <= 16)
++    while (y > z)
++      z *= 2;
++  return z;
++}
++
++int
++main ()
++{
++  int i;
++  for (i = 1; i < 17; i++)
++    {
++      int j = foo (&i, 16);
++      int k;
++      if (i >= 8 && i <= 15)
++	k = 16 + (i - 8) * 2;
++      else if (i >= 4 && i <= 7)
++	k = 16 + (i - 4) * 4;
++      else if (i == 3)
++	k = 24;
++      else
++	k = 16;
++      if (j != k)
++	__builtin_abort ();
++      j = foo (&i, 7);
++      if (i >= 7)
++	k = i;
++      else if (i >= 4)
++	k = 8 + (i - 4) * 2;
++      else if (i == 3)
++	k = 12;
++      else
++	k = 8;
++      if (j != k)
++	__builtin_abort ();
++    }
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59388.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59388.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr59388.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr59388.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,11 @@
++/* PR tree-optimization/59388 */
++
++int a;
++struct S { unsigned int f:1; } b;
++
++int
++main ()
++{
++  a = (0 < b.f) | b.f;
++  return a;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60017.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60017.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60017.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60017.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,33 @@
++/* PR target/60017 */
++
++extern void abort (void);
++
++struct S0
++{
++  short m0;
++  short m1;
++};
++
++struct S1
++{
++  unsigned m0:1;
++  char m1[2][2];
++  struct S0 m2[2];
++};
++
++struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
++
++struct S1 func (void)
++{
++  return x;
++}
++
++int main (void)
++{
++  struct S1 ret = func ();
++
++  if (ret.m2[1].m1 != 9)
++    abort ();
++
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60062.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60062.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60062.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60062.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,25 @@
++/* PR target/60062 */
++
++int a;
++
++static void
++foo (const char *p1, int p2)
++{
++  if (__builtin_strcmp (p1, "hello") != 0)
++    __builtin_abort ();
++}
++
++static void
++bar (const char *p1)
++{
++  if (__builtin_strcmp (p1, "hello") != 0)
++    __builtin_abort ();
++}
++
++__attribute__((optimize (0))) int
++main ()
++{
++  foo ("hello", a);
++  bar ("hello");
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60072.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60072.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60072.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60072.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,16 @@
++/* PR target/60072 */
++
++int c = 1;
++
++__attribute__ ((optimize (1)))
++static int *foo (int *p)
++{
++  return p;
++}
++
++int
++main ()
++{
++  *foo (&c) = 2;
++  return c - 2;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60454.c gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60454.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr60454.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr60454.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,31 @@
++#ifdef __UINT32_TYPE__
++typedef __UINT32_TYPE__ uint32_t;
++#else
++typedef unsigned uint32_t;
++#endif
++
++#define __fake_const_swab32(x) ((uint32_t)(			      \
++        (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) |            \
++        (((uint32_t)(x) & (uint32_t)0x0000ff00UL) <<  8) |            \
++        (((uint32_t)(x) & (uint32_t)0x000000ffUL) <<  8) |            \
++        (((uint32_t)(x) & (uint32_t)0x0000ff00UL)      ) |            \
++        (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
++
++/* Previous version of bswap optimization would detect byte swap when none
++   happen. This test aims at catching such wrong detection to avoid
++   regressions.  */
++
++__attribute__ ((noinline, noclone)) uint32_t
++fake_swap32 (uint32_t in)
++{
++  return __fake_const_swab32 (in);
++}
++
++int main(void)
++{
++  if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
++    return 0;
++  if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/20050922-1.c gcc-4.8.2/gcc/testsuite/gcc.dg/20050922-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/20050922-1.c	2005-10-24 12:55:37.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/20050922-1.c	2014-03-30 20:21:40.704263768 +0000
+@@ -4,7 +4,7 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+ 
+-#include <stdlib.h>
++extern void abort (void);
+ 
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/20050922-2.c gcc-4.8.2/gcc/testsuite/gcc.dg/20050922-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/20050922-2.c	2005-11-25 20:09:21.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/20050922-2.c	2014-03-30 20:21:40.704263768 +0000
+@@ -4,7 +4,8 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+ 
+-#include <stdlib.h>
++extern void abort (void);
++extern void exit (int);
+ 
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c gcc-4.8.2/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c	2011-12-29 17:45:11.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,6 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wall" } */
+ /* { dg-options "-O2 -Wall -mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
++/* { dg-options "-O2 -Wall -msse2" { target { i?86-*-* x86_64-*-* } } } */
+ 
+ typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/atomic-store-6.c gcc-4.8.2/gcc/testsuite/gcc.dg/atomic-store-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/atomic-store-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/atomic-store-6.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,13 @@
++/* { dg-do run } */
++/* { dg-require-effective-target sync_int_128_runtime } */
++/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
++
++__int128_t i;
++
++int main()
++{
++  __atomic_store_16(&i, -1, 0);
++  if (i != -1)
++    __builtin_abort();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/builtin-object-size-14.c gcc-4.8.2/gcc/testsuite/gcc.dg/builtin-object-size-14.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/builtin-object-size-14.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/builtin-object-size-14.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,28 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++extern void abort (void);
++extern char *strncpy(char *, const char *, __SIZE_TYPE__);
++
++union u {
++    struct {
++	char vi[8];
++	char pi[16];
++    };
++    char all[8+16+4];
++};
++
++void __attribute__((noinline,noclone))
++f(union u *u)
++{
++  char vi[8+1];
++  __builtin_strncpy(vi, u->vi, sizeof(u->vi));
++  if (__builtin_object_size (u->all, 1) != -1)
++    abort ();
++}
++int main()
++{
++  union u u;
++  f (&u);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/builtin-object-size-8.c gcc-4.8.2/gcc/testsuite/gcc.dg/builtin-object-size-8.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/builtin-object-size-8.c	2012-12-11 14:34:57.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/builtin-object-size-8.c	2014-03-30 20:21:40.704263768 +0000
+@@ -1,4 +1,4 @@
+-/* { dg-do run { xfail *-*-* } } */
++/* { dg-do run } */
+ /* { dg-options "-O2" } */
+ 
+ typedef __SIZE_TYPE__ size_t;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/gomp/pr58809.c gcc-4.8.2/gcc/testsuite/gcc.dg/gomp/pr58809.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/gomp/pr58809.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/gomp/pr58809.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,13 @@
++/* PR middle-end/58809 */
++/* { dg-do compile } */
++/* { dg-options "-fopenmp -O" } */
++
++int i;
++#pragma omp threadprivate (i)
++
++void foo()
++{
++  _Complex int j;
++#pragma omp parallel copyin (i) reduction (&&:j)
++  ;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c	2014-03-30 20:28:17.513930767 +0000
+@@ -0,0 +1,10 @@
++/* { dg-options "-O2 -floop-parallelize-all -floop-nest-optimize" } */
++void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
++{
++  int i;
++  for (i=0; i<sn; i++)
++    b[i]=a[2*i+cas];
++  for (i=0; i<dn; i++)
++    b[sn+i]=a[(2*i+1-cas)];
++}
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/guality/pr59776.c gcc-4.8.2/gcc/testsuite/gcc.dg/guality/pr59776.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/guality/pr59776.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/guality/pr59776.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,29 @@
++/* PR debug/59776 */
++/* { dg-do run } */
++/* { dg-options "-g" } */
++
++#include "../nop.h"
++
++struct S { float f, g; };
++
++__attribute__((noinline, noclone)) void
++foo (struct S *p)
++{
++  struct S s1, s2;			/* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
++  s1 = *p;				/* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
++  s2 = s1;				/* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
++  *(int *) &s2.f = 0;			/* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
++  asm volatile (NOP : : : "memory");	/* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
++  asm volatile (NOP : : : "memory");	/* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
++  s2 = s1;				/* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
++  asm volatile (NOP : : : "memory");	/* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
++  asm volatile (NOP : : : "memory");
++}
++
++int
++main ()
++{
++  struct S x = { 5.0f, 6.0f };
++  foo (&x);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/ipa/pr55260.c gcc-4.8.2/gcc/testsuite/gcc.dg/ipa/pr55260.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/ipa/pr55260.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/ipa/pr55260.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,38 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -fno-inline -fipa-cp-clone"  } */
++
++typedef struct {
++  int *ptr;
++  int len;
++} string;
++typedef struct {
++  string nantstr;
++  int *nant;
++} malv;
++typedef struct {
++  int *nor;
++} list_heads;
++int b;
++list_heads *fn1(string, int *, unsigned);
++void fn2(malv *p1, list_heads *p2, unsigned p3) {
++  string a = p1->nantstr;
++  fn1(a, p1->nant, p3);
++}
++
++void fn3(unsigned p1) { fn2(0, 0, p1); }
++
++list_heads *fn1(string p1, int *p2, unsigned p3) {
++  while (1) {
++    if (p3)
++      fn3(1);
++    if (b)
++      return 0;
++    fn3(1);
++  }
++}
++
++void fn5() {
++  list_heads c;
++  c.nor = 0;
++  fn2(0, &c, 1);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/ipa/pr59610.c gcc-4.8.2/gcc/testsuite/gcc.dg/ipa/pr59610.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/ipa/pr59610.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/ipa/pr59610.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++struct A { int a; };
++extern void *y;
++
++__attribute__((optimize (0))) void
++foo (void *p, struct A x)
++{
++  foo (y, x);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr46309.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr46309.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr46309.c	2012-08-10 08:29:29.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr46309.c	2014-03-30 20:21:40.704263768 +0000
+@@ -1,5 +1,5 @@
+ /* PR tree-optimization/46309 */
+-/* { dg-do compile } */
++/* { dg-do compile { target { ! { cris*-*-* } } } } */
+ /* { dg-options "-O2 -fdump-tree-reassoc-details" } */
+ /* The transformation depends on BRANCH_COST being greater than 1
+    (see the notes in the PR), so try to force that.  */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr53060.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr53060.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr53060.c	2012-10-12 18:40:54.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr53060.c	2014-03-30 20:21:40.704263768 +0000
+@@ -25,3 +25,4 @@
+ 
+ /* Ignore a warning that is irrelevant to the purpose of this test.  */
+ /* { dg-prune-output ".*GCC vector returned by reference.*" } */
++/* { dg-prune-output "changes the ABI" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr56824.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr56824.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr56824.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr56824.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,18 @@
++/* PR preprocessor/56824 */
++/* { dg-do compile } */
++/* { dg-options "-Waggregate-return" } */
++
++struct S { int i; };
++struct S foo (void);
++
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Waggregate-return"
++
++int
++main ()
++{
++  foo ();
++  return 0;
++}
++
++#pragma GCC diagnostic pop
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr57518.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr57518.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr57518.c	2013-06-20 21:15:52.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr57518.c	2014-03-30 20:21:40.704263768 +0000
+@@ -1,8 +1,8 @@
+-/* PR rtl-optimization/57130 */
++/* PR rtl-optimization/57518 */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-rtl-ira" } */
+-/* { dg-final { scan-rtl-dump-not "REG_EQUIV.*mem.*\"ip\"" "ira" } } */
++/* { dg-final { scan-rtl-dump-not "REG_EQUIV\[^\n\]*mem\[^\n\]*\"ip\".*subreg" "ira" } } */
+ 
+ char ip[10];
+ int total;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58668.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr58668.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58668.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58668.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,25 @@
++/* PR rtl-optimization/58668 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
++
++void *fn1 (void *);
++void *fn2 (void *, const char *);
++void fn3 (void *);
++void fn4 (void *, int);
++
++void *
++test (void *x)
++{
++  void *a, *b;
++  if (!(a = fn1 (x)))
++    return (void *) 0;
++  if (!(b = fn2 (a, "w")))
++    {
++      fn3 (a);
++      return (void *) 0;
++    }
++  fn3 (a);
++  fn4 (b, 1);
++  return b;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,24 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
++
++/* Type that matches the 'p' constraint.  */
++#define TYPE void *
++
++static inline
++void bar (TYPE *r)
++{
++  TYPE t;
++  __asm__ ("" : "=&p" (t), "=p" (*r));
++}
++
++void
++foo (int n, TYPE *x, TYPE *y)
++{
++  if (n == 0)
++    bar (x);
++  else
++    bar (y);
++}
++
++/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
++/* { dg-final { cleanup-tree-dump "pre" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59011.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr59011.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59011.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr59011.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,22 @@
++/* PR middle-end/59011 */
++/* { dg-do compile } */
++/* { dg-options "-std=gnu99" } */
++
++void
++foo (int m)
++{
++  int a[m];
++  void
++  bar (void)
++  {
++    {
++      int
++      baz (void)
++      {
++	return a[0];
++      }
++    }
++    a[0] = 42;
++  }
++  bar ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59351.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr59351.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59351.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr59351.c	2014-03-30 20:21:40.704263768 +0000
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-std=c99 -Wpedantic" } */
++
++unsigned int
++foo (void)
++{
++  return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59827.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr59827.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59827.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr59827.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,15 @@
++/* PR middle-end/59827 */
++/* { dg-do compile } */
++
++int
++foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
++{
++  return p[0][0];
++}
++
++void
++bar (void)
++{
++  int p[2][1];
++  foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59860.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr59860.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr59860.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr59860.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
++strcat (char *__restrict __dest, const char *__restrict __src)
++{
++  return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
++}
++static char raw_decode;
++void foo (char **argv, char *outfilename)
++{
++  if (**argv == 'r')
++    raw_decode = 1;
++  strcat (outfilename, raw_decode ? ".raw" : ".wav");
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr60485-1.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr60485-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr60485-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr60485-1.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,29 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++extern void abort (void);
++struct S {
++    int *i[4];
++    int *p1;
++    int *p2;
++    int *p3;
++    int *p4;
++};
++int **b;
++int main()
++{
++  int i = 1;
++  struct S s;
++  s.p3 = &i;
++  int **p;
++  if (b)
++    p = b;
++  else
++    p = &s.i[2];
++  p += 4;
++  if (!b)
++    **p = 0;
++  if (i != 0)
++    abort ();
++  return i;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr60485-2.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr60485-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr60485-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr60485-2.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,38 @@
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++extern void abort (void);
++struct S {
++    int *i[4];
++    int *p1;
++    int *p2;
++    int *p3;
++    int *p4;
++    int **x;
++};
++int **b;
++int main()
++{
++  int i = 1;
++  struct S s;
++  s.p3 = &i;
++  int **p;
++  if (b)
++    p = b;
++  else
++    p = &s.i[2];
++  p += 4;
++  /* prevert fowrprop from creating an offsetted sd constraint and
++     preserve the pointer offsetting constraint.  */
++  s.x = p;
++  p = s.x;
++  if (!b)
++    {
++      int *z = *p;
++      /* z should point to i (and non-local/escaped).  */
++      *z = 0;
++    }
++  if (i != 0)
++    abort ();
++  return i;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-14gf.c gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-14gf.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-14gf.c	2011-09-27 16:15:46.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-14gf.c	2014-03-30 20:21:40.707597210 +0000
+@@ -11,14 +11,14 @@
+    memcpy.  */
+ /* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 2 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 3 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "mempcpy \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "mempcpy \\(" 2 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */
+ /* { dg-final { cleanup-tree-dump "strlen" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-1f.c gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-1f.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-1f.c	2011-09-27 16:15:46.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-1f.c	2014-03-30 20:21:40.707597210 +0000
+@@ -6,13 +6,13 @@
+ #include "strlenopt-1.c"
+ 
+ /* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 3 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+ /* { dg-final { cleanup-tree-dump "strlen" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-4.c gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-4.c	2011-10-24 20:14:35.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-4.c	2014-03-30 20:21:40.707597210 +0000
+@@ -66,16 +66,10 @@
+   return 0;
+ }
+ 
+-/* For targets providing a movstr pattern strcat is already decomposed
+-   into strlen + strcpy by fold_builtin_strcat.  */
+-
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
+-/* { dg-final { scan-tree-dump-times "strlen \\(" 6 "strlen" { target s390*-*-* } } } */
++/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
+-/* { dg-final { scan-tree-dump-times "strcpy \\(" 6 "strlen" { target s390*-*-* } } } */
+-/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
+-/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" { target s390*-*-* } } } */
++/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
+ /* { dg-final { cleanup-tree-dump "strlen" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-4gf.c gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-4gf.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/strlenopt-4gf.c	2011-09-27 16:15:46.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/strlenopt-4gf.c	2014-03-30 20:21:40.707597210 +0000
+@@ -7,13 +7,13 @@
+ #include "strlenopt-4.c"
+ 
+ /* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 4 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 5 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
+ /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
+-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
++/* { dg-final { scan-tree-dump-times "stpcpy \\(" 5 "strlen" } } */
+ /* { dg-final { cleanup-tree-dump "strlen" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-1.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-1.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,37 @@
++/* { dg-do run } */
++
++extern void abort (void) __attribute__((noreturn));
++
++union setconflict
++{
++  int a[20];
++  long b[10];
++};
++
++int
++main ()
++{
++  int sum = 0;
++  {
++    union setconflict a;
++    int *c;
++    c = a.a;
++    asm ("": "=r" (c):"0" (c));
++    *c = 0;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++  {
++    union setconflict a;
++    long *c;
++    c = a.b;
++    asm ("": "=r" (c):"0" (c));
++    *c = 1;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++
++  if (sum != 1)
++    abort();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-2.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-2.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,31 @@
++/* { dg-do run } */
++
++extern void abort (void) __attribute__((noreturn));
++
++int
++main ()
++{
++  int sum = 0;
++  {
++    int a[20];
++    int *c;
++    c = a;
++    asm ("": "=r" (c):"0" (c));
++    *c = 0;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++  {
++    long b[10];
++    long *c;
++    c = b;
++    asm ("": "=r" (c):"0" (c));
++    *c = 1;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++
++  if (sum != 1)
++    abort();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-3.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57425-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57425-3.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,31 @@
++/* { dg-do run } */
++
++extern void abort (void) __attribute__((noreturn));
++
++int
++main ()
++{
++  int sum = 0;
++  {
++    long a[20];
++    long *c;
++    c = a;
++    asm ("": "=r" (c):"0" (c));
++    *c = 0;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++  {
++    long long b[10];
++    long long *c;
++    c = b;
++    asm ("": "=r" (c):"0" (c));
++    *c = 1;
++    asm ("": "=r" (c):"0" (c));
++    sum += *c;
++  }
++
++  if (sum != 1)
++    abort();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,58 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++int i, j, *pj = &j, **ppj = &pj;
++int x, *px = &x;
++
++short s, *ps = &s, k;
++
++unsigned short u, *pu = &u, **ppu = &pu;
++
++char c, *pc = &c;
++
++unsigned char v = 48;
++
++static int
++bar (int p)
++{
++  p = k;
++  *px = **ppu = i;
++  *ppj = &p;
++  if (**ppj)
++    *pj = p;
++  return p;
++}
++
++void __attribute__((noinline))
++foo ()
++{
++  for (; i <= 3; i++)
++    for (; j; j--);
++
++  u ^= bar (*pj);
++
++  for (k = 1; k >= 0; k--)
++    {
++      int l;
++      bar (0);
++      for (l = 1; l < 5; l++)
++	{
++	  int m;
++	  for (m = 6; m; m--)
++	    {
++	      v--;
++	      *ps = *pc;
++	    }
++	}
++    }
++}
++
++int
++main ()
++{
++  foo ();
++  if (v != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57517.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57517.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57517.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57517.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++
++int x[1024], y[1024], z[1024], w[1024];
++void foo (void)
++{
++  int i;
++  for (i = 1; i < 1024; ++i)
++    {
++      int a = x[i];
++      int b = y[i];
++      int c = x[i-1];
++      int d = y[i-1];
++      if (w[i])
++	z[i] = (a + b) + (c + d);
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57569.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57569.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57569.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57569.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,37 @@
++/* { dg-do run } */
++
++extern void abort (void) __attribute__((noreturn));
++
++struct S { int f0; } a; 
++
++int b, e, *d = &b, f;
++
++void 
++fn1 ()
++{
++  int **g[9][6];
++  int ***h = &g[6][3];
++  for (; e < 9; e++) {
++    f = 0;
++    for (; f < 6; f++)
++      g[e][f] = &d;
++  }
++  ***h = 0;
++}
++
++void
++fn2 ()
++{
++  fn1 ();
++  struct S c[4][10] = {};
++  a = c[3][9];
++}
++
++int
++main ()
++{
++  fn2 ();
++  if (a.f0 != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,107 @@
++/* { dg-options "-mlong-calls" { target mips*-*-* } } */
++
++typedef unsigned char u8;
++typedef unsigned short u16;
++typedef unsigned int __kernel_size_t;
++typedef __kernel_size_t size_t;
++struct list_head {
++ struct list_head *next;
++};
++
++struct dmx_ts_feed {
++ int is_filtering;
++};
++struct dmx_section_feed {
++ u16 secbufp;
++ u16 seclen;
++ u16 tsfeedp;
++};
++
++typedef int (*dmx_ts_cb) (
++	const u8 * buffer1,
++      size_t buffer1_length,
++      const u8 * buffer2,
++      size_t buffer2_length
++);
++
++struct dvb_demux_feed {
++ union {
++  struct dmx_ts_feed ts;
++  struct dmx_section_feed sec;
++ } feed;
++ union {
++  dmx_ts_cb ts;
++ } cb;
++ int type;
++ u16 pid;
++ int ts_type;
++ struct list_head list_head;
++};
++
++struct dvb_demux {
++ int (*stop_feed)(struct dvb_demux_feed *feed);
++ struct list_head feed_list;
++};
++
++
++static
++inline
++__attribute__((always_inline))
++u8
++payload(const u8 *tsp)
++{
++ if (tsp[3] & 0x20) {
++   return 184 - 1 - tsp[4];
++ }
++ return 184;
++}
++
++static
++inline
++__attribute__((always_inline))
++int
++dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
++{
++ int count = payload(buf);
++ int p;
++ if (count == 0)
++  return -1;
++ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
++}
++
++static
++inline
++__attribute__((always_inline))
++void
++dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
++{
++ switch (feed->type) {
++ case 0:
++  if (feed->ts_type & 1) {
++    dvb_dmx_swfilter_payload(feed, buf);
++  }
++  if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
++   feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
++ }
++}
++
++static
++void
++dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
++{
++ struct dvb_demux_feed *feed;
++ int dvr_done = 0;
++
++ for (feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = ((&demux->feed_list)->next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );}); __builtin_prefetch(feed->list_head.next), &feed->list_head != (&demux->feed_list); feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = (feed->list_head.next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );})) {
++  if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
++   dvb_dmx_swfilter_packet_type(feed, buf);
++  else if (feed->pid == 0x2000)
++   feed->cb.ts(buf, 188, ((void *)0), 0);
++ }
++}
++void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
++{
++ while (count--) {
++   dvb_dmx_swfilter_packet(demux, buf);
++ }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-1.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-1.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,51 @@
++/* { dg-do run } */
++/* { dg-additional-options "-fstrict-overflow" } */
++
++extern void abort (void);
++
++int a, b, c, d, e, f, g, h = 1, i;
++
++int foo (int p)
++{
++  return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
++}
++
++int *bar ()
++{
++  int j; 
++  i = h ? 0 : 1 % h;
++  for (j = 0; j < 1; j++)
++    for (d = 0; d; d++)
++      for (e = 1; e;)
++	return 0;
++  return 0;
++}
++
++int baz ()
++{
++  for (; b >= 0; b--)
++    for (c = 1; c >= 0; c--)
++      {
++	int *k = &c;
++	for (;;)
++	  {
++	    for (f = 0; f < 1; f++)
++	      {
++		g = foo (*k);
++		bar ();
++	      }
++	    if (*k)
++	      break;
++	    return 0;
++	  }
++      }
++  return 0;
++}
++
++int main ()
++{
++  baz ();
++  if (b != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-2.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-2.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,34 @@
++/* { dg-do run } */
++/* { dg-additional-options "-fstrict-overflow" } */
++
++int a, b, d, e, f, *g, h, i;
++volatile int c;
++
++char foo (unsigned char p)
++{
++  return p + 1;
++}
++
++int bar () 
++{
++  for (h = 0; h < 3; h = foo (h))
++    {
++      c;
++      for (f = 0; f < 1; f++)
++	{
++	  i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
++	  if (e)
++	    for (; d;)
++	      b = 0;
++	  else
++	    g = 0;
++	}
++    }
++  return 0;
++}
++
++int main ()
++{
++  bar ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-3.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58143-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58143-3.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,18 @@
++/* { dg-do run } */
++/* { dg-additional-options "-fstrict-overflow" } */
++
++int a, b, c, d, e;
++
++int
++main ()
++{
++  for (b = 4; b > -30; b--)
++    for (; c;)
++      for (;;)
++	{
++	  e = a > __INT_MAX__ - b;
++	  if (d)
++	    break;
++	}
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,12 @@
++/* { dg-do run } */
++
++int a, c;
++
++int main ()
++{
++  int e = -1;
++  short d = (c <= 0) ^ e;
++  if ((unsigned int) a - (a || d) <= (unsigned int) a)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,42 @@
++/* { dg-do run } */
++/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
++
++extern void abort (void);
++
++int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r; 
++char k;
++
++static int
++foo ()
++{
++  char *p = &k;
++
++  for (; d; d++)
++    if (i)
++      h = 0;
++    else
++      h = c || (r = 0);
++
++  for (f = 0; f < 2; f++)
++    {
++      unsigned int q;
++      *l = 0;
++      if (n)
++	*m = g;
++      if (g)
++	o = 0;
++      for (q = -8; q >= 5; q++)
++	(*p)--;
++    }
++
++  return 0;
++}
++
++int
++main ()
++{
++  foo ();
++  if (j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[0]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ^ (k & 15)] != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58941.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58941.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58941.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58941.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,33 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++typedef struct {
++    int msgLength;
++    unsigned char data[1000];
++} SMsg;
++
++typedef struct {
++    int dummy;
++    int d[0];
++} SData;
++
++int condition = 3;
++
++int main()
++{
++  SMsg msg;
++  SData *pData = (SData*)(msg.data);
++  unsigned int i = 0;
++  for (i = 0; i < 1; i++)
++    {
++      pData->d[i] = 0;
++      if(condition & 1)
++	pData->d[i] |= 0x55;
++      if(condition & 2)
++	pData->d[i] |= 0xaa;
++    }
++  if (pData->d[0] != 0xff)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58956.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58956.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58956.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58956.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,30 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++struct S
++{
++  int f0;
++} a = {1}, b, g, *c = &b, **f = &c;
++
++int *d, **e = &d, h;
++
++struct S
++foo ()
++{
++  *e = &h;
++  if (!d) 
++    __builtin_unreachable ();
++  *f = &g;
++  return a;
++}
++
++int
++main ()
++{
++  struct S *i = c;
++  *i = foo ();
++  if (b.f0 != 1)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59047.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59047.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59047.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59047.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++struct
++{
++  int f0;
++  int f1:1;
++  int f2:2;
++} a = {0, 0, 1};
++
++int b, c, *d, e, f;
++
++int
++fn1 ()
++{
++  for (; b < 1; ++b)
++    {
++      for (e = 0; e < 1; e = 1)
++	{
++	  int **g = &d;
++	  *g = &c;
++	} 
++      *d = 0;
++      f = a.f1;
++      if (f)
++	return 0;
++    }
++  return 0;
++}
++
++int
++main ()
++{
++  fn1 ();
++  if (b != 1)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59139.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59139.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59139.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59139.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++
++int a, b, c, d, e;
++int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
++
++void fn2()
++{
++  c = 0;
++  for (;; c = (unsigned short)c)
++    {
++      b = 2;
++      for (; b; b = a)
++	{
++	  e = fn1(2, c && 1);
++	  d = c == 0 ? e : c;
++	  if (d)
++	    return;
++	}
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59164.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59164.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59164.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59164.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,21 @@
++/* { dg-do compile } */
++
++int a, d, e;
++long b[10];
++int c[10][8];
++
++int fn1(p1)
++{ 
++  return 1 >> p1; 
++}
++
++void fn2(void)
++{
++  int f;
++  for (a=1; a <= 4; a++)
++    {
++      f = fn1(0 < c[a][0]);
++      if (f || d)
++	e = b[a] = 1;
++    }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59288.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59288.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59288.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59288.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,9 @@
++/* { dg-do compile } */
++
++void
++baz (int *d)
++{
++  long int i, j, k;
++  for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
++    d[i] = j ^ (i * 3) ^ (2 * k + 2);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59330.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59330.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59330.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59330.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,17 @@
++/* { dg-do run } */
++
++void free(void *ptr)
++{
++}
++
++void *foo(void)
++{
++  return 0;
++}
++
++int main(void)
++{
++  void *p = foo();
++  free(p);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59715.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59715.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59715.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59715.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,21 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++int a = 2, b;
++
++int
++main ()
++{
++  int c;
++  if (!b)
++    {
++      b = a;
++      c = a == 0 ? 1 : 1 % a;
++      if (c)
++	b = 0;
++    }
++  if (b != 0)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59891.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59891.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59891.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59891.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,9 @@
++/* PR c/59891 */
++
++unsigned int a;
++
++int
++main ()
++{
++  return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59903.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59903.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr59903.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr59903.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,56 @@
++/* { dg-do compile } */
++
++int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
++
++struct S0
++{
++  int f0;
++  int f1;
++  int f2;
++  int f3;
++} j;
++
++static int
++fn1 (int p1)
++{
++  return p1 || ((p1 > 0) > (e << 1)); 
++}
++
++static struct S0
++fn2 (struct S0 p1)
++{
++  char s;
++  struct S0 t = {0,0,0,0};
++  int u = 2;
++  for (;;)
++    {
++      if (i[0])
++	break;
++      for (m = 0; m < 4; m++)
++	for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
++	  {
++	    j = t;
++	    t.f3 = i[p1.f0];
++	    o = b || 1 >> b ? 0 : a < 0;
++	    q = 1 % d;
++	    if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
++	      j.f3 |= p % 2;
++	    s = j.f3 > 0 ? j.f3 : j.f3 << 1;
++	    r = l = s && p1.f1 * c;
++	    h = p1.f1;
++	  }
++    }
++  return p1;
++}
++
++int
++main ()
++{
++  for (;f;)
++    {
++      struct S0 v = {0,0,0,0};
++      fn2 (v);
++      j.f3 = 0;
++    }
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr60115.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr60115.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr60115.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr60115.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,14 @@
++/* { dg-do run } */
++
++int a, b[2];
++
++int
++main ()
++{
++lbl:
++  for (; a; a--)
++    if (b[10000])
++      goto lbl;
++
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr60183.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr60183.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr60183.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr60183.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,38 @@
++/* { dg-do run } */
++
++/* Large so an out-of-bound read will crash.  */
++unsigned char c[0x30001] = { 1 };
++int j = 2;
++
++static void
++foo (unsigned long *x, unsigned char *y)
++{
++  int i;
++  unsigned long w = x[0];
++  for (i = 0; i < j; i++)
++    {
++      w += *y;
++      y += 0x10000;
++      w += *y;
++      y += 0x10000;
++    }
++  x[1] = w;
++}
++
++__attribute__ ((noinline, noclone)) void
++bar (unsigned long *x)
++{
++  foo (x, c);
++}
++
++int
++main ()
++{
++  unsigned long a[2] = { 0, -1UL };
++  asm volatile (""::"r" (c):"memory");
++  c[0] = 0;
++  bar (a);
++  if (a[1] != 0)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c gcc-4.8.2/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c	2014-03-30 20:21:40.707597210 +0000
+@@ -0,0 +1,14 @@
++/* { dg-do run } */
++/* { dg-options "-O3" } */
++
++int a, c, e[5][2]; 
++unsigned int d;
++
++int
++main ()
++{
++  for (d = 0; d < 2; d++)
++    if (a ? 0 : e[c + 3][d] & e[c + 4][d])
++      break;
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c gcc-4.8.2/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,18 @@
++/* { dg-do run } */
++/* { dg-options "-O3 -fdump-tree-pcom-details" } */
++
++int b, f, d[5][2];
++unsigned int c;
++
++int
++main ()
++{
++  for (c = 0; c < 2; c++)
++    if (d[b + 3][c] & d[b + 4][c])
++      if (f)
++	break;
++  return 0;
++}
++
++/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
++/* { dg-final { cleanup-tree-dump "pcom" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/vect/pr60276.c gcc-4.8.2/gcc/testsuite/gcc.dg/vect/pr60276.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/vect/pr60276.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/vect/pr60276.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,52 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++static void 
++foo (int *out, const int *lp, unsigned samples)
++{
++  int x, target;
++  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
++    {
++      out[x] = lp[target];
++      out[x - 1] = out[x - 2] + out[x];
++    }
++}
++
++static void 
++foo_novec (int *out, const int *lp, unsigned samples)
++{
++  int x, target;
++  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
++    {
++      out[x] = lp[target];
++      out[x - 1] = out[x - 2] + out[x];
++      __asm__ volatile ("" : : : "memory");
++    }
++}
++
++int main(void)
++{
++  const int lp[25] = {
++      0, 2, 4, 6, 8,
++      10, 12, 14, 16,
++      18, 20, 22, 24,
++      26, 28, 30, 32,
++      34, 36, 38, 40,
++      42, 44, 46, 48,
++  };
++  int out[49] = {0};
++  int out2[49] = {0};
++  int s;
++
++  foo (out + 2, lp + 1, 48);
++  foo_novec (out2 + 2, lp + 1, 48);
++
++  for (s = 0; s < 49; s++)
++    if (out[s] != out2[s])
++      abort ();
++
++  return 0;
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/vect/pr60382.c gcc-4.8.2/gcc/testsuite/gcc.dg/vect/pr60382.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/vect/pr60382.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.dg/vect/pr60382.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,32 @@
++#include "tree-vect.h"
++
++int a, b, c, e, f;
++
++void
++foo ()
++{
++  for (b = 0; b < 3; b++)
++    if (e)
++      {
++	for (c = 0; c < 4; c++)
++	  {
++	    if (b)
++	      continue;
++	    f = 1;
++	    for (a = 0; a < 2; a++)
++	      f |= 1;
++	  }
++	for (;;)
++	  ;
++      }
++}
++
++int
++main ()
++{
++  check_vect ();
++  foo ();
++  return 0;
++}
++
++/* { dg-final { cleanup-tree-dump "vect" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c gcc-4.8.2/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c	2012-10-23 17:13:27.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,7 +1,13 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+ 
+-#include "../../../config/aarch64/arm_neon.h"
++#include <arm_neon.h>
++
++/* Used to force a variable to a SIMD register.  */
++#define force_simd(V1)   asm volatile ("mov %d0, %1.d[0]"	\
++	   : "=w"(V1)						\
++	   : "w"(V1)						\
++	   : /* No clobbers */);
+ 
+ /* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
+ 
+@@ -31,7 +37,12 @@
+ uint64x1_t
+ test_vceqd_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vceqd_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vceqd_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
+@@ -39,7 +50,11 @@
+ uint64x1_t
+ test_vceqzd_s64 (int64x1_t a)
+ {
+-  return vceqzd_s64 (a);
++  uint64x1_t res;
++  force_simd (a);
++  res = vceqzd_s64 (a);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
+@@ -47,21 +62,36 @@
+ uint64x1_t
+ test_vcged_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vcged_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcged_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ uint64x1_t
+ test_vcled_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vcled_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcled_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
++/* Idiom recognition will cause this testcase not to generate
++   the expected cmge instruction, so do not check for it.  */
+ 
+ uint64x1_t
+ test_vcgezd_s64 (int64x1_t a)
+ {
+-  return vcgezd_s64 (a);
++  uint64x1_t res;
++  force_simd (a);
++  res = vcgezd_s64 (a);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
+@@ -69,7 +99,12 @@
+ uint64x1_t
+ test_vcged_u64 (uint64x1_t a, uint64x1_t b)
+ {
+-  return vcged_u64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcged_u64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
+@@ -77,13 +112,23 @@
+ uint64x1_t
+ test_vcgtd_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vcgtd_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcgtd_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ uint64x1_t
+ test_vcltd_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vcltd_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcltd_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
+@@ -91,7 +136,11 @@
+ uint64x1_t
+ test_vcgtzd_s64 (int64x1_t a)
+ {
+-  return vcgtzd_s64 (a);
++  uint64x1_t res;
++  force_simd (a);
++  res = vcgtzd_s64 (a);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
+@@ -99,7 +148,12 @@
+ uint64x1_t
+ test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
+ {
+-  return vcgtd_u64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vcgtd_u64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
+@@ -107,15 +161,24 @@
+ uint64x1_t
+ test_vclezd_s64 (int64x1_t a)
+ {
+-  return vclezd_s64 (a);
++  uint64x1_t res;
++  force_simd (a);
++  res = vclezd_s64 (a);
++  force_simd (res);
++  return res;
+ }
+ 
+-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
++/* Idiom recognition will cause this testcase not to generate
++   the expected cmlt instruction, so do not check for it.  */
+ 
+ uint64x1_t
+ test_vcltzd_s64 (int64x1_t a)
+ {
+-  return vcltzd_s64 (a);
++  uint64x1_t res;
++  force_simd (a);
++  res = vcltzd_s64 (a);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
+@@ -179,13 +242,23 @@
+ int64x1_t
+ test_vtst_s64 (int64x1_t a, int64x1_t b)
+ {
+-  return vtstd_s64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vtstd_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ uint64x1_t
+ test_vtst_u64 (uint64x1_t a, uint64x1_t b)
+ {
+-  return vtstd_u64 (a, b);
++  uint64x1_t res;
++  force_simd (a);
++  force_simd (b);
++  res = vtstd_s64 (a, b);
++  force_simd (res);
++  return res;
+ }
+ 
+ /* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
+@@ -722,7 +795,10 @@
+   return vrshld_u64 (a, b);
+ }
+ 
+-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
++/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
++   so we cannot check scan-assembler-times.  */
++
++/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
+ 
+ int64x1_t
+ test_vshrd_n_s64 (int64x1_t a)
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,25 @@
++/* Test the `vst1Q_laneu64' ARM Neon intrinsic.  */
++
++/* Detect ICE in the case of unaligned memory address.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-add-options arm_neon } */
++
++#include "arm_neon.h"
++
++unsigned char dummy_store[1000];
++
++void
++foo (char* addr)
++{
++  uint8x16_t vdata = vld1q_u8 (addr);
++  vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
++}
++
++uint64_t
++bar (uint64x2_t vdata)
++{
++  vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
++  return vgetq_lane_u64 (vdata, 0);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/pr54300.C gcc-4.8.2/gcc/testsuite/gcc.target/arm/pr54300.C
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/pr54300.C	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/pr54300.C	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,61 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++#include <stdlib.h>
++
++struct __attribute__ ((aligned(8))) _v16u8_ {
++  uint8x16_t val;
++  _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
++  operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
++};
++typedef struct _v16u8_ v16u8;
++
++struct __attribute__ ((aligned(4))) _v8u8_ {
++  uint8x8_t val;
++  _v8u8_( const uint8x8_t &src) { val = src; }
++  operator int16x4_t () const { return vreinterpret_s16_u8(val); }
++};
++typedef struct _v8u8_ v8u8;
++
++typedef v16u8                v8i16;
++typedef int32x4_t            v4i32;
++typedef const short         cv1i16;
++typedef const unsigned char cv1u8;
++typedef const v8i16         cv8i16;
++
++static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
++
++static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
++  return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
++}
++static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
++  return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
++}
++
++void __attribute__((noinline))
++test(unsigned short *_Inp, int32_t *_Out,
++     unsigned int s1v, unsigned int dv0,
++     unsigned int smask_v)
++{
++  int32x4_t c = vdupq_n_s32(0);
++
++  for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
++    {
++      int32x4_t s;
++      s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
++      c = vaddq_s32( c, s );
++    }
++  vst1q_s32( _Out, c );
++}
++
++main()
++{
++  unsigned short a[4] = {1, 2, 3, 4};
++  int32_t b[4] = {0, 0, 0, 0};
++  test(a, b, 1, 1, ~0);
++  if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
++    abort();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/pr59826.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/pr59826.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/pr59826.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/pr59826.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,35 @@
++/* { dg-do compile } */
++/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" }  */
++
++typedef struct genxWriter_rec * genxWriter;
++typedef unsigned char * utf8;
++typedef const unsigned char * constUtf8;
++
++int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
++{
++  int problems = 0;
++  constUtf8 last = in;
++
++  while (*in)
++  {
++    int c = genxNextUnicodeChar(&in);
++    if (c == -1)
++    {
++      problems++;
++      last = in;
++      continue;
++    }
++
++    if (!isXMLChar(w, c))
++    {
++      problems++;
++      last = in;
++      continue;
++    }
++
++    while (last < in)
++      *out++ = *last++;
++  }
++  *out = 0;
++  return problems;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,29 @@
++/* { dg-do compile } */
++/* { dg-options "-g -fPIC" } */
++
++void *v;
++void a (void *x) { }
++void b (void) { }
++                       /* line 7.  */
++int                    /* line 8.  */
++main (int argc)        /* line 9.  */
++{                      /* line 10.  */
++  if (argc == 12345)   /* line 11.  */
++    {
++      a (v);
++      return 1;
++    }
++  b ();
++
++  return 0;
++}
++
++/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
++/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
++/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
++
++/* The loc at the start of the prologue.  */
++/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
++
++/* The loc at the end of the prologue, with the first user line.  */
++/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_thumb1_ok } */
++/* { dg-options "-mthumb -fpic -mpic-register=9" } */
++
++int g_test;
++
++int
++foo (int par)
++{
++    g_test = par;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_thumb1_ok } */
++/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
++
++int g_test;
++
++int
++foo (int par)
++{
++    g_test = par;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/vrinta-ce.c gcc-4.8.2/gcc/testsuite/gcc.target/arm/vrinta-ce.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/vrinta-ce.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/vrinta-ce.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_v8_vfp_ok } */
++/* { dg-options "-O2 -marm -march=armv8-a" } */
++/* { dg-add-options arm_v8_vfp } */
++
++double foo (double a)
++{
++  if (a > 3.0)
++    return  __builtin_round (a);
++
++  return 0.0;
++}
++
++/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c	2008-08-28 19:36:58.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c	2014-03-30 20:21:40.710930653 +0000
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+   union256d u;
+-  double e [4] __attribute__ ((aligned (8)))  = {41124.234,2344.2354,8653.65635,856.43576};
++  double e [4] __attribute__ ((aligned (32)))  = {41124.234,2344.2354,8653.65635,856.43576};
+ 
+   u.x = test (e);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c	2008-08-28 19:36:58.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c	2014-03-30 20:21:40.710930653 +0000
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+   union256d u;
+-  double e [4] __attribute__ ((aligned (8))) = {0.0};
++  double e [4] __attribute__ ((aligned (32))) = {0.0};
+ 
+   u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c	2011-07-22 16:04:02.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target lp64 } } */
+-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
++/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
+ 
+ typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c	2011-07-22 16:04:02.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target lp64 } } */
+-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
++/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
+ 
+ typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c	2011-07-22 16:04:02.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target lp64 } } */
+-/* { dg-options "-O0 -mavx -mabi=ms -mtune=generic -dp" } */
++/* { dg-options "-O0 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
+ 
+ typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/nest-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/nest-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/nest-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/nest-1.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target llp64 } } */
++/* { dg-options "" } */
++
++void foo (int i)
++{
++  void nested (void)
++  {
++    char arr[(1U << 31) + 4U];
++    arr[i] = 0;
++  }
++
++  nested ();
++}
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c	2007-08-14 14:39:24.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+-/* { dg-final { scan-assembler-times "cmp" 4 } } */
++/* { dg-final { scan-assembler-not "cmp" } } */
+ 
+ extern void abort (void);
+ int c;
+@@ -34,39 +34,10 @@
+ }
+ #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
+ 
+-#define MINUSCC(T, t)	\
+-T minuscc##t (T a, T b)	\
+-{	\
+-  T difference = a - b;	\
+-  if (difference > a)	\
+-    abort ();		\
+-  return difference;	\
+-}
+-
+-#define DECCC(T, t)	\
+-T deccc##t (T a, T b)	\
+-{	\
+-  T difference = a - b;	\
+-  if (difference > a)	\
+-    c --;		\
+-  return difference;	\
+-}
+-
+-#define MINUSCCONLY(T, t)	\
+-void minuscconly##t (T a, T b)	\
+-{	\
+-  T difference = a - b;	\
+-  if (difference > a)	\
+-    abort ();		\
+-}
+-
+ #define TEST(T, t)	\
+   PLUSCC(T, t)		\
+   PLUSCCONLY(T, t)	\
+-  INCCC(T, t)		\
+-  MINUSCC(T, t)		\
+-  MINUSCCONLY(T, t)	\
+-  DECCC(T, t)
++  INCCC(T, t)
+ 
+ TEST (unsigned long,  l)
+ TEST (unsigned int,   i)
+@@ -84,14 +55,3 @@
+ 
+ PLUSCCZEXT(a)
+ PLUSCCZEXT(b)
+-
+-#define MINUSCCZEXT	\
+-unsigned long minuscczext (unsigned int a, unsigned int b)	\
+-{	\
+-  unsigned int difference = a - b;	\
+-  if (difference > a)		\
+-    abort ();			\
+-  return difference;		\
+-}
+-
+-MINUSCCZEXT
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr39162.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr39162.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr39162.c	2012-02-27 19:18:23.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr39162.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,11 +1,14 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
++/* { dg-prune-output "ABI for passing parameters" } */
++/* { dg-options "-O2 -msse2 -mno-avx" } */
+ /* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
+ 
+ typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
+ 
+-__m256i
++extern __m256i y;
++
++void
+ bar (__m256i x) /* { dg-warning "AVX" "" } */
+ {
+-  return x;
++  y = x;
+ }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43546.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43546.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43546.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43546.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,12 @@
++/* PR target/43546 */
++/* { dg-do compile } */
++/* { dg-options "-O1" } */
++/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
++
++extern void bar (double);
++
++void
++foo (void)
++{
++  bar (1.0);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43662.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43662.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43662.c	2011-07-22 16:04:02.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43662.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile { target lp64 } } */
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -maccumulate-outgoing-args" } */
+ 
+ void __attribute__ ((ms_abi)) foo (void)
+ {
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43869.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43869.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr43869.c	2011-07-22 16:04:02.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr43869.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,4 +1,5 @@
+ /* { dg-do compile { target lp64 } } */
++/* { dg-options "-maccumulate-outgoing-args" } */
+ 
+ int __attribute__((__noinline__))
+ bugged(float f1, float f2, float f3, float f4,
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr54694.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr54694.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr54694.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr54694.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++register void *hfp __asm__("%ebp");	/* { dg-message "note: for" } */
++
++extern void g(void *);
++
++void f(int x)			/* { dg-error "frame pointer required" } */
++{
++  g(__builtin_alloca(x));
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr57003.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr57003.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr57003.c	2013-04-25 21:50:26.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr57003.c	2014-03-30 20:21:40.710930653 +0000
+@@ -1,6 +1,6 @@
+ /* PR rtl-optimization/57003 */
+ /* { dg-do run } */
+-/* { dg-options "-O2" } */
++/* { dg-options "-O2 -maccumulate-outgoing-args" } */
+ 
+ #define N 2001
+ unsigned short *b, *c, *d;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr58137.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr58137.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr58137.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr58137.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,33 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -mavx2" } */
++
++typedef unsigned int U32;
++
++struct sv {
++  void* sv_any;
++  U32 sv_refcnt;
++  U32 sv_flags;
++};
++typedef struct sv SV;
++
++struct xrv {
++  SV * xrv_rv;
++};
++typedef struct xrv XRV;
++
++extern XRV * PL_xrv_root;
++
++void
++more_xrv (void)
++{
++  register XRV* xrv;
++  register XRV* xrvend;
++  xrv = PL_xrv_root;
++  xrvend = &xrv[200 / sizeof (XRV) - 1];
++  while (xrv < xrvend)
++  {
++    xrv->xrv_rv = (SV*)(xrv + 1);
++    xrv++;
++  }
++  xrv->xrv_rv = 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr58690.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr58690.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr58690.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr58690.c	2014-03-30 20:21:40.710930653 +0000
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target { ! { ia32 } } } } */
++/* { dg-require-effective-target maybe_x32 } */
++/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
++
++struct gomp_thread
++{
++  char foo[41];
++};
++extern __thread struct gomp_thread gomp_tls_data;
++void
++foo (void)
++{
++  __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59021.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59021.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59021.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59021.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,23 @@
++/* { dg-do compile } */
++/* { dg-options "-O2 -mavx -mvzeroupper" } */
++
++extern void abort (void);
++
++struct S {
++  int i1;
++  int i2;
++  int i3;
++};
++
++typedef double v4df  __attribute__ ((vector_size (32)));
++
++extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
++
++void bar (v4df v, struct S s)
++{
++  int r = foo (v, 1, 2, 3, 4, 5, s);
++  if (r)
++    abort ();
++}
++
++/* { dg-final { scan-assembler-not "vzeroupper" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59034-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59034-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59034-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59034-1.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target { ! { ia32 } } } } */
++/* { dg-require-effective-target maybe_x32 } */
++/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
++
++extern int foo(int, ...);
++int bar(void) {
++  long double l = 1.2345E6;
++  foo(0, l);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59034-2.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59034-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59034-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59034-2.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,10 @@
++/* { dg-do compile { target { ! { ia32 } } } } */
++/* { dg-require-effective-target maybe_x32 } */
++/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
++
++extern int foo(int, ...);
++int bar(void) {
++  long double l = 1.2345E6;
++  foo(0, l);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59405.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59405.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59405.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59405.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,24 @@
++/* { dg-do run } */
++/* { dg-options "-mmmx -mfpmath=387" } */
++
++#include "mmx-check.h"
++
++#include <mmintrin.h>
++
++typedef float float32x2_t __attribute__ ((vector_size (8)));
++
++float
++foo32x2_be (float32x2_t x)
++{
++  _mm_empty ();
++  return x[1];
++}
++
++static void
++mmx_test (void)
++{
++  float32x2_t b = { 0.0f, 1.0f };
++
++  if (foo32x2_be (b) != 1.0f)
++    abort ();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59470.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59470.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59470.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59470.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,17 @@
++/* PR middle-end/58956 */
++/* PR middle-end/59470 */
++/* { dg-do run } */
++/* { dg-options "-O2" } */
++
++int a, b, d[1024];
++
++int
++main ()
++{
++  int c = a;
++  asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
++       : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
++  if (d[0] != 1 || d[6] != 0)
++    __builtin_abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59625.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59625.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59625.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59625.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,36 @@
++/* PR target/59625 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -mtune=atom" } */
++
++int
++foo (void)
++{
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  asm goto ("" : : : : lab);
++  return 0;
++lab:
++  return 1;
++}
++
++/* Verify we don't consider asm goto as a jump for four jumps limit
++   optimization.  asm goto doesn't have to contain a jump at all,
++   the branching to labels can happen through different means.  */
++/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-1.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,15 @@
++/* PR target/59794 */
++/* { dg-do compile { target { ia32 } } } */
++/* { dg-options "-O2 -mno-mmx" } */
++/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
++
++typedef int __v2si __attribute__ ((__vector_size__ (8)));
++
++extern __v2si x;
++
++extern void bar (__v2si);
++void
++foo (void)
++{
++  bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-2.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-2.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,15 @@
++/* PR target/59794 */
++/* { dg-prune-output "ABI for passing parameters" } */
++/* { dg-options "-O2 -mno-sse" } */
++/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
++
++typedef double __v2df __attribute__ ((__vector_size__ (16)));
++
++extern __v2df x;
++
++extern void bar (__v2df);
++void
++foo (void)
++{
++  bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-3.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-3.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,15 @@
++/* PR target/59794 */
++/* { dg-prune-output "ABI for passing parameters" } */
++/* { dg-options "-O2 -mno-avx" } */
++/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
++
++typedef int __v8si __attribute__ ((__vector_size__ (32)));
++
++extern __v8si x;
++
++extern void bar (__v8si);
++void
++foo (void)
++{
++  bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-4.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-4.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-4.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,14 @@
++/* PR target/59794 */
++/* { dg-do compile { target { ia32 } } } */
++/* { dg-options "-O2 -mno-mmx" } */
++/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
++
++typedef int __v2si __attribute__ ((__vector_size__ (8)));
++
++extern __v2si x;
++
++__v2si
++foo (void)
++{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
++  return x;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-5.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-5.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-5.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-5.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,14 @@
++/* PR target/59794 */
++/* { dg-do compile { target { ia32 } } } */
++/* { dg-options "-O2 -mno-sse" } */
++/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
++
++typedef int __v4si __attribute__ ((__vector_size__ (16)));
++
++extern __v4si x;
++
++__v4si
++foo (void)
++{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
++  return x;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-6.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-6.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,14 @@
++/* PR target/59794 */
++/* { dg-do compile { target { ! ia32 } } } */
++/* { dg-options "-O2 -mno-sse" } */
++/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
++
++typedef int __v4si __attribute__ ((__vector_size__ (16)));
++
++extern __v4si x;
++
++__v4si
++foo (void)
++{ /* { dg-error "SSE register return with SSE disabled" } */
++  return x;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-7.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-7.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59794-7.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59794-7.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,13 @@
++/* PR target/59794 */
++/* { dg-options "-O2 -mno-avx" } */
++/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
++
++typedef int __v8si __attribute__ ((__vector_size__ (32)));
++
++extern __v8si x;
++
++__v8si
++foo (void)
++{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
++  return x;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59839.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59839.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59839.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59839.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,12 @@
++/* PR target/59839 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -mavx2" } */
++
++#include <x86intrin.h>
++
++void
++test (const float *x)
++{
++  __m256i i = _mm256_set1_epi32 (1);
++  __m256 d = _mm256_i32gather_ps (x, i, 1);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59929.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59929.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr59929.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr59929.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,55 @@
++/* { dg-do run } */
++/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
++/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
++
++void
++__attribute__ ((noinline))
++test (float x1, float x2, float x3, float x4, float x5, float x6,
++      float x7, float x8, float x9, float x10, float x11, float x12,
++      float x13, float x14, float x15, float x16)
++{
++  if (x1 != 91
++      || x2 != 92
++      || x3 != 93
++      || x4 != 94
++      || x5 != 95
++      || x6 != 96
++      || x7 != 97
++      || x8 != 98
++      || x9 != 99
++      || x10 != 100
++      || x11 != 101
++      || x12 != 102
++      || x13 != 103
++      || x14 != 104
++      || x15 != 105
++      || x16 != 106)
++    __builtin_abort ();
++}
++
++float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
++      x14, x15, x16;
++
++int
++main ()
++{
++  x1 = 91;
++  x2 = 92;
++  x3 = 93;
++  x4 = 94;
++  x5 = 95;
++  x6 = 96;
++  x7 = 97;
++  x8 = 98;
++  x9 = 99;
++  x10 = 100;
++  x11 = 101;
++  x12 = 102;
++  x13 = 103;
++  x14 = 104;
++  x15 = 105;
++  x16 = 106;
++  test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
++	x14, x15, x16);
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr9771-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr9771-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr9771-1.c	2011-07-09 19:25:11.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr9771-1.c	2014-03-30 20:21:40.714264096 +0000
+@@ -45,7 +45,17 @@
+   exit(0);
+ }
+ 
+-int main()
++/* main usually performs dynamic realignment of the stack in case
++   _start would fail to properly align the stack, but for dynamic
++   stack realignment we need frame pointer which is incompatible
++   with -ffixed-ebp and the global register var.  So, cheat here
++   and hide from the compiler that main is really main.  */
++#define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
++#define ASMNAME2(prefix, cname) STRING (prefix) cname
++#define STRING(x)    #x
++int real_main() __asm (ASMNAME ("main"));
++
++int real_main()
+ {
+   test();
+   return 0;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse-5.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse-5.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse-5.c	2011-10-24 18:04:37.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse-5.c	2014-03-30 20:21:40.714264096 +0000
+@@ -1,6 +1,7 @@
+ /* { dg-do compile } */
+ /* { dg-require-effective-target ia32 } */
+-/* { dg-options "-Winline -Wno-psabi -O2 -mno-sse" } */
++/* { dg-prune-output "ABI for passing parameters" } */
++/* { dg-options "-Winline -O2 -mno-sse" } */
+ 
+ typedef double v2df __attribute__ ((vector_size (16)));
+ v2df p;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c	2010-05-19 16:10:05.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c	2014-03-30 20:21:40.714264096 +0000
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+   union128d u;
+-  double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
++  double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
+ 
+   u.x = test (e);   
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c	2010-05-19 16:10:05.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c	2014-03-30 20:21:40.714264096 +0000
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+   union128d u;
+-  double e[2] __attribute__ ((aligned (8))) = {0.0};
++  double e[2] __attribute__ ((aligned (16))) = {0.0};
+ 
+   u.x = _mm_set_pd (2134.3343,1234.635654);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/xop-frczX.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/xop-frczX.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/xop-frczX.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/xop-frczX.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,60 @@
++/* { dg-do run } */
++/* { dg-require-effective-target xop } */
++/* { dg-options "-O2 -mxop" } */
++
++#include "xop-check.h"
++
++#include <x86intrin.h>
++
++void
++check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
++{
++  union128d a, b, c;
++  double d[2];
++
++  a.x = __A;
++  b.x = __B;
++  c.x = _mm_frcz_sd (__A, __B);
++  d[0] = b.a[0] - (int)b.a[0] ;
++  d[1] = a.a[1];
++  if (check_union128d (c, d))
++    abort ();
++}
++
++void
++check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
++{
++  union128 a, b, c;
++  float f[4];
++
++  a.x = __A;
++  b.x = __B;
++  c.x = _mm_frcz_ss (__A, __B);
++  f[0] = b.a[0] - (int)b.a[0] ;
++  f[1] = a.a[1];
++  f[2] = a.a[2];
++  f[3] = a.a[3];
++  if (check_union128 (c, f))
++    abort ();
++}
++
++static void
++xop_test (void)
++{
++  union128 a, b;
++  union128d c,d;
++  int i;
++
++  for (i = 0; i < 4; i++)
++    {
++       a.a[i] = i + 3.5;
++       b.a[i] = i + 7.9;
++    }
++  for (i = 0; i < 2; i++)
++    {
++       c.a[i] = i + 3.5;
++       d.a[i] = i + 7.987654321;
++    }
++  check_mm_vmfrcz_ss (a.x, b.x);
++  check_mm_vmfrcz_sd (c.x, d.x);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,9 @@
++/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
++
++void float_func(float f1, float f2, float f3)
++{
++  /* { dg-final { scan-assembler "fcmp\.eq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
++  /* { dg-final { scan-assembler "fcmp\.le\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
++    if(f1==f2 && f1<=f3)
++        print ("f1 eq f2 && f1 le f3");
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++
++void trap ()
++{
++  __builtin_trap ();
++}
++
++/* { dg-final { scan-assembler "brki\tr0,-1" } } */
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,74 @@
++/* { dg-options "-O2 -fPIC" } */
++
++typedef struct test_struct
++{
++    unsigned long long h[8];
++    unsigned long long Nl,Nh;
++    union {
++        unsigned long long d[16];
++        unsigned char p[(16*8)];
++    } u;
++    unsigned int num,md_len;
++} TEST_STRUCT;
++
++static const unsigned long long K512[12] = {
++    0x428a2f98d728ae22,0x7137449123ef65cd,
++    0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
++    0x3956c25bf348b538,0x59f111f1b605d019,
++    0x923f82a4af194f9b,0xab1c5ed5da6d8118,
++    0xd807aa98a3030242,0x12835b0145706fbe,
++    0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
++
++#define ROTR(x,s)   (((x)>>s) | (x)<<(64-s))
++#define Sigma0(x)   (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
++#define Sigma1(x)   (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
++#define Ch(x,y,z)   (((x) & (y)) ^ ((~(x)) & (z)))
++#define Maj(x,y,z)  (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
++
++#define ROUND_00_15(i,a,b,c,d,e,f,g,h)  do {    \
++    T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i];  \
++    h = Sigma0(a) + Maj(a,b,c);         \
++    d += T1;    h += T1;        } while (0)
++
++#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X)    do {    \
++    T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f];    \
++    ROUND_00_15(i,a,b,c,d,e,f,g,h);     } while (0)
++
++static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
++{
++    const unsigned long long *W=in;
++    unsigned long long  a,b,c,d,e,f,g,h,s0,s1,T1;
++    unsigned long long  X[16];
++    int i;
++
++    while (num--) {
++
++        T1 = X[0] = W[0];   ROUND_00_15(0,a,b,c,d,e,f,g,h);
++        T1 = X[1] = W[1];   ROUND_00_15(1,h,a,b,c,d,e,f,g);
++        T1 = X[2] = W[2];   ROUND_00_15(2,g,h,a,b,c,d,e,f);
++        T1 = X[3] = W[3];   ROUND_00_15(3,f,g,h,a,b,c,d,e);
++        T1 = X[4] = W[4];   ROUND_00_15(4,e,f,g,h,a,b,c,d);
++        T1 = X[5] = W[5];   ROUND_00_15(5,d,e,f,g,h,a,b,c);
++        T1 = X[6] = W[6];   ROUND_00_15(6,c,d,e,f,g,h,a,b);
++        T1 = X[7] = W[7];   ROUND_00_15(7,b,c,d,e,f,g,h,a);
++        T1 = X[8] = W[8];   ROUND_00_15(8,a,b,c,d,e,f,g,h);
++        T1 = X[9] = W[9];   ROUND_00_15(9,h,a,b,c,d,e,f,g);
++
++        for (i=16;i<80;i+=8)
++        {
++            ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
++        }
++
++        ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
++    }
++}
++
++int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
++{
++    const unsigned char *data=(const unsigned char *)_data;
++
++    unsigned char *p=(unsigned char *)c->u.p;
++
++    testfunc1 (c,p,0);
++    testfunc1 (c,data,len/sizeof(c->u));
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-1.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-1.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,10 @@
++/* { dg-options "isa_rev>=2" } */
++/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
++
++NOMIPS16 unsigned short
++foo (unsigned short x)
++{
++  return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
++}
++
++/* { dg-final { scan-assembler "\twsbh\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-2.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-2.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,9 @@
++/* { dg-options "isa_rev>=2" } */
++
++NOMIPS16 unsigned short
++foo (unsigned short x)
++{
++  return __builtin_bswap16 (x);
++}
++
++/* { dg-final { scan-assembler "\twsbh\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-3.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-3.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,14 @@
++/* { dg-options "isa_rev>=2" } */
++/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
++
++NOMIPS16 unsigned int
++foo (unsigned int x)
++{
++  return (((x << 24) & 0xff000000)
++	  | ((x << 8) & 0xff0000)
++	  | ((x >> 8) & 0xff00)
++	  | ((x >> 24) & 0xff));
++}
++
++/* { dg-final { scan-assembler "\twsbh\t" } } */
++/* { dg-final { scan-assembler "\tror\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-4.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-4.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-4.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,10 @@
++/* { dg-options "isa_rev>=2" } */
++
++NOMIPS16 unsigned int
++foo (unsigned int x)
++{
++  return __builtin_bswap32 (x);
++}
++
++/* { dg-final { scan-assembler "\twsbh\t" } } */
++/* { dg-final { scan-assembler "\tror\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-5.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-5.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-5.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-5.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,20 @@
++/* { dg-options "isa_rev>=2 -mgp64" } */
++/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
++
++typedef unsigned long long uint64_t;
++
++NOMIPS16 uint64_t
++foo (uint64_t x)
++{
++  return (((x << 56) & 0xff00000000000000ull)
++	  | ((x << 40) & 0xff000000000000ull)
++	  | ((x << 24) & 0xff0000000000ull)
++	  | ((x << 8) & 0xff00000000ull)
++	  | ((x >> 8) & 0xff000000)
++	  | ((x >> 24) & 0xff0000)
++	  | ((x >> 40) & 0xff00)
++	  | ((x >> 56) & 0xff));
++}
++
++/* { dg-final { scan-assembler "\tdsbh\t" } } */
++/* { dg-final { scan-assembler "\tdshd\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-6.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/bswap-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/bswap-6.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,12 @@
++/* { dg-options "isa_rev>=2 -mgp64" } */
++
++typedef unsigned long long uint64_t;
++
++NOMIPS16 uint64_t
++foo (uint64_t x)
++{
++  return __builtin_bswap64 (x);
++}
++
++/* { dg-final { scan-assembler "\tdsbh\t" } } */
++/* { dg-final { scan-assembler "\tdshd\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/pr59137.c gcc-4.8.2/gcc/testsuite/gcc.target/mips/pr59137.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/mips/pr59137.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/mips/pr59137.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,34 @@
++/* { dg-do run } */
++/* { dg-options "-mno-plt" } */
++
++extern void abort (void);
++
++struct lispstruct
++{
++  int e;
++  int t;
++};
++
++struct lispstruct Cnil_body;
++struct lispstruct Ct_body;
++int nvalues;
++
++struct lispstruct * __attribute__ ((noinline))
++fLlistp (struct lispstruct *x0)
++{
++  if (x0 == &Cnil_body
++      || (((unsigned long) x0 >= 0x80000000) ? 0
++	  : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
++    x0 = &Ct_body;
++  else
++    x0 = &Cnil_body;
++  nvalues = 1;
++  return x0;
++}
++
++int main ()
++{
++  if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
++    abort ();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c gcc-4.8.2/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,21 @@
++/* Test accuracy of long double division (glibc bug 15396).  */
++/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
++/* { dg-options "-mlong-double-128" } */
++
++extern void exit (int);
++extern void abort (void);
++
++volatile long double a = 0x1p-1024L;
++volatile long double b = 0x3p-53L;
++volatile long double r;
++volatile long double expected = 0x1.55555555555555555555555555p-973L;
++
++int
++main (void)
++{
++  r = a / b;
++  /* Allow error up to 2ulp.  */
++  if (__builtin_fabsl (r - expected) > 0x1p-1073L)
++    abort ();
++  exit (0);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-1.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,20 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-10.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-10.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-10.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-10.c	2014-03-30 20:21:40.714264096 +0000
+@@ -0,0 +1,21 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch(2)))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-11.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-11.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-11.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-11.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,20 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
++/* { dg-final { scan-assembler-not "nop\t0" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-12.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-12.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-12.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-12.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,20 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-2.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-2.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,20 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-3.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-3.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,20 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-4.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-4.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-4.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,26 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++inline void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((always_inline))
++void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
++/* { dg-final { scan-assembler-not "nop\t0" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-5.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-5.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-5.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-5.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,21 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-6.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-6.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,21 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch(1)))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-7.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-7.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-7.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-7.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,21 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch(0)))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-8.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-8.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-8.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-8.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,28 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch))
++inline void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch))
++__attribute__ ((always_inline))
++void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
++/* { dg-final { scan-assembler-not "nop\t0" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-9.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-9.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-9.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-9.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,21 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch(2)))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
++
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
++/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,27 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++inline void hp2(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((always_inline))
++void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,27 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++inline void hp2(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((always_inline))
++void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,27 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++inline void hp2(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((always_inline))
++void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,11 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
++
++int main (void)
++{
++  return 0;
++}
++
++/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,28 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
++
++#include <stdio.h>
++
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(1000000)))
++void hp2(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(1000001)))
++void hp3(void)
++{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
++  printf("hello, world!\n");
++}
++
++int main (void)
++{
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,11 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
++
++int main (void)
++{
++  return 0;
++}
++
++/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,68 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
++
++#include <stdio.h>
++
++__attribute__ ((hotpatch))
++void hp1(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch))
++inline void hp2(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch))
++__attribute__ ((always_inline))
++void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
++
++__attribute__ ((hotpatch(0)))
++void hp4(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(0)))
++inline void hp5(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(0)))
++__attribute__ ((always_inline))
++void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
++
++__attribute__ ((hotpatch(1)))
++void hp7(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(1)))
++inline void hp8(void)
++{
++  printf("hello, world!\n");
++}
++
++__attribute__ ((hotpatch(1)))
++__attribute__ ((always_inline))
++void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
++{
++  printf("hello, world!\n");
++} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
++
++int main (void)
++{
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,23 @@
++/* Functional tests for the function hotpatching feature.  */
++
++/* { dg-do run } */
++/* { dg-options "-O3 -mzarch -mhotpatch" } */
++
++#include <stdio.h>
++
++int hp1(void)
++{
++  int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
++  { return 1; }
++
++  __attribute__ ((hotpatch))
++  int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
++  { return 1; }
++
++  return nested1() - nested2();
++}
++
++int main (void)
++{
++  return hp1();
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-1.c	2013-10-07 07:45:12.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-1.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,73 +0,0 @@
+-/* This checks the availability of the low-level builtins introduced
+-   for transactional execution.  */
+-
+-/* { dg-do compile } */
+-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+-
+-#include <stdint.h>
+-#include <htmintrin.h>
+-
+-int global = 0;
+-uint64_t g;
+-struct __htm_tdb global_tdb;
+-
+-int
+-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
+-{
+-
+-  int cc;
+-  int n;
+-
+-  cc = __builtin_tbegin (0);
+-  cc = __builtin_tbegin (tdb);
+-  cc = __builtin_tbegin (&global_tdb);
+-
+-  cc = __builtin_tbegin_nofloat (0);
+-  cc = __builtin_tbegin_nofloat (&global_tdb);
+-
+-  cc = __builtin_tbegin_retry (0, 42);
+-  cc = __builtin_tbegin_retry (0, reg);
+-  cc = __builtin_tbegin_retry (0, *mem);
+-  cc = __builtin_tbegin_retry (0, global);
+-  cc = __builtin_tbegin_retry (tdb, 42);
+-  cc = __builtin_tbegin_retry (&global_tdb, 42);
+-
+-  cc = __builtin_tbegin_retry_nofloat (0, 42);
+-  cc = __builtin_tbegin_retry_nofloat (0, reg);
+-  cc = __builtin_tbegin_retry_nofloat (0, *mem);
+-  cc = __builtin_tbegin_retry_nofloat (0, global);
+-  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
+-
+-  __builtin_tbeginc ();
+-
+-  n = __builtin_tx_nesting_depth();
+-
+-  __builtin_non_tx_store(&g, 23);
+-  __builtin_non_tx_store(mem64, 23);
+-  __builtin_non_tx_store(&g, reg);
+-  __builtin_non_tx_store(&g, *mem);
+-  __builtin_non_tx_store(&g, global);
+-
+-  __builtin_tabort (42 + 255);
+-  __builtin_tabort (reg);
+-  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
+-  __builtin_tabort (reg + 255);
+-  __builtin_tabort (*mem);
+-  __builtin_tabort (global);
+-  /* Here global + 255 gets reloaded into a reg.  Better would be to
+-     just reload global or *mem and get the +255 for free as address
+-     arithmetic.  */
+-  __builtin_tabort (*mem + 255);
+-  __builtin_tabort (global + 255);
+-
+-  __builtin_tend();
+-
+-  __builtin_tx_assist (23);
+-  __builtin_tx_assist (reg);
+-  __builtin_tx_assist (*mem);
+-  __builtin_tx_assist (global);
+-}
+-
+-/* Make sure the tdb NULL argument ends up as immediate value in the
+-   instruction.  */
+-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-1.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,1073 @@
++/* Functional tests of the htm __builtin_... macros.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target htm } */
++/* { dg-options "-O3 -march=zEC12 -mzarch" } */
++
++/* ---------------------------- included header files ---------------------- */
++
++#include <stdio.h>
++#include <string.h>
++#include <stdint.h>
++#include <htmintrin.h>
++
++/* ---------------------------- local definitions -------------------------- */
++
++#define DEFAULT_MAX_REPETITIONS 5
++#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
++#define NUM_WARMUP_RUNS 10
++
++/* ---------------------------- local macros ------------------------------- */
++
++#define TEST_DF_REP(name) \
++  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
++#define TEST_NO_REP(name) { #name, name, 1, 1 }
++
++/* ---------------------------- local types -------------------------------- */
++
++typedef int (*test_func_t)(void);
++
++typedef struct
++{
++  const char *name;
++  test_func_t test_func;
++  int max_repetitions;
++  int required_quorum;
++} test_table_entry_t;
++
++/* ---------------------------- local variables ---------------------------- */
++
++__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
++static struct __htm_tdb local_tdb;
++static int do_dump_tdb = 0;
++
++/* ---------------------------- exported variables (globals) --------------- */
++
++__attribute__ ((aligned(256))) struct
++{
++  float float_1;
++  float float_2;
++  float float_3;
++} global = { 1.0, 2.5, 0.0 };
++
++__attribute__ ((aligned(256))) struct
++{
++  volatile uint64_t c1;
++  volatile uint64_t c2;
++  volatile uint64_t c3;
++} counters = { 0, 0, 0 };
++
++/* ---------------------------- local helper functions --------------------- */
++
++static void dump_tdb (struct __htm_tdb *tdb)
++{
++  unsigned char *p;
++  int i;
++  int j;
++
++  if (do_dump_tdb == 0)
++    {
++      return;
++    }
++  p = (unsigned char *)tdb;
++  for (i = 0; i < 16; i++)
++    {
++      fprintf (stderr, "0x%02x  ", i * 16);
++      for (j = 0; j < 16; j++)
++	{
++	  fprintf (stderr, "%02x", (int)p[i * 16 + j]);
++	  if (j < 15)
++	    {
++	      fprintf (stderr, " ");
++	    }
++	  if (j == 7)
++	    {
++	      fprintf (stderr, " ");
++	    }
++	}
++      fprintf (stderr, "\n");
++    }
++
++  return;
++}
++
++/* ---------------------------- local test functions ----------------------- */
++
++/* Check values of the constants defined in htmintrin.h.  */
++static int test_constants (void)
++{
++  if (_HTM_TBEGIN_STARTED != 0)
++    {
++      return 100 * _HTM_TBEGIN_STARTED + 1;
++    }
++  if (_HTM_TBEGIN_INDETERMINATE != 1)
++    {
++      return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
++    }
++  if (_HTM_TBEGIN_TRANSIENT != 2)
++    {
++      return 100 * _HTM_TBEGIN_TRANSIENT + 3;
++    }
++  if (_HTM_TBEGIN_PERSISTENT != 3)
++    {
++      return 100 * _HTM_TBEGIN_PERSISTENT + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_ntstg_tend (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
++      counters.c2 = 2;
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 5;
++	}
++      if (counters.c1 != 1)
++	{
++	  return 100 * counters.c1 + 2;
++	}
++      if (counters.c2 != 2)
++	{
++	  return 100 * counters.c2 + 3;
++	}
++    }
++  else
++    {
++      return 100 * rc + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_ntstg_tabort (void)
++{
++  float f;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  f = 0;
++  if (__builtin_tbegin ((void *)0) == 0)
++    {
++      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
++      counters.c2 = 2;
++      f = 1;
++      __builtin_tabort (256);
++      return 1;
++    }
++  if (counters.c1 != 1)
++    {
++      return 100 * counters.c1 + 2;
++    }
++  if (counters.c2 != 0)
++    {
++      return 100 * counters.c2 + 3;
++    }
++  if (f != 0)
++    {
++      return 100 * f + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_nofloat (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
++    {
++      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
++      counters.c2 = 2;
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 5;
++	}
++      if (counters.c1 != 1)
++	{
++	  return 100 * counters.c1 + 2;
++	}
++      if (counters.c2 != 2)
++	{
++	  return 100 * counters.c2 + 3;
++	}
++    }
++  else
++    {
++      return 100 * rc + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  counters.c3 = 0;
++  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
++    {
++      int do_abort;
++
++      do_abort = (counters.c1 == 0) ? 1 : 0;
++      __builtin_non_tx_store (
++			     (uint64_t *)&counters.c1, counters.c1 + 1);
++      if (do_abort == 1)
++	{
++	  __builtin_tabort (256);
++	}
++      counters.c2 = counters.c2 + 10;
++      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 5;
++	}
++      if (counters.c1 != 2)
++	{
++	  return 100 * counters.c1 + 2;
++	}
++      if (counters.c2 != 10)
++	{
++	  return 100 * counters.c2 + 3;
++	}
++      if (counters.c3 != 3)
++	{
++	  return 100 * counters.c3 + 6;
++	}
++    }
++  else
++    {
++      return 100 * rc + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry_nofloat (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  counters.c3 = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
++    {
++      int do_abort;
++
++      do_abort = (counters.c1 == 0) ? 1 : 0;
++      __builtin_non_tx_store (
++			     (uint64_t *)&counters.c1, counters.c1 + 1);
++      if (do_abort == 1)
++	{
++	  __builtin_tabort (256);
++	}
++      counters.c2 = counters.c2 + 10;
++      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 5;
++	}
++      if (counters.c1 != 2)
++	{
++	  return 100 * counters.c1 + 2;
++	}
++      if (counters.c2 != 10)
++	{
++	  return 100 * counters.c2 + 3;
++	}
++      if (counters.c3 != 3)
++	{
++	  return 100 * counters.c3 + 6;
++	}
++    }
++  else
++    {
++      return 100 * rc + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_aborts (void)
++{
++  float f;
++  int rc;
++
++  f = 77;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      f = 88;
++      __builtin_tabort (256);
++      return 2;
++    }
++  else if (rc != 2)
++    {
++      return 3;
++    }
++  if (f != 77)
++    {
++      return 4;
++    }
++  f = 66;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      f = 99;
++      __builtin_tabort (257);
++      return 5;
++    }
++  else if (rc != 3)
++    {
++      return 100 * rc + 6;
++    }
++  if (f != 66)
++    {
++      return 100 * f + 7;
++    }
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      global.float_3 = global.float_1 + global.float_2;
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 8;
++	}
++    }
++  else
++    {
++      return 100 * rc + 9;
++    }
++  if (global.float_3 != global.float_1 + global.float_2)
++    {
++      return 100 * rc + 10;
++    }
++
++  return 0;
++}
++
++static __attribute__((noinline)) void indirect_abort(int abort_code)
++{
++  __builtin_tabort (abort_code);
++
++  return;
++}
++
++static int test_tbegin_indirect_aborts (void)
++{
++  float f;
++  int rc;
++
++  f = 77;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      f = 88;
++      indirect_abort(256);
++      return 2;
++    }
++  else if (rc != 2)
++    {
++      return 100 * rc + 3;
++    }
++  if (f != 77)
++    {
++      return 100 * rc + 4;
++    }
++  f = 66;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      f = 99;
++      indirect_abort(257);
++      return 5;
++    }
++  else if (rc != 3)
++    {
++      return 100 * rc + 6;
++    }
++  if (f != 66)
++    {
++      return 100 * f + 7;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_nofloat_aborts (void)
++{
++  int rc;
++
++  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
++    {
++      __builtin_tabort (256);
++      return 2;
++    }
++  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
++    {
++      __builtin_tabort (257);
++      return 1005;
++    }
++  else if (rc != 3)
++    {
++      return 1000 * rc + 6;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_nofloat_indirect_aborts (void)
++{
++  int rc;
++
++  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
++    {
++      indirect_abort (256);
++      return 2;
++    }
++  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
++    {
++      indirect_abort (257);
++      return 1005;
++    }
++  else if (rc != 3)
++    {
++      return 1000 * rc + 6;
++    }
++
++  return 0;
++}
++
++static
++int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
++{
++  int rc;
++
++  counters.c1 = 0;
++  if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
++    {
++      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
++      __builtin_tabort (abort_code);
++      return 2;
++    }
++  else
++    {
++      if ((abort_code & 1) == 0)
++	{
++	  if (rc != 2)
++	    {
++	      return 100 * rc + 2003;
++	    }
++	  else if (counters.c1 != (uint64_t)retries + 1)
++	    {
++	      return 1000 * counters.c1 + 100 * retries + 4;
++	    }
++	}
++      else
++	{
++	  if (rc != 3)
++	    {
++	      return 100 * rc + 3005;
++	    }
++	  else if (counters.c1 != 1)
++	    {
++	      return 1000 * counters.c1 + 100 * retries + 6;
++	    }
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry_aborts (void)
++{
++  int rc;
++  int retries;
++
++  for (retries = 1; retries <= 3; retries++)
++    {
++      rc = _test_tbegin_retry_aborts (retries, 256);
++      if (rc != 0)
++	{
++	  return 10000 + rc;
++	}
++    }
++  for (retries = 1; retries <= 3; retries++)
++    {
++      rc = _test_tbegin_retry_aborts (retries, 257);
++      if (rc != 0)
++	{
++	  return 20000 + rc;
++	}
++    }
++  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
++    {
++      global.float_3 = global.float_1 + global.float_2;
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 30000 + 100 * rc + 6;
++	}
++    }
++  else
++    {
++      return 30000 + 100 * rc + 7;
++    }
++
++  return 0;
++}
++
++static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
++{
++  int rc;
++
++  counters.c1 = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
++    {
++      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
++      __builtin_tabort (abort_code);
++      return 2;
++    }
++  else
++    {
++      if ((abort_code & 1) == 0)
++	{
++	  if (rc != 2)
++	    {
++	      return 100 * rc + 2003;
++	    }
++	  else if (counters.c1 != (uint64_t)retries + 1)
++	    {
++	      return 1000 * counters.c1 + 100 * retries + 4;
++	    }
++	}
++      else
++	{
++	  if (rc != 3)
++	    {
++	      return 100 * rc + 3005;
++	    }
++	  else if (counters.c1 != 1)
++	    {
++	      return 1000 * counters.c1 + 100 * retries + 6;
++	    }
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry_nofloat_aborts (void)
++{
++  int rc;
++  int retries;
++
++  for (retries = 1; retries <= 3; retries++)
++    {
++      rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
++      if (rc != 0)
++	{
++	  return 10 * retries + rc;
++	}
++    }
++  for (retries = 1; retries <= 3; retries++)
++    {
++      rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
++      if (rc != 0)
++	{
++	  return 10000 + 10 * retries + rc;
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_tdb (void)
++{
++  int rc;
++
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 1;
++	}
++      if (local_tdb.format != 0)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 2;
++	}
++    }
++  else
++    {
++      return 100 * rc + 3;
++    }
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
++    {
++      __builtin_tabort (257);
++      return 4;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 100 * rc + 5;
++	}
++      if (local_tdb.format != 1)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 6;
++	}
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 1100 * rc + 1;
++	}
++      if (local_tdb256.format != 0)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 1100 * local_tdb256.format + 2;
++	}
++    }
++  else
++    {
++      return 1100 * rc + 3;
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
++    {
++      __builtin_tabort (257);
++      return 2004;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 2100 * rc + 5;
++	}
++      if (local_tdb256.format != 1)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 2100 * local_tdb256.format + 6;
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_nofloat_tdb (void)
++{
++  int rc;
++
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 1;
++	}
++      if (local_tdb.format != 0)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 2;
++	}
++    }
++  else
++    {
++      return 3;
++    }
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
++    {
++      __builtin_tabort (257);
++      return 4;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 100 * rc + 5;
++	}
++      if (local_tdb.format != 1)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 6;
++	}
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 1100 * rc + 1;
++	}
++      if (local_tdb256.format != 0)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 1100 * local_tdb256.format + 2;
++	}
++    }
++  else
++    {
++      return 1003;
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
++    {
++      __builtin_tabort (257);
++      return 2004;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 2100 * rc + 5;
++	}
++      if (local_tdb256.format != 1)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 2100 * local_tdb256.format + 6;
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry_tdb (void)
++{
++  int rc;
++
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 1100 * rc + 1;
++	}
++      if (local_tdb256.format != 0)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 1100 * local_tdb256.format + 2;
++	}
++    }
++  else
++    {
++      return 1003;
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
++    {
++      __builtin_tabort (257);
++      return 2004;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 2100 * rc + 5;
++	}
++      if (local_tdb256.format != 1)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 2100 * local_tdb256.format + 6;
++	}
++    }
++
++  return 0;
++}
++
++static int test_tbegin_retry_nofloat_tdb (void)
++{
++  int rc;
++
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 100 * rc + 1;
++	}
++      if (local_tdb.format != 0)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 2;
++	}
++    }
++  else
++    {
++      return 100 * rc + 3;
++    }
++  local_tdb.format = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
++    {
++      __builtin_tabort (257);
++      return 4;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 100 * rc + 5;
++	}
++      if (local_tdb.format != 1)
++	{
++	  dump_tdb (&local_tdb);
++	  return 100 * local_tdb.format + 6;
++	}
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
++    {
++      rc = __builtin_tend ();
++      if (rc != 0)
++	{
++	  return 1100 * rc + 1;
++	}
++      if (local_tdb256.format != 0)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 1100 * local_tdb256.format + 2;
++	}
++    }
++  else
++    {
++      return 1100 * rc + 3;
++    }
++  local_tdb256.format = 0;
++  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
++    {
++      __builtin_tabort (257);
++      return 2004;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 2100 * rc + 5;
++	}
++      if (local_tdb256.format != 1)
++	{
++	  dump_tdb (&local_tdb256);
++	  return 2100 * local_tdb256.format + 6;
++	}
++    }
++
++  return 0;
++}
++
++static int test_etnd (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  counters.c3 = 0;
++  if ((rc = __builtin_tbegin ((void *)0)) == 0)
++    {
++      counters.c1 = __builtin_tx_nesting_depth ();
++      if (__builtin_tbegin ((void *)0) == 0)
++	{
++	  counters.c2 = __builtin_tx_nesting_depth ();
++	  if (__builtin_tbegin ((void *)0) == 0)
++	    {
++	      counters.c3 = __builtin_tx_nesting_depth ();
++	      __builtin_tend ();
++	    }
++	  __builtin_tend ();
++	}
++      __builtin_tend ();
++    }
++  else
++    {
++      return 100 * rc + 1;
++    }
++  if (counters.c1 != 1)
++    {
++      return 100 * counters.c1 + 2;
++    }
++  if (counters.c2 != 2)
++    {
++      return 100 * counters.c2 + 3;
++    }
++  if (counters.c3 != 3)
++    {
++      return 100 * counters.c3 + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbeginc (void)
++{
++  int rc;
++
++  counters.c1 = 0;
++  __builtin_tbeginc ();
++  counters.c1 = 1;
++  rc = __builtin_tend ();
++  if (rc != 0)
++    {
++      return 10000 * rc + 1;
++    }
++  if (counters.c1 != 1)
++    {
++      return 100000 * counters.c1 + 3;
++    }
++
++  return 0;
++}
++
++/* ---------------------------- local testing framework functions ---------- */
++
++static int run_one_test (const test_table_entry_t *test_entry)
++{
++  int do_print_passes;
++  int succeeded;
++  int rc;
++  int i;
++
++  /* Warmup run to get all necessary data and instruction pages into the page
++   * tables.  */
++  {
++    int run;
++
++    do_dump_tdb = 0;
++    for (run = 0; run < NUM_WARMUP_RUNS; run++)
++      {
++	test_entry->test_func ();
++      }
++    do_dump_tdb = 1;
++  }
++  do_print_passes = (
++		     test_entry->required_quorum != 1 ||
++		     test_entry->max_repetitions != 1);
++  printf ("RRR RUN  %s\n", test_entry->name);
++  if (do_print_passes == 1)
++    {
++      printf (
++	     "         (requires %d successful out of %d runs)\n",
++	     test_entry->required_quorum,
++	     test_entry->max_repetitions);
++    }
++  succeeded = 0;
++  rc = 0;
++  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
++    {
++      if (do_print_passes == 1)
++	{
++	  if (i == 0)
++	    {
++	      printf ("        ");
++	    }
++	  else
++	    {
++	      printf (",");
++	    }
++	}
++      rc = test_entry->test_func ();
++      if (rc == 0)
++	{
++	  if (do_print_passes == 1)
++	    {
++	      printf (" success");
++	    }
++	  succeeded++;
++	  if (succeeded >= test_entry->required_quorum)
++	    {
++	      break;
++	    }
++	}
++      else
++	{
++	  printf (" failed (rc = %d)", rc);
++	}
++    }
++  if (do_print_passes == 1 || rc != 0)
++    {
++      printf ("\n");
++    }
++  if (succeeded >= test_entry->required_quorum)
++    {
++      printf ("+++ OK   %s\n", test_entry->name);
++
++      return 0;
++    }
++  else
++    {
++      printf ("--- FAIL %s\n", test_entry->name);
++
++      return (rc != 0) ? rc : -1;
++    }
++}
++
++static int run_all_tests (const test_table_entry_t *test_table)
++{
++  const test_table_entry_t *test;
++  int rc;
++
++  for (
++       rc = 0, test = &test_table[0];
++       test->test_func != NULL && rc == 0; test++)
++    {
++      rc = run_one_test (test);
++    }
++
++  return rc;
++}
++
++/* ---------------------------- interface functions ------------------------ */
++
++int main (void)
++{
++  const test_table_entry_t test_table[] = {
++    TEST_NO_REP (test_constants),
++    TEST_DF_REP (test_tbegin_ntstg_tend),
++    TEST_DF_REP (test_tbegin_ntstg_tabort),
++    TEST_DF_REP (test_tbegin_nofloat),
++    TEST_NO_REP (test_tbegin_retry),
++    TEST_NO_REP (test_tbegin_retry_nofloat),
++    TEST_DF_REP (test_tbegin_aborts),
++    TEST_DF_REP (test_tbegin_indirect_aborts),
++    TEST_DF_REP (test_tbegin_nofloat_aborts),
++    TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
++    TEST_NO_REP (test_tbegin_retry_aborts),
++    TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
++    TEST_DF_REP (test_tbegin_tdb),
++    TEST_DF_REP (test_tbegin_nofloat_tdb),
++    TEST_NO_REP (test_tbegin_retry_tdb),
++    TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
++    TEST_DF_REP (test_etnd),
++    TEST_DF_REP (test_tbeginc),
++    { (void *)0, 0, 0 }
++  };
++
++  {
++    int rc;
++
++    rc = run_all_tests (test_table);
++
++    return rc;
++  }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-2.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-2.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,682 @@
++/* Functional tests of the htm __TM_... macros.  */
++
++/* { dg-do run } */
++/* { dg-require-effective-target htm } */
++/* { dg-options "-O3 -march=zEC12 -mzarch" } */
++
++/* ---------------------------- included header files ---------------------- */
++
++#include <stdio.h>
++#include <string.h>
++#include <inttypes.h>
++#include <htmxlintrin.h>
++
++/* ---------------------------- local definitions -------------------------- */
++
++#define DEFAULT_MAX_REPETITIONS 5
++#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
++#define DEFAULT_ABORT_ADDRESS (0x12345678u)
++
++/* ---------------------------- local macros ------------------------------- */
++
++#define TEST_DF_REP(name) \
++  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
++#define TEST_NO_REP(name) { #name, name, 1, 1 }
++
++/* ---------------------------- local types -------------------------------- */
++
++typedef int (*test_func_t)(void);
++
++typedef struct
++{
++  const char *name;
++  test_func_t test_func;
++  int max_repetitions;
++  int required_quorum;
++} test_table_entry_t;
++
++typedef enum
++{
++  ABORT_T_SYSTEM = 0,
++  ABORT_T_USER = 1,
++} abort_user_t;
++
++typedef enum
++{
++  ABORT_T_NONE = 0,
++  ABORT_T_ILLEGAL,
++  ABORT_T_FOOTPRINT_EXCEEDED,
++  ABORT_T_NESTED_TOO_DEEP,
++  ABORT_T_CONFLICT,
++
++  ABORT_T_INVALID_ABORT_CODE
++} abort_t;
++
++/* ---------------------------- local variables ---------------------------- */
++
++__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
++static struct __htm_tdb local_tdb;
++
++static abort_t const abort_classes[] =
++{
++  ABORT_T_INVALID_ABORT_CODE,
++  ABORT_T_NONE,
++  ABORT_T_NONE,
++  ABORT_T_NONE,
++
++  ABORT_T_ILLEGAL,
++  ABORT_T_NONE,
++  ABORT_T_NONE,
++  ABORT_T_FOOTPRINT_EXCEEDED,
++
++  ABORT_T_FOOTPRINT_EXCEEDED,
++  ABORT_T_CONFLICT,
++  ABORT_T_CONFLICT,
++  ABORT_T_ILLEGAL,
++
++  ABORT_T_NONE,
++  ABORT_T_NESTED_TOO_DEEP,
++  ABORT_T_NONE,
++  ABORT_T_NONE,
++
++  ABORT_T_NONE
++};
++
++static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
++
++/* ---------------------------- exported variables (globals) --------------- */
++
++int global_int = 0;
++uint64_t global_u64 = 0;
++float global_float_1 = 1.0;
++float global_float_2 = 2.5;
++float global_float_3 = 0.0;
++__attribute__ ((aligned(256))) struct
++{
++  volatile uint64_t c1;
++  volatile uint64_t c2;
++  volatile uint64_t c3;
++} counters = { 0, 0, 0 };
++
++/* ---------------------------- local helper functions --------------------- */
++
++static void dump_tdb(struct __htm_tdb *tdb)
++{
++  unsigned char *p;
++  int i;
++  int j;
++
++  p = (unsigned char *)tdb;
++  for (i = 0; i < 16; i++)
++    {
++      fprintf(stderr, "0x%02x  ", i * 16);
++      for (j = 0; j < 16; j++)
++	{
++	  fprintf(stderr, "%02x", (int)p[i * 16 + j]);
++	  if (j < 15)
++	    {
++	      fprintf(stderr, " ");
++	    }
++	  if (j == 7)
++	    {
++	      fprintf(stderr, " ");
++	    }
++	}
++      fprintf(stderr, "\n");
++    }
++
++  return;
++}
++
++static void make_fake_tdb(struct __htm_tdb *tdb)
++{
++  memset(tdb, 0, sizeof(*tdb));
++  tdb->format = 1;
++  tdb->nesting_depth = 1;
++  tdb->atia = DEFAULT_ABORT_ADDRESS;
++  tdb->abort_code = 11;
++
++  return;
++}
++
++static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
++{
++  long expect_rc;
++  long rc;
++
++  if (abort_code != 0)
++    {
++      long addr;
++
++      addr = __TM_failure_address(&local_tdb);
++      if (addr != DEFAULT_ABORT_ADDRESS)
++	{
++	  return 11;
++	}
++    }
++  {
++    long long tdb_abort_code;
++
++    tdb_abort_code = __TM_failure_code(tdb);
++    if ((uint64_t)tdb_abort_code != abort_code)
++      {
++	fprintf(
++		stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
++		", tdb_ac %" PRIu64 "\n",
++		(uint64_t)tdb_abort_code, abort_code,
++		(uint64_t)tdb->abort_code);
++	return 10;
++      }
++  }
++  expect_rc = (abort_code >= 256) ? 1 : 0;
++  rc = __TM_is_user_abort(tdb);
++  if (rc != expect_rc)
++    {
++      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
++      return 1;
++    }
++  {
++    unsigned char code;
++
++    code = 0xffu;
++    rc = __TM_is_named_user_abort(tdb, &code);
++    if (rc != expect_rc)
++      {
++	fprintf(
++		stderr, "rc %ld, expect_rc %ld\n", rc,
++		expect_rc);
++	return 2;
++      }
++    if (expect_rc == 1 && code != abort_code - 256)
++      {
++	return 3;
++      }
++  }
++  if (abort_code > (uint64_t)num_abort_classes)
++    {
++      abort_code = (uint64_t)num_abort_classes;
++    }
++  expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
++  rc = __TM_is_illegal(tdb);
++  if (rc != expect_rc)
++    {
++      dump_tdb(tdb);
++      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
++      return 4;
++    }
++  expect_rc =
++    (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
++    1 : 0;
++  rc = __TM_is_footprint_exceeded(tdb);
++  if (rc != expect_rc)
++    {
++      dump_tdb(tdb);
++      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
++      return 5;
++    }
++  expect_rc =
++    (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
++  rc = __TM_is_nested_too_deep(tdb);
++  if (rc != expect_rc)
++    {
++      dump_tdb(tdb);
++      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
++      return 6;
++    }
++  expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
++  rc = __TM_is_conflict(tdb);
++  if (rc != expect_rc)
++    {
++      dump_tdb(tdb);
++      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
++      return 7;
++    }
++
++  return 0;
++}
++
++/* ---------------------------- local test functions ----------------------- */
++
++/* Not a test; make sure that the involved global cachelines are reserved for
++ * writing.  */
++static int init_cache(void)
++{
++  make_fake_tdb(&local_tdb);
++  make_fake_tdb(&local_tdb256);
++  global_int = 0;
++  global_u64 = 0;
++  global_float_1 = 1.0;
++  global_float_2 = 2.5;
++  global_float_3 = 0.0;
++  counters.c1 = 0;
++  counters.c2 = 0;
++  counters.c3 = 0;
++
++  return 0;
++}
++
++static int test_abort_classification(void)
++{
++  int i;
++
++  make_fake_tdb(&local_tdb);
++  for (i = 0; i <= 256; i++)
++    {
++      int rc;
++
++      local_tdb.abort_code = (uint64_t)i;
++      rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
++      if (rc != 0)
++	{
++	  return 100 * i + rc;
++	}
++    }
++
++  return 0;
++}
++
++static int test_cc_classification(void)
++{
++  long rc;
++
++  rc = __TM_is_failure_persistent(0);
++  if (rc != 0)
++    {
++      return 1;
++    }
++  rc = __TM_is_failure_persistent(1);
++  if (rc != 0)
++    {
++      return 2;
++    }
++  rc = __TM_is_failure_persistent(2);
++  if (rc != 0)
++    {
++      return 3;
++    }
++  rc = __TM_is_failure_persistent(3);
++  if (rc != 1)
++    {
++      return 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_ntstg_tend(void)
++{
++  long rc;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  if ((rc = __TM_simple_begin()) == 0)
++    {
++      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
++      counters.c2 = 2;
++      rc = __TM_end();
++      if (rc != 0)
++	{
++	  return 100 * rc + 5;
++	}
++      if (counters.c1 != 1)
++	{
++	  return 100 * counters.c1 + 2;
++	}
++      if (counters.c2 != 2)
++	{
++	  return 100 * counters.c2 + 3;
++	}
++    }
++  else
++    {
++      return 100 * rc + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_ntstg_tabort(void)
++{
++  register float f;
++
++  counters.c1 = 0;
++  counters.c2 = 0;
++  f = 0;
++  if (__TM_simple_begin() == 0)
++    {
++      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
++      counters.c2 = 2;
++      f = 1;
++      __TM_named_abort(0);
++      return 1;
++    }
++  if (counters.c1 != 1)
++    {
++      return 100 * counters.c1 + 2;
++    }
++  if (counters.c2 != 0)
++    {
++      return 100 * counters.c2 + 3;
++    }
++  if (f != 0)
++    {
++      return 100 * f + 4;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_aborts(void)
++{
++  float f;
++  long rc;
++
++  f = 77;
++  if ((rc = __TM_simple_begin()) == 0)
++    {
++      f = 88;
++      __TM_abort();
++      return 2;
++    }
++  else if (rc != 2)
++    {
++      return 3;
++    }
++  if (f != 77)
++    {
++      return 4;
++    }
++  f = 66;
++  if ((rc = __TM_simple_begin()) == 0)
++    {
++      f = 99;
++      __TM_named_abort(3);
++      return 5;
++    }
++  else if (rc != 3)
++    {
++      return 100 * rc + 6;
++    }
++  if (f != 66)
++    {
++      return 100 * f + 7;
++    }
++  if ((rc = __TM_simple_begin()) == 0)
++    {
++      global_float_3 = global_float_1 + global_float_2;
++      rc = __TM_end();
++      if (rc != 0)
++	{
++	  return 100 * rc + 8;
++	}
++    }
++  else
++    {
++      return 100 * rc + 9;
++    }
++  if (global_float_3 != global_float_1 + global_float_2)
++    {
++      return 100 * rc + 10;
++    }
++
++  return 0;
++}
++
++static int test_tbegin_tdb(void)
++{
++  long rc;
++
++  local_tdb.format = 0;
++  if ((rc = __TM_begin(&local_tdb)) == 0)
++    {
++      rc = __TM_end();
++      if (rc != 0)
++	{
++	  return 100 * rc + 1;
++	}
++      if (local_tdb.format != 0)
++	{
++	  dump_tdb(&local_tdb);
++	  return 100 * local_tdb.format + 2;
++	}
++    }
++  else
++    {
++      return 100 * rc + 3;
++    }
++  local_tdb.format = 0;
++  if ((rc = __TM_begin(&local_tdb)) == 0)
++    {
++      __TM_named_abort(1);
++      return 4;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 100 * rc + 5;
++	}
++      if (local_tdb.format != 1)
++	{
++	  dump_tdb(&local_tdb);
++	  return 100 * local_tdb.format + 6;
++	}
++    }
++  local_tdb256.format = 0;
++  if ((rc = __TM_begin(&local_tdb256)) == 0)
++    {
++      rc = __TM_end();
++      if (rc != 0)
++	{
++	  return 1100 * rc + 1;
++	}
++      if (local_tdb256.format != 0)
++	{
++	  dump_tdb(&local_tdb256);
++	  return 1100 * local_tdb256.format + 2;
++	}
++    }
++  else
++    {
++      return 1100 * rc + 3;
++    }
++#if 1 /*!!!does not work*/
++  local_tdb256.format = 0;
++  if ((rc = __TM_begin(&local_tdb256)) == 0)
++    {
++      __TM_named_abort(1);
++      return 2004;
++    }
++  else
++    {
++      if (rc != 3)
++	{
++	  return 2100 * rc + 5;
++	}
++      if (local_tdb256.format != 1)
++	{
++	  dump_tdb(&local_tdb256);
++	  return 2100 * local_tdb256.format + 6;
++	}
++    }
++#endif
++
++  return 0;
++}
++
++static int test_etnd(void)
++{
++  long rc;
++
++  {
++    long nd;
++
++    make_fake_tdb(&local_tdb);
++    local_tdb.nesting_depth = 0;
++    nd = __TM_nesting_depth(&local_tdb);
++    if (nd != 0)
++      {
++	return 1;
++      }
++    local_tdb.nesting_depth = 7;
++    nd = __TM_nesting_depth(&local_tdb);
++    if (nd != 7)
++      {
++	return 7;
++      }
++    local_tdb.format = 0;
++    nd = __TM_nesting_depth(&local_tdb);
++    if (nd != 0)
++      {
++	return 2;
++      }
++  }
++  counters.c1 = 0;
++  counters.c1 = 0;
++  counters.c2 = 0;
++  counters.c3 = 0;
++  if ((rc = __TM_simple_begin()) == 0)
++    {
++      counters.c1 = __TM_nesting_depth(0);
++      if (__TM_simple_begin() == 0)
++	{
++	  counters.c2 = __TM_nesting_depth(0);
++	  if (__TM_simple_begin() == 0)
++	    {
++	      counters.c3 = __TM_nesting_depth(0);
++	      __TM_end();
++	    }
++	  __TM_end();
++	}
++      __TM_end();
++    }
++  else
++    {
++      return 100 * rc + 1;
++    }
++  if (counters.c1 != 1)
++    {
++      return 100 * counters.c1 + 2;
++    }
++  if (counters.c2 != 2)
++    {
++      return 100 * counters.c2 + 3;
++    }
++  if (counters.c3 != 3)
++    {
++      return 100 * counters.c3 + 4;
++    }
++
++  return 0;
++}
++
++/* ---------------------------- local testing framework functions ---------- */
++
++static int run_one_test(const test_table_entry_t *test_entry)
++{
++  int do_print_passes;
++  int succeeded;
++  int rc;
++  int i;
++
++  do_print_passes = (
++		     test_entry->required_quorum != 1 ||
++		     test_entry->max_repetitions != 1);
++  printf("RRR RUN  %s\n", test_entry->name);
++  if (do_print_passes == 1)
++    {
++      printf(
++	     "         (requires %d successful out of %d runs)\n",
++	     test_entry->required_quorum,
++	     test_entry->max_repetitions);
++    }
++  succeeded = 0;
++  rc = 0;
++  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
++    {
++      if (do_print_passes == 1)
++	{
++	  if (i == 0)
++	    {
++	      printf("        ");
++	    }
++	  else
++	    {
++	      printf(",");
++	    }
++	}
++      rc = test_entry->test_func();
++      if (rc == 0)
++	{
++	  if (do_print_passes == 1)
++	    {
++	      printf(" success");
++	    }
++	  succeeded++;
++	  if (succeeded >= test_entry->required_quorum)
++	    {
++	      break;
++	    }
++	}
++      else
++	{
++	  printf(" failed (rc = %d)", rc);
++	}
++    }
++  if (do_print_passes == 1 || rc != 0)
++    {
++      printf("\n");
++    }
++  if (succeeded >= test_entry->required_quorum)
++    {
++      printf("+++ OK   %s\n", test_entry->name);
++
++      return 0;
++    }
++  else
++    {
++      printf("--- FAIL %s\n", test_entry->name);
++
++      return (rc != 0) ? rc : -1;
++    }
++}
++
++static int run_all_tests(const test_table_entry_t *test_table)
++{
++  const test_table_entry_t *test;
++  int rc;
++
++  for (
++       rc = 0, test = &test_table[0];
++       test->test_func != NULL && rc == 0; test++)
++    {
++      rc = run_one_test(test);
++    }
++
++  return rc;
++}
++
++/* ---------------------------- interface functions ------------------------ */
++
++int main(void)
++{
++  const test_table_entry_t test_table[] = {
++    TEST_NO_REP(init_cache),
++    TEST_NO_REP(test_abort_classification),
++    TEST_NO_REP(test_cc_classification),
++    TEST_DF_REP(test_tbegin_ntstg_tend),
++    TEST_DF_REP(test_tbegin_ntstg_tabort),
++    TEST_DF_REP(test_tbegin_aborts),
++    TEST_DF_REP(test_tbegin_tdb),
++    TEST_DF_REP(test_etnd),
++    { (void *)0, 0, 0 }
++  };
++
++  {
++    int rc;
++
++    rc = run_all_tests(test_table);
++
++    return rc;
++  }
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,165 @@
++/* This checks the availability of the low-level builtins introduced
++   for transactional execution.  */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target htm } */
++/* { dg-options "-O3 -march=zEC12 -mzarch" } */
++
++#include <stdint.h>
++#include <htmintrin.h>
++
++int global = 0;
++uint64_t g;
++struct __htm_tdb global_tdb;
++
++int
++foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
++{
++
++  int cc;
++  int n;
++
++  __builtin_tbegin ((void *)0);
++  __builtin_tbegin ((void *)-99999);
++  __builtin_tbegin ((void *)99999);
++  while (__builtin_tbegin ((void *)0) != 0)
++  {
++  }
++  cc = __builtin_tbegin ((void *)0x12345678);
++  cc = __builtin_tbegin (tdb);
++  cc = __builtin_tbegin (&global_tdb);
++  cc = __builtin_tbegin ((void *)(long long)(reg + 0x12345678));
++  cc = __builtin_tbegin ((void *)(long long)(reg));
++
++  __builtin_tbegin_nofloat ((void *)0);
++  __builtin_tbegin_nofloat ((void *)-99999);
++  __builtin_tbegin_nofloat ((void *)99999);
++  cc = __builtin_tbegin_nofloat ((void *)0x12345678);
++  cc = __builtin_tbegin_nofloat (tdb);
++  cc = __builtin_tbegin_nofloat (&global_tdb);
++  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg + 0x12345678));
++  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg));
++
++  __builtin_tbegin_retry ((void *)0, 0);
++  cc = __builtin_tbegin_retry ((void *)0, 1);
++  cc = __builtin_tbegin_retry ((void *)0, -1);
++  cc = __builtin_tbegin_retry ((void *)0, 42);
++  cc = __builtin_tbegin_retry ((void *)0, reg);
++  cc = __builtin_tbegin_retry ((void *)0, *mem);
++  cc = __builtin_tbegin_retry ((void *)0, global);
++  cc = __builtin_tbegin_retry (tdb, 42);
++  cc = __builtin_tbegin_retry (&global_tdb, 42);
++  cc = __builtin_tbegin_retry ((void *)0x12345678, global);
++  cc = __builtin_tbegin_retry (
++	  (void *)(long long) (reg + 0x12345678), global + 1);
++  cc = __builtin_tbegin_retry (
++	  (void *)(long long)(reg), global - 1);
++
++  __builtin_tbegin_retry_nofloat ((void *)0, 0);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
++  cc = __builtin_tbegin_retry_nofloat (tdb, 42);
++  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
++  cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
++  cc = __builtin_tbegin_retry_nofloat (
++	  (void *)(long long) (reg + 0x12345678), global + 1);
++  cc = __builtin_tbegin_retry_nofloat (
++	  (void *)(long long)(reg), global - 1);
++
++  __builtin_tbeginc ();
++
++  __builtin_tx_nesting_depth ();
++  n = __builtin_tx_nesting_depth ();
++
++  __builtin_non_tx_store (mem64, 0);
++  {
++	  const uint64_t val_var = 0x1122334455667788;
++
++	  __builtin_non_tx_store (mem64, val_var);
++  }
++  __builtin_non_tx_store (mem64, (uint64_t)reg);
++  __builtin_non_tx_store (mem64, g);
++  __builtin_non_tx_store ((uint64_t *)0, 0);
++  __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
++  __builtin_non_tx_store (&g, 23);
++  __builtin_non_tx_store (&g, reg);
++  __builtin_non_tx_store (&g, *mem);
++  __builtin_non_tx_store (&g, global);
++
++  __builtin_tend();
++
++  __builtin_tx_assist (0);
++  __builtin_tx_assist (1);
++  __builtin_tx_assist (reg);
++  __builtin_tx_assist (*mem);
++  __builtin_tx_assist (global);
++}
++
++/* The taborts must go into separate function since they are
++   "noreturn".  */
++
++void
++tabort1 ()
++{
++  __builtin_tabort (256);
++}
++
++void
++tabort2 (int reg)
++{
++  __builtin_tabort (reg);
++}
++
++void
++tabort3 (int reg)
++{
++  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
++  __builtin_tabort (reg + 255);
++}
++
++void
++tabort4 (int *mem)
++{
++  __builtin_tabort (*mem);
++}
++
++void
++tabort5 ()
++{
++  __builtin_tabort (global);
++}
++
++void
++tabort6 (int *mem)
++{
++  /* Here global + 255 gets reloaded into a reg.  Better would be to
++     just reload global or *mem and get the +255 for free as address
++     arithmetic.  */
++  __builtin_tabort (*mem + 255);
++}
++
++void
++tabort7 ()
++{
++  __builtin_tabort (global + 255);
++}
++
++void
++tabort8 ()
++{
++  __builtin_tabort (-1);
++}
++
++
++/* Make sure the tdb NULL argument ends up as immediate value in the
++   instruction.  */
++/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
++/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
++/* Check number of occurences of certain instructions.  */
++/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
++/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
++/* { dg-final { scan-assembler "ppa\t" } } */
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target htm } */
++/* { dg-options "-O3 -march=zEC12 -mzarch" } */
++
++void must_not_compile1 (void)
++{
++  __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
++}
++
++void must_not_compile2 (void)
++{
++  __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c	2014-03-30 20:21:40.717597539 +0000
+@@ -0,0 +1,37 @@
++/* This checks the availability of the XL compiler intrinsics for
++   transactional execution with the expected prototypes.  */
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -march=zEC12 -mzarch" } */
++
++#include <htmxlintrin.h>
++
++int a = 0;
++unsigned long g;
++
++int
++foo ()
++{
++  struct __htm_tdb *tdb_struct;
++  void * const tdb = tdb_struct;
++  long result;
++  unsigned char code;
++
++  result = __TM_simple_begin ();
++  result = __TM_begin (tdb);
++  result = __TM_end ();
++  __TM_abort ();
++  __TM_named_abort (42);
++  __TM_non_transactional_store (&g, 42);
++  result = __TM_nesting_depth (tdb);
++
++  result = __TM_is_user_abort (tdb);
++  result = __TM_is_named_user_abort (tdb, &code);
++  result = __TM_is_illegal (tdb);
++  result = __TM_is_footprint_exceeded (tdb);
++  result = __TM_is_nested_too_deep (tdb);
++  result = __TM_is_conflict (tdb);
++  result = __TM_is_failure_persistent (result);
++  result = __TM_failure_address (tdb);
++  result = __TM_failure_code (tdb);
++}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c	2013-10-07 07:44:15.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,37 +0,0 @@
+-/* This checks the availability of the XL compiler intrinsics for
+-   transactional execution with the expected prototypes.  */
+-
+-/* { dg-do compile } */
+-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
+-
+-#include <htmxlintrin.h>
+-
+-int a = 0;
+-unsigned long g;
+-
+-int
+-foo ()
+-{
+-  struct __htm_tdb *tdb_struct;
+-  void * const tdb = tdb_struct;
+-  long result;
+-  unsigned char code;
+-
+-  result = __TM_simple_begin ();
+-  result = __TM_begin (tdb);
+-  result = __TM_end ();
+-  __TM_abort ();
+-  __TM_named_abort (42);
+-  __TM_non_transactional_store (&g, 42);
+-  result = __TM_nesting_depth (tdb);
+-
+-  result = __TM_is_user_abort (tdb);
+-  result = __TM_is_named_user_abort (tdb, &code);
+-  result = __TM_is_illegal (tdb);
+-  result = __TM_is_footprint_exceeded (tdb);
+-  result = __TM_is_nested_too_deep (tdb);
+-  result = __TM_is_conflict (tdb);
+-  result = __TM_is_failure_persistent (result);
+-  result = __TM_failure_address (tdb);
+-  result = __TM_failure_code (tdb);
+-}
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/s390.exp gcc-4.8.2/gcc/testsuite/gcc.target/s390/s390.exp
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/s390/s390.exp	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/s390/s390.exp	2014-03-30 20:21:40.717597539 +0000
+@@ -24,6 +24,19 @@
+ # Load support procs.
+ load_lib gcc-dg.exp
+ 
++# Return 1 if htm (etnd - extract nesting depth) instructions can be
++# compiled.
++proc check_effective_target_htm { } {
++    if { ![check_runtime s390_check_htm [subst {
++	int main (void)
++	{
++	    unsigned int nd = 77;
++	    asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
++	    return nd;
++	}
++    }]] } { return 0 } else { return 1 }
++}
++
+ # If a testcase doesn't have special options, use these.
+ global DEFAULT_CFLAGS
+ if ![info exists DEFAULT_CFLAGS] then {
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr51244-19.c gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr51244-19.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr51244-19.c	2012-11-03 12:01:01.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr51244-19.c	2014-03-30 20:21:40.717597539 +0000
+@@ -22,11 +22,16 @@
+    unwanted sequences.  Thus, if we see any movt insns, something is not
+    working as expected.  This test requires -O2 because the T bit stores
+    in question will be eliminated in additional insn split passes after
+-   reload.  */
++   reload.
++
++   Notice: When this test case was initially added, the T bit optimization
++           was buggy and this test case resulted in wrong code.  The movt
++           instructions actually have to be present in this case to get
++           correct code.  */
+ /* { dg-do compile { target "sh*-*-*" } } */
+ /* { dg-options "-O2" } */
+ /* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
+-/* { dg-final { scan-assembler-not "movt" } } */
++/* { dg-final { scan-assembler "movt" } } */
+ 
+ struct request
+ {
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c	2012-09-10 20:35:25.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c	2014-03-30 20:21:40.720930982 +0000
+@@ -5,7 +5,7 @@
+ /* { dg-options "-O1" } */
+ /* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m1*" "-m2" "-m2e*" } } */
+ /* { dg-final { scan-assembler-not "and" } } */
+-/* { dg-final { scan-assembler-not "31" } } */
++/* { dg-final { scan-assembler-not "#31" } } */
+ 
+ int
+ test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c	2009-02-18 17:06:33.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c	2014-03-30 20:21:40.720930982 +0000
+@@ -2,7 +2,7 @@
+ */
+ /* Origin: Kai Tietz <kai.tietz@onevision.com> */
+ /* { dg-do run } */
+-/* { dg-options "-std=gnu99 -ffast-math" } */
++/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ extern void abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,6 +1,6 @@
+ /* Test for cross x86_64<->w64 abi standard calls.  */
+ /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
+ /* { dg-additional-sources "func-2b.c" } */
+ 
+ extern void __attribute__ ((sysv_abi)) abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* Test for cross x86_64<->w64 abi standard calls.  */
+-/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
+ 
+ long double func_cross (long double a, double b, float c, long d, int e,
+ 			char f)
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,6 +1,6 @@
+ /* Test for cross x86_64<->w64 abi standard calls via variable.  */
+ /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
+ /* { dg-additional-sources "func-indirect-2b.c" } */
+ 
+ extern void __attribute__ ((sysv_abi)) abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* Test for cross x86_64<->w64 abi standard calls via variable.  */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
+ 
+ typedef int (*func)(void *, char *, char *, short, long long);
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c	2009-03-17 01:12:28.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c	2014-03-30 20:21:40.720930982 +0000
+@@ -2,7 +2,7 @@
+ */
+ /* Origin: Kai Tietz <kai.tietz@onevision.com> */
+ /* { dg-do run } */
+-/* { dg-options "-std=gnu99 -ffast-math" } */
++/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ extern void abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c	2010-06-21 07:27:19.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -mabi=sysv" } */
++/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
+ 
+ __attribute__ ((ms_abi))
+ int foo (void)
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c	2010-06-21 07:27:19.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-options "-O2 -mabi=sysv" } */
++/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
+ 
+ extern int glb1, gbl2, gbl3;
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c	2009-02-18 17:06:33.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,7 +1,7 @@
+ /* Test for cross x86_64<->w64 abi standard calls.
+ */
+ /* { dg-do compile } */
+-/* { dg-options "-mno-sse" } */
++/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ long double
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c	2009-02-18 17:06:33.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c	2014-03-30 20:21:40.720930982 +0000
+@@ -2,7 +2,7 @@
+ */
+ /* Origin: Kai Tietz <kai.tietz@onevision.com> */
+ /* { dg-do run } */
+-/* { dg-options "-std=gnu99" } */
++/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ extern __SIZE_TYPE__ strlen (const char *);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c	2009-02-18 17:06:33.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c	2014-03-30 20:21:40.720930982 +0000
+@@ -2,7 +2,7 @@
+ */
+ /* Origin: Kai Tietz <kai.tietz@onevision.com> */
+ /* { dg-do run } */
+-/* { dg-options "-std=gnu99" } */
++/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ extern void abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c	2009-02-18 17:06:33.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c	2014-03-30 20:21:40.720930982 +0000
+@@ -2,7 +2,7 @@
+ */
+ /* Origin: Kai Tietz <kai.tietz@onevision.com> */
+ /* { dg-do run } */
+-/* { dg-options "-std=gnu99" } */
++/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
+ #include "callabi.h"
+ 
+ extern void abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,6 +1,6 @@
+ /* Test for cross x86_64<->w64 abi va_list calls.  */
+ /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
+ /* { dg-additional-sources "vaarg-4b.c" } */
+ 
+ extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* Test for cross x86_64<->w64 abi va_list calls.  */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
+ 
+ #include <stdarg.h>
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,6 +1,6 @@
+ /* Test for cross x86_64<->w64 abi va_list calls.  */
+ /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
+ /* { dg-additional-sources "vaarg-5b.c" } */
+ 
+ extern void __attribute__ ((sysv_abi)) abort (void);
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
+--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c	2009-03-27 22:22:30.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c	2014-03-30 20:21:40.720930982 +0000
+@@ -1,5 +1,5 @@
+ /* Test for cross x86_64<->w64 abi va_list calls.  */
+-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
++/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
+ 
+ #include <stdarg.h>
+ 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/allocate_class_3.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/allocate_class_3.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/allocate_class_3.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/allocate_class_3.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,107 @@
++! { dg-do run }
++! Tests the fix for PR59414, comment #3, in which the allocate
++! expressions were not correctly being stripped to provide the
++! vpointer as an lhs to the pointer assignment of the vptr from
++! the SOURCE expression.
++!
++! Contributed by Antony Lewis  <antony@cosmologist.info>
++!
++module ObjectLists
++  implicit none
++
++  type :: t
++    integer :: i
++  end type
++
++  type Object_array_pointer
++    class(t), pointer :: p(:)
++  end type
++
++contains
++
++  subroutine AddArray1 (P, Pt)
++    class(t) :: P(:)
++    class(Object_array_pointer) :: Pt
++
++    select type (Pt)
++    class is (Object_array_pointer)
++      if (associated (Pt%P)) deallocate (Pt%P)
++      allocate(Pt%P(1:SIZE(P)), source=P)
++    end select
++  end subroutine
++
++  subroutine AddArray2 (P, Pt)
++    class(t) :: P(:)
++    class(Object_array_pointer) :: Pt
++
++    select type (Pt)
++    type is (Object_array_pointer)
++      if (associated (Pt%P)) deallocate (Pt%P)
++      allocate(Pt%P(1:SIZE(P)), source=P)
++    end select
++  end subroutine
++
++  subroutine AddArray3 (P, Pt)
++    class(t) :: P
++    class(Object_array_pointer) :: Pt
++
++    select type (Pt)
++    class is (Object_array_pointer)
++      if (associated (Pt%P)) deallocate (Pt%P)
++      allocate(Pt%P(1:4), source=P)
++    end select
++  end subroutine
++
++  subroutine AddArray4 (P, Pt)
++    type(t) :: P(:)
++    class(Object_array_pointer) :: Pt
++
++    select type (Pt)
++    class is (Object_array_pointer)
++      if (associated (Pt%P)) deallocate (Pt%P)
++      allocate(Pt%P(1:SIZE(P)), source=P)
++    end select
++  end subroutine
++end module
++
++  use ObjectLists
++  type(Object_array_pointer), pointer :: Pt
++  class(t), pointer :: P(:)
++
++  allocate (P(2), source = [t(1),t(2)])
++  allocate (Pt, source = Object_array_pointer(NULL()))
++  call AddArray1 (P, Pt)
++  select type (x => Pt%p)
++    type is (t)
++      if (any (x%i .ne. [1,2])) call abort
++  end select
++  deallocate (P)
++  deallocate (pt)
++
++  allocate (P(3), source = [t(3),t(4),t(5)])
++  allocate (Pt, source = Object_array_pointer(NULL()))
++  call AddArray2 (P, Pt)
++  select type (x => Pt%p)
++    type is (t)
++      if (any (x%i .ne. [3,4,5])) call abort
++  end select
++  deallocate (P)
++  deallocate (pt)
++
++  allocate (Pt, source = Object_array_pointer(NULL()))
++  call AddArray3 (t(6), Pt)
++  select type (x => Pt%p)
++    type is (t)
++      if (any (x%i .ne. [6,6,6,6])) call abort
++  end select
++  deallocate (pt)
++
++  allocate (Pt, source = Object_array_pointer(NULL()))
++  call AddArray4 ([t(7), t(8)], Pt)
++  select type (x => Pt%p)
++    type is (t)
++      if (any (x%i .ne. [7,8])) call abort
++  end select
++  deallocate (pt)
++ end
++
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/constructor_9.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/constructor_9.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/constructor_9.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/constructor_9.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++! { dg-options "-Wall" }
++!
++! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
++!
++! Contributed by Andrew Benson <abensonca@gmail.com>
++
++module cf
++  implicit none
++  type :: cfmde
++  end type
++  interface cfmde
++     module procedure mdedc   ! { dg-error "is neither function nor subroutine" }
++  end interface
++contains
++  subroutine cfi()
++    type(cfmde), pointer :: cfd
++    cfd=cfmde()                  ! { dg-error "Can't convert" }
++  end subroutine
++end module
++
++! { dg-final { cleanup-modules "cf" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/default_initialization_7.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/default_initialization_7.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/default_initialization_7.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/default_initialization_7.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++!
++! PR fortran/57033
++! ICE on a structure constructor of an extended derived type whose parent
++! type last component has a default initializer
++!
++! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
++
++program ice
++
++type m
++    integer i
++    logical :: f = .false.
++end type m
++
++type, extends(m) :: me
++end type me
++
++type(me) meo
++
++meo = me(1)              ! ICE
++end program ice
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/derived_external_function_1.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/derived_external_function_1.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/derived_external_function_1.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,27 @@
++! { dg-do run }
++!
++! PR fortran/58771
++!
++! Contributed by Vittorio Secca  <zeccav@gmail.com>
++!
++! ICEd on the write statement with f() because the derived type backend
++! declaration not built.
++!
++module m
++  type t
++    integer(4) g
++  end type
++end
++
++type(t) function f() result(ff)
++  use m
++  ff%g = 42
++end
++
++  use m
++  character (20) :: line1, line2
++  type(t)  f
++  write (line1, *) f()
++  write (line2, *) 42_4
++  if (line1 .ne. line2) call abort
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,74 @@
++! { dg-do run }
++!
++! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
++!
++! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
++
++module TestResult_mod
++  implicit none
++
++  type TestResult
++    integer :: numRun = 0
++  contains
++    procedure :: run
++    procedure, nopass :: getNumRun
++  end type
++
++contains
++
++  subroutine run (this)
++    class (TestResult) :: this
++    this%numRun = this%numRun + 1
++  end subroutine
++
++  subroutine getNumRun()
++   end subroutine
++
++end module
++
++
++module BaseTestRunner_mod
++  implicit none
++
++  type :: BaseTestRunner
++  contains
++    procedure, nopass :: norun
++  end type
++
++contains
++
++  function norun () result(result)
++    use TestResult_mod, only: TestResult
++    type (TestResult) :: result
++  end function
++
++end module
++
++
++module TestRunner_mod
++  use BaseTestRunner_mod, only: BaseTestRunner
++  implicit none
++end module
++
++
++program main
++  use TestRunner_mod, only: BaseTestRunner
++  use TestResult_mod, only: TestResult
++  implicit none
++
++  type (TestResult) :: result
++
++  call runtest (result)
++  
++contains
++
++  subroutine runtest (result)
++    use TestResult_mod, only: TestResult
++    class (TestResult) :: result
++    call result%run()
++    if (result%numRun /= 1) call abort()
++  end subroutine
++
++end
++
++! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,39 @@
++! { dg-do run }
++!
++! PR fortran/59906
++!
++! Contributed by H Anlauf  <anlauf@gmx.de>
++!
++! Failed generate character scalar for scalarized loop for elemantal call.
++!
++program x
++  implicit none
++  call y('bbb')
++contains
++
++  subroutine y(str)
++    character(len=*), intent(in) :: str
++    character(len=len_trim(str)) :: str_aux
++    character(len=3) :: str3 = 'abc'
++
++    str_aux = str
++
++    ! Compiled but did not give correct result
++    if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
++
++    ! Did not compile
++    if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
++
++    ! Verify patch
++    if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
++    if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
++
++  end subroutine y
++
++  elemental logical function str_cmp(str1, str2)
++    character(len=*), intent(in) :: str1
++    character(len=*), intent(in) :: str2
++    str_cmp = (str1 == str2)
++  end function str_cmp
++
++end program x
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/extends_15.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/extends_15.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/extends_15.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/extends_15.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++!
++! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
++!
++! Contributed by Andrew Benson <abensonca@gmail.com>
++
++module ct
++  public :: t1
++
++  type, extends(t1) :: t2   ! { dg-error "has not been previously defined" }
++
++  type :: t1
++  end type
++end
++
++! { dg-final { cleanup-modules "ct" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/fmt_en.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/fmt_en.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/fmt_en.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/fmt_en.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,141 @@
++! { dg-do run }
++! PR60128 Invalid outputs with EN descriptors
++! Test case provided by Walt Brainerd.
++program pr60128
++implicit none
++    integer :: n_tst = 0, n_cnt = 0
++
++! Original test.
++    call checkfmt("(en15.2)", -.44444,    "    -444.44E-03")
++
++! Test for the bug in comment 6.
++    call checkfmt("(en15.0)", 1.0,        "         1.E+00")
++    call checkfmt("(en15.0)", 1.00000012, "         1.E+00")
++    call checkfmt("(en15.0)", 0.99999994, "         1.E+00")
++    call checkfmt("(en15.0)", 10.0,       "        10.E+00")
++    call checkfmt("(en15.0)", 10.0000010, "        10.E+00")
++    call checkfmt("(en15.0)", 9.99999905, "        10.E+00")
++    call checkfmt("(en15.0)", 100.0,      "       100.E+00")
++    call checkfmt("(en15.0)", 100.000008, "       100.E+00")
++    call checkfmt("(en15.0)", 99.9999924, "       100.E+00")
++    call checkfmt("(en15.0)", 1000.0,     "         1.E+03")
++    call checkfmt("(en15.0)", 1000.00006, "         1.E+03")
++    call checkfmt("(en15.0)", 999.999939, "         1.E+03")
++    call checkfmt("(en15.0)", 9.5,        "        10.E+00")
++    call checkfmt("(en15.0)", 9.50000095, "        10.E+00")
++    call checkfmt("(en15.0)", 9.49999905, "         9.E+00")
++    call checkfmt("(en15.0)", 99.5,       "       100.E+00")
++    call checkfmt("(en15.0)", 99.5000076, "       100.E+00")
++    call checkfmt("(en15.0)", 99.4999924, "        99.E+00")
++    call checkfmt("(en15.0)", 999.5,      "         1.E+03")
++    call checkfmt("(en15.0)", 999.500061, "         1.E+03")
++    call checkfmt("(en15.0)", 999.499939, "       999.E+00")
++    call checkfmt("(en15.0)", 9500.0,     "        10.E+03")
++    call checkfmt("(en15.0)", 9500.00098, "        10.E+03")
++    call checkfmt("(en15.0)", 9499.99902, "         9.E+03")
++    call checkfmt("(en15.1)", 9950.0,     "       10.0E+03")
++    call checkfmt("(en15.2)", 9995.0,     "      10.00E+03")
++    call checkfmt("(en15.3)", 9999.5,     "     10.000E+03")
++    call checkfmt("(en15.1)", 9.5,        "        9.5E+00")
++    call checkfmt("(en15.1)", 9.50000095, "        9.5E+00")
++    call checkfmt("(en15.1)", 9.49999905, "        9.5E+00")
++    call checkfmt("(en15.1)", 0.099951,   "      100.0E-03")
++    call checkfmt("(en15.1)", 0.009951,   "       10.0E-03")
++    call checkfmt("(en15.1)", 0.000999951,"        1.0E-03")
++
++    call checkfmt("(en15.0)", -1.0,        "        -1.E+00")
++    call checkfmt("(en15.0)", -1.00000012, "        -1.E+00")
++    call checkfmt("(en15.0)", -0.99999994, "        -1.E+00")
++    call checkfmt("(en15.0)", -10.0,       "       -10.E+00")
++    call checkfmt("(en15.0)", -10.0000010, "       -10.E+00")
++    call checkfmt("(en15.0)", -9.99999905, "       -10.E+00")
++    call checkfmt("(en15.0)", -100.0,      "      -100.E+00")
++    call checkfmt("(en15.0)", -100.000008, "      -100.E+00")
++    call checkfmt("(en15.0)", -99.9999924, "      -100.E+00")
++    call checkfmt("(en15.0)", -1000.0,     "        -1.E+03")
++    call checkfmt("(en15.0)", -1000.00006, "        -1.E+03")
++    call checkfmt("(en15.0)", -999.999939, "        -1.E+03")
++    call checkfmt("(en15.0)", -9.5,        "       -10.E+00")
++    call checkfmt("(en15.0)", -9.50000095, "       -10.E+00")
++    call checkfmt("(en15.0)", -9.49999905, "        -9.E+00")
++    call checkfmt("(en15.0)", -99.5,       "      -100.E+00")
++    call checkfmt("(en15.0)", -99.5000076, "      -100.E+00")
++    call checkfmt("(en15.0)", -99.4999924, "       -99.E+00")
++    call checkfmt("(en15.0)", -999.5,      "        -1.E+03")
++    call checkfmt("(en15.0)", -999.500061, "        -1.E+03")
++    call checkfmt("(en15.0)", -999.499939, "      -999.E+00")
++    call checkfmt("(en15.0)", -9500.0,     "       -10.E+03")
++    call checkfmt("(en15.0)", -9500.00098, "       -10.E+03")
++    call checkfmt("(en15.0)", -9499.99902, "        -9.E+03")
++    call checkfmt("(en15.1)", -9950.0,     "      -10.0E+03")
++    call checkfmt("(en15.2)", -9995.0,     "     -10.00E+03")
++    call checkfmt("(en15.3)", -9999.5,     "    -10.000E+03")
++    call checkfmt("(en15.1)", -9.5,        "       -9.5E+00")
++    call checkfmt("(en15.1)", -9.50000095, "       -9.5E+00")
++    call checkfmt("(en15.1)", -9.49999905, "       -9.5E+00")
++    call checkfmt("(en15.1)", -0.099951,   "     -100.0E-03")
++    call checkfmt("(en15.1)", -0.009951,   "      -10.0E-03")
++    call checkfmt("(en15.1)", -0.000999951,"       -1.0E-03")
++
++    call checkfmt("(en15.1)", 987350.,     "      987.4E+03")
++    call checkfmt("(en15.2)", 98735.,      "      98.74E+03")
++    call checkfmt("(en15.3)", 9873.5,      "      9.874E+03")
++    call checkfmt("(en15.1)", 987650.,     "      987.6E+03")
++    call checkfmt("(en15.2)", 98765.,      "      98.76E+03")
++    call checkfmt("(en15.3)", 9876.5,      "      9.876E+03")
++    call checkfmt("(en15.1)", 3.125E-02,   "       31.2E-03")
++    call checkfmt("(en15.1)", 9.375E-02,   "       93.8E-03")
++    call checkfmt("(en15.2)", 1.5625E-02,  "      15.62E-03")
++    call checkfmt("(en15.2)", 4.6875E-02,  "      46.88E-03")
++    call checkfmt("(en15.3)", 7.8125E-03,  "      7.812E-03")
++    call checkfmt("(en15.3)", 2.34375E-02, "     23.438E-03")
++    call checkfmt("(en15.3)", 9.765625E-04,"    976.562E-06")
++    call checkfmt("(en15.6)", 2.9296875E-03,"   2.929688E-03")
++
++    call checkfmt("(en15.1)", -987350.,     "     -987.4E+03")
++    call checkfmt("(en15.2)", -98735.,      "     -98.74E+03")
++    call checkfmt("(en15.3)", -9873.5,      "     -9.874E+03")
++    call checkfmt("(en15.1)", -987650.,     "     -987.6E+03")
++    call checkfmt("(en15.2)", -98765.,      "     -98.76E+03")
++    call checkfmt("(en15.3)", -9876.5,      "     -9.876E+03")
++    call checkfmt("(en15.1)", -3.125E-02,   "      -31.2E-03")
++    call checkfmt("(en15.1)", -9.375E-02,   "      -93.8E-03")
++    call checkfmt("(en15.2)", -1.5625E-02,  "     -15.62E-03")
++    call checkfmt("(en15.2)", -4.6875E-02,  "     -46.88E-03")
++    call checkfmt("(en15.3)", -7.8125E-03,  "     -7.812E-03")
++    call checkfmt("(en15.3)", -2.34375E-02, "    -23.438E-03")
++    call checkfmt("(en15.3)", -9.765625E-04,"   -976.562E-06")
++    call checkfmt("(en15.6)", -2.9296875E-03,"  -2.929688E-03")
++
++    !print *, n_tst, n_cnt
++    if (n_cnt /= 0) call abort
++
++contains
++    subroutine checkfmt(fmt, x, cmp)
++        use ISO_FORTRAN_ENV
++        implicit none
++        integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
++        integer :: i
++        character(len=*), intent(in) :: fmt
++        real, intent(in) :: x
++        character(len=*), intent(in) :: cmp
++        character(len=20) :: s
++        do i=1,size(real_kinds)
++          if (i == 1) then
++            write(s, fmt) real(x,kind=j(1))
++          else if (i == 2) then
++            write(s, fmt) real(x,kind=j(2))
++          else if (i == 3) then
++            write(s, fmt) real(x,kind=j(3))
++          else if (i == 4) then
++            write(s, fmt) real(x,kind=j(4))
++          end if
++          n_tst = n_tst + 1
++          if (s /= cmp) then
++             print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
++             n_cnt = n_cnt + 1
++           end if
++        end do
++        
++    end subroutine
++end program
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/fmt_g_1.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/fmt_g_1.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/fmt_g_1.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/fmt_g_1.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,11 @@
++! { dg-do run }
++! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
++! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
++       PROGRAM FOO
++       character(len=60) :: buffer, buffer1
++
++       write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++       write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++
++       if (buffer /= buffer1) call abort
++       end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/generic_28.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/generic_28.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/generic_28.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/generic_28.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,18 @@
++! { dg-do compile }
++!
++! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
++!
++! Contributed by Paul van Delst
++
++  interface iargc
++    procedure iargc_8
++  end interface
++  
++contains
++
++  integer(8) function iargc_8()
++    integer(4) iargc
++    iargc_8 = iargc()
++  end function
++  
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/gomp/pr59467.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/gomp/pr59467.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/gomp/pr59467.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/gomp/pr59467.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,24 @@
++! PR libgomp/59467
++! { dg-do compile }
++! { dg-options "-fopenmp" }
++  FUNCTION t()
++    INTEGER :: a, b, t
++    a = 0
++    b = 0
++    !$OMP PARALLEL REDUCTION(+:b)
++      !$OMP SINGLE	! { dg-error "is not threadprivate or private in outer context" }
++        !$OMP ATOMIC WRITE
++        a = 6
++      !$OMP END SINGLE COPYPRIVATE (a)
++      b = a
++    !$OMP END PARALLEL
++    t = b
++    b = 0
++    !$OMP PARALLEL REDUCTION(+:b)
++      !$OMP SINGLE
++        !$OMP ATOMIC WRITE
++        b = 6
++      !$OMP END SINGLE COPYPRIVATE (b)
++    !$OMP END PARALLEL
++    t = t + b
++  END FUNCTION
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/ichar_3.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/ichar_3.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/ichar_3.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/ichar_3.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++!
++! PR fortran/59599
++! The call to ichar was triggering an ICE.
++!
++! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
++
++character(1) cpk(2)
++integer res(2)
++cpk = 'a'
++res = ichar( cpk, kind=1 )
++print *, ichar( cpk, kind=1 )
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/implicit_pure_4.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/implicit_pure_4.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/implicit_pure_4.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++!
++! PR fortran/60543
++! PR fortran/60283
++!
++module m
++contains
++  REAL(8) FUNCTION random()
++    CALL RANDOM_NUMBER(random)
++  END FUNCTION random
++  REAL(8) FUNCTION random2()
++    block
++      block
++        block
++          CALL RANDOM_NUMBER(random2)
++        end block
++      end block
++    end block
++  END FUNCTION random2
++end module m
++
++! { dg-final { scan-module-absence "m" "IMPLICIT_PURE" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/init_flag_12.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/init_flag_12.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/init_flag_12.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/init_flag_12.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-fno-automatic -finit-local-zero" }
++!
++! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
++!
++! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
++
++subroutine cchaine (i)
++  implicit none
++  integer :: i
++  character(len=i) :: chaine
++  write(*,*) chaine
++end subroutine 
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/list_read_12.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/list_read_12.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/list_read_12.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/list_read_12.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,11 @@
++! { dg-do run }
++! PR58324 Bogus end of file condition
++integer :: i, ios
++open(99, access='stream', form='unformatted')
++write(99) "5 a"
++close(99)
++
++open(99, access='sequential', form='formatted')
++read(99, *, iostat=ios) i
++if (ios /= 0) call abort
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/null_5.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/null_5.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/null_5.f90	2011-09-14 06:27:25.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/null_5.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -34,7 +34,7 @@
+ end subroutine test_PR34547_1
+ 
+ subroutine test_PR34547_2 ()
+-  print *, null () ! { dg-error "in data transfer statement requires MOLD" }
++  print *, null () ! { dg-error "Invalid context" }
+ end subroutine test_PR34547_2
+ 
+ subroutine test_PR34547_3 ()
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/null_6.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/null_6.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/null_6.f90	2011-09-14 06:27:25.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/null_6.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -30,5 +30,5 @@
+ 
+ subroutine test_PR34547_3 ()
+   integer, allocatable :: i(:)
+-  print *, NULL(i)
++  print *, NULL(i)    ! { dg-error "Invalid context for NULL" }
+ end subroutine test_PR34547_3
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/optional_class_1.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/optional_class_1.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/optional_class_1.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/optional_class_1.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,45 @@
++! { dg-do run }
++!
++! PR fortran/57445
++!
++! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
++!
++! Spurious assert was added at revision 192495
++!
++module m
++  implicit none
++  type t
++    integer :: i
++  end type t
++contains
++  subroutine opt(xa, xc, xaa, xca)
++    type(t),  allocatable, intent(out), optional :: xa
++    class(t), allocatable, intent(out), optional :: xc
++    type(t),  allocatable, intent(out), optional :: xaa(:)
++    class(t), allocatable, intent(out), optional :: xca(:)
++    if (present (xca)) call foo_opt(xca=xca)
++  end subroutine opt
++  subroutine foo_opt(xa, xc, xaa, xca)
++    type(t),  allocatable, intent(out), optional :: xa
++    class(t), allocatable, intent(out), optional :: xc
++    type(t),  allocatable, intent(out), optional :: xaa(:)
++    class(t), allocatable, intent(out), optional :: xca(:)
++    if (present (xca)) then
++      if (allocated (xca)) deallocate (xca)
++      allocate (xca(3), source = [t(9),t(99),t(999)])
++    end if
++  end subroutine foo_opt
++end module m
++  use m
++  class(t), allocatable :: xca(:)
++  allocate (xca(1), source = t(42))
++  select type (xca)
++    type is (t)
++      if (any (xca%i .ne. [42])) call abort
++  end select
++  call opt (xca = xca)
++  select type (xca)
++    type is (t)
++      if (any (xca%i .ne. [9,99,999])) call abort
++  end select
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/pr52370.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/pr52370.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/pr52370.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/pr52370.f90	2014-03-30 20:21:40.727597868 +0000
+@@ -0,0 +1,21 @@
++! PR fortran/52370
++! { dg-do compile }
++! { dg-options "-O1 -Wall" }
++
++module pr52370
++contains
++  subroutine foo(a,b)
++    real, intent(out) :: a
++    real, dimension(:), optional, intent(out) :: b
++    a=0.5
++    if (present(b)) then
++      b=1.0
++    end if
++  end subroutine foo
++end module pr52370
++
++program prg52370
++  use pr52370
++  real :: a
++  call foo(a)
++end program prg52370
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/pr59700.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/pr59700.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/pr59700.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/pr59700.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,40 @@
++! { dg-do run }
++! PR59700 Test case by Steve Kargl
++program foo
++
++   implicit none
++
++   character(len=80) msg
++   integer, parameter :: fd = 10
++   integer i1, i2, i3, i4
++   real    x1, x2, x3, x4
++   complex c1, c2
++   logical a
++
++   open(unit=fd, status='scratch')
++   write(fd, '(A)') '1 2 3.4 q'
++
++   rewind(fd)
++   msg = 'ok'
++   read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
++10 if (msg /= 'Bad integer for item 3 in list input') call abort
++   rewind(fd)
++   msg = 'ok'
++   read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
++20 if (msg /= 'Bad real number in item 4 of list input') call abort
++   rewind(fd)
++   msg = 'ok'
++   read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
++30 if (msg /= 'Bad logical value while reading item 4') call abort
++   rewind(fd)
++   read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
++31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
++   close(fd)
++   open(unit=fd, status='scratch')
++   write(fd, '(A)') '(1, 2) (3.4, q)'
++   rewind(fd)
++   msg = 'ok'
++   read(fd, *, err=40, iomsg=msg) c1, c2
++40 if (msg /= 'Bad floating point number for item 2') call abort
++   close(fd)
++end program foo
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_43.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_43.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_43.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_43.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,19 @@
++! { dg-do compile }
++!
++! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
++!
++! Contributed by Daniel Price <daniel.price@monash.edu>
++
++  implicit none
++  procedure(real), pointer :: wfunc
++
++  wfunc => w_cubic 
++ 
++contains
++
++  pure real function w_cubic(q2)
++    real, intent(in) :: q2
++    w_cubic = 0.
++  end function
++
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_45.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_45.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_45.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_45.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,24 @@
++! { dg-do compile }
++!
++! PR fortran/49397
++!
++! Valid per IR F08/0060 and F2008Corr2, C729
++!
++Program m5
++  Print *,f()
++Contains
++  Subroutine s
++    Procedure(Real),Pointer :: p
++    Print *,g()
++    p => f                           ! (1)
++    Print *,p()
++    p => g                           ! (2)
++    Print *,p()
++  End Subroutine
++End Program
++Function f()
++  f = 1
++End Function
++Function g()
++  g = 2
++End Function
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_46.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_46.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_46.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_46.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,14 @@
++! { dg-do compile }
++!
++! PR fortran/49397
++!
++! Invalid per IR F08/0060 and F2008Corr2, C729
++!
++
++!  Print *,f() ! << Valid when uncommented
++Contains
++  Subroutine s
++    Procedure(Real),Pointer :: p
++    p => f  ! { dg-error "Procedure pointer target 'f' at .1. must be either an intrinsic, host or use associated, referenced or have the EXTERNAL attribute" }
++  End Subroutine
++End
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,12 @@
++! { dg-do compile }
++!
++! PR fortran/58803
++!
++! Contributed by Vittorio Zecca
++!
++! Was before ICEing due to a double free
++!
++      type t
++       procedure(real), pointer, nopass  :: f1, f2
++      end type
++      end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/reshape_6.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/reshape_6.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/reshape_6.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/reshape_6.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,19 @@
++! { dg-do compile }
++! PR fortran/58989
++!
++program test
++
++  real(8), dimension(4,4) :: fluxes
++  real(8), dimension(2,2,2,2) :: f
++  integer, dimension(3) :: dmmy 
++  integer, parameter :: indx(4)=(/2,2,2,2/)
++
++  fluxes = 1
++
++  dmmy = (/2,2,2/)
++
++  f = reshape(fluxes,(/dmmy,2/))  ! Caused an ICE
++  f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
++  f = reshape(fluxes,indx)        ! Works as expected
++
++end program test
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/round_3.f08 gcc-4.8.2/gcc/testsuite/gfortran.dg/round_3.f08
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/round_3.f08	2011-05-05 01:23:46.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/round_3.f08	2014-03-30 20:21:40.730931311 +0000
+@@ -16,19 +16,44 @@
+     call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")
+     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05")
+ 
+-    call checkfmt("(RU,F2.0)",     0.09,  "1.")     ! 0.
++    call checkfmt("(RC,G10.2)", 99.5,   "  0.10E+03") ! pr59774
++    call checkfmt("(RC,G10.2)", 995.,   "  0.10E+04") ! pr59774
++    call checkfmt("(RC,G10.3)", 999.5,  " 0.100E+04") ! pr59774
++    call checkfmt("(RC,G10.3)", 9995.,  " 0.100E+05") ! pr59774
++    call checkfmt("(RU,G10.2)", .099,   "  0.10    ") ! pr59774
++    call checkfmt("(RC,G10.1)", .095,   "   0.1    ") ! pr59774
++    call checkfmt("(RU,G10.3)", .0999,  " 0.100    ") ! pr59774
++    call checkfmt("(RC,G10.2)", .0995,  "  0.10    ") ! pr59774
++
++    call checkfmt("(RU,G9.3)",  891.1,  " 892.")      ! pr59836
++    call checkfmt("(RD,G9.3)", -891.1,  "-892.")      ! pr59836
++    
++    call checkfmt("(RU,F6.4)",     0.00006,  "0.0001")! 0.
++    call checkfmt("(RU,F5.3)",     0.0007,  "0.001")  ! 0.
++    call checkfmt("(RU,F4.2)",     0.008,  "0.01")    ! 0.
++    call checkfmt("(RU,F3.1)",     0.09,  "0.1")      ! 0.
++
++    call checkfmt("(RU,F2.0)",     0.09,  "1.")       ! 0.
+     call checkfmt("(RD,F3.0)",     -0.09,  "-1.")     ! -0.
+-    call checkfmt("(RU,F2.0)",      2.0,  "2.")     ! 3.
+-    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")     ! -3.
+-    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")     ! 2.0001
+-    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")     ! -2.0001
+-    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00") ! 3.E+00
++    call checkfmt("(RU,F2.0)",     0.9,  "1.")        ! pr59836
++    call checkfmt("(RC,F2.0)",     0.4,  "0.")        ! pr59836
++    call checkfmt("(RC,F2.0)",     0.5,  "1.")        ! pr59836
++    call checkfmt("(RC,F2.0)",     0.6,  "1.")        ! pr59836
++    call checkfmt("(RD,F3.0)",     -0.9,  "-1.")      ! pr59836
++    call checkfmt("(RC,F3.0)",     -0.4,  "-0.")      ! pr59836
++    call checkfmt("(RC,F3.0)",     -0.5,  "-1.")      ! pr59836
++    call checkfmt("(RC,F3.0)",     -0.6,  "-1.")      ! pr59836
++    call checkfmt("(RU,F2.0)",      2.0,  "2.")       ! 3.
++    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")      ! -3.
++    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")   ! 2.0001
++    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")  ! -2.0001
++    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
+     call checkfmt("(RD,1P,E7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
+-    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00") ! 2.6E+00
++    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00")  ! 2.6E+00
+     call checkfmt("(RD,1P,E8.1E2)", -2.5,  "-2.5E+00") ! -2.6E+00
+     call checkfmt("(RU,1P,E10.4E2)", 2.5,  "2.5000E+00") ! 2.5001E+00
+     call checkfmt("(RD,1P,E11.4E2)", -2.5,  "-2.5000E+00") ! -2.5001E+00
+-    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00") ! 3.E+00
++    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
+     call checkfmt("(RD,1P,G7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
+     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05") ! 2.3457E+05
+     call checkfmt("(RD,1P,G11.4E2)", -2.3456e5,  "-2.3456E+05") ! -2.3457E+05
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/shape_8.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/shape_8.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/shape_8.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/shape_8.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,10 @@
++! { dg-do compile }
++!
++! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
++!
++! Contributed by Dave Allured <dave.allured@noaa.gov>
++
++  real, allocatable :: x(:,:)
++  allocate (x(3,2), source=99.)
++  print *, shape (x / 10.0)
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++! { dg-options "-ffrontend-optimize" }
++!
++! PR fortran/60341
++! An unguarded union access was wrongly enabling a frontend optimization on a
++! string comparison, leading to an ICE.
++!
++! Original testcase from Steve Chapel  <steve.chapel@a2pg.com>.
++! Reduced by Steven G. Kargl  <kargl@gcc.gnu.org>.
++!
++
++      subroutine modelg(ncm)
++      implicit none
++      integer, parameter :: pc = 30, pm = pc - 1
++      integer i
++      character*4 catt(pm,2)
++      integer ncm,iatt(pm,pc)
++      do i=1,ncm
++         if (catt(i,1)//catt(i,2).eq.'central') exit
++      end do
++      iatt(i,4)=1
++      end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/typebound_generic_15.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/typebound_generic_15.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/typebound_generic_15.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/typebound_generic_15.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,18 @@
++! { dg-do compile }
++!
++! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
++!
++! Contributed by Antony Lewis <antony@cosmologist.info>
++
++module Objects
++
++  Type TObjectList
++  contains
++    procedure :: Add1             ! { dg-error "must be a module procedure" }
++    procedure :: Add2             ! { dg-error "must be a module procedure" }
++    generic :: Add => Add1, Add2  ! { dg-error "are ambiguous" }
++  end Type
++
++end module
++
++! { dg-final { cleanup-modules "Objects" } }
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,17 @@
++! { dg-do compile }
++!
++! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
++!
++! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
++
++  implicit none
++
++  type ty_mytype1
++  end type
++
++  class(ty_mytype1), allocatable, target:: cla1
++  class(*), pointer :: ptr
++
++  ptr => cla1
++
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,44 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
++
++module matrix
++  type :: sparse_matrix
++    integer :: max_degree
++  end type
++contains
++  subroutine init_interface (A)
++    class(sparse_matrix), intent(in) :: A
++  end subroutine
++  real function get_value_interface()
++  end function
++end module
++
++module ellpack
++  use matrix
++end module
++
++module bsr
++  use matrix
++  type, extends(sparse_matrix) :: bsr_matrix
++  contains
++    procedure :: get_neighbors
++  end type
++contains
++  function get_neighbors (A)
++    class(bsr_matrix), intent(in) :: A
++    integer :: get_neighbors(A%max_degree)
++  end function
++end module
++
++program main
++  use ellpack
++  use bsr
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,36 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fiixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++
++module matrix
++  type :: sparse_matrix
++    integer :: max_degree
++  end type
++end module
++
++module bsr
++  use matrix
++
++  type, extends(sparse_matrix) :: bsr_matrix
++  end type
++
++  integer :: i1
++  integer :: i2
++  integer :: i3
++contains
++  function get_neighbors (A)
++    type(bsr_matrix), intent(in) :: A
++    integer :: get_neighbors(A%max_degree)
++  end function
++end module
++
++program main
++  use matrix
++  use bsr
++end
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/where_4.f90 gcc-4.8.2/gcc/testsuite/gfortran.dg/where_4.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.dg/where_4.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.dg/where_4.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,18 @@
++! { dg-do compile }
++! PR 60522 - this used to ICE.
++! Original test case Roger Ferrer Ibanez
++subroutine foo(a, b)
++   implicit none
++   integer, dimension(:), intent(inout) :: a
++   integer, dimension(:), intent(in) :: b
++
++   where (b(:) > 0)
++      where (b(:) > 100)
++         a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1)) - 100
++      elsewhere
++         a(lbound(a, 1):ubound(a, 1)) = b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
++      end where
++   elsewhere
++      a(lbound(a, 1):ubound(a, 1)) = - b(lbound(b, 1):ubound(b, 1)) * b(lbound(b, 1):ubound(b, 1))
++   end where
++end subroutine foo
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 gcc-4.8.2/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
+--- gcc-4.8.2.orig/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,13 @@
++SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
++  INTEGER, INTENT( IN ) :: ims, ime, its, ite
++  REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
++  REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
++  INTEGER :: i
++  REAL :: zu
++  DO i = its, ite
++    zu =  (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
++    IF (wavg(i) .GT. 0) THEN
++      uh(i) = uh(i) + zu 
++    ENDIF
++  END DO
++END SUBROUTINE cal_helicity
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/gnat.dg/opt32.adb gcc-4.8.2/gcc/testsuite/gnat.dg/opt32.adb
+--- gcc-4.8.2.orig/gcc/testsuite/gnat.dg/opt32.adb	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/gnat.dg/opt32.adb	2014-03-30 20:21:40.730931311 +0000
+@@ -0,0 +1,37 @@
++-- { dg-do compile }
++-- { dg-options "-O2" }
++
++with Ada.Containers; use Ada.Containers;
++with Ada.Containers.Vectors;
++
++function Opt32 return Natural is
++
++   package My_Vectors
++      is new Vectors (Index_Type => Natural, Element_Type => Integer);
++   use My_Vectors;
++
++   V : Vector;
++
++   function Sign_Changes return Natural is
++      Cur      : Cursor := To_Cursor (V, 0);
++      R        : Natural := 0;
++      Negative : Boolean;
++   begin
++      Negative := Element (Cur) < 0;
++
++      loop
++         Cur := Next (Cur);
++         exit when R > 100;
++
++         if (Element (Cur) < 0) /= Negative then
++            Negative := not Negative;
++            R := R + 1;
++         end if;
++      end loop;
++
++      return R;
++   end;
++
++begin
++   return Sign_Changes;
++end;
+diff -Naur gcc-4.8.2.orig/gcc/testsuite/go.test/go-test.exp gcc-4.8.2/gcc/testsuite/go.test/go-test.exp
+--- gcc-4.8.2.orig/gcc/testsuite/go.test/go-test.exp	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/testsuite/go.test/go-test.exp	2014-03-30 20:21:40.730931311 +0000
+@@ -333,17 +333,16 @@
+ 	}
+ 
+ 	if { ( [file tail $test] == "select2.go" \
+-		   || [file tail $test] == "stack.go" ) \
++		   || [file tail $test] == "stack.go" \
++		   || [file tail $test] == "peano.go" ) \
+ 		 && ! [check_effective_target_split_stack] } {
+-	    # chan/select2.go fails on targets without split stack,
+-	    # because they allocate a large stack segment that blows
+-	    # out the memory calculations.
++	    # These tests fails on targets without split stack.
+ 	    untested $name
+ 	    continue
+ 	}
+ 
+-	if { [file tail $test] == "rotate.go" } {
+-	    # This test produces a temporary file that takes too long
++	if [string match "*go.test/test/rotate\[0123\].go" $test] {
++	    # These tests produces a temporary file that takes too long
+ 	    # to compile--5 minutes on my laptop without optimization.
+ 	    # When compiling without optimization it tests nothing
+ 	    # useful, since the point of the test is to see whether
+diff -Naur gcc-4.8.2.orig/gcc/tree-cfg.c gcc-4.8.2/gcc/tree-cfg.c
+--- gcc-4.8.2.orig/gcc/tree-cfg.c	2013-04-29 14:14:05.000000000 +0000
++++ gcc-4.8.2/gcc/tree-cfg.c	2014-03-30 20:21:40.730931311 +0000
+@@ -104,7 +104,6 @@
+ static void assign_discriminator (location_t, basic_block);
+ static edge gimple_redirect_edge_and_branch (edge, basic_block);
+ static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
+-static unsigned int split_critical_edges (void);
+ 
+ /* Various helpers.  */
+ static inline bool stmt_starts_bb_p (gimple, gimple);
+@@ -1535,6 +1534,11 @@
+ 
+   FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
+     {
++      /* Mark the block if we change the last stmt in it.  */
++      if (cfgcleanup_altered_bbs
++	  && stmt_ends_bb_p (stmt))
++	bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
++
+       FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
+         {
+ 	  replace_exp (use, val);
+@@ -1559,11 +1563,6 @@
+ 	  gimple orig_stmt = stmt;
+ 	  size_t i;
+ 
+-	  /* Mark the block if we changed the last stmt in it.  */
+-	  if (cfgcleanup_altered_bbs
+-	      && stmt_ends_bb_p (stmt))
+-	    bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
+-
+ 	  /* FIXME.  It shouldn't be required to keep TREE_CONSTANT
+ 	     on ADDR_EXPRs up-to-date on GIMPLE.  Propagation will
+ 	     only change sth from non-invariant to invariant, and only
+@@ -3513,11 +3512,10 @@
+     case PLUS_EXPR:
+     case MINUS_EXPR:
+       {
+-	/* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
+-	   ???  This just makes the checker happy and may not be what is
+-	   intended.  */
+-	if (TREE_CODE (lhs_type) == VECTOR_TYPE
+-	    && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
++	tree lhs_etype = lhs_type;
++	tree rhs1_etype = rhs1_type;
++	tree rhs2_etype = rhs2_type;
++	if (TREE_CODE (lhs_type) == VECTOR_TYPE)
+ 	  {
+ 	    if (TREE_CODE (rhs1_type) != VECTOR_TYPE
+ 		|| TREE_CODE (rhs2_type) != VECTOR_TYPE)
+@@ -3525,22 +3523,13 @@
+ 		error ("invalid non-vector operands to vector valued plus");
+ 		return true;
+ 	      }
+-	    lhs_type = TREE_TYPE (lhs_type);
+-	    rhs1_type = TREE_TYPE (rhs1_type);
+-	    rhs2_type = TREE_TYPE (rhs2_type);
+-	    /* PLUS_EXPR is commutative, so we might end up canonicalizing
+-	       the pointer to 2nd place.  */
+-	    if (POINTER_TYPE_P (rhs2_type))
+-	      {
+-		tree tem = rhs1_type;
+-		rhs1_type = rhs2_type;
+-		rhs2_type = tem;
+-	      }
+-	    goto do_pointer_plus_expr_check;
++	    lhs_etype = TREE_TYPE (lhs_type);
++	    rhs1_etype = TREE_TYPE (rhs1_type);
++	    rhs2_etype = TREE_TYPE (rhs2_type);
+ 	  }
+-	if (POINTER_TYPE_P (lhs_type)
+-	    || POINTER_TYPE_P (rhs1_type)
+-	    || POINTER_TYPE_P (rhs2_type))
++	if (POINTER_TYPE_P (lhs_etype)
++	    || POINTER_TYPE_P (rhs1_etype)
++	    || POINTER_TYPE_P (rhs2_etype))
+ 	  {
+ 	    error ("invalid (pointer) operands to plus/minus");
+ 	    return true;
+@@ -3552,7 +3541,6 @@
+ 
+     case POINTER_PLUS_EXPR:
+       {
+-do_pointer_plus_expr_check:
+ 	if (!POINTER_TYPE_P (rhs1_type)
+ 	    || !useless_type_conversion_p (lhs_type, rhs1_type)
+ 	    || !ptrofftype_p (rhs2_type))
+@@ -7658,7 +7646,7 @@
+ 
+ /* Split all critical edges.  */
+ 
+-static unsigned int
++unsigned int
+ split_critical_edges (void)
+ {
+   basic_block bb;
+diff -Naur gcc-4.8.2.orig/gcc/tree-dfa.c gcc-4.8.2/gcc/tree-dfa.c
+--- gcc-4.8.2.orig/gcc/tree-dfa.c	2013-03-04 18:49:59.000000000 +0000
++++ gcc-4.8.2/gcc/tree-dfa.c	2014-03-30 20:21:40.730931311 +0000
+@@ -386,7 +386,6 @@
+   double_int bit_offset = double_int_zero;
+   HOST_WIDE_INT hbit_offset;
+   bool seen_variable_array_ref = false;
+-  tree base_type;
+ 
+   /* First get the final access size from just the outermost expression.  */
+   if (TREE_CODE (exp) == COMPONENT_REF)
+@@ -417,8 +416,6 @@
+      and find the ultimate containing object.  */
+   while (1)
+     {
+-      base_type = TREE_TYPE (exp);
+-
+       switch (TREE_CODE (exp))
+ 	{
+ 	case BIT_FIELD_REF:
+@@ -543,7 +540,38 @@
+ 	case VIEW_CONVERT_EXPR:
+ 	  break;
+ 
++	case TARGET_MEM_REF:
++	  /* Via the variable index or index2 we can reach the
++	     whole object.  Still hand back the decl here.  */
++	  if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
++	      && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
++	    {
++	      exp = TREE_OPERAND (TMR_BASE (exp), 0);
++	      bit_offset = double_int_zero;
++	      maxsize = -1;
++	      goto done;
++	    }
++	  /* Fallthru.  */
+ 	case MEM_REF:
++	  /* We need to deal with variable arrays ending structures such as
++	     struct { int length; int a[1]; } x;           x.a[d]
++	     struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
++	     struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
++	     struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
++	     where we do not know maxsize for variable index accesses to
++	     the array.  The simplest way to conservatively deal with this
++	     is to punt in the case that offset + maxsize reaches the
++	     base type boundary.  This needs to include possible trailing
++	     padding that is there for alignment purposes.  */
++	  if (seen_variable_array_ref
++	      && maxsize != -1
++	      && (!bit_offset.fits_shwi ()
++		  || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
++		  || (bit_offset.to_shwi () + maxsize
++		      == (HOST_WIDE_INT) TREE_INT_CST_LOW
++		            (TYPE_SIZE (TREE_TYPE (exp))))))
++	    maxsize = -1;
++
+ 	  /* Hand back the decl for MEM[&decl, off].  */
+ 	  if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
+ 	    {
+@@ -565,45 +593,24 @@
+ 	    }
+ 	  goto done;
+ 
+-	case TARGET_MEM_REF:
+-	  /* Hand back the decl for MEM[&decl, off].  */
+-	  if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
+-	    {
+-	      /* Via the variable index or index2 we can reach the
+-		 whole object.  */
+-	      if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
+-		{
+-		  exp = TREE_OPERAND (TMR_BASE (exp), 0);
+-		  bit_offset = double_int_zero;
+-		  maxsize = -1;
+-		  goto done;
+-		}
+-	      if (integer_zerop (TMR_OFFSET (exp)))
+-		exp = TREE_OPERAND (TMR_BASE (exp), 0);
+-	      else
+-		{
+-		  double_int off = mem_ref_offset (exp);
+-		  off = off.alshift (BITS_PER_UNIT == 8
+-				     ? 3 : exact_log2 (BITS_PER_UNIT),
+-				     HOST_BITS_PER_DOUBLE_INT);
+-		  off += bit_offset;
+-		  if (off.fits_shwi ())
+-		    {
+-		      bit_offset = off;
+-		      exp = TREE_OPERAND (TMR_BASE (exp), 0);
+-		    }
+-		}
+-	    }
+-	  goto done;
+-
+ 	default:
+ 	  goto done;
+ 	}
+ 
+       exp = TREE_OPERAND (exp, 0);
+     }
+- done:
+ 
++  /* We need to deal with variable arrays ending structures.  */
++  if (seen_variable_array_ref
++      && maxsize != -1
++      && (!bit_offset.fits_shwi ()
++	  || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
++	  || (bit_offset.to_shwi () + maxsize
++	      == (HOST_WIDE_INT)
++	           TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
++    maxsize = -1;
++
++ done:
+   if (!bit_offset.fits_shwi ())
+     {
+       *poffset = 0;
+@@ -615,24 +622,6 @@
+ 
+   hbit_offset = bit_offset.to_shwi ();
+ 
+-  /* We need to deal with variable arrays ending structures such as
+-       struct { int length; int a[1]; } x;           x.a[d]
+-       struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
+-       struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
+-       struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
+-     where we do not know maxsize for variable index accesses to
+-     the array.  The simplest way to conservatively deal with this
+-     is to punt in the case that offset + maxsize reaches the
+-     base type boundary.  This needs to include possible trailing padding
+-     that is there for alignment purposes.  */
+-
+-  if (seen_variable_array_ref
+-      && maxsize != -1
+-      && (!host_integerp (TYPE_SIZE (base_type), 1)
+-	  || (hbit_offset + maxsize
+-	      == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
+-    maxsize = -1;
+-
+   /* In case of a decl or constant base object we can do better.  */
+ 
+   if (DECL_P (exp))
+diff -Naur gcc-4.8.2.orig/gcc/tree-eh.c gcc-4.8.2/gcc/tree-eh.c
+--- gcc-4.8.2.orig/gcc/tree-eh.c	2013-03-25 14:47:56.000000000 +0000
++++ gcc-4.8.2/gcc/tree-eh.c	2014-03-30 20:21:40.730931311 +0000
+@@ -1357,9 +1357,6 @@
+   x = gimple_seq_last_stmt (finally);
+   finally_loc = x ? gimple_location (x) : tf_loc;
+ 
+-  /* Lower the finally block itself.  */
+-  lower_eh_constructs_1 (state, &finally);
+-
+   /* Prepare for switch statement generation.  */
+   nlabels = tf->dest_array.length ();
+   return_index = nlabels;
+@@ -1445,6 +1442,7 @@
+   x = gimple_build_label (finally_label);
+   gimple_seq_add_stmt (&tf->top_p_seq, x);
+ 
++  lower_eh_constructs_1 (state, &finally);
+   gimple_seq_add_seq (&tf->top_p_seq, finally);
+ 
+   /* Redirect each incoming goto edge.  */
+@@ -2502,12 +2500,6 @@
+  restart:
+   switch (code)
+     {
+-    case TARGET_MEM_REF:
+-      if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
+-	  && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
+-	return false;
+-      return !TREE_THIS_NOTRAP (expr);
+-
+     case COMPONENT_REF:
+     case REALPART_EXPR:
+     case IMAGPART_EXPR:
+@@ -2534,10 +2526,36 @@
+ 	return false;
+       return !in_array_bounds_p (expr);
+ 
++    case TARGET_MEM_REF:
+     case MEM_REF:
+-      if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
++      if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
++	  && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
++	return true;
++      if (TREE_THIS_NOTRAP (expr))
+ 	return false;
+-      /* Fallthru.  */
++      /* We cannot prove that the access is in-bounds when we have
++         variable-index TARGET_MEM_REFs.  */
++      if (code == TARGET_MEM_REF
++	  && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
++	return true;
++      if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
++	{
++	  tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
++	  double_int off = mem_ref_offset (expr);
++	  if (off.is_negative ())
++	    return true;
++	  if (TREE_CODE (base) == STRING_CST)
++	    return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
++	  else if (DECL_SIZE_UNIT (base) == NULL_TREE
++		   || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
++		   || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
++	    return true;
++	  /* Now we are sure the first byte of the access is inside
++	     the object.  */
++	  return false;
++	}
++      return true;
++
+     case INDIRECT_REF:
+       return !TREE_THIS_NOTRAP (expr);
+ 
+@@ -4166,8 +4184,11 @@
+   /* If the block is totally empty, look for more unsplitting cases.  */
+   if (gsi_end_p (gsi))
+     {
+-      /* For the degenerate case of an infinite loop bail out.  */
+-      if (infinite_empty_loop_p (e_out))
++      /* For the degenerate case of an infinite loop bail out.
++	 If bb has no successors and is totally empty, which can happen e.g.
++	 because of incorrect noreturn attribute, bail out too.  */
++      if (e_out == NULL
++	  || infinite_empty_loop_p (e_out))
+ 	return ret;
+ 
+       return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
+@@ -4304,11 +4325,12 @@
+   remove_unreachable_handlers ();
+ 
+   /* Watch out for the region tree vanishing due to all unreachable.  */
+-  if (cfun->eh->region_tree && optimize)
++  if (cfun->eh->region_tree)
+     {
+       bool changed = false;
+ 
+-      changed |= unsplit_all_eh ();
++      if (optimize)
++	changed |= unsplit_all_eh ();
+       changed |= cleanup_all_empty_eh ();
+ 
+       if (changed)
+diff -Naur gcc-4.8.2.orig/gcc/tree-flow.h gcc-4.8.2/gcc/tree-flow.h
+--- gcc-4.8.2.orig/gcc/tree-flow.h	2013-02-27 14:01:08.000000000 +0000
++++ gcc-4.8.2/gcc/tree-flow.h	2014-03-30 20:21:40.734264754 +0000
+@@ -425,6 +425,7 @@
+ 				           basic_block, tree);
+ void remove_edge_and_dominated_blocks (edge);
+ bool tree_node_can_be_shared (tree);
++extern unsigned int split_critical_edges (void);
+ 
+ /* In tree-cfgcleanup.c  */
+ extern bitmap cfgcleanup_altered_bbs;
+diff -Naur gcc-4.8.2.orig/gcc/tree-object-size.c gcc-4.8.2/gcc/tree-object-size.c
+--- gcc-4.8.2.orig/gcc/tree-object-size.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/tree-object-size.c	2014-03-30 20:21:40.734264754 +0000
+@@ -64,7 +64,7 @@
+    the subobject (innermost array or field with address taken).
+    object_sizes[2] is lower bound for number of bytes till the end of
+    the object and object_sizes[3] lower bound for subobject.  */
+-static unsigned HOST_WIDE_INT *object_sizes[4];
++static vec<unsigned HOST_WIDE_INT> object_sizes[4];
+ 
+ /* Bitmaps what object sizes have been computed already.  */
+ static bitmap computed[4];
+@@ -493,7 +493,7 @@
+ 
+   if (TREE_CODE (ptr) == SSA_NAME
+       && POINTER_TYPE_P (TREE_TYPE (ptr))
+-      && object_sizes[object_size_type] != NULL)
++      && computed[object_size_type] != NULL)
+     {
+       if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
+ 	{
+@@ -501,6 +501,8 @@
+ 	  bitmap_iterator bi;
+ 	  unsigned int i;
+ 
++	  if (num_ssa_names > object_sizes[object_size_type].length ())
++	    object_sizes[object_size_type].safe_grow (num_ssa_names);
+ 	  if (dump_file)
+ 	    {
+ 	      fprintf (dump_file, "Computing %s %sobject size for ",
+@@ -1162,12 +1164,12 @@
+ {
+   int object_size_type;
+ 
+-  if (object_sizes[0])
++  if (computed[0])
+     return;
+ 
+   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
+     {
+-      object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
++      object_sizes[object_size_type].safe_grow (num_ssa_names);
+       computed[object_size_type] = BITMAP_ALLOC (NULL);
+     }
+ 
+@@ -1184,9 +1186,8 @@
+ 
+   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
+     {
+-      free (object_sizes[object_size_type]);
++      object_sizes[object_size_type].release ();
+       BITMAP_FREE (computed[object_size_type]);
+-      object_sizes[object_size_type] = NULL;
+     }
+ }
+ 
+@@ -1202,16 +1203,9 @@
+       gimple_stmt_iterator i;
+       for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
+ 	{
+-	  tree callee, result;
++	  tree result;
+ 	  gimple call = gsi_stmt (i);
+-
+-          if (gimple_code (call) != GIMPLE_CALL)
+-	    continue;
+-
+-	  callee = gimple_call_fndecl (call);
+-	  if (!callee
+-	      || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
+-	      || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
++	  if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
+ 	    continue;
+ 
+ 	  init_object_sizes ();
+@@ -1240,20 +1234,32 @@
+ 		continue;
+ 	    }
+ 
++	  gcc_assert (TREE_CODE (result) == INTEGER_CST);
++
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    {
+ 	      fprintf (dump_file, "Simplified\n  ");
+ 	      print_gimple_stmt (dump_file, call, 0, dump_flags);
++	      fprintf (dump_file, " to ");
++	      print_generic_expr (dump_file, result, 0);
++	      fprintf (dump_file, "\n");
+ 	    }
+ 
+-	  if (!update_call_from_tree (&i, result))
+-	    gcc_unreachable ();
++	  tree lhs = gimple_call_lhs (call);
++	  if (!lhs)
++	    continue;
+ 
+-	  if (dump_file && (dump_flags & TDF_DETAILS))
++	  /* Propagate into all uses and fold those stmts.  */
++	  gimple use_stmt;
++	  imm_use_iterator iter;
++	  FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
+ 	    {
+-	      fprintf (dump_file, "to\n  ");
+-	      print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
+-	      fprintf (dump_file, "\n");
++	      use_operand_p use_p;
++	      FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
++		SET_USE (use_p, result);
++	      gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
++	      fold_stmt (&gsi);
++	      update_stmt (gsi_stmt (gsi));
+ 	    }
+ 	}
+     }
+diff -Naur gcc-4.8.2.orig/gcc/tree-predcom.c gcc-4.8.2/gcc/tree-predcom.c
+--- gcc-4.8.2.orig/gcc/tree-predcom.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/tree-predcom.c	2014-03-30 20:21:40.734264754 +0000
+@@ -1323,90 +1323,43 @@
+   gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
+ }
+ 
+-/* Returns the reference to the address of REF in the ITER-th iteration of
+-   LOOP, or NULL if we fail to determine it (ITER may be negative).  We
+-   try to preserve the original shape of the reference (not rewrite it
+-   as an indirect ref to the address), to make tree_could_trap_p in
+-   prepare_initializers_chain return false more often.  */
++/* Returns a memory reference to DR in the ITER-th iteration of
++   the loop it was analyzed in.  Append init stmts to STMTS.  */
+ 
+-static tree
+-ref_at_iteration (struct loop *loop, tree ref, int iter)
++static tree 
++ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
+ {
+-  tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
+-  affine_iv iv;
+-  bool ok;
+-
+-  if (handled_component_p (ref))
+-    {
+-      op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
+-      if (!op0)
+-	return NULL_TREE;
+-    }
+-  else if (!INDIRECT_REF_P (ref)
+-	   && TREE_CODE (ref) != MEM_REF)
+-    return unshare_expr (ref);
+-
+-  if (TREE_CODE (ref) == MEM_REF)
+-    {
+-      ret = unshare_expr (ref);
+-      idx = TREE_OPERAND (ref, 0);
+-      idx_p = &TREE_OPERAND (ret, 0);
+-    }
+-  else if (TREE_CODE (ref) == COMPONENT_REF)
+-    {
+-      /* Check that the offset is loop invariant.  */
+-      if (TREE_OPERAND (ref, 2)
+-	  && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
+-	return NULL_TREE;
+-
+-      return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
+-		     unshare_expr (TREE_OPERAND (ref, 1)),
+-		     unshare_expr (TREE_OPERAND (ref, 2)));
+-    }
+-  else if (TREE_CODE (ref) == ARRAY_REF)
+-    {
+-      /* Check that the lower bound and the step are loop invariant.  */
+-      if (TREE_OPERAND (ref, 2)
+-	  && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
+-	return NULL_TREE;
+-      if (TREE_OPERAND (ref, 3)
+-	  && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
+-	return NULL_TREE;
+-
+-      ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
+-		    unshare_expr (TREE_OPERAND (ref, 2)),
+-		    unshare_expr (TREE_OPERAND (ref, 3)));
+-      idx = TREE_OPERAND (ref, 1);
+-      idx_p = &TREE_OPERAND (ret, 1);
+-    }
+-  else
+-    return NULL_TREE;
+-
+-  ok = simple_iv (loop, loop, idx, &iv, true);
+-  if (!ok)
+-    return NULL_TREE;
+-  iv.base = expand_simple_operations (iv.base);
+-  if (integer_zerop (iv.step))
+-    *idx_p = unshare_expr (iv.base);
++  tree off = DR_OFFSET (dr);
++  tree coff = DR_INIT (dr);
++  if (iter == 0)
++    ;
++  else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
++    coff = size_binop (PLUS_EXPR, coff,
++		       size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
+   else
+-    {
+-      type = TREE_TYPE (iv.base);
+-      if (POINTER_TYPE_P (type))
+-	{
+-	  val = fold_build2 (MULT_EXPR, sizetype, iv.step,
+-			     size_int (iter));
+-	  val = fold_build_pointer_plus (iv.base, val);
+-	}
+-      else
+-	{
+-	  val = fold_build2 (MULT_EXPR, type, iv.step,
+-			     build_int_cst_type (type, iter));
+-	  val = fold_build2 (PLUS_EXPR, type, iv.base, val);
+-	}
+-      *idx_p = unshare_expr (val);
++    off = size_binop (PLUS_EXPR, off,
++		      size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
++  tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
++  addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
++				 NULL_TREE);
++  tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
++  /* While data-ref analysis punts on bit offsets it still handles
++     bitfield accesses at byte boundaries.  Cope with that.  Note that
++     we cannot simply re-apply the outer COMPONENT_REF because the
++     byte-granular portion of it is already applied via DR_INIT and
++     DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
++     start at offset zero.  */
++  if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
++      && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
++    {
++      tree field = TREE_OPERAND (DR_REF (dr), 1);
++      return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
++		     build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
++			     addr, alias_ptr),
++		     DECL_SIZE (field), bitsize_zero_node);
+     }
+-
+-  return ret;
++  else
++    return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
+ }
+ 
+ /* Get the initialization expression for the INDEX-th temporary variable
+@@ -2068,7 +2021,11 @@
+ 
+   stmt = find_common_use_stmt (&name1, &name2);
+ 
+-  if (!stmt)
++  if (!stmt
++      /* A simple post-dominance check - make sure the combination
++         is executed under the same condition as the references.  */
++      || (gimple_bb (stmt) != gimple_bb (r1->stmt)
++	  && gimple_bb (stmt) != gimple_bb (r2->stmt)))
+     return false;
+ 
+   acode = gimple_assign_rhs_code (stmt);
+@@ -2365,14 +2322,10 @@
+       if (chain->inits[i] != NULL_TREE)
+ 	continue;
+ 
+-      init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
+-      if (!init)
+-	return false;
+-
++      init = ref_at_iteration (dr, (int) i - n, &stmts);
+       if (!chain->all_always_accessed && tree_could_trap_p (init))
+ 	return false;
+ 
+-      init = force_gimple_operand (init, &stmts, false, NULL_TREE);
+       if (stmts)
+ 	gsi_insert_seq_on_edge_immediate (entry, stmts);
+ 
+@@ -2449,6 +2402,7 @@
+   if (!components)
+     {
+       free_data_refs (datarefs);
++      free_affine_expand_cache (&name_expansions);
+       return false;
+     }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-sra.c gcc-4.8.2/gcc/tree-sra.c
+--- gcc-4.8.2.orig/gcc/tree-sra.c	2013-08-14 20:36:12.000000000 +0000
++++ gcc-4.8.2/gcc/tree-sra.c	2014-03-30 20:21:40.734264754 +0000
+@@ -1161,8 +1161,7 @@
+    GIMPLE_ASM operands with memory constrains which cannot be scalarized.  */
+ 
+ static bool
+-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
+-		void *data ATTRIBUTE_UNUSED)
++asm_visit_addr (gimple, tree op, tree, void *)
+ {
+   op = get_base_address (op);
+   if (op
+@@ -2890,6 +2889,10 @@
+ 						  lacc);
+ 	      else
+ 		drhs = NULL_TREE;
++	      if (drhs
++		  && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
++		drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
++					lacc->type, drhs);
+ 	      ds = gimple_build_debug_bind (get_access_replacement (lacc),
+ 					    drhs, gsi_stmt (*old_gsi));
+ 	      gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
+@@ -4868,6 +4871,14 @@
+       return false;
+     }
+ 
++  if (!opt_for_fn (node->symbol.decl, optimize)
++      || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
++    {
++      if (dump_file)
++	fprintf (dump_file, "Function not optimized.\n");
++      return false;
++    }
++
+   if (DECL_VIRTUAL_P (current_function_decl))
+     {
+       if (dump_file)
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-dce.c gcc-4.8.2/gcc/tree-ssa-dce.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-dce.c	2013-09-03 12:18:34.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-dce.c	2014-03-30 20:21:40.734264754 +0000
+@@ -1307,26 +1307,19 @@
+ 	  stats.total++;
+ 
+ 	  /* We can mark a call to free as not necessary if the
+-	     defining statement of its argument is an allocation
+-	     function and that is not necessary itself.  */
+-	  if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
++	     defining statement of its argument is not necessary
++	     (and thus is getting removed).  */
++	  if (gimple_plf (stmt, STMT_NECESSARY)
++	      && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
+ 	    {
+ 	      tree ptr = gimple_call_arg (stmt, 0);
+-	      tree callee2;
+-	      gimple def_stmt;
+-	      if (TREE_CODE (ptr) != SSA_NAME)
+-		continue;
+-	      def_stmt = SSA_NAME_DEF_STMT (ptr);
+-	      if (!is_gimple_call (def_stmt)
+-		  || gimple_plf (def_stmt, STMT_NECESSARY))
+-		continue;
+-	      callee2 = gimple_call_fndecl (def_stmt);
+-	      if (callee2 == NULL_TREE
+-		  || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
+-		  || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
+-		      && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
+-		continue;
+-	      gimple_set_plf (stmt, STMT_NECESSARY, false);
++	      if (TREE_CODE (ptr) == SSA_NAME)
++		{
++		  gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
++		  if (!gimple_nop_p (def_stmt)
++		      && !gimple_plf (def_stmt, STMT_NECESSARY))
++		    gimple_set_plf (stmt, STMT_NECESSARY, false);
++		}
+ 	    }
+ 
+ 	  /* If GSI is not necessary then remove it.  */
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-live.c gcc-4.8.2/gcc/tree-ssa-live.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-live.c	2013-02-20 15:19:13.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-live.c	2014-03-30 20:21:40.734264754 +0000
+@@ -394,7 +394,8 @@
+     {
+       /* When a global var becomes used for the first time also walk its
+          initializer (non global ones don't have any).  */
+-      if (set_is_used (t) && is_global_var (t))
++      if (set_is_used (t) && is_global_var (t)
++	  && DECL_CONTEXT (t) == current_function_decl)
+ 	mark_all_vars_used (&DECL_INITIAL (t));
+     }
+   /* remove_unused_scope_block_p requires information about labels
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-loop-im.c gcc-4.8.2/gcc/tree-ssa-loop-im.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-loop-im.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-loop-im.c	2014-03-30 20:21:40.734264754 +0000
+@@ -1190,6 +1190,67 @@
+   fini_walk_dominator_tree (&walk_data);
+ }
+ 
++/* Return true if CODE is an operation that when operating on signed
++   integer types involves undefined behavior on overflow and the
++   operation can be expressed with unsigned arithmetic.  */
++
++static bool
++arith_code_with_undefined_signed_overflow (tree_code code)
++{
++  switch (code)
++    {
++    case PLUS_EXPR:
++    case MINUS_EXPR:
++    case MULT_EXPR:
++    case NEGATE_EXPR:
++    case POINTER_PLUS_EXPR:
++      return true;
++    default:
++      return false;
++    }
++}
++
++/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
++   operation that can be transformed to unsigned arithmetic by converting
++   its operand, carrying out the operation in the corresponding unsigned
++   type and converting the result back to the original type.
++
++   Returns a sequence of statements that replace STMT and also contain
++   a modified form of STMT itself.  */
++
++static gimple_seq
++rewrite_to_defined_overflow (gimple stmt)
++{
++  if (dump_file && (dump_flags & TDF_DETAILS))
++    {
++      fprintf (dump_file, "rewriting stmt with undefined signed "
++	       "overflow ");
++      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
++    }
++
++  tree lhs = gimple_assign_lhs (stmt);
++  tree type = unsigned_type_for (TREE_TYPE (lhs));
++  gimple_seq stmts = NULL;
++  for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
++    {
++      gimple_seq stmts2 = NULL;
++      gimple_set_op (stmt, i,
++		     force_gimple_operand (fold_convert (type,
++							 gimple_op (stmt, i)),
++					   &stmts2, true, NULL_TREE));
++      gimple_seq_add_seq (&stmts, stmts2);
++    }
++  gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
++  if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
++    gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
++  gimple_seq_add_stmt (&stmts, stmt);
++  gimple cvt = gimple_build_assign_with_ops
++      (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
++  gimple_seq_add_stmt (&stmts, cvt);
++
++  return stmts;
++}
++
+ /* Hoist the statements in basic block BB out of the loops prescribed by
+    data stored in LIM_DATA structures associated with each statement.  Callback
+    for walk_dominator_tree.  */
+@@ -1321,7 +1382,21 @@
+ 	    }
+ 	}
+       gsi_remove (&bsi, false);
+-      gsi_insert_on_edge (e, stmt);
++      /* In case this is a stmt that is not unconditionally executed
++         when the target loop header is executed and the stmt may
++	 invoke undefined integer or pointer overflow rewrite it to
++	 unsigned arithmetic.  */
++      if (is_gimple_assign (stmt)
++	  && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
++	  && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
++	  && arith_code_with_undefined_signed_overflow
++	       (gimple_assign_rhs_code (stmt))
++	  && (!ALWAYS_EXECUTED_IN (bb)
++	      || !(ALWAYS_EXECUTED_IN (bb) == level
++		   || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
++	gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
++      else
++	gsi_insert_on_edge (e, stmt);
+     }
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-loop-niter.c gcc-4.8.2/gcc/tree-ssa-loop-niter.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-loop-niter.c	2013-08-29 13:09:26.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-loop-niter.c	2014-03-30 20:21:40.737598196 +0000
+@@ -2075,7 +2075,8 @@
+       return NULL;
+     }
+ 
+-  if (gimple_code (stmt) != GIMPLE_ASSIGN)
++  if (gimple_code (stmt) != GIMPLE_ASSIGN
++      || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
+     return NULL;
+ 
+   code = gimple_assign_rhs_code (stmt);
+@@ -2143,7 +2144,7 @@
+ {
+   gimple stmt;
+ 
+-  gcc_assert (is_gimple_min_invariant (base));
++  gcc_checking_assert (is_gimple_min_invariant (base));
+ 
+   if (!x)
+     return base;
+@@ -2152,7 +2153,7 @@
+   if (gimple_code (stmt) == GIMPLE_PHI)
+     return base;
+ 
+-  gcc_assert (is_gimple_assign (stmt));
++  gcc_checking_assert (is_gimple_assign (stmt));
+ 
+   /* STMT must be either an assignment of a single SSA name or an
+      expression involving an SSA name and a constant.  Try to fold that
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-math-opts.c gcc-4.8.2/gcc/tree-ssa-math-opts.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-math-opts.c	2013-01-28 14:43:03.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-math-opts.c	2014-03-30 20:21:40.737598196 +0000
+@@ -1718,7 +1718,9 @@
+ 
+   if (rhs_class == GIMPLE_BINARY_RHS)
+     {
++      int i;
+       struct symbolic_number n1, n2;
++      unsigned HOST_WIDEST_INT mask;
+       tree source_expr2;
+ 
+       if (code != BIT_IOR_EXPR)
+@@ -1744,6 +1746,15 @@
+ 	    return NULL_TREE;
+ 
+ 	  n->size = n1.size;
++	  for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
++	    {
++	      unsigned HOST_WIDEST_INT masked1, masked2;
++
++	      masked1 = n1.n & mask;
++	      masked2 = n2.n & mask;
++	      if (masked1 && masked2 && masked1 != masked2)
++		return NULL_TREE;
++	    }
+ 	  n->n = n1.n | n2.n;
+ 
+ 	  if (!verify_symbolic_number_p (n, stmt))
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-phiprop.c gcc-4.8.2/gcc/tree-ssa-phiprop.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-phiprop.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-phiprop.c	2014-03-30 20:21:40.737598196 +0000
+@@ -307,6 +307,12 @@
+       gimple def_stmt;
+       tree vuse;
+ 
++      /* Only replace loads in blocks that post-dominate the PHI node.  That
++         makes sure we don't end up speculating loads.  */
++      if (!dominated_by_p (CDI_POST_DOMINATORS,
++			   bb, gimple_bb (use_stmt)))
++	continue;
++         
+       /* Check whether this is a load of *ptr.  */
+       if (!(is_gimple_assign (use_stmt)
+ 	    && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
+@@ -378,6 +384,7 @@
+   size_t n;
+ 
+   calculate_dominance_info (CDI_DOMINATORS);
++  calculate_dominance_info (CDI_POST_DOMINATORS);
+ 
+   n = num_ssa_names;
+   phivn = XCNEWVEC (struct phiprop_d, n);
+@@ -395,6 +402,8 @@
+   bbs.release ();
+   free (phivn);
+ 
++  free_dominance_info (CDI_POST_DOMINATORS);
++
+   return 0;
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-pre.c gcc-4.8.2/gcc/tree-ssa-pre.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-pre.c	2013-02-19 06:43:34.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-pre.c	2014-03-30 20:21:40.737598196 +0000
+@@ -3664,6 +3664,12 @@
+       if (dump_file && dump_flags & TDF_DETAILS)
+ 	fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
+       new_stuff = insert_aux (ENTRY_BLOCK_PTR);
++
++      /* Clear the NEW sets before the next iteration.  We have already
++         fully propagated its contents.  */
++      if (new_stuff)
++	FOR_ALL_BB (bb)
++	  bitmap_set_free (NEW_SETS (bb));
+     }
+   statistics_histogram_event (cfun, "insert iterations", num_iterations);
+ }
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-reassoc.c gcc-4.8.2/gcc/tree-ssa-reassoc.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-reassoc.c	2013-09-09 17:11:05.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-reassoc.c	2014-03-30 20:21:40.737598196 +0000
+@@ -1980,8 +1980,15 @@
+ 
+   tem = fold_convert_loc (loc, optype, tem);
+   gsi = gsi_for_stmt (stmt);
+-  tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
+-				  GSI_SAME_STMT);
++  /* In rare cases range->exp can be equal to lhs of stmt.
++     In that case we have to insert after the stmt rather then before
++     it.  */
++  if (op == range->exp)
++    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
++				    GSI_SAME_STMT);
++  else
++    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
++				    GSI_SAME_STMT);
+ 
+   /* If doing inter-bb range test optimization, update the
+      stmts immediately.  Start with changing the first range test
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-sccvn.c gcc-4.8.2/gcc/tree-ssa-sccvn.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-sccvn.c	2013-08-29 13:14:59.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-sccvn.c	2014-03-30 20:21:40.737598196 +0000
+@@ -660,7 +660,7 @@
+     }
+ 
+   /* For non-calls, store the information that makes up the address.  */
+-
++  tree orig = ref;
+   while (ref)
+     {
+       vn_reference_op_s temp;
+@@ -711,7 +711,15 @@
+ 			  .arshift (BITS_PER_UNIT == 8
+ 				    ? 3 : exact_log2 (BITS_PER_UNIT),
+ 				    HOST_BITS_PER_DOUBLE_INT);
+-		    if (off.fits_shwi ())
++		    if (off.fits_shwi ()
++			/* Probibit value-numbering zero offset components
++			   of addresses the same before the pass folding
++			   __builtin_object_size had a chance to run
++			   (checking cfun->after_inlining does the
++			   trick here).  */
++			&& (TREE_CODE (orig) != ADDR_EXPR
++			    || !off.is_zero ()
++			    || cfun->after_inlining))
+ 		      temp.off = off.low;
+ 		  }
+ 	      }
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-sink.c gcc-4.8.2/gcc/tree-ssa-sink.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-sink.c	2013-05-22 07:50:40.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-sink.c	2014-03-30 20:21:40.740931639 +0000
+@@ -559,7 +559,7 @@
+ execute_sink_code (void)
+ {
+   loop_optimizer_init (LOOPS_NORMAL);
+-
++  split_critical_edges ();
+   connect_infinite_loops_to_exit ();
+   memset (&sink_stats, 0, sizeof (sink_stats));
+   calculate_dominance_info (CDI_DOMINATORS);
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-structalias.c gcc-4.8.2/gcc/tree-ssa-structalias.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-structalias.c	2013-09-27 16:44:39.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-structalias.c	2014-03-30 20:21:40.740931639 +0000
+@@ -949,24 +949,27 @@
+ 	bitmap_set_bit (result, i);
+       else
+ 	{
+-	  unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
++	  HOST_WIDE_INT fieldoffset = vi->offset + offset;
++	  unsigned HOST_WIDE_INT size = vi->size;
+ 
+ 	  /* If the offset makes the pointer point to before the
+ 	     variable use offset zero for the field lookup.  */
+-	  if (offset < 0
+-	      && fieldoffset > vi->offset)
+-	    fieldoffset = 0;
+-
+-	  if (offset != 0)
++	  if (fieldoffset < 0)
++	    vi = lookup_vi_for_tree (vi->decl);
++	  else
+ 	    vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
+ 
+-	  bitmap_set_bit (result, vi->id);
+-	  /* If the result is not exactly at fieldoffset include the next
+-	     field as well.  See get_constraint_for_ptr_offset for more
+-	     rationale.  */
+-	  if (vi->offset != fieldoffset
+-	      && vi->next != NULL)
+-	    bitmap_set_bit (result, vi->next->id);
++	  do
++	    {
++	      bitmap_set_bit (result, vi->id);
++	      if (!vi->next)
++		break;
++
++	      /* We have to include all fields that overlap the current field
++		 shifted by offset.  */
++	      vi = vi->next;
++	    }
++	  while (vi->offset < fieldoffset + size);
+ 	}
+     }
+ 
+@@ -1607,16 +1610,21 @@
+     {
+       varinfo_t v = get_varinfo (j);
+       HOST_WIDE_INT fieldoffset = v->offset + roffset;
++      unsigned HOST_WIDE_INT size = v->size;
+       unsigned int t;
+ 
+       if (v->is_full_var)
+-	fieldoffset = v->offset;
++	;
+       else if (roffset != 0)
+-	v = first_vi_for_offset (v, fieldoffset);
+-      /* If the access is outside of the variable we can ignore it.  */
+-      if (!v)
+-	continue;
++	{
++	  if (fieldoffset < 0)
++	    v = lookup_vi_for_tree (v->decl);
++	  else
++	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
++	}
+ 
++      /* We have to include all fields that overlap the current field
++	 shifted by roffset.  */
+       do
+ 	{
+ 	  t = find (v->id);
+@@ -1633,16 +1641,13 @@
+ 		   && add_graph_edge (graph, lhs, t))
+ 	    flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
+ 
+-	  /* If the variable is not exactly at the requested offset
+-	     we have to include the next one.  */
+-	  if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
++	  if (v->is_full_var
+ 	      || v->next == NULL)
+ 	    break;
+ 
+ 	  v = v->next;
+-	  fieldoffset = v->offset;
+ 	}
+-      while (1);
++      while (v->offset < fieldoffset + size);
+     }
+ 
+ done:
+@@ -1705,15 +1710,20 @@
+       varinfo_t v = get_varinfo (j);
+       unsigned int t;
+       HOST_WIDE_INT fieldoffset = v->offset + loff;
++      unsigned HOST_WIDE_INT size = v->size;
+ 
+       if (v->is_full_var)
+-	fieldoffset = v->offset;
++	;
+       else if (loff != 0)
+-	v = first_vi_for_offset (v, fieldoffset);
+-      /* If the access is outside of the variable we can ignore it.  */
+-      if (!v)
+-	continue;
++	{
++	  if (fieldoffset < 0)
++	    v = lookup_vi_for_tree (v->decl);
++	  else
++	    v = first_or_preceding_vi_for_offset (v, fieldoffset);
++	}
+ 
++      /* We have to include all fields that overlap the current field
++	 shifted by loff.  */
+       do
+ 	{
+ 	  if (v->may_have_pointers)
+@@ -1739,16 +1749,13 @@
+ 		bitmap_set_bit (changed, t);
+ 	    }
+ 
+-	  /* If the variable is not exactly at the requested offset
+-	     we have to include the next one.  */
+-	  if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
++	  if (v->is_full_var
+ 	      || v->next == NULL)
+ 	    break;
+ 
+ 	  v = v->next;
+-	  fieldoffset = v->offset;
+ 	}
+-      while (1);
++      while (v->offset < fieldoffset + size);
+     }
+ }
+ 
+@@ -2997,35 +3004,30 @@
+ 	  varinfo_t temp;
+ 	  unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
+ 
+-	  /* Search the sub-field which overlaps with the
+-	     pointed-to offset.  If the result is outside of the variable
+-	     we have to provide a conservative result, as the variable is
+-	     still reachable from the resulting pointer (even though it
+-	     technically cannot point to anything).  The last and first
+-	     sub-fields are such conservative results.
+-	     ???  If we always had a sub-field for &object + 1 then
+-	     we could represent this in a more precise way.  */
++	  /* If curr->offset + rhsoffset is less than zero adjust it.  */
+ 	  if (rhsoffset < 0
+ 	      && curr->offset < offset)
+ 	    offset = 0;
+-	  temp = first_or_preceding_vi_for_offset (curr, offset);
+ 
+-	  /* If the found variable is not exactly at the pointed to
+-	     result, we have to include the next variable in the
+-	     solution as well.  Otherwise two increments by offset / 2
+-	     do not result in the same or a conservative superset
+-	     solution.  */
+-	  if (temp->offset != offset
+-	      && temp->next != NULL)
++	  /* We have to include all fields that overlap the current
++	     field shifted by rhsoffset.  And we include at least
++	     the last or the first field of the variable to represent
++	     reachability of off-bound addresses, in particular &object + 1,
++	     conservatively correct.  */
++	  temp = first_or_preceding_vi_for_offset (curr, offset);
++	  c.var = temp->id;
++	  c.offset = 0;
++	  temp = temp->next;
++	  while (temp
++		 && temp->offset < offset + curr->size)
+ 	    {
+ 	      struct constraint_expr c2;
+-	      c2.var = temp->next->id;
++	      c2.var = temp->id;
+ 	      c2.type = ADDRESSOF;
+ 	      c2.offset = 0;
+ 	      results->safe_push (c2);
++	      temp = temp->next;
+ 	    }
+-	  c.var = temp->id;
+-	  c.offset = 0;
+ 	}
+       else
+ 	c.offset = rhsoffset;
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c gcc-4.8.2/gcc/tree-ssa-tail-merge.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c	2013-01-31 08:52:56.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-tail-merge.c	2014-03-30 20:21:40.740931639 +0000
+@@ -297,7 +297,8 @@
+   tree val;
+   def_operand_p def_p;
+ 
+-  if (gimple_has_side_effects (stmt))
++  if (gimple_has_side_effects (stmt)
++      || gimple_vdef (stmt) != NULL_TREE)
+     return false;
+ 
+   def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-ter.c gcc-4.8.2/gcc/tree-ssa-ter.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-ter.c	2013-03-08 08:45:29.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-ter.c	2014-03-30 20:21:40.740931639 +0000
+@@ -590,6 +590,30 @@
+ }
+ 
+ 
++/* Helper function for find_ssaname_in_stores.  Called via walk_tree to
++   find a SSA_NAME DATA somewhere in *TP.  */
++
++static tree
++find_ssaname (tree *tp, int *walk_subtrees, void *data)
++{
++  tree var = (tree) data;
++  if (*tp == var)
++    return var;
++  else if (IS_TYPE_OR_DECL_P (*tp))
++    *walk_subtrees = 0;
++  return NULL_TREE;
++}
++
++/* Helper function for find_replaceable_in_bb.  Return true if SSA_NAME DATA
++   is used somewhere in T, which is a store in the statement.  Called via
++   walk_stmt_load_store_addr_ops.  */
++
++static bool
++find_ssaname_in_store (gimple, tree, tree t, void *data)
++{
++  return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
++}
++
+ /* This function processes basic block BB, and looks for variables which can
+    be replaced by their expressions.  Results are stored in the table TAB.  */
+ 
+@@ -643,8 +667,7 @@
+ 	      /* If the stmt does a memory store and the replacement
+ 	         is a load aliasing it avoid creating overlapping
+ 		 assignments which we cannot expand correctly.  */
+-	      if (gimple_vdef (stmt)
+-		  && gimple_assign_single_p (stmt))
++	      if (gimple_vdef (stmt))
+ 		{
+ 		  gimple def_stmt = SSA_NAME_DEF_STMT (use);
+ 		  while (is_gimple_assign (def_stmt)
+@@ -653,9 +676,29 @@
+ 		      = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
+ 		  if (gimple_vuse (def_stmt)
+ 		      && gimple_assign_single_p (def_stmt)
+-		      && refs_may_alias_p (gimple_assign_lhs (stmt),
+-					   gimple_assign_rhs1 (def_stmt)))
+-		    same_root_var = true;
++		      && stmt_may_clobber_ref_p (stmt,
++						 gimple_assign_rhs1 (def_stmt)))
++		    {
++		      /* For calls, it is not a problem if USE is among
++			 call's arguments or say OBJ_TYPE_REF argument,
++			 all those necessarily need to be evaluated before
++			 the call that may clobber the memory.  But if
++			 LHS of the call refers to USE, expansion might
++			 evaluate it after the call, prevent TER in that
++			 case.
++			 For inline asm, allow TER of loads into input
++			 arguments, but disallow TER for USEs that occur
++			 somewhere in outputs.  */
++		      if (is_gimple_call (stmt)
++			  || gimple_code (stmt) == GIMPLE_ASM)
++			{
++			  if (walk_stmt_load_store_ops (stmt, use, NULL,
++							find_ssaname_in_store))
++			    same_root_var = true;
++			}
++		      else
++			same_root_var = true;
++		    }
+ 		}
+ 
+ 	      /* Mark expression as replaceable unless stmt is volatile, or the
+diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-uninit.c gcc-4.8.2/gcc/tree-ssa-uninit.c
+--- gcc-4.8.2.orig/gcc/tree-ssa-uninit.c	2013-05-07 10:32:41.000000000 +0000
++++ gcc-4.8.2/gcc/tree-ssa-uninit.c	2014-03-30 20:21:40.740931639 +0000
+@@ -36,6 +36,7 @@
+ #include "hashtab.h"
+ #include "tree-pass.h"
+ #include "diagnostic-core.h"
++#include "params.h"
+ 
+ /* This implements the pass that does predicate aware warning on uses of
+    possibly uninitialized variables. The pass first collects the set of
+@@ -246,8 +247,8 @@
+ 
+ /* Computes the control dependence chains (paths of edges)
+    for DEP_BB up to the dominating basic block BB (the head node of a
+-   chain should be dominated by it).  CD_CHAINS is pointer to a
+-   dynamic array holding the result chains. CUR_CD_CHAIN is the current
++   chain should be dominated by it).  CD_CHAINS is pointer to an
++   array holding the result chains.  CUR_CD_CHAIN is the current
+    chain being computed.  *NUM_CHAINS is total number of chains.  The
+    function returns true if the information is successfully computed,
+    return false if there is no control dependence or not computed.  */
+@@ -256,7 +257,8 @@
+ compute_control_dep_chain (basic_block bb, basic_block dep_bb,
+                            vec<edge> *cd_chains,
+                            size_t *num_chains,
+-                           vec<edge> *cur_cd_chain)
++			   vec<edge> *cur_cd_chain,
++			   int *num_calls)
+ {
+   edge_iterator ei;
+   edge e;
+@@ -267,6 +269,10 @@
+   if (EDGE_COUNT (bb->succs) < 2)
+     return false;
+ 
++  if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
++    return false;
++  ++*num_calls;
++
+   /* Could  use a set instead.  */
+   cur_chain_len = cur_cd_chain->length ();
+   if (cur_chain_len > MAX_CHAIN_LEN)
+@@ -306,7 +312,7 @@
+ 
+           /* Now check if DEP_BB is indirectly control dependent on BB.  */
+           if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
+-                                         num_chains, cur_cd_chain))
++					 num_chains, cur_cd_chain, num_calls))
+             {
+               found_cd_chain = true;
+               break;
+@@ -438,14 +444,12 @@
+                  basic_block use_bb)
+ {
+   size_t num_chains = 0, i;
+-  vec<edge> *dep_chains = 0;
++  int num_calls = 0;
++  vec<edge> dep_chains[MAX_NUM_CHAINS];
+   vec<edge> cur_chain = vNULL;
+   bool has_valid_pred = false;
+   basic_block cd_root = 0;
+ 
+-  typedef vec<edge> vec_edge_heap;
+-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
+-
+   /* First find the closest bb that is control equivalent to PHI_BB
+      that also dominates USE_BB.  */
+   cd_root = phi_bb;
+@@ -458,20 +462,16 @@
+         break;
+     }
+ 
+-  compute_control_dep_chain (cd_root, use_bb,
+-                             dep_chains, &num_chains,
+-                             &cur_chain);
++  compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
++			     &cur_chain, &num_calls);
+ 
+   has_valid_pred
+-      = convert_control_dep_chain_into_preds (dep_chains,
+-                                              num_chains,
+-                                              preds,
+-                                              num_preds);
++    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
++					    num_preds);
+   /* Free individual chain  */
+   cur_chain.release ();
+   for (i = 0; i < num_chains; i++)
+     dep_chains[i].release ();
+-  free (dep_chains);
+   return has_valid_pred;
+ }
+ 
+@@ -539,16 +539,13 @@
+                 size_t *num_preds, gimple phi)
+ {
+   size_t num_chains = 0, i, n;
+-  vec<edge> *dep_chains = 0;
++  vec<edge> dep_chains[MAX_NUM_CHAINS];
+   vec<edge> cur_chain = vNULL;
+   vec<edge> def_edges = vNULL;
+   bool has_valid_pred = false;
+   basic_block phi_bb, cd_root = 0;
+   struct pointer_set_t *visited_phis;
+ 
+-  typedef vec<edge> vec_edge_heap;
+-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
+-
+   phi_bb = gimple_bb (phi);
+   /* First find the closest dominating bb to be
+      the control dependence root  */
+@@ -567,38 +564,33 @@
+   for (i = 0; i < n; i++)
+     {
+       size_t prev_nc, j;
++      int num_calls = 0;
+       edge opnd_edge;
+ 
+       opnd_edge = def_edges[i];
+       prev_nc = num_chains;
+-      compute_control_dep_chain (cd_root, opnd_edge->src,
+-                                 dep_chains, &num_chains,
+-                                 &cur_chain);
+-      /* Free individual chain  */
+-      cur_chain.release ();
++      compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
++				 &num_chains, &cur_chain, &num_calls);
+ 
+       /* Now update the newly added chains with
+          the phi operand edge:  */
+       if (EDGE_COUNT (opnd_edge->src->succs) > 1)
+         {
+-          if (prev_nc == num_chains
+-              && num_chains < MAX_NUM_CHAINS)
+-            num_chains++;
++	  if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
++	    dep_chains[num_chains++] = vNULL;
+           for (j = prev_nc; j < num_chains; j++)
+-            {
+-              dep_chains[j].safe_push (opnd_edge);
+-            }
++	    dep_chains[j].safe_push (opnd_edge);
+         }
+     }
+ 
++  /* Free individual chain  */
++  cur_chain.release ();
++
+   has_valid_pred
+-      = convert_control_dep_chain_into_preds (dep_chains,
+-                                              num_chains,
+-                                              preds,
+-                                              num_preds);
++    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
++					    num_preds);
+   for (i = 0; i < num_chains; i++)
+     dep_chains[i].release ();
+-  free (dep_chains);
+   return has_valid_pred;
+ }
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-vect-data-refs.c gcc-4.8.2/gcc/tree-vect-data-refs.c
+--- gcc-4.8.2.orig/gcc/tree-vect-data-refs.c	2013-09-03 12:16:28.000000000 +0000
++++ gcc-4.8.2/gcc/tree-vect-data-refs.c	2014-03-30 20:21:40.740931639 +0000
+@@ -739,6 +739,13 @@
+ 	  if (dump_enabled_p ())
+ 	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
+                              "dependence distance negative.");
++	  /* Record a negative dependence distance to later limit the
++	     amount of stmt copying / unrolling we can perform.
++	     Only need to handle read-after-write dependence.  */
++	  if (DR_IS_READ (drb)
++	      && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
++		  || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
++	    STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
+ 	  continue;
+ 	}
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-vect-loop.c gcc-4.8.2/gcc/tree-vect-loop.c
+--- gcc-4.8.2.orig/gcc/tree-vect-loop.c	2013-10-09 09:26:48.000000000 +0000
++++ gcc-4.8.2/gcc/tree-vect-loop.c	2014-03-30 20:21:40.744265082 +0000
+@@ -1537,7 +1537,7 @@
+ 
+   if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
+       || LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
+-      || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
++      || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
+     {
+       if (dump_enabled_p ())
+         dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
+@@ -2097,6 +2097,12 @@
+               || (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
+ 
+   name = PHI_RESULT (phi);
++  /* ???  If there are no uses of the PHI result the inner loop reduction
++     won't be detected as possibly double-reduction by vectorizable_reduction
++     because that tries to walk the PHI arg from the preheader edge which
++     can be constant.  See PR60382.  */
++  if (has_zero_uses (name))
++    return NULL;
+   nloop_uses = 0;
+   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
+     {
+@@ -3115,14 +3121,12 @@
+   stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
+   loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
+   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
+-  tree scalar_type;
+   tree vectype;
+   int nunits;
+   edge pe = loop_preheader_edge (loop);
+   struct loop *iv_loop;
+   basic_block new_bb;
+   tree new_vec, vec_init, vec_step, t;
+-  tree access_fn;
+   tree new_var;
+   tree new_name;
+   gimple init_stmt, induction_phi, new_stmt;
+@@ -3130,7 +3134,6 @@
+   tree init_expr, step_expr;
+   int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
+   int i;
+-  bool ok;
+   int ncopies;
+   tree expr;
+   stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
+@@ -3159,16 +3162,14 @@
+   latch_e = loop_latch_edge (iv_loop);
+   loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
+ 
+-  access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
+-  gcc_assert (access_fn);
+-  STRIP_NOPS (access_fn);
+-  ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
+-                                    &init_expr, &step_expr);
+-  gcc_assert (ok);
++  step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
++  gcc_assert (step_expr != NULL_TREE);
++
+   pe = loop_preheader_edge (iv_loop);
++  init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
++				     loop_preheader_edge (iv_loop));
+ 
+-  scalar_type = TREE_TYPE (init_expr);
+-  vectype = get_vectype_for_scalar_type (scalar_type);
++  vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
+   resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
+   gcc_assert (vectype);
+   nunits = TYPE_VECTOR_SUBPARTS (vectype);
+@@ -3177,6 +3178,16 @@
+   gcc_assert (phi_info);
+   gcc_assert (ncopies >= 1);
+ 
++  /* Convert the step to the desired type.  */
++  step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
++						  step_expr),
++				    &stmts, true, NULL_TREE);
++  if (stmts)
++    {
++      new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
++      gcc_assert (!new_bb);
++    }
++
+   /* Find the first insertion point in the BB.  */
+   si = gsi_after_labels (bb);
+ 
+@@ -3186,9 +3197,7 @@
+       /* iv_loop is nested in the loop to be vectorized.  init_expr had already
+ 	 been created during vectorization of previous stmts.  We obtain it
+ 	 from the STMT_VINFO_VEC_STMT of the defining stmt.  */
+-      tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
+-                                           loop_preheader_edge (iv_loop));
+-      vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
++      vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
+       /* If the initial value is not of proper type, convert it.  */
+       if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
+ 	{
+@@ -3211,8 +3220,11 @@
+ 
+       /* iv_loop is the loop to be vectorized. Create:
+ 	 vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr)  */
+-      new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
+-      new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
++      new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
++				       vect_scalar_var, "var_");
++      new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
++						     init_expr),
++				       &stmts, false, new_var);
+       if (stmts)
+ 	{
+ 	  new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
+@@ -3224,9 +3236,7 @@
+       for (i = 1; i < nunits; i++)
+ 	{
+ 	  /* Create: new_name_i = new_name + step_expr  */
+-	  enum tree_code code = POINTER_TYPE_P (scalar_type)
+-				? POINTER_PLUS_EXPR : PLUS_EXPR;
+-	  init_stmt = gimple_build_assign_with_ops (code, new_var,
++	  init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
+ 						    new_name, step_expr);
+ 	  new_name = make_ssa_name (new_var, init_stmt);
+ 	  gimple_assign_set_lhs (init_stmt, new_name);
+@@ -5564,8 +5574,9 @@
+ 	      && !STMT_VINFO_LIVE_P (stmt_info))
+ 	    continue;
+ 
+-	  if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
+-	        != (unsigned HOST_WIDE_INT) vectorization_factor)
++	  if (STMT_VINFO_VECTYPE (stmt_info)
++	      && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
++		  != (unsigned HOST_WIDE_INT) vectorization_factor)
+ 	      && dump_enabled_p ())
+ 	    dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
+ 
+diff -Naur gcc-4.8.2.orig/gcc/tree-vect-stmts.c gcc-4.8.2/gcc/tree-vect-stmts.c
+--- gcc-4.8.2.orig/gcc/tree-vect-stmts.c	2013-06-27 15:41:34.000000000 +0000
++++ gcc-4.8.2/gcc/tree-vect-stmts.c	2014-03-30 20:21:40.744265082 +0000
+@@ -4369,6 +4369,20 @@
+       return false;
+     }
+ 
++  /* Invalidate assumptions made by dependence analysis when vectorization
++     on the unrolled body effectively re-orders stmts.  */
++  if (ncopies > 1
++      && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
++      && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
++	  > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
++    {
++      if (dump_enabled_p ())
++	dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
++			 "cannot perform implicit CSE when unrolling "
++			 "with negative dependence distance\n");
++      return false;
++    }
++
+   if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
+     return false;
+ 
+@@ -4425,6 +4439,20 @@
+ 	  else if (!vect_grouped_load_supported (vectype, group_size))
+ 	    return false;
+ 	}
++
++      /* Invalidate assumptions made by dependence analysis when vectorization
++	 on the unrolled body effectively re-orders stmts.  */
++      if (!PURE_SLP_STMT (stmt_info)
++	  && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
++	  && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
++	      > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
++	{
++	  if (dump_enabled_p ())
++	    dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
++			     "cannot perform implicit CSE when performing "
++			     "group loads with negative dependence distance\n");
++	  return false;
++	}
+     }
+ 
+ 
+@@ -6054,8 +6082,7 @@
+      corresponding to that mode.  The theory is that any use that
+      would cause problems with this will disable vectorization anyway.  */
+   else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
+-	   && !INTEGRAL_TYPE_P (scalar_type)
+-	   && !POINTER_TYPE_P (scalar_type))
++	   && !INTEGRAL_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
+diff -Naur gcc-4.8.2.orig/gcc/tree-vectorizer.h gcc-4.8.2/gcc/tree-vectorizer.h
+--- gcc-4.8.2.orig/gcc/tree-vectorizer.h	2013-02-28 21:20:26.000000000 +0000
++++ gcc-4.8.2/gcc/tree-vectorizer.h	2014-03-30 20:21:40.744265082 +0000
+@@ -542,6 +542,10 @@
+      is 1.  */
+   unsigned int gap;
+ 
++  /* The minimum negative dependence distance this stmt participates in
++     or zero if none.  */
++  unsigned int min_neg_dist;
++
+   /* Not all stmts in the loop need to be vectorized. e.g, the increment
+      of the loop induction variable and computation of array indexes. relevant
+      indicates whether the stmt needs to be vectorized.  */
+@@ -593,6 +597,7 @@
+ #define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S)  (S)->read_write_dep
+ #define STMT_VINFO_GROUPED_ACCESS(S)      ((S)->first_element != NULL && (S)->data_ref_info)
+ #define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
++#define STMT_VINFO_MIN_NEG_DIST(S)	(S)->min_neg_dist
+ 
+ #define GROUP_FIRST_ELEMENT(S)          (S)->first_element
+ #define GROUP_NEXT_ELEMENT(S)           (S)->next_element
+diff -Naur gcc-4.8.2.orig/gcc/tree-vrp.c gcc-4.8.2/gcc/tree-vrp.c
+--- gcc-4.8.2.orig/gcc/tree-vrp.c	2013-09-09 09:48:43.000000000 +0000
++++ gcc-4.8.2/gcc/tree-vrp.c	2014-03-30 20:21:40.744265082 +0000
+@@ -5271,9 +5271,13 @@
+     }
+   else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
+     {
+-      /* Recurse through the type conversion.  */
+-      retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
+-					    code, e, bsi);
++      /* Recurse through the type conversion, unless it is a narrowing
++	 conversion or conversion from non-integral type.  */
++      tree rhs = gimple_assign_rhs1 (op_def);
++      if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
++	  && (TYPE_PRECISION (TREE_TYPE (rhs))
++	      <= TYPE_PRECISION (TREE_TYPE (op))))
++	retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
+     }
+ 
+   return retval;
+@@ -7453,7 +7457,8 @@
+     }
+   else if ((operand_less_p (vr1min, *vr0max) == 1
+ 	    || operand_equal_p (vr1min, *vr0max, 0))
+-	   && operand_less_p (*vr0min, vr1min) == 1)
++	   && operand_less_p (*vr0min, vr1min) == 1
++	   && operand_less_p (*vr0max, vr1max) == 1)
+     {
+       /* [  (  ]  ) or [   ](   ) */
+       if (*vr0type == VR_RANGE
+@@ -7487,7 +7492,8 @@
+     }
+   else if ((operand_less_p (*vr0min, vr1max) == 1
+ 	    || operand_equal_p (*vr0min, vr1max, 0))
+-	   && operand_less_p (vr1min, *vr0min) == 1)
++	   && operand_less_p (vr1min, *vr0min) == 1
++	   && operand_less_p (vr1max, *vr0max) == 1)
+     {
+       /* (  [  )  ] or (   )[   ] */
+       if (*vr0type == VR_RANGE
+diff -Naur gcc-4.8.2.orig/gcc/tree.h gcc-4.8.2/gcc/tree.h
+--- gcc-4.8.2.orig/gcc/tree.h	2013-05-23 13:25:23.000000000 +0000
++++ gcc-4.8.2/gcc/tree.h	2014-03-30 20:21:40.734264754 +0000
+@@ -3589,7 +3589,7 @@
+ 
+   /* Target optabs for this set of optimization options.  This is of
+      type `struct target_optabs *'.  */
+-  unsigned char *GTY ((atomic)) optabs;
++  void *GTY ((atomic)) optabs;
+ 
+   /* The value of this_target_optabs against which the optabs above were
+      generated.  */
+@@ -5854,6 +5854,7 @@
+ extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
+ extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
+ extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
++extern tree fold_builtin_strcat (location_t, tree, tree, tree);
+ extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
+ 				     enum built_in_function);
+ extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
+@@ -6545,4 +6546,18 @@
+ 	  && builtin_info.implicit_p[uns_fncode]);
+ }
+ 
++/* Return pointer to optimization flags of FNDECL.  */
++static inline struct cl_optimization *
++opts_for_fn (const_tree fndecl)
++{
++  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
++  if (fn_opts == NULL_TREE)
++    fn_opts = optimization_default_node;
++  return TREE_OPTIMIZATION (fn_opts);
++}
++
++/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
++   the optimization level of function fndecl.  */
++#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
++
+ #endif  /* GCC_TREE_H  */
+diff -Naur gcc-4.8.2.orig/gcc/value-prof.c gcc-4.8.2/gcc/value-prof.c
+--- gcc-4.8.2.orig/gcc/value-prof.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/value-prof.c	2014-03-30 20:21:40.747598525 +0000
+@@ -1270,8 +1270,7 @@
+ 
+   /* Build an EH edge for the direct call if necessary.  */
+   lp_nr = lookup_stmt_eh_lp (icall_stmt);
+-  if (lp_nr != 0
+-      && stmt_could_throw_p (dcall_stmt))
++  if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
+     {
+       edge e_eh, e;
+       edge_iterator ei;
+diff -Naur gcc-4.8.2.orig/gcc/version.c gcc-4.8.2/gcc/version.c
+--- gcc-4.8.2.orig/gcc/version.c	2013-01-10 20:38:27.000000000 +0000
++++ gcc-4.8.2/gcc/version.c	2014-03-30 20:21:40.747598525 +0000
+@@ -32,4 +32,4 @@
+    Makefile.  */
+ 
+ const char version_string[] = BASEVER DATESTAMP DEVPHASE REVISION;
+-const char pkgversion_string[] = PKGVERSION;
++const char pkgversion_string[] = "(GCC for Cross-LFS 4.8.2.20140330) ";
+diff -Naur gcc-4.8.2.orig/gnattools/Makefile.in gcc-4.8.2/gnattools/Makefile.in
+--- gcc-4.8.2.orig/gnattools/Makefile.in	2011-10-12 22:41:57.000000000 +0000
++++ gcc-4.8.2/gnattools/Makefile.in	2014-03-30 20:21:40.747598525 +0000
+@@ -24,6 +24,8 @@
+ libdir = @libdir@
+ build = @build@
+ target = @target@
++host = @host@
++host_alias = @host_alias@
+ prefix = @prefix@
+ INSTALL = @INSTALL@
+ INSTALL_DATA = @INSTALL_DATA@
+@@ -84,6 +86,7 @@
+ TOOLS_FLAGS_TO_PASS_RE= \
+ 	"CC=../../xgcc -B../../" \
+ 	"CFLAGS=$(CFLAGS)" \
++	"LDFLAGS=$(LDFLAGS)" \
+ 	"ADAFLAGS=$(ADAFLAGS)" \
+ 	"ADA_CFLAGS=$(ADA_CFLAGS)" \
+ 	"INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
+@@ -97,6 +100,22 @@
+ 	"TOOLSCASE=cross"
+ 
+ # Variables for gnattools, cross
++ifeq ($(build), $(host))
++  GNATMAKE_FOR_HOST=gnatmake
++  GNATLINK_FOR_HOST=gnatlink
++  GNATBIND_FOR_HOST=gnatbind
++  GNATLS_FOR_HOST=gnatls
++else
++  GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
++  GNATLINK_FOR_HOST=$(host_alias)-gnatlink
++  GNATBIND_FOR_HOST=$(host_alias)-gnatbind
++  GNATLS_FOR_HOST=$(host_alias)-gnatls
++endif
++
++# Put the host RTS dir first in the PATH to hide the default runtime
++# files that are among the sources
++RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
++
+ TOOLS_FLAGS_TO_PASS_CROSS= \
+ 	"CC=$(CC)" \
+ 	"CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
+@@ -108,9 +127,9 @@
+ 	"exeext=$(exeext)" \
+ 	"fsrcdir=$(fsrcdir)" \
+ 	"srcdir=$(fsrcdir)" \
+-	"GNATMAKE=gnatmake" \
+-	"GNATLINK=gnatlink" \
+-	"GNATBIND=gnatbind" \
++	"GNATMAKE=$(GNATMAKE_FOR_HOST)" \
++	"GNATLINK=$(GNATLINK_FOR_HOST)" \
++	"GNATBIND=$(GNATBIND_FOR_HOST)" \
+ 	"TOOLSCASE=cross" \
+ 	"LIBGNAT="
+ 
+@@ -179,11 +198,6 @@
+ 	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+ 	  $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+ 
+-# For cross builds of gnattools,
+-# put the host RTS dir first in the PATH to hide the default runtime
+-# files that are among the sources
+-# FIXME: This should be done in configure.
+-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
+ gnattools-cross: $(GCC_DIR)/stamp-tools
+ 	# gnattools1-re
+ 	$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
+diff -Naur gcc-4.8.2.orig/gnattools/configure gcc-4.8.2/gnattools/configure
+--- gcc-4.8.2.orig/gnattools/configure	2012-03-14 16:33:37.000000000 +0000
++++ gcc-4.8.2/gnattools/configure	2014-03-30 20:21:40.747598525 +0000
+@@ -2029,66 +2029,59 @@
+ # Per-target case statement
+ # -------------------------
+ case "${target}" in
+-  alpha*-dec-vx*) # Unlike all other Vxworks
+-    ;;
+-  m68k*-wrs-vx* \
+-  | powerpc*-wrs-vxworks \
+-  | sparc*-wrs-vx* \
+-  | *86-wrs-vxworks \
+-  | mips*-wrs-vx*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
++  *-*-aix*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
++    indepsw.adb<indepsw-aix.adb"
+     ;;
+-  sparc-sun-solaris*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++  *-*-darwin*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
++    indepsw.adb<indepsw-darwin.adb"
+     ;;
+-  *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++  *-*-freebsd*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  *86-*-linux* \
+-  | powerpc*-*-linux* \
+-  | *ia64-*-linux* \
+-  | alpha*-*-linux* \
+-  | sparc*-*-linux* \
+-  | hppa*-*-linux* \
+-  | *x86_64-*-linux*)
++  *-*-linux*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+     indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  s390*-*-linux*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
++  *-*-lynxos*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
++    indepsw.adb<indepsw-gnu.adb"
++    ;;
++  *-*-solaris*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+     ;;
+-  *86-*-freebsd*)
++  *-*-vxworks*)
+     TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
+     indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  hppa*-hp-hpux10*) # Unlike hpux11
++  hppa*-hp-hpux10*)
+     ;;
+   hppa*-hp-hpux11*)
+     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
+     ;;
+-  *-ibm-aix*)
+-    TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
+-    indepsw.adb<indepsw-aix.adb"
++  ia64-hp-hpux11*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
+     ;;
+-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
+-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
++  alpha*-*-vms* | alpha*-*-openvms*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
+     symbols.adb<symbols-vms.adb \
+     symbols-processing.adb<symbols-processing-vms-alpha.adb"
+-
+     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
+     ;;
+-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
+-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
++  ia64-*-vms* | ia64-*-openvms*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
+     symbols.adb<symbols-vms.adb \
+     symbols-processing.adb<symbols-processing-vms-ia64.adb"
+-
+     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
+     ;;
+   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
+@@ -2097,14 +2090,6 @@
+     indepsw.adb<indepsw-mingw.adb"
+     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
+     ;;
+-  *-*-darwin*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
+-    ;;
+-  *-*-lynxos)
+-    TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
+-    indepsw.adb<indepsw-gnu.adb"
+-    ;;
+ esac
+ 
+ # From user or toplevel makefile.
+diff -Naur gcc-4.8.2.orig/gnattools/configure.ac gcc-4.8.2/gnattools/configure.ac
+--- gcc-4.8.2.orig/gnattools/configure.ac	2012-03-14 16:33:37.000000000 +0000
++++ gcc-4.8.2/gnattools/configure.ac	2014-03-30 20:21:40.747598525 +0000
+@@ -69,66 +69,59 @@
+ # Per-target case statement
+ # -------------------------
+ case "${target}" in
+-  alpha*-dec-vx*) # Unlike all other Vxworks
+-    ;;
+-  m68k*-wrs-vx* \
+-  | powerpc*-wrs-vxworks \
+-  | sparc*-wrs-vx* \
+-  | *86-wrs-vxworks \
+-  | mips*-wrs-vx*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
++  *-*-aix*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
++    indepsw.adb<indepsw-aix.adb"
+     ;;
+-  sparc-sun-solaris*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++  *-*-darwin*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
++    indepsw.adb<indepsw-darwin.adb"
+     ;;
+-  *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
++  *-*-freebsd*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  *86-*-linux* \
+-  | powerpc*-*-linux* \
+-  | *ia64-*-linux* \
+-  | alpha*-*-linux* \
+-  | sparc*-*-linux* \
+-  | hppa*-*-linux* \
+-  | *x86_64-*-linux*)
++  *-*-linux*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+     indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  s390*-*-linux*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
++  *-*-lynxos*)
++    TOOLS_TARGET_PAIRS="\
++    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
++    indepsw.adb<indepsw-gnu.adb"
++    ;;
++  *-*-solaris*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
+     ;;
+-  *86-*-freebsd*)
++  *-*-vxworks*)
+     TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
++    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
+     indepsw.adb<indepsw-gnu.adb"
+     ;;
+-  hppa*-hp-hpux10*) # Unlike hpux11
++  hppa*-hp-hpux10*)
+     ;;
+   hppa*-hp-hpux11*)
+     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
+     ;;
+-  *-ibm-aix*)
+-    TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
+-    indepsw.adb<indepsw-aix.adb"
++  ia64-hp-hpux11*)
++    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
+     ;;
+-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
+-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
++  alpha*-*-vms* | alpha*-*-openvms*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
+     symbols.adb<symbols-vms.adb \
+     symbols-processing.adb<symbols-processing-vms-alpha.adb"
+-
+     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
+     ;;
+-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
+-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
++  ia64-*-vms* | ia64-*-openvms*)
+     TOOLS_TARGET_PAIRS="\
+     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
+     symbols.adb<symbols-vms.adb \
+     symbols-processing.adb<symbols-processing-vms-ia64.adb"
+-
+     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
+     ;;
+   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
+@@ -137,14 +130,6 @@
+     indepsw.adb<indepsw-mingw.adb"
+     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
+     ;;
+-  *-*-darwin*)
+-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
+-    ;;
+-  *-*-lynxos)
+-    TOOLS_TARGET_PAIRS="\
+-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
+-    indepsw.adb<indepsw-gnu.adb"
+-    ;;
+ esac
+ 
+ # From user or toplevel makefile.
+diff -Naur gcc-4.8.2.orig/libatomic/cas_n.c gcc-4.8.2/libatomic/cas_n.c
+--- gcc-4.8.2.orig/libatomic/cas_n.c	2013-01-14 18:16:23.000000000 +0000
++++ gcc-4.8.2/libatomic/cas_n.c	2014-03-30 20:21:40.747598525 +0000
+@@ -51,10 +51,9 @@
+ #if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
+ bool
+ SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
+-			      int smodel, int fmodel UNUSED)
++			      int smodel, int fmodel)
+ {
+   UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
+-  bool ret = false;
+ 
+   pre_barrier (smodel);
+ 
+@@ -82,12 +81,13 @@
+     }
+   while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
+ 				     __ATOMIC_RELAXED, __ATOMIC_RELAXED));
+-  ret = true;
++  post_barrier (smodel);
++  return true;
++
+  failure:
+   *eptr = woldval >> shift;
+-
+-  post_barrier (smodel);
+-  return ret;
++  post_barrier (fmodel);
++  return false;
+ }
+ 
+ #define DONE 1
+@@ -102,18 +102,17 @@
+ {
+   UTYPE oldval;
+   UWORD magic;
+-  bool ret = false;
++  bool ret;
+ 
+   pre_seq_barrier (smodel);
+   magic = protect_start (mptr);
+ 
+   oldval = *mptr;
+-  if (oldval == *eptr)
+-    {
+-      *mptr = newval;
+-      ret = true;
+-    }
+-  *eptr = oldval;
++  ret = (oldval == *eptr);
++  if (ret)
++    *mptr = newval;
++  else
++    *eptr = oldval;
+ 
+   protect_end (mptr, magic);
+   post_seq_barrier (smodel);
+diff -Naur gcc-4.8.2.orig/libbacktrace/Makefile.in gcc-4.8.2/libbacktrace/Makefile.in
+--- gcc-4.8.2.orig/libbacktrace/Makefile.in	2013-01-01 16:23:03.000000000 +0000
++++ gcc-4.8.2/libbacktrace/Makefile.in	2014-03-30 20:21:40.750931968 +0000
+@@ -16,7 +16,7 @@
+ @SET_MAKE@
+ 
+ # Makefile.am -- Backtrace Makefile.
+-# Copyright (C) 2012 Free Software Foundation, Inc.
++# Copyright (C) 2012-2013 Free Software Foundation, Inc.
+ 
+ # Redistribution and use in source and binary forms, with or without
+ # modification, are permitted provided that the following conditions are
+diff -Naur gcc-4.8.2.orig/libbacktrace/alloc.c gcc-4.8.2/libbacktrace/alloc.c
+--- gcc-4.8.2.orig/libbacktrace/alloc.c	2013-03-25 18:13:52.000000000 +0000
++++ gcc-4.8.2/libbacktrace/alloc.c	2014-03-30 20:21:40.747598525 +0000
+@@ -113,12 +113,24 @@
+ 
+ /* Finish the current allocation on VEC.  */
+ 
+-void
+-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
+-			 struct backtrace_vector *vec)
++void *
++backtrace_vector_finish (struct backtrace_state *state,
++			 struct backtrace_vector *vec,
++			 backtrace_error_callback error_callback,
++			 void *data)
+ {
+-  vec->base = (char *) vec->base + vec->size;
++  void *ret;
++
++  /* With this allocator we call realloc in backtrace_vector_grow,
++     which means we can't easily reuse the memory here.  So just
++     release it.  */
++  if (!backtrace_vector_release (state, vec, error_callback, data))
++    return NULL;
++  ret = vec->base;
++  vec->base = NULL;
+   vec->size = 0;
++  vec->alc = 0;
++  return ret;
+ }
+ 
+ /* Release any extra space allocated for VEC.  */
+diff -Naur gcc-4.8.2.orig/libbacktrace/configure gcc-4.8.2/libbacktrace/configure
+--- gcc-4.8.2.orig/libbacktrace/configure	2012-12-11 18:45:45.000000000 +0000
++++ gcc-4.8.2/libbacktrace/configure	2014-03-30 20:21:40.747598525 +0000
+@@ -11667,12 +11667,13 @@
+   return 0;
+ }
+ _ACEOF
+-if ac_fn_c_try_compile "$LINENO"; then :
++if ac_fn_c_try_link "$LINENO"; then :
+   have_unwind_getipinfo=yes
+ else
+   have_unwind_getipinfo=no
+ fi
+-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
+   CFLAGS="$ac_save_CFLAGS"
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
+ $as_echo "$have_unwind_getipinfo" >&6; }
+diff -Naur gcc-4.8.2.orig/libbacktrace/configure.ac gcc-4.8.2/libbacktrace/configure.ac
+--- gcc-4.8.2.orig/libbacktrace/configure.ac	2013-01-14 18:17:30.000000000 +0000
++++ gcc-4.8.2/libbacktrace/configure.ac	2014-03-30 20:21:40.747598525 +0000
+@@ -144,7 +144,7 @@
+   ac_save_CFFLAGS="$CFLAGS"
+   CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
+   AC_MSG_CHECKING([for _Unwind_GetIPInfo])
+-  AC_COMPILE_IFELSE(
++  AC_LINK_IFELSE(
+     [AC_LANG_PROGRAM(
+        [#include "unwind.h"
+ 	struct _Unwind_Context *context;
+diff -Naur gcc-4.8.2.orig/libbacktrace/dwarf.c gcc-4.8.2/libbacktrace/dwarf.c
+--- gcc-4.8.2.orig/libbacktrace/dwarf.c	2013-01-31 17:50:47.000000000 +0000
++++ gcc-4.8.2/libbacktrace/dwarf.c	2014-03-30 20:21:40.750931968 +0000
+@@ -2507,19 +2507,23 @@
+   if (pfvec->count == 0)
+     return;
+ 
+-  addrs = (struct function_addrs *) pfvec->vec.base;
+   addrs_count = pfvec->count;
+ 
+   if (fvec == NULL)
+     {
+       if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
+ 	return;
++      addrs = (struct function_addrs *) pfvec->vec.base;
+     }
+   else
+     {
+       /* Finish this list of addresses, but leave the remaining space in
+ 	 the vector available for the next function unit.  */
+-      backtrace_vector_finish (state, &fvec->vec);
++      addrs = ((struct function_addrs *)
++	       backtrace_vector_finish (state, &fvec->vec,
++					error_callback, data));
++      if (addrs == NULL)
++	return;
+       fvec->count = 0;
+     }
+ 
+diff -Naur gcc-4.8.2.orig/libbacktrace/elf.c gcc-4.8.2/libbacktrace/elf.c
+--- gcc-4.8.2.orig/libbacktrace/elf.c	2013-01-14 18:17:30.000000000 +0000
++++ gcc-4.8.2/libbacktrace/elf.c	2014-03-30 20:21:40.750931968 +0000
+@@ -725,6 +725,8 @@
+     {
+       off_t end;
+ 
++      if (sections[i].size == 0)
++	continue;
+       if (min_offset == 0 || sections[i].offset < min_offset)
+ 	min_offset = sections[i].offset;
+       end = sections[i].offset + sections[i].size;
+@@ -751,8 +753,13 @@
+   descriptor = -1;
+ 
+   for (i = 0; i < (int) DEBUG_MAX; ++i)
+-    sections[i].data = ((const unsigned char *) debug_view.data
+-			+ (sections[i].offset - min_offset));
++    {
++      if (sections[i].size == 0)
++	sections[i].data = NULL;
++      else
++	sections[i].data = ((const unsigned char *) debug_view.data
++			    + (sections[i].offset - min_offset));
++    }
+ 
+   if (!backtrace_dwarf_add (state, base_address,
+ 			    sections[DEBUG_INFO].data,
+diff -Naur gcc-4.8.2.orig/libbacktrace/internal.h gcc-4.8.2/libbacktrace/internal.h
+--- gcc-4.8.2.orig/libbacktrace/internal.h	2013-01-14 18:17:30.000000000 +0000
++++ gcc-4.8.2/libbacktrace/internal.h	2014-03-30 20:21:40.750931968 +0000
+@@ -192,13 +192,17 @@
+ 				    struct backtrace_vector *vec);
+ 
+ /* Finish the current allocation on VEC.  Prepare to start a new
+-   allocation.  The finished allocation will never be freed.  */
++   allocation.  The finished allocation will never be freed.  Returns
++   a pointer to the base of the finished entries, or NULL on
++   failure.  */
+ 
+-extern void backtrace_vector_finish (struct backtrace_state *state,
+-				     struct backtrace_vector *vec);
++extern void* backtrace_vector_finish (struct backtrace_state *state,
++				      struct backtrace_vector *vec,
++				      backtrace_error_callback error_callback,
++				      void *data);
+ 
+-/* Release any extra space allocated for VEC.  Returns 1 on success, 0
+-   on failure.  */
++/* Release any extra space allocated for VEC.  This may change
++   VEC->base.  Returns 1 on success, 0 on failure.  */
+ 
+ extern int backtrace_vector_release (struct backtrace_state *state,
+ 				     struct backtrace_vector *vec,
+diff -Naur gcc-4.8.2.orig/libbacktrace/mmap.c gcc-4.8.2/libbacktrace/mmap.c
+--- gcc-4.8.2.orig/libbacktrace/mmap.c	2013-03-25 18:13:52.000000000 +0000
++++ gcc-4.8.2/libbacktrace/mmap.c	2014-03-30 20:21:40.750931968 +0000
+@@ -230,12 +230,19 @@
+ 
+ /* Finish the current allocation on VEC.  */
+ 
+-void
+-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
+-			 struct backtrace_vector *vec)
++void *
++backtrace_vector_finish (
++  struct backtrace_state *state ATTRIBUTE_UNUSED,
++  struct backtrace_vector *vec,
++  backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
++  void *data ATTRIBUTE_UNUSED)
+ {
++  void *ret;
++
++  ret = vec->base;
+   vec->base = (char *) vec->base + vec->size;
+   vec->size = 0;
++  return ret;
+ }
+ 
+ /* Release any extra space allocated for VEC.  */
+diff -Naur gcc-4.8.2.orig/libcpp/files.c gcc-4.8.2/libcpp/files.c
+--- gcc-4.8.2.orig/libcpp/files.c	2013-03-06 16:18:40.000000000 +0000
++++ gcc-4.8.2/libcpp/files.c	2014-03-30 20:21:40.750931968 +0000
+@@ -983,6 +983,7 @@
+ {
+   struct cpp_dir *dir;
+   _cpp_file *file;
++  bool stacked;
+ 
+   dir = search_path_head (pfile, fname, angle_brackets, type);
+   if (!dir)
+@@ -993,19 +994,26 @@
+   if (type == IT_DEFAULT && file == NULL)
+     return false;
+ 
+-  /* Compensate for the increment in linemap_add that occurs in
+-     _cpp_stack_file.  In the case of a normal #include, we're
+-     currently at the start of the line *following* the #include.  A
+-     separate source_location for this location makes no sense (until
+-     we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
+-     This does not apply if we found a PCH file (in which case
+-     linemap_add is not called) or we were included from the
+-     command-line.  */
++  /* Compensate for the increment in linemap_add that occurs if
++      _cpp_stack_file actually stacks the file.  In the case of a
++     normal #include, we're currently at the start of the line
++     *following* the #include.  A separate source_location for this
++     location makes no sense (until we do the LC_LEAVE), and
++     complicates LAST_SOURCE_LINE_LOCATION.  This does not apply if we
++     found a PCH file (in which case linemap_add is not called) or we
++     were included from the command-line.  */
+   if (file->pchname == NULL && file->err_no == 0
+       && type != IT_CMDLINE && type != IT_DEFAULT)
+     pfile->line_table->highest_location--;
+ 
+-  return _cpp_stack_file (pfile, file, type == IT_IMPORT);
++  stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
++
++  if (!stacked)
++    /* _cpp_stack_file didn't stack the file, so let's rollback the
++       compensation dance we performed above.  */
++    pfile->line_table->highest_location++;
++
++  return stacked;
+ }
+ 
+ /* Could not open FILE.  The complication is dependency output.  */
+diff -Naur gcc-4.8.2.orig/libcpp/line-map.c gcc-4.8.2/libcpp/line-map.c
+--- gcc-4.8.2.orig/libcpp/line-map.c	2013-01-14 18:13:59.000000000 +0000
++++ gcc-4.8.2/libcpp/line-map.c	2014-03-30 20:21:40.750931968 +0000
+@@ -1024,6 +1024,11 @@
+   bool pre_virtual_p, post_virtual_p;
+   source_location l0 = pre, l1 = post;
+ 
++  if (IS_ADHOC_LOC (l0))
++    l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
++  if (IS_ADHOC_LOC (l1))
++    l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
++
+   if (l0 == l1)
+     return 0;
+ 
+diff -Naur gcc-4.8.2.orig/libcpp/macro.c gcc-4.8.2/libcpp/macro.c
+--- gcc-4.8.2.orig/libcpp/macro.c	2013-01-14 18:13:59.000000000 +0000
++++ gcc-4.8.2/libcpp/macro.c	2014-03-30 20:21:40.750931968 +0000
+@@ -1108,21 +1108,22 @@
+ 
+       if (macro->paramc == 0)
+ 	{
++	  unsigned tokens_count = macro_real_token_count (macro);
+ 	  if (CPP_OPTION (pfile, track_macro_expansion))
+ 	    {
+-	      unsigned int i, count = macro->count;
++	      unsigned int i;
+ 	      const cpp_token *src = macro->exp.tokens;
+ 	      const struct line_map *map;
+ 	      source_location *virt_locs = NULL;
+-	      _cpp_buff *macro_tokens =
+-		tokens_buff_new (pfile, count, &virt_locs);
++	      _cpp_buff *macro_tokens
++		= tokens_buff_new (pfile, tokens_count, &virt_locs);
+ 
+ 	      /* Create a macro map to record the locations of the
+ 		 tokens that are involved in the expansion. LOCATION
+ 		 is the location of the macro expansion point.  */
+-	      map  = linemap_enter_macro (pfile->line_table,
+-					  node, location, count);
+-	      for (i = 0; i < count; ++i)
++	      map = linemap_enter_macro (pfile->line_table,
++					 node, location, tokens_count);
++	      for (i = 0; i < tokens_count; ++i)
+ 		{
+ 		  tokens_buff_add_token (macro_tokens, virt_locs,
+ 					 src, src->src_loc,
+@@ -1134,16 +1135,12 @@
+ 					    virt_locs,
+ 					    (const cpp_token **)
+ 					    macro_tokens->base,
+-					    count);
+-	      num_macro_tokens_counter += count;
++					    tokens_count);
+ 	    }
+ 	  else
+-	    {
+-	      unsigned tokens_count = macro_real_token_count (macro);
+-	      _cpp_push_token_context (pfile, node, macro->exp.tokens,
+-				       tokens_count);
+-	      num_macro_tokens_counter += tokens_count;
+-	    }
++	    _cpp_push_token_context (pfile, node, macro->exp.tokens,
++				     tokens_count);
++	  num_macro_tokens_counter += tokens_count;
+ 	}
+ 
+       if (pragma_buff)
+diff -Naur gcc-4.8.2.orig/libffi/doc/libffi.info gcc-4.8.2/libffi/doc/libffi.info
+--- gcc-4.8.2.orig/libffi/doc/libffi.info	2013-10-16 08:21:34.000000000 +0000
++++ gcc-4.8.2/libffi/doc/libffi.info	1970-01-01 00:00:00.000000000 +0000
+@@ -1,614 +0,0 @@
+-This is libffi.info, produced by makeinfo version 5.1 from libffi.texi.
+-
+-This manual is for Libffi, a portable foreign-function interface
+-library.
+-
+-   Copyright (C) 2008, 2010, 2011 Red Hat, Inc.
+-
+-     Permission is granted to copy, distribute and/or modify this
+-     document under the terms of the GNU General Public License as
+-     published by the Free Software Foundation; either version 2, or (at
+-     your option) any later version.  A copy of the license is included
+-     in the section entitled "GNU General Public License".
+-
+-INFO-DIR-SECTION Development
+-START-INFO-DIR-ENTRY
+-* libffi: (libffi).             Portable foreign-function interface library.
+-END-INFO-DIR-ENTRY
+-
+-
+-File: libffi.info,  Node: Top,  Next: Introduction,  Up: (dir)
+-
+-libffi
+-******
+-
+-This manual is for Libffi, a portable foreign-function interface
+-library.
+-
+-   Copyright (C) 2008, 2010, 2011 Red Hat, Inc.
+-
+-     Permission is granted to copy, distribute and/or modify this
+-     document under the terms of the GNU General Public License as
+-     published by the Free Software Foundation; either version 2, or (at
+-     your option) any later version.  A copy of the license is included
+-     in the section entitled "GNU General Public License".
+-
+-* Menu:
+-
+-* Introduction::                What is libffi?
+-* Using libffi::                How to use libffi.
+-* Missing Features::            Things libffi can't do.
+-* Index::                       Index.
+-
+-
+-File: libffi.info,  Node: Introduction,  Next: Using libffi,  Prev: Top,  Up: Top
+-
+-1 What is libffi?
+-*****************
+-
+-Compilers for high level languages generate code that follow certain
+-conventions.  These conventions are necessary, in part, for separate
+-compilation to work.  One such convention is the "calling convention".
+-The calling convention is a set of assumptions made by the compiler
+-about where function arguments will be found on entry to a function.  A
+-calling convention also specifies where the return value for a function
+-is found.  The calling convention is also sometimes called the "ABI" or
+-"Application Binary Interface".
+-
+-   Some programs may not know at the time of compilation what arguments
+-are to be passed to a function.  For instance, an interpreter may be
+-told at run-time about the number and types of arguments used to call a
+-given function.  'Libffi' can be used in such programs to provide a
+-bridge from the interpreter program to compiled code.
+-
+-   The 'libffi' library provides a portable, high level programming
+-interface to various calling conventions.  This allows a programmer to
+-call any function specified by a call interface description at run time.
+-
+-   FFI stands for Foreign Function Interface.  A foreign function
+-interface is the popular name for the interface that allows code written
+-in one language to call code written in another language.  The 'libffi'
+-library really only provides the lowest, machine dependent layer of a
+-fully featured foreign function interface.  A layer must exist above
+-'libffi' that handles type conversions for values passed between the two
+-languages.
+-
+-
+-File: libffi.info,  Node: Using libffi,  Next: Missing Features,  Prev: Introduction,  Up: Top
+-
+-2 Using libffi
+-**************
+-
+-* Menu:
+-
+-* The Basics::                  The basic libffi API.
+-* Simple Example::              A simple example.
+-* Types::                       libffi type descriptions.
+-* Multiple ABIs::               Different passing styles on one platform.
+-* The Closure API::             Writing a generic function.
+-* Closure Example::             A closure example.
+-
+-
+-File: libffi.info,  Node: The Basics,  Next: Simple Example,  Up: Using libffi
+-
+-2.1 The Basics
+-==============
+-
+-'Libffi' assumes that you have a pointer to the function you wish to
+-call and that you know the number and types of arguments to pass it, as
+-well as the return type of the function.
+-
+-   The first thing you must do is create an 'ffi_cif' object that
+-matches the signature of the function you wish to call.  This is a
+-separate step because it is common to make multiple calls using a single
+-'ffi_cif'.  The "cif" in 'ffi_cif' stands for Call InterFace.  To
+-prepare a call interface object, use the function 'ffi_prep_cif'.
+-
+- -- Function: ffi_status ffi_prep_cif (ffi_cif *CIF, ffi_abi ABI,
+-          unsigned int NARGS, ffi_type *RTYPE, ffi_type **ARGTYPES)
+-     This initializes CIF according to the given parameters.
+-
+-     ABI is the ABI to use; normally 'FFI_DEFAULT_ABI' is what you want.
+-     *note Multiple ABIs:: for more information.
+-
+-     NARGS is the number of arguments that this function accepts.
+-
+-     RTYPE is a pointer to an 'ffi_type' structure that describes the
+-     return type of the function.  *Note Types::.
+-
+-     ARGTYPES is a vector of 'ffi_type' pointers.  ARGTYPES must have
+-     NARGS elements.  If NARGS is 0, this argument is ignored.
+-
+-     'ffi_prep_cif' returns a 'libffi' status code, of type
+-     'ffi_status'.  This will be either 'FFI_OK' if everything worked
+-     properly; 'FFI_BAD_TYPEDEF' if one of the 'ffi_type' objects is
+-     incorrect; or 'FFI_BAD_ABI' if the ABI parameter is invalid.
+-
+-   If the function being called is variadic (varargs) then
+-'ffi_prep_cif_var' must be used instead of 'ffi_prep_cif'.
+-
+- -- Function: ffi_status ffi_prep_cif_var (ffi_cif *CIF, ffi_abi varabi,
+-          unsigned int NFIXEDARGS, unsigned int varntotalargs, ffi_type
+-          *RTYPE, ffi_type **ARGTYPES)
+-     This initializes CIF according to the given parameters for a call
+-     to a variadic function.  In general it's operation is the same as
+-     for 'ffi_prep_cif' except that:
+-
+-     NFIXEDARGS is the number of fixed arguments, prior to any variadic
+-     arguments.  It must be greater than zero.
+-
+-     NTOTALARGS the total number of arguments, including variadic and
+-     fixed arguments.
+-
+-     Note that, different cif's must be prepped for calls to the same
+-     function when different numbers of arguments are passed.
+-
+-     Also note that a call to 'ffi_prep_cif_var' with
+-     NFIXEDARGS=NOTOTALARGS is NOT equivalent to a call to
+-     'ffi_prep_cif'.
+-
+-   To call a function using an initialized 'ffi_cif', use the 'ffi_call'
+-function:
+-
+- -- Function: void ffi_call (ffi_cif *CIF, void *FN, void *RVALUE, void
+-          **AVALUES)
+-     This calls the function FN according to the description given in
+-     CIF.  CIF must have already been prepared using 'ffi_prep_cif'.
+-
+-     RVALUE is a pointer to a chunk of memory that will hold the result
+-     of the function call.  This must be large enough to hold the result
+-     and must be suitably aligned; it is the caller's responsibility to
+-     ensure this.  If CIF declares that the function returns 'void'
+-     (using 'ffi_type_void'), then RVALUE is ignored.  If RVALUE is
+-     'NULL', then the return value is discarded.
+-
+-     AVALUES is a vector of 'void *' pointers that point to the memory
+-     locations holding the argument values for a call.  If CIF declares
+-     that the function has no arguments (i.e., NARGS was 0), then
+-     AVALUES is ignored.  Note that argument values may be modified by
+-     the callee (for instance, structs passed by value); the burden of
+-     copying pass-by-value arguments is placed on the caller.
+-
+-
+-File: libffi.info,  Node: Simple Example,  Next: Types,  Prev: The Basics,  Up: Using libffi
+-
+-2.2 Simple Example
+-==================
+-
+-Here is a trivial example that calls 'puts' a few times.
+-
+-     #include <stdio.h>
+-     #include <ffi.h>
+-
+-     int main()
+-     {
+-       ffi_cif cif;
+-       ffi_type *args[1];
+-       void *values[1];
+-       char *s;
+-       int rc;
+-
+-       /* Initialize the argument info vectors */
+-       args[0] = &ffi_type_pointer;
+-       values[0] = &s;
+-
+-       /* Initialize the cif */
+-       if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+-     		       &ffi_type_uint, args) == FFI_OK)
+-         {
+-           s = "Hello World!";
+-           ffi_call(&cif, puts, &rc, values);
+-           /* rc now holds the result of the call to puts */
+-
+-           /* values holds a pointer to the function's arg, so to
+-              call puts() again all we need to do is change the
+-              value of s */
+-           s = "This is cool!";
+-           ffi_call(&cif, puts, &rc, values);
+-         }
+-
+-       return 0;
+-     }
+-
+-
+-File: libffi.info,  Node: Types,  Next: Multiple ABIs,  Prev: Simple Example,  Up: Using libffi
+-
+-2.3 Types
+-=========
+-
+-* Menu:
+-
+-* Primitive Types::             Built-in types.
+-* Structures::                  Structure types.
+-* Type Example::                Structure type example.
+-
+-
+-File: libffi.info,  Node: Primitive Types,  Next: Structures,  Up: Types
+-
+-2.3.1 Primitive Types
+----------------------
+-
+-'Libffi' provides a number of built-in type descriptors that can be used
+-to describe argument and return types:
+-
+-'ffi_type_void'
+-     The type 'void'.  This cannot be used for argument types, only for
+-     return values.
+-
+-'ffi_type_uint8'
+-     An unsigned, 8-bit integer type.
+-
+-'ffi_type_sint8'
+-     A signed, 8-bit integer type.
+-
+-'ffi_type_uint16'
+-     An unsigned, 16-bit integer type.
+-
+-'ffi_type_sint16'
+-     A signed, 16-bit integer type.
+-
+-'ffi_type_uint32'
+-     An unsigned, 32-bit integer type.
+-
+-'ffi_type_sint32'
+-     A signed, 32-bit integer type.
+-
+-'ffi_type_uint64'
+-     An unsigned, 64-bit integer type.
+-
+-'ffi_type_sint64'
+-     A signed, 64-bit integer type.
+-
+-'ffi_type_float'
+-     The C 'float' type.
+-
+-'ffi_type_double'
+-     The C 'double' type.
+-
+-'ffi_type_uchar'
+-     The C 'unsigned char' type.
+-
+-'ffi_type_schar'
+-     The C 'signed char' type.  (Note that there is not an exact
+-     equivalent to the C 'char' type in 'libffi'; ordinarily you should
+-     either use 'ffi_type_schar' or 'ffi_type_uchar' depending on
+-     whether 'char' is signed.)
+-
+-'ffi_type_ushort'
+-     The C 'unsigned short' type.
+-
+-'ffi_type_sshort'
+-     The C 'short' type.
+-
+-'ffi_type_uint'
+-     The C 'unsigned int' type.
+-
+-'ffi_type_sint'
+-     The C 'int' type.
+-
+-'ffi_type_ulong'
+-     The C 'unsigned long' type.
+-
+-'ffi_type_slong'
+-     The C 'long' type.
+-
+-'ffi_type_longdouble'
+-     On platforms that have a C 'long double' type, this is defined.  On
+-     other platforms, it is not.
+-
+-'ffi_type_pointer'
+-     A generic 'void *' pointer.  You should use this for all pointers,
+-     regardless of their real type.
+-
+-   Each of these is of type 'ffi_type', so you must take the address
+-when passing to 'ffi_prep_cif'.
+-
+-
+-File: libffi.info,  Node: Structures,  Next: Type Example,  Prev: Primitive Types,  Up: Types
+-
+-2.3.2 Structures
+-----------------
+-
+-Although 'libffi' has no special support for unions or bit-fields, it is
+-perfectly happy passing structures back and forth.  You must first
+-describe the structure to 'libffi' by creating a new 'ffi_type' object
+-for it.
+-
+- -- ffi_type:
+-     The 'ffi_type' has the following members:
+-     'size_t size'
+-          This is set by 'libffi'; you should initialize it to zero.
+-
+-     'unsigned short alignment'
+-          This is set by 'libffi'; you should initialize it to zero.
+-
+-     'unsigned short type'
+-          For a structure, this should be set to 'FFI_TYPE_STRUCT'.
+-
+-     'ffi_type **elements'
+-          This is a 'NULL'-terminated array of pointers to 'ffi_type'
+-          objects.  There is one element per field of the struct.
+-
+-
+-File: libffi.info,  Node: Type Example,  Prev: Structures,  Up: Types
+-
+-2.3.3 Type Example
+-------------------
+-
+-The following example initializes a 'ffi_type' object representing the
+-'tm' struct from Linux's 'time.h'.
+-
+-   Here is how the struct is defined:
+-
+-     struct tm {
+-         int tm_sec;
+-         int tm_min;
+-         int tm_hour;
+-         int tm_mday;
+-         int tm_mon;
+-         int tm_year;
+-         int tm_wday;
+-         int tm_yday;
+-         int tm_isdst;
+-         /* Those are for future use. */
+-         long int __tm_gmtoff__;
+-         __const char *__tm_zone__;
+-     };
+-
+-   Here is the corresponding code to describe this struct to 'libffi':
+-
+-         {
+-           ffi_type tm_type;
+-           ffi_type *tm_type_elements[12];
+-           int i;
+-
+-           tm_type.size = tm_type.alignment = 0;
+-           tm_type.elements = &tm_type_elements;
+-
+-           for (i = 0; i < 9; i++)
+-               tm_type_elements[i] = &ffi_type_sint;
+-
+-           tm_type_elements[9] = &ffi_type_slong;
+-           tm_type_elements[10] = &ffi_type_pointer;
+-           tm_type_elements[11] = NULL;
+-
+-           /* tm_type can now be used to represent tm argument types and
+-     	 return types for ffi_prep_cif() */
+-         }
+-
+-
+-File: libffi.info,  Node: Multiple ABIs,  Next: The Closure API,  Prev: Types,  Up: Using libffi
+-
+-2.4 Multiple ABIs
+-=================
+-
+-A given platform may provide multiple different ABIs at once.  For
+-instance, the x86 platform has both 'stdcall' and 'fastcall' functions.
+-
+-   'libffi' provides some support for this.  However, this is
+-necessarily platform-specific.
+-
+-
+-File: libffi.info,  Node: The Closure API,  Next: Closure Example,  Prev: Multiple ABIs,  Up: Using libffi
+-
+-2.5 The Closure API
+-===================
+-
+-'libffi' also provides a way to write a generic function - a function
+-that can accept and decode any combination of arguments.  This can be
+-useful when writing an interpreter, or to provide wrappers for arbitrary
+-functions.
+-
+-   This facility is called the "closure API". Closures are not supported
+-on all platforms; you can check the 'FFI_CLOSURES' define to determine
+-whether they are supported on the current platform.
+-
+-   Because closures work by assembling a tiny function at runtime, they
+-require special allocation on platforms that have a non-executable heap.
+-Memory management for closures is handled by a pair of functions:
+-
+- -- Function: void *ffi_closure_alloc (size_t SIZE, void **CODE)
+-     Allocate a chunk of memory holding SIZE bytes.  This returns a
+-     pointer to the writable address, and sets *CODE to the
+-     corresponding executable address.
+-
+-     SIZE should be sufficient to hold a 'ffi_closure' object.
+-
+- -- Function: void ffi_closure_free (void *WRITABLE)
+-     Free memory allocated using 'ffi_closure_alloc'.  The argument is
+-     the writable address that was returned.
+-
+-   Once you have allocated the memory for a closure, you must construct
+-a 'ffi_cif' describing the function call.  Finally you can prepare the
+-closure function:
+-
+- -- Function: ffi_status ffi_prep_closure_loc (ffi_closure *CLOSURE,
+-          ffi_cif *CIF, void (*FUN) (ffi_cif *CIF, void *RET, void
+-          **ARGS, void *USER_DATA), void *USER_DATA, void *CODELOC)
+-     Prepare a closure function.
+-
+-     CLOSURE is the address of a 'ffi_closure' object; this is the
+-     writable address returned by 'ffi_closure_alloc'.
+-
+-     CIF is the 'ffi_cif' describing the function parameters.
+-
+-     USER_DATA is an arbitrary datum that is passed, uninterpreted, to
+-     your closure function.
+-
+-     CODELOC is the executable address returned by 'ffi_closure_alloc'.
+-
+-     FUN is the function which will be called when the closure is
+-     invoked.  It is called with the arguments:
+-     CIF
+-          The 'ffi_cif' passed to 'ffi_prep_closure_loc'.
+-
+-     RET
+-          A pointer to the memory used for the function's return value.
+-          FUN must fill this, unless the function is declared as
+-          returning 'void'.
+-
+-     ARGS
+-          A vector of pointers to memory holding the arguments to the
+-          function.
+-
+-     USER_DATA
+-          The same USER_DATA that was passed to 'ffi_prep_closure_loc'.
+-
+-     'ffi_prep_closure_loc' will return 'FFI_OK' if everything went ok,
+-     and something else on error.
+-
+-     After calling 'ffi_prep_closure_loc', you can cast CODELOC to the
+-     appropriate pointer-to-function type.
+-
+-   You may see old code referring to 'ffi_prep_closure'.  This function
+-is deprecated, as it cannot handle the need for separate writable and
+-executable addresses.
+-
+-
+-File: libffi.info,  Node: Closure Example,  Prev: The Closure API,  Up: Using libffi
+-
+-2.6 Closure Example
+-===================
+-
+-A trivial example that creates a new 'puts' by binding 'fputs' with
+-'stdin'.
+-
+-     #include <stdio.h>
+-     #include <ffi.h>
+-
+-     /* Acts like puts with the file given at time of enclosure. */
+-     void puts_binding(ffi_cif *cif, unsigned int *ret, void* args[],
+-                       FILE *stream)
+-     {
+-       *ret = fputs(*(char **)args[0], stream);
+-     }
+-
+-     int main()
+-     {
+-       ffi_cif cif;
+-       ffi_type *args[1];
+-       ffi_closure *closure;
+-
+-       int (*bound_puts)(char *);
+-       int rc;
+-
+-       /* Allocate closure and bound_puts */
+-       closure = ffi_closure_alloc(sizeof(ffi_closure), &bound_puts);
+-
+-       if (closure)
+-         {
+-           /* Initialize the argument info vectors */
+-           args[0] = &ffi_type_pointer;
+-
+-           /* Initialize the cif */
+-           if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1,
+-                            &ffi_type_uint, args) == FFI_OK)
+-             {
+-               /* Initialize the closure, setting stream to stdout */
+-               if (ffi_prep_closure_loc(closure, &cif, puts_binding,
+-                                        stdout, bound_puts) == FFI_OK)
+-                 {
+-                   rc = bound_puts("Hello World!");
+-                   /* rc now holds the result of the call to fputs */
+-                 }
+-             }
+-         }
+-
+-       /* Deallocate both closure, and bound_puts */
+-       ffi_closure_free(closure);
+-
+-       return 0;
+-     }
+-
+-
+-File: libffi.info,  Node: Missing Features,  Next: Index,  Prev: Using libffi,  Up: Top
+-
+-3 Missing Features
+-******************
+-
+-'libffi' is missing a few features.  We welcome patches to add support
+-for these.
+-
+-   * Variadic closures.
+-
+-   * There is no support for bit fields in structures.
+-
+-   * The closure API is
+-
+-   * The "raw" API is undocumented.
+-
+-   Note that variadic support is very new and tested on a relatively
+-small number of platforms.
+-
+-
+-File: libffi.info,  Node: Index,  Prev: Missing Features,  Up: Top
+-
+-Index
+-*****
+-
+-[index]
+-* Menu:
+-
+-* ABI:                                   Introduction.         (line 13)
+-* Application Binary Interface:          Introduction.         (line 13)
+-* calling convention:                    Introduction.         (line 13)
+-* cif:                                   The Basics.           (line 14)
+-* closure API:                           The Closure API.      (line 13)
+-* closures:                              The Closure API.      (line 13)
+-* FFI:                                   Introduction.         (line 31)
+-* ffi_call:                              The Basics.           (line 62)
+-* FFI_CLOSURES:                          The Closure API.      (line 13)
+-* ffi_closure_alloc:                     The Closure API.      (line 19)
+-* ffi_closure_free:                      The Closure API.      (line 26)
+-* ffi_prep_cif:                          The Basics.           (line 16)
+-* ffi_prep_cif_var:                      The Basics.           (line 39)
+-* ffi_prep_closure_loc:                  The Closure API.      (line 34)
+-* ffi_status:                            The Basics.           (line 16)
+-* ffi_status <1>:                        The Basics.           (line 39)
+-* ffi_status <2>:                        The Closure API.      (line 34)
+-* ffi_type:                              Structures.           (line 11)
+-* ffi_type_double:                       Primitive Types.      (line 41)
+-* ffi_type_float:                        Primitive Types.      (line 38)
+-* ffi_type_longdouble:                   Primitive Types.      (line 71)
+-* ffi_type_pointer:                      Primitive Types.      (line 75)
+-* ffi_type_schar:                        Primitive Types.      (line 47)
+-* ffi_type_sint:                         Primitive Types.      (line 62)
+-* ffi_type_sint16:                       Primitive Types.      (line 23)
+-* ffi_type_sint32:                       Primitive Types.      (line 29)
+-* ffi_type_sint64:                       Primitive Types.      (line 35)
+-* ffi_type_sint8:                        Primitive Types.      (line 17)
+-* ffi_type_slong:                        Primitive Types.      (line 68)
+-* ffi_type_sshort:                       Primitive Types.      (line 56)
+-* ffi_type_uchar:                        Primitive Types.      (line 44)
+-* ffi_type_uint:                         Primitive Types.      (line 59)
+-* ffi_type_uint16:                       Primitive Types.      (line 20)
+-* ffi_type_uint32:                       Primitive Types.      (line 26)
+-* ffi_type_uint64:                       Primitive Types.      (line 32)
+-* ffi_type_uint8:                        Primitive Types.      (line 14)
+-* ffi_type_ulong:                        Primitive Types.      (line 65)
+-* ffi_type_ushort:                       Primitive Types.      (line 53)
+-* ffi_type_void:                         Primitive Types.      (line 10)
+-* Foreign Function Interface:            Introduction.         (line 31)
+-* void:                                  The Basics.           (line 62)
+-* void <1>:                              The Closure API.      (line 19)
+-* void <2>:                              The Closure API.      (line 26)
+-
+-
+-
+-Tag Table:
+-Node: Top682
+-Node: Introduction1429
+-Node: Using libffi3061
+-Node: The Basics3547
+-Node: Simple Example7187
+-Node: Types8214
+-Node: Primitive Types8497
+-Node: Structures10318
+-Node: Type Example11182
+-Node: Multiple ABIs12405
+-Node: The Closure API12776
+-Node: Closure Example15720
+-Node: Missing Features17279
+-Node: Index17732
+-
+-End Tag Table
+diff -Naur gcc-4.8.2.orig/libgcc/config/arm/sfp-machine.h gcc-4.8.2/libgcc/config/arm/sfp-machine.h
+--- gcc-4.8.2.orig/libgcc/config/arm/sfp-machine.h	2011-08-05 15:13:48.000000000 +0000
++++ gcc-4.8.2/libgcc/config/arm/sfp-machine.h	2014-03-30 20:21:40.750931968 +0000
+@@ -19,10 +19,12 @@
+ #define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_2_udiv(D,R,X,Y)
+ #define _FP_DIV_MEAT_Q(R,X,Y)	_FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+ 
+-#define _FP_NANFRAC_H		((_FP_QNANBIT_H << 1) - 1)
+-#define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
+-#define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1), -1
+-#define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
++/* According to RTABI, QNAN is only with the most significant bit of the
++   significand set, and all other significand bits zero.  */
++#define _FP_NANFRAC_H		0
++#define _FP_NANFRAC_S		0
++#define _FP_NANFRAC_D		0, 0
++#define _FP_NANFRAC_Q		0, 0, 0, 0
+ #define _FP_NANSIGN_H		0
+ #define _FP_NANSIGN_S		0
+ #define _FP_NANSIGN_D		0
+diff -Naur gcc-4.8.2.orig/libgcc/config/i386/cygming-crtbegin.c gcc-4.8.2/libgcc/config/i386/cygming-crtbegin.c
+--- gcc-4.8.2.orig/libgcc/config/i386/cygming-crtbegin.c	2013-02-04 19:06:20.000000000 +0000
++++ gcc-4.8.2/libgcc/config/i386/cygming-crtbegin.c	2014-03-30 20:21:40.750931968 +0000
+@@ -69,6 +69,9 @@
+   = { };
+ 
+ static struct object obj;
++
++/* Handle of libgcc's DLL reference.  */
++HANDLE hmod_libgcc;
+ #endif
+ 
+ #if TARGET_USE_JCR_SECTION
+@@ -93,9 +96,14 @@
+ 
+   void (*register_frame_fn) (const void *, struct object *);
+   HANDLE h = GetModuleHandle (LIBGCC_SONAME);
++
+   if (h)
+-    register_frame_fn = (void (*) (const void *, struct object *))
+-			GetProcAddress (h, "__register_frame_info");
++    {
++      /* Increasing the load-count of LIBGCC_SONAME DLL.  */
++      hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
++      register_frame_fn = (void (*) (const void *, struct object *))
++			  GetProcAddress (h, "__register_frame_info");
++    }
+   else 
+     register_frame_fn = __register_frame_info;
+   if (register_frame_fn)
+@@ -132,5 +140,7 @@
+     deregister_frame_fn = __deregister_frame_info;
+   if (deregister_frame_fn)
+      deregister_frame_fn (__EH_FRAME_BEGIN__);
++  if (hmod_libgcc)
++    FreeLibrary (hmod_libgcc);
+ #endif
+ }
+diff -Naur gcc-4.8.2.orig/libgcc/config/i386/sfp-exceptions.c gcc-4.8.2/libgcc/config/i386/sfp-exceptions.c
+--- gcc-4.8.2.orig/libgcc/config/i386/sfp-exceptions.c	2013-02-04 19:06:20.000000000 +0000
++++ gcc-4.8.2/libgcc/config/i386/sfp-exceptions.c	2014-03-30 20:21:40.750931968 +0000
+@@ -47,21 +47,33 @@
+   if (_fex & FP_EX_INVALID)
+     {
+       float f = 0.0f;
+-#ifdef __x86_64__
++#ifdef __SSE_MATH__
++      volatile float r __attribute__ ((unused));
+       asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
++      r = f; /* Needed to trigger exception.   */
+ #else
+       asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
+-      asm volatile ("fwait");
++      /* No need for fwait, exception is triggered by emitted fstp.  */
+ #endif
+     }
++  if (_fex & FP_EX_DENORM)
++    {
++      struct fenv temp;
++      asm volatile ("fnstenv\t%0" : "=m" (temp));
++      temp.__status_word |= FP_EX_DENORM;
++      asm volatile ("fldenv\t%0" : : "m" (temp));
++      asm volatile ("fwait");
++    }
+   if (_fex & FP_EX_DIVZERO)
+     {
+       float f = 1.0f, g = 0.0f;
+-#ifdef __x86_64__
++#ifdef __SSE_MATH__
++      volatile float r __attribute__ ((unused));
+       asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
++      r = f; /* Needed to trigger exception.   */
+ #else
+       asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
+-      asm volatile ("fwait");
++      /* No need for fwait, exception is triggered by emitted fstp.  */
+ #endif
+     }
+   if (_fex & FP_EX_OVERFLOW)
+@@ -82,11 +94,15 @@
+     }
+   if (_fex & FP_EX_INEXACT)
+     {
+-      struct fenv temp;
+-      asm volatile ("fnstenv\t%0" : "=m" (temp));
+-      temp.__status_word |= FP_EX_INEXACT;
+-      asm volatile ("fldenv\t%0" : : "m" (temp));
+-      asm volatile ("fwait");
++      float f = 1.0f, g = 3.0f;
++#ifdef __SSE_MATH__
++      volatile float r __attribute__ ((unused));
++      asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
++      r = f; /* Needed to trigger exception.   */
++#else
++      asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
++      /* No need for fwait, exception is triggered by emitted fstp.  */
++#endif
+     }
+ };
+ #endif
+diff -Naur gcc-4.8.2.orig/libgcc/config/rs6000/ibm-ldouble.c gcc-4.8.2/libgcc/config/rs6000/ibm-ldouble.c
+--- gcc-4.8.2.orig/libgcc/config/rs6000/ibm-ldouble.c	2013-06-19 01:18:38.000000000 +0000
++++ gcc-4.8.2/libgcc/config/rs6000/ibm-ldouble.c	2014-03-30 20:21:40.750931968 +0000
+@@ -188,7 +188,16 @@
+       || nonfinite (t))
+     return t;
+ 
+-  /* Finite nonzero result requires corrections to the highest order term.  */
++  /* Finite nonzero result requires corrections to the highest order
++     term.  These corrections require the low part of c * t to be
++     exactly represented in double.  */
++  if (fabs (a) <= 0x1p-969)
++    {
++      a *= 0x1p106;
++      b *= 0x1p106;
++      c *= 0x1p106;
++      d *= 0x1p106;
++    }
+ 
+   s = c * t;                    /* (s,sigma) = c*t exactly.  */
+   w = -(-b + d * t);	/* Written to get fnmsub for speed, but not
+diff -Naur gcc-4.8.2.orig/libgcc/config/tilepro/atomic.c gcc-4.8.2/libgcc/config/tilepro/atomic.c
+--- gcc-4.8.2.orig/libgcc/config/tilepro/atomic.c	2013-02-04 19:06:20.000000000 +0000
++++ gcc-4.8.2/libgcc/config/tilepro/atomic.c	2014-03-30 20:21:40.750931968 +0000
+@@ -28,7 +28,7 @@
+ /* This code should be inlined by the compiler, but for now support
+    it as out-of-line methods in libgcc.  */
+ 
+-static void
++static inline void
+ pre_atomic_barrier (int model)
+ {
+   switch ((enum memmodel) model)
+@@ -44,7 +44,7 @@
+   return;
+ }
+ 
+-static void
++static inline void
+ post_atomic_barrier (int model)
+ {
+   switch ((enum memmodel) model)
+@@ -62,16 +62,21 @@
+ 
+ #define __unused __attribute__((unused))
+ 
+-#define __atomic_fetch_and_do(type, size, opname)		\
+-type								\
+-__atomic_fetch_##opname##_##size(type* p, type i, int model)	\
++#define __fetch_and_do(proto, type, size, opname, top, bottom)	\
++proto								\
+ {								\
+-  pre_atomic_barrier(model);					\
++  top;								\
+   type rv = arch_atomic_##opname(p, i);				\
+-  post_atomic_barrier(model);					\
++  bottom;							\
+   return rv;							\
+ }
+ 
++#define __atomic_fetch_and_do(type, size, opname)			\
++  __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
++		 type, size, opname,					\
++		 pre_atomic_barrier(model),				\
++		 post_atomic_barrier(model))				\
++
+ __atomic_fetch_and_do (int, 4, add)
+ __atomic_fetch_and_do (int, 4, sub)
+ __atomic_fetch_and_do (int, 4, or)
+@@ -84,27 +89,73 @@
+ __atomic_fetch_and_do (long long, 8, and)
+ __atomic_fetch_and_do (long long, 8, xor)
+ __atomic_fetch_and_do (long long, 8, nand)
+-#define __atomic_do_and_fetch(type, size, opname, op)		\
+-type								\
+-__atomic_##opname##_fetch_##size(type* p, type i, int model)	\
+-{								\
+-  pre_atomic_barrier(model);					\
+-  type rv = arch_atomic_##opname(p, i) op i;			\
+-  post_atomic_barrier(model);					\
+-  return rv;							\
++
++#define __sync_fetch_and_do(type, size, opname)				\
++  __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
++		 type, size, opname,					\
++		 arch_atomic_write_barrier(),				\
++		 arch_atomic_read_barrier())
++
++__sync_fetch_and_do (int, 4, add)
++__sync_fetch_and_do (int, 4, sub)
++__sync_fetch_and_do (int, 4, or)
++__sync_fetch_and_do (int, 4, and)
++__sync_fetch_and_do (int, 4, xor)
++__sync_fetch_and_do (int, 4, nand)
++__sync_fetch_and_do (long long, 8, add)
++__sync_fetch_and_do (long long, 8, sub)
++__sync_fetch_and_do (long long, 8, or)
++__sync_fetch_and_do (long long, 8, and)
++__sync_fetch_and_do (long long, 8, xor)
++__sync_fetch_and_do (long long, 8, nand)
++
++#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom)	\
++proto									\
++{									\
++  top;									\
++  type rv = op2 (arch_atomic_##opname(p, i) op i);			\
++  bottom;								\
++  return rv;								\
+ }
+-__atomic_do_and_fetch (int, 4, add, +)
+-__atomic_do_and_fetch (int, 4, sub, -)
+-__atomic_do_and_fetch (int, 4, or, |)
+-__atomic_do_and_fetch (int, 4, and, &)
+-__atomic_do_and_fetch (int, 4, xor, |)
+-__atomic_do_and_fetch (int, 4, nand, &)
+-__atomic_do_and_fetch (long long, 8, add, +)
+-__atomic_do_and_fetch (long long, 8, sub, -)
+-__atomic_do_and_fetch (long long, 8, or, |)
+-__atomic_do_and_fetch (long long, 8, and, &)
+-__atomic_do_and_fetch (long long, 8, xor, |)
+-__atomic_do_and_fetch (long long, 8, nand, &)
++
++#define __atomic_do_and_fetch(type, size, opname, op, op2)		\
++  __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
++		 type, size, opname, op, op2,				\
++		 pre_atomic_barrier(model),				\
++		 post_atomic_barrier(model))				\
++
++__atomic_do_and_fetch (int, 4, add, +, )
++__atomic_do_and_fetch (int, 4, sub, -, )
++__atomic_do_and_fetch (int, 4, or, |, )
++__atomic_do_and_fetch (int, 4, and, &, )
++__atomic_do_and_fetch (int, 4, xor, |, )
++__atomic_do_and_fetch (int, 4, nand, &, ~)
++__atomic_do_and_fetch (long long, 8, add, +, )
++__atomic_do_and_fetch (long long, 8, sub, -, )
++__atomic_do_and_fetch (long long, 8, or, |, )
++__atomic_do_and_fetch (long long, 8, and, &, )
++__atomic_do_and_fetch (long long, 8, xor, |, )
++__atomic_do_and_fetch (long long, 8, nand, &, ~)
++
++#define __sync_do_and_fetch(type, size, opname, op, op2)		\
++  __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
++		 type, size, opname, op, op2,				\
++		 arch_atomic_write_barrier(),				\
++		 arch_atomic_read_barrier())				\
++
++__sync_do_and_fetch (int, 4, add, +, )
++__sync_do_and_fetch (int, 4, sub, -, )
++__sync_do_and_fetch (int, 4, or, |, )
++__sync_do_and_fetch (int, 4, and, &, )
++__sync_do_and_fetch (int, 4, xor, |, )
++__sync_do_and_fetch (int, 4, nand, &, ~)
++__sync_do_and_fetch (long long, 8, add, +, )
++__sync_do_and_fetch (long long, 8, sub, -, )
++__sync_do_and_fetch (long long, 8, or, |, )
++__sync_do_and_fetch (long long, 8, and, &, )
++__sync_do_and_fetch (long long, 8, xor, |, )
++__sync_do_and_fetch (long long, 8, nand, &, ~)
++
+ #define __atomic_exchange_methods(type, size)				\
+ bool									\
+ __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp,	\
+@@ -128,49 +179,117 @@
+   post_atomic_barrier(model);						\
+   return retval;							\
+ }
++
+ __atomic_exchange_methods (int, 4)
+ __atomic_exchange_methods (long long, 8)
+ 
++#define __sync_exchange_methods(type, size)				\
++type									\
++__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval)	\
++{									\
++  arch_atomic_write_barrier();						\
++  type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
++  arch_atomic_read_barrier();						\
++  return retval;							\
++}									\
++									\
++bool									\
++__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
++{									\
++  arch_atomic_write_barrier();						\
++  bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
++  arch_atomic_read_barrier();						\
++  return retval;							\
++}									\
++									\
++type									\
++__sync_lock_test_and_set_##size(type* ptr, type val)			\
++{									\
++  type retval = arch_atomic_exchange(ptr, val);				\
++  arch_atomic_acquire_barrier_value(retval);				\
++  return retval;							\
++}
++
++__sync_exchange_methods (int, 4)
++__sync_exchange_methods (long long, 8)
++
++#ifdef __LITTLE_ENDIAN__
++#define BIT_OFFSET(n, type) ((n) * 8)
++#else
++#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
++#endif
++
+ /* Subword methods require the same approach for both TILEPro and
+    TILE-Gx.  We load the background data for the word, insert the
+    desired subword piece, then compare-and-exchange it into place.  */
+ #define u8 unsigned char
+ #define u16 unsigned short
++
++#define __subword_cmpxchg_body(type, size, ptr, guess, val)		\
++  ({									\
++    unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);	\
++    const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);	\
++    const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;		\
++    const unsigned int bgmask = ~(valmask << shift);			\
++    unsigned int oldword = *p;						\
++    type oldval = (oldword >> shift) & valmask;				\
++    if (__builtin_expect((oldval == guess), 1)) {			\
++      unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
++      oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);	\
++      oldval = (oldword >> shift) & valmask;				\
++    }									\
++    oldval;								\
++  })									\
++
+ #define __atomic_subword_cmpxchg(type, size)				\
+   									\
+ bool									\
+-__atomic_compare_exchange_##size(volatile type* ptr, type* guess,	\
++__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr,	\
+ 				 type val, bool weak __unused, int models, \
+ 				 int modelf __unused)			\
+ {									\
+   pre_atomic_barrier(models);						\
+-  unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);	\
+-  const int shift = ((unsigned long)ptr & 3UL) * 8;			\
+-  const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;		\
+-  const unsigned int bgmask = ~(valmask << shift);			\
+-  unsigned int oldword = *p;						\
+-  type oldval = (oldword >> shift) & valmask;				\
+-  if (__builtin_expect((oldval == *guess), 1)) {			\
+-    unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+-    oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);	\
+-    oldval = (oldword >> shift) & valmask;				\
+-  }									\
++  type guess = *guess_ptr;						\
++  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);	\
+   post_atomic_barrier(models);						\
+-  bool success = (oldval == *guess);					\
+-  *guess = oldval;							\
++  bool success = (oldval == guess);					\
++  *guess_ptr = oldval;							\
+   return success;							\
+ }
++
+ __atomic_subword_cmpxchg (u8, 1)
+ __atomic_subword_cmpxchg (u16, 2)
++
++#define __sync_subword_cmpxchg(type, size)				\
++  									\
++type									\
++__sync_val_compare_and_swap_##size(type* ptr, type guess, type val)	\
++{									\
++  arch_atomic_write_barrier();						\
++  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);	\
++  arch_atomic_read_barrier();						\
++  return oldval;							\
++}									\
++									\
++bool									\
++__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val)	\
++{									\
++  type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val);	\
++  return oldval == guess;						\
++}
++
++__sync_subword_cmpxchg (u8, 1)
++__sync_subword_cmpxchg (u16, 2)
++
+ /* For the atomic-update subword methods, we use the same approach as
+    above, but we retry until we succeed if the compare-and-exchange
+    fails.  */
+-#define __atomic_subword(type, proto, top, expr, bottom)		\
++#define __subword(type, proto, top, expr, bottom)			\
+ proto									\
+ {									\
+   top									\
+   unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);	\
+-  const int shift = ((unsigned long)ptr & 3UL) * 8;			\
++  const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);		\
+   const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;		\
+   const unsigned int bgmask = ~(valmask << shift);			\
+   unsigned int oldword, xword = *p;					\
+@@ -184,42 +303,93 @@
+   } while (__builtin_expect(xword != oldword, 0));			\
+   bottom								\
+ }
++
+ #define __atomic_subword_fetch(type, funcname, expr, retval)		\
+-  __atomic_subword(type,						\
+-		   type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
+-		   pre_atomic_barrier(model);,				\
+-		   expr,						\
+-		   post_atomic_barrier(model); return retval;)
++  __subword(type,							\
++	    type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
++	    pre_atomic_barrier(model);,					\
++	    expr,							\
++	    post_atomic_barrier(model); return retval;)
++
+ __atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
+ __atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
+ __atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
+ __atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
+ __atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
+ __atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
+ __atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
+ __atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
+ __atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
+ __atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
+ __atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
+ __atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
+ __atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
+ __atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
+ __atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
+ __atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
++
+ __atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
+ __atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
+ __atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
+ __atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
+ __atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
+ __atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
++
++#define __sync_subword_fetch(type, funcname, expr, retval)	\
++  __subword(type,						\
++	    type __sync_ ## funcname(type *ptr, type i),	\
++	    arch_atomic_read_barrier();,			\
++	    expr,						\
++	    arch_atomic_write_barrier(); return retval;)
++
++__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
++__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
++__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
++__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
++__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
++__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
++__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
++__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
++__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
++__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
++__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
++__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
++__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
++__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
++__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
++__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
++
++__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
++__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
++__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
++__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
++__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
++__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
++
+ #define __atomic_subword_lock(type, size)				\
+-									\
+-__atomic_subword(type,							\
+-		 type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
+-	         pre_atomic_barrier(model);,				\
+-	         nval,							\
+-	         post_atomic_barrier(model); return oldval;)
++  __subword(type,							\
++	    type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
++	    pre_atomic_barrier(model);,					\
++	    nval,							\
++	    post_atomic_barrier(model); return oldval;)
++
+ __atomic_subword_lock (u8, 1)
+ __atomic_subword_lock (u16, 2)
++
++#define __sync_subword_lock(type, size)					\
++  __subword(type,							\
++	    type __sync_lock_test_and_set_##size(type* ptr, type nval), \
++	    ,								\
++	    nval,							\
++	    arch_atomic_acquire_barrier_value(oldval); return oldval;)
++
++__sync_subword_lock (u8, 1)
++__sync_subword_lock (u16, 2)
+diff -Naur gcc-4.8.2.orig/libgcc/config.host gcc-4.8.2/libgcc/config.host
+--- gcc-4.8.2.orig/libgcc/config.host	2013-07-09 21:35:57.000000000 +0000
++++ gcc-4.8.2/libgcc/config.host	2014-03-30 20:21:40.750931968 +0000
+@@ -331,10 +331,10 @@
+ 	;;
+ arm*-*-uclinux*)		# ARM ucLinux
+ 	tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
++	tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
+ 	tmake_file="${tmake_file} arm/t-bpabi"
+ 	tm_file="$tm_file arm/bpabi-lib.h"
+ 	unwind_header=config/arm/unwind-arm.h
+-	tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
+ 	extra_parts="$extra_parts crti.o crtn.o"
+ 	;;
+ arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
+@@ -718,6 +718,10 @@
+ 	tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
+ 	extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
+ 	;;
++microblaze*-*-rtems*)
++	tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
++	extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
++	;;
+ mips*-*-netbsd*)			# NetBSD/mips, either endian.
+ 	;;
+ mips*-*-linux*)				# Linux MIPS, either endian.
+@@ -1081,7 +1085,7 @@
+ 	md_unwind_header=tilepro/linux-unwind.h
+         ;;
+ v850*-*-*)
+-	tmake_file="v850/t-v850 t-fdpbit"
++	tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
+ 	;;
+ vax-*-linux*)
+ 	tmake_file="$tmake_file vax/t-linux"
+@@ -1098,7 +1102,7 @@
+ 	extra_parts="$extra_parts crti.o crtn.o"
+ 	;;
+ xtensa*-*-linux*)
+-	tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
++	tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
+ 	md_unwind_header=xtensa/linux-unwind.h
+ 	;;
+ am33_2.0-*-linux*)
+diff -Naur gcc-4.8.2.orig/libgcc/unwind-seh.c gcc-4.8.2/libgcc/unwind-seh.c
+--- gcc-4.8.2.orig/libgcc/unwind-seh.c	2013-02-04 19:06:20.000000000 +0000
++++ gcc-4.8.2/libgcc/unwind-seh.c	2014-03-30 20:21:40.754265412 +0000
+@@ -313,8 +313,9 @@
+ 	  ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
+ 
+ 	  /* Begin phase 2.  Perform the unwinding.  */
+-	  RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
+-		       ms_orig_context, ms_disp->HistoryTable);
++	  RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
++		       (PVOID)gcc_context.reg[0], ms_orig_context,
++		       ms_disp->HistoryTable);
+ 	}
+ 
+       /* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR.  */
+diff -Naur gcc-4.8.2.orig/libgfortran/io/io.h gcc-4.8.2/libgfortran/io/io.h
+--- gcc-4.8.2.orig/libgfortran/io/io.h	2013-01-23 21:56:54.000000000 +0000
++++ gcc-4.8.2/libgfortran/io/io.h	2014-03-30 20:21:40.754265412 +0000
+@@ -424,7 +424,10 @@
+ 	  unsigned g0_no_blanks : 1;
+ 	  /* Used to signal use of free_format_data.  */
+ 	  unsigned format_not_saved : 1;
+-	  /* 14 unused bits.  */
++	  /* A flag used to identify when a non-standard expanded namelist read
++	     has occurred.  */
++	  unsigned expanded_read : 1;
++	  /* 13 unused bits.  */
+ 
+ 	  /* Used for ungetc() style functionality. Possible values
+ 	     are an unsigned char, EOF, or EOF - 1 used to mark the
+@@ -441,9 +444,8 @@
+ 	  char *line_buffer;
+ 	  struct format_data *fmt;
+ 	  namelist_info *ionml;
+-	  /* A flag used to identify when a non-standard expanded namelist read
+-	     has occurred.  */
+-	  int expanded_read;
++	  /* Current position within the look-ahead line buffer.  */
++	  int line_buffer_pos;
+ 	  /* Storage area for values except for strings.  Must be
+ 	     large enough to hold a complex value (two reals) of the
+ 	     largest kind.  */
+diff -Naur gcc-4.8.2.orig/libgfortran/io/list_read.c gcc-4.8.2/libgfortran/io/list_read.c
+--- gcc-4.8.2.orig/libgfortran/io/list_read.c	2013-10-04 10:06:23.000000000 +0000
++++ gcc-4.8.2/libgfortran/io/list_read.c	2014-03-30 20:21:40.754265412 +0000
+@@ -118,7 +118,7 @@
+ static void
+ free_line (st_parameter_dt *dtp)
+ {
+-  dtp->u.p.item_count = 0;
++  dtp->u.p.line_buffer_pos = 0;
+   dtp->u.p.line_buffer_enabled = 0;
+ 
+   if (dtp->u.p.line_buffer == NULL)
+@@ -150,15 +150,15 @@
+     {
+       dtp->u.p.at_eol = 0;
+ 
+-      c = dtp->u.p.line_buffer[dtp->u.p.item_count];
+-      if (c != '\0' && dtp->u.p.item_count < 64)
++      c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
++      if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
+ 	{
+-	  dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
+-	  dtp->u.p.item_count++;
++	  dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
++	  dtp->u.p.line_buffer_pos++;
+ 	  goto done;
+ 	}
+ 
+-      dtp->u.p.item_count = 0;
++      dtp->u.p.line_buffer_pos = 0;
+       dtp->u.p.line_buffer_enabled = 0;
+     }    
+ 
+@@ -640,7 +640,7 @@
+   if (dtp->u.p.line_buffer == NULL)
+     dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
+ 
+-  dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
++  dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
+ }
+ 
+ 
+@@ -750,7 +750,7 @@
+ 	{
+ 	  dtp->u.p.nml_read_error = 1;
+ 	  dtp->u.p.line_buffer_enabled = 1;
+-	  dtp->u.p.item_count = 0;
++	  dtp->u.p.line_buffer_pos = 0;
+ 	  return;
+ 	}
+       
+@@ -758,14 +758,17 @@
+ 
+  bad_logical:
+ 
+-  free_line (dtp);
+-
+   if (nml_bad_return (dtp, c))
+-    return;
++    {
++      free_line (dtp);
++      return;
++    }
++
+ 
+   free_saved (dtp);
+   if (c == EOF)
+     {
++      free_line (dtp);
+       hit_eof (dtp);
+       return;
+     }
+@@ -773,6 +776,7 @@
+     eat_line (dtp);
+   snprintf (message, MSGLEN, "Bad logical value while reading item %d",
+ 	      dtp->u.p.item_count);
++  free_line (dtp);
+   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+   return;
+ 
+@@ -913,9 +917,9 @@
+   else if (c != '\n')
+     eat_line (dtp);
+ 
+-  free_line (dtp);
+   snprintf (message, MSGLEN, "Bad integer for item %d in list input",
+ 	      dtp->u.p.item_count);
++  free_line (dtp);
+   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+ 
+   return;
+@@ -1298,9 +1302,9 @@
+   else if (c != '\n')
+     eat_line (dtp);
+ 
+-  free_line (dtp);
+   snprintf (message, MSGLEN, "Bad floating point number for item %d",
+ 	      dtp->u.p.item_count);
++  free_line (dtp);
+   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+ 
+   return 1;
+@@ -1406,9 +1410,9 @@
+   else if (c != '\n')   
+     eat_line (dtp);
+ 
+-  free_line (dtp);
+   snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
+ 	      dtp->u.p.item_count);
++  free_line (dtp);
+   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+ }
+ 
+@@ -1770,7 +1774,7 @@
+     {
+       dtp->u.p.nml_read_error = 1;
+       dtp->u.p.line_buffer_enabled = 1;
+-      dtp->u.p.item_count = 0;
++      dtp->u.p.line_buffer_pos = 0;
+       return;
+     }
+ 
+@@ -1789,9 +1793,9 @@
+   else if (c != '\n')
+     eat_line (dtp);
+ 
+-  free_line (dtp);
+   snprintf (message, MSGLEN, "Bad real number in item %d of list input",
+ 	      dtp->u.p.item_count);
++  free_line (dtp);
+   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+ }
+ 
+@@ -1806,11 +1810,10 @@
+ 
+   if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
+     {
+-      free_line (dtp);
+       snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
+ 		  type_name (dtp->u.p.saved_type), type_name (type),
+ 		  dtp->u.p.item_count);
+-
++      free_line (dtp);
+       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
+       return 1;
+     }
+@@ -1820,12 +1823,12 @@
+ 
+   if (dtp->u.p.saved_length != len)
+     {
+-      free_line (dtp);
+       snprintf (message, MSGLEN,
+ 		  "Read kind %d %s where kind %d is required for item %d",
+ 		  dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
+ 		  dtp->u.p.item_count);
+       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
++      free_line (dtp);
+       return 1;
+     }
+ 
+@@ -2031,8 +2034,6 @@
+ void
+ finish_list_read (st_parameter_dt *dtp)
+ {
+-  int err;
+-
+   free_saved (dtp);
+ 
+   fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
+@@ -2043,12 +2044,22 @@
+       return;
+     }
+ 
+-  err = eat_line (dtp);
+-  if (err == LIBERROR_END)
++  if (!is_internal_unit (dtp))
+     {
+-      free_line (dtp);
+-      hit_eof (dtp);
++      int c;
++      c = next_char (dtp);
++      if (c == EOF)
++	{
++	  free_line (dtp);
++	  hit_eof (dtp);
++	  return;
++	}
++      if (c != '\n')
++	eat_line (dtp);
+     }
++
++  free_line (dtp);
++
+ }
+ 
+ /*			NAMELIST INPUT
+diff -Naur gcc-4.8.2.orig/libgfortran/io/read.c gcc-4.8.2/libgfortran/io/read.c
+--- gcc-4.8.2.orig/libgfortran/io/read.c	2013-01-14 18:20:58.000000000 +0000
++++ gcc-4.8.2/libgfortran/io/read.c	2014-03-30 20:21:40.754265412 +0000
+@@ -655,7 +655,13 @@
+ 	
+       if (c == ' ')
+         {
+-	  if (dtp->u.p.blank_status == BLANK_NULL) continue;
++	  if (dtp->u.p.blank_status == BLANK_NULL)
++	    {
++	      /* Skip spaces.  */
++	      for ( ; w > 0; p++, w--)
++		if (*p != ' ') break; 
++	      continue;
++	    }
+ 	  if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
+         }
+         
+diff -Naur gcc-4.8.2.orig/libgfortran/io/unit.c gcc-4.8.2/libgfortran/io/unit.c
+--- gcc-4.8.2.orig/libgfortran/io/unit.c	2013-01-14 18:20:58.000000000 +0000
++++ gcc-4.8.2/libgfortran/io/unit.c	2014-03-30 20:21:40.754265412 +0000
+@@ -29,6 +29,7 @@
+ #include "unix.h"
+ #include <stdlib.h>
+ #include <string.h>
++#include <stdbool.h>
+ 
+ 
+ /* IO locking rules:
+@@ -375,6 +376,38 @@
+ }
+ 
+ 
++/* Helper function to check rank, stride, format string, and namelist.
++   This is used for optimization. You can't trim out blanks or shorten
++   the string if trailing spaces are significant.  */
++static bool
++is_trim_ok (st_parameter_dt *dtp)
++{
++  /* Check rank and stride.  */
++  if (dtp->internal_unit_desc
++      && (GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc) > 1
++	  || GFC_DESCRIPTOR_STRIDE(dtp->internal_unit_desc, 0) != 1))
++    return false;
++  /* Format strings can not have 'BZ' or '/'.  */
++  if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
++    {
++      char *p = dtp->format;
++      off_t i;
++      if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
++	return false;
++      for (i = 0; i < dtp->format_len; i++)
++	{
++	  if (p[i] == '/') return false;
++	  if (p[i] == 'b' || p[i] == 'B')
++	    if (p[i+1] == 'z' || p[i+1] == 'Z')
++	      return false;
++	}
++    }
++  if (dtp->u.p.ionml) /* A namelist.  */
++    return false;
++  return true;
++}
++
++
+ gfc_unit *
+ get_internal_unit (st_parameter_dt *dtp)
+ {
+@@ -402,6 +435,22 @@
+      some other file I/O unit.  */
+   iunit->unit_number = -1;
+ 
++  /* As an optimization, adjust the unit record length to not
++     include trailing blanks. This will not work under certain conditions
++     where trailing blanks have significance.  */
++  if (dtp->u.p.mode == READING && is_trim_ok (dtp))
++    {
++      int len;
++      if (dtp->common.unit == 0)
++	  len = string_len_trim (dtp->internal_unit_len,
++						   dtp->internal_unit);
++      else
++	  len = string_len_trim_char4 (dtp->internal_unit_len,
++			      (const gfc_char4_t*) dtp->internal_unit);
++      dtp->internal_unit_len = len; 
++      iunit->recl = dtp->internal_unit_len;
++    }
++
+   /* Set up the looping specification from the array descriptor, if any.  */
+ 
+   if (is_array_io (dtp))
+@@ -414,27 +463,6 @@
+ 
+       start_record *= iunit->recl;
+     }
+-  else
+-    {
+-      /* If we are not processing an array, adjust the unit record length not
+-	 to include trailing blanks for list-formatted reads.  */
+-      if (dtp->u.p.mode == READING && !(dtp->common.flags & IOPARM_DT_HAS_FORMAT))
+-	{
+-	  if (dtp->common.unit == 0)
+-	    {
+-	      dtp->internal_unit_len =
+-		string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
+-	      iunit->recl = dtp->internal_unit_len;
+-	    }
+-	  else
+-	    {
+-	      dtp->internal_unit_len =
+-		string_len_trim_char4 (dtp->internal_unit_len,
+-				       (const gfc_char4_t*) dtp->internal_unit);
+-	      iunit->recl = dtp->internal_unit_len;
+-	    }
+-	}
+-    }
+ 
+   /* Set initial values for unit parameters.  */
+   if (dtp->common.unit)
+diff -Naur gcc-4.8.2.orig/libgfortran/io/write_float.def gcc-4.8.2/libgfortran/io/write_float.def
+--- gcc-4.8.2.orig/libgfortran/io/write_float.def	2013-01-14 18:20:58.000000000 +0000
++++ gcc-4.8.2/libgfortran/io/write_float.def	2014-03-30 20:21:40.754265412 +0000
+@@ -125,8 +125,6 @@
+   int nzero;
+   /* Number of digits after the decimal point.  */
+   int nafter;
+-  /* Number of zeros after the decimal point, whatever the precision.  */
+-  int nzero_real;
+   int leadzero;
+   int nblanks;
+   int ndigits, edigits;
+@@ -138,7 +136,6 @@
+   p = dtp->u.p.scale_factor;
+ 
+   rchar = '5';
+-  nzero_real = -1;
+ 
+   /* We should always know the field width and precision.  */
+   if (d < 0)
+@@ -191,7 +188,7 @@
+ 	      if (nafter < 0)
+ 		nafter = 0;
+ 	      nafter = d;
+-	      nzero = nzero_real = 0;
++	      nzero = 0;
+ 	    }
+ 	  else /* p < 0  */
+ 	    {
+@@ -211,14 +208,13 @@
+ 		  nafter = d + nbefore;
+ 		  nbefore = 0;
+ 		}
+-	      nzero_real = nzero;
+ 	      if (nzero > d)
+ 		nzero = d;
+ 	    }
+ 	}
+       else
+ 	{
+-	  nzero = nzero_real = 0;
++	  nzero = 0;
+ 	  nafter = d;
+ 	}
+ 
+@@ -373,7 +369,7 @@
+   updown:
+ 
+   rchar = '0';
+-  if (w > 0 && d == 0 && p == 0)
++  if (ft != FMT_F && w > 0 && d == 0 && p == 0)
+     nbefore = 1;
+   /* Scan for trailing zeros to see if we really need to round it.  */
+   for(i = nbefore + nafter; i < ndigits; i++)
+@@ -386,13 +382,14 @@
+   do_rnd:
+  
+   if (nbefore + nafter == 0)
++    /* Handle the case Fw.0 and value < 1.0 */
+     {
+       ndigits = 0;
+-      if (nzero_real == d && digits[0] >= rchar)
++      if (digits[0] >= rchar)
+ 	{
+ 	  /* We rounded to zero but shouldn't have */
+-	  nzero--;
+-	  nafter = 1;
++	  nbefore = 1;
++	  digits--;
+ 	  digits[0] = '1';
+ 	  ndigits = 1;
+ 	}
+@@ -990,13 +987,14 @@
+   int d = f->u.real.d;\
+   int w = f->u.real.w;\
+   fnode newf;\
+-  GFC_REAL_ ## x rexp_d, r = 0.5;\
++  GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
+   int low, high, mid;\
+   int ubound, lbound;\
+   char *p, pad = ' ';\
+   int save_scale_factor, nb = 0;\
+   try result;\
+   int nprinted, precision;\
++  volatile GFC_REAL_ ## x temp;\
+ \
+   save_scale_factor = dtp->u.p.scale_factor;\
+ \
+@@ -1015,10 +1013,13 @@
+ 	break;\
+     }\
+ \
+-  rexp_d = calculate_exp_ ## x (-d);\
+-  if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
++  exp_d = calculate_exp_ ## x (d);\
++  r_sc = (1 - r / exp_d);\
++  temp = 0.1 * r_sc;\
++  if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+       || ((m == 0.0) && !(compile_options.allow_std\
+-			  & (GFC_STD_F2003 | GFC_STD_F2008))))\
++			  & (GFC_STD_F2003 | GFC_STD_F2008)))\
++      ||  d == 0)\
+     { \
+       newf.format = FMT_E;\
+       newf.u.real.w = w;\
+@@ -1038,10 +1039,9 @@
+ \
+   while (low <= high)\
+     { \
+-      volatile GFC_REAL_ ## x temp;\
+       mid = (low + high) / 2;\
+ \
+-      temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
++      temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
+ \
+       if (m < temp)\
+         { \
+@@ -1121,14 +1121,36 @@
+ /* EN format is tricky since the number of significant digits depends
+    on the magnitude.  Solve it by first printing a temporary value and
+    figure out the number of significant digits from the printed
+-   exponent.  */
++   exponent.  Values y, 0.95*10.0**e <= y <10.0**e, are rounded to
++   10.0**e even when the final result will not be rounded to 10.0**e.
++   For these values the exponent returned by atoi has to be decremented
++   by one. The values y in the ranges
++       (1000.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*(n+1))  
++        (100.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+2)
++         (10.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+1)
++   are correctly rounded respectively to 1.0...0*10.0*(3*(n+1)),
++   100.0...0*10.0*(3*n), and 10.0...0*10.0*(3*n), where 0...0
++   represents d zeroes, by the lines 279 to 297. */
+ 
+ #define EN_PREC(x,y)\
+ {\
+-    GFC_REAL_ ## x tmp;				\
+-    tmp = * (GFC_REAL_ ## x *)source;				\
++    volatile GFC_REAL_ ## x tmp, one = 1.0;\
++    tmp = * (GFC_REAL_ ## x *)source;\
+     if (isfinite (tmp))						\
+-      nprinted = DTOA(y,0,tmp);					\
++      {\
++	nprinted = DTOA(y,0,tmp);\
++	int e = atoi (&buffer[4]);\
++	if (buffer[1] == '1')\
++	  {\
++	    tmp = (calculate_exp_ ## x (-e)) * tmp;\
++	    tmp = one - (tmp < 0 ? -tmp : tmp);	\
++	    if (tmp > 0)\
++	      e = e - 1;\
++	  }\
++	nbefore = e%3;\
++	if (nbefore < 0)\
++	  nbefore = 3 + nbefore;\
++      }\
+     else\
+       nprinted = -1;\
+ }\
+@@ -1140,6 +1162,7 @@
+   int nprinted;
+   char buffer[10];
+   const size_t size = 10;
++  int nbefore; /* digits before decimal point - 1.  */
+ 
+   switch (len)
+     {
+@@ -1172,16 +1195,6 @@
+   if (nprinted == -1)
+     return -1;
+ 
+-  int e = atoi (&buffer[5]);
+-  int nbefore; /* digits before decimal point - 1.  */
+-  if (e >= 0)
+-    nbefore = e % 3;
+-  else
+-    {
+-      nbefore = (-e) % 3;
+-      if (nbefore != 0)
+-	nbefore = 3 - nbefore;
+-    }
+   int prec = f->u.real.d + nbefore;
+   if (dtp->u.p.current_unit->round_status != ROUND_UNSPECIFIED
+       && dtp->u.p.current_unit->round_status != ROUND_PROCDEFINED)
+diff -Naur gcc-4.8.2.orig/libgo/Makefile.am gcc-4.8.2/libgo/Makefile.am
+--- gcc-4.8.2.orig/libgo/Makefile.am	2013-09-27 21:34:43.000000000 +0000
++++ gcc-4.8.2/libgo/Makefile.am	2014-03-30 20:21:40.760932296 +0000
+@@ -424,6 +424,7 @@
+ 	runtime/go-caller.c \
+ 	runtime/go-callers.c \
+ 	runtime/go-can-convert-interface.c \
++	runtime/go-cdiv.c \
+ 	runtime/go-cgo.c \
+ 	runtime/go-check-interface.c \
+ 	runtime/go-construct-map.c \
+@@ -1254,7 +1255,7 @@
+ 	go/go/build/build.go \
+ 	go/go/build/doc.go \
+ 	go/go/build/read.go \
+-	syslist.go
++	go/go/build/syslist.go
+ go_go_doc_files = \
+ 	go/go/doc/comment.go \
+ 	go/go/doc/doc.go \
+@@ -2712,15 +2713,6 @@
+ 	@$(CHECK)
+ .PHONY: go/build/check
+ 
+-syslist.go: s-syslist; @true
+-s-syslist: Makefile
+-	echo '// Generated automatically by make.' >syslist.go.tmp
+-	echo 'package build' >>syslist.go.tmp
+-	echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
+-	echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
+-	$(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
+-	$(STAMP) $@
+-
+ @go_include@ go/doc.lo.dep
+ go/doc.lo.dep: $(go_go_doc_files)
+ 	$(BUILDDEPS)
+diff -Naur gcc-4.8.2.orig/libgo/Makefile.in gcc-4.8.2/libgo/Makefile.in
+--- gcc-4.8.2.orig/libgo/Makefile.in	2013-09-27 21:34:43.000000000 +0000
++++ gcc-4.8.2/libgo/Makefile.in	2014-03-30 20:21:40.760932296 +0000
+@@ -195,7 +195,7 @@
+ @LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
+ am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
+ 	go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
+-	go-callers.lo go-can-convert-interface.lo go-cgo.lo \
++	go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
+ 	go-check-interface.lo go-construct-map.lo \
+ 	go-convert-interface.lo go-copy.lo go-defer.lo \
+ 	go-deferred-recover.lo go-eface-compare.lo \
+@@ -757,6 +757,7 @@
+ 	runtime/go-caller.c \
+ 	runtime/go-callers.c \
+ 	runtime/go-can-convert-interface.c \
++	runtime/go-cdiv.c \
+ 	runtime/go-cgo.c \
+ 	runtime/go-check-interface.c \
+ 	runtime/go-construct-map.c \
+@@ -1446,7 +1447,7 @@
+ 	go/go/build/build.go \
+ 	go/go/build/doc.go \
+ 	go/go/build/read.go \
+-	syslist.go
++	go/go/build/syslist.go
+ 
+ go_go_doc_files = \
+ 	go/go/doc/comment.go \
+@@ -2368,6 +2369,7 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
+@@ -2554,6 +2556,13 @@
+ @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ @am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-can-convert-interface.lo `test -f 'runtime/go-can-convert-interface.c' || echo '$(srcdir)/'`runtime/go-can-convert-interface.c
+ 
++go-cdiv.lo: runtime/go-cdiv.c
++@am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cdiv.lo -MD -MP -MF $(DEPDIR)/go-cdiv.Tpo -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
++@am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
++
+ go-cgo.lo: runtime/go-cgo.c
+ @am__fastdepCC_TRUE@	$(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cgo.lo -MD -MP -MF $(DEPDIR)/go-cgo.Tpo -c -o go-cgo.lo `test -f 'runtime/go-cgo.c' || echo '$(srcdir)/'`runtime/go-cgo.c
+ @am__fastdepCC_TRUE@	$(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
+@@ -5062,15 +5071,6 @@
+ 	@$(CHECK)
+ .PHONY: go/build/check
+ 
+-syslist.go: s-syslist; @true
+-s-syslist: Makefile
+-	echo '// Generated automatically by make.' >syslist.go.tmp
+-	echo 'package build' >>syslist.go.tmp
+-	echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
+-	echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
+-	$(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
+-	$(STAMP) $@
+-
+ @go_include@ go/doc.lo.dep
+ go/doc.lo.dep: $(go_go_doc_files)
+ 	$(BUILDDEPS)
+diff -Naur gcc-4.8.2.orig/libgo/config.h.in gcc-4.8.2/libgo/config.h.in
+--- gcc-4.8.2.orig/libgo/config.h.in	2013-10-02 17:32:00.000000000 +0000
++++ gcc-4.8.2/libgo/config.h.in	2014-03-30 20:21:40.754265412 +0000
+@@ -39,6 +39,9 @@
+ /* Define to 1 if you have the `dl_iterate_phdr' function. */
+ #undef HAVE_DL_ITERATE_PHDR
+ 
++/* Define to 1 if you have the `dup3' function. */
++#undef HAVE_DUP3
++
+ /* Define to 1 if you have the `epoll_create1' function. */
+ #undef HAVE_EPOLL_CREATE1
+ 
+@@ -66,6 +69,9 @@
+ /* Define if _Unwind_GetIPInfo is available. */
+ #undef HAVE_GETIPINFO
+ 
++/* Define to 1 if you have the `getxattr' function. */
++#undef HAVE_GETXATTR
++
+ /* Define to 1 if you have the `inotify_add_watch' function. */
+ #undef HAVE_INOTIFY_ADD_WATCH
+ 
+@@ -111,6 +117,9 @@
+ /* Define to 1 if you have the <linux/rtnetlink.h> header file. */
+ #undef HAVE_LINUX_RTNETLINK_H
+ 
++/* Define to 1 if you have the `listxattr' function. */
++#undef HAVE_LISTXATTR
++
+ /* Define to 1 if the system has the type `loff_t'. */
+ #undef HAVE_LOFF_T
+ 
+@@ -171,6 +180,9 @@
+ /* Define to 1 if you have the `pipe2' function. */
+ #undef HAVE_PIPE2
+ 
++/* Define to 1 if you have the `removexattr' function. */
++#undef HAVE_REMOVEXATTR
++
+ /* Define to 1 if you have the `renameat' function. */
+ #undef HAVE_RENAMEAT
+ 
+@@ -180,6 +192,9 @@
+ /* Define to 1 if you have the `setenv' function. */
+ #undef HAVE_SETENV
+ 
++/* Define to 1 if you have the `setxattr' function. */
++#undef HAVE_SETXATTR
++
+ /* Define to 1 if you have the `sinl' function. */
+ #undef HAVE_SINL
+ 
+diff -Naur gcc-4.8.2.orig/libgo/configure gcc-4.8.2/libgo/configure
+--- gcc-4.8.2.orig/libgo/configure	2013-10-02 17:32:00.000000000 +0000
++++ gcc-4.8.2/libgo/configure	2014-03-30 20:21:40.757598853 +0000
+@@ -14700,7 +14700,7 @@
+ fi
+ 
+ 
+-for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat
++for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat
+ do :
+   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+diff -Naur gcc-4.8.2.orig/libgo/configure.ac gcc-4.8.2/libgo/configure.ac
+--- gcc-4.8.2.orig/libgo/configure.ac	2013-10-02 17:32:00.000000000 +0000
++++ gcc-4.8.2/libgo/configure.ac	2014-03-30 20:21:40.757598853 +0000
+@@ -503,7 +503,7 @@
+ AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
+ AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
+ 
+-AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat)
++AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat)
+ AC_TYPE_OFF_T
+ AC_CHECK_TYPES([loff_t])
+ 
+diff -Naur gcc-4.8.2.orig/libgo/go/go/build/build.go gcc-4.8.2/libgo/go/go/build/build.go
+--- gcc-4.8.2.orig/libgo/go/go/build/build.go	2013-07-16 06:55:04.000000000 +0000
++++ gcc-4.8.2/libgo/go/go/build/build.go	2014-03-30 20:21:40.757598853 +0000
+@@ -429,7 +429,7 @@
+ 	switch ctxt.Compiler {
+ 	case "gccgo":
+ 		dir, elem := pathpkg.Split(p.ImportPath)
+-		pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
++		pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
+ 	case "gc":
+ 		suffix := ""
+ 		if ctxt.InstallSuffix != "" {
+diff -Naur gcc-4.8.2.orig/libgo/go/go/build/syslist.go gcc-4.8.2/libgo/go/go/build/syslist.go
+--- gcc-4.8.2.orig/libgo/go/go/build/syslist.go	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libgo/go/go/build/syslist.go	2014-03-30 20:21:40.757598853 +0000
+@@ -0,0 +1,8 @@
++// Copyright 2011 The Go Authors.  All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package build
++
++const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
++const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
+diff -Naur gcc-4.8.2.orig/libgo/go/net/fd_unix.go gcc-4.8.2/libgo/go/net/fd_unix.go
+--- gcc-4.8.2.orig/libgo/go/net/fd_unix.go	2013-07-16 06:55:04.000000000 +0000
++++ gcc-4.8.2/libgo/go/net/fd_unix.go	2014-03-30 20:21:40.757598853 +0000
+@@ -9,6 +9,7 @@
+ import (
+ 	"io"
+ 	"os"
++	"runtime"
+ 	"sync"
+ 	"syscall"
+ 	"time"
+@@ -90,6 +91,16 @@
+ 		if err == nil || err == syscall.EISCONN {
+ 			break
+ 		}
++
++		// On Solaris we can see EINVAL if the socket has
++		// already been accepted and closed by the server.
++		// Treat this as a successful connection--writes to
++		// the socket will see EOF.  For details and a test
++		// case in C see http://golang.org/issue/6828.
++		if runtime.GOOS == "solaris" && err == syscall.EINVAL {
++			break
++		}
++
+ 		if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
+ 			return err
+ 		}
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/all_test.go gcc-4.8.2/libgo/go/reflect/all_test.go
+--- gcc-4.8.2.orig/libgo/go/reflect/all_test.go	2013-10-04 18:52:37.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/all_test.go	2014-03-30 20:21:40.757598853 +0000
+@@ -1430,6 +1430,46 @@
+ 	}
+ }
+ 
++type emptyStruct struct{}
++
++type nonEmptyStruct struct {
++	member int
++}
++
++func returnEmpty() emptyStruct {
++	return emptyStruct{}
++}
++
++func takesEmpty(e emptyStruct) {
++}
++
++func returnNonEmpty(i int) nonEmptyStruct {
++	return nonEmptyStruct{member: i}
++}
++
++func takesNonEmpty(n nonEmptyStruct) int {
++	return n.member
++}
++
++func TestCallWithStruct(t *testing.T) {
++	r := ValueOf(returnEmpty).Call([]Value{})
++	if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
++		t.Errorf("returning empty struct returned %s instead", r)
++	}
++	r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
++	if len(r) != 0 {
++		t.Errorf("takesEmpty returned values: %s", r)
++	}
++	r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
++	if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
++		t.Errorf("returnNonEmpty returned %s", r)
++	}
++	r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
++	if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
++		t.Errorf("takesNonEmpty returned %s", r)
++	}
++}
++
+ func TestMakeFunc(t *testing.T) {
+ 	switch runtime.GOARCH {
+ 	case "amd64", "386":
+@@ -1587,9 +1627,13 @@
+ 	}
+ }
+ 
+-/* Not yet implemented for gccgo
+-
+ func TestMethodValue(t *testing.T) {
++	switch runtime.GOARCH {
++	case "amd64", "386":
++	default:
++		t.Skip("reflect method values not implemented for " + runtime.GOARCH)
++	}
++
+ 	p := Point{3, 4}
+ 	var i int64
+ 
+@@ -1658,8 +1702,6 @@
+ 	}
+ }
+ 
+-*/
+-
+ // Reflect version of $GOROOT/test/method5.go
+ 
+ // Concrete types implementing M method.
+@@ -1744,14 +1786,18 @@
+ func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
+ 
+ func TestMethod5(t *testing.T) {
+-	/* Not yet used for gccgo
++	switch runtime.GOARCH {
++	case "amd64", "386":
++	default:
++		t.Skip("reflect method values not implemented for " + runtime.GOARCH)
++	}
++
+ 	CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
+ 		b, x := f(1000, 99)
+ 		if b != 99 || x != 1000+inc {
+ 			t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
+ 		}
+ 	}
+-	*/
+ 
+ 	CheckV := func(name string, i Value, inc int) {
+ 		bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
+@@ -1761,9 +1807,7 @@
+ 			t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
+ 		}
+ 
+-		/* Not yet implemented for gccgo
+ 		CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
+-		*/
+ 	}
+ 
+ 	var TinterType = TypeOf(new(Tinter)).Elem()
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/makefunc.go gcc-4.8.2/libgo/go/reflect/makefunc.go
+--- gcc-4.8.2.orig/libgo/go/reflect/makefunc.go	2013-10-04 18:52:37.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/makefunc.go	2014-03-30 20:21:40.757598853 +0000
+@@ -17,6 +17,11 @@
+ 	code uintptr
+ 	typ  *funcType
+ 	fn   func([]Value) []Value
++
++	// For gccgo we use the same entry point for functions and for
++	// method values.
++	method int
++	rcvr   Value
+ }
+ 
+ // MakeFunc returns a new function of the given Type
+@@ -61,7 +66,7 @@
+ 	dummy := makeFuncStub
+ 	code := **(**uintptr)(unsafe.Pointer(&dummy))
+ 
+-	impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
++	impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
+ 
+ 	return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
+ }
+@@ -85,15 +90,94 @@
+ 		panic("reflect: internal error: invalid use of makePartialFunc")
+ 	}
+ 
++	switch runtime.GOARCH {
++	case "amd64", "386":
++	default:
++		panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
++	}
++
+ 	// Ignoring the flagMethod bit, v describes the receiver, not the method type.
+ 	fl := v.flag & (flagRO | flagAddr | flagIndir)
+ 	fl |= flag(v.typ.Kind()) << flagKindShift
+ 	rcvr := Value{v.typ, v.val, fl}
+ 
++	// v.Type returns the actual type of the method value.
++	ft := v.Type().(*rtype)
++
++	// Indirect Go func value (dummy) to obtain
++	// actual code address. (A Go func value is a pointer
++	// to a C function pointer. http://golang.org/s/go11func.)
++	dummy := makeFuncStub
++	code := **(**uintptr)(unsafe.Pointer(&dummy))
++
+ 	// Cause panic if method is not appropriate.
+ 	// The panic would still happen during the call if we omit this,
+ 	// but we want Interface() and other operations to fail early.
+-	methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
++	t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
++
++	fv := &makeFuncImpl{
++		code:   code,
++		typ:    (*funcType)(unsafe.Pointer(t)),
++		method: int(v.flag) >> flagMethodShift,
++		rcvr:   rcvr,
++	}
++
++	return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
++}
++
++// makeValueMethod takes a method function and returns a function that
++// takes a value receiver and calls the real method with a pointer to
++// it.
++func makeValueMethod(v Value) Value {
++	typ := v.typ
++	if typ.Kind() != Func {
++		panic("reflect: call of makeValueMethod with non-Func type")
++	}
++	if v.flag&flagMethodFn == 0 {
++		panic("reflect: call of makeValueMethod with non-MethodFn")
++	}
+ 
+-	panic("reflect makeMethodValue not implemented")
++	switch runtime.GOARCH {
++	case "amd64", "386":
++	default:
++		panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
++	}
++
++	t := typ.common()
++	ftyp := (*funcType)(unsafe.Pointer(t))
++
++	// Indirect Go func value (dummy) to obtain
++	// actual code address. (A Go func value is a pointer
++	// to a C function pointer. http://golang.org/s/go11func.)
++	dummy := makeFuncStub
++	code := **(**uintptr)(unsafe.Pointer(&dummy))
++
++	impl := &makeFuncImpl{
++		code:   code,
++		typ:    ftyp,
++		method: -2,
++		rcvr:   v,
++	}
++
++	return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
++}
++
++// Call the function represented by a makeFuncImpl.
++func (c *makeFuncImpl) call(in []Value) []Value {
++	if c.method == -1 {
++		return c.fn(in)
++	} else if c.method == -2 {
++		if c.typ.IsVariadic() {
++			return c.rcvr.CallSlice(in)
++		} else {
++			return c.rcvr.Call(in)
++		}
++	} else {
++		m := c.rcvr.Method(c.method)
++		if c.typ.IsVariadic() {
++			return m.CallSlice(in)
++		} else {
++			return m.Call(in)
++		}
++	}
+ }
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/makefunc_386.S gcc-4.8.2/libgo/go/reflect/makefunc_386.S
+--- gcc-4.8.2.orig/libgo/go/reflect/makefunc_386.S	2013-10-07 15:32:18.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/makefunc_386.S	2014-03-30 20:21:40.757598853 +0000
+@@ -25,9 +25,13 @@
+ 	   struct {
+ 	     esp uint32		// 0x0
+ 	     eax uint32		// 0x4
+-	     st0 uint64		// 0x8
++	     st0 float64	// 0x8
++	     sr  bool		// 0x10
++	     sf  bool		// 0x11
+ 	   }
+-	*/
++	   The sr field is set by the function to a non-zero value if
++	   the function takes a struct hidden pointer that must be
++	   popped off the stack.  */
+ 
+ 	pushl	%ebp
+ .LCFI0:
+@@ -45,6 +49,15 @@
+ 	leal	8(%ebp), %eax	/* Set esp field in struct.  */
+ 	movl	%eax, -24(%ebp)
+ 
++	/* For MakeFunc functions that call recover.  */
++	movl	4(%ebp), %eax
++	movl	%eax, (%esp)
++#ifdef __PIC__
++	call	__go_makefunc_can_recover@PLT
++#else
++	call	__go_makefunc_can_recover
++#endif
++
+ #ifdef __PIC__
+ 	call	__go_get_closure@PLT
+ #else
+@@ -62,9 +75,20 @@
+ 	call	reflect.MakeFuncStubGo
+ #endif
+ 
++	/* MakeFunc functions can no longer call recover.  */
++#ifdef __PIC__
++	call __go_makefunc_returning@PLT
++#else
++	call __go_makefunc_returning
++#endif
++
+ 	/* Set return registers.  */
+ 
+ 	movl	-20(%ebp), %eax
++
++	cmpb	$0, -7(%ebp)
++	je	2f
++
+ 	fldl	-16(%ebp)
+ 
+ #ifdef __SSE2__
+@@ -73,12 +97,20 @@
+ 	movsd	-16(%ebp), %xmm0
+ #endif
+ 
++2:
++	movb	-8(%ebp), %dl
++
+ 	addl	$36, %esp
+ 	popl	%ebx
+ .LCFI3:
+ 	popl	%ebp
+ .LCFI4:
++
++	testb	%dl,%dl
++	jne	1f
+ 	ret
++1:
++	ret	$4
+ .LFE1:
+ #ifdef __ELF__
+ 	.size	reflect.makeFuncStub, . - reflect.makeFuncStub
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/makefunc_amd64.S gcc-4.8.2/libgo/go/reflect/makefunc_amd64.S
+--- gcc-4.8.2.orig/libgo/go/reflect/makefunc_amd64.S	2013-10-02 17:32:00.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/makefunc_amd64.S	2014-03-30 20:21:40.757598853 +0000
+@@ -61,6 +61,14 @@
+ 	movdqa	%xmm6, 0xa0(%rsp)
+ 	movdqa	%xmm7, 0xb0(%rsp)
+ 
++	/* For MakeFunc functions that call recover.  */
++	movq	8(%rbp), %rdi
++#ifdef __PIC__
++	call	__go_makefunc_can_recover@PLT
++#else
++	call	__go_makefunc_can_recover
++#endif
++
+ 	# Get function type.
+ #ifdef __PIC__
+ 	call	__go_get_closure@PLT
+@@ -77,6 +85,13 @@
+ 	call	reflect.MakeFuncStubGo
+ #endif
+ 
++	/* MakeFunc functions can no longer call recover.  */
++#ifdef __PIC__
++	call __go_makefunc_returning@PLT
++#else
++	call __go_makefunc_returning
++#endif
++
+ 	# The structure will be updated with any return values.  Load
+ 	# all possible return registers before returning to the caller.
+ 
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/makefuncgo_386.go gcc-4.8.2/libgo/go/reflect/makefuncgo_386.go
+--- gcc-4.8.2.orig/libgo/go/reflect/makefuncgo_386.go	2013-09-27 21:34:43.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/makefuncgo_386.go	2014-03-30 20:21:40.757598853 +0000
+@@ -14,8 +14,10 @@
+ // registers that might hold result values.
+ type i386Regs struct {
+ 	esp uint32
+-	eax uint32 // Value to return in %eax.
+-	st0 uint64 // Value to return in %st(0).
++	eax uint32  // Value to return in %eax.
++	st0 float64 // Value to return in %st(0).
++	sr  bool    // Set to true if hidden struct pointer.
++	sf  bool    // Set to true if returning float
+ }
+ 
+ // MakeFuncStubGo implements the 386 calling convention for MakeFunc.
+@@ -56,10 +58,13 @@
+ 	in := make([]Value, 0, len(ftyp.in))
+ 	ap := uintptr(regs.esp)
+ 
++	regs.sr = false
++	regs.sf = false
+ 	var retPtr unsafe.Pointer
+ 	if retStruct {
+ 		retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
+ 		ap += ptrSize
++		regs.sr = true
+ 	}
+ 
+ 	for _, rt := range ftyp.in {
+@@ -77,7 +82,7 @@
+ 
+ 	// Call the real function.
+ 
+-	out := c.fn(in)
++	out := c.call(in)
+ 
+ 	if len(out) != len(ftyp.out) {
+ 		panic("reflect: wrong return count from function created by MakeFunc")
+@@ -123,13 +128,16 @@
+ 
+ 	v := out[0]
+ 	w := v.iword()
+-	if v.Kind() != Ptr && v.Kind() != UnsafePointer {
+-		w = loadIword(unsafe.Pointer(w), v.typ.size)
+-	}
+ 	switch v.Kind() {
+-	case Float32, Float64:
+-		regs.st0 = uint64(uintptr(w))
+-	default:
++	case Ptr, UnsafePointer:
+ 		regs.eax = uint32(uintptr(w))
++	case Float32:
++		regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
++		regs.sf = true
++	case Float64:
++		regs.st0 = *(*float64)(unsafe.Pointer(w))
++		regs.sf = true
++	default:
++		regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
+ 	}
+ }
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/makefuncgo_amd64.go gcc-4.8.2/libgo/go/reflect/makefuncgo_amd64.go
+--- gcc-4.8.2.orig/libgo/go/reflect/makefuncgo_amd64.go	2013-09-27 22:13:27.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/makefuncgo_amd64.go	2014-03-30 20:21:40.757598853 +0000
+@@ -319,7 +319,7 @@
+ 	// All the real arguments have been found and turned into
+ 	// Value's.  Call the real function.
+ 
+-	out := c.fn(in)
++	out := c.call(in)
+ 
+ 	if len(out) != len(ftyp.out) {
+ 		panic("reflect: wrong return count from function created by MakeFunc")
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/type.go gcc-4.8.2/libgo/go/reflect/type.go
+--- gcc-4.8.2.orig/libgo/go/reflect/type.go	2013-07-16 06:55:04.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/type.go	2014-03-30 20:21:40.757598853 +0000
+@@ -508,7 +508,7 @@
+ 	m.Type = toType(mt)
+ 	x := new(unsafe.Pointer)
+ 	*x = unsafe.Pointer(&p.tfn)
+-	m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
++	m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
+ 	m.Index = i
+ 	return
+ }
+diff -Naur gcc-4.8.2.orig/libgo/go/reflect/value.go gcc-4.8.2/libgo/go/reflect/value.go
+--- gcc-4.8.2.orig/libgo/go/reflect/value.go	2013-10-01 03:12:30.000000000 +0000
++++ gcc-4.8.2/libgo/go/reflect/value.go	2014-03-30 20:21:40.757598853 +0000
+@@ -98,6 +98,7 @@
+ 	flagIndir
+ 	flagAddr
+ 	flagMethod
++	flagMethodFn         // gccgo: first fn parameter is always pointer
+ 	flagKindShift        = iota
+ 	flagKindWidth        = 5 // there are 27 kinds
+ 	flagKindMask    flag = 1<<flagKindWidth - 1
+@@ -433,7 +434,7 @@
+ 	if v.flag&flagMethod != 0 {
+ 		nin++
+ 	}
+-	firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
++	firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
+ 	params := make([]unsafe.Pointer, nin)
+ 	off := 0
+ 	if v.flag&flagMethod != 0 {
+@@ -484,33 +485,6 @@
+ 	return ret
+ }
+ 
+-// gccgo specific test to see if typ is a method.  We can tell by
+-// looking at the string to see if there is a receiver.  We need this
+-// because for gccgo all methods take pointer receivers.
+-func isMethod(t *rtype) bool {
+-	if Kind(t.kind) != Func {
+-		return false
+-	}
+-	s := *t.string
+-	parens := 0
+-	params := 0
+-	sawRet := false
+-	for i, c := range s {
+-		if c == '(' {
+-			if parens == 0 {
+-				params++
+-			}
+-			parens++
+-		} else if c == ')' {
+-			parens--
+-		} else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
+-			params++
+-			sawRet = true
+-		}
+-	}
+-	return params > 2
+-}
+-
+ // methodReceiver returns information about the receiver
+ // described by v. The Value v may or may not have the
+ // flagMethod bit set, so the kind cached in v.flag should
+@@ -917,6 +891,16 @@
+ 		v = makeMethodValue("Interface", v)
+ 	}
+ 
++	if v.flag&flagMethodFn != 0 {
++		if v.typ.Kind() != Func {
++			panic("reflect: MethodFn of non-Func")
++		}
++		ft := (*funcType)(unsafe.Pointer(v.typ))
++		if ft.in[0].Kind() != Ptr {
++			v = makeValueMethod(v)
++		}
++	}
++
+ 	k := v.kind()
+ 	if k == Interface {
+ 		// Special case: return the element inside the interface.
+@@ -1230,8 +1214,7 @@
+ 			// created via reflect have the same underlying code pointer,
+ 			// so their Pointers are equal. The function used here must
+ 			// match the one used in makeMethodValue.
+-			// This is not properly implemented for gccgo.
+-			f := Zero
++			f := makeFuncStub
+ 			return **(**uintptr)(unsafe.Pointer(&f))
+ 		}
+ 		p := v.val
+diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go gcc-4.8.2/libgo/go/syscall/libcall_linux.go
+--- gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go	2013-02-08 19:24:26.000000000 +0000
++++ gcc-4.8.2/libgo/go/syscall/libcall_linux.go	2014-03-30 20:21:40.757598853 +0000
+@@ -190,6 +190,9 @@
+ //sys	Adjtimex(buf *Timex) (state int, err error)
+ //adjtimex(buf *Timex) _C_int
+ 
++//sysnb	Dup3(oldfd int, newfd int, flags int) (err error)
++//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
++
+ //sys	Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
+ //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
+ 
+@@ -268,6 +271,9 @@
+ 	return origlen - len(buf), count, names
+ }
+ 
++//sys	Getxattr(path string, attr string, dest []byte) (sz int, err error)
++//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
++
+ //sys	InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
+ //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
+ 
+@@ -283,6 +289,9 @@
+ //sys	Klogctl(typ int, buf []byte) (n int, err error)
+ //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
+ 
++//sys	Listxattr(path string, dest []byte) (sz int, err error)
++//listxattr(path *byte, list *byte, size Size_t) Ssize_t
++
+ //sys	Mkdirat(dirfd int, path string, mode uint32) (err error)
+ //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
+ 
+@@ -305,6 +314,9 @@
+ //sys	PivotRoot(newroot string, putold string) (err error)
+ //pivot_root(newroot *byte, putold *byte) _C_int
+ 
++//sys	Removexattr(path string, attr string) (err error)
++//removexattr(path *byte, name *byte) _C_int
++
+ //sys	Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
+ //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
+ 
+@@ -338,6 +350,9 @@
+ //sysnb	Setresuid(ruid int, eguid int, suid int) (err error)
+ //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
+ 
++//sys	Setxattr(path string, attr string, data []byte, flags int) (err error)
++//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
++
+ //sys	splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
+ //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
+ func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
+diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go gcc-4.8.2/libgo/go/syscall/libcall_posix.go
+--- gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go	2013-02-08 19:24:26.000000000 +0000
++++ gcc-4.8.2/libgo/go/syscall/libcall_posix.go	2014-03-30 20:21:40.757598853 +0000
+@@ -238,6 +238,9 @@
+ //sysnb	Getppid() (ppid int)
+ //getppid() Pid_t
+ 
++//sys Getpriority(which int, who int) (prio int, err error)
++//getpriority(which _C_int, who _C_int) _C_int
++
+ //sysnb	Getrlimit(resource int, rlim *Rlimit) (err error)
+ //getrlimit(resource _C_int, rlim *Rlimit) _C_int
+ 
+@@ -307,6 +310,9 @@
+ //sysnb	Setpgid(pid int, pgid int) (err error)
+ //setpgid(pid Pid_t, pgid Pid_t) _C_int
+ 
++//sys Setpriority(which int, who int, prio int) (err error)
++//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
++
+ //sysnb	Setreuid(ruid int, euid int) (err error)
+ //setreuid(ruid Uid_t, euid Uid_t) _C_int
+ 
+diff -Naur gcc-4.8.2.orig/libgo/go/syscall/socket.go gcc-4.8.2/libgo/go/syscall/socket.go
+--- gcc-4.8.2.orig/libgo/go/syscall/socket.go	2013-07-24 16:53:32.000000000 +0000
++++ gcc-4.8.2/libgo/go/syscall/socket.go	2014-03-30 20:21:40.757598853 +0000
+@@ -25,7 +25,7 @@
+ 	Pad  [96]int8
+ }
+ 
+-const SizeofSockaddrAny = 0x1c
++const SizeofSockaddrAny = 0x6c
+ 
+ type SockaddrInet4 struct {
+ 	Port int
+diff -Naur gcc-4.8.2.orig/libgo/mksysinfo.sh gcc-4.8.2/libgo/mksysinfo.sh
+--- gcc-4.8.2.orig/libgo/mksysinfo.sh	2013-02-11 19:03:04.000000000 +0000
++++ gcc-4.8.2/libgo/mksysinfo.sh	2014-03-30 20:21:40.760932296 +0000
+@@ -1035,6 +1035,10 @@
+ grep '^const _LOCK_' gen-sysinfo.go |
+     sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+ 
++# The PRIO constants.
++grep '^const _PRIO_' gen-sysinfo.go | \
++  sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
++
+ # The GNU/Linux LINUX_REBOOT flags.
+ grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
+     sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-callers.c gcc-4.8.2/libgo/runtime/go-callers.c
+--- gcc-4.8.2.orig/libgo/runtime/go-callers.c	2013-10-09 00:02:32.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-callers.c	2014-03-30 20:21:40.760932296 +0000
+@@ -11,6 +11,13 @@
+ #include "runtime.h"
+ #include "array.h"
+ 
++/* This is set to non-zero when calling backtrace_full.  This is used
++   to avoid getting hanging on a recursive lock in dl_iterate_phdr on
++   older versions of glibc when a SIGPROF signal arrives while
++   collecting a backtrace.  */
++
++uint32 runtime_in_callers;
++
+ /* Argument passed to callback function.  */
+ 
+ struct callers_data
+@@ -111,8 +118,10 @@
+   data.skip = skip + 1;
+   data.index = 0;
+   data.max = m;
++  runtime_xadd (&runtime_in_callers, 1);
+   backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
+ 		  &data);
++  runtime_xadd (&runtime_in_callers, -1);
+   return data.index;
+ }
+ 
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-cdiv.c gcc-4.8.2/libgo/runtime/go-cdiv.c
+--- gcc-4.8.2.orig/libgo/runtime/go-cdiv.c	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-cdiv.c	2014-03-30 20:21:40.760932296 +0000
+@@ -0,0 +1,46 @@
++/* go-cdiv.c -- complex division routines
++
++   Copyright 2013 The Go Authors. All rights reserved.
++   Use of this source code is governed by a BSD-style
++   license that can be found in the LICENSE file.  */
++
++/* Calls to these functions are generated by the Go frontend for
++   division of complex64 or complex128.  We use these because Go's
++   complex division expects slightly different results from the GCC
++   default.  When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
++   GCC generates NaN+Infi.  NaN+Infi seems wrong seems the rules of
++   C99 Annex G specify that if either side of a complex number is Inf,
++   the the whole number is Inf, but an operation involving NaN ought
++   to result in NaN, not Inf.  */
++
++__complex float
++__go_complex64_div (__complex float a, __complex float b)
++{
++  if (__builtin_expect (b == 0+0i, 0))
++    {
++      if (!__builtin_isinff (__real__ a)
++	  && !__builtin_isinff (__imag__ a)
++	  && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
++	{
++	  /* Pass "1" to nanf to match math/bits.go.  */
++	  return __builtin_nanf("1") + __builtin_nanf("1")*1i;
++	}
++    }
++  return a / b;
++}
++
++__complex double
++__go_complex128_div (__complex double a, __complex double b)
++{
++  if (__builtin_expect (b == 0+0i, 0))
++    {
++      if (!__builtin_isinf (__real__ a)
++	  && !__builtin_isinf (__imag__ a)
++	  && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
++	{
++	  /* Pass "1" to nan to match math/bits.go.  */
++	  return __builtin_nan("1") + __builtin_nan("1")*1i;
++	}
++    }
++  return a / b;
++}
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-defer.c gcc-4.8.2/libgo/runtime/go-defer.c
+--- gcc-4.8.2.orig/libgo/runtime/go-defer.c	2013-07-23 20:26:30.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-defer.c	2014-03-30 20:21:40.760932296 +0000
+@@ -27,6 +27,7 @@
+   n->__pfn = pfn;
+   n->__arg = arg;
+   n->__retaddr = NULL;
++  n->__makefunc_can_recover = 0;
+   g->defer = n;
+ }
+ 
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-defer.h gcc-4.8.2/libgo/runtime/go-defer.h
+--- gcc-4.8.2.orig/libgo/runtime/go-defer.h	2011-09-16 05:47:20.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-defer.h	2014-03-30 20:21:40.760932296 +0000
+@@ -34,4 +34,10 @@
+      set by __go_set_defer_retaddr which is called by the thunks
+      created by defer statements.  */
+   const void *__retaddr;
++
++  /* Set to true if a function created by reflect.MakeFunc is
++     permitted to recover.  The return address of such a function
++     function will be somewhere in libffi, so __retaddr is not
++     useful.  */
++  _Bool __makefunc_can_recover;
+ };
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-int-array-to-string.c gcc-4.8.2/libgo/runtime/go-int-array-to-string.c
+--- gcc-4.8.2.orig/libgo/runtime/go-int-array-to-string.c	2012-11-01 03:02:13.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-int-array-to-string.c	2014-03-30 20:21:40.760932296 +0000
+@@ -30,6 +30,8 @@
+ 
+       if (v < 0 || v > 0x10ffff)
+ 	v = 0xfffd;
++      else if (0xd800 <= v && v <= 0xdfff)
++	v = 0xfffd;
+ 
+       if (v <= 0x7f)
+ 	slen += 1;
+@@ -56,6 +58,8 @@
+ 	 character.  */
+       if (v < 0 || v > 0x10ffff)
+ 	v = 0xfffd;
++      else if (0xd800 <= v && v <= 0xdfff)
++	v = 0xfffd;
+ 
+       if (v <= 0x7f)
+ 	*s++ = v;
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-make-slice.c gcc-4.8.2/libgo/runtime/go-make-slice.c
+--- gcc-4.8.2.orig/libgo/runtime/go-make-slice.c	2012-11-21 07:03:38.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-make-slice.c	2014-03-30 20:21:40.760932296 +0000
+@@ -34,7 +34,10 @@
+   std = (const struct __go_slice_type *) td;
+ 
+   ilen = (intgo) len;
+-  if (ilen < 0 || (uintptr_t) ilen != len)
++  if (ilen < 0
++      || (uintptr_t) ilen != len
++      || (std->__element_type->__size > 0
++	  && len > MaxMem / std->__element_type->__size))
+     runtime_panicstring ("makeslice: len out of range");
+ 
+   icap = (intgo) cap;
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-nosys.c gcc-4.8.2/libgo/runtime/go-nosys.c
+--- gcc-4.8.2.orig/libgo/runtime/go-nosys.c	2013-01-29 20:52:43.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-nosys.c	2014-03-30 20:21:40.760932296 +0000
+@@ -43,6 +43,17 @@
+ }
+ #endif
+ 
++#ifndef HAVE_DUP3
++int
++dup3 (int oldfd __attribute__ ((unused)),
++      int newfd __attribute__ ((unused)),
++      int flags __attribute__ ((unused)))
++{
++  errno = ENOSYS;
++  return -1;
++}
++#endif
++
+ #ifndef HAVE_EPOLL_CREATE1
+ int
+ epoll_create1 (int flags __attribute__ ((unused)))
+@@ -112,6 +123,18 @@
+ }
+ #endif
+ 
++#ifndef HAVE_GETXATTR
++ssize_t
++getxattr (const char *path __attribute__ ((unused)),
++	  const char *name __attribute__ ((unused)),
++	  void *value __attribute__ ((unused)),
++	  size_t size __attribute__ ((unused)))
++{
++  errno = ENOSYS;
++  return -1;
++}
++#endif
++
+ #ifndef HAVE_INOTIFY_ADD_WATCH
+ int
+ inotify_add_watch (int fd __attribute__ ((unused)),
+@@ -151,6 +174,17 @@
+ }
+ #endif
+ 
++#ifndef HAVE_LISTXATTR
++ssize_t
++listxattr (const char *path __attribute__ ((unused)),
++	   char *list __attribute__ ((unused)),
++	   size_t size __attribute__ ((unused)))
++{
++  errno = ENOSYS;
++  return -1;
++}
++#endif
++
+ #ifndef HAVE_MKDIRAT
+ int
+ mkdirat (int dirfd __attribute__ ((unused)),
+@@ -196,6 +230,16 @@
+ }
+ #endif
+ 
++#ifndef HAVE_REMOVEXATTR
++int
++removexattr (const char *path __attribute__ ((unused)),
++	     const char *name __attribute__ ((unused)))
++{
++  errno = ENOSYS;
++  return -1;
++}
++#endif
++
+ #ifndef HAVE_RENAMEAT
+ int
+ renameat (int olddirfd __attribute__ ((unused)),
+@@ -205,6 +249,19 @@
+ {
+   errno = ENOSYS;
+   return -1;
++}
++#endif
++
++#ifndef HAVE_SETXATTR
++int
++setxattr (const char *path __attribute__ ((unused)),
++	  const char *name __attribute__ ((unused)),
++	  const void *value __attribute__ ((unused)),
++	  size_t size __attribute__ ((unused)),
++	  int flags __attribute__ ((unused)))
++{
++  errno = ENOSYS;
++  return -1;
+ }
+ #endif
+ 
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-recover.c gcc-4.8.2/libgo/runtime/go-recover.c
+--- gcc-4.8.2.orig/libgo/runtime/go-recover.c	2012-02-11 00:15:54.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-recover.c	2014-03-30 20:21:40.760932296 +0000
+@@ -16,12 +16,14 @@
+    __go_can_recover--this is, the thunk.  */
+ 
+ _Bool
+-__go_can_recover (const void* retaddr)
++__go_can_recover (const void *retaddr)
+ {
+   G *g;
+   struct __go_defer_stack *d;
+   const char* ret;
+   const char* dret;
++  Location loc;
++  const byte *name;
+ 
+   g = runtime_g ();
+ 
+@@ -52,7 +54,78 @@
+ #endif
+ 
+   dret = (const char *) d->__retaddr;
+-  return ret <= dret && ret + 16 >= dret;
++  if (ret <= dret && ret + 16 >= dret)
++    return 1;
++
++  /* If the function calling recover was created by reflect.MakeFunc,
++     then RETADDR will be somewhere in libffi.  Our caller is
++     permitted to recover if it was called from libffi.  */
++  if (!d->__makefunc_can_recover)
++    return 0;
++
++  if (runtime_callers (2, &loc, 1) < 1)
++    return 0;
++
++  /* If we have no function name, then we weren't called by Go code.
++     Guess that we were called by libffi.  */
++  if (loc.function.len == 0)
++    return 1;
++
++  if (loc.function.len < 4)
++    return 0;
++  name = loc.function.str;
++  if (*name == '_')
++    {
++      if (loc.function.len < 5)
++	return 0;
++      ++name;
++    }
++
++  if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
++    return 1;
++
++  /* We may also be called by reflect.makeFuncImpl.call, for a
++     function created by reflect.MakeFunc.  */
++  if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
++    return 1;
++
++  return 0;
++}
++
++/* This function is called when code is about to enter a function
++   created by reflect.MakeFunc.  It is called by the function stub
++   used by MakeFunc.  If the stub is permitted to call recover, then a
++   real MakeFunc function is permitted to call recover.  */
++
++void
++__go_makefunc_can_recover (const void *retaddr)
++{
++  struct __go_defer_stack *d;
++
++  d = runtime_g ()->defer;
++  if (d != NULL
++      && !d->__makefunc_can_recover
++      && __go_can_recover (retaddr))
++    d->__makefunc_can_recover = 1;
++}
++
++/* This function is called when code is about to exit a function
++   created by reflect.MakeFunc.  It is called by the function stub
++   used by MakeFunc.  It clears the __makefunc_can_recover field.
++   It's OK to always clear this field, because __go_can_recover will
++   only be called by a stub created for a function that calls recover.
++   That stub will not call a function created by reflect.MakeFunc, so
++   by the time we get here any caller higher up on the call stack no
++   longer needs the information.  */
++
++void
++__go_makefunc_returning (void)
++{
++  struct __go_defer_stack *d;
++
++  d = runtime_g ()->defer;
++  if (d != NULL)
++    d->__makefunc_can_recover = 0;
+ }
+ 
+ /* This is only called when it is valid for the caller to recover the
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-reflect-call.c gcc-4.8.2/libgo/runtime/go-reflect-call.c
+--- gcc-4.8.2.orig/libgo/runtime/go-reflect-call.c	2013-09-03 21:58:47.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-reflect-call.c	2014-03-30 20:21:40.760932296 +0000
+@@ -98,9 +98,12 @@
+   const struct __go_struct_field *fields;
+   int i;
+ 
++  field_count = descriptor->__fields.__count;
++  if (field_count == 0) {
++    return &ffi_type_void;
++  }
+   ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
+   ret->type = FFI_TYPE_STRUCT;
+-  field_count = descriptor->__fields.__count;
+   fields = (const struct __go_struct_field *) descriptor->__fields.__values;
+   ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
+ 					    * sizeof (ffi_type *));
+diff -Naur gcc-4.8.2.orig/libgo/runtime/go-signal.c gcc-4.8.2/libgo/runtime/go-signal.c
+--- gcc-4.8.2.orig/libgo/runtime/go-signal.c	2013-07-23 04:42:18.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/go-signal.c	2014-03-30 20:21:40.760932296 +0000
+@@ -234,7 +234,7 @@
+ 	  G *g;
+ 
+ 	  g = runtime_g ();
+-	  runtime_traceback (g);
++	  runtime_traceback ();
+ 	  runtime_tracebackothers (g);
+ 
+ 	  /* The gc library calls runtime_dumpregs here, and provides
+@@ -399,6 +399,9 @@
+ {
+   G *gp;
+   M *mp;
++#ifdef USING_SPLIT_STACK
++  void *stack_context[10];
++#endif
+ 
+   /* We are now running on the stack registered via sigaltstack.
+      (Actually there is a small span of time between runtime_siginit
+@@ -409,7 +412,7 @@
+   if (gp != NULL)
+     {
+ #ifdef USING_SPLIT_STACK
+-      __splitstack_getcontext (&gp->stack_context[0]);
++      __splitstack_getcontext (&stack_context[0]);
+ #endif
+     }
+ 
+@@ -432,7 +435,7 @@
+   if (gp != NULL)
+     {
+ #ifdef USING_SPLIT_STACK
+-      __splitstack_setcontext (&gp->stack_context[0]);
++      __splitstack_setcontext (&stack_context[0]);
+ #endif
+     }
+ }
+diff -Naur gcc-4.8.2.orig/libgo/runtime/malloc.goc gcc-4.8.2/libgo/runtime/malloc.goc
+--- gcc-4.8.2.orig/libgo/runtime/malloc.goc	2013-07-24 22:30:39.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/malloc.goc	2014-03-30 20:21:40.760932296 +0000
+@@ -541,8 +541,7 @@
+ 
+ 		// (Manually inlined copy of runtime_MHeap_Lookup)
+ 		p = (uintptr)v>>PageShift;
+-		if(sizeof(void*) == 8)
+-			p -= (uintptr)runtime_mheap->arena_start >> PageShift;
++		p -= (uintptr)runtime_mheap->arena_start >> PageShift;
+ 		s = runtime_mheap->map[p];
+ 
+ 		if(s->sizeclass == 0) {
+diff -Naur gcc-4.8.2.orig/libgo/runtime/mgc0.c gcc-4.8.2/libgo/runtime/mgc0.c
+--- gcc-4.8.2.orig/libgo/runtime/mgc0.c	2013-09-03 21:58:47.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/mgc0.c	2014-03-30 20:21:40.760932296 +0000
+@@ -174,7 +174,7 @@
+ 	Obj	*roots;
+ 	uint32	nroot;
+ 	uint32	rootcap;
+-} work;
++} work __attribute__((aligned(8)));
+ 
+ enum {
+ 	GC_DEFAULT_PTR = GC_NUM_INSTR,
+@@ -239,8 +239,7 @@
+ 	// (Manually inlined copy of MHeap_LookupMaybe.)
+ 	k = (uintptr)obj>>PageShift;
+ 	x = k;
+-	if(sizeof(void*) == 8)
+-		x -= (uintptr)runtime_mheap->arena_start>>PageShift;
++	x -= (uintptr)runtime_mheap->arena_start>>PageShift;
+ 	s = runtime_mheap->map[x];
+ 	if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
+ 		return false;
+@@ -418,8 +417,7 @@
+ 			// (Manually inlined copy of MHeap_LookupMaybe.)
+ 			k = (uintptr)obj>>PageShift;
+ 			x = k;
+-			if(sizeof(void*) == 8)
+-				x -= (uintptr)arena_start>>PageShift;
++			x -= (uintptr)arena_start>>PageShift;
+ 			s = runtime_mheap->map[x];
+ 			if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
+ 				continue;
+@@ -466,8 +464,7 @@
+ 			// Ask span about size class.
+ 			// (Manually inlined copy of MHeap_Lookup.)
+ 			x = (uintptr)obj >> PageShift;
+-			if(sizeof(void*) == 8)
+-				x -= (uintptr)arena_start>>PageShift;
++			x -= (uintptr)arena_start>>PageShift;
+ 			s = runtime_mheap->map[x];
+ 
+ 			PREFETCH(obj);
+@@ -585,8 +582,7 @@
+ 	if(t == nil)
+ 		return;
+ 	x = (uintptr)obj >> PageShift;
+-	if(sizeof(void*) == 8)
+-		x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
++	x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
+ 	s = runtime_mheap->map[x];
+ 	objstart = (byte*)((uintptr)s->start<<PageShift);
+ 	if(s->sizeclass != 0) {
+diff -Naur gcc-4.8.2.orig/libgo/runtime/mheap.c gcc-4.8.2/libgo/runtime/mheap.c
+--- gcc-4.8.2.orig/libgo/runtime/mheap.c	2013-07-16 06:55:04.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/mheap.c	2014-03-30 20:21:40.764265739 +0000
+@@ -150,8 +150,7 @@
+ 		runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
+ 		s->npages = npage;
+ 		p = t->start;
+-		if(sizeof(void*) == 8)
+-			p -= ((uintptr)h->arena_start>>PageShift);
++		p -= ((uintptr)h->arena_start>>PageShift);
+ 		if(p > 0)
+ 			h->map[p-1] = s;
+ 		h->map[p] = t;
+@@ -169,8 +168,7 @@
+ 	s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
+ 	s->types.compression = MTypes_Empty;
+ 	p = s->start;
+-	if(sizeof(void*) == 8)
+-		p -= ((uintptr)h->arena_start>>PageShift);
++	p -= ((uintptr)h->arena_start>>PageShift);
+ 	for(n=0; n<npage; n++)
+ 		h->map[p+n] = s;
+ 	return s;
+@@ -241,8 +239,7 @@
+ 	mstats.mspan_sys = h->spanalloc.sys;
+ 	runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
+ 	p = s->start;
+-	if(sizeof(void*) == 8)
+-		p -= ((uintptr)h->arena_start>>PageShift);
++	p -= ((uintptr)h->arena_start>>PageShift);
+ 	h->map[p] = s;
+ 	h->map[p + s->npages - 1] = s;
+ 	s->state = MSpanInUse;
+@@ -259,8 +256,7 @@
+ 	uintptr p;
+ 	
+ 	p = (uintptr)v;
+-	if(sizeof(void*) == 8)
+-		p -= (uintptr)h->arena_start;
++	p -= (uintptr)h->arena_start;
+ 	return h->map[p >> PageShift];
+ }
+ 
+@@ -281,8 +277,7 @@
+ 		return nil;
+ 	p = (uintptr)v>>PageShift;
+ 	q = p;
+-	if(sizeof(void*) == 8)
+-		q -= (uintptr)h->arena_start >> PageShift;
++	q -= (uintptr)h->arena_start >> PageShift;
+ 	s = h->map[q];
+ 	if(s == nil || p < s->start || p - s->start >= s->npages)
+ 		return nil;
+@@ -332,8 +327,7 @@
+ 
+ 	// Coalesce with earlier, later spans.
+ 	p = s->start;
+-	if(sizeof(void*) == 8)
+-		p -= (uintptr)h->arena_start >> PageShift;
++	p -= (uintptr)h->arena_start >> PageShift;
+ 	if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
+ 		tp = (uintptr*)(t->start<<PageShift);
+ 		*tp |= *sp;	// propagate "needs zeroing" mark
+diff -Naur gcc-4.8.2.orig/libgo/runtime/proc.c gcc-4.8.2/libgo/runtime/proc.c
+--- gcc-4.8.2.orig/libgo/runtime/proc.c	2013-09-03 21:58:47.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/proc.c	2014-03-30 20:21:40.764265739 +0000
+@@ -1716,10 +1716,30 @@
+ // entersyscall is going to return immediately after.
+ 
+ void runtime_entersyscall(void) __attribute__ ((no_split_stack));
++static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
+ 
+ void
+ runtime_entersyscall()
+ {
++	// Save the registers in the g structure so that any pointers
++	// held in registers will be seen by the garbage collector.
++	getcontext(&g->gcregs);
++
++	// Do the work in a separate function, so that this function
++	// doesn't save any registers on its own stack.  If this
++	// function does save any registers, we might store the wrong
++	// value in the call to getcontext.
++	//
++	// FIXME: This assumes that we do not need to save any
++	// callee-saved registers to access the TLS variable g.  We
++	// don't want to put the ucontext_t on the stack because it is
++	// large and we can not split the stack here.
++	doentersyscall();
++}
++
++static void
++doentersyscall()
++{
+ 	if(m->profilehz > 0)
+ 		runtime_setprof(false);
+ 
+@@ -1736,10 +1756,6 @@
+ 	}
+ #endif
+ 
+-	// Save the registers in the g structure so that any pointers
+-	// held in registers will be seen by the garbage collector.
+-	getcontext(&g->gcregs);
+-
+ 	g->status = Gsyscall;
+ 
+ 	if(runtime_atomicload(&runtime_sched.sysmonwait)) {  // TODO: fast atomic
+@@ -2239,6 +2255,14 @@
+ 	if(prof.fn == nil || prof.hz == 0)
+ 		return;
+ 
++	if(runtime_atomicload(&runtime_in_callers) > 0) {
++		// If SIGPROF arrived while already fetching runtime
++		// callers we can have trouble on older systems
++		// because the unwind library calls dl_iterate_phdr
++		// which was not recursive in the past.
++		return;
++	}
++
+ 	runtime_lock(&prof);
+ 	if(prof.fn == nil) {
+ 		runtime_unlock(&prof);
+diff -Naur gcc-4.8.2.orig/libgo/runtime/runtime.h gcc-4.8.2/libgo/runtime/runtime.h
+--- gcc-4.8.2.orig/libgo/runtime/runtime.h	2013-09-03 21:58:47.000000000 +0000
++++ gcc-4.8.2/libgo/runtime/runtime.h	2014-03-30 20:21:40.764265739 +0000
+@@ -440,7 +440,7 @@
+ };
+ void	runtime_hashinit(void);
+ 
+-void	runtime_traceback();
++void	runtime_traceback(void);
+ void	runtime_tracebackothers(G*);
+ 
+ /*
+@@ -756,6 +756,7 @@
+ extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
+ extern byte* runtime_progname();
+ extern void runtime_main(void*);
++extern uint32 runtime_in_callers;
+ 
+ int32 getproccount(void);
+ 
+diff -Naur gcc-4.8.2.orig/libgomp/testsuite/libgomp.fortran/crayptr2.f90 gcc-4.8.2/libgomp/testsuite/libgomp.fortran/crayptr2.f90
+--- gcc-4.8.2.orig/libgomp/testsuite/libgomp.fortran/crayptr2.f90	2009-12-22 22:16:02.000000000 +0000
++++ gcc-4.8.2/libgomp/testsuite/libgomp.fortran/crayptr2.f90	2014-03-30 20:21:40.764265739 +0000
+@@ -12,7 +12,7 @@
+   b = 2
+   c = 3
+   l = .false.
+-!$omp parallel num_threads (3) reduction (.or.:l)
++!$omp parallel num_threads (3) reduction (.or.:l) private (d)
+   if (omp_get_thread_num () .eq. 0) then
+     ip = loc (a)
+   elseif (omp_get_thread_num () .eq. 1) then
+diff -Naur gcc-4.8.2.orig/libitm/beginend.cc gcc-4.8.2/libitm/beginend.cc
+--- gcc-4.8.2.orig/libitm/beginend.cc	2013-02-03 17:46:11.000000000 +0000
++++ gcc-4.8.2/libitm/beginend.cc	2014-03-30 20:21:40.764265739 +0000
+@@ -197,6 +197,8 @@
+ 	      // We are executing a transaction now.
+ 	      // Monitor the writer flag in the serial-mode lock, and abort
+ 	      // if there is an active or waiting serial-mode transaction.
++	      // Note that this can also happen due to an enclosing
++	      // serial-mode transaction; we handle this case below.
+ 	      if (unlikely(serial_lock.is_write_locked()))
+ 		htm_abort();
+ 	      else
+@@ -219,6 +221,14 @@
+ 	          tx = new gtm_thread();
+ 	          set_gtm_thr(tx);
+ 	        }
++	      // Check whether there is an enclosing serial-mode transaction;
++	      // if so, we just continue as a nested transaction and don't
++	      // try to use the HTM fastpath.  This case can happen when an
++	      // outermost relaxed transaction calls unsafe code that starts
++	      // a transaction.
++	      if (tx->nesting > 0)
++		break;
++	      // Another thread is running a serial-mode transaction.  Wait.
+ 	      serial_lock.read_lock(tx);
+ 	      serial_lock.read_unlock(tx);
+ 	      // TODO We should probably reset the retry count t here, unless
+diff -Naur gcc-4.8.2.orig/libitm/config/linux/futex_bits.h gcc-4.8.2/libitm/config/linux/futex_bits.h
+--- gcc-4.8.2.orig/libitm/config/linux/futex_bits.h	2013-02-03 17:46:11.000000000 +0000
++++ gcc-4.8.2/libitm/config/linux/futex_bits.h	2014-03-30 20:21:40.764265739 +0000
+@@ -31,9 +31,13 @@
+ 
+ #include <unistd.h>
+ #include <sys/syscall.h>
++#include <errno.h>
+ 
+ static inline long
+ sys_futex0 (std::atomic<int> *addr, long op, long val)
+ {
+-  return syscall (SYS_futex, (int*) addr, op, val, 0);
++  long res = syscall (SYS_futex, (int*) addr, op, val, 0);
++  if (__builtin_expect (res == -1, 0))
++    return -errno;
++  return res;
+ }
+diff -Naur gcc-4.8.2.orig/libitm/config/x86/target.h gcc-4.8.2/libitm/config/x86/target.h
+--- gcc-4.8.2.orig/libitm/config/x86/target.h	2013-02-03 17:46:11.000000000 +0000
++++ gcc-4.8.2/libitm/config/x86/target.h	2014-03-30 20:21:40.764265739 +0000
+@@ -125,6 +125,13 @@
+ {
+   return begin_ret & _XABORT_RETRY;
+ }
++
++/* Returns true iff a hardware transaction is currently being executed.  */
++static inline bool
++htm_transaction_active ()
++{
++  return _xtest() != 0;
++}
+ #endif
+ 
+ 
+diff -Naur gcc-4.8.2.orig/libitm/libitm.info gcc-4.8.2/libitm/libitm.info
+--- gcc-4.8.2.orig/libitm/libitm.info	2013-10-16 08:29:00.000000000 +0000
++++ gcc-4.8.2/libitm/libitm.info	1970-01-01 00:00:00.000000000 +0000
+@@ -1,1293 +0,0 @@
+-This is libitm.info, produced by makeinfo version 5.1 from libitm.texi.
+-
+-Copyright (C) 2011-2013 Free Software Foundation, Inc.
+-
+-   Permission is granted to copy, distribute and/or modify this document
+-under the terms of the GNU Free Documentation License, Version 1.2 or
+-any later version published by the Free Software Foundation; with no
+-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+-copy of the license is included in the section entitled "GNU Free
+-Documentation License".
+-INFO-DIR-SECTION GNU Libraries
+-START-INFO-DIR-ENTRY
+-* libitm: (libitm).                    GNU Transactional Memory Library
+-END-INFO-DIR-ENTRY
+-
+-   This manual documents the GNU Transactional Memory Library.
+-
+-   Copyright (C) 2011-2013 Free Software Foundation, Inc.
+-
+-   Permission is granted to copy, distribute and/or modify this document
+-under the terms of the GNU Free Documentation License, Version 1.2 or
+-any later version published by the Free Software Foundation; with no
+-Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
+-copy of the license is included in the section entitled "GNU Free
+-Documentation License".
+-
+-
+-File: libitm.info,  Node: Top,  Next: Enabling libitm,  Up: (dir)
+-
+-Introduction
+-************
+-
+-This manual documents the usage and internals of libitm, the GNU
+-Transactional Memory Library.  It provides transaction support for
+-accesses to a process' memory, enabling easy-to-use synchronization of
+-accesses to shared memory by several threads.
+-
+-* Menu:
+-
+-* Enabling libitm::            How to enable libitm for your applications.
+-* C/C++ Language Constructs for TM::
+-                               Notes on the language-level interface supported
+-                               by gcc.
+-* The libitm ABI::             Notes on the external ABI provided by libitm.
+-* Internals::                  Notes on libitm's internal synchronization.
+-* GNU Free Documentation License::
+-                               How you can copy and share this manual.
+-* Index::                      Index of this documentation.
+-
+-
+-File: libitm.info,  Node: Enabling libitm,  Next: C/C++ Language Constructs for TM,  Prev: Top,  Up: Top
+-
+-1 Enabling libitm
+-*****************
+-
+-To activate support for TM in C/C++, the compile-time flag '-fgnu-tm'
+-must be specified.  This enables TM language-level constructs such as
+-transaction statements (e.g., '__transaction_atomic', *note C/C++
+-Language Constructs for TM:: for details).
+-
+-
+-File: libitm.info,  Node: C/C++ Language Constructs for TM,  Next: The libitm ABI,  Prev: Enabling libitm,  Up: Top
+-
+-2 C/C++ Language Constructs for TM
+-**********************************
+-
+-Transactions are supported in C++ and C in the form of transaction
+-statements, transaction expressions, and function transactions.  In the
+-following example, both 'a' and 'b' will be read and the difference will
+-be written to 'c', all atomically and isolated from other transactions:
+-
+-     __transaction_atomic { c = a - b; }
+-
+-   Therefore, another thread can use the following code to concurrently
+-update 'b' without ever causing 'c' to hold a negative value (and
+-without having to use other synchronization constructs such as locks or
+-C++11 atomics):
+-
+-     __transaction_atomic { if (a > b) b++; }
+-
+-   GCC follows the Draft Specification of Transactional Language
+-Constructs for C++ (v1.1)
+-(https://sites.google.com/site/tmforcplusplus/) in its implementation of
+-transactions.
+-
+-   The precise semantics of transactions are defined in terms of the
+-C++11/C11 memory model (see the specification).  Roughly, transactions
+-provide synchronization guarantees that are similar to what would be
+-guaranteed when using a single global lock as a guard for all
+-transactions.  Note that like other synchronization constructs in C/C++,
+-transactions rely on a data-race-free program (e.g., a nontransactional
+-write that is concurrent with a transactional read to the same memory
+-location is a data race).
+-
+-
+-File: libitm.info,  Node: The libitm ABI,  Next: Internals,  Prev: C/C++ Language Constructs for TM,  Up: Top
+-
+-3 The libitm ABI
+-****************
+-
+-The ABI provided by libitm is basically equal to the Linux variant of
+-Intel's current TM ABI specification document (Revision 1.1, May 6 2009)
+-but with the differences listed in this chapter.  It would be good if
+-these changes would eventually be merged into a future version of this
+-specification.  To ease look-up, the following subsections mirror the
+-structure of this specification.
+-
+-3.1 [No changes] Objectives
+-===========================
+-
+-3.2 [No changes] Non-objectives
+-===============================
+-
+-3.3 Library design principles
+-=============================
+-
+-3.3.1 [No changes] Calling conventions
+---------------------------------------
+-
+-3.3.2 [No changes] TM library algorithms
+-----------------------------------------
+-
+-3.3.3 [No changes] Optimized load and store routines
+-----------------------------------------------------
+-
+-3.3.4 [No changes] Aligned load and store routines
+---------------------------------------------------
+-
+-3.3.5 Data logging functions
+-----------------------------
+-
+-The memory locations accessed with transactional loads and stores and
+-the memory locations whose values are logged must not overlap.  This
+-required separation only extends to the scope of the execution of one
+-transaction including all the executions of all nested transactions.
+-
+-   The compiler must be consistent (within the scope of a single
+-transaction) about which memory locations are shared and which are not
+-shared with other threads (i.e., data must be accessed either
+-transactionally or nontransactionally).  Otherwise, non-write-through TM
+-algorithms would not work.
+-
+-   For memory locations on the stack, this requirement extends to only
+-the lifetime of the stack frame that the memory location belongs to (or
+-the lifetime of the transaction, whichever is shorter).  Thus, memory
+-that is reused for several stack frames could be target of both data
+-logging and transactional accesses; however, this is harmless because
+-these stack frames' lifetimes will end before the transaction finishes.
+-
+-3.3.6 [No changes] Scatter/gather calls
+----------------------------------------
+-
+-3.3.7 [No changes] Serial and irrevocable mode
+-----------------------------------------------
+-
+-3.3.8 [No changes] Transaction descriptor
+------------------------------------------
+-
+-3.3.9 Store allocation
+-----------------------
+-
+-There is no 'getTransaction' function.
+-
+-3.3.10 [No changes] Naming conventions
+---------------------------------------
+-
+-3.3.11 Function pointer encryption
+-----------------------------------
+-
+-Currently, this is not implemented.
+-
+-3.4 Types and macros list
+-=========================
+-
+-'_ITM_codeProperties' has changed, *note Starting a transaction:
+-txn-code-properties.  '_ITM_srcLocation' is not used.
+-
+-3.5 Function list
+-=================
+-
+-3.5.1 Initialization and finalization functions
+------------------------------------------------
+-
+-These functions are not part of the ABI.
+-
+-3.5.2 [No changes] Version checking
+------------------------------------
+-
+-3.5.3 [No changes] Error reporting
+-----------------------------------
+-
+-3.5.4 [No changes] inTransaction call
+--------------------------------------
+-
+-3.5.5 State manipulation functions
+-----------------------------------
+-
+-There is no 'getTransaction' function.  Transaction identifiers for
+-nested transactions will be ordered but not necessarily sequential
+-(i.e., for a nested transaction's identifier IN and its enclosing
+-transaction's identifier IE, it is guaranteed that IN >= IE).
+-
+-3.5.6 [No changes] Source locations
+------------------------------------
+-
+-3.5.7 Starting a transaction
+-----------------------------
+-
+-3.5.7.1 Transaction code properties
+-...................................
+-
+-The bit 'hasNoXMMUpdate' is instead called 'hasNoVectorUpdate'.  Iff it
+-is set, vector register save/restore is not necessary for any target
+-machine.
+-
+-   The 'hasNoFloatUpdate' bit ('0x0010') is new.  Iff it is set,
+-floating point register save/restore is not necessary for any target
+-machine.
+-
+-   'undoLogCode' is not supported and a fatal runtime error will be
+-raised if this bit is set.  It is not properly defined in the ABI why
+-barriers other than undo logging are not present; Are they not necessary
+-(e.g., a transaction operating purely on thread-local data) or have they
+-been omitted by the compiler because it thinks that some kind of global
+-synchronization (e.g., serial mode) might perform better?  The
+-specification suggests that the latter might be the case, but the former
+-seems to be more useful.
+-
+-   The 'readOnly' bit ('0x4000') is new.  *TODO* Lexical or dynamic
+-scope?
+-
+-   'hasNoRetry' is not supported.  If this bit is not set, but
+-'hasNoAbort' is set, the library can assume that transaction rollback
+-will not be requested.
+-
+-   It would be useful if the absence of externally-triggered rollbacks
+-would be reported for the dynamic scope as well, not just for the
+-lexical scope ('hasNoAbort').  Without this, a library cannot exploit
+-this together with flat nesting.
+-
+-   'exceptionBlock' is not supported because exception blocks are not
+-used.
+-
+-3.5.7.2 [No changes] Windows exception state
+-............................................
+-
+-3.5.7.3 [No changes] Other machine state
+-........................................
+-
+-3.5.7.4 [No changes] Results from beginTransaction
+-..................................................
+-
+-3.5.8 Aborting a transaction
+-----------------------------
+-
+-'_ITM_rollbackTransaction' is not supported.  '_ITM_abortTransaction' is
+-supported but the abort reasons 'exceptionBlockAbort', 'TMConflict', and
+-'userRetry' are not supported.  There are no exception blocks in
+-general, so the related cases also do not have to be considered.  To
+-encode '__transaction_cancel [[outer]]', compilers must set the new
+-'outerAbort' bit ('0x10') additionally to the 'userAbort' bit in the
+-abort reason.
+-
+-3.5.9 Committing a transaction
+-------------------------------
+-
+-The exception handling (EH) scheme is different.  The Intel ABI requires
+-the '_ITM_tryCommitTransaction' function that will return even when the
+-commit failed and will have to be matched with calls to either
+-'_ITM_abortTransaction' or '_ITM_commitTransaction'.  In contrast, gcc
+-relies on transactional wrappers for the functions of the Exception
+-Handling ABI and on one additional commit function (shown below).  This
+-allows the TM to keep track of EH internally and thus it does not have
+-to embed the cleanup of EH state into the existing EH code in the
+-program.  '_ITM_tryCommitTransaction' is not supported.
+-'_ITM_commitTransactionToId' is also not supported because the
+-propagation of thrown exceptions will not bypass commits of nested
+-transactions.
+-
+-     void _ITM_commitTransactionEH(void *exc_ptr) ITM_REGPARM;
+-     void *_ITM_cxa_allocate_exception (size_t);
+-     void _ITM_cxa_throw (void *obj, void *tinfo, void *dest);
+-     void *_ITM_cxa_begin_catch (void *exc_ptr);
+-     void _ITM_cxa_end_catch (void);
+-
+-   '_ITM_commitTransactionEH' must be called to commit a transaction if
+-an exception could be in flight at this position in the code.  'exc_ptr'
+-is the current exception or zero if there is no current exception.  The
+-'_ITM_cxa...' functions are transactional wrappers for the respective
+-'__cxa...' functions and must be called instead of these in
+-transactional code.
+-
+-   To support this EH scheme, libstdc++ needs to provide one additional
+-function ('_cxa_tm_cleanup'), which is used by the TM to clean up the
+-exception handling state while rolling back a transaction:
+-
+-     void __cxa_tm_cleanup (void *unthrown_obj, void *cleanup_exc,
+-                            unsigned int caught_count);
+-
+-   'unthrown_obj' is non-null if the program called
+-'__cxa_allocate_exception' for this exception but did not yet called
+-'__cxa_throw' for it.  'cleanup_exc' is non-null if the program is
+-currently processing a cleanup along an exception path but has not
+-caught this exception yet.  'caught_count' is the nesting depth of
+-'__cxa_begin_catch' within the transaction (which can be counted by the
+-TM using '_ITM_cxa_begin_catch' and '_ITM_cxa_end_catch');
+-'__cxa_tm_cleanup' then performs rollback by essentially performing
+-'__cxa_end_catch' that many times.
+-
+-3.5.10 Exception handling support
+----------------------------------
+-
+-Currently, there is no support for functionality like
+-'__transaction_cancel throw' as described in the C++ TM specification.
+-Supporting this should be possible with the EH scheme explained
+-previously because via the transactional wrappers for the EH ABI, the TM
+-is able to observe and intercept EH.
+-
+-3.5.11 [No changes] Transition to serial-irrevocable mode
+----------------------------------------------------------
+-
+-3.5.12 [No changes] Data transfer functions
+--------------------------------------------
+-
+-3.5.13 [No changes] Transactional memory copies
+------------------------------------------------
+-
+-3.5.14 Transactional versions of memmove
+-----------------------------------------
+-
+-If either the source or destination memory region is to be accessed
+-nontransactionally, then source and destination regions must not be
+-overlapping.  The respective '_ITM_memmove' functions are still
+-available but a fatal runtime error will be raised if such regions do
+-overlap.  To support this functionality, the ABI would have to specify
+-how the intersection of the regions has to be accessed (i.e.,
+-transactionally or nontransactionally).
+-
+-3.5.15 [No changes] Transactional versions of memset
+-----------------------------------------------------
+-
+-3.5.16 [No changes] Logging functions
+--------------------------------------
+-
+-3.5.17 User-registered commit and undo actions
+-----------------------------------------------
+-
+-Commit actions will get executed in the same order in which the
+-respective calls to '_ITM_addUserCommitAction' happened.  Only
+-'_ITM_noTransactionId' is allowed as value for the
+-'resumingTransactionId' argument.  Commit actions get executed after
+-privatization safety has been ensured.
+-
+-   Undo actions will get executed in reverse order compared to the order
+-in which the respective calls to '_ITM_addUserUndoAction' happened.  The
+-ordering of undo actions w.r.t.  the roll-back of other actions (e.g.,
+-data transfers or memory allocations) is undefined.
+-
+-   '_ITM_getThreadnum' is not supported currently because its only
+-purpose is to provide a thread ID that matches some assumed performance
+-tuning output, but this output is not part of the ABI nor further
+-defined by it.
+-
+-   '_ITM_dropReferences' is not supported currently because its
+-semantics and the intention behind it is not entirely clear.  The
+-specification suggests that this function is necessary because of
+-certain orderings of data transfer undos and the releasing of memory
+-regions (i.e., privatization).  However, this ordering is never defined,
+-nor is the ordering of dropping references w.r.t.  other events.
+-
+-3.5.18 [New] Transactional indirect calls
+------------------------------------------
+-
+-Indirect calls (i.e., calls through a function pointer) within
+-transactions should execute the transactional clone of the original
+-function (i.e., a clone of the original that has been fully instrumented
+-to use the TM runtime), if such a clone is available.  The runtime
+-provides two functions to register/deregister clone tables:
+-
+-     struct clone_entry
+-     {
+-       void *orig, *clone;
+-     };
+-
+-     void _ITM_registerTMCloneTable (clone_entry *table, size_t entries);
+-     void _ITM_deregisterTMCloneTable (clone_entry *table);
+-
+-   Registered tables must be writable by the TM runtime, and must be
+-live throughout the life-time of the TM runtime.
+-
+-   *TODO* The intention was always to drop the registration functions
+-entirely, and create a new ELF Phdr describing the linker-sorted table.
+-Much like what currently happens for 'PT_GNU_EH_FRAME'.  This work kept
+-getting bogged down in how to represent the N different code generation
+-variants.  We clearly needed at least two--SW and HW transactional
+-clones--but there was always a suggestion of more variants for different
+-TM assumptions/invariants.
+-
+-   The compiler can then use two TM runtime functions to perform
+-indirect calls in transactions:
+-     void *_ITM_getTMCloneOrIrrevocable (void *function) ITM_REGPARM;
+-     void *_ITM_getTMCloneSafe (void *function) ITM_REGPARM;
+-
+-   If there is a registered clone for supplied function, both will
+-return a pointer to the clone.  If not, the first runtime function will
+-attempt to switch to serial-irrevocable mode and return the original
+-pointer, whereas the second will raise a fatal runtime error.
+-
+-3.5.19 [New] Transactional dynamic memory management
+-----------------------------------------------------
+-
+-     void *_ITM_malloc (size_t)
+-            __attribute__((__malloc__)) ITM_PURE;
+-     void *_ITM_calloc (size_t, size_t)
+-            __attribute__((__malloc__)) ITM_PURE;
+-     void _ITM_free (void *) ITM_PURE;
+-
+-   These functions are essentially transactional wrappers for 'malloc',
+-'calloc', and 'free'.  Within transactions, the compiler should replace
+-calls to the original functions with calls to the wrapper functions.
+-
+-3.6 [No changes] Future Enhancements to the ABI
+-===============================================
+-
+-3.7 Sample code
+-===============
+-
+-The code examples might not be correct w.r.t.  the current version of
+-the ABI, especially everything related to exception handling.
+-
+-3.8 [New] Memory model
+-======================
+-
+-The ABI should define a memory model and the ordering that is guaranteed
+-for data transfers and commit/undo actions, or at least refer to another
+-memory model that needs to be preserved.  Without that, the compiler
+-cannot ensure the memory model specified on the level of the programming
+-language (e.g., by the C++ TM specification).
+-
+-   For example, if a transactional load is ordered before another
+-load/store, then the TM runtime must also ensure this ordering when
+-accessing shared state.  If not, this might break the kind of
+-publication safety used in the C++ TM specification.  Likewise, the TM
+-runtime must ensure privatization safety.
+-
+-
+-File: libitm.info,  Node: Internals,  Next: GNU Free Documentation License,  Prev: The libitm ABI,  Up: Top
+-
+-4 Internals
+-***********
+-
+-4.1 TM methods and method groups
+-================================
+-
+-libitm supports several ways of synchronizing transactions with each
+-other.  These TM methods (or TM algorithms) are implemented in the form
+-of subclasses of 'abi_dispatch', which provide methods for transactional
+-loads and stores as well as callbacks for rollback and commit.  All
+-methods that are compatible with each other (i.e., that let concurrently
+-running transactions still synchronize correctly even if different
+-methods are used) belong to the same TM method group.  Pointers to TM
+-methods can be obtained using the factory methods prefixed with
+-'dispatch_' in 'libitm_i.h'.  There are two special methods,
+-'dispatch_serial' and 'dispatch_serialirr', that are compatible with all
+-methods because they run transactions completely in serial mode.
+-
+-4.1.1 TM method life cycle
+---------------------------
+-
+-The state of TM methods does not change after construction, but they do
+-alter the state of transactions that use this method.  However, because
+-per-transaction data gets used by several methods, 'gtm_thread' is
+-responsible for setting an initial state that is useful for all methods.
+-After that, methods are responsible for resetting/clearing this state on
+-each rollback or commit (of outermost transactions), so that the
+-transaction executed next is not affected by the previous transaction.
+-
+-   There is also global state associated with each method group, which
+-is initialized and shut down ('method_group::init()' and 'fini()') when
+-switching between method groups (see 'retry.cc').
+-
+-4.1.2 Selecting the default method
+-----------------------------------
+-
+-The default method that libitm uses for freshly started transactions
+-(but not necessarily for restarted transactions) can be set via an
+-environment variable ('ITM_DEFAULT_METHOD'), whose value should be equal
+-to the name of one of the factory methods returning abi_dispatch
+-subclasses but without the "dispatch_" prefix (e.g., "serialirr" instead
+-of 'GTM::dispatch_serialirr()').
+-
+-   Note that this environment variable is only a hint for libitm and
+-might not be supported in the future.
+-
+-4.2 Nesting: flat vs. closed
+-============================
+-
+-We support two different kinds of nesting of transactions.  In the case
+-of _flat nesting_, the nesting structure is flattened and all nested
+-transactions are subsumed by the enclosing transaction.  In contrast,
+-with _closed nesting_, nested transactions that have not yet committed
+-can be rolled back separately from the enclosing transactions; when they
+-commit, they are subsumed by the enclosing transaction, and their
+-effects will be finally committed when the outermost transaction
+-commits.  _Open nesting_ (where nested transactions can commit
+-independently of the enclosing transactions) are not supported.
+-
+-   Flat nesting is the default nesting mode, but closed nesting is
+-supported and used when transactions contain user-controlled aborts
+-('__transaction_cancel' statements).  We assume that user-controlled
+-aborts are rare in typical code and used mostly in exceptional
+-situations.  Thus, it makes more sense to use flat nesting by default to
+-avoid the performance overhead of the additional checkpoints required
+-for closed nesting.  User-controlled aborts will correctly abort the
+-innermost enclosing transaction, whereas the whole (i.e., outermost)
+-transaction will be restarted otherwise (e.g., when a transaction
+-encounters data conflicts during optimistic execution).
+-
+-4.3 Locking conventions
+-=======================
+-
+-This section documents the locking scheme and rules for all uses of
+-locking in libitm.  We have to support serial(-irrevocable) mode, which
+-is implemented using a global lock as explained next (called the _serial
+-lock_).  To simplify the overall design, we use the same lock as
+-catch-all locking mechanism for other infrequent tasks such as
+-(de)registering clone tables or threads.  Besides the serial lock, there
+-are _per-method-group locks_ that are managed by specific method groups
+-(i.e., groups of similar TM concurrency control algorithms), and
+-lock-like constructs for quiescence-based operations such as ensuring
+-privatization safety.
+-
+-   Thus, the actions that participate in the libitm-internal locking are
+-either _active transactions_ that do not run in serial mode, _serial
+-transactions_ (which (are about to) run in serial mode), and management
+-tasks that do not execute within a transaction but have acquired the
+-serial mode like a serial transaction would do (e.g., to be able to
+-register threads with libitm).  Transactions become active as soon as
+-they have successfully used the serial lock to announce this globally
+-(*note Serial lock implementation: serial-lock-impl.).  Likewise,
+-transactions become serial transactions as soon as they have acquired
+-the exclusive rights provided by the serial lock (i.e., serial mode,
+-which also means that there are no other concurrent active or serial
+-transactions).  Note that active transactions can become serial
+-transactions when they enter serial mode during the runtime of the
+-transaction.
+-
+-4.3.1 State-to-lock mapping
+----------------------------
+-
+-Application data is protected by the serial lock if there is a serial
+-transaction and no concurrently running active transaction (i.e.,
+-non-serial).  Otherwise, application data is protected by the currently
+-selected method group, which might use per-method-group locks or other
+-mechanisms.  Also note that application data that is about to be
+-privatized might not be allowed to be accessed by nontransactional code
+-until privatization safety has been ensured; the details of this are
+-handled by the current method group.
+-
+-   libitm-internal state is either protected by the serial lock or
+-accessed through custom concurrent code.  The latter applies to the
+-public/shared part of a transaction object and most typical
+-method-group-specific state.
+-
+-   The former category (protected by the serial lock) includes:
+-   * The list of active threads that have used transactions.
+-   * The tables that map functions to their transactional clones.
+-   * The current selection of which method group to use.
+-   * Some method-group-specific data, or invariants of this data.  For
+-     example, resetting a method group to its initial state is handled
+-     by switching to the same method group, so the serial lock protects
+-     such resetting as well.
+-   In general, such state is immutable whenever there exists an active
+-(non-serial) transaction.  If there is no active transaction, a serial
+-transaction (or a thread that is not currently executing a transaction
+-but has acquired the serial lock) is allowed to modify this state (but
+-must of course be careful to not surprise the current method group's
+-implementation with such modifications).
+-
+-4.3.2 Lock acquisition order
+-----------------------------
+-
+-To prevent deadlocks, locks acquisition must happen in a globally
+-agreed-upon order.  Note that this applies to other forms of blocking
+-too, but does not necessarily apply to lock acquisitions that do not
+-block (e.g., trylock() calls that do not get retried forever).  Note
+-that serial transactions are never return back to active transactions
+-until the transaction has committed.  Likewise, active transactions stay
+-active until they have committed.  Per-method-group locks are typically
+-also not released before commit.
+-
+-   Lock acquisition / blocking rules:
+-
+-   * Transactions must become active or serial before they are allowed
+-     to use method-group-specific locks or blocking (i.e., the serial
+-     lock must be acquired before those other locks, either in serial or
+-     nonserial mode).
+-
+-   * Any number of threads that do not currently run active transactions
+-     can block while trying to get the serial lock in exclusive mode.
+-     Note that active transactions must not block when trying to upgrade
+-     to serial mode unless there is no other transaction that is trying
+-     that (the latter is ensured by the serial lock implementation.
+-
+-   * Method groups must prevent deadlocks on their locks.  In
+-     particular, they must also be prepared for another active
+-     transaction that has acquired method-group-specific locks but is
+-     blocked during an attempt to upgrade to being a serial transaction.
+-     See below for details.
+-
+-   * Serial transactions can acquire method-group-specific locks because
+-     there will be no other active nor serial transaction.
+-
+-   There is no single rule for per-method-group blocking because this
+-depends on when a TM method might acquire locks.  If no active
+-transaction can upgrade to being a serial transaction after it has
+-acquired per-method-group locks (e.g., when those locks are only
+-acquired during an attempt to commit), then the TM method does not need
+-to consider a potential deadlock due to serial mode.
+-
+-   If there can be upgrades to serial mode after the acquisition of
+-per-method-group locks, then TM methods need to avoid those deadlocks:
+-   * When upgrading to a serial transaction, after acquiring exclusive
+-     rights to the serial lock but before waiting for concurrent active
+-     transactions to finish (*note Serial lock implementation:
+-     serial-lock-impl. for details), we have to wake up all active
+-     transactions waiting on the upgrader's per-method-group locks.
+-   * Active transactions blocking on per-method-group locks need to
+-     check the serial lock and abort if there is a pending serial
+-     transaction.
+-   * Lost wake-ups have to be prevented (e.g., by changing a bit in each
+-     per-method-group lock before doing the wake-up, and only blocking
+-     on this lock using a futex if this bit is not group).
+-
+-   *TODO*: Can reuse serial lock for gl-*?  And if we can, does it make
+-sense to introduce further complexity in the serial lock?  For gl-*, we
+-can really only avoid an abort if we do -wb and -vbv.
+-
+-4.3.3 Serial lock implementation
+---------------------------------
+-
+-The serial lock implementation is optimized towards assuming that serial
+-transactions are infrequent and not the common case.  However, the
+-performance of entering serial mode can matter because when only few
+-transactions are run concurrently or if there are few threads, then it
+-can be efficient to run transactions serially.
+-
+-   The serial lock is similar to a multi-reader-single-writer lock in
+-that there can be several active transactions but only one serial
+-transaction.  However, we do want to avoid contention (in the lock
+-implementation) between active transactions, so we split up the reader
+-side of the lock into per-transaction flags that are true iff the
+-transaction is active.  The exclusive writer side remains a shared
+-single flag, which is acquired using a CAS, for example.  On the
+-fast-path, the serial lock then works similar to Dekker's algorithm but
+-with several reader flags that a serial transaction would have to check.
+-A serial transaction thus requires a list of all threads with
+-potentially active transactions; we can use the serial lock itself to
+-protect this list (i.e., only threads that have acquired the serial lock
+-can modify this list).
+-
+-   We want starvation-freedom for the serial lock to allow for using it
+-to ensure progress for potentially starved transactions (*note Progress
+-Guarantees: progress-guarantees. for details).  However, this is
+-currently not enforced by the implementation of the serial lock.
+-
+-   Here is pseudo-code for the read/write fast paths of acquiring the
+-serial lock (read-to-write upgrade is similar to write_lock:
+-     // read_lock:
+-     tx->shared_state |= active;
+-     __sync_synchronize(); // or STLD membar, or C++0x seq-cst fence
+-     while (!serial_lock.exclusive)
+-       if (spinning_for_too_long) goto slowpath;
+-
+-     // write_lock:
+-     if (CAS(&serial_lock.exclusive, 0, this) != 0)
+-       goto slowpath; // writer-writer contention
+-     // need a membar here, but CAS already has full membar semantics
+-     bool need_blocking = false;
+-     for (t: all txns)
+-       {
+-         for (;t->shared_state & active;)
+-           if (spinning_for_too_long) { need_blocking = true; break; }
+-       }
+-     if (need_blocking) goto slowpath;
+-
+-   Releasing a lock in this spin-lock version then just consists of
+-resetting 'tx->shared_state' to inactive or clearing
+-'serial_lock.exclusive'.
+-
+-   However, we can't rely on a pure spinlock because we need to get the
+-OS involved at some time (e.g., when there are more threads than CPUs to
+-run on).  Therefore, the real implementation falls back to a blocking
+-slow path, either based on pthread mutexes or Linux futexes.
+-
+-4.3.4 Reentrancy
+-----------------
+-
+-libitm has to consider the following cases of reentrancy:
+-
+-   * Transaction calls unsafe code that starts a new transaction: The
+-     outer transaction will become a serial transaction before executing
+-     unsafe code.  Therefore, nesting within serial transactions must
+-     work, even if the nested transaction is called from within
+-     uninstrumented code.
+-
+-   * Transaction calls either a transactional wrapper or safe code,
+-     which in turn starts a new transaction: It is not yet defined in
+-     the specification whether this is allowed.  Thus, it is undefined
+-     whether libitm supports this.
+-
+-   * Code that starts new transactions might be called from within any
+-     part of libitm: This kind of reentrancy would likely be rather
+-     complex and can probably be avoided.  Therefore, it is not
+-     supported.
+-
+-4.3.5 Privatization safety
+---------------------------
+-
+-Privatization safety is ensured by libitm using a quiescence-based
+-approach.  Basically, a privatizing transaction waits until all
+-concurrent active transactions will either have finished (are not active
+-anymore) or operate on a sufficiently recent snapshot to not access the
+-privatized data anymore.  This happens after the privatizing transaction
+-has stopped being an active transaction, so waiting for quiescence does
+-not contribute to deadlocks.
+-
+-   In method groups that need to ensure publication safety explicitly,
+-active transactions maintain a flag or timestamp in the public/shared
+-part of the transaction descriptor.  Before blocking, privatizers need
+-to let the other transactions know that they should wake up the
+-privatizer.
+-
+-   *TODO* Ho to implement the waiters?  Should those flags be
+-per-transaction or at a central place?  We want to avoid one wake/wait
+-call per active transactions, so we might want to use either a tree or
+-combining to reduce the syscall overhead, or rather spin for a long
+-amount of time instead of doing blocking.  Also, it would be good if
+-only the last transaction that the privatizer waits for would do the
+-wake-up.
+-
+-4.3.6 Progress guarantees
+--------------------------
+-
+-Transactions that do not make progress when using the current TM method
+-will eventually try to execute in serial mode.  Thus, the serial lock's
+-progress guarantees determine the progress guarantees of the whole TM.
+-Obviously, we at least need deadlock-freedom for the serial lock, but it
+-would also be good to provide starvation-freedom (informally, all
+-threads will finish executing a transaction eventually iff they get
+-enough cycles).
+-
+-   However, the scheduling of transactions (e.g., thread scheduling by
+-the OS) also affects the handling of progress guarantees by the TM.
+-First, the TM can only guarantee deadlock-freedom if threads do not get
+-stopped.  Likewise, low-priority threads can starve if they do not get
+-scheduled when other high-priority threads get those cycles instead.
+-
+-   If all threads get scheduled eventually, correct lock implementations
+-will provide deadlock-freedom, but might not provide starvation-freedom.
+-We can either enforce the latter in the TM's lock implementation, or
+-assume that the scheduling is sufficiently random to yield a
+-probabilistic guarantee that no thread will starve (because eventually,
+-a transaction will encounter a scheduling that will allow it to run).
+-This can indeed work well in practice but is not necessarily guaranteed
+-to work (e.g., simple spin locks can be pretty efficient).
+-
+-   Because enforcing stronger progress guarantees in the TM has a higher
+-runtime overhead, we focus on deadlock-freedom right now and assume that
+-the threads will get scheduled eventually by the OS (but don't consider
+-threads with different priorities).  We should support
+-starvation-freedom for serial transactions in the future.  Everything
+-beyond that is highly related to proper contention management across all
+-of the TM (including with TM method to choose), and is future work.
+-
+-   *TODO* Handling thread priorities: We want to avoid priority
+-inversion but it's unclear how often that actually matters in practice.
+-Workloads that have threads with different priorities will likely also
+-require lower latency or higher throughput for high-priority threads.
+-Therefore, it probably makes not that much sense (except for eventual
+-progress guarantees) to use priority inheritance until the TM has
+-priority-aware contention management.
+-
+-
+-File: libitm.info,  Node: GNU Free Documentation License,  Next: Index,  Prev: Internals,  Up: Top
+-
+-GNU Free Documentation License
+-******************************
+-
+-                     Version 1.3, 3 November 2008
+-
+-     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+-     <http://fsf.org/>
+-
+-     Everyone is permitted to copy and distribute verbatim copies
+-     of this license document, but changing it is not allowed.
+-
+-  0. PREAMBLE
+-
+-     The purpose of this License is to make a manual, textbook, or other
+-     functional and useful document "free" in the sense of freedom: to
+-     assure everyone the effective freedom to copy and redistribute it,
+-     with or without modifying it, either commercially or
+-     noncommercially.  Secondarily, this License preserves for the
+-     author and publisher a way to get credit for their work, while not
+-     being considered responsible for modifications made by others.
+-
+-     This License is a kind of "copyleft", which means that derivative
+-     works of the document must themselves be free in the same sense.
+-     It complements the GNU General Public License, which is a copyleft
+-     license designed for free software.
+-
+-     We have designed this License in order to use it for manuals for
+-     free software, because free software needs free documentation: a
+-     free program should come with manuals providing the same freedoms
+-     that the software does.  But this License is not limited to
+-     software manuals; it can be used for any textual work, regardless
+-     of subject matter or whether it is published as a printed book.  We
+-     recommend this License principally for works whose purpose is
+-     instruction or reference.
+-
+-  1. APPLICABILITY AND DEFINITIONS
+-
+-     This License applies to any manual or other work, in any medium,
+-     that contains a notice placed by the copyright holder saying it can
+-     be distributed under the terms of this License.  Such a notice
+-     grants a world-wide, royalty-free license, unlimited in duration,
+-     to use that work under the conditions stated herein.  The
+-     "Document", below, refers to any such manual or work.  Any member
+-     of the public is a licensee, and is addressed as "you".  You accept
+-     the license if you copy, modify or distribute the work in a way
+-     requiring permission under copyright law.
+-
+-     A "Modified Version" of the Document means any work containing the
+-     Document or a portion of it, either copied verbatim, or with
+-     modifications and/or translated into another language.
+-
+-     A "Secondary Section" is a named appendix or a front-matter section
+-     of the Document that deals exclusively with the relationship of the
+-     publishers or authors of the Document to the Document's overall
+-     subject (or to related matters) and contains nothing that could
+-     fall directly within that overall subject.  (Thus, if the Document
+-     is in part a textbook of mathematics, a Secondary Section may not
+-     explain any mathematics.)  The relationship could be a matter of
+-     historical connection with the subject or with related matters, or
+-     of legal, commercial, philosophical, ethical or political position
+-     regarding them.
+-
+-     The "Invariant Sections" are certain Secondary Sections whose
+-     titles are designated, as being those of Invariant Sections, in the
+-     notice that says that the Document is released under this License.
+-     If a section does not fit the above definition of Secondary then it
+-     is not allowed to be designated as Invariant.  The Document may
+-     contain zero Invariant Sections.  If the Document does not identify
+-     any Invariant Sections then there are none.
+-
+-     The "Cover Texts" are certain short passages of text that are
+-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+-     that says that the Document is released under this License.  A
+-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+-     be at most 25 words.
+-
+-     A "Transparent" copy of the Document means a machine-readable copy,
+-     represented in a format whose specification is available to the
+-     general public, that is suitable for revising the document
+-     straightforwardly with generic text editors or (for images composed
+-     of pixels) generic paint programs or (for drawings) some widely
+-     available drawing editor, and that is suitable for input to text
+-     formatters or for automatic translation to a variety of formats
+-     suitable for input to text formatters.  A copy made in an otherwise
+-     Transparent file format whose markup, or absence of markup, has
+-     been arranged to thwart or discourage subsequent modification by
+-     readers is not Transparent.  An image format is not Transparent if
+-     used for any substantial amount of text.  A copy that is not
+-     "Transparent" is called "Opaque".
+-
+-     Examples of suitable formats for Transparent copies include plain
+-     ASCII without markup, Texinfo input format, LaTeX input format,
+-     SGML or XML using a publicly available DTD, and standard-conforming
+-     simple HTML, PostScript or PDF designed for human modification.
+-     Examples of transparent image formats include PNG, XCF and JPG.
+-     Opaque formats include proprietary formats that can be read and
+-     edited only by proprietary word processors, SGML or XML for which
+-     the DTD and/or processing tools are not generally available, and
+-     the machine-generated HTML, PostScript or PDF produced by some word
+-     processors for output purposes only.
+-
+-     The "Title Page" means, for a printed book, the title page itself,
+-     plus such following pages as are needed to hold, legibly, the
+-     material this License requires to appear in the title page.  For
+-     works in formats which do not have any title page as such, "Title
+-     Page" means the text near the most prominent appearance of the
+-     work's title, preceding the beginning of the body of the text.
+-
+-     The "publisher" means any person or entity that distributes copies
+-     of the Document to the public.
+-
+-     A section "Entitled XYZ" means a named subunit of the Document
+-     whose title either is precisely XYZ or contains XYZ in parentheses
+-     following text that translates XYZ in another language.  (Here XYZ
+-     stands for a specific section name mentioned below, such as
+-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+-     To "Preserve the Title" of such a section when you modify the
+-     Document means that it remains a section "Entitled XYZ" according
+-     to this definition.
+-
+-     The Document may include Warranty Disclaimers next to the notice
+-     which states that this License applies to the Document.  These
+-     Warranty Disclaimers are considered to be included by reference in
+-     this License, but only as regards disclaiming warranties: any other
+-     implication that these Warranty Disclaimers may have is void and
+-     has no effect on the meaning of this License.
+-
+-  2. VERBATIM COPYING
+-
+-     You may copy and distribute the Document in any medium, either
+-     commercially or noncommercially, provided that this License, the
+-     copyright notices, and the license notice saying this License
+-     applies to the Document are reproduced in all copies, and that you
+-     add no other conditions whatsoever to those of this License.  You
+-     may not use technical measures to obstruct or control the reading
+-     or further copying of the copies you make or distribute.  However,
+-     you may accept compensation in exchange for copies.  If you
+-     distribute a large enough number of copies you must also follow the
+-     conditions in section 3.
+-
+-     You may also lend copies, under the same conditions stated above,
+-     and you may publicly display copies.
+-
+-  3. COPYING IN QUANTITY
+-
+-     If you publish printed copies (or copies in media that commonly
+-     have printed covers) of the Document, numbering more than 100, and
+-     the Document's license notice requires Cover Texts, you must
+-     enclose the copies in covers that carry, clearly and legibly, all
+-     these Cover Texts: Front-Cover Texts on the front cover, and
+-     Back-Cover Texts on the back cover.  Both covers must also clearly
+-     and legibly identify you as the publisher of these copies.  The
+-     front cover must present the full title with all words of the title
+-     equally prominent and visible.  You may add other material on the
+-     covers in addition.  Copying with changes limited to the covers, as
+-     long as they preserve the title of the Document and satisfy these
+-     conditions, can be treated as verbatim copying in other respects.
+-
+-     If the required texts for either cover are too voluminous to fit
+-     legibly, you should put the first ones listed (as many as fit
+-     reasonably) on the actual cover, and continue the rest onto
+-     adjacent pages.
+-
+-     If you publish or distribute Opaque copies of the Document
+-     numbering more than 100, you must either include a machine-readable
+-     Transparent copy along with each Opaque copy, or state in or with
+-     each Opaque copy a computer-network location from which the general
+-     network-using public has access to download using public-standard
+-     network protocols a complete Transparent copy of the Document, free
+-     of added material.  If you use the latter option, you must take
+-     reasonably prudent steps, when you begin distribution of Opaque
+-     copies in quantity, to ensure that this Transparent copy will
+-     remain thus accessible at the stated location until at least one
+-     year after the last time you distribute an Opaque copy (directly or
+-     through your agents or retailers) of that edition to the public.
+-
+-     It is requested, but not required, that you contact the authors of
+-     the Document well before redistributing any large number of copies,
+-     to give them a chance to provide you with an updated version of the
+-     Document.
+-
+-  4. MODIFICATIONS
+-
+-     You may copy and distribute a Modified Version of the Document
+-     under the conditions of sections 2 and 3 above, provided that you
+-     release the Modified Version under precisely this License, with the
+-     Modified Version filling the role of the Document, thus licensing
+-     distribution and modification of the Modified Version to whoever
+-     possesses a copy of it.  In addition, you must do these things in
+-     the Modified Version:
+-
+-       A. Use in the Title Page (and on the covers, if any) a title
+-          distinct from that of the Document, and from those of previous
+-          versions (which should, if there were any, be listed in the
+-          History section of the Document).  You may use the same title
+-          as a previous version if the original publisher of that
+-          version gives permission.
+-
+-       B. List on the Title Page, as authors, one or more persons or
+-          entities responsible for authorship of the modifications in
+-          the Modified Version, together with at least five of the
+-          principal authors of the Document (all of its principal
+-          authors, if it has fewer than five), unless they release you
+-          from this requirement.
+-
+-       C. State on the Title page the name of the publisher of the
+-          Modified Version, as the publisher.
+-
+-       D. Preserve all the copyright notices of the Document.
+-
+-       E. Add an appropriate copyright notice for your modifications
+-          adjacent to the other copyright notices.
+-
+-       F. Include, immediately after the copyright notices, a license
+-          notice giving the public permission to use the Modified
+-          Version under the terms of this License, in the form shown in
+-          the Addendum below.
+-
+-       G. Preserve in that license notice the full lists of Invariant
+-          Sections and required Cover Texts given in the Document's
+-          license notice.
+-
+-       H. Include an unaltered copy of this License.
+-
+-       I. Preserve the section Entitled "History", Preserve its Title,
+-          and add to it an item stating at least the title, year, new
+-          authors, and publisher of the Modified Version as given on the
+-          Title Page.  If there is no section Entitled "History" in the
+-          Document, create one stating the title, year, authors, and
+-          publisher of the Document as given on its Title Page, then add
+-          an item describing the Modified Version as stated in the
+-          previous sentence.
+-
+-       J. Preserve the network location, if any, given in the Document
+-          for public access to a Transparent copy of the Document, and
+-          likewise the network locations given in the Document for
+-          previous versions it was based on.  These may be placed in the
+-          "History" section.  You may omit a network location for a work
+-          that was published at least four years before the Document
+-          itself, or if the original publisher of the version it refers
+-          to gives permission.
+-
+-       K. For any section Entitled "Acknowledgements" or "Dedications",
+-          Preserve the Title of the section, and preserve in the section
+-          all the substance and tone of each of the contributor
+-          acknowledgements and/or dedications given therein.
+-
+-       L. Preserve all the Invariant Sections of the Document, unaltered
+-          in their text and in their titles.  Section numbers or the
+-          equivalent are not considered part of the section titles.
+-
+-       M. Delete any section Entitled "Endorsements".  Such a section
+-          may not be included in the Modified Version.
+-
+-       N. Do not retitle any existing section to be Entitled
+-          "Endorsements" or to conflict in title with any Invariant
+-          Section.
+-
+-       O. Preserve any Warranty Disclaimers.
+-
+-     If the Modified Version includes new front-matter sections or
+-     appendices that qualify as Secondary Sections and contain no
+-     material copied from the Document, you may at your option designate
+-     some or all of these sections as invariant.  To do this, add their
+-     titles to the list of Invariant Sections in the Modified Version's
+-     license notice.  These titles must be distinct from any other
+-     section titles.
+-
+-     You may add a section Entitled "Endorsements", provided it contains
+-     nothing but endorsements of your Modified Version by various
+-     parties--for example, statements of peer review or that the text
+-     has been approved by an organization as the authoritative
+-     definition of a standard.
+-
+-     You may add a passage of up to five words as a Front-Cover Text,
+-     and a passage of up to 25 words as a Back-Cover Text, to the end of
+-     the list of Cover Texts in the Modified Version.  Only one passage
+-     of Front-Cover Text and one of Back-Cover Text may be added by (or
+-     through arrangements made by) any one entity.  If the Document
+-     already includes a cover text for the same cover, previously added
+-     by you or by arrangement made by the same entity you are acting on
+-     behalf of, you may not add another; but you may replace the old
+-     one, on explicit permission from the previous publisher that added
+-     the old one.
+-
+-     The author(s) and publisher(s) of the Document do not by this
+-     License give permission to use their names for publicity for or to
+-     assert or imply endorsement of any Modified Version.
+-
+-  5. COMBINING DOCUMENTS
+-
+-     You may combine the Document with other documents released under
+-     this License, under the terms defined in section 4 above for
+-     modified versions, provided that you include in the combination all
+-     of the Invariant Sections of all of the original documents,
+-     unmodified, and list them all as Invariant Sections of your
+-     combined work in its license notice, and that you preserve all
+-     their Warranty Disclaimers.
+-
+-     The combined work need only contain one copy of this License, and
+-     multiple identical Invariant Sections may be replaced with a single
+-     copy.  If there are multiple Invariant Sections with the same name
+-     but different contents, make the title of each such section unique
+-     by adding at the end of it, in parentheses, the name of the
+-     original author or publisher of that section if known, or else a
+-     unique number.  Make the same adjustment to the section titles in
+-     the list of Invariant Sections in the license notice of the
+-     combined work.
+-
+-     In the combination, you must combine any sections Entitled
+-     "History" in the various original documents, forming one section
+-     Entitled "History"; likewise combine any sections Entitled
+-     "Acknowledgements", and any sections Entitled "Dedications".  You
+-     must delete all sections Entitled "Endorsements."
+-
+-  6. COLLECTIONS OF DOCUMENTS
+-
+-     You may make a collection consisting of the Document and other
+-     documents released under this License, and replace the individual
+-     copies of this License in the various documents with a single copy
+-     that is included in the collection, provided that you follow the
+-     rules of this License for verbatim copying of each of the documents
+-     in all other respects.
+-
+-     You may extract a single document from such a collection, and
+-     distribute it individually under this License, provided you insert
+-     a copy of this License into the extracted document, and follow this
+-     License in all other respects regarding verbatim copying of that
+-     document.
+-
+-  7. AGGREGATION WITH INDEPENDENT WORKS
+-
+-     A compilation of the Document or its derivatives with other
+-     separate and independent documents or works, in or on a volume of a
+-     storage or distribution medium, is called an "aggregate" if the
+-     copyright resulting from the compilation is not used to limit the
+-     legal rights of the compilation's users beyond what the individual
+-     works permit.  When the Document is included in an aggregate, this
+-     License does not apply to the other works in the aggregate which
+-     are not themselves derivative works of the Document.
+-
+-     If the Cover Text requirement of section 3 is applicable to these
+-     copies of the Document, then if the Document is less than one half
+-     of the entire aggregate, the Document's Cover Texts may be placed
+-     on covers that bracket the Document within the aggregate, or the
+-     electronic equivalent of covers if the Document is in electronic
+-     form.  Otherwise they must appear on printed covers that bracket
+-     the whole aggregate.
+-
+-  8. TRANSLATION
+-
+-     Translation is considered a kind of modification, so you may
+-     distribute translations of the Document under the terms of section
+-     4.  Replacing Invariant Sections with translations requires special
+-     permission from their copyright holders, but you may include
+-     translations of some or all Invariant Sections in addition to the
+-     original versions of these Invariant Sections.  You may include a
+-     translation of this License, and all the license notices in the
+-     Document, and any Warranty Disclaimers, provided that you also
+-     include the original English version of this License and the
+-     original versions of those notices and disclaimers.  In case of a
+-     disagreement between the translation and the original version of
+-     this License or a notice or disclaimer, the original version will
+-     prevail.
+-
+-     If a section in the Document is Entitled "Acknowledgements",
+-     "Dedications", or "History", the requirement (section 4) to
+-     Preserve its Title (section 1) will typically require changing the
+-     actual title.
+-
+-  9. TERMINATION
+-
+-     You may not copy, modify, sublicense, or distribute the Document
+-     except as expressly provided under this License.  Any attempt
+-     otherwise to copy, modify, sublicense, or distribute it is void,
+-     and will automatically terminate your rights under this License.
+-
+-     However, if you cease all violation of this License, then your
+-     license from a particular copyright holder is reinstated (a)
+-     provisionally, unless and until the copyright holder explicitly and
+-     finally terminates your license, and (b) permanently, if the
+-     copyright holder fails to notify you of the violation by some
+-     reasonable means prior to 60 days after the cessation.
+-
+-     Moreover, your license from a particular copyright holder is
+-     reinstated permanently if the copyright holder notifies you of the
+-     violation by some reasonable means, this is the first time you have
+-     received notice of violation of this License (for any work) from
+-     that copyright holder, and you cure the violation prior to 30 days
+-     after your receipt of the notice.
+-
+-     Termination of your rights under this section does not terminate
+-     the licenses of parties who have received copies or rights from you
+-     under this License.  If your rights have been terminated and not
+-     permanently reinstated, receipt of a copy of some or all of the
+-     same material does not give you any rights to use it.
+-
+-  10. FUTURE REVISIONS OF THIS LICENSE
+-
+-     The Free Software Foundation may publish new, revised versions of
+-     the GNU Free Documentation License from time to time.  Such new
+-     versions will be similar in spirit to the present version, but may
+-     differ in detail to address new problems or concerns.  See
+-     <http://www.gnu.org/copyleft/>.
+-
+-     Each version of the License is given a distinguishing version
+-     number.  If the Document specifies that a particular numbered
+-     version of this License "or any later version" applies to it, you
+-     have the option of following the terms and conditions either of
+-     that specified version or of any later version that has been
+-     published (not as a draft) by the Free Software Foundation.  If the
+-     Document does not specify a version number of this License, you may
+-     choose any version ever published (not as a draft) by the Free
+-     Software Foundation.  If the Document specifies that a proxy can
+-     decide which future versions of this License can be used, that
+-     proxy's public statement of acceptance of a version permanently
+-     authorizes you to choose that version for the Document.
+-
+-  11. RELICENSING
+-
+-     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+-     World Wide Web server that publishes copyrightable works and also
+-     provides prominent facilities for anybody to edit those works.  A
+-     public wiki that anybody can edit is an example of such a server.
+-     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+-     site means any set of copyrightable works thus published on the MMC
+-     site.
+-
+-     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+-     license published by Creative Commons Corporation, a not-for-profit
+-     corporation with a principal place of business in San Francisco,
+-     California, as well as future copyleft versions of that license
+-     published by that same organization.
+-
+-     "Incorporate" means to publish or republish a Document, in whole or
+-     in part, as part of another Document.
+-
+-     An MMC is "eligible for relicensing" if it is licensed under this
+-     License, and if all works that were first published under this
+-     License somewhere other than this MMC, and subsequently
+-     incorporated in whole or in part into the MMC, (1) had no cover
+-     texts or invariant sections, and (2) were thus incorporated prior
+-     to November 1, 2008.
+-
+-     The operator of an MMC Site may republish an MMC contained in the
+-     site under CC-BY-SA on the same site at any time before August 1,
+-     2009, provided the MMC is eligible for relicensing.
+-
+-ADDENDUM: How to use this License for your documents
+-====================================================
+-
+-To use this License in a document you have written, include a copy of
+-the License in the document and put the following copyright and license
+-notices just after the title page:
+-
+-       Copyright (C)  YEAR  YOUR NAME.
+-       Permission is granted to copy, distribute and/or modify this document
+-       under the terms of the GNU Free Documentation License, Version 1.3
+-       or any later version published by the Free Software Foundation;
+-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+-       Texts.  A copy of the license is included in the section entitled ``GNU
+-       Free Documentation License''.
+-
+-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+-Texts, replace the "with...Texts."  line with this:
+-
+-         with the Invariant Sections being LIST THEIR TITLES, with
+-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+-         being LIST.
+-
+-   If you have Invariant Sections without Cover Texts, or some other
+-combination of the three, merge those two alternatives to suit the
+-situation.
+-
+-   If your document contains nontrivial examples of program code, we
+-recommend releasing these examples in parallel under your choice of free
+-software license, such as the GNU General Public License, to permit
+-their use in free software.
+-
+-
+-File: libitm.info,  Node: Index,  Prev: GNU Free Documentation License,  Up: Top
+-
+-Index
+-*****
+-
+-[index]
+-* Menu:
+-
+-* FDL, GNU Free Documentation License:   GNU Free Documentation License.
+-                                                                (line 6)
+-* Introduction:                          Top.                   (line 6)
+-
+-
+-
+-Tag Table:
+-Node: Top1141
+-Node: Enabling libitm2045
+-Node: C/C++ Language Constructs for TM2440
+-Node: The libitm ABI3923
+-Ref: txn-code-properties7721
+-Node: Internals18026
+-Ref: serial-lock-impl28064
+-Ref: progress-guarantees32825
+-Node: GNU Free Documentation License35103
+-Node: Index60224
+-
+-End Tag Table
+diff -Naur gcc-4.8.2.orig/libitm/query.cc gcc-4.8.2/libitm/query.cc
+--- gcc-4.8.2.orig/libitm/query.cc	2013-02-03 17:46:11.000000000 +0000
++++ gcc-4.8.2/libitm/query.cc	2014-03-30 20:21:40.764265739 +0000
+@@ -43,6 +43,15 @@
+ _ITM_howExecuting ITM_REGPARM
+ _ITM_inTransaction (void)
+ {
++#if defined(USE_HTM_FASTPATH)
++  // If we use the HTM fastpath, we cannot reliably detect whether we are
++  // in a transaction because this function can be called outside of
++  // a transaction and thus we can't deduce this by looking at just the serial
++  // lock.  This function isn't used in practice currently, so the easiest
++  // way to handle it is to just abort.
++  if (htm_fastpath && htm_transaction_active())
++    htm_abort();
++#endif
+   struct gtm_thread *tx = gtm_thr();
+   if (tx && (tx->nesting > 0))
+     {
+@@ -58,6 +67,11 @@
+ _ITM_transactionId_t ITM_REGPARM
+ _ITM_getTransactionId (void)
+ {
++#if defined(USE_HTM_FASTPATH)
++  // See ITM_inTransaction.
++  if (htm_fastpath && htm_transaction_active())
++    htm_abort();
++#endif
+   struct gtm_thread *tx = gtm_thr();
+   return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
+ }
+diff -Naur gcc-4.8.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c gcc-4.8.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
+--- gcc-4.8.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c	2009-01-06 22:44:05.000000000 +0000
++++ gcc-4.8.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c	2014-03-30 20:21:40.764265739 +0000
+@@ -42,8 +42,9 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
+ #include "jcl.h"
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
+diff -Naur gcc-4.8.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c gcc-4.8.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+--- gcc-4.8.2.orig/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	2012-12-19 17:03:15.000000000 +0000
++++ gcc-4.8.2/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	2014-03-30 20:21:40.764265739 +0000
+@@ -39,10 +39,11 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
+-#include <freetype/fttypes.h>
+-#include <freetype/tttables.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
++#include FT_TYPES_H
++#include FT_TRUETYPE_TABLES_H
+ #include "gdkfont.h"
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
+diff -Naur gcc-4.8.2.orig/libjava/java/lang/natObject.cc gcc-4.8.2/libjava/java/lang/natObject.cc
+--- gcc-4.8.2.orig/libjava/java/lang/natObject.cc	2005-08-12 16:40:32.000000000 +0000
++++ gcc-4.8.2/libjava/java/lang/natObject.cc	2014-03-30 20:21:40.764265739 +0000
+@@ -929,7 +929,7 @@
+ 	  // only be held by other threads waiting for conversion, and
+ 	  // they, like us, drop it quickly without blocking.
+ 	  _Jv_MutexLock(&(hl->si.mutex));
+-	  JvAssert(he -> address == address | LOCKED );
++	  JvAssert(he -> address == (address | LOCKED));
+ 	  release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
+ 				// release lock on he
+ 	  LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
+@@ -961,7 +961,7 @@
+     }
+   obj_addr_t was_heavy = (address & HEAVY);
+   if ((address & LOCKED) ||
+-      !compare_and_swap(&(he -> address), address, (address | LOCKED )))
++      !compare_and_swap(&(he -> address), address, address | LOCKED ))
+     {
+       wait_unlocked(he);
+       goto retry;
+diff -Naur gcc-4.8.2.orig/libquadmath/libquadmath.info gcc-4.8.2/libquadmath/libquadmath.info
+--- gcc-4.8.2.orig/libquadmath/libquadmath.info	2013-10-16 08:18:56.000000000 +0000
++++ gcc-4.8.2/libquadmath/libquadmath.info	1970-01-01 00:00:00.000000000 +0000
+@@ -1,808 +0,0 @@
+-This is libquadmath.info, produced by makeinfo version 5.1 from
+-libquadmath.texi.
+-
+-Copyright (C) 2010-2013 Free Software Foundation, Inc.
+-
+-     Permission is granted to copy, distribute and/or modify this
+-     document under the terms of the GNU Free Documentation License,
+-     Version 1.2 or any later version published by the Free Software
+-     Foundation; with no Invariant Sections, with the Front-Cover Texts
+-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
+-     below.  A copy of the license is included in the section entitled
+-     "GNU Free Documentation License."
+-
+-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+-     modify this GNU manual.
+-INFO-DIR-SECTION GNU Libraries
+-START-INFO-DIR-ENTRY
+-* libquadmath: (libquadmath).                  GCC Quad-Precision Math Library
+-END-INFO-DIR-ENTRY
+-
+-   This manual documents the GCC Quad-Precision Math Library API.
+-
+-   Published by the Free Software Foundation 51 Franklin Street, Fifth
+-Floor Boston, MA 02110-1301 USA
+-
+-   Copyright (C) 2010-2013 Free Software Foundation, Inc.
+-
+-     Permission is granted to copy, distribute and/or modify this
+-     document under the terms of the GNU Free Documentation License,
+-     Version 1.2 or any later version published by the Free Software
+-     Foundation; with no Invariant Sections, with the Front-Cover Texts
+-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
+-     below.  A copy of the license is included in the section entitled
+-     "GNU Free Documentation License."
+-
+-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+-     modify this GNU manual.
+-
+-
+-File: libquadmath.info,  Node: Top,  Next: Typedef and constants,  Up: (dir)
+-
+-Introduction
+-************
+-
+-This manual documents the usage of libquadmath, the GCC Quad-Precision
+-Math Library Application Programming Interface (API).
+-
+-* Menu:
+-
+-* Typedef and constants::      Defined data types and constants
+-* Math Library Routines::      The Libquadmath math runtime application
+-                               programming interface.
+-* I/O Library Routines::       The Libquadmath I/O runtime application
+-                               programming interface.
+-* GNU Free Documentation License::
+-                               How you can copy and share this manual.
+-* Reporting Bugs::             How to report bugs in GCC Libquadmath.
+-
+-
+-File: libquadmath.info,  Node: Typedef and constants,  Next: Math Library Routines,  Prev: Top,  Up: Top
+-
+-1 Typedef and constants
+-***********************
+-
+-The following data type has been defined via 'typedef'.
+-
+-'__complex128': '__float128'-based complex number
+-
+-   The following macros are defined, which give the numeric limits of
+-the '__float128' data type.
+-
+-'FLT128_MAX': largest finite number
+-'FLT128_MIN': smallest positive number with full precision
+-'FLT128_EPSILON': difference between 1 and the next larger
+-     representable number
+-'FLT128_DENORM_MIN': smallest positive denormalized number
+-'FLT128_MANT_DIG': number of digits in the mantissa (bit precision)
+-'FLT128_MIN_EXP': maximal negative exponent
+-'FLT128_MAX_EXP': maximal positive exponent
+-'FLT128_DIG': number of decimal digits in the mantissa
+-'FLT128_MIN_10_EXP': maximal negative decimal exponent
+-'FLT128_MAX_10_EXP': maximal positive decimal exponent
+-
+-   The following mathematical constants of type '__float128' are
+-defined.
+-
+-'M_Eq': the constant e (Euler's number)
+-'M_LOG2Eq': binary logarithm of 2
+-'M_LOG10Eq': common, decimal logarithm of 2
+-'M_LN2q': natural logarithm of 2
+-'M_LN10q': natural logarithm of 10
+-'M_PIq': pi
+-'M_PI_2q': pi divided by two
+-'M_PI_4q': pi divided by four
+-'M_1_PIq': one over pi
+-'M_2_PIq': one over two pi
+-'M_2_SQRTPIq': two over square root of pi
+-'M_SQRT2q': square root of 2
+-'M_SQRT1_2q': one over square root of 2
+-
+-
+-File: libquadmath.info,  Node: Math Library Routines,  Next: I/O Library Routines,  Prev: Typedef and constants,  Up: Top
+-
+-2 Math Library Routines
+-***********************
+-
+-The following mathematical functions are available:
+-
+-'acosq': arc cosine function
+-'acoshq': inverse hyperbolic cosine function
+-'asinq': arc sine function
+-'asinhq': inverse hyperbolic sine function
+-'atanq': arc tangent function
+-'atanhq': inverse hyperbolic tangent function
+-'atan2q': arc tangent function
+-'cbrtq': cube root function
+-'ceilq': ceiling value function
+-'copysignq': copy sign of a number
+-'coshq': hyperbolic cosine function
+-'cosq': cosine function
+-'erfq': error function
+-'erfcq': complementary error function
+-'expq': exponential function
+-'expm1q': exponential minus 1 function
+-'fabsq': absolute value function
+-'fdimq': positive difference function
+-'finiteq': check finiteness of value
+-'floorq': floor value function
+-'fmaq': fused multiply and add
+-'fmaxq': determine maximum of two values
+-'fminq': determine minimum of two values
+-'fmodq': remainder value function
+-'frexpq': extract mantissa and exponent
+-'hypotq': Eucledian distance function
+-'ilogbq': get exponent of the value
+-'isinfq': check for infinity
+-'isnanq': check for not a number
+-'j0q': Bessel function of the first kind, first order
+-'j1q': Bessel function of the first kind, second order
+-'jnq': Bessel function of the first kind, N-th order
+-'ldexpq': load exponent of the value
+-'lgammaq': logarithmic gamma function
+-'llrintq': round to nearest integer value
+-'llroundq': round to nearest integer value away from zero
+-'logq': natural logarithm function
+-'log10q': base 10 logarithm function
+-'log1pq': compute natural logarithm of the value plus one
+-'log2q': base 2 logarithm function
+-'lrintq': round to nearest integer value
+-'lroundq': round to nearest integer value away from zero
+-'modfq': decompose the floating-point number
+-'nanq': return quiet NaN
+-'nearbyintq': round to nearest integer
+-'nextafterq': next representable floating-point number
+-'powq': power function
+-'remainderq': remainder function
+-'remquoq': remainder and part of quotient
+-'rintq': round-to-nearest integral value
+-'roundq': round-to-nearest integral value, return '__float128'
+-'scalblnq': compute exponent using 'FLT_RADIX'
+-'scalbnq': compute exponent using 'FLT_RADIX'
+-'signbitq': return sign bit
+-'sincosq': calculate sine and cosine simulataneously
+-'sinhq': hyperbolic sine function
+-'sinq': sine function
+-'sqrtq': square root function
+-'tanq': tangent function
+-'tanhq': hyperbolic tangent function
+-'tgammaq': true gamma function
+-'truncq': round to integer, towards zero
+-'y0q': Bessel function of the second kind, first order
+-'y1q': Bessel function of the second kind, second order
+-'ynq': Bessel function of the second kind, N-th order
+-'cabsq' complex absolute value function
+-'cargq': calculate the argument
+-'cimagq' imaginary part of complex number
+-'crealq': real part of complex number
+-'cacoshq': complex arc hyperbolic cosine function
+-'cacosq': complex arc cosine function
+-'casinhq': complex arc hyperbolic sine function
+-'casinq': complex arc sine function
+-'catanhq': complex arc hyperbolic tangent function
+-'catanq': complex arc tangent function
+-'ccosq' complex cosine function:
+-'ccoshq': complex hyperbolic cosine function
+-'cexpq': complex exponential function
+-'cexpiq': computes the exponential function of "i" times a
+-     real value
+-'clogq': complex natural logarithm
+-'clog10q': complex base 10 logarithm
+-'conjq': complex conjugate function
+-'cpowq': complex power function
+-'cprojq': project into Riemann Sphere
+-'csinq': complex sine function
+-'csinhq': complex hyperbolic sine function
+-'csqrtq': complex square root
+-'ctanq': complex tangent function
+-'ctanhq': complex hyperbolic tangent function
+-
+-
+-File: libquadmath.info,  Node: I/O Library Routines,  Next: GNU Free Documentation License,  Prev: Math Library Routines,  Up: Top
+-
+-3 I/O Library Routines
+-**********************
+-
+-* Menu:
+-
+-* 'strtoflt128':          strtoflt128,          Convert from string
+-* 'quadmath_snprintf':    quadmath_snprintf,    Convert to string
+-
+-
+-File: libquadmath.info,  Node: strtoflt128,  Next: quadmath_snprintf,  Up: I/O Library Routines
+-
+-3.1 'strtoflt128' -- Convert from string
+-========================================
+-
+-The function 'strtoflt128' converts a string into a '__float128' number.
+-
+-Syntax
+-     '__float128 strtoflt128 (const char *s, char **sp)'
+-
+-_Arguments_:
+-     S           input string
+-     SP          the address of the next character in the string
+-
+-     The argument SP contains, if not 'NULL', the address of the next
+-     character following the parts of the string, which have been read.
+-
+-Example
+-          #include <quadmath.h>
+-
+-          int main ()
+-          {
+-            __float128 r;
+-
+-            r = strtoflt128 ("1.2345678", NULL);
+-
+-            return 0;
+-          }
+-
+-
+-File: libquadmath.info,  Node: quadmath_snprintf,  Prev: strtoflt128,  Up: I/O Library Routines
+-
+-3.2 'quadmath_snprintf' -- Convert to string
+-============================================
+-
+-The function 'quadmath_snprintf' converts a '__float128' floating-point
+-number into a string.  It is a specialized alternative to 'snprintf',
+-where the format string is restricted to a single conversion specifier
+-with 'Q' modifier and conversion specifier 'e', 'E', 'f', 'F', 'g', 'G',
+-'a' or 'A', with no extra characters before or after the conversion
+-specifier.  The '%m$' or '*m$' style must not be used in the format.
+-
+-Syntax
+-     'int quadmath_snprintf (char *s, size_t size, const char *format,
+-     ...)'
+-
+-_Arguments_:
+-     S           output string
+-     SIZE        byte size of the string, including tailing NUL
+-     FORMAT      conversion specifier string
+-
+-Note
+-     On some targets when supported by the C library hooks are installed
+-     for 'printf' family of functions, so that 'printf ("%Qe", 1.2Q);'
+-     etc. works too.
+-
+-Example
+-          #include <quadmath.h>
+-          #include <stdlib.h>
+-          #include <stdio.h>
+-
+-          int main ()
+-          {
+-            __float128 r;
+-            int prec = 20;
+-            int width = 46;
+-            char buf[128];
+-
+-            r = 2.0q;
+-            r = sqrtq (r);
+-            int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r);
+-            if ((size_t) n < sizeof buf)
+-              printf ("%s\n", buf);
+-              /* Prints: +1.41421356237309504880e+00 */
+-            quadmath_snprintf (buf, sizeof buf, "%Qa", r);
+-            if ((size_t) n < sizeof buf)
+-              printf ("%s\n", buf);
+-              /* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */
+-            n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r);
+-            if (n > -1)
+-              {
+-                char *str = malloc (n + 1);
+-                if (str)
+-                  {
+-                    quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r);
+-                    printf ("%s\n", str);
+-                    /* Prints: +1.41421356237309504880e+00 */
+-                  }
+-                free (str);
+-              }
+-            return 0;
+-          }
+-
+-
+-File: libquadmath.info,  Node: GNU Free Documentation License,  Next: Reporting Bugs,  Prev: I/O Library Routines,  Up: Top
+-
+-GNU Free Documentation License
+-******************************
+-
+-                     Version 1.3, 3 November 2008
+-
+-     Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+-     <http://fsf.org/>
+-
+-     Everyone is permitted to copy and distribute verbatim copies
+-     of this license document, but changing it is not allowed.
+-
+-  0. PREAMBLE
+-
+-     The purpose of this License is to make a manual, textbook, or other
+-     functional and useful document "free" in the sense of freedom: to
+-     assure everyone the effective freedom to copy and redistribute it,
+-     with or without modifying it, either commercially or
+-     noncommercially.  Secondarily, this License preserves for the
+-     author and publisher a way to get credit for their work, while not
+-     being considered responsible for modifications made by others.
+-
+-     This License is a kind of "copyleft", which means that derivative
+-     works of the document must themselves be free in the same sense.
+-     It complements the GNU General Public License, which is a copyleft
+-     license designed for free software.
+-
+-     We have designed this License in order to use it for manuals for
+-     free software, because free software needs free documentation: a
+-     free program should come with manuals providing the same freedoms
+-     that the software does.  But this License is not limited to
+-     software manuals; it can be used for any textual work, regardless
+-     of subject matter or whether it is published as a printed book.  We
+-     recommend this License principally for works whose purpose is
+-     instruction or reference.
+-
+-  1. APPLICABILITY AND DEFINITIONS
+-
+-     This License applies to any manual or other work, in any medium,
+-     that contains a notice placed by the copyright holder saying it can
+-     be distributed under the terms of this License.  Such a notice
+-     grants a world-wide, royalty-free license, unlimited in duration,
+-     to use that work under the conditions stated herein.  The
+-     "Document", below, refers to any such manual or work.  Any member
+-     of the public is a licensee, and is addressed as "you".  You accept
+-     the license if you copy, modify or distribute the work in a way
+-     requiring permission under copyright law.
+-
+-     A "Modified Version" of the Document means any work containing the
+-     Document or a portion of it, either copied verbatim, or with
+-     modifications and/or translated into another language.
+-
+-     A "Secondary Section" is a named appendix or a front-matter section
+-     of the Document that deals exclusively with the relationship of the
+-     publishers or authors of the Document to the Document's overall
+-     subject (or to related matters) and contains nothing that could
+-     fall directly within that overall subject.  (Thus, if the Document
+-     is in part a textbook of mathematics, a Secondary Section may not
+-     explain any mathematics.)  The relationship could be a matter of
+-     historical connection with the subject or with related matters, or
+-     of legal, commercial, philosophical, ethical or political position
+-     regarding them.
+-
+-     The "Invariant Sections" are certain Secondary Sections whose
+-     titles are designated, as being those of Invariant Sections, in the
+-     notice that says that the Document is released under this License.
+-     If a section does not fit the above definition of Secondary then it
+-     is not allowed to be designated as Invariant.  The Document may
+-     contain zero Invariant Sections.  If the Document does not identify
+-     any Invariant Sections then there are none.
+-
+-     The "Cover Texts" are certain short passages of text that are
+-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+-     that says that the Document is released under this License.  A
+-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+-     be at most 25 words.
+-
+-     A "Transparent" copy of the Document means a machine-readable copy,
+-     represented in a format whose specification is available to the
+-     general public, that is suitable for revising the document
+-     straightforwardly with generic text editors or (for images composed
+-     of pixels) generic paint programs or (for drawings) some widely
+-     available drawing editor, and that is suitable for input to text
+-     formatters or for automatic translation to a variety of formats
+-     suitable for input to text formatters.  A copy made in an otherwise
+-     Transparent file format whose markup, or absence of markup, has
+-     been arranged to thwart or discourage subsequent modification by
+-     readers is not Transparent.  An image format is not Transparent if
+-     used for any substantial amount of text.  A copy that is not
+-     "Transparent" is called "Opaque".
+-
+-     Examples of suitable formats for Transparent copies include plain
+-     ASCII without markup, Texinfo input format, LaTeX input format,
+-     SGML or XML using a publicly available DTD, and standard-conforming
+-     simple HTML, PostScript or PDF designed for human modification.
+-     Examples of transparent image formats include PNG, XCF and JPG.
+-     Opaque formats include proprietary formats that can be read and
+-     edited only by proprietary word processors, SGML or XML for which
+-     the DTD and/or processing tools are not generally available, and
+-     the machine-generated HTML, PostScript or PDF produced by some word
+-     processors for output purposes only.
+-
+-     The "Title Page" means, for a printed book, the title page itself,
+-     plus such following pages as are needed to hold, legibly, the
+-     material this License requires to appear in the title page.  For
+-     works in formats which do not have any title page as such, "Title
+-     Page" means the text near the most prominent appearance of the
+-     work's title, preceding the beginning of the body of the text.
+-
+-     The "publisher" means any person or entity that distributes copies
+-     of the Document to the public.
+-
+-     A section "Entitled XYZ" means a named subunit of the Document
+-     whose title either is precisely XYZ or contains XYZ in parentheses
+-     following text that translates XYZ in another language.  (Here XYZ
+-     stands for a specific section name mentioned below, such as
+-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
+-     To "Preserve the Title" of such a section when you modify the
+-     Document means that it remains a section "Entitled XYZ" according
+-     to this definition.
+-
+-     The Document may include Warranty Disclaimers next to the notice
+-     which states that this License applies to the Document.  These
+-     Warranty Disclaimers are considered to be included by reference in
+-     this License, but only as regards disclaiming warranties: any other
+-     implication that these Warranty Disclaimers may have is void and
+-     has no effect on the meaning of this License.
+-
+-  2. VERBATIM COPYING
+-
+-     You may copy and distribute the Document in any medium, either
+-     commercially or noncommercially, provided that this License, the
+-     copyright notices, and the license notice saying this License
+-     applies to the Document are reproduced in all copies, and that you
+-     add no other conditions whatsoever to those of this License.  You
+-     may not use technical measures to obstruct or control the reading
+-     or further copying of the copies you make or distribute.  However,
+-     you may accept compensation in exchange for copies.  If you
+-     distribute a large enough number of copies you must also follow the
+-     conditions in section 3.
+-
+-     You may also lend copies, under the same conditions stated above,
+-     and you may publicly display copies.
+-
+-  3. COPYING IN QUANTITY
+-
+-     If you publish printed copies (or copies in media that commonly
+-     have printed covers) of the Document, numbering more than 100, and
+-     the Document's license notice requires Cover Texts, you must
+-     enclose the copies in covers that carry, clearly and legibly, all
+-     these Cover Texts: Front-Cover Texts on the front cover, and
+-     Back-Cover Texts on the back cover.  Both covers must also clearly
+-     and legibly identify you as the publisher of these copies.  The
+-     front cover must present the full title with all words of the title
+-     equally prominent and visible.  You may add other material on the
+-     covers in addition.  Copying with changes limited to the covers, as
+-     long as they preserve the title of the Document and satisfy these
+-     conditions, can be treated as verbatim copying in other respects.
+-
+-     If the required texts for either cover are too voluminous to fit
+-     legibly, you should put the first ones listed (as many as fit
+-     reasonably) on the actual cover, and continue the rest onto
+-     adjacent pages.
+-
+-     If you publish or distribute Opaque copies of the Document
+-     numbering more than 100, you must either include a machine-readable
+-     Transparent copy along with each Opaque copy, or state in or with
+-     each Opaque copy a computer-network location from which the general
+-     network-using public has access to download using public-standard
+-     network protocols a complete Transparent copy of the Document, free
+-     of added material.  If you use the latter option, you must take
+-     reasonably prudent steps, when you begin distribution of Opaque
+-     copies in quantity, to ensure that this Transparent copy will
+-     remain thus accessible at the stated location until at least one
+-     year after the last time you distribute an Opaque copy (directly or
+-     through your agents or retailers) of that edition to the public.
+-
+-     It is requested, but not required, that you contact the authors of
+-     the Document well before redistributing any large number of copies,
+-     to give them a chance to provide you with an updated version of the
+-     Document.
+-
+-  4. MODIFICATIONS
+-
+-     You may copy and distribute a Modified Version of the Document
+-     under the conditions of sections 2 and 3 above, provided that you
+-     release the Modified Version under precisely this License, with the
+-     Modified Version filling the role of the Document, thus licensing
+-     distribution and modification of the Modified Version to whoever
+-     possesses a copy of it.  In addition, you must do these things in
+-     the Modified Version:
+-
+-       A. Use in the Title Page (and on the covers, if any) a title
+-          distinct from that of the Document, and from those of previous
+-          versions (which should, if there were any, be listed in the
+-          History section of the Document).  You may use the same title
+-          as a previous version if the original publisher of that
+-          version gives permission.
+-
+-       B. List on the Title Page, as authors, one or more persons or
+-          entities responsible for authorship of the modifications in
+-          the Modified Version, together with at least five of the
+-          principal authors of the Document (all of its principal
+-          authors, if it has fewer than five), unless they release you
+-          from this requirement.
+-
+-       C. State on the Title page the name of the publisher of the
+-          Modified Version, as the publisher.
+-
+-       D. Preserve all the copyright notices of the Document.
+-
+-       E. Add an appropriate copyright notice for your modifications
+-          adjacent to the other copyright notices.
+-
+-       F. Include, immediately after the copyright notices, a license
+-          notice giving the public permission to use the Modified
+-          Version under the terms of this License, in the form shown in
+-          the Addendum below.
+-
+-       G. Preserve in that license notice the full lists of Invariant
+-          Sections and required Cover Texts given in the Document's
+-          license notice.
+-
+-       H. Include an unaltered copy of this License.
+-
+-       I. Preserve the section Entitled "History", Preserve its Title,
+-          and add to it an item stating at least the title, year, new
+-          authors, and publisher of the Modified Version as given on the
+-          Title Page.  If there is no section Entitled "History" in the
+-          Document, create one stating the title, year, authors, and
+-          publisher of the Document as given on its Title Page, then add
+-          an item describing the Modified Version as stated in the
+-          previous sentence.
+-
+-       J. Preserve the network location, if any, given in the Document
+-          for public access to a Transparent copy of the Document, and
+-          likewise the network locations given in the Document for
+-          previous versions it was based on.  These may be placed in the
+-          "History" section.  You may omit a network location for a work
+-          that was published at least four years before the Document
+-          itself, or if the original publisher of the version it refers
+-          to gives permission.
+-
+-       K. For any section Entitled "Acknowledgements" or "Dedications",
+-          Preserve the Title of the section, and preserve in the section
+-          all the substance and tone of each of the contributor
+-          acknowledgements and/or dedications given therein.
+-
+-       L. Preserve all the Invariant Sections of the Document, unaltered
+-          in their text and in their titles.  Section numbers or the
+-          equivalent are not considered part of the section titles.
+-
+-       M. Delete any section Entitled "Endorsements".  Such a section
+-          may not be included in the Modified Version.
+-
+-       N. Do not retitle any existing section to be Entitled
+-          "Endorsements" or to conflict in title with any Invariant
+-          Section.
+-
+-       O. Preserve any Warranty Disclaimers.
+-
+-     If the Modified Version includes new front-matter sections or
+-     appendices that qualify as Secondary Sections and contain no
+-     material copied from the Document, you may at your option designate
+-     some or all of these sections as invariant.  To do this, add their
+-     titles to the list of Invariant Sections in the Modified Version's
+-     license notice.  These titles must be distinct from any other
+-     section titles.
+-
+-     You may add a section Entitled "Endorsements", provided it contains
+-     nothing but endorsements of your Modified Version by various
+-     parties--for example, statements of peer review or that the text
+-     has been approved by an organization as the authoritative
+-     definition of a standard.
+-
+-     You may add a passage of up to five words as a Front-Cover Text,
+-     and a passage of up to 25 words as a Back-Cover Text, to the end of
+-     the list of Cover Texts in the Modified Version.  Only one passage
+-     of Front-Cover Text and one of Back-Cover Text may be added by (or
+-     through arrangements made by) any one entity.  If the Document
+-     already includes a cover text for the same cover, previously added
+-     by you or by arrangement made by the same entity you are acting on
+-     behalf of, you may not add another; but you may replace the old
+-     one, on explicit permission from the previous publisher that added
+-     the old one.
+-
+-     The author(s) and publisher(s) of the Document do not by this
+-     License give permission to use their names for publicity for or to
+-     assert or imply endorsement of any Modified Version.
+-
+-  5. COMBINING DOCUMENTS
+-
+-     You may combine the Document with other documents released under
+-     this License, under the terms defined in section 4 above for
+-     modified versions, provided that you include in the combination all
+-     of the Invariant Sections of all of the original documents,
+-     unmodified, and list them all as Invariant Sections of your
+-     combined work in its license notice, and that you preserve all
+-     their Warranty Disclaimers.
+-
+-     The combined work need only contain one copy of this License, and
+-     multiple identical Invariant Sections may be replaced with a single
+-     copy.  If there are multiple Invariant Sections with the same name
+-     but different contents, make the title of each such section unique
+-     by adding at the end of it, in parentheses, the name of the
+-     original author or publisher of that section if known, or else a
+-     unique number.  Make the same adjustment to the section titles in
+-     the list of Invariant Sections in the license notice of the
+-     combined work.
+-
+-     In the combination, you must combine any sections Entitled
+-     "History" in the various original documents, forming one section
+-     Entitled "History"; likewise combine any sections Entitled
+-     "Acknowledgements", and any sections Entitled "Dedications".  You
+-     must delete all sections Entitled "Endorsements."
+-
+-  6. COLLECTIONS OF DOCUMENTS
+-
+-     You may make a collection consisting of the Document and other
+-     documents released under this License, and replace the individual
+-     copies of this License in the various documents with a single copy
+-     that is included in the collection, provided that you follow the
+-     rules of this License for verbatim copying of each of the documents
+-     in all other respects.
+-
+-     You may extract a single document from such a collection, and
+-     distribute it individually under this License, provided you insert
+-     a copy of this License into the extracted document, and follow this
+-     License in all other respects regarding verbatim copying of that
+-     document.
+-
+-  7. AGGREGATION WITH INDEPENDENT WORKS
+-
+-     A compilation of the Document or its derivatives with other
+-     separate and independent documents or works, in or on a volume of a
+-     storage or distribution medium, is called an "aggregate" if the
+-     copyright resulting from the compilation is not used to limit the
+-     legal rights of the compilation's users beyond what the individual
+-     works permit.  When the Document is included in an aggregate, this
+-     License does not apply to the other works in the aggregate which
+-     are not themselves derivative works of the Document.
+-
+-     If the Cover Text requirement of section 3 is applicable to these
+-     copies of the Document, then if the Document is less than one half
+-     of the entire aggregate, the Document's Cover Texts may be placed
+-     on covers that bracket the Document within the aggregate, or the
+-     electronic equivalent of covers if the Document is in electronic
+-     form.  Otherwise they must appear on printed covers that bracket
+-     the whole aggregate.
+-
+-  8. TRANSLATION
+-
+-     Translation is considered a kind of modification, so you may
+-     distribute translations of the Document under the terms of section
+-     4.  Replacing Invariant Sections with translations requires special
+-     permission from their copyright holders, but you may include
+-     translations of some or all Invariant Sections in addition to the
+-     original versions of these Invariant Sections.  You may include a
+-     translation of this License, and all the license notices in the
+-     Document, and any Warranty Disclaimers, provided that you also
+-     include the original English version of this License and the
+-     original versions of those notices and disclaimers.  In case of a
+-     disagreement between the translation and the original version of
+-     this License or a notice or disclaimer, the original version will
+-     prevail.
+-
+-     If a section in the Document is Entitled "Acknowledgements",
+-     "Dedications", or "History", the requirement (section 4) to
+-     Preserve its Title (section 1) will typically require changing the
+-     actual title.
+-
+-  9. TERMINATION
+-
+-     You may not copy, modify, sublicense, or distribute the Document
+-     except as expressly provided under this License.  Any attempt
+-     otherwise to copy, modify, sublicense, or distribute it is void,
+-     and will automatically terminate your rights under this License.
+-
+-     However, if you cease all violation of this License, then your
+-     license from a particular copyright holder is reinstated (a)
+-     provisionally, unless and until the copyright holder explicitly and
+-     finally terminates your license, and (b) permanently, if the
+-     copyright holder fails to notify you of the violation by some
+-     reasonable means prior to 60 days after the cessation.
+-
+-     Moreover, your license from a particular copyright holder is
+-     reinstated permanently if the copyright holder notifies you of the
+-     violation by some reasonable means, this is the first time you have
+-     received notice of violation of this License (for any work) from
+-     that copyright holder, and you cure the violation prior to 30 days
+-     after your receipt of the notice.
+-
+-     Termination of your rights under this section does not terminate
+-     the licenses of parties who have received copies or rights from you
+-     under this License.  If your rights have been terminated and not
+-     permanently reinstated, receipt of a copy of some or all of the
+-     same material does not give you any rights to use it.
+-
+-  10. FUTURE REVISIONS OF THIS LICENSE
+-
+-     The Free Software Foundation may publish new, revised versions of
+-     the GNU Free Documentation License from time to time.  Such new
+-     versions will be similar in spirit to the present version, but may
+-     differ in detail to address new problems or concerns.  See
+-     <http://www.gnu.org/copyleft/>.
+-
+-     Each version of the License is given a distinguishing version
+-     number.  If the Document specifies that a particular numbered
+-     version of this License "or any later version" applies to it, you
+-     have the option of following the terms and conditions either of
+-     that specified version or of any later version that has been
+-     published (not as a draft) by the Free Software Foundation.  If the
+-     Document does not specify a version number of this License, you may
+-     choose any version ever published (not as a draft) by the Free
+-     Software Foundation.  If the Document specifies that a proxy can
+-     decide which future versions of this License can be used, that
+-     proxy's public statement of acceptance of a version permanently
+-     authorizes you to choose that version for the Document.
+-
+-  11. RELICENSING
+-
+-     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+-     World Wide Web server that publishes copyrightable works and also
+-     provides prominent facilities for anybody to edit those works.  A
+-     public wiki that anybody can edit is an example of such a server.
+-     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+-     site means any set of copyrightable works thus published on the MMC
+-     site.
+-
+-     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+-     license published by Creative Commons Corporation, a not-for-profit
+-     corporation with a principal place of business in San Francisco,
+-     California, as well as future copyleft versions of that license
+-     published by that same organization.
+-
+-     "Incorporate" means to publish or republish a Document, in whole or
+-     in part, as part of another Document.
+-
+-     An MMC is "eligible for relicensing" if it is licensed under this
+-     License, and if all works that were first published under this
+-     License somewhere other than this MMC, and subsequently
+-     incorporated in whole or in part into the MMC, (1) had no cover
+-     texts or invariant sections, and (2) were thus incorporated prior
+-     to November 1, 2008.
+-
+-     The operator of an MMC Site may republish an MMC contained in the
+-     site under CC-BY-SA on the same site at any time before August 1,
+-     2009, provided the MMC is eligible for relicensing.
+-
+-ADDENDUM: How to use this License for your documents
+-====================================================
+-
+-To use this License in a document you have written, include a copy of
+-the License in the document and put the following copyright and license
+-notices just after the title page:
+-
+-       Copyright (C)  YEAR  YOUR NAME.
+-       Permission is granted to copy, distribute and/or modify this document
+-       under the terms of the GNU Free Documentation License, Version 1.3
+-       or any later version published by the Free Software Foundation;
+-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+-       Texts.  A copy of the license is included in the section entitled ``GNU
+-       Free Documentation License''.
+-
+-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
+-Texts, replace the "with...Texts."  line with this:
+-
+-         with the Invariant Sections being LIST THEIR TITLES, with
+-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
+-         being LIST.
+-
+-   If you have Invariant Sections without Cover Texts, or some other
+-combination of the three, merge those two alternatives to suit the
+-situation.
+-
+-   If your document contains nontrivial examples of program code, we
+-recommend releasing these examples in parallel under your choice of free
+-software license, such as the GNU General Public License, to permit
+-their use in free software.
+-
+-
+-File: libquadmath.info,  Node: Reporting Bugs,  Prev: GNU Free Documentation License,  Up: Top
+-
+-4 Reporting Bugs
+-****************
+-
+-Bugs in the GCC Quad-Precision Math Library implementation should be
+-reported via <http://gcc.gnu.org/bugs.html>.
+-
+-
+-
+-Tag Table:
+-Node: Top1633
+-Node: Typedef and constants2367
+-Node: Math Library Routines3786
+-Node: I/O Library Routines7503
+-Node: strtoflt1287828
+-Node: quadmath_snprintf8588
+-Node: GNU Free Documentation License10798
+-Node: Reporting Bugs35944
+-
+-End Tag Table
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/acinclude.m4 gcc-4.8.2/libstdc++-v3/acinclude.m4
+--- gcc-4.8.2.orig/libstdc++-v3/acinclude.m4	2013-05-24 18:10:37.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/acinclude.m4	2014-03-30 20:21:40.767599182 +0000
+@@ -3266,7 +3266,7 @@
+ fi
+ 
+ # For libtool versioning info, format is CURRENT:REVISION:AGE
+-libtool_VERSION=6:18:0
++libtool_VERSION=6:19:0
+ 
+ # Everything parsed; figure out what files and settings to use.
+ case $enable_symvers in
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt gcc-4.8.2/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
+--- gcc-4.8.2.orig/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt	2012-02-29 17:43:39.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt	2014-03-30 20:21:40.767599182 +0000
+@@ -403,6 +403,7 @@
+ FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
+ FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+ FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
++FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
+ FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
+ FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
+ FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
+@@ -590,6 +591,8 @@
+ FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
+ FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
+ FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
++FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
++FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
+ FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
+ FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
+ FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
+@@ -1207,6 +1210,7 @@
+ FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
+ FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
+ FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
++FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
+ FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
+ FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
+ FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
+@@ -1485,6 +1489,11 @@
+ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
+ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
+ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
++FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
++FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
++FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
++FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
++FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
+ FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
+ FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
+ FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
+@@ -1929,6 +1938,8 @@
+ FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
+ FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
+ FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
++FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
++FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
+ FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
+ FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
+ FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
+@@ -2467,6 +2478,7 @@
+ FUNC:__cxa_guard_release@@CXXABI_1.3
+ FUNC:__cxa_pure_virtual@@CXXABI_1.3
+ FUNC:__cxa_rethrow@@CXXABI_1.3
++FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
+ FUNC:__cxa_throw@@CXXABI_1.3
+ FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
+ FUNC:__cxa_vec_cctor@@CXXABI_1.3
+@@ -2491,6 +2503,7 @@
+ OBJECT:0:CXXABI_1.3.4
+ OBJECT:0:CXXABI_1.3.5
+ OBJECT:0:CXXABI_1.3.6
++OBJECT:0:CXXABI_1.3.7
+ OBJECT:0:CXXABI_TM_1
+ OBJECT:0:GLIBCXX_3.4
+ OBJECT:0:GLIBCXX_3.4.1
+@@ -2502,6 +2515,8 @@
+ OBJECT:0:GLIBCXX_3.4.15
+ OBJECT:0:GLIBCXX_3.4.16
+ OBJECT:0:GLIBCXX_3.4.17
++OBJECT:0:GLIBCXX_3.4.18
++OBJECT:0:GLIBCXX_3.4.19
+ OBJECT:0:GLIBCXX_3.4.2
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+@@ -3033,6 +3048,8 @@
+ OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
+ OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
+ OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
++OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
++OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
+ OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
+ OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
+ OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/configure gcc-4.8.2/libstdc++-v3/configure
+--- gcc-4.8.2.orig/libstdc++-v3/configure	2013-05-24 18:10:37.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/configure	2014-03-30 20:21:40.774266068 +0000
+@@ -71573,7 +71573,7 @@
+ fi
+ 
+ # For libtool versioning info, format is CURRENT:REVISION:AGE
+-libtool_VERSION=6:18:0
++libtool_VERSION=6:19:0
+ 
+ # Everything parsed; figure out what files and settings to use.
+ case $enable_symvers in
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/api.html gcc-4.8.2/libstdc++-v3/doc/html/api.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/api.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/api.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,12 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a>Â </td><th width="60%" align="center"></th><td width="20%" align="right">Â <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright Â© 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a>Â </td><th width="60%" align="center"></th><td width="20%" align="right">Â <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright Â© 
+       2008
+     , 
+       2010
+      
+       <a class="link" href="http://www.fsf.org/" target="_top">FSF
+       </a>
+-    </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
++    </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
+       <a class="link" href="manual/license.html" title="License">License
+       </a>
+     </p></div></div></div><hr /></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/bk02.html gcc-4.8.2/libstdc++-v3/doc/html/bk02.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/bk02.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/bk02.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,2 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards CompatibilityÂ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">Â The GNU C++ Library API Reference</td></tr></table></div></body></html>
+\ No newline at end of file
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards CompatibilityÂ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">Â The GNU C++ Library API Reference</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/bk03.html gcc-4.8.2/libstdc++-v3/doc/html/bk03.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/bk03.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/bk03.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,2 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API ReferenceÂ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">Â Frequently Asked Questions</td></tr></table></div></body></html>
+\ No newline at end of file
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API ReferenceÂ </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">Â Frequently Asked Questions</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/faq.html gcc-4.8.2/libstdc++-v3/doc/html/faq.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/faq.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/faq.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,9 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a>Â </td><th width="60%" align="center"></th><td width="20%" align="right">Â </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright Â© 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a>Â </td><th width="60%" align="center"></th><td width="20%" align="right">Â </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright Â© 
+       2008, 2010
+      
+       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+-    </p></div></div><hr /></div><div class="qandaset"><a id="idp1581728"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
++    </p></div></div><hr /></div><div class="qandaset"><a id="idm270011560848"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+       What is libstdc++?
+     </a></dt><dt>1.2. <a href="faq.html#faq.why">
+       Why should I use libstdc++?
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/index.html gcc-4.8.2/libstdc++-v3/doc/html/index.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/index.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/index.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left">Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left">Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
+       Copyright (C) 2008-2013
+       <a class="link" href="http://www.fsf.org/" target="_top">FSF
+       </a>
+@@ -20,7 +20,7 @@
+ 	  </p></li><li class="listitem"><p>
+ 	    <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
+ 	  </p></li></ul></div><p>
+-    </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. 
++    </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. 
+   Introduction
+   
+ </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. 
+@@ -34,13 +34,13 @@
+ </a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6. 
+   Utilities
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
+   Strings
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8. 
+   Localization
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
+   Containers
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10. 
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/abi.html gcc-4.8.2/libstdc++-v3/doc/html/manual/abi.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/abi.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/abi.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
+@@ -493,39 +493,39 @@
+ 	<a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
+ 	  C++ ABI Summary
+ 	</a>
+-      </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
++      </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
+ 	Intel Compilers for Linux Compatibility with the GNU Compilers
+ 	</a>
+-      </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
++      </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
+ 	<a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
+ 	Linker and Libraries Guide (document 819-0690)
+ 	</a>
+-      </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
++      </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
+ 	<a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
+       Sun Studio 11: C++ Migration Guide (document 819-3689)
+ 	</a>
+-      </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
++      </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
+       How to Write Shared Libraries
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idp22954928"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269992577632"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
+       C++ ABI for the ARM Architecture
+ 	</a>
+-      </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
++      </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
+       Dynamic Shared Objects: Survey and Issues
+ 	</a>
+       </em>. </span><span class="subtitle">
+       ISO C++ J16/06-0046
+-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22960032"></a><p><span class="title"><em>
++    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992572528"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
+ 	Versioning With Namespaces
+ 	</a>
+       </em>. </span><span class="subtitle">
+       ISO C++ J16/06-0083
+-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22963312"></a><p><span class="title"><em>
++    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992569248"></a><p><span class="title"><em>
+ 	<a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
+       Binary Compatibility of Shared Libraries Implemented in C++
+       on GNU/Linux Systems
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/algorithms.html gcc-4.8.2/libstdc++-v3/doc/html/manual/algorithms.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/algorithms.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/algorithms.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 11.Â  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="iterators.html" title="ChapterÂ 10.Â  Iterators" /><link rel="next" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 11.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 11.Â  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="iterators.html" title="ChapterÂ 10.Â  Iterators" /><link rel="next" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 11.Â 
+   Algorithms
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>ChapterÂ 11.Â 
+   Algorithms
+-  <a id="idp16191968" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
++  <a id="idm269999339120" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
+   The neatest accomplishment of the algorithms section is that all the
+   work is done via iterators, not containers directly.  This means two
+   important things:
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/api.html gcc-4.8.2/libstdc++-v3/doc/html/manual/api.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/api.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/api.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
+@@ -77,11 +77,11 @@
+    <span class="type">__alloc</span> to select an underlying allocator that
+    satisfied memory allocation requests. The selection of this
+    underlying allocator was not user-configurable.
+-   </p><div class="table"><a id="idp23030528"></a><p class="title"><strong>TableÂ B.6.Â Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
++   </p><div class="table"><a id="idm269992502096"></a><p class="title"><strong>TableÂ B.6.Â Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+    of available allocators. All of these new allocators are
+    standard-style. The following table includes details, along with
+    the first released version of GCC that included the extension allocator.
+-   </p><div class="table"><a id="idp23058160"></a><p class="title"><strong>TableÂ B.7.Â Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
++   </p><div class="table"><a id="idm269992474464"></a><p class="title"><strong>TableÂ B.7.Â Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ Debug mode first appears.
+ </p><p>
+ Precompiled header support <acronym class="acronym">PCH</acronym> support.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,9 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ IV.Â  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ IV.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ IV.Â  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ IV.Â 
+   Appendices
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_use.html">Prev</a>Â </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right">Â <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>PartÂ IV.Â 
+   Appendices
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A. 
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="appendix"><a href="appendix_contributing.html">A. 
+   Contributing
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B. 
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_contributing.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_contributing.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_contributing.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_contributing.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ A.Â  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ A.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ A.Â  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ A.Â 
+   Contributing
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
+   Appendices
+ </th><td width="20%" align="right">Â <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
+   Contributing
+-  <a id="idp21875168" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
++  <a id="idm269993657472" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
+   The GNU C++ Library follows an open development model. Active
+   contributors are assigned maintainer-ship responsibility, and given
+   write access to the source repository. First time contributors
+@@ -36,7 +36,7 @@
+           for this group is quite useful.
+       </p></li><li class="listitem"><p>
+ 	  Peruse
+-	  the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
++	  the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
+ 	  Coding Standards</a>, and chuckle when you hit the part
+ 	  about <span class="quote">â<span class="quote">Using Languages Other Than C</span>â</span>.
+ 	</p></li><li class="listitem"><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_free.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_free.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_free.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_free.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,12 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ C.Â  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="AppendixÂ D.Â  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ C.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ C.Â  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="AppendixÂ D.Â  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ C.Â 
+   Free Software Needs Free Documentation
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
+   Appendices
+ </th><td width="20%" align="right">Â <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
+   Free Software Needs Free Documentation
+-  <a id="idp23426192" class="indexterm"></a>
++  <a id="idm269992106560" class="indexterm"></a>
+ </h1></div></div></div><p>
+ The biggest deficiency in free operating systems is not in the
+ software--it is the lack of good free manuals that we can include in
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_gfdl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_gfdl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_gfdl.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_gfdl.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ E.Â GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix_gpl.html" title="AppendixÂ D.Â  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ E.Â GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ E.Â GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix_gpl.html" title="AppendixÂ D.Â  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ E.Â GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
+   Appendices
+ </th><td width="20%" align="right">Â <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"></a>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
+     Copyright Â© 2000, 2001, 2002, 2007, 2008
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_gpl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_gpl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_gpl.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_gpl.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ D.Â  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix_free.html" title="AppendixÂ C.Â  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="AppendixÂ E.Â GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ D.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ D.Â  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="appendix_free.html" title="AppendixÂ C.Â  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="AppendixÂ E.Â GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ D.Â 
+     <acronym class="acronym">GNU</acronym> General Public License version 3
+   </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
+   Appendices
+@@ -77,7 +77,7 @@
+   </p><p>
+     The precise terms and conditions for copying, distribution and modification
+     follow.
+-  </p><h2><a id="idp23466384"></a>
++  </p><h2><a id="idm269992066368"></a>
+     TERMS AND CONDITIONS
+   </h2><h2><a id="gpl-3-definitions"></a>
+     0. Definitions.
+@@ -618,7 +618,7 @@
+     waiver of all civil liability in connection with the Program, unless a
+     warranty or assumption of liability accompanies a copy of the Program in
+     return for a fee.
+-  </p><h2><a id="idp23565184"></a>
++  </p><h2><a id="idm269991967568"></a>
+     END OF TERMS AND CONDITIONS
+   </h2><h2><a id="HowToApply"></a>
+     How to Apply These Terms to Your New Programs
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_porting.html gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_porting.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/appendix_porting.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/appendix_porting.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ B.Â  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AppendixÂ B.Â  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="PartÂ IV.Â  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a>Â </td><th width="60%" align="center">PartÂ IV.Â 
+   Appendices
+ </th><td width="20%" align="right">Â <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
+   Porting and Maintenance
+-  <a id="idp22008864" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
++  <a id="idm269993523968" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
+   Qualifying Exception Safety Guarantees
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
+@@ -61,7 +61,7 @@
+ in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is  generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
+ <span class="command"><strong>automake</strong></span>) from the file
+ <code class="filename">Makefile.am</code>.
+-</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idp22035648"></a><p class="title"><strong>FigureÂ B.1.Â Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm269993497120"></a><p class="title"><strong>FigureÂ B.1.Â Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
+     Regenerate all generated files by using the command 
+     <code class="code">autoreconf</code> at the top level of the libstdc++ source
+     directory.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/associative.html gcc-4.8.2/libstdc++-v3/doc/html/manual/associative.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/associative.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/associative.html	2014-03-30 20:21:40.777599511 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
+   Containers
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="unordered_associative.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/atomics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/atomics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/atomics.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/atomics.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 14.Â  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="ChapterÂ 15.Â  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 14.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 14.Â  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="ChapterÂ 15.Â  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 14.Â 
+   Atomics
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>ChapterÂ 14.Â 
+   Atomics
+-  <a id="idp16390640" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
++  <a id="idm269999140704" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
+   Facilities for atomic operations.
+ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
+     All items are declared in the standard header
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/backwards.html gcc-4.8.2/libstdc++-v3/doc/html/manual/backwards.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/backwards.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/backwards.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="AppendixÂ C.Â  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="AppendixÂ C.Â  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++.  It was a
+@@ -940,15 +940,15 @@
+   This is a change in behavior from older versions. Now, most
+   <span class="type">iterator_type</span> typedefs in container classes are POD
+   objects, not <span class="type">value_type</span> pointers.
+-</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp23415104"></a><p><span class="title"><em>
++</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269992117648"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
+       Migrating to GCC 4.1
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idp23417888"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269992114864"></a><p><span class="title"><em>
+ 	<a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
+       Building the Whole Debian Archive with GCC 4.1: A Summary
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idp23420736"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269992112016"></a><p><span class="title"><em>
+ 	<a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
+       Migration guide for GCC-3.2
+ 	</a>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bitmap_allocator.html gcc-4.8.2/libstdc++-v3/doc/html/manual/bitmap_allocator.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bitmap_allocator.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/bitmap_allocator.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 21.Â The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 21.Â The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 21.Â The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 21.Â The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>ChapterÂ 21.Â The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>ChapterÂ 21.Â The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
+ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
+     As this name suggests, this allocator uses a bit-map to keep track
+     of the used and unused memory locations for its book-keeping
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 21.Â The bitmap_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 21.Â The bitmap_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
+     The Free List Store (referred to as FLS for the remaining part of this
+     document) is the Global memory pool that is shared by all instances of
+     the bitmapped allocator instantiated for any type. This maintains a
+@@ -75,7 +75,7 @@
+   </p><p>
+     Consider a block of size 64 ints. In memory, it would look like this:
+     (assume a 32-bit system where, size_t is a 32-bit entity).
+-  </p><div class="table"><a id="idp17500848"></a><p class="title"><strong>TableÂ 21.1.Â Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
++  </p><div class="table"><a id="idm269998030352"></a><p class="title"><strong>TableÂ 21.1.Â Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+     The first Column(268) represents the size of the Block in bytes as
+     seen by the Bitmap Allocator. Internally, a global free list is
+     used to keep track of the free blocks used and given back by the
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bugs.html gcc-4.8.2/libstdc++-v3/doc/html/manual/bugs.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/bugs.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/bugs.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="ChapterÂ 2.Â Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 1.Â Status</th><td width="20%" align="right">Â <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="ChapterÂ 2.Â Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 1.Â Status</th><td width="20%" align="right">Â <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
+       Information on known bugs, details on efforts to fix them, and
+       fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
+       with the category set to <code class="literal">libstdc++</code>.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/concept_checking.html gcc-4.8.2/libstdc++-v3/doc/html/manual/concept_checking.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/concept_checking.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/concept_checking.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /><link rel="prev" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /><link rel="next" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 5.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /><link rel="prev" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /><link rel="next" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 5.Â 
+   Diagnostics
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/concurrency.html gcc-4.8.2/libstdc++-v3/doc/html/manual/concurrency.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/concurrency.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/concurrency.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 15.Â  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="atomics.html" title="ChapterÂ 14.Â  Atomics" /><link rel="next" href="extensions.html" title="PartÂ III.Â  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 15.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 15.Â  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="atomics.html" title="ChapterÂ 14.Â  Atomics" /><link rel="next" href="extensions.html" title="PartÂ III.Â  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 15.Â 
+   Concurrency
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>ChapterÂ 15.Â 
+   Concurrency
+-  <a id="idp16404464" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
++  <a id="idm269999126816" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
+   Facilities for concurrent operation, and control thereof.
+ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
+     All items are declared in one of four standard header files.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/configure.html gcc-4.8.2/libstdc++-v3/doc/html/manual/configure.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/configure.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/configure.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="prev" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 2.Â Setup</th><td width="20%" align="right">Â <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="prev" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 2.Â Setup</th><td width="20%" align="right">Â <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
+   When configuring libstdc++, you'll have to configure the entire
+   <span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
+   toplevel gcc configuration option
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/containers.html gcc-4.8.2/libstdc++-v3/doc/html/manual/containers.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/containers.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/containers.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 9.Â  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 9.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 9.Â  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 9.Â 
+   Containers
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>ChapterÂ 9.Â 
+   Containers
+-  <a id="idp16037808" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
++  <a id="idm269999493408" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
+      Yes it is, and that's okay.  This is a decision that we preserved
+      when we imported SGI's STL implementation.  The following is
+      quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/containers_and_c.html gcc-4.8.2/libstdc++-v3/doc/html/manual/containers_and_c.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/containers_and_c.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/containers_and_c.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="ChapterÂ 10.Â  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="ChapterÂ 10.Â  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
+   Containers
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug.html gcc-4.8.2/libstdc++-v3/doc/html/manual/debug.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/debug.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
+   There are numerous things that can be done to improve the ease with
+   which C++ binaries are debugged when using the GNU tool chain. Here
+   are some of them.
+@@ -161,7 +161,7 @@
+   DRD</a>,
+   <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top"> 
+   Helgrind</a>, and
+-  <a class="link" href="http://code.google.com/p/data-race-test" target="_top"> 
++  <a class="link" href="http://code.google.com/p/data-race-test/" target="_top"> 
+   ThreadSanitizer</a>.
+ </p><p>
+   With DRD, Helgrind and ThreadSanitizer you will need to define
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode.html gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 17.Â Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="ChapterÂ 16.Â Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 17.Â Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 17.Â Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="ChapterÂ 16.Â Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 17.Â Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>ChapterÂ 17.Â Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>ChapterÂ 17.Â Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+     debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
+     By default, libstdc++ is built with efficiency in mind, and
+     therefore performs little or no error checking that is not
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_design.html gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_design.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_design.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_design.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
+   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
+     </p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
+   containers and iterators with semantically equivalent safe standard
+@@ -391,7 +391,7 @@
+     </p><p> There are several existing implementations of debug modes for C++
+   standard library implementations, although none of them directly
+   supports debugging for programs using libstdc++. The existing
+-  implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
++  implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.cs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
+   SafeSTL was the original debugging version of the Standard Template
+   Library (STL), implemented by Cay S. Horstmann on top of the
+   Hewlett-Packard STL. Though it inspired much work in this area, it
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_semantics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_semantics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_semantics.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_semantics.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
+   </p><p>A program that uses the C++ standard library correctly
+   will maintain the same semantics under debug mode as it had with
+   the normal (release) library. All functional and exception-handling
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_using.html gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_using.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/debug_mode_using.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/debug_mode_using.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 17.Â Debug Mode</th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
+   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
+   compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
+   changes the sizes and behavior of standard class templates such
+@@ -18,6 +18,6 @@
+   mode or with debug mode. The
+   following table provides the names and headers of the debugging
+   containers:
+-</p><div class="table"><a id="idp16490400"></a><p class="title"><strong>TableÂ 17.1.Â Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
++</p><div class="table"><a id="idm269999040896"></a><p class="title"><strong>TableÂ 17.1.Â Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
+ containers have additional debug capability.
+-</p><div class="table"><a id="idp16535296"></a><p class="title"><strong>TableÂ 17.2.Â Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">SemanticsÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â Design</td></tr></table></div></body></html>
+\ No newline at end of file
++</p><div class="table"><a id="idm269998996000"></a><p class="title"><strong>TableÂ 17.2.Â Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">SemanticsÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â Design</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/diagnostics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/diagnostics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/diagnostics.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/diagnostics.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 5.Â  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 5.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 5.Â  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 5.Â 
+   Diagnostics
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="concept_checking.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>ChapterÂ 5.Â 
+   Diagnostics
+-  <a id="idp13835248" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
++  <a id="idm270001697504" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
+       All exception objects are defined in one of the standard header
+       files: <code class="filename">exception</code>,
+       <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/documentation_hacking.html gcc-4.8.2/libstdc++-v3/doc/html/manual/documentation_hacking.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/documentation_hacking.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/documentation_hacking.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.doc"></a>Writing and Generating Documentation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
+@@ -112,7 +112,7 @@
+       supported, and are always aliased to dummy rules. These
+       unsupported formats are: <span class="emphasis"><em>info</em></span>,
+       <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
+-    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22162432"></a><p class="title"><strong>TableÂ B.1.Â Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
++    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993370272"></a><p class="title"><strong>TableÂ B.1.Â Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ 	Prerequisite tools are Bash 2.0 or later,
+ 	<a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
+ 	the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
+@@ -232,9 +232,8 @@
+ 	member functions.
+       </p><p>
+ 	Some commentary to accompany
+-	the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
+-	Documentation Blocks</a> section of
+-	the Doxygen manual:
++	the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
++	Documentation Blocks</a> section of the Doxygen manual:
+       </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
+ 	    ...not the Qt style. The intermediate *'s are preferred.
+ 	  </p></li><li class="listitem"><p>
+@@ -310,7 +309,7 @@
+ 	writing Doxygen comments. Single and double quotes, and
+ 	separators in filenames are two common trouble spots. When in
+ 	doubt, consult the following table.
+-      </p><div class="table"><a id="idp22238096"></a><p class="title"><strong>TableÂ B.2.Â HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22257536"></a><p class="title"><strong>TableÂ B.3.Â Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
++      </p><div class="table"><a id="idm269993294592"></a><p class="title"><strong>TableÂ B.2.Â HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993275152"></a><p class="title"><strong>TableÂ B.3.Â Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ 	Editing the DocBook sources requires an XML editor. Many
+ 	exist: some notable options
+ 	include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
+@@ -520,11 +519,11 @@
+ 	<a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
+ 	An incomplete reference for HTML to Docbook conversion is
+ 	detailed in the table below.
+-      </p><div class="table"><a id="idp22335040"></a><p class="title"><strong>TableÂ B.4.Â HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
++      </p><div class="table"><a id="idm269993197520"></a><p class="title"><strong>TableÂ B.4.Â HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ 	&lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
+   And examples of detailed markup for which there are no real HTML
+   equivalents are listed in the table below.
+-</p><div class="table"><a id="idp22359184"></a><p class="title"><strong>TableÂ B.5.Â Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
++</p><div class="table"><a id="idm269993173376"></a><p class="title"><strong>TableÂ B.5.Â Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+ 	<p>&lt;function&gt;clear()&lt;/function&gt;</p>
+ 	<p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
+       </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/dynamic_memory.html gcc-4.8.2/libstdc++-v3/doc/html/manual/dynamic_memory.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/dynamic_memory.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/dynamic_memory.html	2014-03-30 20:21:40.780932954 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="prev" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 4.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="prev" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 4.Â 
+   Support
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_algorithms.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_algorithms.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_algorithms.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_algorithms.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 25.Â Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_utilities.html" title="ChapterÂ 24.Â Utilities" /><link rel="next" href="ext_numerics.html" title="ChapterÂ 26.Â Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 25.Â Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 25.Â Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_utilities.html" title="ChapterÂ 24.Â Utilities" /><link rel="next" href="ext_numerics.html" title="ChapterÂ 26.Â Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 25.Â Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>ChapterÂ 25.Â Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_compile_checks.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_compile_checks.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_compile_checks.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_compile_checks.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 16.Â Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 16.Â Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 16.Â Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="ChapterÂ 17.Â Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 16.Â Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>ChapterÂ 16.Â Compile Time Checks</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 30.Â Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_demangling.html" title="ChapterÂ 29.Â Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 30.Â Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 30.Â Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_demangling.html" title="ChapterÂ 29.Â Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 30.Â Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>ChapterÂ 30.Â Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
++</th><td width="20%" align="right">Â <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>ChapterÂ 30.Â Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
+ contains all the higher-level
+ constructs for playing with threads. In contrast to the atomics layer,
+ the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="prev" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 30.Â Concurrency</th><td width="20%" align="right">Â <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="prev" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 30.Â Concurrency</th><td width="20%" align="right">Â <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
+ implemented via compiler intrinsics (if the underlying host is
+ capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred.  However, as
+ the compiler builtins for atomics are not universally implemented,
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency_use.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency_use.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_concurrency_use.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_concurrency_use.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="PartÂ IV.Â  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 30.Â Concurrency</th><td width="20%" align="right">Â <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="PartÂ IV.Â  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 30.Â Concurrency</th><td width="20%" align="right">Â <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
+ </p><pre class="programlisting">
+ #include &lt;ext/concurrence.h&gt;
+ 
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_containers.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_containers.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_containers.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_containers.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 23.Â HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 23.Â HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 23.Â HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 23.Â HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>ChapterÂ 23.Â HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
++</th><td width="20%" align="right">Â <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>ChapterÂ 23.Â HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
+     been made with containers.  Those dealing with older SGI-style
+     allocators are dealt with elsewhere.  The remaining ones all deal
+     with bits:
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_demangling.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_demangling.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_demangling.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_demangling.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 29.Â Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_io.html" title="ChapterÂ 28.Â Input and Output" /><link rel="next" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 29.Â Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 29.Â Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_io.html" title="ChapterÂ 28.Â Input and Output" /><link rel="next" href="ext_concurrency.html" title="ChapterÂ 30.Â Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 29.Â Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>ChapterÂ 29.Â Demangling</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_io.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_io.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_io.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_io.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 28.Â Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_iterators.html" title="ChapterÂ 27.Â Iterators" /><link rel="next" href="ext_demangling.html" title="ChapterÂ 29.Â Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 28.Â Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 28.Â Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_iterators.html" title="ChapterÂ 27.Â Iterators" /><link rel="next" href="ext_demangling.html" title="ChapterÂ 29.Â Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 28.Â Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>ChapterÂ 28.Â Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>ChapterÂ 28.Â Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
+     Extensions allowing <code class="code">filebuf</code>s to be constructed from
+     "C" types like  FILE*s and file descriptors.
+   </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_iterators.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_iterators.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_iterators.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_iterators.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 27.Â Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_numerics.html" title="ChapterÂ 26.Â Numerics" /><link rel="next" href="ext_io.html" title="ChapterÂ 28.Â Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 27.Â Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 27.Â Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_numerics.html" title="ChapterÂ 26.Â Numerics" /><link rel="next" href="ext_io.html" title="ChapterÂ 28.Â Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 27.Â Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>ChapterÂ 27.Â Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_numerics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_numerics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_numerics.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_numerics.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 26.Â Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_algorithms.html" title="ChapterÂ 25.Â Algorithms" /><link rel="next" href="ext_iterators.html" title="ChapterÂ 27.Â Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 26.Â Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 26.Â Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_algorithms.html" title="ChapterÂ 25.Â Algorithms" /><link rel="next" href="ext_iterators.html" title="ChapterÂ 27.Â Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 26.Â Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>ChapterÂ 26.Â Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>,
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_preface.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_preface.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_preface.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_preface.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="next" href="ext_compile_checks.html" title="ChapterÂ 16.Â Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="next" href="ext_compile_checks.html" title="ChapterÂ 16.Â Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idp16425920"></a></h1></div></div></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm269999105296"></a></h1></div></div></div><p>
+   Here we will make an attempt at describing the non-Standard
+   extensions to the library.  Some of these are from older versions of
+   standard library components, namely SGI's STL, and some of these are
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_sgi.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_sgi.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_sgi.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_sgi.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="ChapterÂ 24.Â Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 23.Â HP/SGI Extensions</th><td width="20%" align="right">Â <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="ChapterÂ 24.Â Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 23.Â HP/SGI Extensions</th><td width="20%" align="right">Â <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
+      The SGI hashing classes <code class="classname">hash_set</code> and
+      <code class="classname">hash_set</code> have been deprecated by the
+      unordered_set, unordered_multiset, unordered_map,
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_utilities.html gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_utilities.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/ext_utilities.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/ext_utilities.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 24.Â Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="ChapterÂ 25.Â Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 24.Â Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 24.Â Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="ChapterÂ 25.Â Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 24.Â Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>ChapterÂ 24.Â Utilities</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/extensions.html gcc-4.8.2/libstdc++-v3/doc/html/manual/extensions.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/extensions.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/extensions.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,11 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ III.Â  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ III.Â  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ III.Â 
+   Extensions
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a>Â </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right">Â <a accesskey="n" href="ext_preface.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>PartÂ III.Â 
+   Extensions
+-  <a id="idp16423680" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++  <a id="idm269999107536" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+     debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ 	    Configuring via Template Parameters
+ 	  </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/facets.html gcc-4.8.2/libstdc++-v3/doc/html/manual/facets.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/facets.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/facets.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="ChapterÂ 8.Â  Localization" /><link rel="prev" href="localization.html" title="ChapterÂ 8.Â  Localization" /><link rel="next" href="containers.html" title="ChapterÂ 9.Â  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 8.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="ChapterÂ 8.Â  Localization" /><link rel="prev" href="localization.html" title="ChapterÂ 8.Â  Localization" /><link rel="next" href="containers.html" title="ChapterÂ 9.Â  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 8.Â 
+   Localization
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15778336"></a>Specializations</h5></div></div></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999753024"></a>Specializations</h5></div></div></div><p>
+ For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
+ conversions are made between the internal character set (always UCS4
+ on GNU/Linux) and whatever the currently selected locale for the
+@@ -49,24 +49,24 @@
+    </p></li><li class="listitem"><p>
+        Rename abstract base class. See if just smash-overriding is a
+        better approach. Clarify, add sanity to naming.
+-     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15793392"></a><p><span class="citetitle"><em class="citetitle">
++     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999738032"></a><p><span class="citetitle"><em class="citetitle">
+       The GNU C Library
+-    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idp15798144"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm269999733280"></a><p><span class="citetitle"><em class="citetitle">
+       Correspondence
+-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idp15801232"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idm269999730192"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 14882:1998 Programming languages - C++
+-    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15803520"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999727904"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 9899:1999 Programming languages - C
+-    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
++    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
+ 	The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ 	</a>
+       </em>. </span><span class="copyright">Copyright Â© 1999 
+-      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15809040"></a><p><span class="citetitle"><em class="citetitle">
++      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269999722384"></a><p><span class="citetitle"><em class="citetitle">
+       The C++ Programming Language, Special Edition
+     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley
+-      . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
+       Standard C++ IOStreams and Locales
+     </em>. </span><span class="subtitle">
+       Advanced Programmer's Guide and Reference
+@@ -409,42 +409,42 @@
+       </p></li><li class="listitem"><p>
+       wchar_t/char internal buffers and conversions between
+       internal/external buffers?
+-      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15891136"></a><p><span class="citetitle"><em class="citetitle">
++      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999640080"></a><p><span class="citetitle"><em class="citetitle">
+       The GNU C Library
+     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2007 FSF. </span><span class="pagenums">
+       Chapters 6 Character Set Handling and 7 Locales and Internationalization
+-    . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
++    . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
+       Correspondence
+-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idp15898976"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idm269999632240"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 14882:1998 Programming languages - C++
+-    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15901264"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999629952"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 9899:1999 Programming languages - C
+-    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
++    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.opengroup.org/austin/" target="_top">
+       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ 	</a>
+       </em>. </span><span class="copyright">Copyright Â© 2008 
+ 	The Open Group/The Institute of Electrical and Electronics
+ 	Engineers, Inc.
+-      . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
+       The C++ Programming Language, Special Edition
+     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley
+-      . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
+       Standard C++ IOStreams and Locales
+     </em>. </span><span class="subtitle">
+       Advanced Programmer's Guide and Reference
+     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley Longman
+-      . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
+       A brief description of Normative Addendum 1
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idp15920304"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm269999610912"></a><p><span class="title"><em>
+ 	<a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
+ 	  The Unicode HOWTO
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idp15923088"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269999608128"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
+       UTF-8 and Unicode FAQ for Unix/Linux
+ 	</a>
+@@ -690,39 +690,39 @@
+    model. As of this writing, it is unknown how to query to see
+    if a specified message catalog exists using the gettext
+    package.
+-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp16003632"></a><p><span class="citetitle"><em class="citetitle">
++   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999527584"></a><p><span class="citetitle"><em class="citetitle">
+       The GNU C Library
+     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
+-    . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
++    . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
+       Correspondence
+-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idp16011472"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idm269999519744"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 14882:1998 Programming languages - C++
+-    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp16013760"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999517456"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 9899:1999 Programming languages - C
+-    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
++    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.opengroup.org/austin/" target="_top">
+       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ 	</a>
+       </em>. </span><span class="copyright">Copyright Â© 2008 
+ 	The Open Group/The Institute of Electrical and Electronics
+ 	Engineers, Inc.
+-      . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
+       The C++ Programming Language, Special Edition
+     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley
+-      . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
+       Standard C++ IOStreams and Locales
+     </em>. </span><span class="subtitle">
+       Advanced Programmer's Guide and Reference
+     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley Longman
+-      . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
+-	<a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
++	<a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
+ 	API Specifications, Java Platform
+ 	</a>
+       </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
+ java.util.Locale, java.util.ResourceBundle
+-    . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
++    . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
+ 	<a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
+       GNU gettext tools, version 0.10.38, Native Language Support
+       Library and Tools.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/fstreams.html gcc-4.8.2/libstdc++-v3/doc/html/manual/fstreams.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/fstreams.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/fstreams.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
+   Input and Output
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html gcc-4.8.2/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="prev" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 12.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="prev" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 12.Â 
+   Numerics
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/index.html gcc-4.8.2/libstdc++-v3/doc/html/manual/index.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/index.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/index.html	2014-03-30 20:21:40.784266397 +0000
+@@ -1,7 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="PartÂ I.Â  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright Â© 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="PartÂ I.Â  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright Â© 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 
+       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+-    </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I. 
++    </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I. 
+   Introduction
+   
+ </a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. 
+@@ -15,13 +15,13 @@
+ </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
+   Utilities
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
+   Strings
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
+   Localization
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
+   Containers
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
+@@ -143,19 +143,19 @@
+   
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. 
+     <acronym class="acronym">GNU</acronym> General Public License version 3
+-  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idp17613296">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17619952">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17651648">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17666528">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17675840">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17743424">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17806128">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18000448">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
++  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm269997917584">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269997910864">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269997879168">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269997864256">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269997855056">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269997787392">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269997724688">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997530416">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+ 	    Effect of embedded lists in
+ 	    <code class="classname">std::multimap</code>
+-	  </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp18023952">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18043824">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18057168">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18087392">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18127536">Hash functions, ranged-hash functions, and
+-	      range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18191968">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18199024">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18215840">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18234944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18265728">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18273504">Standard resize policy trigger sequence
+-		diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
+-		diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18355696">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18365136">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18378304">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18389968">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18398144">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18420400">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18465088">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18475584">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18506160">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18511744">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18575568">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18610544">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp22035648">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idp452240">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp8670848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp7483200">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12559072">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13051936">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13079360">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13115840">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13140576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13192016">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13221904">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13238832">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13259904">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13265424">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13271824">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13307552">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13322320">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13335696">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idp16490400">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idp16535296">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idp16725920">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idp16981200">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idp17088912">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idp17500848">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22162432">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22238096">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22257536">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22335040">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22359184">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp23030528">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23058160">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idp18141344">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18147232">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18151744">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18153568">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18163200">
++	  </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269997506912">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269997487104">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269997473760">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269997443664">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269997403584">Hash functions, ranged-hash functions, and
++	      range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269997339216">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269997332160">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269997315408">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269997296368">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269997265648">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269997257872">Standard resize policy trigger sequence
++		diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
++		diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269997175616">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269997166176">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269997153072">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269997141408">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269997133232">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269997110976">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269997066288">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269997055856">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269997025344">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269997019760">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269996955920">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269996920880">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269993497120">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm270008034928">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm270007982624">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270006687472">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm270002960368">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm270002481088">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm270002453792">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm270002417312">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm270002392576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm270002341136">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm270002311248">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm270002294320">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm270002273248">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm270002267728">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm270002261328">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm270002225600">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm270002210832">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm270002197456">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm269999040896">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm269998996000">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm269998805216">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm269998550064">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm269998442544">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm269998030352">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269993370272">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269993294592">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269993275152">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269993197520">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269993173376">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269992502096">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269992474464">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm269997389776">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269997383888">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269997379376">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269997377552">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269997367984">
+ 		A Standard String Hash Function
+-	      </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
++	      </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
+ 		Only k String DNA Hash
+-	      </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
++	      </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
+ 		Probability of Probe Sequence of Length k
+-	      </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
++	      </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
+ 		Probability Probe Sequence in Some Bin
+ 	      </a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a>Â </td><td width="20%" align="center">Â </td><td width="40%" align="right">Â <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ LibraryÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â PartÂ I.Â 
+   Introduction
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/internals.html gcc-4.8.2/libstdc++-v3/doc/html/manual/internals.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/internals.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/internals.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/intro.html gcc-4.8.2/libstdc++-v3/doc/html/manual/intro.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/intro.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/intro.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ I.Â  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="ChapterÂ 1.Â Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ I.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ I.Â  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="ChapterÂ 1.Â Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ I.Â 
+   Introduction
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a>Â </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right">Â <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>PartÂ I.Â 
+   Introduction
+-  <a id="idp9040416" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library ManualÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â ChapterÂ 1.Â Status</td></tr></table></div></body></html>
+\ No newline at end of file
++  <a id="idm270013458800" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library ManualÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â ChapterÂ 1.Â Status</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/io.html gcc-4.8.2/libstdc++-v3/doc/html/manual/io.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/io.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/io.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 13.Â  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 13.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 13.Â  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 13.Â 
+   Input and Output
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>ChapterÂ 13.Â 
+   Input and Output
+-  <a id="idp16257600" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
++  <a id="idm269999273616" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
+       only include the headers you really need.  Many people simply include
+       &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
+       your runtime as well.</em></span>  Here are some tips on which header to use
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/io_and_c.html gcc-4.8.2/libstdc++-v3/doc/html/manual/io_and_c.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/io_and_c.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/io_and_c.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="ChapterÂ 14.Â  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="ChapterÂ 14.Â  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
+   Input and Output
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/iterators.html gcc-4.8.2/libstdc++-v3/doc/html/manual/iterators.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/iterators.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/iterators.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 10.Â  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="ChapterÂ 11.Â  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 10.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 10.Â  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="ChapterÂ 11.Â  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 10.Â 
+   Iterators
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>ChapterÂ 10.Â 
+   Iterators
+-  <a id="idp16156992" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
++  <a id="idm269999374096" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
+      The following
+ FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
+ iterators are not implemented as pointers.  They are a generalization
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/license.html gcc-4.8.2/libstdc++-v3/doc/html/manual/license.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/license.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/license.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="prev" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 1.Â Status</th><td width="20%" align="right">Â <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="prev" href="status.html" title="ChapterÂ 1.Â Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 1.Â Status</th><td width="20%" align="right">Â <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
+     There are two licenses affecting GNU libstdc++: one for the code,
+     and one for the documentation.
+     </p><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/localization.html gcc-4.8.2/libstdc++-v3/doc/html/manual/localization.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/localization.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/localization.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 8.Â  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="strings.html" title="ChapterÂ 7.Â  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 8.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 8.Â  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="strings.html" title="ChapterÂ 7.Â  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 8.Â 
+   Localization
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>ChapterÂ 8.Â 
+   Localization
+-  <a id="idp15701088" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
++  <a id="idm269999830208" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
+ Describes the basic locale object, including nested
+ classes id, facet, and the reference-counted implementation object,
+ class _Impl.
+@@ -402,29 +402,29 @@
+        What should non-required facet instantiations do?  If the
+        generic implementation is provided, then how to end-users
+        provide specializations?
+-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15744064"></a><p><span class="citetitle"><em class="citetitle">
++   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999787232"></a><p><span class="citetitle"><em class="citetitle">
+       The GNU C Library
+     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2007 FSF. </span><span class="pagenums">
+       Chapters 6 Character Set Handling and 7 Locales and
+       Internationalization
+-    . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
++    . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
+       Correspondence
+-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idp15751920"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright Â© 2002 . </span></p></div><div class="biblioentry"><a id="idm269999779376"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 14882:1998 Programming languages - C++
+-    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15754208"></a><p><span class="citetitle"><em class="citetitle">
++    </em>. </span><span class="copyright">Copyright Â© 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999777088"></a><p><span class="citetitle"><em class="citetitle">
+       ISO/IEC 9899:1999 Programming languages - C
+-    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
++    </em>. </span><span class="copyright">Copyright Â© 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.opengroup.org/austin/" target="_top">
+       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ 	</a>
+       </em>. </span><span class="copyright">Copyright Â© 2008 
+ 	The Open Group/The Institute of Electrical and Electronics
+ 	Engineers, Inc.
+-      . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
+       The C++ Programming Language, Special Edition
+     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley
+-      . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
+       Standard C++ IOStreams and Locales
+     </em>. </span><span class="subtitle">
+       Advanced Programmer's Guide and Reference
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/make.html gcc-4.8.2/libstdc++-v3/doc/html/manual/make.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/make.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/make.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="ChapterÂ 3.Â Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 2.Â Setup</th><td width="20%" align="right">Â <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="ChapterÂ 2.Â Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="ChapterÂ 3.Â Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 2.Â Setup</th><td width="20%" align="right">Â <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
+       <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
+       Instructions</a> first.  Read <span class="emphasis"><em>all of them</em></span>.
+       <span class="emphasis"><em>Twice.</em></span>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/memory.html gcc-4.8.2/libstdc++-v3/doc/html/manual/memory.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/memory.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/memory.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
+   Utilities
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
+@@ -92,7 +92,7 @@
+     or loading and unloading shared objects in memory. As such, using
+     caching allocators on systems that do not support
+     <code class="function">abi::__cxa_atexit</code> is not recommended.
+-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13920976"></a>Interface Design</h5></div></div></div><p>
++  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001611968"></a>Interface Design</h5></div></div></div><p>
+      The only allocator interface that
+      is supported is the standard C++ interface. As such, all STL
+      containers have been adjusted, and all external allocators have
+@@ -105,7 +105,7 @@
+    </p><p>
+      The base class that <code class="classname">allocator</code> is derived from
+      may not be user-configurable.
+-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13924528"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001608416"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
+      It's difficult to pick an allocation strategy that will provide
+    maximum utility, without excessively penalizing some behavior. In
+    fact, it's difficult just deciding which typical actions to measure
+@@ -142,7 +142,7 @@
+      The current default choice for
+      <code class="classname">allocator</code> is
+      <code class="classname">__gnu_cxx::new_allocator</code>.
+-   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13937824"></a>Disabling Memory Caching</h5></div></div></div><p>
++   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001595120"></a>Disabling Memory Caching</h5></div></div></div><p>
+       In use, <code class="classname">allocator</code> may allocate and
+       deallocate using implementation-specific strategies and
+       heuristics. Because of this, a given call to an allocator object's
+@@ -309,33 +309,33 @@
+ 	 of the used and unused memory locations. It has its own
+ 	 <a class="link" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator">chapter</a>
+          in the documentation.
+-       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13992848"></a><p><span class="citetitle"><em class="citetitle">
++       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270000084224"></a><p><span class="citetitle"><em class="citetitle">
+     ISO/IEC 14882:1998 Programming languages - C++
+     </em>. </span>
+       isoc++_1998
+-    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
+-	<a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
++    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
++	<a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
+       The Standard Librarian: What Are Allocators Good For?
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ 	C/C++ Users Journal
+-      . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.hoard.org/" target="_top">
+       The Hoard Memory Allocator
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idp14001184"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm270000075840"></a><p><span class="title"><em>
+ 	<a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
+       Reconsidering Custom Memory Allocation
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright Â© 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idp14007344"></a><p><span class="title"><em>
++      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright Â© 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm270000069680"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
+       Allocator Types
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
+ 	C/C++ Users Journal
+-      . </span></span></p></div><div class="biblioentry"><a id="idp14012080"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
++      . </span></span></p></div><div class="biblioentry"><a id="idm270000064944"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright Â© 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
+ 	Addison Wesley
+-      . </span></span></p></div><div class="biblioentry"><a id="idp14016512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
++      . </span></span></p></div><div class="biblioentry"><a id="idm270000060512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
+    happen with misuse of the <code class="classname">auto_ptr</code> class
+    template (called <acronym class="acronym">AP</acronym> here) would take some
+    time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
+@@ -445,7 +445,7 @@
+ Derived classes override those functions to destroy resources in a context
+ where the correct dynamic type is known. This is an application of the
+ technique known as type erasure.
+-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15512272"></a>Class Hierarchy</h5></div></div></div><p>
++  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270000019344"></a>Class Hierarchy</h5></div></div></div><p>
+ A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
+ type <span class="type">T*</span> and an object of type
+ <code class="classname">__shared_count</code>. The shared_count contains a
+@@ -492,9 +492,9 @@
+ aliasing constructor, make_shared &amp; allocate_shared. Additionally,
+ the constructors taking <code class="classname">auto_ptr</code> parameters are
+ deprecated in C++11 mode.
+-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
++    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
+ The
+-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
++<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
+ Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
+ objects offer the same level of thread safety as built-in types."
+ The implementation must ensure that concurrent updates to separate shared_ptr
+@@ -537,7 +537,7 @@
+ shared_ptr in libstdc++ the compiler and library are fixed, which
+ makes things much simpler: we have an atomic CAS or we don't, see Lock
+ Policy below for details.
+-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15542080"></a>Selecting Lock Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999989536"></a>Selecting Lock Policy</h5></div></div></div><p>
+     </p><p>
+ There is a single <code class="classname">_Sp_counted_base</code> class,
+ which is a template parameterized on the enum
+@@ -578,7 +578,7 @@
+        <code class="filename">ext/atomicity.h</code>, which detect if the program
+        is multi-threaded.  If only one thread of execution exists in
+        the program then less expensive non-atomic operations are used.
+-     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15556704"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
++     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999974912"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
+ <code class="code">const_pointer_cast</code></span></dt><dd><p>
+ As noted in N2351, these functions can be implemented non-intrusively using
+ the alias constructor.  However the aliasing constructor is only available
+@@ -611,13 +611,13 @@
+ As well as the extra constructors, this implementation also needs some
+ members of _Sp_counted_deleter to be protected where they could otherwise
+ be private.
+-    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15573056"></a>Examples</h5></div></div></div><p>
++    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999958496"></a>Examples</h5></div></div></div><p>
+       Examples of use can be found in the testsuite, under
+       <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
+       <code class="filename">testsuite/20_util/shared_ptr</code>
+       and
+       <code class="filename">testsuite/20_util/weak_ptr</code>.
+-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
++    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
+       The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
+       clause in the C++11 standard is not implemented in GCC.
+     </p><p>
+@@ -658,25 +658,25 @@
+     code to work with, Peter Dimov in particular for his help and
+     invaluable advice on thread safety.  Phillip Jordan and Paolo
+     Carlini for the lock policy implementation.
+-  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15587936"></a><p><span class="title"><em>
++  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999943680"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
+       Improving shared_ptr for C++0x, Revision 2
+ 	</a>
+       </em>. </span><span class="subtitle">
+       N2351
+-    . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
++    . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
+ 	<a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
+       C++ Standard Library Active Issues List
+ 	</a>
+       </em>. </span><span class="subtitle">
+       N2456
+-    . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
++    . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
+       Working Draft, Standard for Programming Language C++
+ 	</a>
+       </em>. </span><span class="subtitle">
+       N2461
+-    . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
++    . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
+ 	<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
+       Boost C++ Libraries documentation, shared_ptr
+ 	</a>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator.html gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 20.Â The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 20.Â The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 20.Â The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 20.Â The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>ChapterÂ 20.Â The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>ChapterÂ 20.Â The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
+ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
+   The mt allocator [hereinafter referred to simply as "the allocator"]
+   is a fixed size (power of two) allocator that was initially
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_design.html gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_design.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_design.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_design.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
+ describing the characteristics of the memory pool, a policy class
+ containing this pool that links instantiation types to common or
+ individual pools, and a class inheriting from the policy class that is
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="ChapterÂ 21.Â The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
+ In the ST example we never used the thread_id variable present in each block.
+ Let's start by explaining the purpose of this in a MT application.
+ </p><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
+ Let's start by describing how the data on a freelist is laid out in memory.
+ This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
+ </p><pre class="programlisting">
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_impl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_impl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/mt_allocator_impl.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/mt_allocator_impl.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 20.Â The mt_allocator</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
+ exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
+ these parameters, which include settings for
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/numerics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/numerics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/numerics.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/numerics.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 12.Â  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="algorithms.html" title="ChapterÂ 11.Â  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 12.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 12.Â  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="algorithms.html" title="ChapterÂ 11.Â  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 12.Â 
+   Numerics
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>ChapterÂ 12.Â 
+   Numerics
+-  <a id="idp16214640" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
++  <a id="idm269999316576" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
+     </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
+       <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/numerics_and_c.html gcc-4.8.2/libstdc++-v3/doc/html/manual/numerics_and_c.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/numerics_and_c.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/numerics_and_c.html	2014-03-30 20:21:40.787599840 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="ChapterÂ 13.Â  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 12.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="ChapterÂ 12.Â  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="ChapterÂ 13.Â  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 12.Â 
+   Numerics
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/pairs.html gcc-4.8.2/libstdc++-v3/doc/html/manual/pairs.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/pairs.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/pairs.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
+   Utilities
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode.html gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 18.Â Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 18.Â Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 18.Â Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 18.Â Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>ChapterÂ 18.Â Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
++</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>ChapterÂ 18.Â Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
+ implementation of many algorithms the C++ Standard Library.
+ </p><p>
+ Several of the standard algorithms, for instance
+@@ -12,11 +12,11 @@
+ specific compiler flag.
+ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
+ <code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
+-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp16926864"></a><p><span class="citetitle"><em class="citetitle">
++<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998604464"></a><p><span class="citetitle"><em class="citetitle">
+       Parallelization of Bulk Operations for STL Dictionaries
+     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright Â© 2007 . </span><span class="publisher"><span class="publishername">
+ 	Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
+-      . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
++      . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
+       The Multi-Core Standard Template Library
+     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright Â© 2007 . </span><span class="publisher"><span class="publishername">
+ 	 Euro-Par 2007: Parallel Processing. (LNCS 4641)
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_design.html gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_design.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_design.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_design.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
+   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
+ All parallel algorithms are intended to have signatures that are
+ equivalent to the ISO C++ algorithms replaced. For instance, the
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
+ i.e. user-defined functors must not throw exceptions.
+ Also, the order of execution is not guaranteed for some functions, of course.
+ Therefore, user-defined functors should not have any concurrent side effects.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_test.html gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_test.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_test.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_test.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
+     Both the normal conformance and regression tests and the
+     supplemental performance tests work.
+   </p><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_using.html gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_using.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/parallel_mode_using.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/parallel_mode_using.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 18.Â Parallel Mode</th><td width="20%" align="right">Â <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
+   Any use of parallel functionality requires additional compiler
+   and runtime support, in particular support for OpenMP. Adding this support is
+   not difficult: just compile your application with the compiler
+@@ -62,4 +62,4 @@
+ flags for atomic operations.)
+ </p><p> The following table provides the names and headers of all the
+   parallel algorithms that can be used in a similar manner:
+-</p><div class="table"><a id="idp16725920"></a><p class="title"><strong>TableÂ 18.1.Â Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">SemanticsÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â Design</td></tr></table></div></body></html>
+\ No newline at end of file
++</p><div class="table"><a id="idm269998805216"></a><p class="title"><strong>TableÂ 18.1.Â Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">SemanticsÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â Design</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
+     For a given container type in this library, the test creates
+     an object of the container type and an object of the
+     corresponding standard type (e.g., <code class="classname">std::set</code>). It
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures.html gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 22.Â Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 22.Â Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>ChapterÂ 22.Â Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
++</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>ChapterÂ 22.Â Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
+ 	    Configuring via Template Parameters
+ 	  </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ 	    Querying Container Attributes
+@@ -248,7 +248,7 @@
+ 		these invariants, one must supply some policy that is aware
+ 		of these changes.  Without this, it would be better to use a
+ 		linked list (in itself very efficient for these purposes).
+-	      </p></li></ol></div><div class="figure"><a id="idp17613296"></a><p class="title"><strong>FigureÂ 22.1.Â Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
++	      </p></li></ol></div><div class="figure"><a id="idm269997917584"></a><p class="title"><strong>FigureÂ 22.1.Â Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ 	    The standard C++ library contains associative containers based on
+ 	    red-black trees and collision-chaining hash tables. These are
+ 	    very useful, but they are not ideal for all types of
+@@ -256,7 +256,7 @@
+ 	  </p><p>
+ 	    The figure below shows the different underlying data structures
+ 	    currently supported in this library.
+-	  </p><div class="figure"><a id="idp17619952"></a><p class="title"><strong>FigureÂ 22.2.Â Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
++	  </p><div class="figure"><a id="idm269997910864"></a><p class="title"><strong>FigureÂ 22.2.Â Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
+ 	    A shows a collision-chaining hash-table, B shows a probing
+ 	    hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ 	    a tree based on an ordered vector(implicit in the order of the
+@@ -375,7 +375,7 @@
+ 	      no guarantee that the elements traversed will coincide with the
+ 	      <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
+ 	      label B.
+-	    </p><div class="figure"><a id="idp17651648"></a><p class="title"><strong>FigureÂ 22.3.Â Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
++	    </p><div class="figure"><a id="idm269997879168"></a><p class="title"><strong>FigureÂ 22.3.Â Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
+ 	      In our opinion, this problem is not caused just because
+ 	      red-black trees are order preserving while
+ 	      collision-chaining hash tables are (generally) not - it
+@@ -426,7 +426,7 @@
+ 	      list, as in the graphic below, label B.  Here the iterators are as
+ 	      light as can be, but the hash-table's operations are more
+ 	      complicated.
+-	    </p><div class="figure"><a id="idp17666528"></a><p class="title"><strong>FigureÂ 22.4.Â Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
++	    </p><div class="figure"><a id="idm269997864256"></a><p class="title"><strong>FigureÂ 22.4.Â Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
+ 	      It should be noted that containers based on collision-chaining
+ 	      hash-tables are not the only ones with this type of behavior;
+ 	      many other self-organizing data structures display it as well.
+@@ -442,7 +442,7 @@
+ 	      container. The graphic below shows three cases: A1 and A2 show
+ 	      a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ 	      show a collision-chaining hash table.
+-	    </p><div class="figure"><a id="idp17675840"></a><p class="title"><strong>FigureÂ 22.5.Â Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
++	    </p><div class="figure"><a id="idm269997855056"></a><p class="title"><strong>FigureÂ 22.5.Â Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ 		  Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ 		  be de-referenced and incremented. The sequence of iterators
+ 		  changed, but in a way that is well-defined by the interface.
+@@ -678,7 +678,7 @@
+ 	    typically less structured than an associative container's tree;
+ 	    the third simply uses an associative container. These are
+ 	    shown in the figure below with labels A1 and A2, B, and C.
+-	  </p><div class="figure"><a id="idp17743424"></a><p class="title"><strong>FigureÂ 22.6.Â Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
++	  </p><div class="figure"><a id="idm269997787392"></a><p class="title"><strong>FigureÂ 22.6.Â Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
+ 	    No single implementation can completely replace any of the
+ 	    others. Some have better <code class="function">push</code>
+ 	    and <code class="function">pop</code> amortized performance, some have
+@@ -1098,7 +1098,7 @@
+ 	  </span>. </span><span class="publisher"><span class="publishername">
+ 	  Proceedings of International Conference on Very Large Data Bases
+ 	. </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
+-	<a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
++	<a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
+ 	  Deamortization - Part 2: Binomial Heaps
+ 	</a>
+       </em>. </span><span class="date">
+@@ -1190,7 +1190,7 @@
+ 	    </span>. </span><span class="publisher"><span class="publishername">
+ 	  Addison-Wesley Publishing Company
+ 	. </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
+-	<a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
++	<a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
+ 	</a>
+       </em>. </span><span class="date">
+ 	January 1996
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="ChapterÂ 23.Â HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
+       Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+       Laboratories), and Benjamin Kosnik (Red Hat).
+     </p><p>
+-      This library was partially written at
+-      <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
++      This library was partially written at IBM's Haifa Research Labs.
+       It is based heavily on policy-based design and uses many useful
+       techniques from Modern C++ Design: Generic Programming and Design
+       Patterns Applied by Andrei Alexandrescu.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_design.html gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_design.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_design.html	2014-03-30 20:21:40.790933283 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
+ 	Associative containers are typically parametrized by various
+ 	policies. For example, a hash-based associative container is
+ 	parametrized by a hash-functor, transforming each key into an
+@@ -170,7 +170,7 @@
+ 	  naturally; collision-chaining hash tables (label B) store
+ 	  equivalent-key values in the same bucket, the bucket can be
+ 	  arranged so that equivalent-key values are consecutive.
+-	</p><div class="figure"><a id="idp18000448"></a><p class="title"><strong>FigureÂ 22.8.Â Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
++	</p><div class="figure"><a id="idm269997530416"></a><p class="title"><strong>FigureÂ 22.8.Â Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
+ 	  Put differently, the standards' non-unique mapping
+ 	  associative-containers are associative containers that map
+ 	  primary keys to linked lists that are embedded into the
+@@ -252,7 +252,7 @@
+ 	  first graphic above. Labels A and B, respectively. Each shaded
+ 	  box represents some size-type or secondary
+ 	  associative-container.
+-	</p><div class="figure"><a id="idp18023952"></a><p class="title"><strong>FigureÂ 22.10.Â Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
++	</p><div class="figure"><a id="idm269997506912"></a><p class="title"><strong>FigureÂ 22.10.Â Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
+ 	  In the first example above, then, one would use an associative
+ 	  container mapping each user to an associative container which
+ 	  maps each application id to a start time (see
+@@ -305,7 +305,7 @@
+ 	shows invariants for order-preserving containers: point-type
+ 	iterators are synonymous with range-type iterators.
+ 	Orthogonally,  <span class="emphasis"><em>C</em></span>shows invariants for "set"
+-	containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18043824"></a><p class="title"><strong>FigureÂ 22.11.Â Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
++	containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269997487104"></a><p class="title"><strong>FigureÂ 22.11.Â Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
+ 	(hash-based associative containers) lack movement
+ 	operators, such as <code class="literal">operator++</code> - in fact, this
+ 	is the reason why this library differentiates from the standard C++ librarys
+@@ -344,7 +344,7 @@
+ 	  to the question of whether point-type iterators and range-type
+ 	  iterators are valid. The graphic below shows tags corresponding to
+ 	  different types of invalidation guarantees.
+-	</p><div class="figure"><a id="idp18057168"></a><p class="title"><strong>FigureÂ 22.12.Â Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
++	</p><div class="figure"><a id="idm269997473760"></a><p class="title"><strong>FigureÂ 22.12.Â Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ 	      <code class="classname">basic_invalidation_guarantee</code>
+ 	      corresponds to a basic guarantee that a point-type iterator,
+ 	      a found pointer, or a found reference, remains valid as long
+@@ -428,7 +428,7 @@
+ 	</p><p>
+ 	  This library contains a container tag hierarchy corresponding to the
+ 	  diagram below.
+-	</p><div class="figure"><a id="idp18087392"></a><p class="title"><strong>FigureÂ 22.13.Â Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
++	</p><div class="figure"><a id="idm269997443664"></a><p class="title"><strong>FigureÂ 22.13.Â Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
+ 	  Given any container <span class="type">Cntnr</span>, the tag of
+ 	  the underlying data structure can be found via <code class="literal">typename
+ 	  Cntnr::container_category</code>.
+@@ -487,7 +487,7 @@
+ 	collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
+ 	  sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
+ 	other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
+-	    involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18127536"></a><p class="title"><strong>FigureÂ 22.14.Â Hash functions, ranged-hash functions, and
++	    involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269997403584"></a><p class="title"><strong>FigureÂ 22.14.Â Hash functions, ranged-hash functions, and
+ 	      range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
+ 	    strings of 3 characters). A hash-table algorithm needs to map
+ 	    elements of U "uniformly" into the range [0,..., m -
+@@ -504,7 +504,7 @@
+ 	    Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
+ 	    range upper-bound into a non-negative integral in the range
+ 	    between 0 (inclusive) and the range upper bound (exclusive),
+-	    i.e., for any r in Z<sub>+</sub>,</p><p>0 â€ g(r, m) â€ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idp18141344"></a><p class="title"><strong>EquationÂ 22.1.Â Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
++	    i.e., for any r in Z<sub>+</sub>,</p><p>0 â€ g(r, m) â€ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm269997389776"></a><p class="title"><strong>EquationÂ 22.1.Â Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+ 		f(u , m) = g(h(u), m)
+ 	      </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
+ 	    h, f can always be composed (however the converse
+@@ -524,7 +524,7 @@
+ 	    transforming the sequence of hash values into a sequence of
+ 	    positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
+ 	    division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
+-	    as</p><div class="equation"><a id="idp18147232"></a><p class="title"><strong>EquationÂ 22.2.Â Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
++	    as</p><div class="equation"><a id="idm269997383888"></a><p class="title"><strong>EquationÂ 22.2.Â Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+ 		g(r, m) = r mod m
+ 	      </span></div></div><br class="equation-break" /><p>g(r, m) = â u/v ( a r mod v ) â</p><p>and</p><p>g(r, m) = â u/v ( r<sup>2</sup> mod v ) â</p><p>respectively, for some positive integrals u and
+ 	    v (typically powers of 2), and some a. Each of
+@@ -535,9 +535,9 @@
+ 	    implement using the low
+ 	    level % (modulo) operation (for any m), or the
+ 	    low level &amp; (bit-mask) operation (for the case where
+-	    m is a power of 2), i.e.,</p><div class="equation"><a id="idp18151744"></a><p class="title"><strong>EquationÂ 22.3.Â Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
++	    m is a power of 2), i.e.,</p><div class="equation"><a id="idm269997379376"></a><p class="title"><strong>EquationÂ 22.3.Â Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+ 		g(r, m) = r % m
+-	      </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18153568"></a><p class="title"><strong>EquationÂ 22.4.Â Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
++	      </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269997377552"></a><p class="title"><strong>EquationÂ 22.4.Â Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+ 		g(r, m) = r &amp; m - 1, (with m =
+ 		2<sup>k</sup> for some k)
+ 	      </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
+@@ -563,7 +563,7 @@
+ 	      s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
+ 	    </p><p>be a string of t characters, each of which is from
+ 	    domain S. Consider the following ranged-hash
+-	    function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>EquationÂ 22.5.Â 
++	    function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>EquationÂ 22.5.Â 
+ 		A Standard String Hash Function
+ 	      </strong></p><div class="equation-contents"><span class="mathphrase">
+ 		f<sub>1</sub>(s, m) = â <sub>i =
+@@ -575,7 +575,7 @@
+ 	    of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 	    'T'}). In this case, scanning the entire string might be
+ 	    prohibitively expensive. A possible alternative might be to use
+-	    only the first k characters of the string, where</p><p>|S|<sup>k</sup> â¥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idp18169344"></a><p class="title"><strong>EquationÂ 22.6.Â 
++	    only the first k characters of the string, where</p><p>|S|<sup>k</sup> â¥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm269997361840"></a><p class="title"><strong>EquationÂ 22.6.Â 
+ 		Only k String DNA Hash
+ 	      </strong></p><div class="equation-contents"><span class="mathphrase">
+ 		f<sub>2</sub>(s, m) = â <sub>i
+@@ -606,12 +606,12 @@
+ 	      the container transforms the key into a non-negative integral
+ 	      using the hash functor (points B and C), and transforms the
+ 	      result into a position using the combining functor (points D
+-	      and E).</p><div class="figure"><a id="idp18191968"></a><p class="title"><strong>FigureÂ 22.15.Â Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
++	      and E).</p><div class="figure"><a id="idm269997339216"></a><p class="title"><strong>FigureÂ 22.15.Â Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
+ 	      hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
+ 	      a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
+ 	      diagram. The user inserts an element (point A), the container
+ 	      transforms the key into a position using the combining functor
+-	      (points B and C).</p><div class="figure"><a id="idp18199024"></a><p class="title"><strong>FigureÂ 22.16.Â Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
++	      (points B and C).</p><div class="figure"><a id="idm269997332160"></a><p class="title"><strong>FigureÂ 22.16.Â Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
+ 		Probing tables
+ 	      </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
+ 	      <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
+@@ -634,7 +634,7 @@
+ 		a linear probe and a quadratic probe function,
+ 		respectively.</p></li></ol></div><p>
+ 		The graphic below shows the relationships.
+-	      </p><div class="figure"><a id="idp18215840"></a><p class="title"><strong>FigureÂ 22.17.Â Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
++	      </p><div class="figure"><a id="idm269997315408"></a><p class="title"><strong>FigureÂ 22.17.Â Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
+ 	    shrink. It is necessary to specify policies to determine how
+ 	    and when a hash table should change its size. Usually, resize
+ 	    policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
+@@ -667,10 +667,10 @@
+ 	    and some load factor be denoted by Î. We would like to
+ 	    calculate the minimal length of k, such that if there were Î
+ 	    m elements in the hash table, a probe sequence of length k would
+-	    be found with probability at most 1/m.</p><div class="figure"><a id="idp18234944"></a><p class="title"><strong>FigureÂ 22.18.Â Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
++	    be found with probability at most 1/m.</p><div class="figure"><a id="idm269997296368"></a><p class="title"><strong>FigureÂ 22.18.Â Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
+ 	    k appears in bin i by p<sub>i</sub>, the
+ 	    length of the probe sequence of bin i by
+-	    l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>EquationÂ 22.7.Â 
++	    l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>EquationÂ 22.7.Â 
+ 		Probability of Probe Sequence of Length k
+ 	      </strong></p><div class="equation-contents"><span class="mathphrase">
+ 		p<sub>1</sub> = 
+@@ -684,7 +684,7 @@
+ 	    l<sub>i</sub> are negatively-dependent
+ 	    (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
+ 	    . Let
+-	    I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>EquationÂ 22.8.Â 
++	    I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>EquationÂ 22.8.Â 
+ 		Probability Probe Sequence in Some Bin
+ 	      </strong></p><div class="equation-contents"><span class="mathphrase">
+ 		P( exists<sub>i</sub> l<sub>i</sub> â¥ k ) = 
+@@ -723,7 +723,7 @@
+ 	      a resize is needed, and if so, what is the new size (points D
+ 	      to G); following the resize, it notifies the policy that a
+ 	      resize has completed (point H); finally, the element is
+-	      inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18265728"></a><p class="title"><strong>FigureÂ 22.19.Â Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
++	      inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269997265648"></a><p class="title"><strong>FigureÂ 22.19.Â Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
+ 	      decomposed to a size policy and a trigger policy. Consequently,
+ 	      the library contains a single class for instantiating a resize
+ 	      policy: <code class="classname">hash_standard_resize_policy</code>
+@@ -732,8 +732,8 @@
+ 	      both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
+ 	      to these policies.</p><p>The two graphics immediately below show sequence diagrams
+ 	      illustrating the interaction between the standard resize policy
+-	      and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18273504"></a><p class="title"><strong>FigureÂ 22.20.Â Standard resize policy trigger sequence
+-		diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idp18277664"></a><p class="title"><strong>FigureÂ 22.21.Â Standard resize policy size sequence
++	      and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269997257872"></a><p class="title"><strong>FigureÂ 22.20.Â Standard resize policy trigger sequence
++		diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm269997253712"></a><p class="title"><strong>FigureÂ 22.21.Â Standard resize policy size sequence
+ 		diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
+ 	      instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
+ 		implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
+@@ -876,7 +876,7 @@
+ 	  each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
+ 	  each node the size of the sub-tree rooted at the node; the
+ 	  second stores at each node the maximal endpoint of the
+-	  intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18355696"></a><p class="title"><strong>FigureÂ 22.22.Â Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
++	  intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269997175616"></a><p class="title"><strong>FigureÂ 22.22.Â Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
+ 	  reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
+ 	    should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
+ 	    invariants.  The graphic below shows how a right rotation,
+@@ -890,7 +890,7 @@
+ 	    metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
+ 	    can support. Besides the usual <code class="classname">find</code> method, the
+ 	    first tree can support a <code class="classname">find_by_order</code> method, while
+-	    the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18365136"></a><p class="title"><strong>FigureÂ 22.23.Â Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
++	    the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269997166176"></a><p class="title"><strong>FigureÂ 22.23.Â Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
+ 	  node iterators, and template-template node updater
+ 	  parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
+ 	    types, <code class="classname">const_node_iterator</code>
+@@ -919,7 +919,7 @@
+ 	    <code class="classname">node_update</code> class, and publicly subclasses
+ 	    <code class="classname">node_update</code>. The graphic below shows this
+ 	    scheme, as well as some predefined policies (which are explained
+-	    below).</p><div class="figure"><a id="idp18378304"></a><p class="title"><strong>FigureÂ 22.24.Â A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
++	    below).</p><div class="figure"><a id="idm269997153072"></a><p class="title"><strong>FigureÂ 22.24.Â A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
+ 	    <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
+ 	    the type of metadata it requires. For order statistics,
+ 	    e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
+@@ -938,7 +938,7 @@
+ 	    <code class="classname">nd_it</code>. For example, say node x in the
+ 	    graphic below label A has an invalid invariant, but its' children,
+ 	    y and z have valid invariants. After the invocation, all three
+-	    nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18389968"></a><p class="title"><strong>FigureÂ 22.25.Â Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
++	    nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269997141408"></a><p class="title"><strong>FigureÂ 22.25.Â Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
+ 	    it invokes this method in its <code class="classname">node_update</code> base to
+ 	    restore the invariant. For example, the graphic below shows
+ 	    an <code class="function">insert</code> operation (point A); the tree performs some
+@@ -946,7 +946,7 @@
+ 	    C, and D). (It is well known that any <code class="function">insert</code>,
+ 	    <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
+ 	    all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
+-	    .</p><div class="figure"><a id="idp18398144"></a><p class="title"><strong>FigureÂ 22.26.Â Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
++	    .</p><div class="figure"><a id="idm269997133232"></a><p class="title"><strong>FigureÂ 22.26.Â Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
+ 	    need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
+ 	      method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
+ 	      tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
+@@ -988,7 +988,7 @@
+ 	      node's metadata (this is halting reducible). In the graphic
+ 	      below, assume the shaded node is inserted. The tree would have
+ 	      to traverse the useless path shown to the root, applying
+-	      redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18420400"></a><p class="title"><strong>FigureÂ 22.27.Â Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
++	      redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269997110976"></a><p class="title"><strong>FigureÂ 22.27.Â Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
+ 	    solves both these problems. The tree detects that node
+ 	    invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
+ 	  It is possible to split a tree so that it passes
+@@ -1071,7 +1071,7 @@
+ 	  sub-tree with leafs "a" and "as". The maximal common prefix is
+ 	  "a". The internal node contains, consequently, to const
+ 	  iterators, one pointing to <code class="varname">'a'</code>, and the other to
+-	  <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18465088"></a><p class="title"><strong>FigureÂ 22.28.Â A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
++	  <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269997066288"></a><p class="title"><strong>FigureÂ 22.28.Â A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
+ 	  tree-based containers. There are two minor
+ 	  differences, though, which, unfortunately, thwart sharing them
+ 	  sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
+@@ -1080,7 +1080,7 @@
+ 	    parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
+ 	    trie-based containers (at least in this implementation) store
+ 	    values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
+-	  policies (which are explained below).</p><div class="figure"><a id="idp18475584"></a><p class="title"><strong>FigureÂ 22.29.Â A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
++	  policies (which are explained below).</p><div class="figure"><a id="idm269997055856"></a><p class="title"><strong>FigureÂ 22.29.Â A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
+ 	  updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ 		<code class="classname">trie_order_statistics_node_update</code>
+ 		supports order statistics.
+@@ -1128,7 +1128,7 @@
+ 	  simple list of integer keys. If we search for the integer 6, we
+ 	  are paying an overhead: the link with key 6 is only the fifth
+ 	  link; if it were the first link, it could be accessed
+-	  faster.</p><div class="figure"><a id="idp18506160"></a><p class="title"><strong>FigureÂ 22.30.Â A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
++	  faster.</p><div class="figure"><a id="idm269997025344"></a><p class="title"><strong>FigureÂ 22.30.Â A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
+ 	  accessed. They try to determine, by the access history, which
+ 	  keys to move to the front of the list. Some of these algorithms
+ 	  require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
+@@ -1138,7 +1138,7 @@
+ 	  predetermined value, say 10, as shown in label C, the count is set
+ 	  to 0 and the node is moved to the front of the list, as in label
+ 	  D.
+-	  </p><div class="figure"><a id="idp18511744"></a><p class="title"><strong>FigureÂ 22.31.Â The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
++	  </p><div class="figure"><a id="idm269997019760"></a><p class="title"><strong>FigureÂ 22.31.Â The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
+ 	  implementing any algorithm moving nodes to the front of the
+ 	  list (policies implementing algorithms interchanging nodes are
+ 	  unsupported).</p><p>Associative containers based on lists are parametrized by a
+@@ -1310,7 +1310,7 @@
+ 	  sequence; the second uses a tree (or forest of trees), which is
+ 	  typically less structured than an associative container's tree;
+ 	  the third simply uses an associative container. These are
+-	  shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18575568"></a><p class="title"><strong>FigureÂ 22.32.Â Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
++	  shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269996955920"></a><p class="title"><strong>FigureÂ 22.32.Â Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
+ 	  from a priority queue must incur a logarithmic expense (in the
+ 	  amortized sense). Any priority queue implementation that would
+ 	  avoid this, would violate known bounds on comparison-based
+@@ -1390,7 +1390,7 @@
+ 	  container <code class="classname">Cntnr</code>, the tag of the underlying
+ 	  data structure can be found via <code class="classname">typename 
+ 	  Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
+-	  </p><div class="figure"><a id="idp18610544"></a><p class="title"><strong>FigureÂ 22.33.Â Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
++	  </p><div class="figure"><a id="idm269996920880"></a><p class="title"><strong>FigureÂ 22.33.Â Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
+ 	  container type for its attributes. Given any container
+ 	  <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
+ 	  is a traits class identifying the properties of the
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_using.html gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/policy_data_structures_using.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/policy_data_structures_using.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="ChapterÂ 22.Â Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 22.Â Policy-Based Data Structures</th><td width="20%" align="right">Â <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
+       other libraries except the standard C++ library . All classes are
+       defined in namespace <code class="code">__gnu_pbds</code>. The library internally
+       uses macros beginning with <code class="code">PB_DS</code>, but
+@@ -61,7 +61,7 @@
+ 	In addition, there are the following diagnostics classes,
+ 	used to report errors specific to this library's data
+ 	structures.
+-      </p><div class="figure"><a id="idp17806128"></a><p class="title"><strong>FigureÂ 22.7.Â Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
++      </p><div class="figure"><a id="idm269997724688"></a><p class="title"><strong>FigureÂ 22.7.Â Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
+ 	  For the most part, the policy-based containers containers in
+ 	  namespace <code class="literal">__gnu_pbds</code> have the same interface as
+ 	  the equivalent containers in the standard C++ library, except for
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 19.Â Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 19.Â Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 19.Â Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="PartÂ III.Â  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 19.Â Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a>Â </td><th width="60%" align="center">PartÂ III.Â 
+   Extensions
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>ChapterÂ 19.Â Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>ChapterÂ 19.Â Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
+   <span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
+   recognition of suboptimal usage patterns of the standard library.
+   </p><p>
+@@ -137,7 +137,7 @@
+    call context.
+    (Environment variable not supported.)
+    </p></li></ul></div><p>
+-  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp17395456"></a><p><span class="citetitle"><em class="citetitle">
++  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998135936"></a><p><span class="citetitle"><em class="citetitle">
+       Perflint: A Context Sensitive Performance Advisor for C++ Programs
+     </em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright Â© 2009 . </span><span class="publisher"><span class="publishername">
+ 	Proceedings of the 2009 International Symposium on Code Generation
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_api.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_api.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_api.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_api.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
+   Many large projects use their own data structures instead of the ones in the
+   standard library.  If these data structures are similar in functionality
+   to the standard library, they can be instrumented with the same hooks
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
+   Currently, the cost model uses formulas with predefined relative weights
+   for alternative containers or container implementations.  For instance,
+   iterating through a vector is X times faster than iterating through a list.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_design.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_design.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_design.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_design.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,6 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
+-</p><div class="table"><a id="idp16981200"></a><p class="title"><strong>TableÂ 19.1.Â Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
++</p><div class="table"><a id="idm269998550064"></a><p class="title"><strong>TableÂ 19.1.Â Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
+      only included from <code class="code">impl/profiler.h</code>, which is the only
+      file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_devel.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_devel.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_devel.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_devel.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
+    <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
+    <code class="code">include/std/*</code>.
+   </p><p>Instrumented implementations are provided in
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="ChapterÂ 20.Â The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
+   The table below presents all the diagnostics we intend to implement.
+   Each diagnostic has a corresponding compile time switch
+   <code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+@@ -17,7 +17,7 @@
+   A high accuracy means that the diagnostic is unlikely to be wrong.
+   These grades are not perfect.  They are just meant to guide users with
+   specific needs or time budgets.
+-  </p><div class="table"><a id="idp17088912"></a><p class="title"><strong>TableÂ 19.2.Â Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated">Â </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
++  </p><div class="table"><a id="idm269998442544"></a><p class="title"><strong>TableÂ 19.2.Â Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated">Â </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+     CONTAINERS</a></td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
+     HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left">Â </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left">Â </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
+     HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left">Â </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left">Â </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
+@@ -374,7 +374,7 @@
+   Quick Sort for a particular call context.
+   </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
+   See papers:
+-  <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
++  <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
+   A framework for adaptive algorithm selection in STAPL</a> and
+   <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
+   Optimizing Sorting with Machine Learning Algorithms</a>.
+@@ -500,7 +500,7 @@
+   Keep a shadow for each container.  Record iterator dereferences and
+   container member accesses.  Issue advice for elements referenced by
+   multiple threads.
+-  See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
++  See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
+   The LRPD test: speculative run-time parallelization of loops with
+   privatization and reduction parallelization</a>.
+   </p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_impl.html gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_impl.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/profile_mode_impl.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/profile_mode_impl.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="ChapterÂ 19.Â Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 19.Â Profile Mode</th><td width="20%" align="right">Â <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
+   Accurate stack traces are needed during profiling since we group events by
+   call context and dynamic instance.  Without accurate traces, diagnostics
+   may be hard to interpret.  For instance, when giving advice to the user
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/setup.html gcc-4.8.2/libstdc++-v3/doc/html/manual/setup.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/setup.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/setup.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 2.Â Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 2.Â Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 2.Â Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 2.Â Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
+   Introduction
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>ChapterÂ 2.Â Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
++</th><td width="20%" align="right">Â <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>ChapterÂ 2.Â Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
+    and properly built binaries useful for linking to other software is
+    a multi-step process. Steps include getting the sources,
+    configuring and building the sources, testing, and installation.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_code_style.html gcc-4.8.2/libstdc++-v3/doc/html/manual/source_code_style.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_code_style.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/source_code_style.html	2014-03-30 20:21:40.794266726 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
+   Contributing
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_design_notes.html gcc-4.8.2/libstdc++-v3/doc/html/manual/source_design_notes.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_design_notes.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/source_design_notes.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
+   Contributing
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_organization.html gcc-4.8.2/libstdc++-v3/doc/html/manual/source_organization.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/source_organization.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/source_organization.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="prev" href="appendix_contributing.html" title="AppendixÂ A.Â  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ A.Â 
+   Contributing
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/status.html gcc-4.8.2/libstdc++-v3/doc/html/manual/status.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/status.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/status.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 1.Â Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 1.Â Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 1.Â Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 1.Â Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
+   Introduction
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>ChapterÂ 1.Â Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>ChapterÂ 1.Â Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
+ This status table is based on the table of contents of ISO/IEC 14882:2003.
+ </p><p>
+ This page describes the C++ support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp452240"></a><p class="title"><strong>TableÂ 1.1.Â C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
++</p><div class="table"><a id="idm270008034928"></a><p class="title"><strong>TableÂ 1.1.Â C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+ 	<span class="emphasis"><em>18</em></span>
+       </td><td colspan="3" align="left">
+ 	<span class="emphasis"><em>Language support</em></span>
+@@ -157,7 +157,7 @@
+ </p><p>
+ This page describes the C++11 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp8670848"></a><p class="title"><strong>TableÂ 1.2.Â C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
++</p><div class="table"><a id="idm270007982624"></a><p class="title"><strong>TableÂ 1.2.Â C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+ 	<span class="emphasis"><em>18</em></span>
+       </td><td colspan="3" align="left">
+ 	<span class="emphasis"><em>Language support</em></span>
+@@ -183,7 +183,7 @@
+       is_trivially_copy_constructible, is_trivially_move_constructible,
+       is_trivially_assignable, is_trivially_default_assignable,
+       is_trivially_copy_assignable, is_trivially_move_assignable
+-      </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left">Â </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">
++      </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left">Â </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left">Â </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">
+ 	<span class="emphasis"><em>21</em></span>
+       </td><td colspan="3" align="left">
+ 	<span class="emphasis"><em>Strings</em></span>
+@@ -302,7 +302,7 @@
+ </p><p>
+ This page describes the TR1 support in mainline GCC SVN, not in any particular
+ release.
+-</p><div class="table"><a id="idp7483200"></a><p class="title"><strong>TableÂ 1.3.Â C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left">Â </td><td align="left">
++</p><div class="table"><a id="idm270006687472"></a><p class="title"><strong>TableÂ 1.3.Â C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left">Â </td><td align="left">Â </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left">Â </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left">Â </td><td align="left">
+ 	<p>
+ 	  Uses code from
+ 	  <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
+@@ -323,7 +323,7 @@
+ </p><p>
+ This page describes the TR 24733 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp12559072"></a><p class="title"><strong>TableÂ 1.4.Â C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
++</p><div class="table"><a id="idm270002960368"></a><p class="title"><strong>TableÂ 1.4.Â C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
+ 	<span class="emphasis"><em>0</em></span>
+       </td><td colspan="3" align="left">
+ 	<span class="emphasis"><em>Introduction</em></span>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/std_contents.html gcc-4.8.2/libstdc++-v3/doc/html/manual/std_contents.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/std_contents.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/std_contents.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,9 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ II.Â  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="ChapterÂ 4.Â  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ II.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>PartÂ II.Â  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="ChapterÂ 4.Â  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">PartÂ II.Â 
+     Standard Contents
+   </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a>Â </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right">Â <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>PartÂ II.Â 
+     Standard Contents
+-  </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4. 
++  </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="support.html">4. 
+   Support
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5. 
+@@ -12,13 +12,13 @@
+ </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
+   Utilities
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
+   Strings
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
+   Localization
+   
+-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
++</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
+   Containers
+   
+ </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/streambufs.html gcc-4.8.2/libstdc++-v3/doc/html/manual/streambufs.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/streambufs.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/streambufs.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
+   Input and Output
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/strings.html gcc-4.8.2/libstdc++-v3/doc/html/manual/strings.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/strings.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/strings.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 7.Â  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="ChapterÂ 8.Â  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 7.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 7.Â  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="ChapterÂ 8.Â  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 7.Â 
+   Strings
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>ChapterÂ 7.Â 
+   Strings
+-  <a id="idp15603440" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
++  <a id="idm269999928112" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
+       Here are Standard, simple, and portable ways to perform common
+       transformations on a <code class="code">string</code> instance, such as
+       "convert to all upper case." The word transformations
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/stringstreams.html gcc-4.8.2/libstdc++-v3/doc/html/manual/stringstreams.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/stringstreams.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/stringstreams.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="ChapterÂ 13.Â  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 13.Â 
+   Input and Output
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/support.html gcc-4.8.2/libstdc++-v3/doc/html/manual/support.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/support.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/support.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 4.Â  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 4.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 4.Â  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 4.Â 
+   Support
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="std_contents.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>ChapterÂ 4.Â 
+   Support
+-  <a id="idp13745936" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
++  <a id="idm270001786944" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
+     This part deals with the functions called and objects created
+     automatically during the course of a program's existence.
+   </p><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/termination.html gcc-4.8.2/libstdc++-v3/doc/html/manual/termination.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/termination.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/termination.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 4.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="ChapterÂ 4.Â  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="ChapterÂ 5.Â  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 4.Â 
+   Support
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/test.html gcc-4.8.2/libstdc++-v3/doc/html/manual/test.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/test.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/test.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="AppendixÂ B.Â  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a>Â </td><th width="60%" align="center">AppendixÂ B.Â 
+   Porting and Maintenance
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
+@@ -492,7 +492,7 @@
+        reporting functions including:
+        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
+   Qualifying Exception Safety Guarantees
+-  <a id="idp22628992" class="indexterm"></a>
++  <a id="idm269992903504" class="indexterm"></a>
+ </h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
+ 	 Testing is composed of running a particular test sequence,
+ 	 and looking at what happens to the surrounding code when
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/traits.html gcc-4.8.2/libstdc++-v3/doc/html/manual/traits.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/traits.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/traits.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="ChapterÂ 7.Â  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="ChapterÂ 6.Â  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="ChapterÂ 7.Â  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 6.Â 
+   Utilities
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/unordered_associative.html gcc-4.8.2/libstdc++-v3/doc/html/manual/unordered_associative.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/unordered_associative.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/unordered_associative.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="ChapterÂ 9.Â  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 9.Â 
+   Containers
+   
+ </th><td width="20%" align="right">Â <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.unordered"></a>Unordered Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.unordered.hash"></a>Hash Code</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="containers.unordered.cache"></a>Hash Code Caching Policy</h4></div></div></div><p>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using.html	2014-03-30 20:21:40.800933612 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 3.Â Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 3.Â Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 3.Â Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="PartÂ I.Â  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 3.Â Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a>Â </td><th width="60%" align="center">PartÂ I.Â 
+   Introduction
+   
+-</th><td width="20%" align="right">Â <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>ChapterÂ 3.Â Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
++</th><td width="20%" align="right">Â <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>ChapterÂ 3.Â Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
+       The set of features available in the GNU C++ library is shaped
+       by
+       several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
+@@ -10,5 +10,5 @@
+       enumerated and detailed in the table below.
+     </p><p>
+       By default, <span class="command"><strong>g++</strong></span> is equivalent to  <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
+-    </p><div class="table"><a id="idp13051936"></a><p class="title"><strong>TableÂ 3.1.Â C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
++    </p><div class="table"><a id="idm270002481088"></a><p class="title"><strong>TableÂ 3.1.Â C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+       &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="ChapterÂ 18.Â Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a>Â </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right">Â <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">MakeÂ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top">Â Headers</td></tr></table></div></body></html>
+\ No newline at end of file
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_concurrency.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_concurrency.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_concurrency.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_concurrency.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
+       of multithreaded applications which use the Standard C++
+       library.  This information is GCC-specific since the C++
+       standard does not address matters of multithreaded applications.
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
+ 	Or as close as it gets: freestanding. This is a minimal
+ 	configuration, with only partial support for the standard
+ 	library. Assume only the following header files can be used:
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_exceptions.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_exceptions.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_exceptions.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_exceptions.html	2014-03-30 20:21:40.797600169 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
+ The C++ language provides language support for stack unwinding
+ with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
+ the <code class="literal">throw</code> keyword.
+@@ -265,7 +265,7 @@
+   }
+   catch(...)
+   { this-&gt;_M_setstate(ios_base::badbit); }
+-</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp13644000"></a><p><span class="title"><em>
++</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270001889024"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.opengroup.org/austin/" target="_top">
+ 	System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ 	</a>
+@@ -274,39 +274,39 @@
+     . </span><span class="copyright">Copyright Â© 2008 
+ 	The Open Group/The Institute of Electrical and Electronics
+ 	Engineers, Inc.
+-      . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
++      . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
+ 	Error and Exception Handling
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
+ 	Boost
+-      . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
+ 	Exception-Safety in Generic Components
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
+ 	Boost
+-      . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
+ 	<a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
+ 	Standard Library Exception Policy
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ 	WG21 N1077
+-      . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
+ 	<a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
+ 	ia64 c++ abi exception handling
+ 	</a>
+       </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
+ 	GNU
+-      . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
++      . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
+ 	<a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
+ 	Appendix E: Standard-Library Exception Safety
+ 	</a>
+-      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13665328"></a><p><span class="citetitle"><em class="citetitle">
++      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm270001867696"></a><p><span class="citetitle"><em class="citetitle">
+       Exceptional C++
+     </em>. </span><span class="pagenums">
+       Exception-Safety Issues and Techniques
+-    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idp13667712"></a><p><span class="title"><em>
++    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm270001865312"></a><p><span class="title"><em>
+ 	<a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
+       GCC Bug 25191: exception_defines.h #defines try/catch
+ 	</a>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_headers.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_headers.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_headers.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_headers.html	2014-03-30 20:21:40.800933612 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
+      The C++ standard specifies the entire set of header files that
+      must be available to all hosted implementations.  Actually, the
+      word "files" is a misnomer, since the contents of the
+@@ -18,19 +18,19 @@
+      the 1998 standard as updated for 2003, and the current 2011 standard.
+    </p><p>
+      C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
+-   </p><div class="table"><a id="idp13079360"></a><p class="title"><strong>TableÂ 3.2.Â C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13115840"></a><p class="title"><strong>TableÂ 3.3.Â C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p>
++   </p><div class="table"><a id="idm270002453792"></a><p class="title"><strong>TableÂ 3.2.Â C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002417312"></a><p class="title"><strong>TableÂ 3.3.Â C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p>
+ C++11 include files. These are only available in C++11 compilation
+ mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
+-</p><p></p><div class="table"><a id="idp13140576"></a><p class="title"><strong>TableÂ 3.4.Â C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13192016"></a><p class="title"><strong>TableÂ 3.5.Â C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
++</p><p></p><div class="table"><a id="idm270002392576"></a><p class="title"><strong>TableÂ 3.4.Â C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002341136"></a><p class="title"><strong>TableÂ 3.5.Â C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+   In addition, TR1 includes as:
+-</p><div class="table"><a id="idp13221904"></a><p class="title"><strong>TableÂ 3.6.Â C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13238832"></a><p class="title"><strong>TableÂ 3.7.Â C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
++</p><div class="table"><a id="idm270002311248"></a><p class="title"><strong>TableÂ 3.6.Â C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002294320"></a><p class="title"><strong>TableÂ 3.7.Â C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
+ compiler supports scalar decimal floating-point types defined via
+ <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
+-</p><div class="table"><a id="idp13259904"></a><p class="title"><strong>TableÂ 3.8.Â C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
++</p><div class="table"><a id="idm270002273248"></a><p class="title"><strong>TableÂ 3.8.Â C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+   Also included are files for the C++ ABI interface:
+-</p><div class="table"><a id="idp13265424"></a><p class="title"><strong>TableÂ 3.9.Â C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
++</p><div class="table"><a id="idm270002267728"></a><p class="title"><strong>TableÂ 3.9.Â C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
+   And a large variety of extensions.
+-</p><div class="table"><a id="idp13271824"></a><p class="title"><strong>TableÂ 3.10.Â Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13307552"></a><p class="title"><strong>TableÂ 3.11.Â Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13322320"></a><p class="title"><strong>TableÂ 3.12.Â Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13335696"></a><p class="title"><strong>TableÂ 3.13.Â Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
++</p><div class="table"><a id="idm270002261328"></a><p class="title"><strong>TableÂ 3.10.Â Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002225600"></a><p class="title"><strong>TableÂ 3.11.Â Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated">Â </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002210832"></a><p class="title"><strong>TableÂ 3.12.Â Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002197456"></a><p class="title"><strong>TableÂ 3.13.Â Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
+ </p><p>First, mixing different dialects of the standard headers is not
+ possible. It's an all-or-nothing affair. Thus, code like
+ </p><pre class="programlisting">
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_macros.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_macros.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_macros.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_macros.html	2014-03-30 20:21:40.800933612 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
+      All library macros begin with <code class="code">_GLIBCXX_</code>.
+    </p><p>
+      Furthermore, all pre-processor macros, switches, and
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_namespaces.html gcc-4.8.2/libstdc++-v3/doc/html/manual/using_namespaces.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/using_namespaces.html	2013-02-11 23:24:26.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/using_namespaces.html	2014-03-30 20:21:40.800933612 +0000
+@@ -1,5 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="ChapterÂ 3.Â Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a>Â </td><th width="60%" align="center">ChapterÂ 3.Â Using</th><td width="20%" align="right">Â <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
+ within namespace std." This includes namespaces nested
+ within <code class="code">namespace std</code>, such as <code class="code">namespace
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/utilities.html gcc-4.8.2/libstdc++-v3/doc/html/manual/utilities.html
+--- gcc-4.8.2.orig/libstdc++-v3/doc/html/manual/utilities.html	2013-03-14 03:13:14.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/html/manual/utilities.html	2014-03-30 20:21:40.800933612 +0000
+@@ -1,13 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 6.Â  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 6.Â 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChapterÂ 6.Â  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="PartÂ II.Â  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ChapterÂ 6.Â 
+   Utilities
+   
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a>Â </td><th width="60%" align="center">PartÂ II.Â 
+     Standard Contents
+   </th><td width="20%" align="right">Â <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>ChapterÂ 6.Â 
+   Utilities
+-  <a id="idp13862416" class="indexterm"></a>
+-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
++  <a id="idm270001670464" class="indexterm"></a>
++</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
+       get slightly the wrong idea.  In the interest of not reinventing
+       the wheel, we will refer you to the introduction to the functor
+       concept written by SGI as part of their STL, in
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/abi.xml gcc-4.8.2/libstdc++-v3/doc/xml/manual/abi.xml
+--- gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/abi.xml	2013-01-06 21:19:39.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/xml/manual/abi.xml	2014-03-30 20:21:40.800933612 +0000
+@@ -203,6 +203,7 @@
+     <listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
+     <listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
+     <listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
++    <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
+     </itemizedlist>
+     </listitem>
+ 
+@@ -261,6 +262,7 @@
+     <listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
+     <listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
+     <listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
++    <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
+     </itemizedlist>
+     <para>
+       Note 1: Error should be libstdc++.so.3.0.3.
+@@ -324,6 +326,7 @@
+     <listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
+     <listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
+     <listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
++    <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
+     </itemizedlist>
+     </listitem>
+ 
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/spine.xml gcc-4.8.2/libstdc++-v3/doc/xml/manual/spine.xml
+--- gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/spine.xml	2012-12-18 11:08:33.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/xml/manual/spine.xml	2014-03-30 20:21:40.800933612 +0000
+@@ -20,6 +20,7 @@
+     <year>2010</year>
+     <year>2011</year>
+     <year>2012</year>
++    <year>2013</year>
+     <holder>
+       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
+     </holder>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/status_cxx2011.xml gcc-4.8.2/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+--- gcc-4.8.2.orig/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	2013-01-08 21:29:20.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/doc/xml/manual/status_cxx2011.xml	2014-03-30 20:21:40.800933612 +0000
+@@ -877,10 +877,11 @@
+       <entry/>
+     </row>
+     <row>
++      <?dbhtml bgcolor="#B0B0B0" ?>
+       <entry>20.9.7.6</entry>
+       <entry>Other transformations</entry>
+-      <entry>Y</entry>
+-      <entry/>
++      <entry>Partial</entry>
++      <entry>Missing <code>aligned_union</code>.</entry>
+     </row>
+     <row>
+       <entry>20.10</entry>
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/atomic_base.h gcc-4.8.2/libstdc++-v3/include/bits/atomic_base.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/bits/atomic_base.h	2013-02-26 23:46:21.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/bits/atomic_base.h	2014-03-30 20:21:40.800933612 +0000
+@@ -764,11 +764,11 @@
+ 
+       bool
+       is_lock_free() const noexcept
+-      { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
++      { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
+ 
+       bool
+       is_lock_free() const volatile noexcept
+-      { return __atomic_is_lock_free(_M_type_size(1), nullptr); }
++      { return __atomic_is_lock_free(sizeof(__pointer_type), nullptr); }
+ 
+       void
+       store(__pointer_type __p,
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/shared_ptr_base.h gcc-4.8.2/libstdc++-v3/include/bits/shared_ptr_base.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/bits/shared_ptr_base.h	2013-10-08 13:38:21.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/bits/shared_ptr_base.h	2014-03-30 20:21:40.800933612 +0000
+@@ -233,7 +233,7 @@
+     _M_add_ref_lock()
+     {
+       // Perform lock-free add-if-not-zero operation.
+-      _Atomic_word __count = _M_use_count;
++      _Atomic_word __count = _M_get_use_count();
+       do
+ 	{
+ 	  if (__count == 0)
+@@ -391,7 +391,7 @@
+     public:
+       template<typename... _Args>
+ 	_Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
+-	: _M_impl(__a), _M_storage()
++	: _M_impl(__a)
+ 	{
+ 	  _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
+ 	  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+@@ -819,7 +819,7 @@
+ 	: _M_ptr(__r.get()), _M_refcount()
+ 	{
+ 	  __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
+-	  auto __tmp = std::__addressof(*__r.get());
++	  auto __tmp = __r.get();
+ 	  _M_refcount = __shared_count<_Lp>(std::move(__r));
+ 	  __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
+ 	}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h	2013-09-30 17:42:52.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h	2014-03-30 20:21:40.800933612 +0000
+@@ -2279,7 +2279,7 @@
+ 				_RandomAccessIterator __last)
+     {
+       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2));
++      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
+       return std::__unguarded_partition(__first + 1, __last, *__first);
+     }
+ 
+@@ -2291,7 +2291,7 @@
+ 				_RandomAccessIterator __last, _Compare __comp)
+     {
+       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2),
++      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
+ 				  __comp);
+       return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
+     }
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_vector.h gcc-4.8.2/libstdc++-v3/include/bits/stl_vector.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_vector.h	2013-03-27 14:32:10.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/bits/stl_vector.h	2014-03-30 20:21:40.804267055 +0000
+@@ -1361,7 +1361,8 @@
+       void
+       _M_move_assign(vector&& __x, std::true_type) noexcept
+       {
+-	const vector __tmp(std::move(*this));
++	vector __tmp(get_allocator());
++	this->_M_impl._M_swap_data(__tmp._M_impl);
+ 	this->_M_impl._M_swap_data(__x._M_impl);
+ 	if (_Alloc_traits::_S_propagate_on_move_assign())
+ 	  std::__alloc_on_move(_M_get_Tp_allocator(),
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio gcc-4.8.2/libstdc++-v3/include/c_global/cstdio
+--- gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/c_global/cstdio	2014-03-30 20:21:40.804267055 +0000
+@@ -69,6 +69,7 @@
+ #undef ftell
+ #undef fwrite
+ #undef getc
++#undef getchar
+ #undef gets
+ #undef perror
+ #undef printf
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h gcc-4.8.2/libstdc++-v3/include/debug/functions.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/debug/functions.h	2014-03-30 20:21:40.804267055 +0000
+@@ -345,11 +345,13 @@
+       return __check_sorted_set_aux(__first, __last, __pred, _SameType());
+    }
+ 
++  // _GLIBCXX_RESOLVE_LIB_DEFECTS
++  // 270. Binary search requirements overly strict
++  // Determine if a sequence is partitioned w.r.t. this element.
+   template<typename _ForwardIterator, typename _Tp>
+     inline bool
+-  __check_partitioned_lower_aux(_ForwardIterator __first,
+-				_ForwardIterator __last, const _Tp& __value,
+-				std::forward_iterator_tag)
++    __check_partitioned_lower(_ForwardIterator __first,
++			      _ForwardIterator __last, const _Tp& __value)
+     {
+       while (__first != __last && *__first < __value)
+ 	++__first;
+@@ -362,38 +364,11 @@
+       return __first == __last;
+     }
+ 
+-  // For performance reason, as the iterator range has been validated, check on
+-  // random access safe iterators is done using the base iterator.
+-  template<typename _Iterator, typename _Sequence, typename _Tp>
+-    inline bool
+-    __check_partitioned_lower_aux(
+-			const _Safe_iterator<_Iterator, _Sequence>& __first,
+-			const _Safe_iterator<_Iterator, _Sequence>& __last,
+-			const _Tp& __value,
+-			std::random_access_iterator_tag __tag)
+-    {
+-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
+-					   __value, __tag);
+-    }
+-
+-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
+-  // 270. Binary search requirements overly strict
+-  // Determine if a sequence is partitioned w.r.t. this element.
+   template<typename _ForwardIterator, typename _Tp>
+     inline bool
+-    __check_partitioned_lower(_ForwardIterator __first,
++    __check_partitioned_upper(_ForwardIterator __first,
+ 			      _ForwardIterator __last, const _Tp& __value)
+     {
+-      return __check_partitioned_lower_aux(__first, __last, __value,
+-					   std::__iterator_category(__first));
+-    }
+-
+-  template<typename _ForwardIterator, typename _Tp>
+-    inline bool
+-    __check_partitioned_upper_aux(_ForwardIterator __first,
+-				  _ForwardIterator __last, const _Tp& __value,
+-				  std::forward_iterator_tag)
+-    {
+       while (__first != __last && !(__value < *__first))
+ 	++__first;
+       if (__first != __last)
+@@ -405,35 +380,12 @@
+       return __first == __last;
+     }
+ 
+-  // For performance reason, as the iterator range has been validated, check on
+-  // random access safe iterators is done using the base iterator.
+-  template<typename _Iterator, typename _Sequence, typename _Tp>
+-    inline bool
+-    __check_partitioned_upper_aux(
+-			const _Safe_iterator<_Iterator, _Sequence>& __first,
+-			const _Safe_iterator<_Iterator, _Sequence>& __last,
+-			const _Tp& __value,
+-			std::random_access_iterator_tag __tag)
+-    {
+-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
+-					   __value, __tag);
+-    }
+-
+-  template<typename _ForwardIterator, typename _Tp>
+-    inline bool
+-    __check_partitioned_upper(_ForwardIterator __first,
+-			      _ForwardIterator __last, const _Tp& __value)
+-    {
+-      return __check_partitioned_upper_aux(__first, __last, __value,
+-					   std::__iterator_category(__first));
+-    }
+-
++  // Determine if a sequence is partitioned w.r.t. this element.
+   template<typename _ForwardIterator, typename _Tp, typename _Pred>
+     inline bool
+-    __check_partitioned_lower_aux(_ForwardIterator __first,
+-				  _ForwardIterator __last, const _Tp& __value,
+-				  _Pred __pred,
+-				  std::forward_iterator_tag)
++    __check_partitioned_lower(_ForwardIterator __first,
++			      _ForwardIterator __last, const _Tp& __value,
++			      _Pred __pred)
+     {
+       while (__first != __last && bool(__pred(*__first, __value)))
+ 	++__first;
+@@ -446,39 +398,12 @@
+       return __first == __last;
+     }
+ 
+-  // For performance reason, as the iterator range has been validated, check on
+-  // random access safe iterators is done using the base iterator.
+-  template<typename _Iterator, typename _Sequence,
+-	   typename _Tp, typename _Pred>
+-    inline bool
+-    __check_partitioned_lower_aux(
+-			const _Safe_iterator<_Iterator, _Sequence>& __first,
+-			const _Safe_iterator<_Iterator, _Sequence>& __last,
+-			const _Tp& __value, _Pred __pred,
+-			std::random_access_iterator_tag __tag)
+-    {
+-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
+-					   __value, __pred, __tag);
+-    }
+-
+-  // Determine if a sequence is partitioned w.r.t. this element.
+   template<typename _ForwardIterator, typename _Tp, typename _Pred>
+     inline bool
+-    __check_partitioned_lower(_ForwardIterator __first,
++    __check_partitioned_upper(_ForwardIterator __first,
+ 			      _ForwardIterator __last, const _Tp& __value,
+ 			      _Pred __pred)
+     {
+-      return __check_partitioned_lower_aux(__first, __last, __value, __pred,
+-					   std::__iterator_category(__first));
+-    }
+-
+-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
+-    inline bool
+-    __check_partitioned_upper_aux(_ForwardIterator __first,
+-				  _ForwardIterator __last, const _Tp& __value,
+-				  _Pred __pred,
+-				  std::forward_iterator_tag)
+-    {
+       while (__first != __last && !bool(__pred(__value, *__first)))
+ 	++__first;
+       if (__first != __last)
+@@ -490,31 +415,6 @@
+       return __first == __last;
+     }
+ 
+-  // For performance reason, as the iterator range has been validated, check on
+-  // random access safe iterators is done using the base iterator.
+-  template<typename _Iterator, typename _Sequence,
+-	   typename _Tp, typename _Pred>
+-    inline bool
+-    __check_partitioned_upper_aux(
+-			const _Safe_iterator<_Iterator, _Sequence>& __first,
+-			const _Safe_iterator<_Iterator, _Sequence>& __last,
+-			const _Tp& __value, _Pred __pred,
+-			std::random_access_iterator_tag __tag)
+-    {
+-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
+-					   __value, __pred, __tag);
+-    }
+-
+-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
+-    inline bool
+-    __check_partitioned_upper(_ForwardIterator __first,
+-			      _ForwardIterator __last, const _Tp& __value,
+-			      _Pred __pred)
+-    {
+-      return __check_partitioned_upper_aux(__first, __last, __value, __pred,
+-					   std::__iterator_category(__first));
+-    }
+-
+   // Helper struct to detect random access safe iterators.
+   template<typename _Iterator>
+     struct __is_safe_random_iterator
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h gcc-4.8.2/libstdc++-v3/include/debug/macros.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/debug/macros.h	2014-03-30 20:21:40.804267055 +0000
+@@ -261,8 +261,9 @@
+     w.r.t. the value _Value. */
+ #define __glibcxx_check_partitioned_lower(_First,_Last,_Value)		\
+ __glibcxx_check_valid_range(_First,_Last);				\
+-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
+-							    _Value),	\
++_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(		\
++			__gnu_debug::__base(_First),			\
++			__gnu_debug::__base(_Last), _Value),		\
+ 		      _M_message(__gnu_debug::__msg_unpartitioned)      \
+ 		      ._M_iterator(_First, #_First)			\
+ 		      ._M_iterator(_Last, #_Last)			\
+@@ -270,8 +271,9 @@
+ 
+ #define __glibcxx_check_partitioned_upper(_First,_Last,_Value)		\
+ __glibcxx_check_valid_range(_First,_Last);				\
+-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
+-							    _Value),	\
++_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(		\
++			__gnu_debug::__base(_First),			\
++			__gnu_debug::__base(_Last), _Value),		\
+ 		      _M_message(__gnu_debug::__msg_unpartitioned)      \
+ 		      ._M_iterator(_First, #_First)			\
+ 		      ._M_iterator(_Last, #_Last)			\
+@@ -281,8 +283,9 @@
+     w.r.t. the value _Value and predicate _Pred. */
+ #define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
+ __glibcxx_check_valid_range(_First,_Last);				\
+-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
+-							 _Value, _Pred), \
++_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(		\
++			__gnu_debug::__base(_First),			\
++			__gnu_debug::__base(_Last), _Value, _Pred),	\
+ 		      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
+ 		      ._M_iterator(_First, #_First)			\
+ 		      ._M_iterator(_Last, #_Last)			\
+@@ -293,8 +296,9 @@
+     w.r.t. the value _Value and predicate _Pred. */
+ #define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
+ __glibcxx_check_valid_range(_First,_Last);				\
+-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
+-							 _Value, _Pred), \
++_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(		\
++			__gnu_debug::__base(_First),			\
++			__gnu_debug::__base(_Last), _Value, _Pred),	\
+ 		      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
+ 		      ._M_iterator(_First, #_First)			\
+ 		      ._M_iterator(_Last, #_Last)			\
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/safe_unordered_base.h gcc-4.8.2/libstdc++-v3/include/debug/safe_unordered_base.h
+--- gcc-4.8.2.orig/libstdc++-v3/include/debug/safe_unordered_base.h	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/debug/safe_unordered_base.h	2014-03-30 20:21:40.804267055 +0000
+@@ -133,9 +133,19 @@
+   protected:
+     // Initialize with a version number of 1 and no iterators
+     _Safe_unordered_container_base()
+-    : _M_local_iterators(0), _M_const_local_iterators(0)
++    : _M_local_iterators(nullptr), _M_const_local_iterators(nullptr)
+     { }
+ 
++    // Initialize with a version number of 1 and no iterators
++    _Safe_unordered_container_base(const _Safe_unordered_container_base&)
++    noexcept
++    : _Safe_unordered_container_base() { }
++
++    _Safe_unordered_container_base(_Safe_unordered_container_base&& __x)
++    noexcept
++    : _Safe_unordered_container_base()
++    { this->_M_swap(__x); }
++
+     /** Notify all iterators that reference this container that the
+ 	container is being destroyed. */
+     ~_Safe_unordered_container_base()
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/std/future gcc-4.8.2/libstdc++-v3/include/std/future
+--- gcc-4.8.2.orig/libstdc++-v3/include/std/future	2013-03-16 02:48:06.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/include/std/future	2014-03-30 20:21:40.804267055 +0000
+@@ -1261,9 +1261,11 @@
+     struct __future_base::_Task_state<_Fn, _Alloc, _Res(_Args...)> final
+     : __future_base::_Task_state_base<_Res(_Args...)>
+     {
+-      _Task_state(_Fn&& __fn, const _Alloc& __a)
+-      : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
+-      { }
++      template<typename _Fn2>
++	_Task_state(_Fn2&& __fn, const _Alloc& __a)
++	: _Task_state_base<_Res(_Args...)>(__a),
++	  _M_impl(std::forward<_Fn2>(__fn), __a)
++	{ }
+ 
+     private:
+       virtual void
+@@ -1292,19 +1294,21 @@
+ 
+       struct _Impl : _Alloc
+       {
+-	_Impl(_Fn&& __fn, const _Alloc& __a)
+-	  : _Alloc(__a), _M_fn(std::move(__fn)) { }
++	template<typename _Fn2>
++	  _Impl(_Fn2&& __fn, const _Alloc& __a)
++	  : _Alloc(__a), _M_fn(std::forward<_Fn2>(__fn)) { }
+ 	_Fn _M_fn;
+       } _M_impl;
+     };
+ 
+-    template<typename _Signature, typename _Fn, typename _Alloc>
+-      static shared_ptr<__future_base::_Task_state_base<_Signature>>
+-      __create_task_state(_Fn&& __fn, const _Alloc& __a)
+-      {
+-	typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
+-	return std::allocate_shared<_State>(__a, std::move(__fn), __a);
+-      }
++  template<typename _Signature, typename _Fn, typename _Alloc>
++    static shared_ptr<__future_base::_Task_state_base<_Signature>>
++    __create_task_state(_Fn&& __fn, const _Alloc& __a)
++    {
++      typedef typename decay<_Fn>::type _Fn2;
++      typedef __future_base::_Task_state<_Fn2, _Alloc, _Signature> _State;
++      return std::allocate_shared<_State>(__a, std::forward<_Fn>(__fn), __a);
++    }
+ 
+   template<typename _Fn, typename _Alloc, typename _Res, typename... _Args>
+     shared_ptr<__future_base::_Task_state_base<_Res(_Args...)>>
+@@ -1344,7 +1348,8 @@
+ 	       __constrain_pkgdtask<packaged_task, _Fn>::__type>
+ 	explicit
+ 	packaged_task(_Fn&& __fn)
+-	: packaged_task(allocator_arg, std::allocator<int>(), std::move(__fn))
++	: packaged_task(allocator_arg, std::allocator<int>(),
++			std::forward<_Fn>(__fn))
+ 	{ }
+ 
+       // _GLIBCXX_RESOLVE_LIB_DEFECTS
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_alloc.cc gcc-4.8.2/libstdc++-v3/libsupc++/eh_alloc.cc
+--- gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_alloc.cc	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/libsupc++/eh_alloc.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -129,12 +129,6 @@
+ 	std::terminate ();
+     }
+ 
+-  // We have an uncaught exception as soon as we allocate memory.  This
+-  // yields uncaught_exception() true during the copy-constructor that
+-  // initializes the exception object.  See Issue 475.
+-  __cxa_eh_globals *globals = __cxa_get_globals ();
+-  globals->uncaughtExceptions += 1;
+-
+   memset (ret, 0, sizeof (__cxa_refcounted_exception));
+ 
+   return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
+@@ -191,12 +185,6 @@
+ 	std::terminate ();
+     }
+ 
+-  // We have an uncaught exception as soon as we allocate memory.  This
+-  // yields uncaught_exception() true during the copy-constructor that
+-  // initializes the exception object.  See Issue 475.
+-  __cxa_eh_globals *globals = __cxa_get_globals ();
+-  globals->uncaughtExceptions += 1;
+-
+   memset (ret, 0, sizeof (__cxa_dependent_exception));
+ 
+   return ret;
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_call.cc gcc-4.8.2/libstdc++-v3/libsupc++/eh_call.cc
+--- gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_call.cc	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/libsupc++/eh_call.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -104,14 +104,14 @@
+   } end_catch_protect_obj;
+ 
+ 
+-  __try 
+-    { 
++  __try
++    {
+       if (foreign_exception)
+ 	std::unexpected();
+       else
+ 	__unexpected(unexpectedHandler);
+     }
+-  __catch(...) 
++  __catch(...)
+     {
+       /* See if the new exception matches the rtti list.  */
+       if (foreign_exception)
+@@ -140,15 +140,19 @@
+ 			       &new_ptr) != ctm_failed)
+ 	    __throw_exception_again;
+ 
+-	  if (catch_type->__do_catch(&bad_exc, 0, 1))
++	  // If the exception spec allows std::bad_exception, throw that.
++	  // We don't have a thrown object to compare against, but since
++	  // bad_exception doesn't have virtual bases, that's OK; just pass NULL.
++	  void* obj = NULL;
++	  if (catch_type->__do_catch(&bad_exc, &obj, 1))
+ 	    bad_exception_allowed = true;
+ 	}
+ 
+       // If the exception spec allows std::bad_exception, throw that.
+-#ifdef __EXCEPTIONS  
++#ifdef __EXCEPTIONS
+       if (bad_exception_allowed)
+ 	throw std::bad_exception();
+-#endif   
++#endif
+ 
+       // Otherwise, die.
+       __terminate(terminateHandler);
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_throw.cc gcc-4.8.2/libstdc++-v3/libsupc++/eh_throw.cc
+--- gcc-4.8.2.orig/libstdc++-v3/libsupc++/eh_throw.cc	2013-03-15 08:55:07.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/libsupc++/eh_throw.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -62,6 +62,9 @@
+ {
+   PROBE2 (throw, obj, tinfo);
+ 
++  __cxa_eh_globals *globals = __cxa_get_globals ();
++  globals->uncaughtExceptions += 1;
++
+   // Definitely a primary.
+   __cxa_refcounted_exception *header
+     = __get_refcounted_exception_header_from_obj (obj);
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/src/c++11/thread.cc gcc-4.8.2/libstdc++-v3/src/c++11/thread.cc
+--- gcc-4.8.2.orig/libstdc++-v3/src/c++11/thread.cc	2013-02-03 17:54:05.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/src/c++11/thread.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -183,7 +183,7 @@
+         ::usleep(__us);
+       }
+ # else
+-    ::sleep(__s.count() + (__ns >= 1000000));
++    ::sleep(__s.count() + (__ns.count() >= 1000000));
+ # endif
+ #elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
+     unsigned long ms = __ns.count() / 1000000;
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc gcc-4.8.2/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -0,0 +1,51 @@
++// Copyright (C) 2014 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <exception>
++#include <cstdlib>
++
++class expected {};
++class unexpected {};
++class from_handler {};
++
++static void func_with_exception_spec() throw(expected)
++{
++  throw unexpected();
++}
++
++static void unexpected_handler()
++{
++  throw from_handler();
++}
++
++static void terminate_handler()
++{
++  exit(0);
++}
++
++// libstdc++/59392
++int main()
++{
++  std::set_unexpected(unexpected_handler);
++  std::set_terminate(terminate_handler);
++  try {
++    func_with_exception_spec();
++  } catch (expected&) {
++    abort();
++  }
++  abort();
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/bind/57899.cc gcc-4.8.2/libstdc++-v3/testsuite/20_util/bind/57899.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/bind/57899.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/20_util/bind/57899.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -0,0 +1,48 @@
++// Copyright (C) 2010-2014 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++// 20.7.11 Function template bind
++
++// PR c++/57899
++// { dg-do compile }
++// { dg-options -std=c++11 }
++
++#include <functional>
++using std::bind;
++using std::placeholders::_1;
++
++struct S { int i; };
++
++struct P { S s; };
++
++struct get_s
++{
++  const S& operator()(const P& p) const { return p.s; }
++} gs;
++
++int gi(const S& s) { return s.i; }
++
++bool cmp(int, int) { return true; }
++
++int main()
++{
++  P p{};
++  auto f1 = bind(gs, _1);
++  auto f2 = bind(gi, f1);
++  auto f3 = bind(cmp, f2, 5);
++  f3(p);
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc gcc-4.8.2/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -0,0 +1,33 @@
++// { dg-options "-std=gnu++11" }
++// { dg-do compile }
++
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <memory>
++
++// libstdc++/58839
++
++struct D {
++  void operator()(void*) const noexcept { }
++};
++
++void test01()
++{
++  std::unique_ptr<void, D> y;
++  std::shared_ptr<void> x = std::move(y);
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc gcc-4.8.2/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/23_containers/unordered_map/59548.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -0,0 +1,34 @@
++// { dg-options "-std=gnu++11" }
++// { dg-do compile }
++// { dg-require-debug-mode "" }
++
++// Copyright (C) 2014 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++// libstdc++/59548
++
++#include <unordered_map>
++
++int main()
++{
++  std::unordered_map<int,int> foo{ {0,1} };
++  auto i = foo.begin();
++  {
++    auto bar = foo;
++  }
++  return i->first;
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc gcc-4.8.2/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc	2014-03-30 20:21:40.807600498 +0000
+@@ -0,0 +1,59 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++// { dg-options "-std=gnu++11" }
++
++#include <vector>
++#include <testsuite_hooks.h>
++#include <testsuite_allocator.h>
++
++struct T { int i; };
++
++using __gnu_test::uneq_allocator;
++
++void test01()
++{
++  bool test __attribute__((unused)) = true;
++  typedef uneq_allocator<T> alloc_type;
++  typedef std::vector<T, alloc_type> test_type;
++  test_type v1(alloc_type(1));
++  v1 = { T() };
++  auto it = v1.begin();
++  test_type v2(std::move(v1));
++  VERIFY(1 == v1.get_allocator().get_personality());
++  VERIFY(1 == v2.get_allocator().get_personality());
++  VERIFY( it == v2.begin() );
++}
++
++void test02()
++{
++  bool test __attribute__((unused)) = true;
++  typedef uneq_allocator<T> alloc_type;
++  typedef std::vector<T, alloc_type> test_type;
++  test_type v1(alloc_type(1));
++  v1 = { T() };
++  test_type v2(std::move(v1), alloc_type(2));
++  VERIFY(1 == v1.get_allocator().get_personality());
++  VERIFY(2 == v2.get_allocator().get_personality());
++}
++
++int main()
++{
++  test01();
++  test02();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc gcc-4.8.2/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc	2013-03-08 20:08:20.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc	2014-03-30 20:21:40.804267055 +0000
+@@ -46,16 +46,35 @@
+   typedef std::vector<T, alloc_type> test_type;
+   test_type v1(alloc_type(1));
+   v1.push_back(T());
++  auto it = v1.begin();
+   test_type v2(alloc_type(2));
+-  v2 = std::move(v1);
+   v2.push_back(T());
++  v2 = std::move(v1);
++  VERIFY( it == v2.begin() );
+   VERIFY(0 == v1.get_allocator().get_personality());
+   VERIFY(1 == v2.get_allocator().get_personality());
+ }
+ 
++void test03()
++{
++  bool test __attribute__((unused)) = true;
++  typedef propagating_allocator<T, false> alloc_type;
++  typedef std::vector<T, alloc_type> test_type;
++  test_type v1(alloc_type(1));
++  v1.push_back(T());
++  auto it = v1.begin();
++  test_type v2(alloc_type(1));
++  v2.push_back(T());
++  v2 = std::move(v1);
++  VERIFY( it == v2.begin() );
++  VERIFY(1 == v1.get_allocator().get_personality());
++  VERIFY(1 == v2.get_allocator().get_personality());
++}
++
+ int main()
+ {
+   test01();
+   test02();
++  test03();
+   return 0;
+ }
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc	2014-03-30 20:21:40.807600498 +0000
+@@ -0,0 +1,52 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++// 25.3.2 [lib.alg.nth.element]
++
++// { dg-options "-std=gnu++11" }
++
++#include <algorithm>
++#include <testsuite_hooks.h>
++#include <testsuite_iterators.h>
++
++using __gnu_test::test_container;
++using __gnu_test::random_access_iterator_wrapper;
++
++typedef test_container<int, random_access_iterator_wrapper> Container;
++
++void test01()
++{
++  std::vector<int> v = {
++    207089,
++    202585,
++    180067,
++    157549,
++    211592,
++    216096,
++    207089
++  };
++
++  Container con(v.data(), v.data() + 7);
++
++  std::nth_element(con.begin(), con.begin() + 3, con.end());
++}
++
++int main()
++{
++  test01();
++  return 0;
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc gcc-4.8.2/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/29_atomics/atomic/60658.cc	2014-03-30 20:21:40.807600498 +0000
+@@ -0,0 +1,43 @@
++// { dg-require-atomic-builtins "" }
++// { dg-options "-std=gnu++11" }
++
++// Copyright (C) 2014 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <atomic>
++#include <testsuite_hooks.h>
++
++// libstdc++/60658
++
++struct Foo {
++  char buf[1];
++};
++
++struct Bar {
++  char buf[100];
++};
++
++int
++main ()
++{
++  bool test __attribute__((unused)) = true;
++
++  std::atomic<Foo*> a;
++  std::atomic<Bar*> b;
++
++  VERIFY (a.is_lock_free() == b.is_lock_free());
++}
+diff -Naur gcc-4.8.2.orig/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc gcc-4.8.2/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
+--- gcc-4.8.2.orig/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc	1970-01-01 00:00:00.000000000 +0000
++++ gcc-4.8.2/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc	2014-03-30 20:21:40.807600498 +0000
+@@ -0,0 +1,51 @@
++// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
++// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
++// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
++// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
++// { dg-require-cstdint "" }
++// { dg-require-gthreads "" }
++// { dg-require-atomic-builtins "" }
++
++// Copyright (C) 2014 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++
++
++#include <future>
++#include <testsuite_hooks.h>
++
++struct X
++{
++  X() = default;
++  X(const X&) = default;
++  X(X&& x) { x.moved = true; }
++
++  void operator()() const { }
++
++  bool moved = false;
++};
++
++void test01()
++{
++  X x;
++  std::packaged_task<void()> p(x);
++  VERIFY( !x.moved );
++}
++
++int main()
++{
++  test01();
++}
+diff -Naur gcc-4.8.2.orig/maintainer-scripts/gcc_release gcc-4.8.2/maintainer-scripts/gcc_release
+--- gcc-4.8.2.orig/maintainer-scripts/gcc_release	2011-05-22 14:20:12.000000000 +0000
++++ gcc-4.8.2/maintainer-scripts/gcc_release	2014-03-30 20:21:40.807600498 +0000
+@@ -9,7 +9,7 @@
+ # Contents:
+ #   Script to create a GCC release.
+ #
+-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
++# Copyright (c) 2001-2014 Free Software Foundation.
+ #
+ # This file is part of GCC.
+ #
+@@ -213,7 +213,7 @@
+ #
+ # Suggested usage:
+ # md5sum -c MD5SUMS | grep -v \"OK$\"
+-" > MD5SUMS
++#" > MD5SUMS
+ 
+   find . -type f |
+   sed -e 's:^\./::' -e '/MD5SUMS/d' |
