tinycc-devel
[Top][All Lists]
Advanced

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

[Tinycc-devel] Unknown type size error with forward declaration of point


From: markr_mlist
Subject: [Tinycc-devel] Unknown type size error with forward declaration of pointer array
Date: Sat, 19 Sep 2009 11:42:13 -0400

I actually came across this problem when compiling Lua, and the only pertinent Google result I found was on the Lua mailing list:  http://lua-users.org/lists/lua-l/2006-09/msg00196.html.  Specifically, I was compiling {LuaRoot}/etc/all.c, if you need to reproduce the entire problem.

As a minimal example:

/*** begin example ***/
#include <stdio.h>

const char *const foo [];  /* <-- problem line here */

const char *const foo [] = { "one", "two", "three" } ;

int main()
{
    int i;
    for (i = 0 ; i < 3 ; i++)
    {
        printf("%s\n", foo[i]);
    }
    return 0;
}
/*** end example ***/

GCC compiles this with no warnings or errors.  TCC gives me the error "fail.c:3: unknown type size".  If I comment out the forward declaration, it works fine (not that you need it in this small of an example anyway).  If I explicitly declare the size of the array (3, of course), it compiles and runs fine.  It also works fine if I forward declare foo as an extern array without an indicated size.  I've tried TCC versoin 0.9.24 on Ubuntu, and TCC version 0.9.25 through Wine on Ubuntu, both with the same results.

Section 8.3 of the TCC documentation does say that TCC does one pass, except "For initialized arrays with unknown size, a first pass is done to count the number of elements."  I understand that fewer passes is what keeps TCC so much faster than the competition, but I guess I don't know enough about compilers to infer whether that forward declaration *should* be enough to cover in a single pass.

Lua does claim that it "is implemented in pure ANSI C and compiles unmodified in all platforms that have an ANSI C compiler."  For what it's worth, using the Makefile, Lua compiles fine under TCC, but it's only when I try to compile all.c (which basically #include's everything into one flat file, does not use a makefile) that the problem arises.   The first offending line is

LUAI_DATA const char * const luaT_typenames[];

where LUAI_DATA is just defined as empty when compiling with all.c, otherwise LUAI_DATA is defined to be extern (which is why the Makefile approach works, apparently).

So, is this a bug on Lua's side (incorrectly defining LUAI_DATA) or is this a bug on TCC's side?



Start making money with PeopleString!
reply via email to

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