1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#!/bin/bash
# This script contains checks against known GCC warnings that indicate the
# compiled program may exhibit runtime failures (including crashes).
#
# The script is based on Gentoo Linux's portage install_qa_check() GCC checks.
if [ -z "$1" ]; then
echo "Usage: test.sh logfile"
exit 1
fi
LOG_FILE=$1
RED="\033[01;31m"
RESET="\033[00m"
msgs=(
# GCC warnings that may cause runtime failures
": warning: dereferencing type-punned pointer will break strict-aliasing rules"
": warning: dereferencing pointer .* does break strict-aliasing rules"
": warning: implicit declaration of function"
": warning: incompatible implicit declaration of built-in function"
": warning: is used uninitialized in this function" # we'll ignore "may" and "might"
": warning: comparisons like X<=Y<=Z do not have their mathematical meaning"
": warning: null argument where non-null required"
": warning: array subscript is below array bounds"
": warning: array subscript is above array bounds"
": warning: attempt to free a non-heap object"
": warning: .* called with .*bigger.* than .* destination buffer"
": warning: call to .* will always overflow destination buffer"
": warning: assuming pointer wraparound does not occur when comparing"
": warning: hex escape sequence out of range"
": warning: [^ ]*-hand operand of comma .*has no effect"
": warning: converting to non-pointer type .* from NULL"
": warning: NULL used in arithmetic"
": warning: passing NULL to non-pointer argument"
": warning: the address of [^ ]* will always evaluate as"
": warning: the address of [^ ]* will never be NULL"
": warning: too few arguments for format"
": warning: reference to local variable .* returned"
": warning: returning reference to temporary"
": warning: function returns address of local variable"
": warning: .*\\[-Wsizeof-pointer-memaccess\\]"
# GCC warnings that may indicate problems on 64 bit builds
": warning: .* makes pointer from integer without a cast"
": warning: cast to pointer from integer of different size"
)
i=0
while [[ -n ${msgs[${i}]} ]] ; do
m=${msgs[$((i++))]}
# force C locale to work around slow unicode locales
f=$(LC_ALL=C grep "${m}" $LOG_FILE)
if [[ -n ${f} ]] ; then
echo -ne '\n'
echo -e "${RED}QA Notice: Package triggers severe warnings which indicate that it${RESET}"
echo -e "${RED} may exhibit random runtime failures.${RESET}"
echo "${f}"
echo -ne '\n'
fi
done
|