[Top][All Lists]

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

Re: [Tinycc-devel] Using tinycc for full source bootstrapping

From: Christian Jullien
Subject: Re: [Tinycc-devel] Using tinycc for full source bootstrapping
Date: Sun, 24 Sep 2017 14:57:20 +0200

A non-maintainer, here are my 2c:

As a matter of style, I like this idea but:
- tcc is probably already the smallest C compiler that compiles a decent C 
- as you probably noticed, there is not a huge activity on tcc these days and I 
personally prefer than one spent time on something immediately useful for tcc 
core, like C11 support.
- changing code that works is risky because we must ensure nothing is broken 
and tcc tests suite is far from complete (not counting the fact that we have no 
platform regression tests)
- it's a common practice for a compiler X to be compiled by itself. This has 
the advantage to test more code combinations it is supposed to support.
- it will introduce gratuitous diff that will make harder to identify real 

That said, and especially because the lack of a decent non-regression tests 
suite, I personally vote against your proposal.

-----Original Message-----
From: Tinycc-devel [mailto:address@hidden On Behalf Of Jan Nieuwenhuizen
Sent: dimanche 24 septembre 2017 09:48
To: address@hidden
Cc: Jeremiah Orians
Subject: [Tinycc-devel] Using tinycc for full source bootstrapping


Are you willing to consider discussing/taking patches that reduce the variety 
and complexity of C constructs used in TinyCC source code?

I have a list of about 20 unpolished patches[0] for constructs like:
comma operator

-    p[0] = x & 255, p[1] = x >> 8 & 255;
+    p[0] = x & 255; p[1] = x >> 8 & 255;

or (heterogeneous) initialzer lists

-    uint8_t buf[1000], *p = buf;
+    uint8_t buf[1000];
+    uint8_t *p = buf;

or function return derefencing

-    v = tok_alloc(astr.data, astr.size - 1)->tok;
+    TokenSym *tk = tok_alloc(astr.data, astr.size - 1);
+    v = tk->tok;

or complex field access

-    return table_ident[v]->sym_define;
+    TokenSym *t = table_ident[v];
+    Sym *s = t->sym_define;
+    return s;

or even struct by value assign

-    vtop->type = *type;
+    memcpy (&vtop->type, type, sizeof (CType));

that allow tcc to be compiled with a simpler C compiler, so that in time we 
could add to README something like

    - BOOTSTRAPPABLE!  Because tcc uses only a subset of C99 (C99--), it
    can be bootstrapped with a simple C compiler.

Knowing[1] that TinyCC can build Gcc (wow!) and building tcc is easier than 
building gcc, it is a good candidate for use in a bootstrap path.

The past couple of months I have been working to bootstrap tcc using mescc, a 
simple C compiler that can (almost) be bootstrapped from source.  I have just 
released[2] Mes 0.10 which can compile a modified version of mes-tcc, which can 
compile a trivial C program into a working executable.

Much work will have to be done before mes-tcc will be able to build a 
functional Gcc.  I would like to start by reducing the delta on tcc that I'm 

What do you think, is bootstrappable builds[4] something you would want to 
support and what could C99-- look like?


[0] https://gitlab.com/janneke/tinycc/commits/wip-mescc
[1] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00099.html
[2] http://lists.gnu.org/archive/html/guile-user/2017-09/msg00027.html
[3] http://bootstrappable.org

Jan Nieuwenhuizen <address@hidden> | GNU LilyPond http://lilypond.org Freelance 
IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

Tinycc-devel mailing list

reply via email to

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