svn commit: r232264 - in head/sys: amd64/include i386/include pc98/include x86/include

John Baldwin jhb at freebsd.org
Sun Mar 4 18:51:26 UTC 2012


On Tuesday, February 28, 2012 01:38:34 PM Tijl Coosemans wrote:
> Author: tijl
> Date: Tue Feb 28 18:38:33 2012
> New Revision: 232264
> URL: http://svn.freebsd.org/changeset/base/232264
> 
> Log:
>   Copy amd64 _stdint.h to x86 and merge with i386 _stdint.h. Replace
>   amd64/i386/pc98 _stdint.h with stubs.
> 
> Added:
>   head/sys/x86/include/_stdint.h
>      - copied, changed from r232259, head/sys/amd64/include/_stdint.h

This broke C++ software (such as the audio/flac port), that #includes
<stdint.h> with __STDC_LIMIT_MACROS defined but not __STDC_CONSTANT_MACROS 
defined.  The problem is that you have changed UINT64_MAX and INT64_MAX to use 
UINT64_C() and INT64_C(), so in this case UINT64_MAX now expands to 
UINT64_C(...) which can't be resolved to a constant.

You should be able to reproduce this via the following:

% cat > bar.cc
#define __STDC_LIMIT_MACROS
#include <stdint.h>
% c++ -c bar.cc

(The test to see if __WORDSIZE should be defined at the end of stdint.h trips 
over this bug.)

While you could do something like add __INT64_C() and __UINT64_C() macros that 
are always defined and use them for INT64_MAX and UINT64_MAX, I think the 
simplest fix is probably to just use #ifdef _LP64 tests to define INT64_MAX 
and UINT64_MAX as pure constants as those are the only two macros effected.

(I've just hardcoded those two constants on my little netbook so I can keep 
building ports and that worked fine for audio/flac).

-- 
John Baldwin


More information about the svn-src-head mailing list