[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Monotone-devel] nvm.options
From: |
Thomas Keller |
Subject: |
Re: [Monotone-devel] nvm.options |
Date: |
Mon, 26 Jul 2010 15:00:28 +0200 |
User-agent: |
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; de; rv:1.9.1.10) Gecko/20100512 Thunderbird/3.0.5 |
Am 26.07.10 05:40, schrieb Timothy Brownawell:
> On 07/21/2010 05:25 PM, Thomas Keller wrote:
>> Am 21.07.10 01:10, schrieb Thomas Keller:
>>> Am 20.07.10 04:58, schrieb Timothy Brownawell:
>>>> On 07/18/2010 08:19 AM, Stephen Leake wrote:
>>>>> Tim,
>>>>>
>>>>> Just letting you know I've been keeping up with nvm.options, and it
>>>>> all
>>>>> looks very good so far.
>>>>
>>>> I think it's ready to merge now. See anything I missed?
>>>
>>> The current head (44c1dd7bbc276790c51463a83823d2e1339c7ff6) fails to
>>> compile for me:
>>>
>>> base.hh: In function ‘void dump(const T&, std::string&) [with T = long
>>> unsigned int]’:
>>> sanity.hh:451: instantiated from ‘void Musing<T>::gasp(std::string&)
>>> const [with T = size_t]’
>>> cmd.cc:640: instantiated from here
>>> base.hh:45: error: invalid application of ‘sizeof’ to incomplete type
>>> ‘dump_must_be_specialized_for_this_type’
>>> make[1]: *** [cmd.o] Error 1
>>> make: *** [all] Error 2
>>
>> I added a specialization for size_t in
>> 760adcf3915f59a0ba8e2c55ea652ef29deac477 and it compiles now.
>
> That *breaks* it here, since apparently u64 and size_t are the same
> thing (while your size_t / unsigned long doesn't match u64 or u32).
TYPE_U32 is defined as `unsigned int' in my config.h and when I look at
my stddef.h then I see that size_t is defined as `long unsigned int' and
while sizeof(unsigned int) and sizeof(long unsigned int) are size-wise
equal (4, ie. 32bit), the compiler doesn't pick the u32 (unsigned int)
specialization for size_t. So maybe the bug is already that TYPE_U32
isn't defined as `unsigned long' ?
> I guess we need an autoconf thingy for this?
I read a bit about size_t in general and it seems to be only defined as
"unsigned integral type" saying nothing about its size. I wrote a
minimal test which shows the problem:
#include <iostream>
using namespace std;
template <typename T> void dump(T const &)
{ cout << "no specialization picked" << endl; }
template <> void dump(unsigned int const & v)
{ cout << "uint picked: " << v << endl; }
template <> void dump(unsigned long const & v)
{ cout << "ulong picked: " << v << endl; }
int main(int argc, char ** argv)
{
size_t t = 3;
dump(t);
return 0;
}
When I execute this on Mac OS X, I get "ulong picked", when I execute
this on my Fedora VM, I get "uint picked". What is now the best way to
put something like this into an autoconf macro and what should be the
result? Adding a specialization for size_t in case we detect the problem
now seems to be a bit hacky from this perspective...
Do you have an idea what code produces the problem at all? cmd.cc:640
points me to a boolean assignment. I really wonder why we didn't stumble
upon this issue earlier...
Thomas.
--
GPG-Key 0x160D1092 | address@hidden | http://thomaskeller.biz
Please note that according to the EU law on data retention, information
on every electronic information exchange might be retained for a period
of six months or longer: http://www.vorratsdatenspeicherung.de/?lang=en
signature.asc
Description: OpenPGP digital signature
- Re: [Monotone-devel] nvm.options, (continued)
- Re: [Monotone-devel] nvm.options, Stephen Leake, 2010/07/20
- Re: [Monotone-devel] nvm.options, Timothy Brownawell, 2010/07/20
- Re: [Monotone-devel] nvm.options, Stephen Leake, 2010/07/21
- Re: [Monotone-devel] nvm.options, Thomas Keller, 2010/07/21
- Re: [Monotone-devel] nvm.options, Stephen Leake, 2010/07/22
- Re: [Monotone-devel] nvm.options, Stephen Leake, 2010/07/23
- Re: [Monotone-devel] nvm.options, Stephen Leake, 2010/07/21
Re: [Monotone-devel] nvm.options, Thomas Keller, 2010/07/20
Re: [Monotone-devel] nvm.options, Thomas Keller, 2010/07/21