
On Tue, 2006-05-23 at 09:00 +0300, Ville Tirronen wrote:
Hello, I think I've got a bug with c2hs 0.14.5. I have a program that compiles neatly on FC4 but fails when tried on x86_64 FC4.
c2hs fails on string.h. Attached are the string.h of the system and relevant .i file.
-----------
[aleator@thoth HopenCV]$ c2hs -k --cppopts='-I/usr/include/opencv' cvWrapLEO.h Image.chs c2hs: Error in C header file.
/usr/include/string.h:270: (column 99) [FATAL]
Syntax error! The symbol `__attribute__' does not fit here.
So the bug here is in parsing this bit: extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2))); In particular the current c2hs C parser only allows __asm__ decorations after __attribute__ decorations, not mixed as in this example. The reason it happened on one machine and not another might be to do with this __REDIRECT_NTH define: # ifdef __REDIRECT_NTH extern int __REDIRECT_NTH (strerror_r, (int __errnum, char *__buf, size_t __buflen), __xpg_strerror_r) __nonnull ((2)); # else extern int __xpg_strerror_r (int __errnum, char *__buf, size_t __buflen) __THROW __nonnull ((2)); # define strerror_r __xpg_strerror_r # endif Presumably on FC4 x86_64 it defines __REDIRECT_NTH and so gets the extra asm bit. We should try and find some clearer spec on the GNU C grammar. I was working from a yacc parser in gcc 3.3.x when I added some support for the __asm__ annotations. Duncan