# New Ticket Created by Kevin Tew # Please include the string: [perl #39802] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=39802 >
turning up the warnings levels in gcc as much as we can =item C<--cage> [CAGE] compile includes many additional warnings Configure.pl | 5 +++ config/auto/gcc.pm | 87 +++++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 5 deletions(-) Kevin
Index: Configure.pl =================================================================== --- Configure.pl (revision 13258) +++ Configure.pl (working copy) @@ -52,6 +52,10 @@ Sets the location where parrot will be installed. +=item C<--cage> + +[CAGE] compile includes many additional warnings + =item C<--ask> This turns on the user prompts. @@ -284,6 +288,7 @@ --verbose-step=regex Set verbose for step matching description --nomanicheck Don't check the MANIFEST --prefix Set the installation prefix + --cage [CAGE] compile includes many additional warnings --ask Have Configure ask for commonly-changed info Index: config/auto/gcc.pm =================================================================== --- config/auto/gcc.pm (revision 13258) +++ config/auto/gcc.pm (working copy) @@ -127,18 +127,95 @@ # us -Wpadded may prove interesting, or even noisy. # -Wunreachable-code might be useful in a non debugging version ); + my @cage_opt_and_vers = ( + 0 => + " -std=c89 -Wall -Wextra -Wundef -Wbad-function-cast -Wmissing-declarations -Wredundant-decls -Wnested-externs -Wlong-long" + . " -Wfloat-equal -Wpadded -Wunreachable-code" + + #. "-fsyntax-only " + #. "-pedantic -pedantic-errors " + #. " -w " + #. " -Werror " + . " -Wextra -Wall -Waggregate-return -Wcast-align -Wcast-qual -Wchar-subscripts " + . " -Wcomment -Wconversion -Wno-deprecated-declarations -Wdisabled-optimization -Wno-div-by-zero -Wno-endif-labels " + . " -Werror-implicit-function-declaration -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 -Wno-format-extra-args -Wformat-nonliteral " + . " -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wimport -Wno-import -Winit-self " + . " -Winline -Winvalid-pch -Wlarger-than-4096 -Wlong-long -Wmain -Wmissing-braces -Wmissing-field-initializers " + . " -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn -Wno-multichar -Wnonnull -Wpacked " + . " -Wpadded -Wparentheses -Wpointer-arith -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare " + . " -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wswitch-enum -Wsystem-headers -Wtrigraphs -Wundef " + + #. " -Wuninitialized " + # requires -O + . " -Wunknown-pragmas -Wunreachable-code -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value " + . " -Wunused-variable -Wwrite-strings -Wvariadic-macros " + #."-Wmost (APPLE ONLY)" + + #C-only Warning Options + . " -Wbad-function-cast -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wold-style-definition -Wstrict-prototypes " + #. " -Wtraditional " + . " -Wdeclaration-after-statement -Wno-discard-qual -Wno-pointer-sign ", + + #"-Wall -Wstrict-prototypes -Wmissing-prototypes -Winline -Wshadow -Wpointer-arith -Wcast-qual -Wwrite-strings -Waggregate-return -Winline -W -Wno-unused", + # others; ones we might like marked with ? + # ? -Wundef for undefined idenfiers in #if + # ? -Wbad-function-cast + # Warn whenever a function call is cast to a non-matching type + # ? -Wmissing-declarations + # Warn if a global function is defined without a previous + # declaration -Wmissing-noreturn + # ? -Wredundant-decls + # Warn if anything is declared more than once in the same scope, + # ? -Wnested-externs + # Warn if an `extern' declaration is encountered within an + # function. -Wlong-long + # Ha. this is the default! with -pedantic. + # -Wno-long-long for the nicest bit of C99 + # + # -Wcast-align is now removed: it gives too many false positives + # e.g. when accessing registers - this is all aligned + + 2.7 => "", + 2.8 => "", + #2.8 => "-Wsign-compare", + 2.95 => "", + + # 2.95 does align functions per default -malign-functions=4 + # where the argument is used as a power of 2 + # 3.x does not align functions per default, its turned on with + # -O2 and -O3 + # -falign-functions=16 is the real alignment, no exponent + 3.0 => "", + #3.0 => "-Wformat-nonliteral -Wformat-security -Wpacked " + # . "-Wdisabled-optimization -mno-accumulate-outgoing-args " + # . "-Wno-shadow -falign-functions=16 ", + 4.0 => "", + 4.1 => "", + 4.2 => "", + + # -Wsequence-point is part of -Wall + # -Wfloat-equal may not be what we want + # We shouldn't be using __packed__, but I doubt -Wpacked will harm + # us -Wpadded may prove interesting, or even noisy. + # -Wunreachable-code might be useful in a non debugging version + ); $warns = ""; - while (my ($vers, $opt) = splice @opt_and_vers, 0, 2) { + my @warning_options = ([EMAIL PROTECTED]); + push @warning_options, [EMAIL PROTECTED] if $conf->options->get('cage'); + foreach my $curr_opt_and_vers (@warning_options) + { + while (my ($vers, $opt) = splice @$curr_opt_and_vers, 0, 2) { last if $vers > $gccversion; next unless $opt; # Ignore blank lines if ($opt =~ /-mno-accumulate-outgoing-args/) { - use Config; - if ($Config{archname} !~ /86/) { - $opt =~ s/-mno-accumulate-outgoing-args//; - } + use Config; + if ($Config{archname} !~ /86/) { + $opt =~ s/-mno-accumulate-outgoing-args//; + } } $warns .= " $opt"; + } } # if the user overwrites the warnings remove it from $warns