* [PATCH] Fix partial template specialization syntax in wide-int.h @ 2015-07-17 9:30 Mikhail Maltsev 2015-07-17 17:38 ` Mike Stump 0 siblings, 1 reply; 6+ messages in thread From: Mikhail Maltsev @ 2015-07-17 9:30 UTC (permalink / raw) To: gcc-patches [-- Attachment #1: Type: text/plain, Size: 1017 bytes --] Hi, all! The following code (reduced from wide-int.h) is rejected by Intel C++ Compiler (EDG-based): $ cat genpreds1_min.cc template <typename> class A; template <int> struct B; template <typename> struct C; template <> template <int N> struct C <B <N> > { template<typename T> A <B <N> > m_fn(T); }; template <int N> template <typename T> A <B <N> > C <B <N> >::m_fn (T) { } $ /opt/intel/bin/icpc -c genpreds1_min.cc genpreds1_min.cc(22): error: incomplete type is not allowed C <B <N> >::m_fn (T) ^ genpreds1_min.cc(22): error: template argument list must match the parameter list C <B <N> >::m_fn (T) Clang gives the following warning: $ clang++ -c genpreds1_min.cc genpreds1_min.cc:10:1: warning: extraneous template parameter list in template specialization template <> I think that the warning is correct, and "template <>" should not be used here. The attached patch should fix this issue. Bootstrapped and regtested on x86_64-linux. OK for trunk? -- Regards, Mikhail Maltsev [-- Attachment #2: part_spec_wi.patch --] [-- Type: text/x-patch, Size: 2230 bytes --] diff --git a/gcc/wide-int.h b/gcc/wide-int.h index d8f7b46..6e0275f 100644 --- a/gcc/wide-int.h +++ b/gcc/wide-int.h @@ -360,21 +360,18 @@ namespace wi inputs. Note that CONST_PRECISION and VAR_PRECISION cannot be mixed, in order to give stronger type checking. When both inputs are CONST_PRECISION, they must have the same precision. */ - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, FLEXIBLE_PRECISION> { typedef widest_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, VAR_PRECISION> { typedef wide_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, CONST_PRECISION> { @@ -384,14 +381,12 @@ namespace wi <int_traits <T2>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, VAR_PRECISION, FLEXIBLE_PRECISION> { typedef wide_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, CONST_PRECISION, FLEXIBLE_PRECISION> { @@ -401,7 +396,6 @@ namespace wi <int_traits <T1>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, CONST_PRECISION, CONST_PRECISION> { @@ -412,7 +406,6 @@ namespace wi <int_traits <T1>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, VAR_PRECISION, VAR_PRECISION> { @@ -876,7 +869,6 @@ generic_wide_int <storage>::dump () const namespace wi { - template <> template <typename storage> struct int_traits < generic_wide_int <storage> > : public wi::int_traits <storage> @@ -955,7 +947,6 @@ inline wide_int_ref_storage <SE>::wide_int_ref_storage (const T &x, namespace wi { - template <> template <bool SE> struct int_traits <wide_int_ref_storage <SE> > { @@ -1142,7 +1133,6 @@ public: namespace wi { - template <> template <int N> struct int_traits < fixed_wide_int_storage <N> > { [-- Attachment #3: part_spec_wi.clog --] [-- Type: text/plain, Size: 173 bytes --] gcc/ChangeLog: 2015-07-17 Mikhail Maltsev <maltsevm@gmail.com> * wide-int.h (struct binary_traits): Fix partial specialization syntax. (struct int_traits): Likewise. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Fix partial template specialization syntax in wide-int.h 2015-07-17 9:30 [PATCH] Fix partial template specialization syntax in wide-int.h Mikhail Maltsev @ 2015-07-17 17:38 ` Mike Stump 2015-07-20 7:51 ` Mikhail Maltsev 0 siblings, 1 reply; 6+ messages in thread From: Mike Stump @ 2015-07-17 17:38 UTC (permalink / raw) To: Mikhail Maltsev; +Cc: gcc-patches On Jul 17, 2015, at 2:28 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: > The following code (reduced from wide-int.h) is rejected by Intel C++ Compiler > (EDG-based): So, could you test this with the top of the tree compiler and file a bug report against g++ for it, if it seems to not work right. If that bug report is rejected, then I’d say file a bug report against clang and EDG. > I think that the warning is correct, and "template <>" should not be used here. > The attached patch should fix this issue. Bootstrapped and regtested on > x86_64-linux. OK for trunk? Ok. Does this need to go into the gcc-5 release branch as well? If so, ok there too. Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Fix partial template specialization syntax in wide-int.h 2015-07-17 17:38 ` Mike Stump @ 2015-07-20 7:51 ` Mikhail Maltsev 2015-10-19 19:41 ` H.J. Lu 0 siblings, 1 reply; 6+ messages in thread From: Mikhail Maltsev @ 2015-07-20 7:51 UTC (permalink / raw) To: Mike Stump; +Cc: gcc-patches On 07/17/2015 07:46 PM, Mike Stump wrote: > On Jul 17, 2015, at 2:28 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: >> The following code (reduced from wide-int.h) is rejected by Intel C++ >> Compiler (EDG-based): > > So, could you test this with the top of the tree compiler and file a bug > report against g++ for it, if it seems to not work right. If that bug report > is rejected, then IÂ’d say file a bug report against clang and EDG. In addition to usual bootstrap+regtest, I also checked that build succeeds with GCC 4.3.6 (IIRC, this is now the minimal required version) as well as with recent GCC snapshot used as stage 0. Committed as r225993. I also filed this bugreport: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66941 >> I think that the warning is correct, and "template <>" should not be used >> here. The attached patch should fix this issue. Bootstrapped and regtested >> on x86_64-linux. OK for trunk? > > Ok. Does this need to go into the gcc-5 release branch as well? If so, ok > there too. Thanks. I think there is no need for it. -- Regards, Mikhail Maltsev ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Fix partial template specialization syntax in wide-int.h 2015-07-20 7:51 ` Mikhail Maltsev @ 2015-10-19 19:41 ` H.J. Lu 2015-10-19 19:48 ` H.J. Lu 0 siblings, 1 reply; 6+ messages in thread From: H.J. Lu @ 2015-10-19 19:41 UTC (permalink / raw) To: Mikhail Maltsev; +Cc: Mike Stump, gcc-patches On Mon, Jul 20, 2015 at 12:15 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: > On 07/17/2015 07:46 PM, Mike Stump wrote: >> On Jul 17, 2015, at 2:28 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: >>> The following code (reduced from wide-int.h) is rejected by Intel C++ >>> Compiler (EDG-based): >> >> So, could you test this with the top of the tree compiler and file a bug >> report against g++ for it, if it seems to not work right. If that bug report >> is rejected, then I’d say file a bug report against clang and EDG. > > In addition to usual bootstrap+regtest, I also checked that build succeeds with > GCC 4.3.6 (IIRC, this is now the minimal required version) as well as with > recent GCC snapshot used as stage 0. Committed as r225993. > I also filed this bugreport: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66941 > >>> I think that the warning is correct, and "template <>" should not be used >>> here. The attached patch should fix this issue. Bootstrapped and regtested >>> on x86_64-linux. OK for trunk? >> >> Ok. Does this need to go into the gcc-5 release branch as well? If so, ok >> there too. Thanks. > I think there is no need for it. It is also need for gcc-5. I am backporting it now. -- H.J. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Fix partial template specialization syntax in wide-int.h 2015-10-19 19:41 ` H.J. Lu @ 2015-10-19 19:48 ` H.J. Lu 2015-10-21 17:01 ` Mike Stump 0 siblings, 1 reply; 6+ messages in thread From: H.J. Lu @ 2015-10-19 19:48 UTC (permalink / raw) To: Mikhail Maltsev; +Cc: Mike Stump, gcc-patches [-- Attachment #1: Type: text/plain, Size: 1404 bytes --] On Mon, Oct 19, 2015 at 12:39 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Mon, Jul 20, 2015 at 12:15 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: >> On 07/17/2015 07:46 PM, Mike Stump wrote: >>> On Jul 17, 2015, at 2:28 AM, Mikhail Maltsev <maltsevm@gmail.com> wrote: >>>> The following code (reduced from wide-int.h) is rejected by Intel C++ >>>> Compiler (EDG-based): >>> >>> So, could you test this with the top of the tree compiler and file a bug >>> report against g++ for it, if it seems to not work right. If that bug report >>> is rejected, then I’d say file a bug report against clang and EDG. >> >> In addition to usual bootstrap+regtest, I also checked that build succeeds with >> GCC 4.3.6 (IIRC, this is now the minimal required version) as well as with >> recent GCC snapshot used as stage 0. Committed as r225993. >> I also filed this bugreport: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66941 >> >>>> I think that the warning is correct, and "template <>" should not be used >>>> here. The attached patch should fix this issue. Bootstrapped and regtested >>>> on x86_64-linux. OK for trunk? >>> >>> Ok. Does this need to go into the gcc-5 release branch as well? If so, ok >>> there too. Thanks. >> I think there is no need for it. > > It is also need for gcc-5. I am backporting it now. > This is what I checked into gcc-5-branch. -- H.J. [-- Attachment #2: 0001-Fix-partial-specialization-syntax-of-wide-int-traits.patch --] [-- Type: text/x-patch, Size: 3251 bytes --] From 4ae06c3dbe5fb2c4d345060b1ba9cd34b2dc7d37 Mon Sep 17 00:00:00 2001 From: miyuki <miyuki@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Mon, 20 Jul 2015 05:30:12 +0000 Subject: [PATCH] Fix partial specialization syntax of wide int traits. gcc/ * wide-int.h (struct binary_traits): Fix partial specialization syntax. (struct int_traits): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225993 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 8 ++++++++ gcc/wide-int.h | 10 ---------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7fb0538..45ae071 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-10-19 H.J. Lu <hongjiu.lu@intel.com> + + Backport from mainline + 2015-07-20 Mikhail Maltsev <maltsevm@gmail.com> + + * wide-int.h (struct binary_traits): Fix partial specialization syntax. + (struct int_traits): Likewise. + 2015-10-16 Richard Sandiford <richard.sandiford@arm.com> PR middle-end/66311 diff --git a/gcc/wide-int.h b/gcc/wide-int.h index 46f4545..9a71c4f 100644 --- a/gcc/wide-int.h +++ b/gcc/wide-int.h @@ -365,21 +365,18 @@ namespace wi inputs. Note that CONST_PRECISION and VAR_PRECISION cannot be mixed, in order to give stronger type checking. When both inputs are CONST_PRECISION, they must have the same precision. */ - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, FLEXIBLE_PRECISION> { typedef widest_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, VAR_PRECISION> { typedef wide_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, FLEXIBLE_PRECISION, CONST_PRECISION> { @@ -389,14 +386,12 @@ namespace wi <int_traits <T2>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, VAR_PRECISION, FLEXIBLE_PRECISION> { typedef wide_int result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, CONST_PRECISION, FLEXIBLE_PRECISION> { @@ -406,7 +401,6 @@ namespace wi <int_traits <T1>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, CONST_PRECISION, CONST_PRECISION> { @@ -417,7 +411,6 @@ namespace wi <int_traits <T1>::precision> > result_type; }; - template <> template <typename T1, typename T2> struct binary_traits <T1, T2, VAR_PRECISION, VAR_PRECISION> { @@ -881,7 +874,6 @@ generic_wide_int <storage>::dump () const namespace wi { - template <> template <typename storage> struct int_traits < generic_wide_int <storage> > : public wi::int_traits <storage> @@ -960,7 +952,6 @@ inline wide_int_ref_storage <SE>::wide_int_ref_storage (const T &x, namespace wi { - template <> template <bool SE> struct int_traits <wide_int_ref_storage <SE> > { @@ -1147,7 +1138,6 @@ public: namespace wi { - template <> template <int N> struct int_traits < fixed_wide_int_storage <N> > { -- 2.4.3 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Fix partial template specialization syntax in wide-int.h 2015-10-19 19:48 ` H.J. Lu @ 2015-10-21 17:01 ` Mike Stump 0 siblings, 0 replies; 6+ messages in thread From: Mike Stump @ 2015-10-21 17:01 UTC (permalink / raw) To: H.J. Lu; +Cc: Mikhail Maltsev, gcc-patches On Oct 19, 2015, at 12:46 PM, H.J. Lu <hjl.tools@gmail.com> wrote: >>>> Ok. Does this need to go into the gcc-5 release branch as well? If so, ok >>>> there too. Thanks. >>> I think there is no need for it. >> >> It is also need for gcc-5. I am backporting it now. > > This is what I checked into gcc-5-branch. Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-10-21 16:49 UTC | newest] Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2015-07-17 9:30 [PATCH] Fix partial template specialization syntax in wide-int.h Mikhail Maltsev 2015-07-17 17:38 ` Mike Stump 2015-07-20 7:51 ` Mikhail Maltsev 2015-10-19 19:41 ` H.J. Lu 2015-10-19 19:48 ` H.J. Lu 2015-10-21 17:01 ` Mike Stump
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).