[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] Compiling preprocessed files with tinycc?
From: |
Austin English |
Subject: |
Re: [Tinycc-devel] Compiling preprocessed files with tinycc? |
Date: |
Wed, 20 Mar 2013 13:01:10 -0700 |
On Tue, Mar 19, 2013 at 10:02 PM, Milutin Jovanović
<address@hidden> wrote:
>
> This is only a filename, or precisely extension issue. If you rename your
> intermediate file from "stateblock.i" to "stateblock-i.c", I believe
> everything should work.
>
> Miki.
>
>
> On 19 March 2013 23:10, Austin English <address@hidden> wrote:
>>
>> Howdy,
>>
>> I'm trying to narrow down a file that fails to compile with tinycc,
>> but works with gcc/clang. The exact error is:
>> stateblock.c:875: error: '}' expected (got ",")
>>
>> I wanted to use multidelta to reduce the testcase, but quickly found
>> that trying to recompile a preprocessed file with tcc fails:
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ tcc -E -I.
>> -I../../../include -DWINE_STRICT_PROTOTYPES
>> -DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
>> -fPIC -I/usr/include/freetype2 -o stateblock.i stateblock.c
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ echo $?
>> 0
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ tcc -c -I.
>> -I../../../include -DWINE_STRICT_PROTOTYPES
>> -DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
>> -fPIC -I/usr/include/freetype2 -o stateblock.o stateblock.i
>> stateblock.i:1: error: unrecognized file type
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ echo $?
>> 1
>>
>> but this works with gcc/clang:
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ gcc -E -I.
>> -I../../../include -DWINE_STRICT_PROTOTYPES
>> -DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
>> -fPIC -I/usr/include/freetype2 -o stateblock.i stateblock.c
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ echo $?
>> 0
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ gcc -c -I.
>> -I../../../include -DWINE_STRICT_PROTOTYPES
>> -DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
>> -fPIC -I/usr/include/freetype2 -o stateblock.o stateblock.i
>> address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ echo $?
>> 0
>>
>> Is it possible to get tcc to use the preprocessed source?
>>
>> Thanks in advance,
>> -Austin
>>
>> _______________________________________________
>> Tinycc-devel mailing list
>> address@hidden
>> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>
>
>
> _______________________________________________
> Tinycc-devel mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
Yes, this (mostly) works:
address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ tcc -E -I. -I.
-I../../../include -I../../../include -DWINE_STRICT_PROTOTYPES
-DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
-fPIC -I/usr/include/freetype2 -g -o stateblock-i.c stateblock.c
address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ tcc -c -I. -I.
-I../../../include -I../../../include -DWINE_STRICT_PROTOTYPES
-DWINE_NO_NAMELESS_EXTENSION -DWIDL_C_INLINE_WRAPPERS -D_REENTRANT
-fPIC -I/usr/include/freetype2 -g -o stateblock.o stateblock-i.c
stateblock-i.c:14963: error: invalid number
this exposes a second bug:
#define MAX_LANA 0xfe
...
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[MAX_LANA+1];
} LANA_ENUM, *PLANA_ENUM;
is expanded to:
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[0xfe+1];
} LANA_ENUM, *PLANA_ENUM;
whereas with gcc/clang:
typedef struct _LANA_ENUM
{
UCHAR length;
UCHAR lana[0xfe +1];
} LANA_ENUM, *PLANA_ENUM;
(I filed that here: https://savannah.nongnu.org/bugs/index.php?38557)
manually correcting that, I'm able to preprocess the problematic file down to:
address@hidden:~/src/wine-tcc/dlls/d3d8/tests$ cat stateblock.i.tcc.c
typedef struct _D3DVECTOR
{
float x;
float y;
float z;
} D3DMATRIX;
struct transform_data
{
D3DMATRIX view;
D3DMATRIX projection;
D3DMATRIX texture0;
D3DMATRIX texture7;
D3DMATRIX world0;
D3DMATRIX world255;
};
static const struct transform_data transform_default_data =
{
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
{{{
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f,
}}},
};
int main(void)
{
return 0;
}
compiling that minimalized source with gcc/clang does generate some
warnings, but does not fail (as it does with tcc). The full source
file generates no errors or warnings on gcc/clang.
See also https://savannah.nongnu.org/bugs/index.php?37243
--
-Austin