Date: Thursday, June 25, 2015 @ 05:37:12 Author: foutrelis Revision: 241262
upgpkg: gcc 5.1.0-5 New snapshot, plus an ICE fix. Added: gcc/trunk/pr66647.patch Modified: gcc/trunk/PKGBUILD gcc/trunk/pr65882.patch ---------------+ PKGBUILD | 17 +++++--- pr65882.patch | 106 ++++++++++++++++++++++++++++++++++++++------------------ pr66647.patch | 87 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 171 insertions(+), 39 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2015-06-24 22:02:33 UTC (rev 241261) +++ PKGBUILD 2015-06-25 03:37:12 UTC (rev 241262) @@ -8,8 +8,8 @@ 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') @@ -21,10 +21,12 @@ 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) -md5sums=('84f261b2f23e154ec6d9bd4149851a21' +md5sums=('69432bf92cb6cdc8399c1bfc28c4f801' '118d1a379abf7606a3334c98a8411c79' - '9a9cc98e916fd37c7b3dad50f29d2f48' + 'f64c1781d8bcac1ea168c2b7091ca2bd' + '720df658a726b6e0e541c58296bd5672' '5b980076cd5fcbc3aff6014f306282dd') if [ -n "${_snapshot}" ]; then @@ -52,9 +54,12 @@ # 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 Modified: pr65882.patch =================================================================== --- pr65882.patch 2015-06-24 22:02:33 UTC (rev 241261) +++ pr65882.patch 2015-06-25 03:37:12 UTC (rev 241262) @@ -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 @@ +{ + foo<int>(); +} +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 <bool> ++struct A ++{ ++ typedef int type; ++}; ++ ++struct B ++{ ++ static const int value = 0; ++}; ++ ++template <class> ++struct C ++{ ++ typedef int type; ++}; ++ ++template <class> ++struct F : B {}; ++ ++class D ++{ ++ template <class Expr> ++ typename A<F<typename C<Expr>::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: Added: pr66647.patch =================================================================== --- pr66647.patch (rev 0) +++ pr66647.patch 2015-06-25 03:37:12 UTC (rev 241262) @@ -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 <typename _Tp> struct A ++{ ++ static constexpr _Tp value = 1; ++}; ++template <typename> class B ++{ ++public: ++ template <typename> struct rebind ++ { ++ }; ++}; ++ ++template <typename _Alloc, typename _Tp> class C ++{ ++ template <typename _Alloc2, typename _Tp2> ++ static A<int> _S_chk (typename _Alloc2::template rebind<_Tp2> *); ++ ++public: ++ using __type = decltype (_S_chk<_Alloc, _Tp> (0)); ++}; ++ ++template <typename _Alloc, typename _Tp, int = C<_Alloc, _Tp>::__type::value> ++struct D; ++template <typename _Alloc, typename _Tp> struct D<_Alloc, _Tp, 1> ++{ ++ typedef typename _Alloc::template rebind<_Tp> __type; ++}; ++template <typename _Alloc> struct F ++{ ++ template <typename _Tp> using rebind_alloc = typename D<_Alloc, _Tp>::__type; ++}; ++template <typename _Alloc> struct __alloc_traits ++{ ++ template <typename> struct rebind ++ { ++ typedef typename F<_Alloc>::template rebind_alloc<int> other; ++ }; ++}; ++template <typename _Alloc> struct G ++{ ++ typename __alloc_traits<_Alloc>::template rebind<int>::other _Tp_alloc_type; ++}; ++template <typename _Tp, typename _Alloc = B<_Tp> > class vector : G<_Alloc> ++{ ++}; ++ ++template <int> using tfuncptr = void(); ++template <int d> struct H ++{ ++ vector<tfuncptr<d> > 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