public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@redhat.com>
To: git-commits@fedoraproject.org
Subject: [rpms/gcc] rhel-f41-base: 4.8.0-0.15
Date: Mon, 29 Jun 2026 12:25:48 GMT	[thread overview]
Message-ID: <178273594854.1.5574604206843707788.rpms-gcc-2bea4b26c1cc@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : 2bea4b26c1cc060c0ab0b5077863f6c97824cd2f
Author : Jakub Jelinek <jakub@redhat.com>
Date   : 2013-03-04T13:47:31+01:00
Stats  : +176/-1095 in 10 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/2bea4b26c1cc060c0ab0b5077863f6c97824cd2f?branch=rhel-f41-base

Log:
4.8.0-0.15

---
diff --git a/.gitignore b/.gitignore
index 7f5d205..590bfe1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -63,3 +63,4 @@
 /gcc-4.8.0-20130213.tar.bz2
 /gcc-4.8.0-20130215.tar.bz2
 /gcc-4.8.0-20130220.tar.bz2
+/gcc-4.8.0-20130304.tar.bz2

diff --git a/gcc.spec b/gcc.spec
index 8861297..2a71597 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -1,9 +1,9 @@
-%global DATE 20130220
-%global SVNREV 196173
+%global DATE 20130304
+%global SVNREV 196430
 %global gcc_version 4.8.0
 # Note, gcc_release must be integer, if you want to add suffixes to
 # %{release}, append them after %{gcc_release} on Release: line.
-%global gcc_release 0.14
+%global gcc_release 0.15
 %global _unpackaged_files_terminate_build 0
 %global multilib_64_archs sparc64 ppc64 s390x x86_64
 %ifarch %{ix86} x86_64 ia64 ppc ppc64 alpha
@@ -194,11 +194,8 @@ Patch10: gcc48-pr38757.patch
 Patch11: gcc48-libstdc++-docs.patch
 Patch12: gcc48-no-add-needed.patch
 Patch13: gcc48-pr55608.patch
-Patch14: gcc48-asan-speedup.patch
-Patch15: gcc48-pr56258.patch
-Patch16: gcc48-pr56405.patch
-Patch17: gcc48-unused-locals.patch
-Patch18: gcc48-pr56265.patch
+Patch14: gcc48-pr56424.patch
+Patch15: gcc48-pr56509.patch
 
 Patch1000: fastjar-0.97-segfault.patch
 Patch1001: fastjar-0.97-len1.patch
@@ -751,11 +748,8 @@ package or when debugging this package.
 %endif
 %patch12 -p0 -b .no-add-needed~
 %patch13 -p0 -b .pr55608~
-%patch14 -p0 -b .asan-speedup~
-%patch15 -p0 -b .pr56258~
-%patch16 -p0 -b .pr56405~
-%patch17 -p0 -b .unused-locals~
-%patch18 -p0 -b .pr56265~
+%patch14 -p0 -b .pr56424~
+%patch15 -p0 -b .pr56509~
 
 %if 0%{?_enable_debug_packages}
 cat > split-debuginfo.sh <<\EOF
@@ -2979,6 +2973,24 @@ fi
 %{_prefix}/libexec/gcc/%{gcc_target_platform}/%{gcc_version}/plugin
 
 %changelog
+* Mon Mar  4 2013 Jakub Jelinek <jakub@redhat.com> 4.8.0-0.15
+- updated from trunk
+  - PRs c++/10291, c++/40405, c++/52688, c++/55632, c++/55813, c++/56243,
+	c++/56358, c++/56359, c++/56377, c++/56395, c++/56403, c++/56419,
+	c++/56438, c++/56481, fortran/54730, fortran/56385, fortran/56416,
+	fortran/56477, fortran/56491, libfortran/30162, libstdc++/56011,
+	libstdc++/56012, middle-end/45472, middle-end/56077,
+	middle-end/56108, middle-end/56420, middle-end/56461,
+	rtl-optimization/50339, rtl-optimization/56466, sanitizer/56393,
+	sanitizer/56454, target/48901, target/52500, target/52501,
+	target/52550, target/54639, target/54640, target/54662, target/56444,
+	target/56445, target/56455, testsuite/52641, tree-optimization/55481,
+	tree-optimization/56175, tree-optimization/56294,
+	tree-optimization/56310, tree-optimization/56415,
+	tree-optimization/56426, tree-optimization/56443,
+	tree-optimization/56448
+- fnsplit fix (PR tree-optimization/56424)
+
 * Wed Feb 20 2013 Jakub Jelinek <jakub@redhat.com> 4.8.0-0.14
 - updated from trunk
   - PRs asan/56330, c++/51242, c++/54276, c++/56373, libquadmath/56379,

diff --git a/gcc48-asan-speedup.patch b/gcc48-asan-speedup.patch
deleted file mode 100644
index b7a33f3..0000000
--- a/gcc48-asan-speedup.patch
+++ /dev/null
@@ -1,535 +0,0 @@
-2013-02-15  Jakub Jelinek  <jakub@redhat.com>
-
-	* config/i386/i386.c: Use 0x7fff8000 as asan_shadow_offset on x86_64
-	linux.
-
-	* All source files: Merge from upstream.
-
---- gcc/config/i386/i386.c.jj	2013-02-13 17:04:34.000000000 +0100
-+++ gcc/config/i386/i386.c	2013-02-15 13:27:47.674832994 +0100
-@@ -5436,7 +5436,8 @@ ix86_legitimate_combined_insn (rtx insn)
- static unsigned HOST_WIDE_INT
- ix86_asan_shadow_offset (void)
- {
--  return TARGET_LP64 ? (HOST_WIDE_INT_1 << 44)
-+  return TARGET_LP64 ? (TARGET_MACHO ? (HOST_WIDE_INT_1 << 44)
-+				     : HOST_WIDE_INT_C (0x7fff8000))
- 		     : (HOST_WIDE_INT_1 << 29);
- }
- \f
---- libsanitizer/sanitizer_common/sanitizer_internal_defs.h.jj	2013-02-13 11:53:43.403336342 +0100
-+++ libsanitizer/sanitizer_common/sanitizer_internal_defs.h	2013-02-15 13:24:17.410033137 +0100
-@@ -29,7 +29,7 @@
- # define SANITIZER_SUPPORTS_WEAK_HOOKS 0
- #endif
- 
--// __has_feature
-+// GCC does not understand __has_feature
- #if !defined(__has_feature)
- # define __has_feature(x) 0
- #endif
---- libsanitizer/sanitizer_common/sanitizer_linux.cc.jj	2013-02-13 11:53:43.402336347 +0100
-+++ libsanitizer/sanitizer_common/sanitizer_linux.cc	2013-02-15 13:24:17.410033137 +0100
-@@ -232,6 +232,21 @@ const char *GetEnv(const char *name) {
-   return 0;  // Not found.
- }
- 
-+#ifdef __GLIBC__
-+
-+extern "C" {
-+  extern void *__libc_stack_end;
-+}
-+
-+static void GetArgsAndEnv(char ***argv, char ***envp) {
-+  uptr *stack_end = (uptr *)__libc_stack_end;
-+  int argc = *stack_end;
-+  *argv = (char**)(stack_end + 1);
-+  *envp = (char**)(stack_end + argc + 2);
-+}
-+
-+#else  // __GLIBC__
-+
- static void ReadNullSepFileToArray(const char *path, char ***arr,
-                                    int arr_size) {
-   char *buff;
-@@ -251,11 +266,17 @@ static void ReadNullSepFileToArray(const
-   (*arr)[count] = 0;
- }
- 
-+static void GetArgsAndEnv(char ***argv, char ***envp) {
-+  static const int kMaxArgv = 2000, kMaxEnvp = 2000;
-+  ReadNullSepFileToArray("/proc/self/cmdline", argv, kMaxArgv);
-+  ReadNullSepFileToArray("/proc/self/environ", envp, kMaxEnvp);
-+}
-+
-+#endif  // __GLIBC__
-+
- void ReExec() {
--  static const int kMaxArgv = 100, kMaxEnvp = 1000;
-   char **argv, **envp;
--  ReadNullSepFileToArray("/proc/self/cmdline", &argv, kMaxArgv);
--  ReadNullSepFileToArray("/proc/self/environ", &envp, kMaxEnvp);
-+  GetArgsAndEnv(&argv, &envp);
-   execve(argv[0], argv, envp);
- }
- 
---- libsanitizer/asan/asan_internal.h.jj	2013-02-13 11:53:44.377330938 +0100
-+++ libsanitizer/asan/asan_internal.h	2013-02-15 13:24:17.412033319 +0100
-@@ -52,7 +52,7 @@
- 
- #define ASAN_POSIX (ASAN_LINUX || ASAN_MAC)
- 
--#if __has_feature(address_sanitizer)
-+#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
- # error "The AddressSanitizer run-time should not be"
-         " instrumented by AddressSanitizer"
- #endif
---- libsanitizer/asan/asan_mac.cc.jj	2013-02-13 11:53:44.397330832 +0100
-+++ libsanitizer/asan/asan_mac.cc	2013-02-15 13:24:17.412033319 +0100
-@@ -104,7 +104,24 @@ void MaybeReexec() {
-     _NSGetExecutablePath(program_name, &buf_size);
-     // Ok to use setenv() since the wrappers don't depend on the value of
-     // asan_inited.
--    setenv(kDyldInsertLibraries, info.dli_fname, /*overwrite*/0);
-+    if (dyld_insert_libraries) {
-+      // Append the runtime dylib name to the existing value of
-+      // DYLD_INSERT_LIBRARIES.
-+      uptr old_env_len = internal_strlen(dyld_insert_libraries);
-+      uptr fname_len = internal_strlen(info.dli_fname);
-+      LowLevelAllocator allocator_for_env;
-+      char *new_env =
-+          (char*)allocator_for_env.Allocate(old_env_len + fname_len + 2);
-+      internal_strncpy(new_env, dyld_insert_libraries, old_env_len);
-+      new_env[old_env_len] = ':';
-+      // Copy fname_len and add a trailing zero.
-+      internal_strncpy(new_env + old_env_len + 1, info.dli_fname,
-+                       fname_len + 1);
-+      setenv(kDyldInsertLibraries, new_env, /*overwrite*/1);
-+    } else {
-+      // Set DYLD_INSERT_LIBRARIES equal to the runtime dylib name.
-+      setenv(kDyldInsertLibraries, info.dli_fname, /*overwrite*/0);
-+    }
-     if (flags()->verbosity >= 1) {
-       Report("exec()-ing the program with\n");
-       Report("%s=%s\n", kDyldInsertLibraries, info.dli_fname);
---- libsanitizer/asan/asan_mapping.h.jj	2013-02-13 17:04:34.680198753 +0100
-+++ libsanitizer/asan/asan_mapping.h	2013-02-15 13:26:25.846301749 +0100
-@@ -1,7 +1,5 @@
- //===-- asan_mapping.h ------------------------------------------*- C++ -*-===//
- //
--//                     The LLVM Compiler Infrastructure
--//
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
-@@ -18,6 +16,37 @@
- 
- // The full explanation of the memory mapping could be found here:
- // http://code.google.com/p/address-sanitizer/wiki/AddressSanitizerAlgorithm
-+//
-+// Typical shadow mapping on Linux/x86_64 with SHADOW_OFFSET == 0x00007fff8000:
-+// || `[0x10007fff8000, 0x7fffffffffff]` || HighMem    ||
-+// || `[0x02008fff7000, 0x10007fff7fff]` || HighShadow ||
-+// || `[0x00008fff7000, 0x02008fff6fff]` || ShadowGap  ||
-+// || `[0x00007fff8000, 0x00008fff6fff]` || LowShadow  ||
-+// || `[0x000000000000, 0x00007fff7fff]` || LowMem     ||
-+//
-+// When SHADOW_OFFSET is zero (-pie):
-+// || `[0x100000000000, 0x7fffffffffff]` || HighMem    ||
-+// || `[0x020000000000, 0x0fffffffffff]` || HighShadow ||
-+// || `[0x000000040000, 0x01ffffffffff]` || ShadowGap  ||
-+//
-+// Special case when something is already mapped between
-+// 0x003000000000 and 0x004000000000 (e.g. when prelink is installed):
-+// || `[0x10007fff8000, 0x7fffffffffff]` || HighMem    ||
-+// || `[0x02008fff7000, 0x10007fff7fff]` || HighShadow ||
-+// || `[0x004000000000, 0x02008fff6fff]` || ShadowGap3 ||
-+// || `[0x003000000000, 0x003fffffffff]` || MidMem     ||
-+// || `[0x00087fff8000, 0x002fffffffff]` || ShadowGap2 ||
-+// || `[0x00067fff8000, 0x00087fff7fff]` || MidShadow  ||
-+// || `[0x00008fff7000, 0x00067fff7fff]` || ShadowGap  ||
-+// || `[0x00007fff8000, 0x00008fff6fff]` || LowShadow  ||
-+// || `[0x000000000000, 0x00007fff7fff]` || LowMem     ||
-+//
-+// Default Linux/i386 mapping:
-+// || `[0x40000000, 0xffffffff]` || HighMem    ||
-+// || `[0x28000000, 0x3fffffff]` || HighShadow ||
-+// || `[0x24000000, 0x27ffffff]` || ShadowGap  ||
-+// || `[0x20000000, 0x23ffffff]` || LowShadow  ||
-+// || `[0x00000000, 0x1fffffff]` || LowMem     ||
- 
- #if ASAN_FLEXIBLE_MAPPING_AND_OFFSET == 1
- extern SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_mapping_scale;
-@@ -36,7 +65,11 @@ extern SANITIZER_INTERFACE_ATTRIBUTE upt
- #   if defined(__powerpc64__)
- #    define SHADOW_OFFSET (1ULL << 41)
- #   else
--#    define SHADOW_OFFSET (1ULL << 44)
-+#    if ASAN_MAC
-+#     define SHADOW_OFFSET (1ULL << 44)
-+#    else
-+#     define SHADOW_OFFSET 0x7fff8000ULL
-+#    endif
- #   endif
- #  endif
- # endif
-@@ -57,49 +90,105 @@ extern SANITIZER_INTERFACE_ATTRIBUTE upt
- #define kHighShadowBeg  MEM_TO_SHADOW(kHighMemBeg)
- #define kHighShadowEnd  MEM_TO_SHADOW(kHighMemEnd)
- 
-+# define kMidShadowBeg MEM_TO_SHADOW(kMidMemBeg)
-+# define kMidShadowEnd MEM_TO_SHADOW(kMidMemEnd)
-+
- // With the zero shadow base we can not actually map pages starting from 0.
- // This constant is somewhat arbitrary.
- #define kZeroBaseShadowStart (1 << 18)
- 
- #define kShadowGapBeg   (kLowShadowEnd ? kLowShadowEnd + 1 \
-                                        : kZeroBaseShadowStart)
--#define kShadowGapEnd   (kHighShadowBeg - 1)
-+#define kShadowGapEnd   ((kMidMemBeg ? kMidShadowBeg : kHighShadowBeg) - 1)
-+
-+#define kShadowGap2Beg (kMidMemBeg ? kMidShadowEnd + 1 : 0)
-+#define kShadowGap2End (kMidMemBeg ? kMidMemBeg - 1 : 0)
-+
-+#define kShadowGap3Beg (kMidMemBeg ? kMidMemEnd + 1 : 0)
-+#define kShadowGap3End (kMidMemBeg ? kHighShadowBeg - 1 : 0)
-+
-+#define DO_ASAN_MAPPING_PROFILE 0  // Set to 1 to profile the functions below.
-+
-+#if DO_ASAN_MAPPING_PROFILE
-+# define PROFILE_ASAN_MAPPING() AsanMappingProfile[__LINE__]++;
-+#else
-+# define PROFILE_ASAN_MAPPING()
-+#endif
-+
-+// If 1, all shadow boundaries are constants.
-+// Don't set to 1 other than for testing.
-+#define ASAN_FIXED_MAPPING 0
- 
- namespace __asan {
- 
-+extern uptr AsanMappingProfile[];
-+
-+#if ASAN_FIXED_MAPPING
-+// Fixed mapping for 64-bit Linux. Mostly used for performance comparison
-+// with non-fixed mapping. As of r175253 (Feb 2013) the performance
-+// difference between fixed and non-fixed mapping is below the noise level.
-+static uptr kHighMemEnd = 0x7fffffffffffULL;
-+static uptr kMidMemBeg =    0x3000000000ULL;
-+static uptr kMidMemEnd =    0x3fffffffffULL;
-+#else
- SANITIZER_INTERFACE_ATTRIBUTE
--extern uptr kHighMemEnd;  // Initialized in __asan_init.
-+extern uptr kHighMemEnd, kMidMemBeg, kMidMemEnd;  // Initialized in __asan_init.
-+#endif
- 
- static inline bool AddrIsInLowMem(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-   return a < kLowMemEnd;
- }
- 
- static inline bool AddrIsInLowShadow(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-   return a >= kLowShadowBeg && a <= kLowShadowEnd;
- }
- 
- static inline bool AddrIsInHighMem(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-   return a >= kHighMemBeg && a <= kHighMemEnd;
- }
- 
-+static inline bool AddrIsInMidMem(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-+  return kMidMemBeg && a >= kMidMemBeg && a <= kMidMemEnd;
-+}
-+
- static inline bool AddrIsInMem(uptr a) {
--  return AddrIsInLowMem(a) || AddrIsInHighMem(a);
-+  PROFILE_ASAN_MAPPING();
-+  return AddrIsInLowMem(a) || AddrIsInMidMem(a) || AddrIsInHighMem(a);
- }
- 
- static inline uptr MemToShadow(uptr p) {
-+  PROFILE_ASAN_MAPPING();
-   CHECK(AddrIsInMem(p));
-   return MEM_TO_SHADOW(p);
- }
- 
- static inline bool AddrIsInHighShadow(uptr a) {
--  return a >= kHighShadowBeg && a <=  kHighMemEnd;
-+  PROFILE_ASAN_MAPPING();
-+  return a >= kHighShadowBeg && a <= kHighMemEnd;
-+}
-+
-+static inline bool AddrIsInMidShadow(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-+  return kMidMemBeg && a >= kMidShadowBeg && a <= kMidMemEnd;
- }
- 
- static inline bool AddrIsInShadow(uptr a) {
--  return AddrIsInLowShadow(a) || AddrIsInHighShadow(a);
-+  PROFILE_ASAN_MAPPING();
-+  return AddrIsInLowShadow(a) || AddrIsInMidShadow(a) || AddrIsInHighShadow(a);
- }
- 
- static inline bool AddrIsInShadowGap(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-+  if (kMidMemBeg) {
-+    if (a <= kShadowGapEnd)
-+      return SHADOW_OFFSET == 0 || a >= kShadowGapBeg;
-+    return (a >= kShadowGap2Beg && a <= kShadowGap2End) ||
-+           (a >= kShadowGap3Beg && a <= kShadowGap3End);
-+  }
-   // In zero-based shadow mode we treat addresses near zero as addresses
-   // in shadow gap as well.
-   if (SHADOW_OFFSET == 0)
-@@ -108,10 +197,12 @@ static inline bool AddrIsInShadowGap(upt
- }
- 
- static inline bool AddrIsAlignedByGranularity(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-   return (a & (SHADOW_GRANULARITY - 1)) == 0;
- }
- 
- static inline bool AddressIsPoisoned(uptr a) {
-+  PROFILE_ASAN_MAPPING();
-   const uptr kAccessSize = 1;
-   u8 *shadow_address = (u8*)MemToShadow(a);
-   s8 shadow_value = *shadow_address;
-@@ -123,6 +214,9 @@ static inline bool AddressIsPoisoned(upt
-   return false;
- }
- 
-+// Must be after all calls to PROFILE_ASAN_MAPPING().
-+static const uptr kAsanMappingProfileSize = __LINE__;
-+
- }  // namespace __asan
- 
- #endif  // ASAN_MAPPING_H
---- libsanitizer/asan/asan_rtl.cc.jj	2013-02-13 17:04:25.688240113 +0100
-+++ libsanitizer/asan/asan_rtl.cc	2013-02-15 13:24:17.411033229 +0100
-@@ -25,6 +25,8 @@
- 
- namespace __asan {
- 
-+uptr AsanMappingProfile[kAsanMappingProfileSize];
-+
- static void AsanDie() {
-   static atomic_uint32_t num_calls;
-   if (atomic_fetch_add(&num_calls, 1, memory_order_relaxed) != 0) {
-@@ -35,8 +37,14 @@ static void AsanDie() {
-     Report("Sleeping for %d second(s)\n", flags()->sleep_before_dying);
-     SleepForSeconds(flags()->sleep_before_dying);
-   }
--  if (flags()->unmap_shadow_on_exit)
--    UnmapOrDie((void*)kLowShadowBeg, kHighShadowEnd - kLowShadowBeg);
-+  if (flags()->unmap_shadow_on_exit) {
-+    if (kMidMemBeg) {
-+      UnmapOrDie((void*)kLowShadowBeg, kMidMemBeg - kLowShadowBeg);
-+      UnmapOrDie((void*)kMidMemEnd, kHighShadowEnd - kMidMemEnd);
-+    } else {
-+      UnmapOrDie((void*)kLowShadowBeg, kHighShadowEnd - kLowShadowBeg);
-+    }
-+  }
-   if (death_callback)
-     death_callback();
-   if (flags()->abort_on_error)
-@@ -161,7 +169,10 @@ void InitializeFlags(Flags *f, const cha
- int asan_inited;
- bool asan_init_is_running;
- void (*death_callback)(void);
--uptr kHighMemEnd;
-+
-+#if !ASAN_FIXED_MAPPING
-+uptr kHighMemEnd, kMidMemBeg, kMidMemEnd;
-+#endif
- 
- // -------------------------- Misc ---------------- {{{1
- void ShowStatsAndAbort() {
-@@ -259,9 +270,15 @@ static NOINLINE void force_interface_sym
- static void asan_atexit() {
-   Printf("AddressSanitizer exit stats:\n");
-   __asan_print_accumulated_stats();
-+  // Print AsanMappingProfile.
-+  for (uptr i = 0; i < kAsanMappingProfileSize; i++) {
-+    if (AsanMappingProfile[i] == 0) continue;
-+    Printf("asan_mapping.h:%zd -- %zd\n", i, AsanMappingProfile[i]);
-+  }
- }
- 
- static void InitializeHighMemEnd() {
-+#if !ASAN_FIXED_MAPPING
- #if SANITIZER_WORDSIZE == 64
- # if defined(__powerpc64__)
-   // FIXME:
-@@ -277,6 +294,58 @@ static void InitializeHighMemEnd() {
- #else  // SANITIZER_WORDSIZE == 32
-   kHighMemEnd = (1ULL << 32) - 1;  // 0xffffffff;
- #endif  // SANITIZER_WORDSIZE
-+#endif  // !ASAN_FIXED_MAPPING
-+}
-+
-+static void ProtectGap(uptr a, uptr size) {
-+  CHECK_EQ(a, (uptr)Mprotect(a, size));
-+}
-+
-+static void PrintAddressSpaceLayout() {
-+  Printf("|| `[%p, %p]` || HighMem    ||\n",
-+         (void*)kHighMemBeg, (void*)kHighMemEnd);
-+  Printf("|| `[%p, %p]` || HighShadow ||\n",
-+         (void*)kHighShadowBeg, (void*)kHighShadowEnd);
-+  if (kMidMemBeg) {
-+    Printf("|| `[%p, %p]` || ShadowGap3 ||\n",
-+           (void*)kShadowGap3Beg, (void*)kShadowGap3End);
-+    Printf("|| `[%p, %p]` || MidMem     ||\n",
-+           (void*)kMidMemBeg, (void*)kMidMemEnd);
-+    Printf("|| `[%p, %p]` || ShadowGap2 ||\n",
-+           (void*)kShadowGap2Beg, (void*)kShadowGap2End);
-+    Printf("|| `[%p, %p]` || MidShadow  ||\n",
-+           (void*)kMidShadowBeg, (void*)kMidShadowEnd);
-+  }
-+  Printf("|| `[%p, %p]` || ShadowGap  ||\n",
-+         (void*)kShadowGapBeg, (void*)kShadowGapEnd);
-+  if (kLowShadowBeg) {
-+    Printf("|| `[%p, %p]` || LowShadow  ||\n",
-+           (void*)kLowShadowBeg, (void*)kLowShadowEnd);
-+    Printf("|| `[%p, %p]` || LowMem     ||\n",
-+           (void*)kLowMemBeg, (void*)kLowMemEnd);
-+  }
-+  Printf("MemToShadow(shadow): %p %p %p %p",
-+         (void*)MEM_TO_SHADOW(kLowShadowBeg),
-+         (void*)MEM_TO_SHADOW(kLowShadowEnd),
-+         (void*)MEM_TO_SHADOW(kHighShadowBeg),
-+         (void*)MEM_TO_SHADOW(kHighShadowEnd));
-+  if (kMidMemBeg) {
-+    Printf(" %p %p",
-+           (void*)MEM_TO_SHADOW(kMidShadowBeg),
-+           (void*)MEM_TO_SHADOW(kMidShadowEnd));
-+  }
-+  Printf("\n");
-+  Printf("red_zone=%zu\n", (uptr)flags()->redzone);
-+  Printf("malloc_context_size=%zu\n", (uptr)flags()->malloc_context_size);
-+
-+  Printf("SHADOW_SCALE: %zx\n", (uptr)SHADOW_SCALE);
-+  Printf("SHADOW_GRANULARITY: %zx\n", (uptr)SHADOW_GRANULARITY);
-+  Printf("SHADOW_OFFSET: %zx\n", (uptr)SHADOW_OFFSET);
-+  CHECK(SHADOW_SCALE >= 3 && SHADOW_SCALE <= 7);
-+  if (kMidMemBeg)
-+    CHECK(kMidShadowBeg > kLowShadowEnd &&
-+          kMidMemBeg > kMidShadowEnd &&
-+          kHighShadowBeg > kMidMemEnd);
- }
- 
- }  // namespace __asan
-@@ -352,49 +421,48 @@ void __asan_init() {
-   ReplaceSystemMalloc();
-   ReplaceOperatorsNewAndDelete();
- 
--  if (flags()->verbosity) {
--    Printf("|| `[%p, %p]` || HighMem    ||\n",
--           (void*)kHighMemBeg, (void*)kHighMemEnd);
--    Printf("|| `[%p, %p]` || HighShadow ||\n",
--           (void*)kHighShadowBeg, (void*)kHighShadowEnd);
--    Printf("|| `[%p, %p]` || ShadowGap  ||\n",
--           (void*)kShadowGapBeg, (void*)kShadowGapEnd);
--    Printf("|| `[%p, %p]` || LowShadow  ||\n",
--           (void*)kLowShadowBeg, (void*)kLowShadowEnd);
--    Printf("|| `[%p, %p]` || LowMem     ||\n",
--           (void*)kLowMemBeg, (void*)kLowMemEnd);
--    Printf("MemToShadow(shadow): %p %p %p %p\n",
--           (void*)MEM_TO_SHADOW(kLowShadowBeg),
--           (void*)MEM_TO_SHADOW(kLowShadowEnd),
--           (void*)MEM_TO_SHADOW(kHighShadowBeg),
--           (void*)MEM_TO_SHADOW(kHighShadowEnd));
--    Printf("red_zone=%zu\n", (uptr)flags()->redzone);
--    Printf("malloc_context_size=%zu\n", (uptr)flags()->malloc_context_size);
--
--    Printf("SHADOW_SCALE: %zx\n", (uptr)SHADOW_SCALE);
--    Printf("SHADOW_GRANULARITY: %zx\n", (uptr)SHADOW_GRANULARITY);
--    Printf("SHADOW_OFFSET: %zx\n", (uptr)SHADOW_OFFSET);
--    CHECK(SHADOW_SCALE >= 3 && SHADOW_SCALE <= 7);
-+  uptr shadow_start = kLowShadowBeg;
-+  if (kLowShadowBeg) shadow_start -= GetMmapGranularity();
-+  uptr shadow_end = kHighShadowEnd;
-+  bool full_shadow_is_available =
-+      MemoryRangeIsAvailable(shadow_start, shadow_end);
-+
-+#if ASAN_LINUX && defined(__x86_64__) && !ASAN_FIXED_MAPPING
-+  if (!full_shadow_is_available) {
-+    kMidMemBeg = kLowMemEnd < 0x3000000000ULL ? 0x3000000000ULL : 0;
-+    kMidMemEnd = kLowMemEnd < 0x3000000000ULL ? 0x3fffffffffULL : 0;
-   }
-+#endif
-+
-+  if (flags()->verbosity)
-+    PrintAddressSpaceLayout();
- 
-   if (flags()->disable_core) {
-     DisableCoreDumper();
-   }
- 
--  uptr shadow_start = kLowShadowBeg;
--  if (kLowShadowBeg > 0) shadow_start -= GetMmapGranularity();
--  uptr shadow_end = kHighShadowEnd;
--  if (MemoryRangeIsAvailable(shadow_start, shadow_end)) {
--    if (kLowShadowBeg != kLowShadowEnd) {
--      // mmap the low shadow plus at least one page.
--      ReserveShadowMemoryRange(kLowShadowBeg - GetMmapGranularity(),
--                               kLowShadowEnd);
--    }
-+  if (full_shadow_is_available) {
-+    // mmap the low shadow plus at least one page at the left.
-+    if (kLowShadowBeg)
-+      ReserveShadowMemoryRange(shadow_start, kLowShadowEnd);
-+    // mmap the high shadow.
-+    ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);
-+    // protect the gap.
-+    ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
-+  } else if (kMidMemBeg &&
-+      MemoryRangeIsAvailable(shadow_start, kMidMemBeg - 1) &&
-+      MemoryRangeIsAvailable(kMidMemEnd + 1, shadow_end)) {
-+    CHECK(kLowShadowBeg != kLowShadowEnd);
-+    // mmap the low shadow plus at least one page at the left.
-+    ReserveShadowMemoryRange(shadow_start, kLowShadowEnd);
-+    // mmap the mid shadow.
-+    ReserveShadowMemoryRange(kMidShadowBeg, kMidShadowEnd);
-     // mmap the high shadow.
-     ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);
--    // protect the gap
--    void *prot = Mprotect(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
--    CHECK(prot == (void*)kShadowGapBeg);
-+    // protect the gaps.
-+    ProtectGap(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
-+    ProtectGap(kShadowGap2Beg, kShadowGap2End - kShadowGap2Beg + 1);
-+    ProtectGap(kShadowGap3Beg, kShadowGap3End - kShadowGap3Beg + 1);
-   } else {
-     Report("Shadow memory range interleaves with an existing memory mapping. "
-            "ASan cannot proceed correctly. ABORTING.\n");
---- libsanitizer/include/sanitizer/common_interface_defs.h.jj	2013-02-13 11:53:44.531330044 +0100
-+++ libsanitizer/include/sanitizer/common_interface_defs.h	2013-02-15 13:24:17.403032450 +0100
-@@ -14,6 +14,11 @@
- #include <stddef.h>
- #include <stdint.h>
- 
-+// GCC does not understand __has_feature.
-+#if !defined(__has_feature)
-+# define __has_feature(x) 0
-+#endif
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
---- libsanitizer/include/sanitizer/asan_interface.h.jj	2013-02-13 11:53:44.531330044 +0100
-+++ libsanitizer/include/sanitizer/asan_interface.h	2013-02-15 13:24:17.403032450 +0100
-@@ -35,8 +35,8 @@ extern "C" {
-   // (un)poison memory in the same memory region simultaneously.
-   void __asan_unpoison_memory_region(void const volatile *addr, size_t size);
- 
--  // User code should use macro instead of functions.
--#if __has_feature(address_sanitizer)
-+// User code should use macros instead of functions.
-+#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
- #define ASAN_POISON_MEMORY_REGION(addr, size) \
-   __asan_poison_memory_region((addr), (size))
- #define ASAN_UNPOISON_MEMORY_REGION(addr, size) \

diff --git a/gcc48-pr56258.patch b/gcc48-pr56258.patch
deleted file mode 100644
index 25b0ca0..0000000
--- a/gcc48-pr56258.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-2013-02-20  Jakub Jelinek  <jakub@redhat.com>
-
-	PR bootstrap/56258
-	* doc/invoke.texi (-fdump-rtl-pro_and_epilogue): Use @item
-	instead of @itemx.
-
-	* gnat-style.texi (@title): Remove @hfill.
-	* projects.texi: Avoid line wrapping inside of @pxref or
-	@xref.
-
-	* doc/cp-tools.texinfo (Virtual Machine Options): Use just
-	one @gccoptlist instead of 3 separate ones.
-
---- gcc/doc/invoke.texi.jj	2013-01-31 22:57:22.000000000 +0100
-+++ gcc/doc/invoke.texi	2013-02-20 13:06:47.516405739 +0100
-@@ -5612,7 +5612,7 @@ Dump after the peephole pass.
- @opindex fdump-rtl-postreload
- Dump after post-reload optimizations.
- 
--@itemx -fdump-rtl-pro_and_epilogue
-+@item -fdump-rtl-pro_and_epilogue
- @opindex fdump-rtl-pro_and_epilogue
- Dump after generating the function prologues and epilogues.
- 
---- gcc/ada/gnat-style.texi.jj	2012-08-10 12:57:33.000000000 +0200
-+++ gcc/ada/gnat-style.texi	2013-02-20 13:06:03.042667300 +0100
-@@ -42,7 +42,7 @@ Texts.  A copy of the license is include
- @titlepage
- @titlefont{GNAT Coding Style:}
- @sp 1
--@title @hfill A Guide for GNAT Developers
-+@title A Guide for GNAT Developers
- @subtitle GNAT, The GNU Ada Compiler
- @versionsubtitle
- @author Ada Core Technologies, Inc.
---- gcc/ada/projects.texi.jj	2013-01-04 11:16:24.000000000 +0100
-+++ gcc/ada/projects.texi	2013-02-20 17:48:41.582645159 +0100
-@@ -48,8 +48,7 @@ project files allow you to specify:
- @item Source file naming conventions; you can specify these either globally or for
-   individual compilation units (@pxref{Naming Schemes}).
- @item Change any of the above settings depending on external values, thus enabling
--  the reuse of the projects in various @b{scenarios} (@pxref{Scenarios
--  in Projects}).
-+  the reuse of the projects in various @b{scenarios} (@pxref{Scenarios in Projects}).
- @item Automatically build libraries as part of the build process
-   (@pxref{Library Projects}).
- 
-@@ -360,8 +359,8 @@ locating the specified source files in t
- 
- @item For various reasons, it is sometimes useful to have a project with no
-   sources (most of the time because the attributes defined in the project
--  file will be reused in other projects, as explained in @pxref{Organizing
--  Projects into Subsystems}. To do this, the attribute
-+  file will be reused in other projects, as explained in
-+  @pxref{Organizing Projects into Subsystems}. To do this, the attribute
-   @emph{Source_Files} is set to the empty list, i.e. @code{()}. Alternatively,
-   @emph{Source_Dirs} can be set to the empty list, with the same
-   result.
-@@ -388,8 +387,9 @@ locating the specified source files in t
-   This can be done thanks to the attribute @b{Excluded_Source_Files}
-   (or its synonym @b{Locally_Removed_Files}).
-   Its value is the list of file names that should not be taken into account.
--  This attribute is often used when extending a project, @xref{Project
--  Extension}. A similar attribute @b{Excluded_Source_List_File} plays the same
-+  This attribute is often used when extending a project,
-+  @xref{Project Extension}. A similar attribute
-+  @b{Excluded_Source_List_File} plays the same
-   role but takes the name of file containing file names similarly to
-   @code{Source_List_File}.
- 
---- libjava/classpath/doc/cp-tools.texinfo.jj	2012-12-20 11:38:51.000000000 +0100
-+++ libjava/classpath/doc/cp-tools.texinfo	2013-02-20 19:10:42.573925165 +0100
-@@ -2025,7 +2025,7 @@ Doclet, grouped by type.  Explanations a
- 
- @item Virtual Machine Options
- @xref{Virtual Machine Options,,Options Controlling Gjdoc Behavior}.
--@gccoptlist{-classpath}  @gccoptlist{-bootclasspath}  @gccoptlist{-J}@var{vmopt}
-+@gccoptlist{-classpath  -bootclasspath  -J @var{vmopt}}
- 
- @end table
- 

diff --git a/gcc48-pr56265.patch b/gcc48-pr56265.patch
deleted file mode 100644
index d651da6..0000000
--- a/gcc48-pr56265.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-2013-02-20  Jan Hubicka  <jh@suse.cz>
-
-	PR tree-optimization/56265
-	* ipa-prop.c (ipa_make_edge_direct_to_target): Fixup callgraph when target is
-	referenced for firs ttime.
-
-	* testsuite/g++.dg/ipa/devirt-11.C: New testcase.
-
---- gcc/ipa-prop.c	(revision 196176)
-+++ gcc/ipa-prop.c	(revision 196177)
-@@ -2100,10 +2100,65 @@ ipa_make_edge_direct_to_target (struct c
-   if (TREE_CODE (target) == ADDR_EXPR)
-     target = TREE_OPERAND (target, 0);
-   if (TREE_CODE (target) != FUNCTION_DECL)
--    return NULL;
-+    {
-+      target = canonicalize_constructor_val (target, NULL);
-+      if (!target || TREE_CODE (target) != FUNCTION_DECL)
-+	{
-+	  if (dump_file)
-+	    fprintf (dump_file, "ipa-prop: Discovered direct call to non-function"
-+				" in (%s/%i).\n",
-+		     cgraph_node_name (ie->caller), ie->caller->uid);
-+	  return NULL;
-+	}
-+    }
-   callee = cgraph_get_node (target);
--  if (!callee)
--    return NULL;
-+
-+  /* Because may-edges are not explicitely represented and vtable may be external,
-+     we may create the first reference to the object in the unit.  */
-+  if (!callee || callee->global.inlined_to)
-+    {
-+      struct cgraph_node *first_clone = callee;
-+
-+      /* We are better to ensure we can refer to it.
-+	 In the case of static functions we are out of luck, since we already	
-+	 removed its body.  In the case of public functions we may or may
-+	 not introduce the reference.  */
-+      if (!canonicalize_constructor_val (target, NULL)
-+	  || !TREE_PUBLIC (target))
-+	{
-+	  if (dump_file)
-+	    fprintf (dump_file, "ipa-prop: Discovered call to a known target "
-+		     "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n",
-+		     xstrdup (cgraph_node_name (ie->caller)), ie->caller->uid,
-+		     xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
-+	  return NULL;
-+	}
-+
-+      /* Create symbol table node.  Even if inline clone exists, we can not take
-+	 it as a target of non-inlined call.  */
-+      callee = cgraph_create_node (target);
-+
-+      /* OK, we previously inlined the function, then removed the offline copy and
-+	 now we want it back for external call.  This can happen when devirtualizing
-+	 while inlining function called once that happens after extern inlined and
-+	 virtuals are already removed.  In this case introduce the external node
-+	 and make it available for call.  */
-+      if (first_clone)
-+	{
-+	  first_clone->clone_of = callee;
-+	  callee->clones = first_clone;
-+	  symtab_prevail_in_asm_name_hash ((symtab_node)callee);
-+	  symtab_insert_node_to_hashtable ((symtab_node)callee);
-+	  if (dump_file)
-+	    fprintf (dump_file, "ipa-prop: Introduced new external node "
-+		     "(%s/%i) and turned into root of the clone tree.\n",
-+		     xstrdup (cgraph_node_name (callee)), callee->uid);
-+	}
-+      else if (dump_file)
-+	fprintf (dump_file, "ipa-prop: Introduced new external node "
-+		 "(%s/%i).\n",
-+		 xstrdup (cgraph_node_name (callee)), callee->uid);
-+    }
-   ipa_check_create_node_params ();
- 
-   /* We can not make edges to inline clones.  It is bug that someone removed
---- gcc/testsuite/g++.dg/ipa/devirt-11.C	(revision 0)
-+++ gcc/testsuite/g++.dg/ipa/devirt-11.C	(revision 196177)
-@@ -0,0 +1,50 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fdump-ipa-inline" } */
-+int baz ();
-+struct A
-+{
-+  virtual int fn2 () = 0;
-+  virtual int *fn3 ();
-+  double *fn4 ();
-+  int fn5 (int);
-+  template <class T>
-+  void fn1 (A &, T) { fn3 (); fn4 (); fn2 (); }
-+};
-+struct B : A
-+{
-+  int fn2 () { return 6; }
-+  void fn3 (int, double);
-+  B (bool = true);
-+  B (int, int);
-+};
-+template <typename T>
-+void
-+foo (B &x, A &y, A &z)
-+{
-+  y.fn2 ();
-+  z.fn2 ();
-+  int i = baz ();
-+  int j = (y.fn3 ())[i];
-+  x.fn3 (j, (y.fn4 ())[i] + (z.fn4 ())[z.fn5 (j)]);
-+}
-+inline B
-+operator+ (A &y, A &z)
-+{
-+  B x;
-+  foo<int> (x, y, z);
-+  return x;
-+}
-+void
-+bar ()
-+{
-+  B a, b, c (4, 0), d;
-+  a.fn1 (b, .6);
-+  baz ();
-+  c + d;
-+}
-+/* While inlining function called once we should devirtualize a new call to fn2
-+   and two to fn3. While doing so the new symbol for fn2 needs to be
-+   introduced.  */
-+/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline"  } } */
-+/* { dg-final { scan-ipa-dump-times "and turned into root of the clone tree" 1 "inline"  } } */
-+/* { dg-final { cleanup-ipa-dump "inline" } } */

diff --git a/gcc48-pr56405.patch b/gcc48-pr56405.patch
deleted file mode 100644
index d1cddb1..0000000
--- a/gcc48-pr56405.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-2013-02-20  Jakub Jelinek  <jakub@redhat.com>
-
-	PR inline-asm/56405
-	* expr.c (expand_expr_real_1) <case TARGET_MEM_REF, MEM_REF>: Don't
-	use movmisalign or extract_bit_field for EXPAND_MEMORY modifier.
-
-	* gcc.c-torture/compile/pr56405.c: New test.
-
---- gcc/expr.c.jj	2013-01-18 18:09:40.000000000 +0100
-+++ gcc/expr.c	2013-02-20 10:29:34.513143634 +0100
-@@ -9551,6 +9551,7 @@ expand_expr_real_1 (tree exp, rtx target
- 	set_mem_addr_space (temp, as);
- 	align = get_object_alignment (exp);
- 	if (modifier != EXPAND_WRITE
-+	    && modifier != EXPAND_MEMORY
- 	    && mode != BLKmode
- 	    && align < GET_MODE_ALIGNMENT (mode)
- 	    /* If the target does not have special handling for unaligned
-@@ -9639,6 +9640,7 @@ expand_expr_real_1 (tree exp, rtx target
- 	if (TREE_THIS_VOLATILE (exp))
- 	  MEM_VOLATILE_P (temp) = 1;
- 	if (modifier != EXPAND_WRITE
-+	    && modifier != EXPAND_MEMORY
- 	    && mode != BLKmode
- 	    && align < GET_MODE_ALIGNMENT (mode))
- 	  {
---- gcc/testsuite/gcc.c-torture/compile/pr56405.c.jj	2013-02-20 10:32:17.807250979 +0100
-+++ gcc/testsuite/gcc.c-torture/compile/pr56405.c	2013-02-20 10:32:46.963090873 +0100
-@@ -0,0 +1,7 @@
-+/* PR inline-asm/56405 */
-+
-+void
-+foo (void)
-+{
-+  asm volatile ("" : "+m" (*(volatile unsigned short *) 0x1001UL));
-+}

diff --git a/gcc48-pr56424.patch b/gcc48-pr56424.patch
new file mode 100644
index 0000000..4d4aff5
--- /dev/null
+++ b/gcc48-pr56424.patch
@@ -0,0 +1,57 @@
+2013-03-04  Eric Botcazou  <ebotcazou@adacore.com>
+
+	PR tree-optimization/56424
+	* ipa-split.c (split_function): Do not set the RSO flag if result is
+	not by reference and its type is not a register type.
+
+	* gcc.dg/pr56424.c: New test.
+
+--- gcc/ipa-split.c	(revision 196253)
++++ gcc/ipa-split.c	(working copy)
+@@ -1309,7 +1309,9 @@ split_function (struct split_point *spli
+      so return slot optimization is always possible.  Moreover this is
+      required to make DECL_BY_REFERENCE work.  */
+   if (aggregate_value_p (DECL_RESULT (current_function_decl),
+-			 TREE_TYPE (current_function_decl)))
++			 TREE_TYPE (current_function_decl))
++      && (!is_gimple_reg_type (TREE_TYPE (DECL_RESULT (current_function_decl)))
++	  || DECL_BY_REFERENCE (DECL_RESULT (current_function_decl))))
+     gimple_call_set_return_slot_opt (call, true);
+ 
+   /* Update return value.  This is bit tricky.  When we do not return,
+--- gcc/testsuite/gcc.dg/pr56424.c	2013-02-13 21:50:57.150673158 +0100
++++ gcc/testsuite/gcc.dg/pr56424.c	2013-03-04 12:59:24.133888683 +0100
+@@ -0,0 +1,33 @@
++/* PR tree-optimization/56424 */
++
++/* { dg-do compile } */
++/* { dg-options "-O2 -fexceptions -fnon-call-exceptions" } */
++
++extern long double cosl (long double);
++extern long double sinl (long double);
++extern long double reml (long double, long double);
++
++long double my_cos (long double arg)
++{
++  return cosl (arg);
++}
++
++long double my_sin (long double arg)
++{
++  if (__builtin_fabs (arg) < 1.0)
++    return arg;
++
++  return sinl (arg);
++}
++
++long double my_cot (long double arg, long double cycle)
++{
++  long double t = reml (arg, cycle);
++  return my_cos (t) / my_sin (t);
++}
++
++long double my_tan (long double arg, long double cycle)
++{
++  long double t = reml (arg, cycle);
++  return my_sin (t) / my_cos (t);
++}

diff --git a/gcc48-pr56509.patch b/gcc48-pr56509.patch
new file mode 100644
index 0000000..7cf6839
--- /dev/null
+++ b/gcc48-pr56509.patch
@@ -0,0 +1,92 @@
+2013-03-04  Jakub Jelinek  <jakub@redhat.com>
+
+	PR bootstrap/56509
+	* opts.c (opts_obstack, opts_concat): Moved to...
+	* opts-common.c (opts_obstack, opts_concat): ... here.
+
+--- gcc/opts-common.c.jj	2013-02-27 08:27:26.000000000 +0100
++++ gcc/opts-common.c	2013-03-04 10:02:58.016096542 +0100
+@@ -692,6 +692,40 @@ decode_cmdline_option (const char **argv
+   return result;
+ }
+ 
++/* Obstack for option strings.  */
++
++struct obstack opts_obstack;
++
++/* Like libiberty concat, but allocate using opts_obstack.  */
++
++char *
++opts_concat (const char *first, ...)
++{
++  char *newstr, *end;
++  size_t length = 0;
++  const char *arg;
++  va_list ap;
++
++  /* First compute the size of the result and get sufficient memory.  */
++  va_start (ap, first);
++  for (arg = first; arg; arg = va_arg (ap, const char *))
++    length += strlen (arg);
++  newstr = XOBNEWVEC (&opts_obstack, char, length + 1);
++  va_end (ap);
++
++  /* Now copy the individual pieces to the result string. */
++  va_start (ap, first);
++  for (arg = first, end = newstr; arg; arg = va_arg (ap, const char *))
++    {
++      length = strlen (arg);
++      memcpy (end, arg, length);
++      end += length;
++    }
++  *end = '\0';
++  va_end (ap);
++  return newstr;
++}
++
+ /* Decode command-line options (ARGC and ARGV being the arguments of
+    main) into an array, setting *DECODED_OPTIONS to a pointer to that
+    array and *DECODED_OPTIONS_COUNT to the number of entries in the
+--- gcc/opts.c.jj	2013-02-27 08:27:26.000000000 +0100
++++ gcc/opts.c	2013-03-04 10:02:16.401346992 +0100
+@@ -268,40 +268,6 @@ add_comma_separated_to_vector (void **pv
+   *pvec = v;
+ }
+ 
+-/* Like libiberty concat, but allocate using opts_obstack.  */
+-
+-char *
+-opts_concat (const char *first, ...)
+-{
+-  char *newstr, *end;
+-  size_t length = 0;
+-  const char *arg;
+-  va_list ap;
+-
+-  /* First compute the size of the result and get sufficient memory.  */
+-  va_start (ap, first);
+-  for (arg = first; arg; arg = va_arg (ap, const char *))
+-    length += strlen (arg);
+-  newstr = XOBNEWVEC (&opts_obstack, char, length + 1);
+-  va_end (ap);
+-
+-  /* Now copy the individual pieces to the result string. */
+-  va_start (ap, first);
+-  for (arg = first, end = newstr; arg; arg = va_arg (ap, const char *))
+-    {
+-      length = strlen (arg);
+-      memcpy (end, arg, length);
+-      end += length;
+-    }
+-  *end = '\0';
+-  va_end (ap);
+-  return newstr;
+-}
+-
+-/* Obstack for option strings.  */
+-
+-struct obstack opts_obstack;
+-
+ /* Initialize OPTS and OPTS_SET before using them in parsing options.  */
+ 
+ void

diff --git a/gcc48-unused-locals.patch b/gcc48-unused-locals.patch
deleted file mode 100644
index dff16de..0000000
--- a/gcc48-unused-locals.patch
+++ /dev/null
@@ -1,297 +0,0 @@
-2013-02-20  Richard Biener  <rguenther@suse.de>
-
-	* tree-call-cdce.c (tree_call_cdce): Do not remove unused locals.
-	* tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Likewise.
-	* tree-ssa-dce.c (perform_tree_ssa_dce): Likewise.
-	* tree-ssa-copyrename.c (copy_rename_partition_coalesce): Do
-	not return anything.
-	(rename_ssa_copies): Do not remove unused locals.
-	* tree-ssa-ccp.c (do_ssa_ccp): Likewise.
-	* tree-ssanames.c (pass_release_ssa_names): Remove unused
-	locals first.
-	* passes.c (execute_function_todo): Do not schedule unused locals
-	removal if cleanup_tree_cfg did something.
-	* tree-ssa-live.c (remove_unused_locals): Dump statistics
-	about the number of removed locals.
-
-	* gcc.dg/tree-ssa/forwprop-8.c: Adjust.
-
---- gcc/tree-ssa-copyrename.c	(revision 196173)
-+++ gcc/tree-ssa-copyrename.c	(revision 196174)
-@@ -113,7 +113,7 @@ static struct
- /* Coalesce the partitions in MAP representing VAR1 and VAR2 if it is valid.
-    Choose a representative for the partition, and send debug info to DEBUG.  */
- 
--static bool
-+static void
- copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
- {
-   int p1, p2, p3;
-@@ -146,7 +146,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
- 	fprintf (debug, " : Already coalesced.\n");
--      return false;
-+      return;
-     }
- 
-   rep1 = partition_to_var (map, p1);
-@@ -154,7 +154,7 @@ copy_rename_partition_coalesce (var_map
-   root1 = SSA_NAME_VAR (rep1);
-   root2 = SSA_NAME_VAR (rep2);
-   if (!root1 && !root2)
--    return false;
-+    return;
- 
-   /* Don't coalesce if one of the variables occurs in an abnormal PHI.  */
-   abnorm = (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (rep1)
-@@ -163,7 +163,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
- 	fprintf (debug, " : Abnormal PHI barrier.  No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   /* Partitions already have the same root, simply merge them.  */
-@@ -172,7 +172,7 @@ copy_rename_partition_coalesce (var_map
-       p1 = partition_union (map->var_partition, p1, p2);
-       if (debug)
- 	fprintf (debug, " : Same root, coalesced --> P%d.\n", p1);
--      return false;
-+      return;
-     }
- 
-   /* Never attempt to coalesce 2 different parameters.  */
-@@ -181,7 +181,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
-         fprintf (debug, " : 2 different PARM_DECLS. No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   if ((root1 && TREE_CODE (root1) == RESULT_DECL)
-@@ -189,7 +189,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
-         fprintf (debug, " : One root a RESULT_DECL. No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   ign1 = !root1 || (TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1));
-@@ -206,7 +206,7 @@ copy_rename_partition_coalesce (var_map
- 	{
- 	  if (debug)
- 	    fprintf (debug, " : 2 different USER vars. No coalesce.\n");
--	  return false;
-+	  return;
- 	}
-       else
- 	ign2 = true;
-@@ -220,7 +220,7 @@ copy_rename_partition_coalesce (var_map
- 	{
- 	  if (debug)
- 	    fprintf (debug, " : 2 default defs. No coalesce.\n");
--	  return false;
-+	  return;
- 	}
-       else
-         {
-@@ -240,7 +240,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
- 	fprintf (debug, " : Choosen variable has no root.  No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   /* Don't coalesce if the new chosen root variable would be read-only.
-@@ -253,7 +253,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
- 	fprintf (debug, " : Readonly variable.  No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   /* Don't coalesce if the two variables aren't type compatible .  */
-@@ -266,7 +266,7 @@ copy_rename_partition_coalesce (var_map
-     {
-       if (debug)
- 	fprintf (debug, " : Incompatible types.  No coalesce.\n");
--      return false;
-+      return;
-     }
- 
-   /* Merge the two partitions.  */
-@@ -288,7 +288,6 @@ copy_rename_partition_coalesce (var_map
- 			  TDF_SLIM);
-       fprintf (debug, "\n");
-     }
--  return true;
- }
- 
- 
-@@ -308,7 +307,6 @@ rename_ssa_copies (void)
-   gimple stmt, phi;
-   unsigned x;
-   FILE *debug;
--  bool updated = false;
- 
-   memset (&stats, 0, sizeof (stats));
- 
-@@ -330,7 +328,7 @@ rename_ssa_copies (void)
- 	      tree lhs = gimple_assign_lhs (stmt);
- 	      tree rhs = gimple_assign_rhs1 (stmt);
- 
--	      updated |= copy_rename_partition_coalesce (map, lhs, rhs, debug);
-+	      copy_rename_partition_coalesce (map, lhs, rhs, debug);
- 	    }
- 	}
-     }
-@@ -358,8 +356,8 @@ rename_ssa_copies (void)
- 	      {
- 		tree arg = PHI_ARG_DEF (phi, i);
- 		if (TREE_CODE (arg) == SSA_NAME)
--		  updated |= copy_rename_partition_coalesce (map, res, arg,
--							     debug);
-+		  copy_rename_partition_coalesce (map, res, arg,
-+						  debug);
- 	      }
- 	  /* Else if all arguments are in the same partition try to merge
- 	     it with the result.  */
-@@ -390,9 +388,9 @@ rename_ssa_copies (void)
- 		    }
- 		}
- 	      if (all_p_same == 1)
--		updated |= copy_rename_partition_coalesce (map, res,
--							   PHI_ARG_DEF (phi, 0),
--							   debug);
-+		copy_rename_partition_coalesce (map, res,
-+						PHI_ARG_DEF (phi, 0),
-+						debug);
- 	    }
-         }
-     }
-@@ -426,7 +424,7 @@ rename_ssa_copies (void)
-   statistics_counter_event (cfun, "copies coalesced",
- 			    stats.coalesced);
-   delete_var_map (map);
--  return updated ? TODO_remove_unused_locals : 0;
-+  return 0;
- }
- 
- /* Return true if copy rename is to be performed.  */
---- gcc/tree-ssa-ccp.c	(revision 196173)
-+++ gcc/tree-ssa-ccp.c	(revision 196174)
-@@ -2108,7 +2108,7 @@ do_ssa_ccp (void)
-   ccp_initialize ();
-   ssa_propagate (ccp_visit_stmt, ccp_visit_phi_node);
-   if (ccp_finalize ())
--    todo = (TODO_cleanup_cfg | TODO_update_ssa | TODO_remove_unused_locals);
-+    todo = (TODO_cleanup_cfg | TODO_update_ssa);
-   free_dominance_info (CDI_DOMINATORS);
-   return todo;
- }
---- gcc/tree-call-cdce.c	(revision 196173)
-+++ gcc/tree-call-cdce.c	(revision 196174)
-@@ -898,11 +898,10 @@ tree_call_cdce (void)
-       /* As we introduced new control-flow we need to insert PHI-nodes
-          for the call-clobbers of the remaining call.  */
-       mark_virtual_operands_for_renaming (cfun);
--      return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect
--              | TODO_remove_unused_locals);
-+      return TODO_update_ssa;
-     }
--  else
--    return 0;
-+
-+  return 0;
- }
- 
- static bool
---- gcc/tree-ssa-live.c	(revision 196173)
-+++ gcc/tree-ssa-live.c	(revision 196174)
-@@ -889,7 +889,10 @@ remove_unused_locals (void)
-       dstidx++;
-     }
-   if (dstidx != num)
--    cfun->local_decls->truncate (dstidx);
-+    {
-+      statistics_counter_event (cfun, "unused VAR_DECLs removed", num - dstidx);
-+      cfun->local_decls->truncate (dstidx);
-+    }
- 
-   remove_unused_scope_block_p (DECL_INITIAL (current_function_decl));
-   clear_unused_block_pointer ();
---- gcc/tree-ssa-forwprop.c	(revision 196173)
-+++ gcc/tree-ssa-forwprop.c	(revision 196174)
-@@ -2936,7 +2936,6 @@ ssa_forward_propagate_and_combine (void)
- 		  && forward_propagate_addr_expr (lhs, rhs))
- 		{
- 		  release_defs (stmt);
--		  todoflags |= TODO_remove_unused_locals;
- 		  gsi_remove (&gsi, true);
- 		}
- 	      else
-@@ -2961,7 +2960,6 @@ ssa_forward_propagate_and_combine (void)
- 							       off)))))
- 		{
- 		  release_defs (stmt);
--		  todoflags |= TODO_remove_unused_locals;
- 		  gsi_remove (&gsi, true);
- 		}
- 	      else if (is_gimple_min_invariant (rhs))
---- gcc/tree-ssa-dce.c	(revision 196173)
-+++ gcc/tree-ssa-dce.c	(revision 196174)
-@@ -1607,10 +1607,8 @@ perform_tree_ssa_dce (bool aggressive)
-   free_edge_list (el);
- 
-   if (something_changed)
--    return (TODO_update_ssa | TODO_cleanup_cfg | TODO_ggc_collect
--	    | TODO_remove_unused_locals);
--  else
--    return 0;
-+    return TODO_update_ssa | TODO_cleanup_cfg;
-+  return 0;
- }
- 
- /* Pass entry points.  */
---- gcc/passes.c	(revision 196173)
-+++ gcc/passes.c	(revision 196174)
-@@ -1918,10 +1918,7 @@ execute_function_todo (void *data)
-   /* Always cleanup the CFG before trying to update SSA.  */
-   if (flags & TODO_cleanup_cfg)
-     {
--      bool cleanup = cleanup_tree_cfg ();
--
--      if (cleanup && (cfun->curr_properties & PROP_ssa))
--	flags |= TODO_remove_unused_locals;
-+      cleanup_tree_cfg ();
- 
-       /* When cleanup_tree_cfg merges consecutive blocks, it may
- 	 perform some simplistic propagation when removing single
---- gcc/tree-ssanames.c	(revision 196173)
-+++ gcc/tree-ssanames.c	(revision 196174)
-@@ -455,7 +455,7 @@ struct gimple_opt_pass pass_release_ssa_
-   PROP_ssa,				/* properties_required */
-   0,					/* properties_provided */
-   0,					/* properties_destroyed */
--  0,					/* todo_flags_start */
--  0              			/* todo_flags_finish */
-+  TODO_remove_unused_locals,		/* todo_flags_start */
-+  0					/* todo_flags_finish */
-  }
- };
---- gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c	(revision 196173)
-+++ gcc/testsuite/gcc.dg/tree-ssa/forwprop-8.c	(revision 196174)
-@@ -11,6 +11,5 @@ int foo(struct X *q)
- 
- 
- /* We should have propragated &q->a into (*pointer).  */
--/* { dg-final { scan-tree-dump-times "pointer" 0 "forwprop1"} } */
--/* { dg-final { scan-tree-dump "\\\[0\\\]" "forwprop1" } } */
-+/* { dg-final { scan-tree-dump "q_.\\\(D\\\)\\\]\\\[0\\\];" "forwprop1" } } */
- /* { dg-final { cleanup-tree-dump "forwprop1" } } */

diff --git a/sources b/sources
index 73225ef..dc64418 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
 be78a47bd82523250eb3e91646db5b3d  cloog-0.18.0.tar.gz
 2659f09c2e43ef8b7d4406321753f1b2  fastjar-0.97.tar.gz
-d18630509460934dfd7163a884b63ecd  gcc-4.8.0-20130220.tar.bz2
 bce1586384d8635a76d2f017fb067cd2  isl-0.11.1.tar.bz2
+4f89409558bba0856fbd26778fd49841  gcc-4.8.0-20130304.tar.bz2

                 reply	other threads:[~2026-06-29 12:25 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178273594854.1.5574604206843707788.rpms-gcc-2bea4b26c1cc@fedoraproject.org \
    --to=jakub@redhat.com \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox