tinycc-devel
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]