flag-o-matic.eclass: don't use -Werror in test-flag-PROG(), bug #712488
authorSergei Trofimovich <slyfox@gentoo.org>
Fri, 20 Mar 2020 22:28:19 +0000 (22:28 +0000)
committerSergei Trofimovich <slyfox@gentoo.org>
Fri, 20 Mar 2020 22:33:36 +0000 (22:33 +0000)
-Werror filters out too much (everything) if used compiler happens
to always generate warnings. Let's drop cosmetic stripping of
ignored flags until we really need it. Then we can consider more
selective filtering by using more targeted -Werror= options.

Reported-by: Anton Gubarkov
Closes: https://bugs.gentoo.org/712488
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
eclass/flag-o-matic.eclass
eclass/tests/flag-o-matic.sh

index 9ef9ac3685e00f48268e71f40812b42c72fd8faf..d8111fb9e38f4c07b009ca1a60c23656a84b7c43 100644 (file)
@@ -487,11 +487,15 @@ test-flag-PROG() {
 
        printf "%s\n" "${in_src}" > "${test_in}" || die "Failed to create '${test_in}'"
 
+       # Don't set -Werror as there are cases when benign
+       # always-on warnings filter out all flags like bug #712488.
+       # We'll have to live with potential '-Wunused-command-line-argument'.
+       # flags.
+       #
+       # We can add more selective detection of no-op flags via
+       # '-Werror=ignored-optimization-argument' and similar error options.
        local cmdline=(
                "${comp[@]}"
-               # Clang will warn about unknown gcc flags but exit 0.
-               # Need -Werror to force it to exit non-zero.
-               -Werror
                "$@"
                # -x<lang> options need to go before first source file
                "${cmdline_extra[@]}"
@@ -499,14 +503,7 @@ test-flag-PROG() {
                "${test_in}" -o "${test_out}"
        )
 
-       if ! "${cmdline[@]}" &>/dev/null; then
-               # -Werror makes clang bail out on unused arguments as well;
-               # try to add -Qunused-arguments to work-around that
-               # other compilers don't support it but then, it's failure like
-               # any other
-               cmdline+=( -Qunused-arguments )
-               "${cmdline[@]}" &>/dev/null
-       fi
+       "${cmdline[@]}" &>/dev/null
 }
 
 # @FUNCTION: test-flag-CC
index 229dff52af945d6c4f7fc0b83571cf7b98067657..6dfacb04c07777d80982ae83244a8b9e19023ba4 100755 (executable)
@@ -161,10 +161,12 @@ out=$(CC=clang test-flags-CC -finvalid-flag)
 [[ $? -ne 0 && -z ${out} ]]
 ftend
 
-tbegin "test-flags-CC (gcc-valid but clang-invalid flags)"
-out=$(CC=clang test-flags-CC -finline-limit=1200)
-[[ $? -ne 0 && -z ${out} ]]
-ftend
+### '-finline-limit=1200' is 'ignored' flag, not invalid.
+### We don't filter out ignored flags currently, bug #712488
+#tbegin "test-flags-CC (gcc-valid but clang-invalid flags)"
+#out=$(CC=clang test-flags-CC -finline-limit=1200)
+#[[ $? -ne 0 && -z ${out} ]]
+#ftend
 
 tbegin "test-flags-CC (unused flags w/clang)"
 out=$(CC=clang test-flags-CC -Wl,-O1)