On Sunday 04 March 2012 19:51:22 John Baldwin wrote: > 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).
Fixed in r232519.
signature.asc
Description: This is a digitally signed message part.