[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] tinycc fails to parse mathcalls.h on armel
From: |
Thomas Preud'homme |
Subject: |
Re: [Tinycc-devel] tinycc fails to parse mathcalls.h on armel |
Date: |
Wed, 11 Aug 2010 18:32:29 +0200 |
User-agent: |
KMail/1.13.5 (Linux/2.6.32-5-amd64; KDE/4.4.5; x86_64; ; ) |
Le mercredi 11 août 2010 16:52:25, Thomas Preud'homme a écrit :
> Hi all,
>
[SNIP]
Ok, I might have found. mathcalls.h is provided on Debian by libc6-dev. I made
a diff between the version used in the last build and the current version and
found there has been some changes around the last inclusion of
bits/mathcalls.h (the one which declares each function with long double
operand). I looked at the code in parse_btype function in tccgen.c
Here is the relevant code:
t = 0;
while(1) {
switch(tok) {
(some "case")
case TOK_LONG:
next();
if ((t & VT_BTYPE) == VT_DOUBLE) {
t = (t & ~VT_BTYPE) | VT_LDOUBLE;
} else if ((t & VT_BTYPE) == VT_LONG) {
t = (t & ~VT_BTYPE) | VT_LLONG;
} else {
u = VT_LONG;
goto basic_type1;
}
break;
The test in TOK_LONG seems useless as t can't be different from 0 although I
missed some hidden define which touch the variable 't'
Thus, program branch to basic_type1:
basic_type1:
if ((t & VT_BTYPE) != 0)
error("too many basic types");
t |= u;
typespec_found = 1;
break;
t is zero so the test is ok, the type t become u (VT_LONG) and the type is
supposed to be found. All this happen when parsing the acos function (first
function in mathcalls.h). This function first call parse_btype, then a few
lines later it calls type_decl which parses "double" in that case. In
type_decl, the token is tested and as it is not an identifier, it calls
expect("identifiers"). The relevant code in type_decl is:
/* type identifier */
if (tok >= TOK_IDENT && (td & TYPE_DIRECT)) {
*v = tok;
next();
} else {
if (!(td & TYPE_ABSTRACT))
expect("identifier");
*v = 0;
}
So to conclude, it seems a bug exist in the way parse_btype look for long long
and long double. If not, please correct me quickly as I'll fix this this WE or
earlier.
Best regards,
Thomas
signature.asc
Description: This is a digitally signed message part.