Marc Espie wrote:
> In article <k9lo7q$lsq$
1...@news-rocq.inria.fr>,
> Marc <
marc....@gmail.com> wrote:
>>clang a un -Weverything. gcc a toujours refusé de le créer, parce que
>>les utilisateurs risqueraient de mal l'utiliser et de faire perdre des
>>heures à tout le monde avec leurs râleries que tel warning ne leur plaît
>>pas (ils n'avaient qu'à ne pas l'activer !).
>
> Etat d'esprit un peu arrogant, genre on sait mieux que l'utilisateur ce
> dont il a envie. Rien de tres surprenant pour gcc donc.
En même temps, à ma connaissance, ils n'ont pas refusé un patch
implémentant -Weverything, ils ont juste refusé de l'écrire. Aussi,
certains développeurs de clang trouvent pénibles les utilisateurs qui
insistent pour râler dès qu'on ajoute un warning, qui se retrouve
automatiquement dans -Weverything, donc ce n'était pas de la parano
de la part de gcc. Donc ne pas oublier l'arrogance des utilisateurs,
pour faire pendant.
> Apres, le fonctionnement des warnings dans gcc est un vrai gros bordel.
> On ne peut qu'esperer que clang, etant parti de zero plus recemment, ne
> fera pas les memes conneries.
Ils s'y sont effectivement pris très différemment. Mais note quand
même que les warnings de gcc ont progressé ces dernières années.
Un mini-patch (à peine testé et sans doute largement améliorable) pour
avoir -Weverything dans gcc-4.8 (aller dans le sous-répertoire gcc/
avant de l'appliquer) :
Index: common.opt
===================================================================
--- common.opt (revision 194319)
+++ common.opt (working copy)
@@ -689,20 +689,24 @@ Common Var(warn_unused_variable) Warning
Warn when a variable is unused
Wcoverage-mismatch
Common Var(warn_coverage_mismatch) Init(1) Warning
Warn in case profiles in -fprofile-use do not match
Wvector-operation-performance
Common Var(warn_vector_operation_performance) Warning
Warn when a vector operation is compiled outside the SIMD
+Weverything
+Common Var(warn_everything) Warning
+Warn for no reason at all
+
Xassembler
Driver Separate
Xlinker
Driver Separate
Xpreprocessor
Driver Separate
Z
Index: optc-gen.awk
===================================================================
--- optc-gen.awk (revision 194319)
+++ optc-gen.awk (working copy)
@@ -25,21 +25,22 @@
# This program uses functions from opt-functions.awk and code from
# opt-read.awk.
#
# Usage: awk -f opt-functions.awk -f opt-read.awk -f optc-gen.awk \
# [-v header_name=header.h] < inputfile > options.c
# Dump that array of options into a C file.
END {
# Record first EnabledBy and LangEnabledBy uses.
-n_enabledby = 0;
+enabledby[0] = "Weverything";
+n_enabledby = 1;
for (i = 0; i < n_langs; i++) {
n_enabledby_lang[i] = 0;
}
for (i = 0; i < n_opts; i++) {
enabledby_arg = opt_args("EnabledBy", flags[i]);
if (enabledby_arg != "") {
n_enabledby_names = split(enabledby_arg, enabledby_names, " && ");
if (n_enabledby_names > 2) {
print "#error EnabledBy (Wfoo && Wbar && Wbaz) not currently supported"
}
@@ -72,20 +73,25 @@ for (i = 0; i < n_opts; i++) {
}
enabledby_arg = opt_args("LangEnabledBy", flags[i]);
if (enabledby_arg != "") {
enabledby_langs = nth_arg(0, enabledby_arg);
enabledby_name = nth_arg(1, enabledby_arg);
enabledby_posarg = nth_arg(2, enabledby_arg);
enabledby_negarg = nth_arg(3, enabledby_arg);
lang_enabled_by(enabledby_langs, enabledby_name, enabledby_posarg, enabledby_negarg);
}
+
+ if (flag_set_p("Warning", flags[i]) && flag_set_p("Var", flags[i])) {
+ enables["Weverything"] = enables["Weverything"] opts[i] ";";
+ enablesif["Weverything"] = enablesif["Weverything"] "" ";";
+ }
}
print "/* This file is auto-generated by optc-gen.awk. */"
print ""
n_headers = split(header_name, headers, " ")
for (i = 1; i <= n_headers; i++)
print "#include " quote headers[i] quote
print "#include " quote "opts.h" quote
print "#include " quote "intl.h" quote