diff --git a/core/gcc/PKGBUILD b/core/gcc/PKGBUILD index 58ce98cf0..05dd9582a 100644 --- a/core/gcc/PKGBUILD +++ b/core/gcc/PKGBUILD @@ -18,8 +18,8 @@ pkgname=('gcc' 'gcc-libs' 'gcc-fortran' 'gcc-objc' 'gcc-go') pkgver=5.1.0 _pkgver=5 _islver=0.14.1 -pkgrel=4 -_snapshot=5-20150519 +pkgrel=5 +_snapshot=5-20150623 pkgdesc="The GNU Compiler Collection" arch=('i686' 'x86_64') license=('GPL' 'LGPL' 'FDL' 'custom') @@ -31,11 +31,13 @@ source=(#ftp://gcc.gnu.org/pub/gcc/releases/gcc-${pkgver}/gcc-${pkgver}.tar.bz2 ftp://gcc.gnu.org/pub/gcc/snapshots/${_snapshot}/gcc-${_snapshot}.tar.bz2 http://isl.gforge.inria.fr/isl-${_islver}.tar.bz2 pr65882.patch + pr66647.patch pr66035.patch 0001-ARMv5-disable-LDRD-STRD.patch) -md5sums=('84f261b2f23e154ec6d9bd4149851a21' +md5sums=('69432bf92cb6cdc8399c1bfc28c4f801' '118d1a379abf7606a3334c98a8411c79' - '9a9cc98e916fd37c7b3dad50f29d2f48' + 'f64c1781d8bcac1ea168c2b7091ca2bd' + '720df658a726b6e0e541c58296bd5672' '5b980076cd5fcbc3aff6014f306282dd' '924a9bcdd7852410667f04ce18c305d7') @@ -61,8 +63,11 @@ prepare() { # hack! - some configure tests for header files using "$CPP $CPPFLAGS" sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure - # https://gcc.gnu.org/ml/gcc-patches/2015-04/msg01558.html - patch -p1 -i ${srcdir}/pr65882.patch + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65882 + patch -p0 -i ${srcdir}/pr65882.patch + + # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66647 + patch -p0 -i ${srcdir}/pr66647.patch # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66035 patch -p1 -i ${srcdir}/pr66035.patch diff --git a/core/gcc/pr65882.patch b/core/gcc/pr65882.patch index 673712b2b..d5e64b9a2 100644 --- a/core/gcc/pr65882.patch +++ b/core/gcc/pr65882.patch @@ -1,36 +1,7 @@ -diff --git a/gcc/cp/call.c b/gcc/cp/call.c -index 7bdf236..689d542 100644 ---- a/gcc/cp/call.c -+++ b/gcc/cp/call.c -@@ -5677,8 +5677,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, - case TRUTH_ORIF_EXPR: - case TRUTH_AND_EXPR: - case TRUTH_OR_EXPR: -- warn_logical_operator (loc, code, boolean_type_node, -- code_orig_arg1, arg1, code_orig_arg2, arg2); -+ if (complain & tf_warning) -+ warn_logical_operator (loc, code, boolean_type_node, -+ code_orig_arg1, arg1, code_orig_arg2, arg2); - /* Fall through. */ - case GT_EXPR: - case LT_EXPR: -@@ -5686,8 +5687,9 @@ build_new_op_1 (location_t loc, enum tree_code code, int flags, tree arg1, - case LE_EXPR: - case EQ_EXPR: - case NE_EXPR: -- if ((code_orig_arg1 == BOOLEAN_TYPE) -- ^ (code_orig_arg2 == BOOLEAN_TYPE)) -+ if ((complain & tf_warning) -+ && ((code_orig_arg1 == BOOLEAN_TYPE) -+ ^ (code_orig_arg2 == BOOLEAN_TYPE))) - maybe_warn_bool_compare (loc, code, arg1, arg2); - /* Fall through. */ - case PLUS_EXPR: -diff --git a/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C b/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C -new file mode 100644 -index 0000000..5655eb4 ---- /dev/null -+++ b/gcc/testsuite/g++.dg/diagnostic/inhibit-warn.C +Index: gcc/testsuite/g++.dg/diagnostic/inhibit-warn-1.C +=================================================================== +--- gcc/testsuite/g++.dg/diagnostic/inhibit-warn-1.C (revision 0) ++++ gcc/testsuite/g++.dg/diagnostic/inhibit-warn-1.C (revision 224864) @@ -0,0 +1,32 @@ +// PR c++/65882 +// { dg-do compile { target c++11 } } @@ -64,3 +35,72 @@ index 0000000..5655eb4 +{ + foo(); +} +Index: gcc/testsuite/g++.dg/diagnostic/inhibit-warn-2.C +=================================================================== +--- gcc/testsuite/g++.dg/diagnostic/inhibit-warn-2.C (revision 0) ++++ gcc/testsuite/g++.dg/diagnostic/inhibit-warn-2.C (revision 224864) +@@ -0,0 +1,36 @@ ++// PR c++/65882 ++// PR c++/66467 ++// { dg-do compile } ++ ++template ++struct A ++{ ++ typedef int type; ++}; ++ ++struct B ++{ ++ static const int value = 0; ++}; ++ ++template ++struct C ++{ ++ typedef int type; ++}; ++ ++template ++struct F : B {}; ++ ++class D ++{ ++ template ++ typename A::type>::value || B::value>::type ++ operator=(Expr); // { dg-message "declared" } ++}; ++ ++void fn1() ++{ ++ D opt; ++ opt = 0; // { dg-error "private" } ++} +Index: gcc/cp/call.c +=================================================================== +--- gcc/cp/call.c (revision 224863) ++++ gcc/cp/call.c (revision 224864) +@@ -5687,8 +5687,9 @@ + case TRUTH_ORIF_EXPR: + case TRUTH_AND_EXPR: + case TRUTH_OR_EXPR: +- warn_logical_operator (loc, code, boolean_type_node, +- code_orig_arg1, arg1, code_orig_arg2, arg2); ++ if (complain & tf_warning) ++ warn_logical_operator (loc, code, boolean_type_node, ++ code_orig_arg1, arg1, code_orig_arg2, arg2); + /* Fall through. */ + case GT_EXPR: + case LT_EXPR: +@@ -5696,8 +5697,9 @@ + case LE_EXPR: + case EQ_EXPR: + case NE_EXPR: +- if ((code_orig_arg1 == BOOLEAN_TYPE) +- ^ (code_orig_arg2 == BOOLEAN_TYPE)) ++ if ((complain & tf_warning) ++ && ((code_orig_arg1 == BOOLEAN_TYPE) ++ ^ (code_orig_arg2 == BOOLEAN_TYPE))) + maybe_warn_bool_compare (loc, code, arg1, arg2); + /* Fall through. */ + case PLUS_EXPR: diff --git a/core/gcc/pr66647.patch b/core/gcc/pr66647.patch new file mode 100644 index 000000000..9552922f5 --- /dev/null +++ b/core/gcc/pr66647.patch @@ -0,0 +1,87 @@ +Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-49.C +=================================================================== +--- gcc/testsuite/g++.dg/cpp0x/alias-decl-49.C (revision 0) ++++ gcc/testsuite/g++.dg/cpp0x/alias-decl-49.C (revision 224921) +@@ -0,0 +1,54 @@ ++// PR c++/66647 ++// { dg-do compile { target c++11 } } ++ ++template struct A ++{ ++ static constexpr _Tp value = 1; ++}; ++template class B ++{ ++public: ++ template struct rebind ++ { ++ }; ++}; ++ ++template class C ++{ ++ template ++ static A _S_chk (typename _Alloc2::template rebind<_Tp2> *); ++ ++public: ++ using __type = decltype (_S_chk<_Alloc, _Tp> (0)); ++}; ++ ++template ::__type::value> ++struct D; ++template struct D<_Alloc, _Tp, 1> ++{ ++ typedef typename _Alloc::template rebind<_Tp> __type; ++}; ++template struct F ++{ ++ template using rebind_alloc = typename D<_Alloc, _Tp>::__type; ++}; ++template struct __alloc_traits ++{ ++ template struct rebind ++ { ++ typedef typename F<_Alloc>::template rebind_alloc other; ++ }; ++}; ++template struct G ++{ ++ typename __alloc_traits<_Alloc>::template rebind::other _Tp_alloc_type; ++}; ++template > class vector : G<_Alloc> ++{ ++}; ++ ++template using tfuncptr = void(); ++template struct H ++{ ++ vector > funcs; ++}; +Index: gcc/cp/pt.c +=================================================================== +--- gcc/cp/pt.c (revision 224920) ++++ gcc/cp/pt.c (revision 224921) +@@ -20975,6 +20975,12 @@ + names a dependent type. */ + if (TREE_CODE (type) == TYPENAME_TYPE) + return true; ++ ++ /* An alias template specialization can be dependent even if the ++ resulting type is not. */ ++ if (dependent_alias_template_spec_p (type)) ++ return true; ++ + /* -- a cv-qualified type where the cv-unqualified type is + dependent. + No code is necessary for this bullet; the code below handles +@@ -21026,10 +21032,6 @@ + && (any_dependent_template_arguments_p + (INNERMOST_TEMPLATE_ARGS (CLASSTYPE_TI_ARGS (type))))) + return true; +- /* For an alias template specialization, check the arguments both to the +- class template and the alias template. */ +- else if (dependent_alias_template_spec_p (type)) +- return true; + + /* All TYPEOF_TYPEs, DECLTYPE_TYPEs, and UNDERLYING_TYPEs are + dependent; if the argument of the `typeof' expression is not