diff --git a/mingw-w64-gcc/PKGBUILD b/mingw-w64-gcc/PKGBUILD index 2b6cb8e276..76f0b33cc4 100644 --- a/mingw-w64-gcc/PKGBUILD +++ b/mingw-w64-gcc/PKGBUILD @@ -5,15 +5,15 @@ _realname=gcc _mingw_suff=mingw-w64-${CARCH} pkgname=( - "${_mingw_suff}-${_realname}" - "${_mingw_suff}-${_realname}-libs" - "${_mingw_suff}-${_realname}-libgfortran" - "${_mingw_suff}-${_realname}-fortran" - "${_mingw_suff}-${_realname}-ada" - "${_mingw_suff}-${_realname}-objc" - ) + "${_mingw_suff}-${_realname}" + "${_mingw_suff}-${_realname}-libs" + "${_mingw_suff}-${_realname}-libgfortran" + "${_mingw_suff}-${_realname}-fortran" + "${_mingw_suff}-${_realname}-ada" + "${_mingw_suff}-${_realname}-objc" + ) pkgver=4.9.0 -pkgrel=3 +pkgrel=4 pkgdesc="GCC for the MinGW-w64" arch=('any') url="http://gcc.gnu.org" @@ -25,26 +25,28 @@ makedepends=("${_mingw_suff}-${_realname}" 'lndir') optdepends=() options=('strip' '!debug' 'staticlibs' '!emptydirs') # '!buildflags' source=("ftp://gcc.gnu.org/pub/gcc/releases/${_realname}-${pkgver}/${_realname}-${pkgver}.tar.bz2" - 'gcc-4.9.0-ICE.patch' - 'gcc-4.8-libstdc++export.patch' - 'gcc-4.7-stdthreads.patch' - '130-dont-escape-arguments-that-dont-need-it-in-pex-win32.c.patch' - '140-fix-for-windows-not-minding-non-existent-parent-dirs.patch' - '150-windows-lrealpath-no-force-lowercase-nor-backslash.patch' - '160-mingw-dont-ignore-native-system-header-dir.patch' - '170-0001-PR-ipa-60965.patch' - '180-pr-57440.patch' - 'ktietz-libgomp.patch' - '4.9.0-libatomic-cygwin.patch' - 'build-more-gnattools.mingw.patch' - 'libgomp-no-static.patch' - 'enable-libitm.mingw.patch' - 'enable-libsanitizer.mingw.patch' - 'enable-shared-gnat.mingw.patch' - 'no-fpic-in-sanitizer.all.patch' - 'port-sanitizer-to-mingw.all.patch' - 'prettify-linking-no-undefined.mingw.patch' - ) + 'gcc-4.9.0-ICE.patch' + 'gcc-4.8-libstdc++export.patch' + 'gcc-4.7-stdthreads.patch' + '130-dont-escape-arguments-that-dont-need-it-in-pex-win32.c.patch' + '140-fix-for-windows-not-minding-non-existent-parent-dirs.patch' + '150-windows-lrealpath-no-force-lowercase-nor-backslash.patch' + '160-mingw-dont-ignore-native-system-header-dir.patch' + '170-0001-PR-ipa-60965.patch' + '180-pr-57440.patch' + 'gcc-4.8-filename-output.patch' + 'gcc-4.9-tree-ssa-threadedge.patch' + 'ktietz-libgomp.patch' + '4.9.0-libatomic-cygwin.patch' + 'build-more-gnattools.mingw.patch' + 'libgomp-no-static.patch' + 'enable-libitm.mingw.patch' + 'enable-libsanitizer.mingw.patch' + 'enable-shared-gnat.mingw.patch' + 'no-fpic-in-sanitizer.all.patch' + 'port-sanitizer-to-mingw.all.patch' + 'prettify-linking-no-undefined.mingw.patch' + ) md5sums=('9709b49ae0e904cbb0a6a1b62853b556' '627405c8f0ec5cad56b0847adf9ad843' 'f6b5fb08ff06a7d60ee3280e14240bb2' @@ -55,6 +57,8 @@ md5sums=('9709b49ae0e904cbb0a6a1b62853b556' '60fdccbd072e2b2e724ff879d31ec57e' 'e3b36213655f047042089e8f38171411' '347336d5a318e5e8b3cde29e9174413c' + '40cb437805e2f7a006aa0d0c3098ab0f' + '311ece7f5446d550e84e28692d2fb823' 'f539e602715250bbdb8d2a6a25f1ccbe' '9303e0f9cd9c601a1939792123677499' 'fde1098e5c71963ec2ed4c5b2c4217bd' @@ -129,6 +133,12 @@ prepare() { patch -p1 -i ${srcdir}/180-pr-57440.patch + # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57653 + patch -p0 -i ${srcdir}/gcc-4.8-filename-output.patch + + # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60902 + patch -p1 -i ${srcdir}/gcc-4.9-tree-ssa-threadedge.patch + # Kai's libgomp fix. patch -p1 -i ${srcdir}/ktietz-libgomp.patch diff --git a/mingw-w64-gcc/gcc-4.8-filename-output.patch b/mingw-w64-gcc/gcc-4.8-filename-output.patch new file mode 100644 index 0000000000..6951eb239b --- /dev/null +++ b/mingw-w64-gcc/gcc-4.8-filename-output.patch @@ -0,0 +1,17 @@ +--- gcc/c-family/c-opts.c (revision 200330) ++++ gcc/c-family/c-opts.c (working copy) +@@ -1338,10 +1338,14 @@ c_finish_options (void) + + /* Give CPP the next file given by -include, if any. */ + static void + push_command_line_include (void) + { ++ // This can happen if disabled by -imacros for example. ++ if (include_cursor > deferred_count) ++ return; ++ + if (!done_preinclude) + { + done_preinclude = true; + if (flag_hosted && std_inc && !cpp_opts->preprocessed) + { diff --git a/mingw-w64-gcc/gcc-4.9-tree-ssa-threadedge.patch b/mingw-w64-gcc/gcc-4.9-tree-ssa-threadedge.patch new file mode 100644 index 0000000000..8827427e4d --- /dev/null +++ b/mingw-w64-gcc/gcc-4.9-tree-ssa-threadedge.patch @@ -0,0 +1,38 @@ +--- trunk/gcc/tree-ssa-threadedge.c 2014/04/23 17:53:56 209715 ++++ trunk/gcc/tree-ssa-threadedge.c 2014/04/23 18:04:46 209716 +@@ -387,7 +387,34 @@ + && (gimple_code (stmt) != GIMPLE_CALL + || gimple_call_lhs (stmt) == NULL_TREE + || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME)) +- continue; ++ { ++ /* STMT might still have DEFS and we need to invalidate any known ++ equivalences for them. ++ ++ Consider if STMT is a GIMPLE_ASM with one or more outputs that ++ feeds a conditional inside a loop. We might derive an equivalence ++ due to the conditional. */ ++ tree op; ++ ssa_op_iter iter; ++ ++ if (backedge_seen) ++ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF) ++ { ++ /* This call only invalidates equivalences created by ++ PHI nodes. This is by design to keep the cost of ++ of invalidation reasonable. */ ++ invalidate_equivalences (op, stack, src_map, dst_map); ++ ++ /* However, conditionals can imply values for real ++ operands as well. And those won't be recorded in the ++ maps. In fact, those equivalences may be recorded totally ++ outside the threading code. We can just create a new ++ temporary NULL equivalence here. */ ++ record_temporary_equivalence (op, NULL_TREE, stack); ++ } ++ ++ continue; ++ } + + /* The result of __builtin_object_size depends on all the arguments + of a phi node. Temporarily using only one edge produces invalid