[tlbuild] lcdf-typetools-2.85 doesn't compile with gcc-3.4.2 on old FreeBSD-5

Eddie Kohler kohler at cs.ucla.edu
Mon Feb 7 15:28:59 CET 2011


Guys,

Does the following work on both platforms?

...
	char real_data[0];	// but it is almost certainly more
     };

     enum {
	MEMO_SPACE = sizeof(memo_t)
     };

Note different number of characters in real_data

Eddie


On 2/7/11 5:14 AM, Peter Breitenlohner wrote:
> ,On Mon, 7 Feb 2011, Nikola Le?i? wrote:
>
>> New lcdf-typetools source fails to compile with gcc-3.4.2 (from the
>> base of an old FreeBSD-5). I don't know how complicated it is to
>> correct this and if it's worth trying at all because this is an
>> "extended" FreeBSD support and affects only a tiny minority of users. I
>> mean, --without-lcdf-typetools would be perfectly acceptable here.
>>
>> Still, on FreeBSD-5.5/amd64, gcc 3.4.2:
>>
>> g++ -Wimplicit -Wreturn-type -Wno-unknown-pragmas -DHAVE_CONFIG_H -I.
>> -I/root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/liblcdf -I..
>> -I/root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include -g -O2
>> -MT error.o -MD -MP -MF .deps/error.Tpo -c -o error.o
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/liblcdf/error.cc
>> In file included from
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include/lcdf/error.hh:4,
>>
>> from
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/liblcdf/error.cc:24:
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include/lcdf/string.hh:607:
>> error: a casts to a type other than an integral or enumeration type cannot
>> appear in a constant-expression
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include/lcdf/string.hh:607:
>> error: '->' cannot appear in a constant-expression
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include/lcdf/string.hh:607:
>> error: `&' cannot appear in a constant-expression
>> /root/TeXLive-Devel/trunk/Build/source/texk/lcdf-typetools/include/lcdf/string.hh:608:
>> error: enumerator value for `MEMO_SPACE' not integer constant
>
> Hi Nikola,
>
> it seems your g++ chokes on
> enum {
> MEMO_SPACE = offsetof(memo_t, real_data)
> };
> that was introduced between 2.83 and 2.85 because the offset of real_data
> now depends on HAVE_STRING_PROFILING.
>
> I wonder why this isn't
> offsetof(struct memo_t, real_data)
>
> I have no problem with g++-3.4.6, but I see that my (linux) stddef.h
> from 3.3.3 has
> #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
> whereas 3.4.6 has
> #ifndef __cplusplus
> #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
> #else
> #define offsetof(TYPE, MEMBER) \
> (__offsetof__ (reinterpret_cast <size_t> \
> (&reinterpret_cast <const volatile char &> \
> (static_cast<TYPE *> (0)->MEMBER))))
> #endif
>
> Can you please have a look and tell us what is your offsetof (for C++).
>
> And the comments about `-Wno-invalid-offsetof' in gcc.info seem to indicate
> that this kind of using offsetoff might be problematic.
>
> Hi Eddie,
>
> any comments?
>
> Regards
> Peter Breitenlohner <peb at mppmu.mpg.de>


More information about the tlbuild mailing list