[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Tinycc-devel] macro expansion bug

From: Neil Conway
Subject: [Tinycc-devel] macro expansion bug
Date: Thu, 04 Mar 2004 20:29:18 -0500
User-agent: Mozilla Thunderbird 0.5 (X11/20040304)

I'm trying to get PostgreSQL to compile using tcc. I've attached a reduced test case for the first problem I've encountered.

It seems that tcc attempts to parse the arguments to a macro call, even if those arguments are unused in the macro definition. In the test case, the '\054' is an illegal C literal, but since it is removed from the source file by the preprocessor, the test case should still be accepted by the compiler. The following text from C99 seems to confirm this (section, describing the "Translation phases"):

3. The source file is decomposed into preprocessing tokens and sequences of white-space characters (including comments). A source file shall not end in a partial preprocessing token or in a partial comment. Each comment is replaced by one space character. New-line characters are retained. Whether each nonempty sequence of white-space characters other than new-line is retained or replaced by one space character is implementation-defined.

4. Preprocessing directives are executed, macro invocations are expanded, and _Pragma unary operator expressions are executed.

GCC accepts the provided test case without error, tcc (from CVS) emits the following error:

$ tcc tcc_macro_expansion_bug_test_case.c
tcc_macro_expansion_bug_test_case.c:3: stray '\' in program

#define DATA(x)   extern int no_such_variable

DATA(insert OID = 16 (  bool       PGNSP PGUID  1 t b t \054 0   0 boolin 
boolout boolrecv boolsend - c p f 0 -1 0 _null_ _null_ ));

int main(void) { return 1; }

reply via email to

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