Changeset 88af5df for patches


Ignore:
Timestamp:
Nov 11, 2013, 1:52:32 PM (10 years ago)
Author:
William Harrington <kb0iic@…>
Branches:
clfs-3.0.0-systemd, clfs-3.0.0-sysvinit, master, systemd, sysvinit
Children:
1437142
Parents:
d52b1ef2
Message:

Fix gcc 4.8.2 branch update 1 patch.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • patches/gcc-4.8.2-branch_update-1.patch

    rd52b1ef2 r88af5df  
    11Submitted By: Jim Gifford (jim at cross-lfs dot org)
    2 Date: 10-24-2013
     2Date: 11-01-2013
    33Initial Package Version: 4.8.2
    44Origin: Upstream
     
    77             rechecked periodically.
    88
    9 This patch was made from Revision # 204009.
     9Includes PR tree-optimization/54094
    1010
     11This patch was made from Revision # 204292.
     12
     13diff -Naur gcc-4.8.2.orig/ChangeLog gcc-4.8.2/ChangeLog
     14--- gcc-4.8.2.orig/ChangeLog    2013-10-16 07:18:46.000000000 +0000
     15+++ gcc-4.8.2/ChangeLog 2013-11-01 16:12:34.459877324 +0000
     16@@ -7,6 +7,13 @@
     17        * configure.ac: Also allow ISL 0.12.
     18        * configure: Regenerated.
     19 
     20+       PR tree-optimization/54094
     21+       * graphite-clast-to-gimple.c (translate_clast_for_loop): Derive the
     22+         scheduling dimension for the parallelism check from the polyhedral
     23+         information in the AST.
     24+       * graphite-dependences.c (carries_deps): Do not assume the schedule is
     25+         in 2D + 1 form.
     26+
     27 2013-05-31  Release Manager
     28 
     29        * GCC 4.8.1 released.
    1130diff -Naur gcc-4.8.2.orig/contrib/gcc_update gcc-4.8.2/contrib/gcc_update
    12 --- gcc-4.8.2.orig/contrib/gcc_update   2012-11-14 05:09:00.000000000 -0600
    13 +++ gcc-4.8.2/contrib/gcc_update        2013-10-21 05:38:03.471259000 -0500
     31--- gcc-4.8.2.orig/contrib/gcc_update   2012-11-14 11:09:00.000000000 +0000
     32+++ gcc-4.8.2/contrib/gcc_update        2013-11-01 16:12:29.807076533 +0000
    1433@@ -382,7 +382,7 @@
    1534        fi
     
    2140            s,.*/branches/,,
    2241            s,.*/tags/,,
     42diff -Naur gcc-4.8.2.orig/gcc/DATESTAMP gcc-4.8.2/gcc/DATESTAMP
     43--- gcc-4.8.2.orig/gcc/DATESTAMP        2013-10-16 00:16:34.000000000 +0000
     44+++ gcc-4.8.2/gcc/DATESTAMP     2013-11-01 16:12:33.423698996 +0000
     45@@ -1 +1 @@
     46-20131016
     47+20131101
    2348diff -Naur gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c gcc-4.8.2/gcc/ada/gcc-interface/utils.c
    24 --- gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c        2013-06-13 02:51:32.000000000 -0500
    25 +++ gcc-4.8.2/gcc/ada/gcc-interface/utils.c     2013-10-19 06:11:47.006516000 -0500
     49--- gcc-4.8.2.orig/gcc/ada/gcc-interface/utils.c        2013-06-13 07:51:32.000000000 +0000
     50+++ gcc-4.8.2/gcc/ada/gcc-interface/utils.c     2013-11-01 16:12:30.359171559 +0000
    2651@@ -232,6 +232,7 @@
    2752 static tree split_plus (tree, tree *);
     
    248273    unless we can prove these 2 fields are laid out in such a way that no gap
    249274    exist between the end of PREV_FIELD and the beginning of CURR_FIELD.  OFFSET
     275diff -Naur gcc-4.8.2.orig/gcc/alias.c gcc-4.8.2/gcc/alias.c
     276--- gcc-4.8.2.orig/gcc/alias.c  2013-03-05 09:40:38.000000000 +0000
     277+++ gcc-4.8.2/gcc/alias.c       2013-11-01 16:12:30.359171559 +0000
     278@@ -2871,16 +2871,13 @@
     279       /* Wipe the reg_seen array clean.  */
     280       bitmap_clear (reg_seen);
     281 
     282-      /* Mark all hard registers which may contain an address.
     283-        The stack, frame and argument pointers may contain an address.
     284-        An argument register which can hold a Pmode value may contain
     285-        an address even if it is not in BASE_REGS.
     286-
     287-        The address expression is VOIDmode for an argument and
     288-        Pmode for other registers.  */
     289-
     290-      memcpy (new_reg_base_value, static_reg_base_value,
     291-             FIRST_PSEUDO_REGISTER * sizeof (rtx));
     292+      /* Initialize the alias information for this pass.  */
     293+      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
     294+       if (static_reg_base_value[i])
     295+         {
     296+           new_reg_base_value[i] = static_reg_base_value[i];
     297+           bitmap_set_bit (reg_seen, i);
     298+         }
     299 
     300       /* Walk the insns adding values to the new_reg_base_value array.  */
     301       for (i = 0; i < rpo_cnt; i++)
     302diff -Naur gcc-4.8.2.orig/gcc/cfgexpand.c gcc-4.8.2/gcc/cfgexpand.c
     303--- gcc-4.8.2.orig/gcc/cfgexpand.c      2013-03-05 22:31:50.000000000 +0000
     304+++ gcc-4.8.2/gcc/cfgexpand.c   2013-11-01 16:12:30.363172247 +0000
     305@@ -4707,14 +4707,18 @@
     306          if (e->insns.r)
     307            {
     308              rebuild_jump_labels_chain (e->insns.r);
     309-             /* Avoid putting insns before parm_birth_insn.  */
     310+             /* Put insns after parm birth, but before
     311+                NOTE_INSNS_FUNCTION_BEG.  */
     312              if (e->src == ENTRY_BLOCK_PTR
     313-                 && single_succ_p (ENTRY_BLOCK_PTR)
     314-                 && parm_birth_insn)
     315+                 && single_succ_p (ENTRY_BLOCK_PTR))
     316                {
     317                  rtx insns = e->insns.r;
     318                  e->insns.r = NULL_RTX;
     319-                 emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
     320+                 if (NOTE_P (parm_birth_insn)
     321+                     && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
     322+                   emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
     323+                 else
     324+                   emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
     325                }
     326              else
     327                commit_one_edge_insertion (e);
     328diff -Naur gcc-4.8.2.orig/gcc/cgraph.c gcc-4.8.2/gcc/cgraph.c
     329--- gcc-4.8.2.orig/gcc/cgraph.c 2013-05-22 07:50:40.000000000 +0000
     330+++ gcc-4.8.2/gcc/cgraph.c      2013-11-01 16:12:30.367172935 +0000
     331@@ -2596,4 +2596,47 @@
     332   FOR_EACH_FUNCTION (node)
     333     verify_cgraph_node (node);
     334 }
     335+
     336+/* Create external decl node for DECL.
     337+   The difference i nbetween cgraph_get_create_node and
     338+   cgraph_get_create_real_symbol_node is that cgraph_get_create_node
     339+   may return inline clone, while cgraph_get_create_real_symbol_node
     340+   will create a new node in this case.
     341+   FIXME: This function should be removed once clones are put out of decl
     342+   hash.  */
     343+
     344+struct cgraph_node *
     345+cgraph_get_create_real_symbol_node (tree decl)
     346+{
     347+  struct cgraph_node *first_clone = cgraph_get_node (decl);
     348+  struct cgraph_node *node;
     349+  /* create symbol table node.  even if inline clone exists, we can not take
     350+     it as a target of non-inlined call.  */
     351+  node = cgraph_get_node (decl);
     352+  if (node && !node->global.inlined_to)
     353+    return node;
     354+
     355+  node = cgraph_create_node (decl);
     356+
     357+  /* ok, we previously inlined the function, then removed the offline copy and
     358+     now we want it back for external call.  this can happen when devirtualizing
     359+     while inlining function called once that happens after extern inlined and
     360+     virtuals are already removed.  in this case introduce the external node
     361+     and make it available for call.  */
     362+  if (first_clone)
     363+    {
     364+      first_clone->clone_of = node;
     365+      node->clones = first_clone;
     366+      symtab_prevail_in_asm_name_hash ((symtab_node) node);
     367+      symtab_insert_node_to_hashtable ((symtab_node) node);
     368+      if (dump_file)
     369+       fprintf (dump_file, "Introduced new external node "
     370+                "(%s/%i) and turned into root of the clone tree.\n",
     371+                xstrdup (cgraph_node_name (node)), node->uid);
     372+    }
     373+  else if (dump_file)
     374+    fprintf (dump_file, "Introduced new external node "
     375+            "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
     376+  return node;
     377+}
     378 #include "gt-cgraph.h"
     379diff -Naur gcc-4.8.2.orig/gcc/cgraph.h gcc-4.8.2/gcc/cgraph.h
     380--- gcc-4.8.2.orig/gcc/cgraph.h 2013-01-17 11:43:14.000000000 +0000
     381+++ gcc-4.8.2/gcc/cgraph.h      2013-11-01 16:12:30.371173624 +0000
     382@@ -575,6 +575,7 @@
     383 struct cgraph_node * cgraph_create_node (tree);
     384 struct cgraph_node * cgraph_create_empty_node (void);
     385 struct cgraph_node * cgraph_get_create_node (tree);
     386+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
     387 struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
     388 struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
     389                                       HOST_WIDE_INT, tree, tree);
     390diff -Naur gcc-4.8.2.orig/gcc/cgraphbuild.c gcc-4.8.2/gcc/cgraphbuild.c
     391--- gcc-4.8.2.orig/gcc/cgraphbuild.c    2013-01-10 20:38:27.000000000 +0000
     392+++ gcc-4.8.2/gcc/cgraphbuild.c 2013-11-01 16:12:30.367172935 +0000
     393@@ -73,7 +73,7 @@
     394       decl = get_base_var (*tp);
     395       if (TREE_CODE (decl) == FUNCTION_DECL)
     396        {
     397-         struct cgraph_node *node = cgraph_get_create_node (decl);
     398+         struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
     399          if (!ctx->only_vars)
     400            cgraph_mark_address_taken_node (node);
     401          ipa_record_reference ((symtab_node)ctx->varpool_node,
     402@@ -143,7 +143,7 @@
     403     {
     404       struct cgraph_node *per_node;
     405 
     406-      per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
     407+      per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
     408       ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
     409       cgraph_mark_address_taken_node (per_node);
     410     }
     411@@ -223,7 +223,7 @@
     412   addr = get_base_address (addr);
     413   if (TREE_CODE (addr) == FUNCTION_DECL)
     414     {
     415-      struct cgraph_node *node = cgraph_get_create_node (addr);
     416+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
     417       cgraph_mark_address_taken_node (node);
     418       ipa_record_reference ((symtab_node)data,
     419                            (symtab_node)node,
     420@@ -252,7 +252,7 @@
     421     {
     422       /* ??? This can happen on platforms with descriptors when these are
     423         directly manipulated in the code.  Pretend that it's an address.  */
     424-      struct cgraph_node *node = cgraph_get_create_node (t);
     425+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
     426       cgraph_mark_address_taken_node (node);
     427       ipa_record_reference ((symtab_node)data,
     428                            (symtab_node)node,
     429@@ -330,7 +330,7 @@
     430            {
     431              tree fn = gimple_omp_parallel_child_fn (stmt);
     432              ipa_record_reference ((symtab_node)node,
     433-                                   (symtab_node)cgraph_get_create_node (fn),
     434+                                   (symtab_node)cgraph_get_create_real_symbol_node (fn),
     435                                    IPA_REF_ADDR, stmt);
     436            }
     437          if (gimple_code (stmt) == GIMPLE_OMP_TASK)
     438@@ -338,12 +338,12 @@
     439              tree fn = gimple_omp_task_child_fn (stmt);
     440              if (fn)
     441                ipa_record_reference ((symtab_node)node,
     442-                                     (symtab_node) cgraph_get_create_node (fn),
     443+                                     (symtab_node) cgraph_get_create_real_symbol_node (fn),
     444                                      IPA_REF_ADDR, stmt);
     445              fn = gimple_omp_task_copy_fn (stmt);
     446              if (fn)
     447                ipa_record_reference ((symtab_node)node,
     448-                                     (symtab_node)cgraph_get_create_node (fn),
     449+                                     (symtab_node)cgraph_get_create_real_symbol_node (fn),
     450                                      IPA_REF_ADDR, stmt);
     451            }
     452        }
     453diff -Naur gcc-4.8.2.orig/gcc/combine.c gcc-4.8.2/gcc/combine.c
     454--- gcc-4.8.2.orig/gcc/combine.c        2013-05-03 13:19:51.000000000 +0000
     455+++ gcc-4.8.2/gcc/combine.c     2013-11-01 16:12:30.379175001 +0000
     456@@ -5798,8 +5798,15 @@
     457                return x;
     458            }
     459 
     460-         /* If the code changed, return a whole new comparison.  */
     461-         if (new_code != code)
     462+         /* If the code changed, return a whole new comparison.
     463+            We also need to avoid using SUBST in cases where
     464+            simplify_comparison has widened a comparison with a CONST_INT,
     465+            since in that case the wider CONST_INT may fail the sanity
     466+            checks in do_SUBST.  */
     467+         if (new_code != code
     468+             || (CONST_INT_P (op1)
     469+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
     470+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
     471            return gen_rtx_fmt_ee (new_code, mode, op0, op1);
     472 
     473          /* Otherwise, keep this operation, but maybe change its operands.
    250474diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.c gcc-4.8.2/gcc/config/i386/i386.c
    251 --- gcc-4.8.2.orig/gcc/config/i386/i386.c       2013-08-23 05:01:34.000000000 -0500
    252 +++ gcc-4.8.2/gcc/config/i386/i386.c    2013-10-16 05:47:13.444609000 -0500
     475--- gcc-4.8.2.orig/gcc/config/i386/i386.c       2013-08-23 10:01:34.000000000 +0000
     476+++ gcc-4.8.2/gcc/config/i386/i386.c    2013-11-01 16:12:30.487193593 +0000
    253477@@ -2983,7 +2983,7 @@
    254478       {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
     
    260484        | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE
    261485        | PTA_XSAVEOPT},
     486@@ -7235,9 +7235,15 @@
     487   switch (regno)
     488     {
     489     case AX_REG:
     490+    case DX_REG:
     491       return true;
     492-
     493-    case FIRST_FLOAT_REG:
     494+    case DI_REG:
     495+    case SI_REG:
     496+      return TARGET_64BIT && ix86_abi != MS_ABI;
     497+
     498+      /* Complex values are returned in %st(0)/%st(1) pair.  */
     499+    case ST0_REG:
     500+    case ST1_REG:
     501       /* TODO: The function should depend on current function ABI but
     502        builtins.c would need updating then. Therefore we use the
     503        default ABI.  */
     504@@ -7245,10 +7251,12 @@
     505        return false;
     506       return TARGET_FLOAT_RETURNS_IN_80387;
     507 
     508-    case FIRST_SSE_REG:
     509+      /* Complex values are returned in %xmm0/%xmm1 pair.  */
     510+    case XMM0_REG:
     511+    case XMM1_REG:
     512       return TARGET_SSE;
     513 
     514-    case FIRST_MMX_REG:
     515+    case MM0_REG:
     516       if (TARGET_MACHO || TARGET_64BIT)
     517        return false;
     518       return TARGET_MMX;
     519@@ -13817,8 +13825,6 @@
     520         Those same assemblers have the same but opposite lossage on cmov.  */
     521       if (mode == CCmode)
     522        suffix = fp ? "nbe" : "a";
     523-      else if (mode == CCCmode)
     524-       suffix = "b";
     525       else
     526        gcc_unreachable ();
     527       break;
     528@@ -13840,8 +13846,12 @@
     529        }
     530       break;
     531     case LTU:
     532-      gcc_assert (mode == CCmode || mode == CCCmode);
     533-      suffix = "b";
     534+      if (mode == CCmode)
     535+       suffix = "b";
     536+      else if (mode == CCCmode)
     537+       suffix = "c";
     538+      else
     539+       gcc_unreachable ();
     540       break;
     541     case GE:
     542       switch (mode)
     543@@ -13861,20 +13871,20 @@
     544        }
     545       break;
     546     case GEU:
     547-      /* ??? As above.  */
     548-      gcc_assert (mode == CCmode || mode == CCCmode);
     549-      suffix = fp ? "nb" : "ae";
     550+      if (mode == CCmode)
     551+       suffix = fp ? "nb" : "ae";
     552+      else if (mode == CCCmode)
     553+       suffix = "nc";
     554+      else
     555+       gcc_unreachable ();
     556       break;
     557     case LE:
     558       gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
     559       suffix = "le";
     560       break;
     561     case LEU:
     562-      /* ??? As above.  */
     563       if (mode == CCmode)
     564        suffix = "be";
     565-      else if (mode == CCCmode)
     566-       suffix = fp ? "nb" : "ae";
     567       else
     568        gcc_unreachable ();
     569       break;
     570@@ -18486,12 +18496,7 @@
     571        return CCmode;
     572     case GTU:                  /* CF=0 & ZF=0 */
     573     case LEU:                  /* CF=1 | ZF=1 */
     574-      /* Detect overflow checks.  They need just the carry flag.  */
     575-      if (GET_CODE (op0) == MINUS
     576-         && rtx_equal_p (op1, XEXP (op0, 0)))
     577-       return CCCmode;
     578-      else
     579-       return CCmode;
     580+      return CCmode;
     581       /* Codes possibly doable only with sign flag when
     582          comparing against zero.  */
     583     case GE:                   /* SF=OF   or   SF=0 */
     584diff -Naur gcc-4.8.2.orig/gcc/config/i386/i386.md gcc-4.8.2/gcc/config/i386/i386.md
     585--- gcc-4.8.2.orig/gcc/config/i386/i386.md      2013-08-13 12:45:06.000000000 +0000
     586+++ gcc-4.8.2/gcc/config/i386/i386.md   2013-11-01 16:12:31.467362295 +0000
     587@@ -6589,7 +6589,7 @@
     588    (set_attr "use_carry" "1")
     589    (set_attr "mode" "<MODE>")])
     590 
     591
     592-;; Overflow setting add and subtract instructions
     593+;; Overflow setting add instructions
     594 
     595 (define_insn "*add<mode>3_cconly_overflow"
     596   [(set (reg:CCC FLAGS_REG)
     597@@ -6604,43 +6604,31 @@
     598   [(set_attr "type" "alu")
     599    (set_attr "mode" "<MODE>")])
     600 
     601-(define_insn "*sub<mode>3_cconly_overflow"
     602+(define_insn "*add<mode>3_cc_overflow"
     603   [(set (reg:CCC FLAGS_REG)
     604        (compare:CCC
     605-         (minus:SWI
     606-           (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
     607-           (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
     608-         (match_dup 0)))]
     609-  ""
     610-  "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
     611-  [(set_attr "type" "icmp")
     612-   (set_attr "mode" "<MODE>")])
     613-
     614-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
     615-  [(set (reg:CCC FLAGS_REG)
     616-       (compare:CCC
     617-           (plusminus:SWI
     618-               (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
     619+           (plus:SWI
     620+               (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
     621                (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
     622            (match_dup 1)))
     623    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
     624-       (plusminus:SWI (match_dup 1) (match_dup 2)))]
     625-  "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
     626-  "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
     627+       (plus:SWI (match_dup 1) (match_dup 2)))]
     628+  "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
     629+  "add{<imodesuffix>}\t{%2, %0|%0, %2}"
     630   [(set_attr "type" "alu")
     631    (set_attr "mode" "<MODE>")])
     632 
     633-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
     634+(define_insn "*addsi3_zext_cc_overflow"
     635   [(set (reg:CCC FLAGS_REG)
     636        (compare:CCC
     637-         (plusminus:SI
     638-           (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
     639+         (plus:SI
     640+           (match_operand:SI 1 "nonimmediate_operand" "%0")
     641            (match_operand:SI 2 "x86_64_general_operand" "rme"))
     642          (match_dup 1)))
     643    (set (match_operand:DI 0 "register_operand" "=r")
     644-       (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
     645-  "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
     646-  "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
     647+       (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
     648+  "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
     649+  "add{l}\t{%2, %k0|%k0, %2}"
     650   [(set_attr "type" "alu")
     651    (set_attr "mode" "SI")])
     652 
    262653diff -Naur gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md gcc-4.8.2/gcc/config/rs6000/rs6000.md
    263 --- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md  2013-09-23 09:27:06.000000000 -0500
    264 +++ gcc-4.8.2/gcc/config/rs6000/rs6000.md       2013-10-24 07:53:51.516366000 -0500
     654--- gcc-4.8.2.orig/gcc/config/rs6000/rs6000.md  2013-09-23 14:27:06.000000000 +0000
     655+++ gcc-4.8.2/gcc/config/rs6000/rs6000.md       2013-11-01 16:12:31.479364360 +0000
    265656@@ -2412,7 +2412,7 @@
    266657                             (match_operand:SI 2 "gpc_reg_operand" "r,r"))
     
    300691    (set (match_dup 3)
    301692diff -Naur gcc-4.8.2.orig/gcc/config/sh/sh.opt gcc-4.8.2/gcc/config/sh/sh.opt
    302 --- gcc-4.8.2.orig/gcc/config/sh/sh.opt 2013-03-13 13:09:10.000000000 -0500
    303 +++ gcc-4.8.2/gcc/config/sh/sh.opt      2013-10-17 08:49:40.145734000 -0500
     693--- gcc-4.8.2.orig/gcc/config/sh/sh.opt 2013-03-13 18:09:10.000000000 +0000
     694+++ gcc-4.8.2/gcc/config/sh/sh.opt      2013-11-01 16:12:32.375518598 +0000
    304695@@ -21,7 +21,7 @@
    305696 ;; Used for various architecture options.
     
    312703 ;; Set if the a double-precision FPU is present but is restricted to
    313704diff -Naur gcc-4.8.2.orig/gcc/cp/decl2.c gcc-4.8.2/gcc/cp/decl2.c
    314 --- gcc-4.8.2.orig/gcc/cp/decl2.c       2013-05-20 08:37:44.000000000 -0500
    315 +++ gcc-4.8.2/gcc/cp/decl2.c    2013-10-16 16:58:58.729529000 -0500
     705--- gcc-4.8.2.orig/gcc/cp/decl2.c       2013-05-20 13:37:44.000000000 +0000
     706+++ gcc-4.8.2/gcc/cp/decl2.c    2013-11-01 16:12:32.379519286 +0000
    316707@@ -3960,6 +3960,22 @@
    317708   expand_or_defer_fn (finish_function (0));
     
    363754   if (flag_detailed_statistics)
    364755     {
     756diff -Naur gcc-4.8.2.orig/gcc/cp/except.c gcc-4.8.2/gcc/cp/except.c
     757--- gcc-4.8.2.orig/gcc/cp/except.c      2013-01-10 20:38:27.000000000 +0000
     758+++ gcc-4.8.2/gcc/cp/except.c   2013-11-01 16:12:32.995625323 +0000
     759@@ -380,6 +380,9 @@
     760 {
     761   tree type = body ? TREE_TYPE (body) : void_type_node;
     762 
     763+  if (!flag_exceptions)
     764+    return body;
     765+
     766   if (cond && !value_dependent_expression_p (cond))
     767     {
     768       cond = cxx_constant_value (cond);
    365769diff -Naur gcc-4.8.2.orig/gcc/cp/parser.c gcc-4.8.2/gcc/cp/parser.c
    366 --- gcc-4.8.2.orig/gcc/cp/parser.c      2013-10-02 13:27:30.000000000 -0500
    367 +++ gcc-4.8.2/gcc/cp/parser.c   2013-10-16 17:19:18.772609000 -0500
     770--- gcc-4.8.2.orig/gcc/cp/parser.c      2013-10-02 18:27:30.000000000 +0000
     771+++ gcc-4.8.2/gcc/cp/parser.c   2013-11-01 16:12:33.015628766 +0000
    368772@@ -6421,10 +6421,6 @@
    369773   /* Look for the `~'.  */
     
    378782   *type = cp_parser_nonclass_name (parser);
    379783diff -Naur gcc-4.8.2.orig/gcc/cp/semantics.c gcc-4.8.2/gcc/cp/semantics.c
    380 --- gcc-4.8.2.orig/gcc/cp/semantics.c   2013-10-08 17:29:49.000000000 -0500
    381 +++ gcc-4.8.2/gcc/cp/semantics.c        2013-10-17 12:15:46.188630000 -0500
     784--- gcc-4.8.2.orig/gcc/cp/semantics.c   2013-10-08 22:29:49.000000000 +0000
     785+++ gcc-4.8.2/gcc/cp/semantics.c        2013-11-01 16:12:33.423698996 +0000
    382786@@ -9481,7 +9481,14 @@
    383787   /* In unevaluated context this isn't an odr-use, so just return the
     
    396800   /* Try to default capture 'this' if we can.  */
    397801   if (!this_capture
    398 diff -Naur gcc-4.8.2.orig/gcc/DATESTAMP gcc-4.8.2/gcc/DATESTAMP
    399 --- gcc-4.8.2.orig/gcc/DATESTAMP        2013-10-15 19:16:34.000000000 -0500
    400 +++ gcc-4.8.2/gcc/DATESTAMP     2013-10-23 19:16:46.751448000 -0500
    401 @@ -1 +1 @@
    402 -20131016
    403 +20131024
     802diff -Naur gcc-4.8.2.orig/gcc/gimple-fold.c gcc-4.8.2/gcc/gimple-fold.c
     803--- gcc-4.8.2.orig/gcc/gimple-fold.c    2013-01-13 12:33:43.000000000 +0000
     804+++ gcc-4.8.2/gcc/gimple-fold.c 2013-11-01 16:12:33.427699685 +0000
     805@@ -178,7 +178,7 @@
     806          /* Make sure we create a cgraph node for functions we'll reference.
     807             They can be non-existent if the reference comes from an entry
     808             of an external vtable for example.  */
     809-         cgraph_get_create_node (base);
     810+         cgraph_get_create_real_symbol_node (base);
     811        }
     812       /* Fixup types in global initializers.  */
     813       if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
     814diff -Naur gcc-4.8.2.orig/gcc/go/go-gcc.cc gcc-4.8.2/gcc/go/go-gcc.cc
     815--- gcc-4.8.2.orig/gcc/go/go-gcc.cc     2013-10-04 18:07:35.000000000 +0000
     816+++ gcc-4.8.2/gcc/go/go-gcc.cc  2013-11-01 16:12:34.067809850 +0000
     817@@ -232,6 +232,9 @@
     818   Bexpression*
     819   convert_expression(Btype* type, Bexpression* expr, Location);
     820 
     821+  Bexpression*
     822+  function_code_expression(Bfunction*, Location);
     823+
     824   // Statements.
     825 
     826   Bstatement*
     827@@ -334,6 +337,17 @@
     828   Bexpression*
     829   label_address(Blabel*, Location);
     830 
     831+  // Functions.
     832+
     833+  Bfunction*
     834+  error_function()
     835+  { return this->make_function(error_mark_node); }
     836+
     837+  Bfunction*
     838+  function(Btype* fntype, const std::string& name, const std::string& asm_name,
     839+           bool is_visible, bool is_declaration, bool is_inlinable,
     840+           bool disable_split_stack, bool in_unique_section, Location);
     841+
     842  private:
     843   // Make a Bexpression from a tree.
     844   Bexpression*
     845@@ -350,6 +364,10 @@
     846   make_type(tree t)
     847   { return new Btype(t); }
     848 
     849+  Bfunction*
     850+  make_function(tree t)
     851+  { return new Bfunction(t); }
     852+
     853   Btype*
     854   fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
     855 
     856@@ -966,6 +984,19 @@
     857   return tree_to_expr(ret);
     858 }
     859 
     860+// Get the address of a function.
     861+
     862+Bexpression*
     863+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
     864+{
     865+  tree func = bfunc->get_tree();
     866+  if (func == error_mark_node)
     867+    return this->error_expression();
     868+
     869+  tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
     870+  return this->make_expression(ret);
     871+}
     872+
     873 // An expression as a statement.
     874 
     875 Bstatement*
     876@@ -1724,6 +1755,56 @@
     877   return this->make_expression(ret);
     878 }
     879 
     880+// Declare or define a new function.
     881+
     882+Bfunction*
     883+Gcc_backend::function(Btype* fntype, const std::string& name,
     884+                      const std::string& asm_name, bool is_visible,
     885+                      bool is_declaration, bool is_inlinable,
     886+                      bool disable_split_stack, bool in_unique_section,
     887+                      Location location)
     888+{
     889+  tree functype = fntype->get_tree();
     890+  if (functype != error_mark_node)
     891+    {
     892+      gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
     893+      functype = TREE_TYPE(functype);
     894+    }
     895+  tree id = get_identifier_from_string(name);
     896+  if (functype == error_mark_node || id == error_mark_node)
     897+    return this->error_function();
     898+
     899+  tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
     900+  if (!asm_name.empty())
     901+    SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
     902+  if (is_visible)
     903+    TREE_PUBLIC(decl) = 1;
     904+  if (is_declaration)
     905+    DECL_EXTERNAL(decl) = 1;
     906+  else
     907+    {
     908+      tree restype = TREE_TYPE(functype);
     909+      tree resdecl =
     910+          build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
     911+      DECL_ARTIFICIAL(resdecl) = 1;
     912+      DECL_IGNORED_P(resdecl) = 1;
     913+      DECL_CONTEXT(resdecl) = decl;
     914+      DECL_RESULT(decl) = resdecl;
     915+    }
     916+  if (!is_inlinable)
     917+    DECL_UNINLINABLE(decl) = 1;
     918+  if (disable_split_stack)
     919+    {
     920+      tree attr = get_identifier("__no_split_stack__");
     921+      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
     922+    }
     923+  if (in_unique_section)
     924+    resolve_unique_section(decl, 0, 1);
     925+
     926+  go_preserve_from_gc(decl);
     927+  return new Bfunction(decl);
     928+}
     929+
     930 // The single backend.
     931 
     932 static Gcc_backend gcc_backend;
     933@@ -1799,3 +1880,9 @@
     934 {
     935   return bv->get_tree();
     936 }
     937+
     938+tree
     939+function_to_tree(Bfunction* bf)
     940+{
     941+  return bf->get_tree();
     942+}
    404943diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/backend.h gcc-4.8.2/gcc/go/gofrontend/backend.h
    405 --- gcc-4.8.2.orig/gcc/go/gofrontend/backend.h  2013-10-04 13:07:35.000000000 -0500
    406 +++ gcc-4.8.2/gcc/go/gofrontend/backend.h       2013-10-16 12:27:53.564070000 -0500
     944--- gcc-4.8.2.orig/gcc/go/gofrontend/backend.h  2013-10-04 18:07:35.000000000 +0000
     945+++ gcc-4.8.2/gcc/go/gofrontend/backend.h       2013-11-01 16:12:33.427699685 +0000
    407946@@ -23,7 +23,7 @@
    408947 // The backend representation of a statement.
     
    4671006 #endif // !defined(GO_BACKEND_H)
    4681007diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc gcc-4.8.2/gcc/go/gofrontend/expressions.cc
    469 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc     2013-10-08 18:54:31.000000000 -0500
    470 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.cc  2013-10-16 12:27:53.564070000 -0500
     1008--- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.cc     2013-10-08 23:54:31.000000000 +0000
     1009+++ gcc-4.8.2/gcc/go/gofrontend/expressions.cc  2013-11-01 16:12:33.435701062 +0000
    4711010@@ -1219,7 +1219,7 @@
    4721011 
     
    7391278   std::string sval;
    7401279diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h gcc-4.8.2/gcc/go/gofrontend/expressions.h
    741 --- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h      2013-10-08 18:54:31.000000000 -0500
    742 +++ gcc-4.8.2/gcc/go/gofrontend/expressions.h   2013-10-16 12:27:53.564070000 -0500
     1280--- gcc-4.8.2.orig/gcc/go/gofrontend/expressions.h      2013-10-08 23:54:31.000000000 +0000
     1281+++ gcc-4.8.2/gcc/go/gofrontend/expressions.h   2013-11-01 16:12:33.963791948 +0000
    7431282@@ -1514,8 +1514,8 @@
    7441283   closure()
     
    7521291 
    7531292  protected:
     1293diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc
     1294--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc       2013-09-28 20:23:56.000000000 +0000
     1295+++ gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc    2013-11-01 16:12:33.975794014 +0000
     1296@@ -985,74 +985,6 @@
     1297   delete[] vec;
     1298 }
     1299 
     1300-// Get a tree for the identifier for a named object.
     1301-
     1302-tree
     1303-Named_object::get_id(Gogo* gogo)
     1304-{
     1305-  go_assert(!this->is_variable() && !this->is_result_variable());
     1306-  std::string decl_name;
     1307-  if (this->is_function_declaration()
     1308-      && !this->func_declaration_value()->asm_name().empty())
     1309-    decl_name = this->func_declaration_value()->asm_name();
     1310-  else if (this->is_type()
     1311-          && Linemap::is_predeclared_location(this->type_value()->location()))
     1312-    {
     1313-      // We don't need the package name for builtin types.
     1314-      decl_name = Gogo::unpack_hidden_name(this->name_);
     1315-    }
     1316-  else
     1317-    {
     1318-      std::string package_name;
     1319-      if (this->package_ == NULL)
     1320-       package_name = gogo->package_name();
     1321-      else
     1322-       package_name = this->package_->package_name();
     1323-
     1324-      // Note that this will be misleading if this is an unexported
     1325-      // method generated for an embedded imported type.  In that case
     1326-      // the unexported method should have the package name of the
     1327-      // package from which it is imported, but we are going to give
     1328-      // it our package name.  Fixing this would require knowing the
     1329-      // package name, but we only know the package path.  It might be
     1330-      // better to use package paths here anyhow.  This doesn't affect
     1331-      // the assembler code, because we always set that name in
     1332-      // Function::get_or_make_decl anyhow.  FIXME.
     1333-
     1334-      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
     1335-
     1336-      Function_type* fntype;
     1337-      if (this->is_function())
     1338-       fntype = this->func_value()->type();
     1339-      else if (this->is_function_declaration())
     1340-       fntype = this->func_declaration_value()->type();
     1341-      else
     1342-       fntype = NULL;
     1343-      if (fntype != NULL && fntype->is_method())
     1344-       {
     1345-         decl_name.push_back('.');
     1346-         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
     1347-       }
     1348-    }
     1349-  if (this->is_type())
     1350-    {
     1351-      unsigned int index;
     1352-      const Named_object* in_function = this->type_value()->in_function(&index);
     1353-      if (in_function != NULL)
     1354-       {
     1355-         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
     1356-         if (index > 0)
     1357-           {
     1358-             char buf[30];
     1359-             snprintf(buf, sizeof buf, "%u", index);
     1360-             decl_name += '$';
     1361-             decl_name += buf;
     1362-           }
     1363-       }
     1364-    }
     1365-  return get_identifier_from_string(decl_name);
     1366-}
     1367-
     1368 // Get a tree for a named object.
     1369 
     1370 tree
     1371@@ -1067,11 +999,6 @@
     1372       return error_mark_node;
     1373     }
     1374 
     1375-  tree name;
     1376-  if (this->classification_ == NAMED_OBJECT_TYPE)
     1377-    name = NULL_TREE;
     1378-  else
     1379-    name = this->get_id(gogo);
     1380   tree decl;
     1381   switch (this->classification_)
     1382     {
     1383@@ -1099,6 +1026,7 @@
     1384              decl = error_mark_node;
     1385            else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
     1386              {
     1387+                tree name = get_identifier_from_string(this->get_id(gogo));
     1388                decl = build_decl(named_constant->location().gcc_location(),
     1389                                   CONST_DECL, name, TREE_TYPE(expr_tree));
     1390                DECL_INITIAL(decl) = expr_tree;
     1391@@ -1161,7 +1089,7 @@
     1392     case NAMED_OBJECT_FUNC:
     1393       {
     1394        Function* func = this->u_.func_value;
     1395-       decl = func->get_or_make_decl(gogo, this, name);
     1396+       decl = function_to_tree(func->get_or_make_decl(gogo, this));
     1397        if (decl != error_mark_node)
     1398          {
     1399            if (func->block() != NULL)
     1400@@ -1286,123 +1214,12 @@
     1401   return block_tree;
     1402 }
     1403 
     1404-// Get a tree for a function decl.
     1405+// Get the backend representation.
     1406 
     1407-tree
     1408-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
     1409+Bfunction*
     1410+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
     1411 {
     1412-  if (this->fndecl_ == NULL_TREE)
     1413-    {
     1414-      tree functype = type_to_tree(this->type_->get_backend(gogo));
     1415-
     1416-      if (functype != error_mark_node)
     1417-       {
     1418-         // The type of a function comes back as a pointer to a
     1419-         // struct whose first field is the function, but we want the
     1420-         // real function type for a function declaration.
     1421-         go_assert(POINTER_TYPE_P(functype)
     1422-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
     1423-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
     1424-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
     1425-         functype = TREE_TYPE(functype);
     1426-       }
     1427-
     1428-      if (functype == error_mark_node)
     1429-       this->fndecl_ = error_mark_node;
     1430-      else
     1431-       {
     1432-         tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
     1433-                                 id, functype);
     1434-
     1435-         this->fndecl_ = decl;
     1436-
     1437-         if (no->package() != NULL)
     1438-           ;
     1439-         else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
     1440-           ;
     1441-         else if (Gogo::unpack_hidden_name(no->name()) == "init"
     1442-                  && !this->type_->is_method())
     1443-           ;
     1444-         else if (Gogo::unpack_hidden_name(no->name()) == "main"
     1445-                  && gogo->is_main_package())
     1446-           TREE_PUBLIC(decl) = 1;
     1447-         // Methods have to be public even if they are hidden because
     1448-         // they can be pulled into type descriptors when using
     1449-         // anonymous fields.
     1450-         else if (!Gogo::is_hidden_name(no->name())
     1451-                  || this->type_->is_method())
     1452-           {
     1453-             TREE_PUBLIC(decl) = 1;
     1454-             std::string pkgpath = gogo->pkgpath_symbol();
     1455-             if (this->type_->is_method()
     1456-                 && Gogo::is_hidden_name(no->name())
     1457-                 && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
     1458-               {
     1459-                 // This is a method we created for an unexported
     1460-                 // method of an imported embedded type.  We need to
     1461-                 // use the pkgpath of the imported package to avoid
     1462-                 // a possible name collision.  See bug478 for a test
     1463-                 // case.
     1464-                 pkgpath = Gogo::hidden_name_pkgpath(no->name());
     1465-                 pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
     1466-               }
     1467-
     1468-             std::string asm_name = pkgpath;
     1469-             asm_name.append(1, '.');
     1470-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
     1471-             if (this->type_->is_method())
     1472-               {
     1473-                 asm_name.append(1, '.');
     1474-                 Type* rtype = this->type_->receiver()->type();
     1475-                 asm_name.append(rtype->mangled_name(gogo));
     1476-               }
     1477-             SET_DECL_ASSEMBLER_NAME(decl,
     1478-                                     get_identifier_from_string(asm_name));
     1479-           }
     1480-
     1481-         // Why do we have to do this in the frontend?
     1482-         tree restype = TREE_TYPE(functype);
     1483-         tree resdecl =
     1484-            build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
     1485-                       restype);
     1486-         DECL_ARTIFICIAL(resdecl) = 1;
     1487-         DECL_IGNORED_P(resdecl) = 1;
     1488-         DECL_CONTEXT(resdecl) = decl;
     1489-         DECL_RESULT(decl) = resdecl;
     1490-
     1491-         // If a function calls the predeclared recover function, we
     1492-         // can't inline it, because recover behaves differently in a
     1493-         // function passed directly to defer.  If this is a recover
     1494-         // thunk that we built to test whether a function can be
     1495-         // recovered, we can't inline it, because that will mess up
     1496-         // our return address comparison.
     1497-         if (this->calls_recover_ || this->is_recover_thunk_)
     1498-           DECL_UNINLINABLE(decl) = 1;
     1499-
     1500-         // If this is a thunk created to call a function which calls
     1501-         // the predeclared recover function, we need to disable
     1502-         // stack splitting for the thunk.
     1503-         if (this->is_recover_thunk_)
     1504-           {
     1505-             tree attr = get_identifier("__no_split_stack__");
     1506-             DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
     1507-           }
     1508-
     1509-         if (this->in_unique_section_)
     1510-           resolve_unique_section (decl, 0, 1);
     1511-
     1512-         go_preserve_from_gc(decl);
     1513-       }
     1514-    }
     1515-  return this->fndecl_;
     1516-}
     1517-
     1518-// Get a tree for a function declaration.
     1519-
     1520-tree
     1521-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
     1522-{
     1523-  if (this->fndecl_ == NULL_TREE)
     1524+  if (this->fndecl_ == NULL)
     1525     {
     1526       // Let Go code use an asm declaration to pick up a builtin
     1527       // function.
     1528@@ -1412,56 +1229,44 @@
     1529            builtin_functions.find(this->asm_name_);
     1530          if (p != builtin_functions.end())
     1531            {
     1532-             this->fndecl_ = p->second;
     1533+             this->fndecl_ = tree_to_function(p->second);
     1534              return this->fndecl_;
     1535            }
     1536        }
     1537 
     1538-      tree functype = type_to_tree(this->fntype_->get_backend(gogo));
     1539+      std::string asm_name;
     1540+      if (this->asm_name_.empty())
     1541+        {
     1542+          asm_name = (no->package() == NULL
     1543+                                  ? gogo->pkgpath_symbol()
     1544+                                  : no->package()->pkgpath_symbol());
     1545+          asm_name.append(1, '.');
     1546+          asm_name.append(Gogo::unpack_hidden_name(no->name()));
     1547+          if (this->fntype_->is_method())
     1548+            {
     1549+              asm_name.append(1, '.');
     1550+              Type* rtype = this->fntype_->receiver()->type();
     1551+              asm_name.append(rtype->mangled_name(gogo));
     1552+            }
     1553+        }
     1554+
     1555+      Btype* functype = this->fntype_->get_backend_fntype(gogo);
     1556+      this->fndecl_ =
     1557+          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
     1558+                                    true, true, true, false, false,
     1559+                                    this->location());
     1560+    }
     1561 
     1562-      if (functype != error_mark_node)
     1563-       {
     1564-         // The type of a function comes back as a pointer to a
     1565-         // struct whose first field is the function, but we want the
     1566-         // real function type for a function declaration.
     1567-         go_assert(POINTER_TYPE_P(functype)
     1568-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
     1569-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
     1570-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
     1571-         functype = TREE_TYPE(functype);
     1572-       }
     1573+  return this->fndecl_;
     1574+}
     1575 
     1576-      tree decl;
     1577-      if (functype == error_mark_node)
     1578-       decl = error_mark_node;
     1579-      else
     1580-       {
     1581-         decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
     1582-                            functype);
     1583-         TREE_PUBLIC(decl) = 1;
     1584-         DECL_EXTERNAL(decl) = 1;
     1585+// Return the function's decl after it has been built.
     1586 
     1587-         if (this->asm_name_.empty())
     1588-           {
     1589-             std::string asm_name = (no->package() == NULL
     1590-                                     ? gogo->pkgpath_symbol()
     1591-                                     : no->package()->pkgpath_symbol());
     1592-             asm_name.append(1, '.');
     1593-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
     1594-             if (this->fntype_->is_method())
     1595-               {
     1596-                 asm_name.append(1, '.');
     1597-                 Type* rtype = this->fntype_->receiver()->type();
     1598-                 asm_name.append(rtype->mangled_name(gogo));
     1599-               }
     1600-             SET_DECL_ASSEMBLER_NAME(decl,
     1601-                                     get_identifier_from_string(asm_name));
     1602-           }
     1603-       }
     1604-      this->fndecl_ = decl;
     1605-      go_preserve_from_gc(decl);
     1606-    }
     1607-  return this->fndecl_;
     1608+tree
     1609+Function::get_decl() const
     1610+{
     1611+  go_assert(this->fndecl_ != NULL);
     1612+  return function_to_tree(this->fndecl_);
     1613 }
     1614 
     1615 // We always pass the receiver to a method as a pointer.  If the
     1616@@ -1558,7 +1363,7 @@
     1617 void
     1618 Function::build_tree(Gogo* gogo, Named_object* named_function)
     1619 {
     1620-  tree fndecl = this->fndecl_;
     1621+  tree fndecl = this->get_decl();
     1622   go_assert(fndecl != NULL_TREE);
     1623 
     1624   tree params = NULL_TREE;
     1625@@ -1796,7 +1601,7 @@
     1626     set = NULL_TREE;
     1627   else
     1628     set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
     1629-                         DECL_RESULT(this->fndecl_), retval);
     1630+                         DECL_RESULT(this->get_decl()), retval);
     1631   tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
     1632                                   void_type_node, set);
     1633   append_to_statement_list(ret_stmt, &stmt_list);
     1634@@ -1851,7 +1656,7 @@
     1635       retval = this->return_value(gogo, named_function, end_loc,
     1636                                  &stmt_list);
     1637       set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
     1638-                           DECL_RESULT(this->fndecl_), retval);
     1639+                           DECL_RESULT(this->get_decl()), retval);
     1640       ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
     1641                                  void_type_node, set);
     1642 
     1643@@ -1869,7 +1674,7 @@
     1644   *fini = stmt_list;
     1645 }
     1646 
     1647-// Return the value to assign to DECL_RESULT(this->fndecl_).  This may
     1648+// Return the value to assign to DECL_RESULT(this->get_decl()).  This may
     1649 // also add statements to STMT_LIST, which need to be executed before
     1650 // the assignment.  This is used for a return statement with no
     1651 // explicit values.
     1652@@ -1902,7 +1707,7 @@
     1653     }
     1654   else
     1655     {
     1656-      tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
     1657+      tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
     1658       retval = create_tmp_var(rettype, "RESULT");
     1659       tree field = TYPE_FIELDS(rettype);
     1660       int index = 0;
     1661@@ -2323,18 +2128,14 @@
     1662       go_assert(m != NULL);
     1663 
     1664       Named_object* no = m->named_object();
     1665-
     1666-      tree fnid = no->get_id(this);
     1667-
     1668-      tree fndecl;
     1669+      Bfunction* bf;
     1670       if (no->is_function())
     1671-       fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
     1672+       bf = no->func_value()->get_or_make_decl(this, no);
     1673       else if (no->is_function_declaration())
     1674-       fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
     1675-                                                               fnid);
     1676+       bf = no->func_declaration_value()->get_or_make_decl(this, no);
     1677       else
     1678        go_unreachable();
     1679-      fndecl = build_fold_addr_expr(fndecl);
     1680+      tree fndecl = build_fold_addr_expr(function_to_tree(bf));
     1681 
     1682       elt = pointers->quick_push(empty);
     1683       elt->index = size_int(i);
     1684@@ -2353,10 +2154,11 @@
     1685   TREE_CONSTANT(decl) = 1;
     1686   DECL_INITIAL(decl) = constructor;
     1687 
     1688-  // If the interface type has hidden methods, then this is the only
     1689-  // definition of the table.  Otherwise it is a comdat table which
     1690-  // may be defined in multiple packages.
     1691-  if (has_hidden_methods)
     1692+  // If the interface type has hidden methods, and the table is for a
     1693+  // named type, then this is the only definition of the table.
     1694+  // Otherwise it is a comdat table which may be defined in multiple
     1695+  // packages.
     1696+  if (has_hidden_methods && type->named_type() != NULL)
     1697     TREE_PUBLIC(decl) = 1;
     1698   else
     1699     {
    7541700diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc gcc-4.8.2/gcc/go/gofrontend/gogo.cc
    755 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc    2013-09-28 15:23:56.000000000 -0500
    756 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.cc 2013-10-16 12:27:53.564070000 -0500
     1701--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.cc    2013-09-28 20:23:56.000000000 +0000
     1702+++ gcc-4.8.2/gcc/go/gofrontend/gogo.cc 2013-11-01 16:12:33.967792637 +0000
    7571703@@ -3320,7 +3320,8 @@
    7581704     closure_var_(NULL), block_(block), location_(location), labels_(),
     
    9241870 Bindings::Bindings(Bindings* enclosing)
    9251871diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h gcc-4.8.2/gcc/go/gofrontend/gogo.h
    926 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h     2013-09-28 15:23:56.000000000 -0500
    927 +++ gcc-4.8.2/gcc/go/gofrontend/gogo.h  2013-10-16 12:27:53.564070000 -0500
     1872--- gcc-4.8.2.orig/gcc/go/gofrontend/gogo.h     2013-09-28 20:23:56.000000000 +0000
     1873+++ gcc-4.8.2/gcc/go/gofrontend/gogo.h  2013-11-01 16:12:33.971793325 +0000
    9281874@@ -48,6 +48,7 @@
    9291875 class Bblock;
     
    10241970 
    10251971   // Return a tree representing this object.
    1026 diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc
    1027 --- gcc-4.8.2.orig/gcc/go/gofrontend/gogo-tree.cc       2013-09-28 15:23:56.000000000 -0500
    1028 +++ gcc-4.8.2/gcc/go/gofrontend/gogo-tree.cc    2013-10-16 12:27:53.564070000 -0500
    1029 @@ -985,74 +985,6 @@
    1030    delete[] vec;
    1031  }
    1032  
    1033 -// Get a tree for the identifier for a named object.
    1034 -
    1035 -tree
    1036 -Named_object::get_id(Gogo* gogo)
    1037 -{
    1038 -  go_assert(!this->is_variable() && !this->is_result_variable());
    1039 -  std::string decl_name;
    1040 -  if (this->is_function_declaration()
    1041 -      && !this->func_declaration_value()->asm_name().empty())
    1042 -    decl_name = this->func_declaration_value()->asm_name();
    1043 -  else if (this->is_type()
    1044 -          && Linemap::is_predeclared_location(this->type_value()->location()))
    1045 -    {
    1046 -      // We don't need the package name for builtin types.
    1047 -      decl_name = Gogo::unpack_hidden_name(this->name_);
    1048 -    }
    1049 -  else
    1050 -    {
    1051 -      std::string package_name;
    1052 -      if (this->package_ == NULL)
    1053 -       package_name = gogo->package_name();
    1054 -      else
    1055 -       package_name = this->package_->package_name();
    1056 -
    1057 -      // Note that this will be misleading if this is an unexported
    1058 -      // method generated for an embedded imported type.  In that case
    1059 -      // the unexported method should have the package name of the
    1060 -      // package from which it is imported, but we are going to give
    1061 -      // it our package name.  Fixing this would require knowing the
    1062 -      // package name, but we only know the package path.  It might be
    1063 -      // better to use package paths here anyhow.  This doesn't affect
    1064 -      // the assembler code, because we always set that name in
    1065 -      // Function::get_or_make_decl anyhow.  FIXME.
    1066 -
    1067 -      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
    1068 -
    1069 -      Function_type* fntype;
    1070 -      if (this->is_function())
    1071 -       fntype = this->func_value()->type();
    1072 -      else if (this->is_function_declaration())
    1073 -       fntype = this->func_declaration_value()->type();
    1074 -      else
    1075 -       fntype = NULL;
    1076 -      if (fntype != NULL && fntype->is_method())
    1077 -       {
    1078 -         decl_name.push_back('.');
    1079 -         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
    1080 -       }
    1081 -    }
    1082 -  if (this->is_type())
    1083 -    {
    1084 -      unsigned int index;
    1085 -      const Named_object* in_function = this->type_value()->in_function(&index);
    1086 -      if (in_function != NULL)
    1087 -       {
    1088 -         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
    1089 -         if (index > 0)
    1090 -           {
    1091 -             char buf[30];
    1092 -             snprintf(buf, sizeof buf, "%u", index);
    1093 -             decl_name += '$';
    1094 -             decl_name += buf;
    1095 -           }
    1096 -       }
    1097 -    }
    1098 -  return get_identifier_from_string(decl_name);
    1099 -}
    1100 -
    1101  // Get a tree for a named object.
    1102  
    1103  tree
    1104 @@ -1067,11 +999,6 @@
    1105        return error_mark_node;
    1106      }
    1107  
    1108 -  tree name;
    1109 -  if (this->classification_ == NAMED_OBJECT_TYPE)
    1110 -    name = NULL_TREE;
    1111 -  else
    1112 -    name = this->get_id(gogo);
    1113    tree decl;
    1114    switch (this->classification_)
    1115      {
    1116 @@ -1099,6 +1026,7 @@
    1117               decl = error_mark_node;
    1118             else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
    1119               {
    1120 +                tree name = get_identifier_from_string(this->get_id(gogo));
    1121                 decl = build_decl(named_constant->location().gcc_location(),
    1122                                    CONST_DECL, name, TREE_TYPE(expr_tree));
    1123                 DECL_INITIAL(decl) = expr_tree;
    1124 @@ -1161,7 +1089,7 @@
    1125      case NAMED_OBJECT_FUNC:
    1126        {
    1127         Function* func = this->u_.func_value;
    1128 -       decl = func->get_or_make_decl(gogo, this, name);
    1129 +       decl = function_to_tree(func->get_or_make_decl(gogo, this));
    1130         if (decl != error_mark_node)
    1131           {
    1132             if (func->block() != NULL)
    1133 @@ -1286,123 +1214,12 @@
    1134    return block_tree;
    1135  }
    1136  
    1137 -// Get a tree for a function decl.
    1138 +// Get the backend representation.
    1139  
    1140 -tree
    1141 -Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
    1142 +Bfunction*
    1143 +Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
    1144  {
    1145 -  if (this->fndecl_ == NULL_TREE)
    1146 -    {
    1147 -      tree functype = type_to_tree(this->type_->get_backend(gogo));
    1148 -
    1149 -      if (functype != error_mark_node)
    1150 -       {
    1151 -         // The type of a function comes back as a pointer to a
    1152 -         // struct whose first field is the function, but we want the
    1153 -         // real function type for a function declaration.
    1154 -         go_assert(POINTER_TYPE_P(functype)
    1155 -                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
    1156 -         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
    1157 -         go_assert(FUNCTION_POINTER_TYPE_P(functype));
    1158 -         functype = TREE_TYPE(functype);
    1159 -       }
    1160 -
    1161 -      if (functype == error_mark_node)
    1162 -       this->fndecl_ = error_mark_node;
    1163 -      else
    1164 -       {
    1165 -         tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
    1166 -                                 id, functype);
    1167 -
    1168 -         this->fndecl_ = decl;
    1169 -
    1170 -         if (no->package() != NULL)
    1171 -           ;
    1172 -         else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
    1173 -           ;
    1174 -         else if (Gogo::unpack_hidden_name(no->name()) == "init"
    1175 -                  && !this->type_->is_method())
    1176 -           ;
    1177 -         else if (Gogo::unpack_hidden_name(no->name()) == "main"
    1178 -                  && gogo->is_main_package())
    1179 -           TREE_PUBLIC(decl) = 1;
    1180 -         // Methods have to be public even if they are hidden because
    1181 -         // they can be pulled into type descriptors when using
    1182 -         // anonymous fields.
    1183 -         else if (!Gogo::is_hidden_name(no->name())
    1184 -                  || this->type_->is_method())
    1185 -           {
    1186 -             TREE_PUBLIC(decl) = 1;
    1187 -             std::string pkgpath = gogo->pkgpath_symbol();
    1188 -             if (this->type_->is_method()
    1189 -                 && Gogo::is_hidden_name(no->name())
    1190 -                 && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
    1191 -               {
    1192 -                 // This is a method we created for an unexported
    1193 -                 // method of an imported embedded type.  We need to
    1194 -                 // use the pkgpath of the imported package to avoid
    1195 -                 // a possible name collision.  See bug478 for a test
    1196 -                 // case.
    1197 -                 pkgpath = Gogo::hidden_name_pkgpath(no->name());
    1198 -                 pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
    1199 -               }
    1200 -
    1201 -             std::string asm_name = pkgpath;
    1202 -             asm_name.append(1, '.');
    1203 -             asm_name.append(Gogo::unpack_hidden_name(no->name()));
    1204 -             if (this->type_->is_method())
    1205 -               {
    1206 -                 asm_name.append(1, '.');
    1207 -                 Type* rtype = this->type_->receiver()->type();
    1208 -                 asm_name.append(rtype->mangled_name(gogo));
    1209 -               }
    1210 -             SET_DECL_ASSEMBLER_NAME(decl,
    1211 -                                     get_identifier_from_string(asm_name));
    1212 -           }
    1213 -
    1214 -         // Why do we have to do this in the frontend?
    1215 -         tree restype = TREE_TYPE(functype);
    1216 -         tree resdecl =
    1217 -            build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
    1218 -                       restype);
    1219 -         DECL_ARTIFICIAL(resdecl) = 1;
    1220 -         DECL_IGNORED_P(resdecl) = 1;
    1221 -         DECL_CONTEXT(resdecl) = decl;
    1222 -         DECL_RESULT(decl) = resdecl;
    1223 -
    1224 -         // If a function calls the predeclared recover function, we
    1225 -         // can't inline it, because recover behaves differently in a
    1226 -         // function passed directly to defer.  If this is a recover
    1227 -         // thunk that we built to test whether a function can be
    1228 -         // recovered, we can't inline it, because that will mess up
    1229 -         // our return address comparison.
    1230 -         if (this->calls_recover_ || this->is_recover_thunk_)
    1231 -           DECL_UNINLINABLE(decl) = 1;
    1232 -
    1233 -         // If this is a thunk created to call a function which calls
    1234 -         // the predeclared recover function, we need to disable
    1235 -         // stack splitting for the thunk.
    1236 -         if (this->is_recover_thunk_)
    1237 -           {
    1238 -             tree attr = get_identifier("__no_split_stack__");
    1239 -             DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
    1240 -           }
    1241 -
    1242 -         if (this->in_unique_section_)
    1243 -           resolve_unique_section (decl, 0, 1);
    1244 -
    1245 -         go_preserve_from_gc(decl);
    1246 -       }
    1247 -    }
    1248 -  return this->fndecl_;
    1249 -}
    1250 -
    1251 -// Get a tree for a function declaration.
    1252 -
    1253 -tree
    1254 -Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
    1255 -{
    1256 -  if (this->fndecl_ == NULL_TREE)
    1257 +  if (this->fndecl_ == NULL)
    1258      {
    1259        // Let Go code use an asm declaration to pick up a builtin
    1260        // function.
    1261 @@ -1412,56 +1229,44 @@
    1262             builtin_functions.find(this->asm_name_);
    1263           if (p != builtin_functions.end())
    1264             {
    1265 -             this->fndecl_ = p->second;
    1266 +             this->fndecl_ = tree_to_function(p->second);
    1267               return this->fndecl_;
    1268             }
    1269         }
    1270  
    1271 -      tree functype = type_to_tree(this->fntype_->get_backend(gogo));
    1272 +      std::string asm_name;
    1273 +      if (this->asm_name_.empty())
    1274 +        {
    1275 +          asm_name = (no->package() == NULL
    1276 +                                  ? gogo->pkgpath_symbol()
    1277 +                                  : no->package()->pkgpath_symbol());
    1278 +          asm_name.append(1, '.');
    1279 +          asm_name.append(Gogo::unpack_hidden_name(no->name()));
    1280 +          if (this->fntype_->is_method())
    1281 +            {
    1282 +              asm_name.append(1, '.');
    1283 +              Type* rtype = this->fntype_->receiver()->type();
    1284 +              asm_name.append(rtype->mangled_name(gogo));
    1285 +            }
    1286 +        }
    1287 +
    1288 +      Btype* functype = this->fntype_->get_backend_fntype(gogo);
    1289 +      this->fndecl_ =
    1290 +          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
    1291 +                                    true, true, true, false, false,
    1292 +                                    this->location());
    1293 +    }
    1294  
    1295 -      if (functype != error_mark_node)
    1296 -       {
    1297 -         // The type of a function comes back as a pointer to a
    1298 -         // struct whose first field is the function, but we want the
    1299 -         // real function type for a function declaration.
    1300 -         go_assert(POINTER_TYPE_P(functype)
    1301 -                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
    1302 -         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
    1303 -         go_assert(FUNCTION_POINTER_TYPE_P(functype));
    1304 -         functype = TREE_TYPE(functype);
    1305 -       }
    1306 +  return this->fndecl_;
    1307 +}
    1308  
    1309 -      tree decl;
    1310 -      if (functype == error_mark_node)
    1311 -       decl = error_mark_node;
    1312 -      else
    1313 -       {
    1314 -         decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
    1315 -                            functype);
    1316 -         TREE_PUBLIC(decl) = 1;
    1317 -         DECL_EXTERNAL(decl) = 1;
    1318 +// Return the function's decl after it has been built.
    1319  
    1320 -         if (this->asm_name_.empty())
    1321 -           {
    1322 -             std::string asm_name = (no->package() == NULL
    1323 -                                     ? gogo->pkgpath_symbol()
    1324 -                                     : no->package()->pkgpath_symbol());
    1325 -             asm_name.append(1, '.');
    1326 -             asm_name.append(Gogo::unpack_hidden_name(no->name()));
    1327 -             if (this->fntype_->is_method())
    1328 -               {
    1329 -                 asm_name.append(1, '.');
    1330 -                 Type* rtype = this->fntype_->receiver()->type();
    1331 -                 asm_name.append(rtype->mangled_name(gogo));
    1332 -               }
    1333 -             SET_DECL_ASSEMBLER_NAME(decl,
    1334 -                                     get_identifier_from_string(asm_name));
    1335 -           }
    1336 -       }
    1337 -      this->fndecl_ = decl;
    1338 -      go_preserve_from_gc(decl);
    1339 -    }
    1340 -  return this->fndecl_;
    1341 +tree
    1342 +Function::get_decl() const
    1343 +{
    1344 +  go_assert(this->fndecl_ != NULL);
    1345 +  return function_to_tree(this->fndecl_);
    1346  }
    1347  
    1348  // We always pass the receiver to a method as a pointer.  If the
    1349 @@ -1558,7 +1363,7 @@
    1350  void
    1351  Function::build_tree(Gogo* gogo, Named_object* named_function)
    1352  {
    1353 -  tree fndecl = this->fndecl_;
    1354 +  tree fndecl = this->get_decl();
    1355    go_assert(fndecl != NULL_TREE);
    1356  
    1357    tree params = NULL_TREE;
    1358 @@ -1796,7 +1601,7 @@
    1359      set = NULL_TREE;
    1360    else
    1361      set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
    1362 -                         DECL_RESULT(this->fndecl_), retval);
    1363 +                         DECL_RESULT(this->get_decl()), retval);
    1364    tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
    1365                                    void_type_node, set);
    1366    append_to_statement_list(ret_stmt, &stmt_list);
    1367 @@ -1851,7 +1656,7 @@
    1368        retval = this->return_value(gogo, named_function, end_loc,
    1369                                   &stmt_list);
    1370        set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
    1371 -                           DECL_RESULT(this->fndecl_), retval);
    1372 +                           DECL_RESULT(this->get_decl()), retval);
    1373        ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
    1374                                   void_type_node, set);
    1375  
    1376 @@ -1869,7 +1674,7 @@
    1377    *fini = stmt_list;
    1378  }
    1379  
    1380 -// Return the value to assign to DECL_RESULT(this->fndecl_).  This may
    1381 +// Return the value to assign to DECL_RESULT(this->get_decl()).  This may
    1382  // also add statements to STMT_LIST, which need to be executed before
    1383  // the assignment.  This is used for a return statement with no
    1384  // explicit values.
    1385 @@ -1902,7 +1707,7 @@
    1386      }
    1387    else
    1388      {
    1389 -      tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
    1390 +      tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
    1391        retval = create_tmp_var(rettype, "RESULT");
    1392        tree field = TYPE_FIELDS(rettype);
    1393        int index = 0;
    1394 @@ -2323,18 +2128,14 @@
    1395        go_assert(m != NULL);
    1396  
    1397        Named_object* no = m->named_object();
    1398 -
    1399 -      tree fnid = no->get_id(this);
    1400 -
    1401 -      tree fndecl;
    1402 +      Bfunction* bf;
    1403        if (no->is_function())
    1404 -       fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
    1405 +       bf = no->func_value()->get_or_make_decl(this, no);
    1406        else if (no->is_function_declaration())
    1407 -       fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
    1408 -                                                               fnid);
    1409 +       bf = no->func_declaration_value()->get_or_make_decl(this, no);
    1410        else
    1411         go_unreachable();
    1412 -      fndecl = build_fold_addr_expr(fndecl);
    1413 +      tree fndecl = build_fold_addr_expr(function_to_tree(bf));
    1414  
    1415        elt = pointers->quick_push(empty);
    1416        elt->index = size_int(i);
    1417 @@ -2353,10 +2154,11 @@
    1418    TREE_CONSTANT(decl) = 1;
    1419    DECL_INITIAL(decl) = constructor;
    1420  
    1421 -  // If the interface type has hidden methods, then this is the only
    1422 -  // definition of the table.  Otherwise it is a comdat table which
    1423 -  // may be defined in multiple packages.
    1424 -  if (has_hidden_methods)
    1425 +  // If the interface type has hidden methods, and the table is for a
    1426 +  // named type, then this is the only definition of the table.
    1427 +  // Otherwise it is a comdat table which may be defined in multiple
    1428 +  // packages.
    1429 +  if (has_hidden_methods && type->named_type() != NULL)
    1430      TREE_PUBLIC(decl) = 1;
    1431    else
    1432      {
    14331972diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/import.h gcc-4.8.2/gcc/go/gofrontend/import.h
    1434 --- gcc-4.8.2.orig/gcc/go/gofrontend/import.h   2012-10-30 19:38:49.000000000 -0500
    1435 +++ gcc-4.8.2/gcc/go/gofrontend/import.h        2013-10-16 12:27:53.564070000 -0500
     1973--- gcc-4.8.2.orig/gcc/go/gofrontend/import.h   2012-10-31 00:38:49.000000000 +0000
     1974+++ gcc-4.8.2/gcc/go/gofrontend/import.h        2013-11-01 16:12:33.975794014 +0000
    14361975@@ -149,6 +149,11 @@
    14371976   location() const
     
    14471986   peek_char()
    14481987diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc gcc-4.8.2/gcc/go/gofrontend/lex.cc
    1449 --- gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc     2012-12-03 00:57:04.000000000 -0600
    1450 +++ gcc-4.8.2/gcc/go/gofrontend/lex.cc  2013-10-16 12:27:53.564070000 -0500
     1988--- gcc-4.8.2.orig/gcc/go/gofrontend/lex.cc     2012-12-03 06:57:04.000000000 +0000
     1989+++ gcc-4.8.2/gcc/go/gofrontend/lex.cc  2013-11-01 16:12:33.979794702 +0000
    14511990@@ -873,7 +873,28 @@
    14521991              && (cc < 'a' || cc > 'z')
     
    14802019            {
    14812020diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc gcc-4.8.2/gcc/go/gofrontend/parse.cc
    1482 --- gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc   2013-10-08 18:54:31.000000000 -0500
    1483 +++ gcc-4.8.2/gcc/go/gofrontend/parse.cc        2013-10-16 12:27:53.564070000 -0500
     2021--- gcc-4.8.2.orig/gcc/go/gofrontend/parse.cc   2013-10-08 23:54:31.000000000 +0000
     2022+++ gcc-4.8.2/gcc/go/gofrontend/parse.cc        2013-11-01 16:12:33.979794702 +0000
    14842023@@ -744,6 +744,8 @@
    14852024     return NULL;
     
    14922031   if (results != NULL)
    14932032diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc gcc-4.8.2/gcc/go/gofrontend/runtime.cc
    1494 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc 2012-12-21 09:59:27.000000000 -0600
    1495 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.cc      2013-10-16 12:27:53.564070000 -0500
     2033--- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.cc 2012-12-21 15:59:27.000000000 +0000
     2034+++ gcc-4.8.2/gcc/go/gofrontend/runtime.cc      2013-11-01 16:12:34.055807784 +0000
    14962035@@ -42,6 +42,8 @@
    14972036   RFT_RUNE,
     
    15232062     case RFT_POINTER:
    15242063diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def gcc-4.8.2/gcc/go/gofrontend/runtime.def
    1525 --- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def        2013-06-18 18:50:42.000000000 -0500
    1526 +++ gcc-4.8.2/gcc/go/gofrontend/runtime.def     2013-10-16 12:27:53.564070000 -0500
     2064--- gcc-4.8.2.orig/gcc/go/gofrontend/runtime.def        2013-06-18 23:50:42.000000000 +0000
     2065+++ gcc-4.8.2/gcc/go/gofrontend/runtime.def     2013-11-01 16:12:34.055807784 +0000
    15272066@@ -68,6 +68,12 @@
    15282067               P1(STRING), R1(SLICE))
     
    15392078 DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
    15402079diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.cc gcc-4.8.2/gcc/go/gofrontend/types.cc
    1541 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.cc   2013-10-02 14:22:30.000000000 -0500
    1542 +++ gcc-4.8.2/gcc/go/gofrontend/types.cc        2013-10-17 15:08:21.970831000 -0500
     2080--- gcc-4.8.2.orig/gcc/go/gofrontend/types.cc   2013-10-02 19:22:30.000000000 +0000
     2081+++ gcc-4.8.2/gcc/go/gofrontend/types.cc        2013-11-01 16:12:34.063809161 +0000
    15432082@@ -3383,6 +3383,68 @@
    15442083 // Get the backend representation for a function type.
     
    17752314            {
    17762315diff -Naur gcc-4.8.2.orig/gcc/go/gofrontend/types.h gcc-4.8.2/gcc/go/gofrontend/types.h
    1777 --- gcc-4.8.2.orig/gcc/go/gofrontend/types.h    2013-09-18 16:54:08.000000000 -0500
    1778 +++ gcc-4.8.2/gcc/go/gofrontend/types.h 2013-10-17 15:08:21.970831000 -0500
     2316--- gcc-4.8.2.orig/gcc/go/gofrontend/types.h    2013-09-18 21:54:08.000000000 +0000
     2317+++ gcc-4.8.2/gcc/go/gofrontend/types.h 2013-11-01 16:12:34.063809161 +0000
    17792318@@ -1717,7 +1717,8 @@
    17802319                Typed_identifier_list* results, Location location)
     
    18502389 
    18512390 // A list of struct fields.
    1852 diff -Naur gcc-4.8.2.orig/gcc/go/go-gcc.cc gcc-4.8.2/gcc/go/go-gcc.cc
    1853 --- gcc-4.8.2.orig/gcc/go/go-gcc.cc     2013-10-04 13:07:35.000000000 -0500
    1854 +++ gcc-4.8.2/gcc/go/go-gcc.cc  2013-10-16 12:27:53.564070000 -0500
    1855 @@ -232,6 +232,9 @@
    1856    Bexpression*
    1857    convert_expression(Btype* type, Bexpression* expr, Location);
    1858  
    1859 +  Bexpression*
    1860 +  function_code_expression(Bfunction*, Location);
    1861 +
    1862    // Statements.
    1863  
    1864    Bstatement*
    1865 @@ -334,6 +337,17 @@
    1866    Bexpression*
    1867    label_address(Blabel*, Location);
    1868  
    1869 +  // Functions.
    1870 +
    1871 +  Bfunction*
    1872 +  error_function()
    1873 +  { return this->make_function(error_mark_node); }
    1874 +
    1875 +  Bfunction*
    1876 +  function(Btype* fntype, const std::string& name, const std::string& asm_name,
    1877 +           bool is_visible, bool is_declaration, bool is_inlinable,
    1878 +           bool disable_split_stack, bool in_unique_section, Location);
    1879 +
    1880   private:
    1881    // Make a Bexpression from a tree.
    1882    Bexpression*
    1883 @@ -350,6 +364,10 @@
    1884    make_type(tree t)
    1885    { return new Btype(t); }
    1886  
    1887 +  Bfunction*
    1888 +  make_function(tree t)
    1889 +  { return new Bfunction(t); }
    1890 +
    1891    Btype*
    1892    fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
    1893  
    1894 @@ -966,6 +984,19 @@
    1895    return tree_to_expr(ret);
     2391diff -Naur gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c gcc-4.8.2/gcc/graphite-clast-to-gimple.c
     2392--- gcc-4.8.2.orig/gcc/graphite-clast-to-gimple.c       2013-01-10 20:38:27.000000000 +0000
     2393+++ gcc-4.8.2/gcc/graphite-clast-to-gimple.c    2013-11-01 16:12:34.503884898 +0000
     2394@@ -1170,8 +1170,11 @@
     2395   redirect_edge_succ_nodup (next_e, after);
     2396   set_immediate_dominator (CDI_DOMINATORS, next_e->dest, next_e->src);
     2397 
     2398+  isl_set *domain = isl_set_from_cloog_domain (stmt->domain);
     2399+  int scheduling_dim = isl_set_n_dim (domain);
     2400+
     2401   if (flag_loop_parallelize_all
     2402-      && loop_is_parallel_p (loop, bb_pbb_mapping, level))
     2403+      && loop_is_parallel_p (loop, bb_pbb_mapping, scheduling_dim))
     2404     loop->can_be_parallel = true;
     2405 
     2406   return last_e;
     2407diff -Naur gcc-4.8.2.orig/gcc/graphite-dependences.c gcc-4.8.2/gcc/graphite-dependences.c
     2408--- gcc-4.8.2.orig/gcc/graphite-dependences.c   2013-01-10 20:38:27.000000000 +0000
     2409+++ gcc-4.8.2/gcc/graphite-dependences.c        2013-11-01 16:12:34.503884898 +0000
     2410@@ -297,7 +297,7 @@
     2411              int depth)
     2412 {
     2413   bool res;
     2414-  int idx, i;
     2415+  int i;
     2416   isl_space *space;
     2417   isl_map *lex, *x;
     2418   isl_constraint *ineq;
     2419@@ -312,13 +312,12 @@
     2420   space = isl_map_get_space (x);
     2421   ineq = isl_inequality_alloc (isl_local_space_from_space (space));
     2422 
     2423-  idx = 2 * depth + 1;
     2424-  for (i = 0; i < idx; i++)
     2425+  for (i = 0; i < depth - 1; i++)
     2426     lex = isl_map_equate (lex, isl_dim_in, i, isl_dim_out, i);
     2427 
     2428   /* in + 1 <= out  */
     2429-  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, idx, 1);
     2430-  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, idx, -1);
     2431+  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_out, depth - 1, 1);
     2432+  ineq = isl_constraint_set_coefficient_si (ineq, isl_dim_in, depth - 1, -1);
     2433   ineq = isl_constraint_set_constant_si (ineq, -1);
     2434   lex = isl_map_add_constraint (lex, ineq);
     2435   x = isl_map_intersect (x, lex);
     2436diff -Naur gcc-4.8.2.orig/gcc/ipa-prop.c gcc-4.8.2/gcc/ipa-prop.c
     2437--- gcc-4.8.2.orig/gcc/ipa-prop.c       2013-06-24 12:57:52.000000000 +0000
     2438+++ gcc-4.8.2/gcc/ipa-prop.c    2013-11-01 16:12:34.071810538 +0000
     2439@@ -2126,7 +2126,6 @@
     2440      we may create the first reference to the object in the unit.  */
     2441   if (!callee || callee->global.inlined_to)
     2442     {
     2443-      struct cgraph_node *first_clone = callee;
     2444 
     2445       /* We are better to ensure we can refer to it.
     2446         In the case of static functions we are out of luck, since we already   
     2447@@ -2142,31 +2141,7 @@
     2448                     xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
     2449          return NULL;
     2450        }
     2451-
     2452-      /* Create symbol table node.  Even if inline clone exists, we can not take
     2453-        it as a target of non-inlined call.  */
     2454-      callee = cgraph_create_node (target);
     2455-
     2456-      /* OK, we previously inlined the function, then removed the offline copy and
     2457-        now we want it back for external call.  This can happen when devirtualizing
     2458-        while inlining function called once that happens after extern inlined and
     2459-        virtuals are already removed.  In this case introduce the external node
     2460-        and make it available for call.  */
     2461-      if (first_clone)
     2462-       {
     2463-         first_clone->clone_of = callee;
     2464-         callee->clones = first_clone;
     2465-         symtab_prevail_in_asm_name_hash ((symtab_node)callee);
     2466-         symtab_insert_node_to_hashtable ((symtab_node)callee);
     2467-         if (dump_file)
     2468-           fprintf (dump_file, "ipa-prop: Introduced new external node "
     2469-                    "(%s/%i) and turned into root of the clone tree.\n",
     2470-                    xstrdup (cgraph_node_name (callee)), callee->uid);
     2471-       }
     2472-      else if (dump_file)
     2473-       fprintf (dump_file, "ipa-prop: Introduced new external node "
     2474-                "(%s/%i).\n",
     2475-                xstrdup (cgraph_node_name (callee)), callee->uid);
     2476+      callee = cgraph_get_create_real_symbol_node (target);
     2477     }
     2478   ipa_check_create_node_params ();
     2479 
     2480diff -Naur gcc-4.8.2.orig/gcc/optabs.c gcc-4.8.2/gcc/optabs.c
     2481--- gcc-4.8.2.orig/gcc/optabs.c 2013-03-09 07:54:02.000000000 +0000
     2482+++ gcc-4.8.2/gcc/optabs.c      2013-11-01 16:12:34.075811227 +0000
     2483@@ -7035,8 +7035,7 @@
     2484 
     2485       create_output_operand (&ops[0], target, mode);
     2486       create_fixed_operand (&ops[1], mem);
     2487-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
     2488-      create_convert_operand_to (&ops[2], val, mode, true);
     2489+      create_input_operand (&ops[2], val, mode);
     2490       create_integer_operand (&ops[3], model);
     2491       if (maybe_expand_insn (icode, 4, ops))
     2492        return ops[0].value;
     2493@@ -7075,8 +7074,7 @@
     2494       struct expand_operand ops[3];
     2495       create_output_operand (&ops[0], target, mode);
     2496       create_fixed_operand (&ops[1], mem);
     2497-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
     2498-      create_convert_operand_to (&ops[2], val, mode, true);
     2499+      create_input_operand (&ops[2], val, mode);
     2500       if (maybe_expand_insn (icode, 3, ops))
     2501        return ops[0].value;
     2502     }
     2503@@ -7118,8 +7116,6 @@
     2504     {
     2505       if (!target || !register_operand (target, mode))
     2506        target = gen_reg_rtx (mode);
     2507-      if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
     2508-       val = convert_modes (mode, GET_MODE (val), val, 1);
     2509       if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
     2510        return target;
     2511     }
     2512@@ -7331,8 +7327,8 @@
     2513       create_output_operand (&ops[0], target_bool, bool_mode);
     2514       create_output_operand (&ops[1], target_oval, mode);
     2515       create_fixed_operand (&ops[2], mem);
     2516-      create_convert_operand_to (&ops[3], expected, mode, true);
     2517-      create_convert_operand_to (&ops[4], desired, mode, true);
     2518+      create_input_operand (&ops[3], expected, mode);
     2519+      create_input_operand (&ops[4], desired, mode);
     2520       create_integer_operand (&ops[5], is_weak);
     2521       create_integer_operand (&ops[6], succ_model);
     2522       create_integer_operand (&ops[7], fail_model);
     2523@@ -7353,8 +7349,8 @@
     2524 
     2525       create_output_operand (&ops[0], target_oval, mode);
     2526       create_fixed_operand (&ops[1], mem);
     2527-      create_convert_operand_to (&ops[2], expected, mode, true);
     2528-      create_convert_operand_to (&ops[3], desired, mode, true);
     2529+      create_input_operand (&ops[2], expected, mode);
     2530+      create_input_operand (&ops[3], desired, mode);
     2531       if (!maybe_expand_insn (icode, 4, ops))
     2532        return false;
     2533 
     2534diff -Naur gcc-4.8.2.orig/gcc/recog.c gcc-4.8.2/gcc/recog.c
     2535--- gcc-4.8.2.orig/gcc/recog.c  2013-08-05 20:24:39.000000000 +0000
     2536+++ gcc-4.8.2/gcc/recog.c       2013-11-01 16:12:34.219836014 +0000
     2537@@ -3061,6 +3061,9 @@
     2538   return 1;
    18962539 }
    18972540 
    1898 +// Get the address of a function.
    1899 +
    1900 +Bexpression*
    1901 +Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
     2541+/* Regno offset to be used in the register search.  */
     2542+static int search_ofs;
     2543+
     2544 /* Try to find a hard register of mode MODE, matching the register class in
     2545    CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
     2546    remains available until the end of LAST_INSN.  LAST_INSN may be NULL_RTX,
     2547@@ -3076,7 +3079,6 @@
     2548 peep2_find_free_register (int from, int to, const char *class_str,
     2549                          enum machine_mode mode, HARD_REG_SET *reg_set)
     2550 {
     2551-  static int search_ofs;
     2552   enum reg_class cl;
     2553   HARD_REG_SET live;
     2554   df_ref *def_rec;
     2555@@ -3541,6 +3543,7 @@
     2556   /* Initialize the regsets we're going to use.  */
     2557   for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
     2558     peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
     2559+  search_ofs = 0;
     2560   live = BITMAP_ALLOC (&reg_obstack);
     2561 
     2562   FOR_EACH_BB_REVERSE (bb)
     2563diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C
     2564--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C      1970-01-01 00:00:00.000000000 +0000
     2565+++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C   2013-11-01 16:12:34.223836702 +0000
     2566@@ -0,0 +1,8 @@
     2567+// PR c++/58633
     2568+// { dg-do compile { target c++11 } }
     2569+
     2570+void foo(int i)
    19022571+{
    1903 +  tree func = bfunc->get_tree();
    1904 +  if (func == error_mark_node)
    1905 +    return this->error_expression();
    1906 +
    1907 +  tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
    1908 +  return this->make_expression(ret);
     2572+  typedef int I;
     2573+  decltype(i.I::~I())* p;
    19092574+}
    1910 +
    1911  // An expression as a statement.
    1912  
    1913  Bstatement*
    1914 @@ -1724,6 +1755,56 @@
    1915    return this->make_expression(ret);
     2575diff -Naur gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C
     2576--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C  2011-05-28 22:01:28.000000000 +0000
     2577+++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C       2013-11-01 16:12:34.227837390 +0000
     2578@@ -4,5 +4,5 @@
     2579 int main(void) {
     2580   enum e {};
     2581   e ev;
     2582-  ev.e::~e_u();        // { dg-error "e_u. has not been declared" }
     2583+  ev.e::~e_u();        // { dg-error "" }
    19162584 }
    1917  
    1918 +// Declare or define a new function.
    1919 +
    1920 +Bfunction*
    1921 +Gcc_backend::function(Btype* fntype, const std::string& name,
    1922 +                      const std::string& asm_name, bool is_visible,
    1923 +                      bool is_declaration, bool is_inlinable,
    1924 +                      bool disable_split_stack, bool in_unique_section,
    1925 +                      Location location)
     2585diff -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
     2586--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C    1970-01-01 00:00:00.000000000 +0000
     2587+++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 2013-11-01 16:12:34.227837390 +0000
     2588@@ -0,0 +1,7 @@
     2589+// PR c++/58596
     2590+// { dg-do compile { target c++11 } }
     2591+
     2592+struct A
    19262593+{
    1927 +  tree functype = fntype->get_tree();
    1928 +  if (functype != error_mark_node)
     2594+  int i = [] { return decltype(i)(); }();
     2595+};
     2596diff -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
     2597--- gcc-4.8.2.orig/gcc/testsuite/g++.dg/tm/noexcept-6.C 1970-01-01 00:00:00.000000000 +0000
     2598+++ gcc-4.8.2/gcc/testsuite/g++.dg/tm/noexcept-6.C      2013-11-01 16:12:34.227837390 +0000
     2599@@ -0,0 +1,23 @@
     2600+// { dg-do compile }
     2601+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
     2602+
     2603+struct TrueFalse
     2604+{
     2605+  static constexpr bool v() { return true; }
     2606+};
     2607+
     2608+int global;
     2609+
     2610+template<typename T> int foo()
     2611+{
     2612+  return __transaction_atomic noexcept(T::v()) (global + 1);
     2613+}
     2614+
     2615+int f1()
     2616+{
     2617+  return foo<TrueFalse>();
     2618+}
     2619+
     2620+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
     2621+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
     2622+/* { dg-final { cleanup-tree-dump "tmlower" } } */
     2623diff -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
     2624--- gcc-4.8.2.orig/gcc/testsuite/gcc.c-torture/execute/pr58831.c        1970-01-01 00:00:00.000000000 +0000
     2625+++ gcc-4.8.2/gcc/testsuite/gcc.c-torture/execute/pr58831.c     2013-11-01 16:12:34.223836702 +0000
     2626@@ -0,0 +1,40 @@
     2627+#include <assert.h>
     2628+
     2629+int a, *b, c, d, f, **i, p, q, *r;
     2630+short o, j;
     2631+
     2632+static int __attribute__((noinline, noclone))
     2633+fn1 (int *p1, int **p2)
     2634+{
     2635+  int **e = &b;
     2636+  for (; p; p++)
     2637+    *p1 = 1;
     2638+  *e = *p2 = &d;
     2639+
     2640+  assert (r);
     2641+
     2642+  return c;
     2643+}
     2644+
     2645+static int ** __attribute__((noinline, noclone))
     2646+fn2 (void)
     2647+{
     2648+  for (f = 0; f != 42; f++)
    19292649+    {
    1930 +      gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
    1931 +      functype = TREE_TYPE(functype);
     2650+      int *g[3] = {0, 0, 0};
     2651+      for (o = 0; o; o--)
     2652+        for (; a > 1;)
     2653+          {
     2654+            int **h[1] = { &g[2] };
     2655+          }
    19322656+    }
    1933 +  tree id = get_identifier_from_string(name);
    1934 +  if (functype == error_mark_node || id == error_mark_node)
    1935 +    return this->error_function();
    1936 +
    1937 +  tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
    1938 +  if (!asm_name.empty())
    1939 +    SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
    1940 +  if (is_visible)
    1941 +    TREE_PUBLIC(decl) = 1;
    1942 +  if (is_declaration)
    1943 +    DECL_EXTERNAL(decl) = 1;
    1944 +  else
    1945 +    {
    1946 +      tree restype = TREE_TYPE(functype);
    1947 +      tree resdecl =
    1948 +          build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
    1949 +      DECL_ARTIFICIAL(resdecl) = 1;
    1950 +      DECL_IGNORED_P(resdecl) = 1;
    1951 +      DECL_CONTEXT(resdecl) = decl;
    1952 +      DECL_RESULT(decl) = resdecl;
    1953 +    }
    1954 +  if (!is_inlinable)
    1955 +    DECL_UNINLINABLE(decl) = 1;
    1956 +  if (disable_split_stack)
    1957 +    {
    1958 +      tree attr = get_identifier("__no_split_stack__");
    1959 +      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
    1960 +    }
    1961 +  if (in_unique_section)
    1962 +    resolve_unique_section(decl, 0, 1);
    1963 +
    1964 +  go_preserve_from_gc(decl);
    1965 +  return new Bfunction(decl);
     2657+  return &r;
    19662658+}
    19672659+
    1968  // The single backend.
    1969  
    1970  static Gcc_backend gcc_backend;
    1971 @@ -1799,3 +1880,9 @@
    1972  {
    1973    return bv->get_tree();
    1974  }
    1975 +
    1976 +tree
    1977 +function_to_tree(Bfunction* bf)
     2660+int
     2661+main (void)
    19782662+{
    1979 +  return bf->get_tree();
     2663+  i = fn2 ();
     2664+  fn1 (b, i);
     2665+  return 0;
    19802666+}
     2667diff -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
     2668--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/atomic-store-6.c        1970-01-01 00:00:00.000000000 +0000
     2669+++ gcc-4.8.2/gcc/testsuite/gcc.dg/atomic-store-6.c     2013-11-01 16:12:34.223836702 +0000
     2670@@ -0,0 +1,13 @@
     2671+/* { dg-do run } */
     2672+/* { dg-require-effective-target sync_int_128_runtime } */
     2673+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
     2674+
     2675+__int128_t i;
     2676+
     2677+int main()
     2678+{
     2679+  __atomic_store_16(&i, -1, 0);
     2680+  if (i != -1)
     2681+    __builtin_abort();
     2682+  return 0;
     2683+}
     2684diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c
     2685--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/graphite/pr54094.c      1970-01-01 00:00:00.000000000 +0000
     2686+++ gcc-4.8.2/gcc/testsuite/gcc.dg/graphite/pr54094.c   2013-11-01 16:12:34.503884898 +0000
     2687@@ -0,0 +1,10 @@
     2688+/* { dg-options "-O2 -floop-parallelize-all -floop-nest-optimize" } */
     2689+void dwt_deinterleave_h(int *a, int *b, int dn, int sn, int cas)
     2690+{
     2691+  int i;
     2692+  for (i=0; i<sn; i++)
     2693+    b[i]=a[2*i+cas];
     2694+  for (i=0; i<dn; i++)
     2695+    b[sn+i]=a[(2*i+1-cas)];
     2696+}
     2697+
    19812698diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c
    1982 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c       1969-12-31 18:00:00.000000000 -0600
    1983 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c    2013-10-23 14:16:55.651450000 -0500
     2699--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/pr58805.c       1970-01-01 00:00:00.000000000 +0000
     2700+++ gcc-4.8.2/gcc/testsuite/gcc.dg/pr58805.c    2013-11-01 16:12:34.223836702 +0000
    19842701@@ -0,0 +1,24 @@
    19852702+/* { dg-do compile } */
     
    20082725+/* { dg-final { cleanup-tree-dump "pre" } } */
    20092726diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c
    2010 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c       1969-12-31 18:00:00.000000000 -0600
    2011 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c    2013-10-23 06:59:05.236596000 -0500
     2727--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr57488.c       1970-01-01 00:00:00.000000000 +0000
     2728+++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr57488.c    2013-11-01 16:12:34.223836702 +0000
    20122729@@ -0,0 +1,58 @@
    20132730+/* { dg-do run } */
     
    20692786+  return 0;
    20702787+}
     2788diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c
     2789--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58079.c       1970-01-01 00:00:00.000000000 +0000
     2790+++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58079.c    2013-11-01 16:12:34.223836702 +0000
     2791@@ -0,0 +1,107 @@
     2792+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
     2793+
     2794+typedef unsigned char u8;
     2795+typedef unsigned short u16;
     2796+typedef unsigned int __kernel_size_t;
     2797+typedef __kernel_size_t size_t;
     2798+struct list_head {
     2799+ struct list_head *next;
     2800+};
     2801+
     2802+struct dmx_ts_feed {
     2803+ int is_filtering;
     2804+};
     2805+struct dmx_section_feed {
     2806+ u16 secbufp;
     2807+ u16 seclen;
     2808+ u16 tsfeedp;
     2809+};
     2810+
     2811+typedef int (*dmx_ts_cb) (
     2812+       const u8 * buffer1,
     2813+      size_t buffer1_length,
     2814+      const u8 * buffer2,
     2815+      size_t buffer2_length
     2816+);
     2817+
     2818+struct dvb_demux_feed {
     2819+ union {
     2820+  struct dmx_ts_feed ts;
     2821+  struct dmx_section_feed sec;
     2822+ } feed;
     2823+ union {
     2824+  dmx_ts_cb ts;
     2825+ } cb;
     2826+ int type;
     2827+ u16 pid;
     2828+ int ts_type;
     2829+ struct list_head list_head;
     2830+};
     2831+
     2832+struct dvb_demux {
     2833+ int (*stop_feed)(struct dvb_demux_feed *feed);
     2834+ struct list_head feed_list;
     2835+};
     2836+
     2837+
     2838+static
     2839+inline
     2840+__attribute__((always_inline))
     2841+u8
     2842+payload(const u8 *tsp)
     2843+{
     2844+ if (tsp[3] & 0x20) {
     2845+   return 184 - 1 - tsp[4];
     2846+ }
     2847+ return 184;
     2848+}
     2849+
     2850+static
     2851+inline
     2852+__attribute__((always_inline))
     2853+int
     2854+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
     2855+{
     2856+ int count = payload(buf);
     2857+ int p;
     2858+ if (count == 0)
     2859+  return -1;
     2860+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
     2861+}
     2862+
     2863+static
     2864+inline
     2865+__attribute__((always_inline))
     2866+void
     2867+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
     2868+{
     2869+ switch (feed->type) {
     2870+ case 0:
     2871+  if (feed->ts_type & 1) {
     2872+    dvb_dmx_swfilter_payload(feed, buf);
     2873+  }
     2874+  if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
     2875+   feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
     2876+ }
     2877+}
     2878+
     2879+static
     2880+void
     2881+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
     2882+{
     2883+ struct dvb_demux_feed *feed;
     2884+ int dvr_done = 0;
     2885+
     2886+ 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) );})) {
     2887+  if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
     2888+   dvb_dmx_swfilter_packet_type(feed, buf);
     2889+  else if (feed->pid == 0x2000)
     2890+   feed->cb.ts(buf, 188, ((void *)0), 0);
     2891+ }
     2892+}
     2893+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
     2894+{
     2895+ while (count--) {
     2896+   dvb_dmx_swfilter_packet(demux, buf);
     2897+ }
     2898+}
     2899diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c
     2900--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58779.c       1970-01-01 00:00:00.000000000 +0000
     2901+++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58779.c    2013-11-01 16:12:34.223836702 +0000
     2902@@ -0,0 +1,12 @@
     2903+/* { dg-do run } */
     2904+
     2905+int a, c;
     2906+
     2907+int main ()
     2908+{
     2909+  int e = -1;
     2910+  short d = (c <= 0) ^ e;
     2911+  if ((unsigned int) a - (a || d) <= (unsigned int) a)
     2912+    __builtin_abort ();
     2913+  return 0;
     2914+}
    20712915diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c
    2072 --- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c       1969-12-31 18:00:00.000000000 -0600
    2073 +++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c    2013-10-23 06:59:05.236596000 -0500
     2916--- gcc-4.8.2.orig/gcc/testsuite/gcc.dg/torture/pr58830.c       1970-01-01 00:00:00.000000000 +0000
     2917+++ gcc-4.8.2/gcc/testsuite/gcc.dg/torture/pr58830.c    2013-11-01 16:12:34.223836702 +0000
    20742918@@ -0,0 +1,42 @@
    20752919+/* { dg-do run } */
     
    21152959+  return 0;
    21162960+}
     2961diff -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
     2962--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c      1970-01-01 00:00:00.000000000 +0000
     2963+++ gcc-4.8.2/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c   2013-11-01 16:12:34.223836702 +0000
     2964@@ -0,0 +1,29 @@
     2965+/* { dg-do compile } */
     2966+/* { dg-options "-g -fPIC" } */
     2967+
     2968+void *v;
     2969+void a (void *x) { }
     2970+void b (void) { }
     2971+                       /* line 7.  */
     2972+int                    /* line 8.  */
     2973+main (int argc)        /* line 9.  */
     2974+{                      /* line 10.  */
     2975+  if (argc == 12345)   /* line 11.  */
     2976+    {
     2977+      a (v);
     2978+      return 1;
     2979+    }
     2980+  b ();
     2981+
     2982+  return 0;
     2983+}
     2984+
     2985+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
     2986+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
     2987+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
     2988+
     2989+/* The loc at the start of the prologue.  */
     2990+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
     2991+
     2992+/* The loc at the end of the prologue, with the first user line.  */
     2993+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
     2994diff -Naur gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c
     2995--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/i386/pr30315.c      2007-08-14 14:39:24.000000000 +0000
     2996+++ gcc-4.8.2/gcc/testsuite/gcc.target/i386/pr30315.c   2013-11-01 16:12:34.223836702 +0000
     2997@@ -1,6 +1,6 @@
     2998 /* { dg-do compile } */
     2999 /* { dg-options "-O2" } */
     3000-/* { dg-final { scan-assembler-times "cmp" 4 } } */
     3001+/* { dg-final { scan-assembler-not "cmp" } } */
     3002 
     3003 extern void abort (void);
     3004 int c;
     3005@@ -34,39 +34,10 @@
     3006 }
     3007 #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
     3008 
     3009-#define MINUSCC(T, t)  \
     3010-T minuscc##t (T a, T b)        \
     3011-{      \
     3012-  T difference = a - b;        \
     3013-  if (difference > a)  \
     3014-    abort ();          \
     3015-  return difference;   \
     3016-}
     3017-
     3018-#define DECCC(T, t)    \
     3019-T deccc##t (T a, T b)  \
     3020-{      \
     3021-  T difference = a - b;        \
     3022-  if (difference > a)  \
     3023-    c --;              \
     3024-  return difference;   \
     3025-}
     3026-
     3027-#define MINUSCCONLY(T, t)      \
     3028-void minuscconly##t (T a, T b) \
     3029-{      \
     3030-  T difference = a - b;        \
     3031-  if (difference > a)  \
     3032-    abort ();          \
     3033-}
     3034-
     3035 #define TEST(T, t)     \
     3036   PLUSCC(T, t)         \
     3037   PLUSCCONLY(T, t)     \
     3038-  INCCC(T, t)          \
     3039-  MINUSCC(T, t)                \
     3040-  MINUSCCONLY(T, t)    \
     3041-  DECCC(T, t)
     3042+  INCCC(T, t)
     3043 
     3044 TEST (unsigned long,  l)
     3045 TEST (unsigned int,   i)
     3046@@ -84,14 +55,3 @@
     3047 
     3048 PLUSCCZEXT(a)
     3049 PLUSCCZEXT(b)
     3050-
     3051-#define MINUSCCZEXT    \
     3052-unsigned long minuscczext (unsigned int a, unsigned int b)     \
     3053-{      \
     3054-  unsigned int difference = a - b;     \
     3055-  if (difference > a)          \
     3056-    abort ();                  \
     3057-  return difference;           \
     3058-}
     3059-
     3060-MINUSCCZEXT
    21173061diff -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
    2118 --- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c      2012-09-10 15:35:25.000000000 -0500
    2119 +++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c   2013-10-19 08:27:49.531298000 -0500
     3062--- gcc-4.8.2.orig/gcc/testsuite/gcc.target/sh/pr54089-3.c      2012-09-10 20:35:25.000000000 +0000
     3063+++ gcc-4.8.2/gcc/testsuite/gcc.target/sh/pr54089-3.c   2013-11-01 16:12:34.223836702 +0000
    21203064@@ -5,7 +5,7 @@
    21213065 /* { dg-options "-O1" } */
     
    21273071 int
    21283072 test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
    2129 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
    2130 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/decltype57.C      1969-12-31 18:00:00.000000000 -0600
    2131 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/decltype57.C   2013-10-16 17:19:18.772609000 -0500
    2132 @@ -0,0 +1,8 @@
    2133 +// PR c++/58633
    2134 +// { dg-do compile { target c++11 } }
    2135 +
    2136 +void foo(int i)
    2137 +{
    2138 +  typedef int I;
    2139 +  decltype(i.I::~I())* p;
    2140 +}
    2141 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
    2142 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/enum18.C  2011-05-28 17:01:28.000000000 -0500
    2143 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/enum18.C       2013-10-16 17:19:18.772609000 -0500
    2144 @@ -4,5 +4,5 @@
    2145  int main(void) {
    2146    enum e {};
    2147    e ev;
    2148 -  ev.e::~e_u();        // { dg-error "e_u. has not been declared" }
    2149 +  ev.e::~e_u();        // { dg-error "" }
    2150  }
    2151 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
    2152 --- gcc-4.8.2.orig/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C    1969-12-31 18:00:00.000000000 -0600
    2153 +++ gcc-4.8.2/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C 2013-10-17 12:15:46.188630000 -0500
    2154 @@ -0,0 +1,7 @@
    2155 +// PR c++/58596
    2156 +// { dg-do compile { target c++11 } }
    2157 +
    2158 +struct A
    2159 +{
    2160 +  int i = [] { return decltype(i)(); }();
    2161 +};
    21623073diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-pre.c gcc-4.8.2/gcc/tree-ssa-pre.c
    2163 --- gcc-4.8.2.orig/gcc/tree-ssa-pre.c   2013-02-19 00:43:34.000000000 -0600
    2164 +++ gcc-4.8.2/gcc/tree-ssa-pre.c        2013-10-23 06:59:05.236596000 -0500
     3074--- gcc-4.8.2.orig/gcc/tree-ssa-pre.c   2013-02-19 06:43:34.000000000 +0000
     3075+++ gcc-4.8.2/gcc/tree-ssa-pre.c        2013-11-01 16:12:34.227837390 +0000
    21653076@@ -3664,6 +3664,12 @@
    21663077       if (dump_file && dump_flags & TDF_DETAILS)
     
    21773088 }
    21783089diff -Naur gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c gcc-4.8.2/gcc/tree-ssa-tail-merge.c
    2179 --- gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c    2013-01-31 02:52:56.000000000 -0600
    2180 +++ gcc-4.8.2/gcc/tree-ssa-tail-merge.c 2013-10-23 14:16:55.651450000 -0500
     3090--- gcc-4.8.2.orig/gcc/tree-ssa-tail-merge.c    2013-01-31 08:52:56.000000000 +0000
     3091+++ gcc-4.8.2/gcc/tree-ssa-tail-merge.c 2013-11-01 16:12:34.231838079 +0000
    21813092@@ -297,7 +297,8 @@
    21823093   tree val;
     
    21903101   def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
    21913102diff -Naur gcc-4.8.2.orig/gcc/version.c gcc-4.8.2/gcc/version.c
    2192 --- gcc-4.8.2.orig/gcc/version.c        2013-01-10 14:38:27.000000000 -0600
    2193 +++ gcc-4.8.2/gcc/version.c     2013-10-24 10:18:17.893329498 -0500
     3103--- gcc-4.8.2.orig/gcc/version.c        2013-01-10 20:38:27.000000000 +0000
     3104+++ gcc-4.8.2/gcc/version.c     2013-11-01 16:12:34.231838079 +0000
    21943105@@ -32,4 +32,4 @@
    21953106    Makefile.  */
     
    21973108 const char version_string[] = BASEVER DATESTAMP DEVPHASE REVISION;
    21983109-const char pkgversion_string[] = PKGVERSION;
    2199 +const char pkgversion_string[] = "(GCC for Cross-LFS 4.8.2.20131024) ";
     3110+const char pkgversion_string[] = "(GCC for Cross-LFS 4.8.2.20131101) ";
    22003111diff -Naur gcc-4.8.2.orig/libffi/doc/libffi.info gcc-4.8.2/libffi/doc/libffi.info
    2201 --- gcc-4.8.2.orig/libffi/doc/libffi.info       2013-10-16 03:21:34.000000000 -0500
    2202 +++ gcc-4.8.2/libffi/doc/libffi.info    1969-12-31 18:00:00.000000000 -0600
     3112--- gcc-4.8.2.orig/libffi/doc/libffi.info       2013-10-16 08:21:34.000000000 +0000
     3113+++ gcc-4.8.2/libffi/doc/libffi.info    1970-01-01 00:00:00.000000000 +0000
    22033114@@ -1,614 +0,0 @@
    22043115-This is libffi.info, produced by makeinfo version 5.1 from libffi.texi.
     
    28163727-
    28173728-End Tag Table
    2818 diff -Naur gcc-4.8.2.orig/libgo/config.h.in gcc-4.8.2/libgo/config.h.in
    2819 --- gcc-4.8.2.orig/libgo/config.h.in    2013-10-02 12:32:00.000000000 -0500
    2820 +++ gcc-4.8.2/libgo/config.h.in 2013-10-17 13:41:40.134537000 -0500
    2821 @@ -39,6 +39,9 @@
    2822  /* Define to 1 if you have the `dl_iterate_phdr' function. */
    2823  #undef HAVE_DL_ITERATE_PHDR
    2824  
    2825 +/* Define to 1 if you have the `dup3' function. */
    2826 +#undef HAVE_DUP3
    2827 +
    2828  /* Define to 1 if you have the `epoll_create1' function. */
    2829  #undef HAVE_EPOLL_CREATE1
    2830  
    2831 @@ -66,6 +69,9 @@
    2832  /* Define if _Unwind_GetIPInfo is available. */
    2833  #undef HAVE_GETIPINFO
    2834  
    2835 +/* Define to 1 if you have the `getxattr' function. */
    2836 +#undef HAVE_GETXATTR
    2837 +
    2838  /* Define to 1 if you have the `inotify_add_watch' function. */
    2839  #undef HAVE_INOTIFY_ADD_WATCH
    2840  
    2841 @@ -111,6 +117,9 @@
    2842  /* Define to 1 if you have the <linux/rtnetlink.h> header file. */
    2843  #undef HAVE_LINUX_RTNETLINK_H
    2844  
    2845 +/* Define to 1 if you have the `listxattr' function. */
    2846 +#undef HAVE_LISTXATTR
    2847 +
    2848  /* Define to 1 if the system has the type `loff_t'. */
    2849  #undef HAVE_LOFF_T
    2850  
    2851 @@ -171,6 +180,9 @@
    2852  /* Define to 1 if you have the `pipe2' function. */
    2853  #undef HAVE_PIPE2
    2854  
    2855 +/* Define to 1 if you have the `removexattr' function. */
    2856 +#undef HAVE_REMOVEXATTR
    2857 +
    2858  /* Define to 1 if you have the `renameat' function. */
    2859  #undef HAVE_RENAMEAT
    2860  
    2861 @@ -180,6 +192,9 @@
    2862  /* Define to 1 if you have the `setenv' function. */
    2863  #undef HAVE_SETENV
    2864  
    2865 +/* Define to 1 if you have the `setxattr' function. */
    2866 +#undef HAVE_SETXATTR
    2867 +
    2868  /* Define to 1 if you have the `sinl' function. */
    2869  #undef HAVE_SINL
    2870  
    2871 diff -Naur gcc-4.8.2.orig/libgo/configure gcc-4.8.2/libgo/configure
    2872 --- gcc-4.8.2.orig/libgo/configure      2013-10-02 12:32:00.000000000 -0500
    2873 +++ gcc-4.8.2/libgo/configure   2013-10-17 13:41:40.134537000 -0500
    2874 @@ -14700,7 +14700,7 @@
    2875  fi
    2876  
    2877  
    2878 -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
    2879 +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
    2880  do :
    2881    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
    2882  ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
    2883 diff -Naur gcc-4.8.2.orig/libgo/configure.ac gcc-4.8.2/libgo/configure.ac
    2884 --- gcc-4.8.2.orig/libgo/configure.ac   2013-10-02 12:32:00.000000000 -0500
    2885 +++ gcc-4.8.2/libgo/configure.ac        2013-10-17 13:41:40.134537000 -0500
    2886 @@ -503,7 +503,7 @@
    2887  AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
    2888  AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
    2889  
    2890 -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)
    2891 +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)
    2892  AC_TYPE_OFF_T
    2893  AC_CHECK_TYPES([loff_t])
    2894  
    2895 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go gcc-4.8.2/libgo/go/syscall/libcall_linux.go
    2896 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go    2013-02-08 13:24:26.000000000 -0600
    2897 +++ gcc-4.8.2/libgo/go/syscall/libcall_linux.go 2013-10-17 13:41:40.134537000 -0500
    2898 @@ -190,6 +190,9 @@
    2899  //sys  Adjtimex(buf *Timex) (state int, err error)
    2900  //adjtimex(buf *Timex) _C_int
    2901  
    2902 +//sysnb        Dup3(oldfd int, newfd int, flags int) (err error)
    2903 +//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
    2904 +
    2905  //sys  Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
    2906  //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
    2907  
    2908 @@ -268,6 +271,9 @@
    2909         return origlen - len(buf), count, names
    2910  }
    2911  
    2912 +//sys  Getxattr(path string, attr string, dest []byte) (sz int, err error)
    2913 +//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
    2914 +
    2915  //sys  InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
    2916  //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
    2917  
    2918 @@ -283,6 +289,9 @@
    2919  //sys  Klogctl(typ int, buf []byte) (n int, err error)
    2920  //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
    2921  
    2922 +//sys  Listxattr(path string, dest []byte) (sz int, err error)
    2923 +//listxattr(path *byte, list *byte, size Size_t) Ssize_t
    2924 +
    2925  //sys  Mkdirat(dirfd int, path string, mode uint32) (err error)
    2926  //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
    2927  
    2928 @@ -305,6 +314,9 @@
    2929  //sys  PivotRoot(newroot string, putold string) (err error)
    2930  //pivot_root(newroot *byte, putold *byte) _C_int
    2931  
    2932 +//sys  Removexattr(path string, attr string) (err error)
    2933 +//removexattr(path *byte, name *byte) _C_int
    2934 +
    2935  //sys  Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
    2936  //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
    2937  
    2938 @@ -338,6 +350,9 @@
    2939  //sysnb        Setresuid(ruid int, eguid int, suid int) (err error)
    2940  //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
    2941  
    2942 +//sys  Setxattr(path string, attr string, data []byte, flags int) (err error)
    2943 +//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
    2944 +
    2945  //sys  splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
    2946  //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
    2947  func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
    2948 diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go gcc-4.8.2/libgo/go/syscall/libcall_posix.go
    2949 --- gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go    2013-02-08 13:24:26.000000000 -0600
    2950 +++ gcc-4.8.2/libgo/go/syscall/libcall_posix.go 2013-10-17 13:41:40.134537000 -0500
    2951 @@ -238,6 +238,9 @@
    2952  //sysnb        Getppid() (ppid int)
    2953  //getppid() Pid_t
    2954  
    2955 +//sys Getpriority(which int, who int) (prio int, err error)
    2956 +//getpriority(which _C_int, who _C_int) _C_int
    2957 +
    2958  //sysnb        Getrlimit(resource int, rlim *Rlimit) (err error)
    2959  //getrlimit(resource _C_int, rlim *Rlimit) _C_int
    2960  
    2961 @@ -307,6 +310,9 @@
    2962  //sysnb        Setpgid(pid int, pgid int) (err error)
    2963  //setpgid(pid Pid_t, pgid Pid_t) _C_int
    2964  
    2965 +//sys Setpriority(which int, who int, prio int) (err error)
    2966 +//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
    2967 +
    2968  //sysnb        Setreuid(ruid int, euid int) (err error)
    2969  //setreuid(ruid Uid_t, euid Uid_t) _C_int
    2970  
    29713729diff -Naur gcc-4.8.2.orig/libgo/Makefile.am gcc-4.8.2/libgo/Makefile.am
    2972 --- gcc-4.8.2.orig/libgo/Makefile.am    2013-09-27 16:34:43.000000000 -0500
    2973 +++ gcc-4.8.2/libgo/Makefile.am 2013-10-16 12:27:53.564070000 -0500
     3730--- gcc-4.8.2.orig/libgo/Makefile.am    2013-09-27 21:34:43.000000000 +0000
     3731+++ gcc-4.8.2/libgo/Makefile.am 2013-11-01 16:12:34.291848407 +0000
    29743732@@ -424,6 +424,7 @@
    29753733        runtime/go-caller.c \
     
    29813739        runtime/go-construct-map.c \
    29823740diff -Naur gcc-4.8.2.orig/libgo/Makefile.in gcc-4.8.2/libgo/Makefile.in
    2983 --- gcc-4.8.2.orig/libgo/Makefile.in    2013-09-27 16:34:43.000000000 -0500
    2984 +++ gcc-4.8.2/libgo/Makefile.in 2013-10-16 12:27:53.564070000 -0500
     3741--- gcc-4.8.2.orig/libgo/Makefile.in    2013-09-27 21:34:43.000000000 +0000
     3742+++ gcc-4.8.2/libgo/Makefile.in 2013-11-01 16:12:34.299849784 +0000
    29853743@@ -195,7 +195,7 @@
    29863744 @LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
     
    30223780 @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
    30233781 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
     3782diff -Naur gcc-4.8.2.orig/libgo/config.h.in gcc-4.8.2/libgo/config.h.in
     3783--- gcc-4.8.2.orig/libgo/config.h.in    2013-10-02 17:32:00.000000000 +0000
     3784+++ gcc-4.8.2/libgo/config.h.in 2013-11-01 16:12:34.235838767 +0000
     3785@@ -39,6 +39,9 @@
     3786 /* Define to 1 if you have the `dl_iterate_phdr' function. */
     3787 #undef HAVE_DL_ITERATE_PHDR
     3788 
     3789+/* Define to 1 if you have the `dup3' function. */
     3790+#undef HAVE_DUP3
     3791+
     3792 /* Define to 1 if you have the `epoll_create1' function. */
     3793 #undef HAVE_EPOLL_CREATE1
     3794 
     3795@@ -66,6 +69,9 @@
     3796 /* Define if _Unwind_GetIPInfo is available. */
     3797 #undef HAVE_GETIPINFO
     3798 
     3799+/* Define to 1 if you have the `getxattr' function. */
     3800+#undef HAVE_GETXATTR
     3801+
     3802 /* Define to 1 if you have the `inotify_add_watch' function. */
     3803 #undef HAVE_INOTIFY_ADD_WATCH
     3804 
     3805@@ -111,6 +117,9 @@
     3806 /* Define to 1 if you have the <linux/rtnetlink.h> header file. */
     3807 #undef HAVE_LINUX_RTNETLINK_H
     3808 
     3809+/* Define to 1 if you have the `listxattr' function. */
     3810+#undef HAVE_LISTXATTR
     3811+
     3812 /* Define to 1 if the system has the type `loff_t'. */
     3813 #undef HAVE_LOFF_T
     3814 
     3815@@ -171,6 +180,9 @@
     3816 /* Define to 1 if you have the `pipe2' function. */
     3817 #undef HAVE_PIPE2
     3818 
     3819+/* Define to 1 if you have the `removexattr' function. */
     3820+#undef HAVE_REMOVEXATTR
     3821+
     3822 /* Define to 1 if you have the `renameat' function. */
     3823 #undef HAVE_RENAMEAT
     3824 
     3825@@ -180,6 +192,9 @@
     3826 /* Define to 1 if you have the `setenv' function. */
     3827 #undef HAVE_SETENV
     3828 
     3829+/* Define to 1 if you have the `setxattr' function. */
     3830+#undef HAVE_SETXATTR
     3831+
     3832 /* Define to 1 if you have the `sinl' function. */
     3833 #undef HAVE_SINL
     3834 
     3835diff -Naur gcc-4.8.2.orig/libgo/configure gcc-4.8.2/libgo/configure
     3836--- gcc-4.8.2.orig/libgo/configure      2013-10-02 17:32:00.000000000 +0000
     3837+++ gcc-4.8.2/libgo/configure   2013-11-01 16:12:34.243840144 +0000
     3838@@ -14700,7 +14700,7 @@
     3839 fi
     3840 
     3841 
     3842-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
     3843+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
     3844 do :
     3845   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
     3846 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
     3847diff -Naur gcc-4.8.2.orig/libgo/configure.ac gcc-4.8.2/libgo/configure.ac
     3848--- gcc-4.8.2.orig/libgo/configure.ac   2013-10-02 17:32:00.000000000 +0000
     3849+++ gcc-4.8.2/libgo/configure.ac        2013-11-01 16:12:34.291848407 +0000
     3850@@ -503,7 +503,7 @@
     3851 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
     3852 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
     3853 
     3854-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)
     3855+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)
     3856 AC_TYPE_OFF_T
     3857 AC_CHECK_TYPES([loff_t])
     3858 
     3859diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go gcc-4.8.2/libgo/go/syscall/libcall_linux.go
     3860--- gcc-4.8.2.orig/libgo/go/syscall/libcall_linux.go    2013-02-08 19:24:26.000000000 +0000
     3861+++ gcc-4.8.2/libgo/go/syscall/libcall_linux.go 2013-11-01 16:12:34.291848407 +0000
     3862@@ -190,6 +190,9 @@
     3863 //sys  Adjtimex(buf *Timex) (state int, err error)
     3864 //adjtimex(buf *Timex) _C_int
     3865 
     3866+//sysnb        Dup3(oldfd int, newfd int, flags int) (err error)
     3867+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
     3868+
     3869 //sys  Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
     3870 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
     3871 
     3872@@ -268,6 +271,9 @@
     3873        return origlen - len(buf), count, names
     3874 }
     3875 
     3876+//sys  Getxattr(path string, attr string, dest []byte) (sz int, err error)
     3877+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
     3878+
     3879 //sys  InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
     3880 //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
     3881 
     3882@@ -283,6 +289,9 @@
     3883 //sys  Klogctl(typ int, buf []byte) (n int, err error)
     3884 //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
     3885 
     3886+//sys  Listxattr(path string, dest []byte) (sz int, err error)
     3887+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
     3888+
     3889 //sys  Mkdirat(dirfd int, path string, mode uint32) (err error)
     3890 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
     3891 
     3892@@ -305,6 +314,9 @@
     3893 //sys  PivotRoot(newroot string, putold string) (err error)
     3894 //pivot_root(newroot *byte, putold *byte) _C_int
     3895 
     3896+//sys  Removexattr(path string, attr string) (err error)
     3897+//removexattr(path *byte, name *byte) _C_int
     3898+
     3899 //sys  Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
     3900 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
     3901 
     3902@@ -338,6 +350,9 @@
     3903 //sysnb        Setresuid(ruid int, eguid int, suid int) (err error)
     3904 //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
     3905 
     3906+//sys  Setxattr(path string, attr string, data []byte, flags int) (err error)
     3907+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
     3908+
     3909 //sys  splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
     3910 //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
     3911 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
     3912diff -Naur gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go gcc-4.8.2/libgo/go/syscall/libcall_posix.go
     3913--- gcc-4.8.2.orig/libgo/go/syscall/libcall_posix.go    2013-02-08 19:24:26.000000000 +0000
     3914+++ gcc-4.8.2/libgo/go/syscall/libcall_posix.go 2013-11-01 16:12:34.291848407 +0000
     3915@@ -238,6 +238,9 @@
     3916 //sysnb        Getppid() (ppid int)
     3917 //getppid() Pid_t
     3918 
     3919+//sys Getpriority(which int, who int) (prio int, err error)
     3920+//getpriority(which _C_int, who _C_int) _C_int
     3921+
     3922 //sysnb        Getrlimit(resource int, rlim *Rlimit) (err error)
     3923 //getrlimit(resource _C_int, rlim *Rlimit) _C_int
     3924 
     3925@@ -307,6 +310,9 @@
     3926 //sysnb        Setpgid(pid int, pgid int) (err error)
     3927 //setpgid(pid Pid_t, pgid Pid_t) _C_int
     3928 
     3929+//sys Setpriority(which int, who int, prio int) (err error)
     3930+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
     3931+
     3932 //sysnb        Setreuid(ruid int, euid int) (err error)
     3933 //setreuid(ruid Uid_t, euid Uid_t) _C_int
     3934 
    30243935diff -Naur gcc-4.8.2.orig/libgo/mksysinfo.sh gcc-4.8.2/libgo/mksysinfo.sh
    3025 --- gcc-4.8.2.orig/libgo/mksysinfo.sh   2013-02-11 13:03:04.000000000 -0600
    3026 +++ gcc-4.8.2/libgo/mksysinfo.sh        2013-10-17 13:41:40.134537000 -0500
     3936--- gcc-4.8.2.orig/libgo/mksysinfo.sh   2013-02-11 19:03:04.000000000 +0000
     3937+++ gcc-4.8.2/libgo/mksysinfo.sh        2013-11-01 16:12:34.299849784 +0000
    30273938@@ -1035,6 +1035,10 @@
    30283939 grep '^const _LOCK_' gen-sysinfo.go |
     
    30373948     sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
    30383949diff -Naur gcc-4.8.2.orig/libgo/runtime/go-cdiv.c gcc-4.8.2/libgo/runtime/go-cdiv.c
    3039 --- gcc-4.8.2.orig/libgo/runtime/go-cdiv.c      1969-12-31 18:00:00.000000000 -0600
    3040 +++ gcc-4.8.2/libgo/runtime/go-cdiv.c   2013-10-16 12:27:53.564070000 -0500
     3950--- gcc-4.8.2.orig/libgo/runtime/go-cdiv.c      1970-01-01 00:00:00.000000000 +0000
     3951+++ gcc-4.8.2/libgo/runtime/go-cdiv.c   2013-11-01 16:12:34.299849784 +0000
    30413952@@ -0,0 +1,46 @@
    30423953+/* go-cdiv.c -- complex division routines
     
    30873998+}
    30883999diff -Naur gcc-4.8.2.orig/libgo/runtime/go-make-slice.c gcc-4.8.2/libgo/runtime/go-make-slice.c
    3089 --- gcc-4.8.2.orig/libgo/runtime/go-make-slice.c        2012-11-21 01:03:38.000000000 -0600
    3090 +++ gcc-4.8.2/libgo/runtime/go-make-slice.c     2013-10-16 12:27:53.564070000 -0500
     4000--- gcc-4.8.2.orig/libgo/runtime/go-make-slice.c        2012-11-21 07:03:38.000000000 +0000
     4001+++ gcc-4.8.2/libgo/runtime/go-make-slice.c     2013-11-01 16:12:34.303850472 +0000
    30914002@@ -34,7 +34,10 @@
    30924003   std = (const struct __go_slice_type *) td;
     
    31024013   icap = (intgo) cap;
    31034014diff -Naur gcc-4.8.2.orig/libgo/runtime/go-nosys.c gcc-4.8.2/libgo/runtime/go-nosys.c
    3104 --- gcc-4.8.2.orig/libgo/runtime/go-nosys.c     2013-01-29 14:52:43.000000000 -0600
    3105 +++ gcc-4.8.2/libgo/runtime/go-nosys.c  2013-10-18 08:26:14.115640000 -0500
     4015--- gcc-4.8.2.orig/libgo/runtime/go-nosys.c     2013-01-29 20:52:43.000000000 +0000
     4016+++ gcc-4.8.2/libgo/runtime/go-nosys.c  2013-11-01 16:12:34.303850472 +0000
    31064017@@ -43,6 +43,17 @@
    31074018 }
     
    31974108 
    31984109diff -Naur gcc-4.8.2.orig/libgo/runtime/go-signal.c gcc-4.8.2/libgo/runtime/go-signal.c
    3199 --- gcc-4.8.2.orig/libgo/runtime/go-signal.c    2013-07-22 23:42:18.000000000 -0500
    3200 +++ gcc-4.8.2/libgo/runtime/go-signal.c 2013-10-16 12:27:53.564070000 -0500
     4110--- gcc-4.8.2.orig/libgo/runtime/go-signal.c    2013-07-23 04:42:18.000000000 +0000
     4111+++ gcc-4.8.2/libgo/runtime/go-signal.c 2013-11-01 16:12:34.303850472 +0000
    32014112@@ -399,6 +399,9 @@
    32024113 {
     
    32284139 }
    32294140diff -Naur gcc-4.8.2.orig/libitm/libitm.info gcc-4.8.2/libitm/libitm.info
    3230 --- gcc-4.8.2.orig/libitm/libitm.info   2013-10-16 03:29:00.000000000 -0500
    3231 +++ gcc-4.8.2/libitm/libitm.info        1969-12-31 18:00:00.000000000 -0600
     4141--- gcc-4.8.2.orig/libitm/libitm.info   2013-10-16 08:29:00.000000000 +0000
     4142+++ gcc-4.8.2/libitm/libitm.info        1970-01-01 00:00:00.000000000 +0000
    32324143@@ -1,1293 +0,0 @@
    32334144-This is libitm.info, produced by makeinfo version 5.1 from libitm.texi.
     
    45255436-End Tag Table
    45265437diff -Naur gcc-4.8.2.orig/libquadmath/libquadmath.info gcc-4.8.2/libquadmath/libquadmath.info
    4527 --- gcc-4.8.2.orig/libquadmath/libquadmath.info 2013-10-16 03:18:56.000000000 -0500
    4528 +++ gcc-4.8.2/libquadmath/libquadmath.info      1969-12-31 18:00:00.000000000 -0600
     5438--- gcc-4.8.2.orig/libquadmath/libquadmath.info 2013-10-16 08:18:56.000000000 +0000
     5439+++ gcc-4.8.2/libquadmath/libquadmath.info      1970-01-01 00:00:00.000000000 +0000
    45295440@@ -1,808 +0,0 @@
    45305441-This is libquadmath.info, produced by makeinfo version 5.1 from
     
    53366247-
    53376248-End Tag Table
     6249diff -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
     6250--- gcc-4.8.2.orig/libstdc++-v3/include/bits/shared_ptr_base.h  2013-10-08 13:38:21.000000000 +0000
     6251+++ gcc-4.8.2/libstdc++-v3/include/bits/shared_ptr_base.h       2013-11-01 16:12:34.311851849 +0000
     6252@@ -391,7 +391,7 @@
     6253     public:
     6254       template<typename... _Args>
     6255        _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
     6256-       : _M_impl(__a), _M_storage()
     6257+       : _M_impl(__a)
     6258        {
     6259          _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
     6260          // _GLIBCXX_RESOLVE_LIB_DEFECTS
     6261@@ -819,7 +819,7 @@
     6262        : _M_ptr(__r.get()), _M_refcount()
     6263        {
     6264          __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
     6265-         auto __tmp = std::__addressof(*__r.get());
     6266+         auto __tmp = __r.get();
     6267          _M_refcount = __shared_count<_Lp>(std::move(__r));
     6268          __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
     6269        }
    53386270diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h
    5339 --- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h 2013-09-30 12:42:52.000000000 -0500
    5340 +++ gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h      2013-10-20 04:08:12.578223000 -0500
     6271--- gcc-4.8.2.orig/libstdc++-v3/include/bits/stl_algo.h 2013-09-30 17:42:52.000000000 +0000
     6272+++ gcc-4.8.2/libstdc++-v3/include/bits/stl_algo.h      2013-11-01 16:12:34.399866997 +0000
    53416273@@ -2279,7 +2279,7 @@
    53426274                                _RandomAccessIterator __last)
     
    53576289       return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
    53586290     }
     6291diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio gcc-4.8.2/libstdc++-v3/include/c_global/cstdio
     6292--- gcc-4.8.2.orig/libstdc++-v3/include/c_global/cstdio 2013-02-03 17:54:05.000000000 +0000
     6293+++ gcc-4.8.2/libstdc++-v3/include/c_global/cstdio      2013-11-01 16:12:34.399866997 +0000
     6294@@ -69,6 +69,7 @@
     6295 #undef ftell
     6296 #undef fwrite
     6297 #undef getc
     6298+#undef getchar
     6299 #undef gets
     6300 #undef perror
     6301 #undef printf
    53596302diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h gcc-4.8.2/libstdc++-v3/include/debug/functions.h
    5360 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h       2013-02-03 11:54:05.000000000 -0600
    5361 +++ gcc-4.8.2/libstdc++-v3/include/debug/functions.h    2013-10-16 15:09:18.884767000 -0500
     6303--- gcc-4.8.2.orig/libstdc++-v3/include/debug/functions.h       2013-02-03 17:54:05.000000000 +0000
     6304+++ gcc-4.8.2/libstdc++-v3/include/debug/functions.h    2013-11-01 16:12:34.399866997 +0000
    53626305@@ -345,11 +345,13 @@
    53636306       return __check_sorted_set_aux(__first, __last, __pred, _SameType());
     
    55316474     struct __is_safe_random_iterator
    55326475diff -Naur gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h gcc-4.8.2/libstdc++-v3/include/debug/macros.h
    5533 --- gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h  2013-02-03 11:54:05.000000000 -0600
    5534 +++ gcc-4.8.2/libstdc++-v3/include/debug/macros.h       2013-10-16 15:09:18.884767000 -0500
     6476--- gcc-4.8.2.orig/libstdc++-v3/include/debug/macros.h  2013-02-03 17:54:05.000000000 +0000
     6477+++ gcc-4.8.2/libstdc++-v3/include/debug/macros.h       2013-11-01 16:12:34.403867685 +0000
    55356478@@ -261,8 +261,9 @@
    55366479     w.r.t. the value _Value. */
     
    55816524                      ._M_iterator(_First, #_First)                     \
    55826525                      ._M_iterator(_Last, #_Last)                       \
     6526diff -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
     6527--- gcc-4.8.2.orig/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc      1970-01-01 00:00:00.000000000 +0000
     6528+++ gcc-4.8.2/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc   2013-11-01 16:12:34.403867685 +0000
     6529@@ -0,0 +1,33 @@
     6530+// { dg-options "-std=gnu++11" }
     6531+// { dg-do compile }
     6532+
     6533+// Copyright (C) 2013 Free Software Foundation, Inc.
     6534+//
     6535+// This file is part of the GNU ISO C++ Library.  This library is free
     6536+// software; you can redistribute it and/or modify it under the
     6537+// terms of the GNU General Public License as published by the
     6538+// Free Software Foundation; either version 3, or (at your option)
     6539+// any later version.
     6540+
     6541+// This library is distributed in the hope that it will be useful,
     6542+// but WITHOUT ANY WARRANTY; without even the implied warranty of
     6543+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     6544+// GNU General Public License for more details.
     6545+
     6546+// You should have received a copy of the GNU General Public License along
     6547+// with this library; see the file COPYING3.  If not see
     6548+// <http://www.gnu.org/licenses/>.
     6549+
     6550+#include <memory>
     6551+
     6552+// libstdc++/58839
     6553+
     6554+struct D {
     6555+  void operator()(void*) const noexcept { }
     6556+};
     6557+
     6558+void test01()
     6559+{
     6560+  std::unique_ptr<void, D> y;
     6561+  std::shared_ptr<void> x = std::move(y);
     6562+}
    55836563diff -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
    5584 --- gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc    1969-12-31 18:00:00.000000000 -0600
    5585 +++ gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 2013-10-20 04:08:12.578223000 -0500
     6564--- gcc-4.8.2.orig/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc    1970-01-01 00:00:00.000000000 +0000
     6565+++ gcc-4.8.2/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc 2013-11-01 16:12:34.403867685 +0000
    55866566@@ -0,0 +1,52 @@
    55876567+// Copyright (C) 2013 Free Software Foundation, Inc.
Note: See TracChangeset for help on using the changeset viewer.