|Subject:||Re: [Tinycc-devel] match formats and arguments exactly|
|Date:||Fri, 21 Jun 2019 15:33:24 +0200|
If I read you correctly, you want to protest if type does not strictly match format directive.
This is something even gcc does NOT ensure by default:
int i = 256;
const char* s = "Hello";
const void* p = s;
printf("%u %s\n", i, p);
$ gcc -std=c11 foo.c
$ => Ok
Only -Wformat (or -Wall) shows a warning on the 2nd printf, printf of i (a signed) is always Ok.
$ gcc -std=c11 -Wall foo.c
foo.c: In function 'main':
foo.c:11:21: warning: format '%s' expects argument of type 'char *', but argument 3 has type 'const void *' [-Wformat=]
printf("%u %s\n", i, p); ~^ %p
> On 21 Jun 2019, at 14:56, Christian Jullien <address@hidden> wrote:
> This is a valuable check but IMHO, it should be controlled by -Wformat (as
> GNU gcc) and set of false by default.
> Otherwise, I suspect tcc users will have a lot a new warnings.
I'm not implementing a new warning in TCC. I am only ensuring, by following C11 22.214.171.124:8 to the letter, that the TCC source code passes the strictest such checks that a C compiler could have, and also that a very exotic C compiler does not produce a non-functional binary when compiling TCC.
Considering the amount of code that good warnings represent, I think that a C compiler can either be tiny, or provide helpful warnings. The patches I have been sending, including the last one, only make TCC not exhibit undefined behavior, a more manageable goal that only requires small changes and do not make TCC significantly larger.
|[Prev in Thread]||Current Thread||[Next in Thread]|