From owner-freebsd-toolchain@freebsd.org Fri Oct 21 16:08:23 2016 Return-Path: Delivered-To: freebsd-toolchain@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41C8AC1C12C for ; Fri, 21 Oct 2016 16:08:23 +0000 (UTC) (envelope-from wjw@digiware.nl) Received: from smtp.digiware.nl (smtp.digiware.nl [IPv6:2001:4cb8:90:ffff::3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id D3A8B7D4; Fri, 21 Oct 2016 16:08:22 +0000 (UTC) (envelope-from wjw@digiware.nl) Received: from router.digiware.nl (localhost.digiware.nl [127.0.0.1]) by smtp.digiware.nl (Postfix) with ESMTP id 8E1202B88F; Fri, 21 Oct 2016 18:08:19 +0200 (CEST) X-Virus-Scanned: amavisd-new at digiware.com Received: from smtp.digiware.nl ([127.0.0.1]) by router.digiware.nl (router.digiware.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id k8TLtclMiUYN; Fri, 21 Oct 2016 18:08:18 +0200 (CEST) Received: from [192.168.101.51] (vpn.ecoracks.nl [176.74.240.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.digiware.nl (Postfix) with ESMTPSA id 5907B2B88E; Fri, 21 Oct 2016 18:08:18 +0200 (CEST) Subject: Re: Seeking help with some Clang trouble, compiling ceph To: Dimitry Andric References: <7b6713f1-5671-bdc2-9cb5-97171146bc59@digiware.nl> <8DCCD19E-01EE-4DB4-814E-396D3E450275@FreeBSD.org> Cc: FreeBSD Toolchain From: Willem Jan Withagen Message-ID: Date: Fri, 21 Oct 2016 18:08:17 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <8DCCD19E-01EE-4DB4-814E-396D3E450275@FreeBSD.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-BeenThere: freebsd-toolchain@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Maintenance of FreeBSD's integrated toolchain List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Oct 2016 16:08:23 -0000 On 21-10-2016 17:21, Dimitry Andric wrote: > On 21 Oct 2016, at 17:07, Willem Jan Withagen > wrote: >> >> On 21-10-2016 15:09, Willem Jan Withagen wrote: >>> Hi, >>> >>> All this Ceph stuff finally used to compile under FreeBSD. And >>> all testss completed correctly. >>> >>> But somewhere in the Ceph-tree there was a lot of template and >>> trait code added/replaced. Problem is that this compiles under >>> GCC, but Clang throws an error. It looks like it cannot select >>> types of automagic conversion. >>> >>> But this template/trait stuff is too much for me to wrap my >>> head around. I'm reading up a lot, but that does not yet get me >>> anywhere. >>> >>> So I was wondering if anybody with more C++ knowledge would >>> like to assist and give some clues as to how to fix this. >>> >>> The error report is at: >>> >>> http://cephdev.digiware.nl:8180/jenkins/job/ceph-freebsd/39/consoleFull >>> >>> >>> And the ceph code can be found at: >>> https://github.com/ceph/ceph >> >> Oke, the preson responsable for the change helped to figure it >> out, and it looks like the following diff helps >> >> diff --git a/src/include/denc.h b/src/include/denc.h index >> 59f7686..caa095b 100644 --- a/src/include/denc.h +++ >> b/src/include/denc.h @@ -722,7 +722,7 @@ struct denc_traits< >> template struct denc_traits< std::vector, - >> typename std::enable_if::supported>::type> { + >> typename std::enable_if::supported != 0>::type> { >> typedef denc_traits traits; >> >> enum { supported = true }; @@ -831,7 +831,7 @@ struct >> denc_traits< template struct denc_traits< >> std::set, - typename >> std::enable_if::supported>::type> { + typename >> std::enable_if::supported != 0>::type> { typedef >> denc_traits traits; >> >> enum { supported = true }; >> >> And the conclusion is that std::enable_if<> does not always like >> it when the value is 'int'. the definition of supported is: >> struct denc_traits { enum { supported = 0 }; enum { featured = >> false }; enum { bounded = false }; }; >> >> and values can range 0..2. >> >> So is this a GCC liberalization, or is Clang here to picky? > > It's hard to say without the full source code and a reproducer, but > I'd say that enable_if has a bool as the first template argument, > so it can't match an int by default. Maybe libstdc++ has a variant > with an int as the first template argument, but I haven't looked. Which I understand.... Ceph source is a rather big monster. OTOH it is mostly fetching with git, install-deps.sh and compiling, but it does require quite some packages to be installed. If you would be willing, I'd be able to give you a receipe or shell script to just do that. Or I could give you a shell account on the jenkins box and you go from what is there... So what you are suggesting is looking into the include tree of gcc and check what flavours of enable_if are there? And if it would take 'int' --WjW