diff --git a/llvm-gcc-4.2/configure.in b/llvm-gcc-4.2/configure.in
index 4678af2..cf1fa23 100644
--- a/llvm-gcc-4.2/configure.in
+++ b/llvm-gcc-4.2/configure.in
@@ -989,8 +989,10 @@
   i[[3456789]]86-*-darwin*)
     host_makefile_frag="config/mh-x86-darwin"
     # gcc can default to x86_64 code generation, avoid that
-    CC="${CC-gcc} -m32"
-    CXX="${CXX-g++} -m32"
+    if test "${build}" = "${host}"; then
+      CC="${CC-gcc} -m32"
+      CXX="${CXX-g++} -m32"
+    fi
     ;;
   # APPLE LOCAL end dynamic-no-pic
   powerpc-*-aix*)
diff --git a/llvm-gcc-4.2/driverdriver.c b/llvm-gcc-4.2/driverdriver.c
index d706496..367562c 100644
--- a/llvm-gcc-4.2/driverdriver.c
+++ b/llvm-gcc-4.2/driverdriver.c
@@ -1,4 +1,5 @@
 /* APPLE LOCAL file driver driver */
+
 /* Darwin driver program that handles -arch commands and invokes
    appropriate compiler driver.
    Copyright (C) 2004, 2005 Free Software Foundation, Inc.
@@ -76,6 +77,8 @@
 int dash_dynamiclib_seen = 0;
 int verbose_flag = 0;
 int save_temps_seen = 0;
+int dash_m32_seen = 0;
+int dash_m64_seen = 0;
 
 /* Support at the max 10 arch. at a time. This is historical limit.  */
 #define MAX_ARCHES 10
@@ -190,27 +193,35 @@
 static const char *
 get_arch_name (const char *name)
 {
-  const NXArchInfo * a_info;
+  NXArchInfo * a_info;
   const NXArchInfo * all_info;
   cpu_type_t cputype;
   struct arch_config_guess_map *map;
   const char *aname;
 
-  if (name)
-    {
-      /* Find config name based on arch name.  */
-      aname = NULL;
-      map = arch_config_map;
-      while (map->arch_name)
-	{
-	  if (!strcmp (map->arch_name, name))
-	    return name;
-	  else map++;
-	}
-      a_info = NXGetArchInfoFromName (name);
+  if (name) {
+    /* Find config name based on arch name.  */
+    aname = NULL;
+    map = arch_config_map;
+    while (map->arch_name) {
+      if (!strcmp (map->arch_name, name))
+	return name;
+      else map++;
     }
-  else
-    a_info = NXGetLocalArchInfo ();
+    a_info = (NXArchInfo *) NXGetArchInfoFromName (name);
+  } else {
+    a_info = (NXArchInfo *) NXGetLocalArchInfo();
+    if (a_info) {
+      if (dash_m32_seen) {
+        /* If -m32 is seen then do not change cpu type.  */
+      } else if (dash_m64_seen) {
+        /* If -m64 is seen then enable CPU_ARCH_ABI64.  */
+	a_info->cputype |= CPU_ARCH_ABI64;
+      } else if (sizeof (long) == 8)
+	/* On x86, by default (name is NULL here) enable 64 bit code.  */
+	a_info->cputype |= CPU_ARCH_ABI64;
+    }
+  }
 
   if (!a_info)
     fatal ("Invalid arch name : %s", name);
@@ -639,7 +650,6 @@
 
       for (i = 1; i < new_argc; i++)
 	{
-
 	  if (ifn && ifn->name && !strcmp (new_argv[i], ifn->name))
 	    {
 	      /* This argument is one of the input file.  */
@@ -1371,6 +1381,16 @@
 	  new_argv[new_argc++] = argv[i];
 	  dash_capital_m_seen = 1;
 	}
+      else if (!strcmp (argv[i], "-m32"))
+	{
+	  new_argv[new_argc++] = argv[i];
+	  dash_m32_seen = 1;
+	}
+      else if (!strcmp (argv[i], "-m64"))
+	{
+	  new_argv[new_argc++] = argv[i];
+	  dash_m64_seen = 1;
+	}
       else if (!strcmp (argv[i], "-dynamiclib"))
 	{
 	  new_argv[new_argc++] = argv[i];
@@ -1505,6 +1525,9 @@
     fatal ("no input files");
 #endif
 
+  if (num_arches == 0)
+    add_arch(get_arch_name(NULL));
+
   if (num_arches > 1)
     {
       if (preprocessed_output_request
@@ -1517,22 +1540,15 @@
      Invoke appropriate compiler driver.  FAT build is not required in this
      case.  */
 
-  if (num_arches == 0 || num_arches == 1)
+  if (num_arches == 1)
     {
       int arch_specific_argc;
       const char **arch_specific_argv;
 
-      /* If no -arch is specified than use host compiler driver.  */
-      if (num_arches == 0)
-	new_argv[0] = get_driver_name (get_arch_name (NULL));
-      else if (num_arches == 1)
-	{
-	  /* Find compiler driver based on -arch <foo> and add approriate
-	     -m* argument.  */
-	  new_argv[0] = get_driver_name (get_arch_name (arches[0]));
-	  new_argc = new_argc + add_arch_options (0, new_argv, new_argc);
-	}
-
+      /* Find compiler driver based on -arch <foo> and add approriate
+	 -m* argument.  */
+      new_argv[0] = get_driver_name (get_arch_name (arches[0]));
+      new_argc = new_argc + add_arch_options (0, new_argv, new_argc);
 
 #ifdef DEBUG
       printf ("%s: invoking single driver name = %s\n", progname, new_argv[0]);
diff --git a/llvm-gcc-4.2/gcc/ChangeLog.apple b/llvm-gcc-4.2/gcc/ChangeLog.apple
index ac74517..56f2f25 100644
--- a/llvm-gcc-4.2/gcc/ChangeLog.apple
+++ b/llvm-gcc-4.2/gcc/ChangeLog.apple
@@ -1,3 +1,25 @@
+2009-02-11  Fariborz Jahanian <fjahanian@apple.com>
+
+	Radar 6573923
+	* c-decl.c (synth_block_byref_id_object_copy_func,
+	synth_block_byref_id_object_dispose_func): Set BLOCK_BYREF_CALLER
+	flag in call to copy/dispose helper functions.
+	* c-common.h (BLOCK_BYREF_CALLER): New flag.
+
+2009-01-29  Josh Conner  <jconner@apple.com>
+
+	Radar 6186914, 6541440
+	* dwarf2out.c (dwarf_stack_op_name): Handle DW_OP_bit_piece.
+	(size_of_loc_descr, output_loc_operands): Likewise.
+	(reg_loc_descriptor): Call TARGET_DWARF2_REG_HANDLER if it is defined.
+	* config/arm/arm.h (TARGET_DWARF2_REG_HANDLER): Define.
+
+2009-01-22  Stuart Hastings  <stuart@apple.com>
+
+	Radar 6515001
+	* ifcvt.c(noce_try_cmove_arith): Use a more conservative trap
+          check.
+
 2009-01-12  Caroline Tice  <ctice@apple.com>
 
         Radar 6476836
diff --git a/llvm-gcc-4.2/gcc/c-common.c b/llvm-gcc-4.2/gcc/c-common.c
index aa1ec25..ca97879 100644
--- a/llvm-gcc-4.2/gcc/c-common.c
+++ b/llvm-gcc-4.2/gcc/c-common.c
@@ -5169,6 +5169,16 @@
       || TREE_CODE (*node) == VAR_DECL)
     declare_weak (*node);
   /* APPLE LOCAL begin weak types 5954418 */
+  else if (!DECL_P (*node)
+	   /* If the weak flag can be associated with something else,
+	      prefer that. */
+	   && (flags & (ATTR_FLAG_FUNCTION_NEXT
+			|ATTR_FLAG_DECL_NEXT
+			|ATTR_FLAG_ARRAY_NEXT)))
+    {
+      *no_add_attrs = true;
+      return tree_cons (name, args, NULL_TREE);
+    }
   else if (! targetm.cxx.class_data_always_comdat ()
 	   && TREE_CODE (*node) == RECORD_TYPE)
     {
diff --git a/llvm-gcc-4.2/gcc/c-common.h b/llvm-gcc-4.2/gcc/c-common.h
index 1faba32..9a69154 100644
--- a/llvm-gcc-4.2/gcc/c-common.h
+++ b/llvm-gcc-4.2/gcc/c-common.h
@@ -1139,7 +1139,8 @@
     BLOCK_FIELD_IS_OBJECT   =  3,  /* id, NSObject, __attribute__((NSObject)), block, ... */
     BLOCK_FIELD_IS_BLOCK    =  7,  /* a block variable */
     BLOCK_FIELD_IS_BYREF    =  8,  /* the on stack structure holding the __block variable */
-    BLOCK_FIELD_IS_WEAK     = 16   /* declared __weak, only used in byref copy helpers */
+    BLOCK_FIELD_IS_WEAK     = 16,  /* declared __weak, only used in byref copy helpers */
+    BLOCK_BYREF_CALLER      = 128  /* called from __block (byref) copy/dispose support routines */
 };
 /* APPLE LOCAL end radar 5847976 */
 /* APPLE LOCAL begin radar 5732232 - blocks */
diff --git a/llvm-gcc-4.2/gcc/c-decl.c b/llvm-gcc-4.2/gcc/c-decl.c
index ccbd60c8..b30167a 100644
--- a/llvm-gcc-4.2/gcc/c-decl.c
+++ b/llvm-gcc-4.2/gcc/c-decl.c
@@ -3650,6 +3650,11 @@
   /* APPLE LOCAL begin radar 6180456 */
   /* _Block_object_assign (&_dest->object, _src->object, BLOCK_FIELD_IS_OBJECT) or :
      _Block_object_assign (&_dest->object, _src->object, BLOCK_FIELD_IS_BLOCK) */
+  /* APPLE LOCAL begin radar 6573923 */
+  /* Also add the new flag when calling _Block_object_dispose
+     from byref dispose helper. */
+  flag |= BLOCK_BYREF_CALLER;
+ /* APPLE LOCAL end radar 6573923 */
   call_exp = build_block_object_assign_call_exp (build_fold_addr_expr (dst_obj), src_obj, flag);
   add_stmt (call_exp);
   /* APPLE LOCAL end radar 6180456 */
@@ -3696,6 +3701,11 @@
   /* APPLE LOCAL begin radar 6180456 */
   /* _Block_object_dispose(_src->object, BLOCK_FIELD_IS_OBJECT) : or
      _Block_object_dispose(_src->object, BLOCK_FIELD_IS_BLOCK) */
+  /* APPLE LOCAL begin radar 6573923 */
+  /* Also add the new flag when calling _Block_object_dispose
+     from byref dispose helper. */
+  flag |= BLOCK_BYREF_CALLER;
+  /* APPLE LOCAL end radar 6573923 */
   rel_exp = build_block_object_dispose_call_exp (src_obj, flag);
   /* APPLE LOCAL end radar 6180456 */
   add_stmt (rel_exp);
diff --git a/llvm-gcc-4.2/gcc/c-typeck.c b/llvm-gcc-4.2/gcc/c-typeck.c
index f3fceb5..1efb9ee 100644
--- a/llvm-gcc-4.2/gcc/c-typeck.c
+++ b/llvm-gcc-4.2/gcc/c-typeck.c
@@ -2104,7 +2104,6 @@
 	       in an inline function.
 	       Hope it doesn't break something else.  */
 	    | TREE_THIS_VOLATILE (array));
-
       return require_complete_type (fold (rval));
     }
   else
diff --git a/llvm-gcc-4.2/gcc/config/arm/arm.h b/llvm-gcc-4.2/gcc/config/arm/arm.h
index 4d1b471..e5b6447 100644
--- a/llvm-gcc-4.2/gcc/config/arm/arm.h
+++ b/llvm-gcc-4.2/gcc/config/arm/arm.h
@@ -2700,6 +2700,36 @@
 		((FIRST_PARM_OFFSET (FNDECL)) 			\
 		 + (DECL_STRUCT_FUNCTION (FNDECL))->pretend_args_size)
 /* APPLE LOCAL end ARM 6148015 */
+
+/* APPLE LOCAL begin 6186914 */
+/* As per the ARM ABI, for double-width VFP regs:
+     Dx = DW_OP_regx(256+x)
+   For single-width VFP regs:
+     S[2x] = DW_OP_regx(256 + (x >> 1)) DW_OP_bit piece(32, 0)
+     S[2x+1] = DW_OP_regx(256 + (x >> 1)) DW_OP_bit_piece (32, 32)
+   It's unfortunate that we have to put this into inline code, but the
+   interfaces we need from dwarf2out.c aren't exposed.  */
+#define TARGET_DWARF2_REG_HANDLER(reg)					\
+  do {									\
+    if (IS_VFP_REGNUM (REGNO (reg))					\
+	&& (GET_MODE (reg) == SFmode || GET_MODE (reg) == DFmode))	\
+      {									\
+	dw_loc_descr_ref loc_result = NULL;				\
+	dw_loc_descr_ref temp;						\
+	unsigned int relative_regno = REGNO (reg) - FIRST_VFP_REGNUM;	\
+	unsigned int base_reg = 256 + (relative_regno >> 1);		\
+	temp = one_reg_loc_descriptor (base_reg, initialized);		\
+	add_loc_descr (&loc_result, temp);				\
+	if (GET_MODE (reg) == SFmode)					\
+	  {								\
+	    int offset = relative_regno & 0x1 ? 32 : 0;			\
+	    temp = new_loc_descr (DW_OP_bit_piece, 32, offset);		\
+	    add_loc_descr (&loc_result, temp);				\
+	  }								\
+	return loc_result;						\
+      }									\
+  } while (0)
+/* APPLE LOCAL end 6186914 */
 
 enum arm_builtins
 {
diff --git a/llvm-gcc-4.2/gcc/config/darwin.c b/llvm-gcc-4.2/gcc/config/darwin.c
index 8603d68..cede954 100644
--- a/llvm-gcc-4.2/gcc/config/darwin.c
+++ b/llvm-gcc-4.2/gcc/config/darwin.c
@@ -299,12 +299,14 @@
   name = XSTR (sym_ref, 0);
 
   lprefix = (((name[0] == '*' || name[0] == '&')
+	      /* APPLE LOCAL begin fix-and-continue 6227434 */
               && (name[1] == 'L'
 		  || (name[1] == '"' && name[2] == 'L')
 		  /* Don't indirect writable strings.  */
 		  || (name[1] == 'l' && name[2] == 'C')))
              || (strncmp (name, "_OBJC_", 6) == 0)
 	     || objc_anonymous_local_objc_name (name));
+	      /* APPLE LOCAL end fix-and-continue 6227434 */
 
   return ! lprefix;
 }
diff --git a/llvm-gcc-4.2/gcc/config/darwin.h b/llvm-gcc-4.2/gcc/config/darwin.h
index fa93895..837aa4e 100644
--- a/llvm-gcc-4.2/gcc/config/darwin.h
+++ b/llvm-gcc-4.2/gcc/config/darwin.h
@@ -493,10 +493,12 @@
       miphoneos-version-min=*: %(darwin_iphoneos_libgcc);		   \
       shared-libgcc|fexceptions|fgnu-runtime:				   \
        %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_s.10.4)	   \
-       %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5)	   \
+       "/* APPLE LOCAL link optimizations 6499452 */"			   \
+       %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5)   \
        -lgcc;								   \
       :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \
-       %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_s.10.5)	   \
+       "/* APPLE LOCAL link optimizations 6499452 */"			   \
+       %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5)   \
        -lgcc}"
 
 /* We specify crt0.o as -lcrt0.o so that ld will search the library path.
@@ -510,7 +512,8 @@
 #undef  STARTFILE_SPEC
 #define STARTFILE_SPEC							    \
   "%{Zdynamiclib: %(darwin_dylib1) }					    \
-   %{!Zdynamiclib:%{Zbundle:%{!static:-lbundle1.o}}			    \
+   "/* APPLE LOCAL link optimizations 6499452 */"			    \
+   %{!Zdynamiclib:%{Zbundle:%{!static: %(darwin_bundle1)}}		    \
      %{!Zbundle:%{pg:%{static:-lgcrt0.o}				    \
                      %{!static:%{object:-lgcrt0.o}			    \
                                %{!object:%{preload:-lgcrt0.o}		    \
@@ -534,6 +537,8 @@
 #define DARWIN_EXTRA_SPECS						\
   { "darwin_crt1", DARWIN_CRT1_SPEC },					\
   { "darwin_dylib1", DARWIN_DYLIB1_SPEC },				\
+  /* APPLE LOCAL link optimizations 6499452 */				\
+  { "darwin_bundle1", DARWIN_BUNDLE1_SPEC },				\
   { "darwin_minversion", DARWIN_MINVERSION_SPEC },			\
 /* APPLE LOCAL end mainline */						\
 /* APPLE LOCAL begin ARM 5683689 */					\
@@ -550,6 +555,11 @@
      %:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o)		\
      %:version-compare(>= 10.5 mmacosx-version-min= -ldylib1.10.5.o)}"
 
+/* APPLE LOCAL begin link optimizations 6499452 */
+#define DARWIN_BUNDLE1_SPEC						\
+  "-lbundle1.o"
+/* APPLE LOCAL end link optimizations 6499452 */
+
 #define DARWIN_CRT1_SPEC						\
 /* APPLE LOCAL ARM 5823776 iphoneos should use crt1.o */		\
   "%{miphoneos-version-min=*: -lcrt1.o}					\
diff --git a/llvm-gcc-4.2/gcc/config/i386/darwin.h b/llvm-gcc-4.2/gcc/config/i386/darwin.h
index 3a9ce24..b27bb4f 100644
--- a/llvm-gcc-4.2/gcc/config/i386/darwin.h
+++ b/llvm-gcc-4.2/gcc/config/i386/darwin.h
@@ -141,6 +141,23 @@
 /* APPLE LOCAL ARM 5681645 */
 #define DARWIN_IPHONEOS_LIBGCC_SPEC "-lgcc_s.10.5 -lgcc"
 
+/* APPLE LOCAL begin link optimizations 6499452 */
+#undef DARWIN_CRT1_SPEC
+#define DARWIN_CRT1_SPEC						\
+  "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o)		\
+   %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lcrt1.10.5.o)	\
+   %:version-compare(>= 10.6 mmacosx-version-min= -lcrt1.10.6.o)"
+
+#undef DARWIN_DYLIB1_SPEC
+#define DARWIN_DYLIB1_SPEC						\
+  "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o)		\
+   %:version-compare(>< 10.5 10.6 mmacosx-version-min= -ldylib1.10.5.o)"
+
+#undef DARWIN_BUNDLE1_SPEC
+#define DARWIN_BUNDLE1_SPEC						\
+  "%:version-compare(!> 10.6 mmacosx-version-min= -lbundle1.o)"
+/* APPLE LOCAL end link optimizations 6499452 */
+
 #undef SUBTARGET_EXTRA_SPECS
 #define SUBTARGET_EXTRA_SPECS                                   \
   DARWIN_EXTRA_SPECS                                            \
diff --git a/llvm-gcc-4.2/gcc/config/i386/predicates.md b/llvm-gcc-4.2/gcc/config/i386/predicates.md
index 459ce02..6b6d9af 100644
--- a/llvm-gcc-4.2/gcc/config/i386/predicates.md
+++ b/llvm-gcc-4.2/gcc/config/i386/predicates.md
@@ -470,7 +470,7 @@
 /* LLVM LOCAL begin non-Darwin hack. */
 #ifdef TARGET_FIX_AND_CONTINUE
       if (!indirect_data (op)
-          || machopic_data_defined_p (op))
+	  || machopic_data_defined_p (op))  
 #endif
 /* LLVM LOCAL end non-Darwin hack */
       return 1;
diff --git a/llvm-gcc-4.2/gcc/cp/ChangeLog.apple b/llvm-gcc-4.2/gcc/cp/ChangeLog.apple
index 1ea20f1..17a2794 100644
--- a/llvm-gcc-4.2/gcc/cp/ChangeLog.apple
+++ b/llvm-gcc-4.2/gcc/cp/ChangeLog.apple
@@ -1,3 +1,16 @@
+2009-02-11  Fariborz Jahanian <fjahanian@apple.com>
+
+        Radar 6573923
+        * decl.c (synth_block_byref_id_object_copy_func,
+        synth_block_byref_id_object_dispose_func): Set BLOCK_BYREF_CALLER
+        flag in call to copy/dispose helper functions.
+
+2009-02-11  Fariborz Jahanian <fjahanian@apple.com>
+
+        Radar 6545782
+	* semantics.c (get_final_block_variable): New
+	(finish_id_expression): Call get_final_block_variable.
+
 2008-12-05  Fariborz Jahanian <fjahanian@apple.com>
 
         Radar 6413140
diff --git a/llvm-gcc-4.2/gcc/cp/decl.c b/llvm-gcc-4.2/gcc/cp/decl.c
index b1d2d31..e444c14 100644
--- a/llvm-gcc-4.2/gcc/cp/decl.c
+++ b/llvm-gcc-4.2/gcc/cp/decl.c
@@ -5365,6 +5365,11 @@
   /* APPLE LOCAL begin radar 6180456 */
   /* _Block_object_assign (&_dest->object, _src->object, BLOCK_FIELD_IS_OBJECT) or:
      _Block_object_assign (&_dest->object, _src->object, BLOCK_FIELD_IS_BLOCK) */
+  /* APPLE LOCAL begin radar 6573923 */
+  /* Also add the new flag when calling _Block_object_dispose
+     from byref dispose helper. */
+  flag |= BLOCK_BYREF_CALLER;
+ /* APPLE LOCAL end radar 6573923 */
   call_exp = build_block_object_assign_call_exp (build_fold_addr_expr (dst_obj), src_obj, flag);
   add_stmt (call_exp);
   /* APPLE LOCAL end radar 6180456 */
@@ -5413,6 +5418,11 @@
   /* APPLE LOCAL begin radar 6180456 */
   /* _Block_object_dispose(_src->object, BLOCK_FIELD_IS_OBJECT) or:
      _Block_object_dispose(_src->object, BLOCK_FIELD_IS_BLOCK) */
+  /* APPLE LOCAL begin radar 6573923 */
+  /* Also add the new flag when calling _Block_object_dispose
+     from byref dispose helper. */
+  flag |= BLOCK_BYREF_CALLER;
+ /* APPLE LOCAL end radar 6573923 */
   rel_exp = build_block_object_dispose_call_exp (src_obj, flag);
   /* APPLE LOCAL end radar 6180456 */
   add_stmt (rel_exp);
diff --git a/llvm-gcc-4.2/gcc/cp/semantics.c b/llvm-gcc-4.2/gcc/cp/semantics.c
index 6774f25..9656e9a 100644
--- a/llvm-gcc-4.2/gcc/cp/semantics.c
+++ b/llvm-gcc-4.2/gcc/cp/semantics.c
@@ -2487,6 +2487,50 @@
 
   return false;
 }
+
+/* APPLE LOCAL begin radar 6545782 */
+/** This routine does all the work on use of variables in a block. */
+static tree get_final_block_variable (tree name, tree var) {
+  tree decl = var;
+  
+  if (cur_block
+      && (TREE_CODE (decl) == VAR_DECL
+          || TREE_CODE (decl) == PARM_DECL)
+      && !lookup_name_in_block (name, &decl))
+  { 
+    bool gdecl;
+    /* We are referencing a variable inside a block whose
+     declaration is outside.  */
+    gcc_assert (decl && 
+                (TREE_CODE (decl) == VAR_DECL
+                 || TREE_CODE (decl) == PARM_DECL));
+    gdecl = (TREE_CODE (decl) == VAR_DECL && 
+             (DECL_EXTERNAL (decl) || TREE_STATIC (decl)));
+    /* Treat all 'global' variables as 'byref' by default. */
+    if (gdecl
+        || (TREE_CODE (decl) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (decl)))
+    {
+      /* byref globals are directly accessed. */
+      if (!gdecl)
+      /* build a decl for the byref variable. */
+        decl = build_block_byref_decl (name, decl, decl);
+      else
+        add_block_global_byref_list (decl);
+    }
+    else
+    {
+      /* 'byref' globals are never copied-in. So, do not add
+       them to the copied-in list. */
+      if (!in_block_global_byref_list (decl))
+      /* build a new decl node. set its type to 'const' type
+        of the old decl. */
+        decl = build_block_ref_decl (name, decl);
+    }
+  }
+  return decl;
+}
+/* APPLE LOCAL end radar 6545782 */
+
 /* APPLE LOCAL end blocks 6040305 */
 
 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
@@ -2943,48 +2987,12 @@
 	      path = currently_open_derived_class (DECL_CONTEXT (decl));
 	      perform_or_defer_access_check (TYPE_BINFO (path), decl, decl);
 	    }
-
+          /* APPLE LOCAL radar 6545782 */
+          decl = get_final_block_variable (id_expression, decl);
 	  decl = convert_from_reference (decl);
 	}
     }
 
-  /* APPLE LOCAL begin blocks 6040305 (ci) */
-  if (cur_block
-      && (TREE_CODE (decl) == VAR_DECL
-	  || TREE_CODE (decl) == PARM_DECL)
-      && !lookup_name_in_block (id_expression, &decl))
-    {
-      bool gdecl;
-      /* We are referencing a variable inside a block whose
-	 declaration is outside.  */
-      gcc_assert (decl && 
-		  (TREE_CODE (decl) == VAR_DECL
-		   || TREE_CODE (decl) == PARM_DECL));
-      gdecl = (TREE_CODE (decl) == VAR_DECL && 
-	       (DECL_EXTERNAL (decl) || TREE_STATIC (decl)));
-      /* Treat all 'global' variables as 'byref' by default. */
-      if (gdecl
-	  || (TREE_CODE (decl) == VAR_DECL && COPYABLE_BYREF_LOCAL_VAR (decl)))
-	{
-	  /* byref globals are directly accessed. */
-	  if (!gdecl)
-	    /* build a decl for the byref variable. */
-	    decl = build_block_byref_decl (id_expression, decl, decl);
-	  else
-	    add_block_global_byref_list (decl);
-	}
-      else
-	{
-	  /* 'byref' globals are never copied-in. So, do not add
-	     them to the copied-in list. */
-	  if (!in_block_global_byref_list (decl))
-	    /* build a new decl node. set its type to 'const' type
-	       of the old decl. */
-	    decl = build_block_ref_decl (id_expression, decl);
-	}
-    }
-  /* APPLE LOCAL end blocks 6040305 (ci) */
-
   if (TREE_DEPRECATED (decl))
     warn_deprecated_use (decl);
 
diff --git a/llvm-gcc-4.2/gcc/dwarf2out.c b/llvm-gcc-4.2/gcc/dwarf2out.c
index d8f3abe..0b0d439 100644
--- a/llvm-gcc-4.2/gcc/dwarf2out.c
+++ b/llvm-gcc-4.2/gcc/dwarf2out.c
@@ -3096,6 +3096,10 @@
       return "DW_OP_bregx";
     case DW_OP_piece:
       return "DW_OP_piece";
+    /* APPLE LOCAL begin 6186914 */
+    case DW_OP_bit_piece:
+      return "DW_OP_bit_piece";
+    /* APPLE LOCAL end 6186914 */
     case DW_OP_deref_size:
       return "DW_OP_deref_size";
     case DW_OP_xderef_size:
@@ -3246,6 +3250,12 @@
     case DW_OP_piece:
       size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
       break;
+    /* APPLE LOCAL begin 6186914 */
+    case DW_OP_bit_piece:
+      size += size_of_uleb128 (loc->dw_loc_oprnd1.v.val_unsigned);
+      size += size_of_uleb128 (loc->dw_loc_oprnd2.v.val_unsigned);
+      break;
+    /* APPLE LOCAL end 6186914 */
     case DW_OP_deref_size:
     case DW_OP_xderef_size:
       size += 1;
@@ -3411,6 +3421,12 @@
     case DW_OP_piece:
       dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
       break;
+    /* APPLE LOCAL begin 6186914 */
+    case DW_OP_bit_piece:
+      dw2_asm_output_data_uleb128 (val1->v.val_unsigned, NULL);
+      dw2_asm_output_data_uleb128 (val2->v.val_unsigned, NULL);
+      break;
+    /* APPLE LOCAL end 6186914 */
     case DW_OP_deref_size:
     case DW_OP_xderef_size:
       dw2_asm_output_data (1, val1->v.val_int, NULL);
@@ -9093,6 +9109,16 @@
 
   regs = targetm.dwarf_register_span (rtl);
 
+/* APPLE LOCAL begin 6186914 */
+#ifdef TARGET_DWARF2_REG_HANDLER
+  /* If this macro is defined, it should provide any target-specific
+     register debug info handling.  The macro should return the
+     dw_loc_descr_ref if it performs any alternative handling, and
+     fall through otherwise.  */
+  TARGET_DWARF2_REG_HANDLER (rtl);
+#endif
+/* APPLE LOCAL end 6186914 */
+
   /* APPLE LOCAL begin track initialization status 4964532  */
   if (hard_regno_nregs[REGNO (rtl)][GET_MODE (rtl)] > 1 || regs)
     return multiple_reg_loc_descriptor (rtl, regs, initialized);
diff --git a/llvm-gcc-4.2/gcc/gimplify.c b/llvm-gcc-4.2/gcc/gimplify.c
index 9530b2c..c5747bb 100644
--- a/llvm-gcc-4.2/gcc/gimplify.c
+++ b/llvm-gcc-4.2/gcc/gimplify.c
@@ -3096,6 +3096,7 @@
 		gimple_add_tmp_var (new);
 		TREE_STATIC (new) = 1;
 		TREE_READONLY (new) = 1;
+                /* LLVM LOCAL */
 		DECL_LLVM_PRIVATE (new) = 1;
 		DECL_INITIAL (new) = ctor;
 		if (align > DECL_ALIGN (new))
diff --git a/llvm-gcc-4.2/gcc/ifcvt.c b/llvm-gcc-4.2/gcc/ifcvt.c
index fe921df..13a601f 100644
--- a/llvm-gcc-4.2/gcc/ifcvt.c
+++ b/llvm-gcc-4.2/gcc/ifcvt.c
@@ -1409,7 +1409,8 @@
   /* ??? We could handle this if we knew that a load from A or B could
      not fault.  This is also true if we've already loaded
      from the address along the path from ENTRY.  */
-  else if (may_trap_p (a) || may_trap_p (b))
+  /* APPLE LOCAL 6515001 */
+  else if (may_trap_after_code_motion_p (a) || may_trap_after_code_motion_p (b))
     return FALSE;
 
   /* if (test) x = a + b; else x = c - d;
diff --git a/llvm-gcc-4.2/gcc/testsuite/g++.apple/block-no-trampoline-1.C b/llvm-gcc-4.2/gcc/testsuite/g++.apple/block-no-trampoline-1.C
new file mode 100644
index 0000000..432e5b7
--- /dev/null
+++ b/llvm-gcc-4.2/gcc/testsuite/g++.apple/block-no-trampoline-1.C
@@ -0,0 +1,61 @@
+/* APPLE LOCAL file radar 6545782 */
+/* Test that no trampoline is generated for this test case. */
+/* { dg-do run { target *-*-darwin[1-2][0-9]* } } */
+/* { dg-options "-mmacosx-version-min=10.6" { target *-*-darwin* } } */
+/* { dg-skip-if "" { powerpc*-*-darwin* } { "-m64" } { "" } } */
+
+#include <dispatch/dispatch.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <Block.h>
+
+extern "C" void __enable_execute_stack ()
+{
+        abort();
+}
+
+class A {
+public:
+    void foo();
+};
+
+void A::foo() {}
+
+class B {
+public:
+    void createBlockInMethod(A &a);
+    void callBlockPassedIn(A &a, void(^aBlock)());
+};
+
+void B::createBlockInMethod(A &a) {
+    void (^block) () = ^{ a.foo(); };
+    block();
+}
+
+void B::callBlockPassedIn(A &a, void(^aBlock)()) {
+    aBlock();
+}
+
+
+int main(int argc __attribute__((unused)), char **argv) {
+    __block B b;
+    __block A a;
+    
+    __block int x = 0;
+    
+    uint64_t cyclesPerBlock1 = dispatch_benchmark(1000000, ^{
+        b.createBlockInMethod(a);
+    });
+        
+    uint64_t cyclesPerBlock2 = dispatch_benchmark(1000000, ^{
+        b.callBlockPassedIn(a, ^{ a.foo(); });
+    });
+    
+    fprintf(stdout, "%s: %llu cycles/iter vs. %llu cycles/iter: %5.5f slower\n", argv[0],
+            cyclesPerBlock1, cyclesPerBlock2,
+            ((double)cyclesPerBlock1) / ((double)cyclesPerBlock2));
+    
+    return 0;
+}
+
+
diff --git a/llvm-gcc-4.2/gcc/testsuite/g++.apple/weak-2.C b/llvm-gcc-4.2/gcc/testsuite/g++.apple/weak-2.C
new file mode 100644
index 0000000..4c3ec56
--- /dev/null
+++ b/llvm-gcc-4.2/gcc/testsuite/g++.apple/weak-2.C
@@ -0,0 +1,7 @@
+/* APPLE LOCAL file weak types 6524730 */
+/* { dg-do compile } */
+/* Radar 6524730 */
+
+int * __attribute__((weak)) foo(int * x) {
+  return x;
+}
diff --git a/llvm-gcc-4.2/gcc/testsuite/gcc.apple/6515001.c b/llvm-gcc-4.2/gcc/testsuite/gcc.apple/6515001.c
new file mode 100644
index 0000000..2aca683
--- /dev/null
+++ b/llvm-gcc-4.2/gcc/testsuite/gcc.apple/6515001.c
@@ -0,0 +1,20 @@
+/* APPLE LOCAL file 6515001 */
+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
+/* { scan-assembler-not "cmove" } */
+typedef struct __NSSymbol* NSSymbol;
+
+static struct {
+  unsigned pad[2];
+  unsigned n_value;
+  NSSymbol realSymbol;
+} sLastLookup;
+
+void foo(void *);
+void* NSAddressOfSymbol(NSSymbol symbol)
+{
+  if ( (void*)symbol == (void*)(&sLastLookup) )
+    symbol = sLastLookup.realSymbol;
+
+  foo(symbol);
+  return symbol;
+}
diff --git a/llvm-gcc-4.2/gcc/tree.h b/llvm-gcc-4.2/gcc/tree.h
index 6dc0e67..8070313 100644
--- a/llvm-gcc-4.2/gcc/tree.h
+++ b/llvm-gcc-4.2/gcc/tree.h
@@ -2916,8 +2916,10 @@
   /* Used to indicate that this DECL has weak linkage.  */
 #define DECL_WEAK(NODE) (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.weak_flag)
 
+/* LLVM LOCAL begin */
 #define DECL_LLVM_PRIVATE(NODE) \
   (DECL_WITH_VIS_CHECK (NODE)->decl_with_vis.llvm_private_flag)
+/* LLVM LOCAL end */
 
 /* Internal to the gimplifier.  Indicates that the value is a formal
    temporary controlled by the gimplifier.  */
diff --git a/llvm-gcc-4.2/gcc/version.c b/llvm-gcc-4.2/gcc/version.c
index 1b31c8a..8262fc0 100644
--- a/llvm-gcc-4.2/gcc/version.c
+++ b/llvm-gcc-4.2/gcc/version.c
@@ -11,12 +11,12 @@
 /* APPLE LOCAL begin Apple version */
 #ifdef ENABLE_LLVM
 #ifdef LLVM_VERSION_INFO
-#define VERSUFFIX " (Based on Apple Inc. build 5636) (LLVM build " LLVM_VERSION_INFO ")"
+#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build " LLVM_VERSION_INFO ")"
 #else
-#define VERSUFFIX " (Based on Apple Inc. build 5636) (LLVM build)"
+#define VERSUFFIX " (Based on Apple Inc. build 5641) (LLVM build)"
 #endif
 #else
-#define VERSUFFIX " (Based on Apple Inc. build 5636)"
+#define VERSUFFIX " (Based on Apple Inc. build 5641)"
 #endif
 /* APPLE LOCAL end Apple version */
 
