Hello. grischka wrote in <61013ba4.4000...@gmx.de>: |Steffen Nurpmeso wrote: |>| gcc -Wwrite-strings -Werror=discarded-qualifiers |> |> Hm. Well then this part is not compatible it seems. | |Not compatible and cannot work: | | const char *xxx = "123"; /* no warning or error here */ | foo(); /* nobody said we would want this to stop */ | | $ tcc -Werror=write-strings ... | test.c:8: error: implicit declaration of function 'foo' | |Because -Wwrite-strings is NOT a warning option, really. | |And with | const char *xxx = "123"; | strcpy(xxx,"456"); |tcc would complain the "discarded const qualifier" but it cannot |track variables and code flow at compile-time in order to know |that some pointer came from a string, originally. | |Forget it.
I.. have a hard time parsing that, there already is -Wwrite-strings and -Werror=write-strings just propagates the according bit to make it an error state? That is all i know. For me the -Werror thing is done for now, sorry for the necessary fixups, i am a bit chaotic, for public shared repos i should just let things rest for a few days and when it is still ok, then push. In order to be better than what is now in -- what is missing is that "-Werror -Wno-error=write-strings" does not error out for any write-strings error, i.e., that specific errors can be disabled -- i had to wrap my head around the control flow of the code generator, because for write-strings (all others would work out), it just sets a VT_CONSTANT bit or so, then the generator continues over several levels, then some *_cast_* function actually emits a tcc_warning() (i could not figure out when the *_cast_* function that actually emits the write-strings is actually called, from looking say ten minutes). I thought about "quick and dirties": - Just call tcc_warning() directly: would result in two log messages unless the first would error out. I could rename NEED_WARNING() to WANT_WARNING() and add a WANT_ERROR(), and call tcc_warning() only then, in order to error out. - Add some field and another VT_ bit to indicate that field is set, in order to pick it up later. Then there could be another tcc_warn_or_err() which takes the actual "enum warn_option" as its first argument. I actually had this implementation fully implemented yesterday, with error1() still backing all of the warn functions, but for the write-strings case in the generator. - Add a bit like WARN_IGNORE_ERR_NEXT, set this from within NEED_WARNING() when a specific error is disabled but the warning as such shall occur. Then clear that bit again in tcc_warning() (aka error1()). I was thinking of this, and it also would work everywhere, but i did not know whether it will work out for the code generator and the write-strings thing. Because _if_ another error occurs in the generator _before_ we actually call tcc_warning(), then of course a hard error could be falsely ignored. |> I have never |> tested it that much, i usually step in when somewhere the build |> fails or spits warnings like grazy. Actually i have given up on |> managing the mess that happens from compiler development. | |Yes, the mess ... eventually it can be reduced: | |$ git log -1 --shortstat --oneline eadcee65 |eadcee65 macos: yet another tbd adjustment |8 files changed, 155 insertions(+), 169 deletions(-) | |14 lines less, same functionality (although Christian claims that |it's broken since, who knows... ;) | |> Unfortunately tcc_warning() does not take arguments itself ... | |I would (maybe) go for | tcc_warning(On_warn_badthing "bad thing did happen with %s", stuff); |with say | #define On_warn_badthing "\005" | |While not sooo nice without a comma, it would allow to "manage away" |quite a few existing 'if (s1->warn_...)' clauses already and seems |somewhat easily extensible. Linux syslog thing is also an idea, but not for code generator :) |With some luck one might be able to implement the feature (-Werror= etc.) |and come out with +/- zero or even less additional lines required. | |Currently it still adds 78 lines total though: |$ git diff --shortstat a7a138~1 2709b7 |8 files changed, 126 insertions(+), 48 deletions(-) The enum adds quite a bit on top of it; the addition of set_W_flag() is, hmm, not nice, but i hope the current approach is not too heavy. Keep on going tcc :) Ciao, --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt) _______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel