commit: e4897399d1fa5b2768205493fde183ce871533d3
Author: Kerin Millar <kfm <AT> plushkava <DOT> net>
AuthorDate: Thu May 22 16:50:38 2025 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 30 07:37:28 2025 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e4897399
90gcc-warnings: conditionally call gcc_warn_check
Call the gcc_warn_check function on the condition that PORTAGE_LOG_FILE
be readable. This saves a level of indentation for the entirety of the
function's body.
Signed-off-by: Kerin Millar <kfm <AT> plushkava.net>
Signed-off-by: Sam James <sam <AT> gentoo.org>
bin/install-qa-check.d/90gcc-warnings | 401 +++++++++++++++++-----------------
1 file changed, 201 insertions(+), 200 deletions(-)
diff --git a/bin/install-qa-check.d/90gcc-warnings
b/bin/install-qa-check.d/90gcc-warnings
index 2e9db52b2b..80ec98af93 100644
--- a/bin/install-qa-check.d/90gcc-warnings
+++ b/bin/install-qa-check.d/90gcc-warnings
@@ -6,214 +6,215 @@ gcc_warn_check() {
local f
# Evaluate misc gcc warnings
- if [[ -n ${PORTAGE_LOG_FILE} && -r ${PORTAGE_LOG_FILE} ]] ; then
- # In debug mode, this variable definition and corresponding
grep calls
- # will produce false positives if they're shown in the trace.
- local reset_debug=0
- if [[ $- == *x* ]] ; then
- set +x
- reset_debug=1
- fi
+ # In debug mode, this variable definition and corresponding grep calls
+ # will produce false positives if they're shown in the trace.
+ local reset_debug=0
+ if [[ $- == *x* ]] ; then
+ set +x
+ reset_debug=1
+ fi
- local m msgs=(
- # only will and does, no might :)
- 'warning: .*will.*\[-Wstrict-aliasing\]'
- 'warning: .*does.*\[-Wstrict-aliasing\]'
- 'warning: .*\[-Wrestrict\]'
- # strict aliasing violation in C++ (Clang)
- 'warning: .*\[-Wundefined-reinterpret-cast\]'
-
- # implicit declaration of function ‘...’
- 'warning: .*\[-Wimplicit-function-declaration\]'
- # with -Wall, goes in pair with
-Wimplicit-function-declaration
- # but without -Wall, we need to assert for it alone
- 'warning: .*incompatible implicit declaration of
built-in function'
- 'warning: .*\[-Wbuiltin-declaration-mismatch\]'
-
- # 'is used uninitialized in this function' and some more
- 'warning: .*\[-Wuninitialized\]'
- # comparisons like ‘X<=Y<=Z’ do not have their
mathematical meaning
- 'warning: .*mathematical meaning*\[-Wparentheses\]'
- # null argument where non-null required
- 'warning: .*\[-Wnonnull\]'
-
- # array subscript is above/below/outside array bounds
(FORTIFY_SOURCE)
- 'warning: .*\[-Warray-bounds\]'
- # attempt to free a non-heap object
- 'warning: .*\[-Wfree-nonheap-object\]'
- # those three do not have matching -W flags, it seems
- 'warning: .*will always overflow destination buffer'
- # compile-time part of FORTIFY_SOURCE
- # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR88443)
- #'warning: .*\[-Wstringop-overflow\]'
- # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR97048)
- #'warning: .*\[-Wstringop-overread\]'
- # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR88781)
- #'warning: .*\[-Wstringop-truncation\]'
- # clang-only, equivalent of -Wstringop-overflow
- 'warning: .*\[-Wfortify-source\]'
- 'warning: .*assuming pointer wraparound does not occur'
- 'warning: .*escape sequence out of range'
-
- # all clang
- 'warning: .*\[-Wstrlcpy-strlcat-size\]'
- 'warning: .*\[-Wstrncat-size\]'
- 'warning: .*\[-Wsuspicious-bzero\]'
- 'warning: .*\[-Wvarargs\]'
-
- # left-hand operand of comma expression has no effect
- 'warning: .*left.*comma.*\[-Wunused-value\]'
- # converting to non-pointer type ... from NULL and likes
- 'warning: .*\[-Wconversion-null\]'
- # NULL used in arithmetic
- 'warning: .*NULL.*\[-Wpointer-arith\]'
- # pointer to a function used in arithmetic and likes
- 'warning: .*function.*\[-Wpointer-arith\]'
- # the address of ... will never be NULL and likes
- # (uses of function refs & string constants in
conditionals)
- # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR103360)
- #'warning: .*\[-Waddress\]'
-
- # TODO: we want to enable these but bash currently
triggers
- # them with a trick in random.c where it intentionally
wants
- # some truncation :(
- #
- # warning: assignment/initialization to ... from ...
makes integer from pointer without cast
- #'warning: .*\[-Wint-conversion\]'
- # warning: cast to ... from integer of different size
(or smaller size)
- #'warning: .*\[-Wint-to-pointer-cast\]'
- # warning: cast to ... from (smaller) integer type
- #'warning: .*\[-Wint-to-void-pointer-cast\]'
- # warning: cast from ... to integer of different size
- #'warning: .*\[-Wpointer-to-int-cast\]'
-
- # -Wformat
- # TODO: comment out some time in future for time_t &
LFS preparedness
- #'warning: .*\[-Wformat=\]'
- # -Wformat variants
- 'warning: .*too few arguments for format'
- 'warning: .*missing sentinel in function
call.*\[-Wformat=\]'
- 'warning: .*\[-Wformat-truncation\]'
- # format ... expects a matching ... argument
- # (iow, too few arguments for format in new wording :))
- 'warning: .*matching.*\[-Wformat=\]'
-
- # function returns address of local variable
- # XXX: Commented out for bug #925460
(https://gcc.gnu.org/PR93644)
- #'warning: .*\[-Wreturn-local-addr\]'
- # missing return at end of function, or non-void return
in a void function
- # (clang at least aggressively optimises on this)
- 'warning: .*\[-Wreturn-type\]'
- # argument to sizeof ... is the same expression as the
source
- 'warning: .*\[-Wsizeof-pointer-memaccess\]'
- # iteration invokes undefined behavior
- 'warning: .*\[-Waggressive-loop-optimizations\]'
- # conversion between pointers that have incompatible
types
- 'warning: .*\[-Wincompatible-pointer-types\]'
- # more specific form of -Wincompatible-pointer-types
(Clang)
- 'warning: .*\[-Wincompatible-function-pointer-types\]'
- # these will fail with CFI
(https://reviews.llvm.org/D134831)
- # (gcc lacks -strict)
- #'warning: .*\[-Wcast-function-type\]'
- 'warning: .*\[-Wcast-function-type-strict\]'
- # using wrong deallocator, e.g. using free() on object
allocated using my_malloc()
- # when my_malloc() is annotated as needing my_free().
- 'warning: .*\[-Wmismatched-dealloc\]'
- # clobbered: Warn for variables that might be changed
by longjmp or vfork
- # (This warning is also enabled by -Wextra.)
- 'warning: .*\[-Wclobbered\]'
- # LTO type mismatch
(https://wiki.gentoo.org/wiki/Project:Toolchain/LTO)
- 'warning: .*\[-Wlto-type-mismatch\]'
- # ODR
(https://wiki.gentoo.org/wiki/Project:Toolchain/LTO)
- 'warning: .*\[-Wodr\]'
- # warning: argument value A will result in undefined
behaviour (Clang)
- 'warning: .*\[-Wargument-undefined-behaviour\]'
- # XXX: Commented out because of GCC FPs
(https://gcc.gnu.org/PR86172)
- #'warning: .*\[-Wnull-dereference\]'
-
- # general sensible warnings (will be rejected by modern
compilers soon)
- 'warning: .*\[-Wmain\]'
- 'warning: .*\[-Wimplicit-int\]'
- 'warning: .*\[-Wstring-compare\]'
-
- # this may be valid code :/
- #': warning: multi-character character constant'
- # need to check these two ...
- #': warning: assuming signed overflow does not occur
when'
- #': warning: comparison with string literal results in
unspecified behav'
- # yacc/lex likes to trigger this one
- #': warning: extra tokens at end of .* directive'
- # only gcc itself triggers this ?
- #': warning: .*noreturn.* function does return'
- # these throw false positives when 0 is used instead of
NULL
- #': warning: missing sentinel in function call'
- #': warning: not enough variable arguments to fit a
sentinel'
- )
-
- # join all messages into one grep-expression
- local joined_msgs
- printf -v joined_msgs '%s|' "${msgs[@]}"
- joined_msgs=${joined_msgs%|}
-
- local abort="no"
- local grep_cmd=grep
- [[ ${PORTAGE_LOG_FILE} = *.gz ]] && grep_cmd=zgrep
-
- # Force C locale to work around slow multibyte locales, bug
#160234
- # Force text mode as newer grep will treat non-ASCII (e.g.
UTF-8) as
- # binary when we run in the C locale.
- f=$(LC_ALL='C' sed -E -e $'s/\033\[[0-9;]*[A-Za-z]//g' <
"${PORTAGE_LOG_FILE}" | LC_CTYPE=C LC_COLLATE=C "${grep_cmd}" -E -a
"${joined_msgs}" | uniq)
- if [[ -n ${f} ]] ; then
- abort="yes"
-
- # for now, don't make this fatal (see bug #337031)
- #if [[ ${f} == *'will always overflow destination
buffer'* ]]; then
- # always_overflow=yes
- #fi
-
- # Disabled for now because too many failures. bug
#870412.
- #if [[ ${f} == *'[-Wimplicit-function-declaration]'* ]]
; then
- # implicit_func_decl=yes
- #fi
-
- if [[ ${always_overflow} = yes || ${implicit_func_decl}
= yes ]] ; then
- eerror
- eerror "QA Notice: Package triggers severe
warnings which indicate that it"
- eerror " may exhibit random runtime
failures."
- eerror
- eerror "${f}"
- eerror
- eerror " Please file a bug about this at
https://bugs.gentoo.org/"
- eerror " with the maintainer of the package."
- eerror
- else
- __vecho -ne '\n'
- eqawarn "QA Notice: Package triggers severe
warnings which indicate that it"
- eqawarn " may exhibit random runtime
failures."
- eqawarn "${f}"
- __vecho -ne '\n'
- fi
+ local m msgs=(
+ # only will and does, no might :)
+ 'warning: .*will.*\[-Wstrict-aliasing\]'
+ 'warning: .*does.*\[-Wstrict-aliasing\]'
+ 'warning: .*\[-Wrestrict\]'
+ # strict aliasing violation in C++ (Clang)
+ 'warning: .*\[-Wundefined-reinterpret-cast\]'
+
+ # implicit declaration of function ‘...’
+ 'warning: .*\[-Wimplicit-function-declaration\]'
+ # with -Wall, goes in pair with -Wimplicit-function-declaration
+ # but without -Wall, we need to assert for it alone
+ 'warning: .*incompatible implicit declaration of built-in
function'
+ 'warning: .*\[-Wbuiltin-declaration-mismatch\]'
+
+ # 'is used uninitialized in this function' and some more
+ 'warning: .*\[-Wuninitialized\]'
+ # comparisons like ‘X<=Y<=Z’ do not have their mathematical
meaning
+ 'warning: .*mathematical meaning*\[-Wparentheses\]'
+ # null argument where non-null required
+ 'warning: .*\[-Wnonnull\]'
+
+ # array subscript is above/below/outside array bounds
(FORTIFY_SOURCE)
+ 'warning: .*\[-Warray-bounds\]'
+ # attempt to free a non-heap object
+ 'warning: .*\[-Wfree-nonheap-object\]'
+ # those three do not have matching -W flags, it seems
+ 'warning: .*will always overflow destination buffer'
+ # compile-time part of FORTIFY_SOURCE
+ # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR88443)
+ #'warning: .*\[-Wstringop-overflow\]'
+ # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR97048)
+ #'warning: .*\[-Wstringop-overread\]'
+ # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR88781)
+ #'warning: .*\[-Wstringop-truncation\]'
+ # clang-only, equivalent of -Wstringop-overflow
+ 'warning: .*\[-Wfortify-source\]'
+ 'warning: .*assuming pointer wraparound does not occur'
+ 'warning: .*escape sequence out of range'
+
+ # all clang
+ 'warning: .*\[-Wstrlcpy-strlcat-size\]'
+ 'warning: .*\[-Wstrncat-size\]'
+ 'warning: .*\[-Wsuspicious-bzero\]'
+ 'warning: .*\[-Wvarargs\]'
+
+ # left-hand operand of comma expression has no effect
+ 'warning: .*left.*comma.*\[-Wunused-value\]'
+ # converting to non-pointer type ... from NULL and likes
+ 'warning: .*\[-Wconversion-null\]'
+ # NULL used in arithmetic
+ 'warning: .*NULL.*\[-Wpointer-arith\]'
+ # pointer to a function used in arithmetic and likes
+ 'warning: .*function.*\[-Wpointer-arith\]'
+ # the address of ... will never be NULL and likes
+ # (uses of function refs & string constants in conditionals)
+ # XXX: Commented out because of gcc FPs
(https://gcc.gnu.org/PR103360)
+ #'warning: .*\[-Waddress\]'
+
+ # TODO: we want to enable these but bash currently triggers
+ # them with a trick in random.c where it intentionally wants
+ # some truncation :(
+ #
+ # warning: assignment/initialization to ... from ... makes
integer from pointer without cast
+ #'warning: .*\[-Wint-conversion\]'
+ # warning: cast to ... from integer of different size (or
smaller size)
+ #'warning: .*\[-Wint-to-pointer-cast\]'
+ # warning: cast to ... from (smaller) integer type
+ #'warning: .*\[-Wint-to-void-pointer-cast\]'
+ # warning: cast from ... to integer of different size
+ #'warning: .*\[-Wpointer-to-int-cast\]'
+
+ # -Wformat
+ # TODO: comment out some time in future for time_t & LFS
preparedness
+ #'warning: .*\[-Wformat=\]'
+ # -Wformat variants
+ 'warning: .*too few arguments for format'
+ 'warning: .*missing sentinel in function call.*\[-Wformat=\]'
+ 'warning: .*\[-Wformat-truncation\]'
+ # format ... expects a matching ... argument
+ # (iow, too few arguments for format in new wording :))
+ 'warning: .*matching.*\[-Wformat=\]'
+
+ # function returns address of local variable
+ # XXX: Commented out for bug #925460
(https://gcc.gnu.org/PR93644)
+ #'warning: .*\[-Wreturn-local-addr\]'
+ # missing return at end of function, or non-void return in a
void function
+ # (clang at least aggressively optimises on this)
+ 'warning: .*\[-Wreturn-type\]'
+ # argument to sizeof ... is the same expression as the source
+ 'warning: .*\[-Wsizeof-pointer-memaccess\]'
+ # iteration invokes undefined behavior
+ 'warning: .*\[-Waggressive-loop-optimizations\]'
+ # conversion between pointers that have incompatible types
+ 'warning: .*\[-Wincompatible-pointer-types\]'
+ # more specific form of -Wincompatible-pointer-types (Clang)
+ 'warning: .*\[-Wincompatible-function-pointer-types\]'
+ # these will fail with CFI (https://reviews.llvm.org/D134831)
+ # (gcc lacks -strict)
+ #'warning: .*\[-Wcast-function-type\]'
+ 'warning: .*\[-Wcast-function-type-strict\]'
+ # using wrong deallocator, e.g. using free() on object
allocated using my_malloc()
+ # when my_malloc() is annotated as needing my_free().
+ 'warning: .*\[-Wmismatched-dealloc\]'
+ # clobbered: Warn for variables that might be changed by
longjmp or vfork
+ # (This warning is also enabled by -Wextra.)
+ 'warning: .*\[-Wclobbered\]'
+ # LTO type mismatch
(https://wiki.gentoo.org/wiki/Project:Toolchain/LTO)
+ 'warning: .*\[-Wlto-type-mismatch\]'
+ # ODR (https://wiki.gentoo.org/wiki/Project:Toolchain/LTO)
+ 'warning: .*\[-Wodr\]'
+ # warning: argument value A will result in undefined behaviour
(Clang)
+ 'warning: .*\[-Wargument-undefined-behaviour\]'
+ # XXX: Commented out because of GCC FPs
(https://gcc.gnu.org/PR86172)
+ #'warning: .*\[-Wnull-dereference\]'
+
+ # general sensible warnings (will be rejected by modern
compilers soon)
+ 'warning: .*\[-Wmain\]'
+ 'warning: .*\[-Wimplicit-int\]'
+ 'warning: .*\[-Wstring-compare\]'
+
+ # this may be valid code :/
+ #': warning: multi-character character constant'
+ # need to check these two ...
+ #': warning: assuming signed overflow does not occur when'
+ #': warning: comparison with string literal results in
unspecified behav'
+ # yacc/lex likes to trigger this one
+ #': warning: extra tokens at end of .* directive'
+ # only gcc itself triggers this ?
+ #': warning: .*noreturn.* function does return'
+ # these throw false positives when 0 is used instead of NULL
+ #': warning: missing sentinel in function call'
+ #': warning: not enough variable arguments to fit a sentinel'
+ )
+
+ # join all messages into one grep-expression
+ local joined_msgs
+ printf -v joined_msgs '%s|' "${msgs[@]}"
+ joined_msgs=${joined_msgs%|}
+
+ local abort="no"
+ local grep_cmd=grep
+ [[ ${PORTAGE_LOG_FILE} = *.gz ]] && grep_cmd=zgrep
+
+ # Force C locale to work around slow multibyte locales, bug #160234
+ # Force text mode as newer grep will treat non-ASCII (e.g. UTF-8) as
+ # binary when we run in the C locale.
+ f=$(LC_ALL='C' sed -E -e $'s/\033\[[0-9;]*[A-Za-z]//g' <
"${PORTAGE_LOG_FILE}" | LC_CTYPE=C LC_COLLATE=C "${grep_cmd}" -E -a
"${joined_msgs}" | uniq)
+ if [[ -n ${f} ]] ; then
+ abort="yes"
+
+ # for now, don't make this fatal (see bug #337031)
+ #if [[ ${f} == *'will always overflow destination buffer'* ]];
then
+ # always_overflow=yes
+ #fi
+
+ # Disabled for now because too many failures. bug #870412.
+ #if [[ ${f} == *'[-Wimplicit-function-declaration]'* ]] ; then
+ # implicit_func_decl=yes
+ #fi
+
+ if [[ ${always_overflow} = yes || ${implicit_func_decl} = yes
]] ; then
+ eerror
+ eerror "QA Notice: Package triggers severe warnings
which indicate that it"
+ eerror " may exhibit random runtime failures."
+ eerror
+ eerror "${f}"
+ eerror
+ eerror " Please file a bug about this at
https://bugs.gentoo.org/"
+ eerror " with the maintainer of the package."
+ eerror
+ else
+ __vecho -ne '\n'
+ eqawarn "QA Notice: Package triggers severe warnings
which indicate that it"
+ eqawarn " may exhibit random runtime
failures."
+ eqawarn "${f}"
+ __vecho -ne '\n'
fi
+ fi
- [[ ${reset_debug} = 1 ]] && set -x
-
- if [[ ${abort} == "yes" ]] ; then
- if [[ ${gentoo_bug} = yes || ${always_overflow} = yes
|| ${implicit_func_decl} = yes ]] ; then
+ [[ ${reset_debug} = 1 ]] && set -x
+
+ if [[ ${abort} == "yes" ]] ; then
+ if [[ ${gentoo_bug} = yes || ${always_overflow} = yes ||
${implicit_func_decl} = yes ]] ; then
+ die "install aborted due to severe warnings shown above"
+ else
+ echo "Please do not file a Gentoo bug and instead" \
+ "report the above QA issues directly to the upstream" \
+ "developers of this software." | fmt -w 70 | \
+ while read -r line ; do eqawarn "${line}" ; done
+ eqawarn "Homepage: ${HOMEPAGE}"
+ has stricter ${FEATURES} && \
die "install aborted due to severe warnings
shown above"
- else
- echo "Please do not file a Gentoo bug and
instead" \
- "report the above QA issues directly to the
upstream" \
- "developers of this software." | fmt -w 70 | \
- while read -r line ; do eqawarn "${line}" ; done
- eqawarn "Homepage: ${HOMEPAGE}"
- has stricter ${FEATURES} && \
- die "install aborted due to severe
warnings shown above"
- fi
fi
fi
}
-gcc_warn_check
+if [[ ${PORTAGE_LOG_FILE} && -r ${PORTAGE_LOG_FILE} ]]; then
+ gcc_warn_check
+fi
+
: # guarantee successful exit
# vim:ft=bash