*new* check_macros: find macro precedence bugs
[smatch.git] / smatch_scripts / show_unreachable.sh
blob9fc0e7f7ee93d13a28caad237751ad7ef7352977
1 #!/bin/bash
3 context=6
4 while true ; do
5 if [ "$1" = "-C" ] ; then
6 shift
7 context=$1
8 shift
9 continue
11 if [ "$1" = "-k" ] ; then
12 shift
13 mode=kernel
14 continue
16 if [ "$1" = "-b" ] ; then
17 shift
18 nobreak=yes
19 continue
21 break
22 done
25 file=$1
26 if [[ "$file" = "" ]] ; then
27 echo "Usage: $0 [-C <lines>] [-b] [-k] <file with smatch messages>"
28 echo " -C <lines>: Print <lines> of context"
29 echo " -b : Ignore unreachable break statements"
30 echo " -k : Ignore some kernel defines"
31 exit 1
34 grep 'ignoring unreachable' $file | cut -d ' ' -f1,2 | while read code_file line ; do
36 if [ "$mode" = "kernel" ] ; then
37 # BUG() is sometimes defined away on embedded systems
38 if tail -n +$(($line - 1)) $code_file | head -n 1 | \
39 egrep -qw '(BUG|BT_STATE_CHANGE)' ; then
40 continue;
42 if tail -n +$(($line)) $code_file | head -n 1 | \
43 egrep -qw '(DLM_ASSERT|BT_SI_SM_RETURN|BT_STATE_CHANGE|PARSE_ERROR1|PARSE_ERROR|CMDINSIZE|PROCESS_SYSTEM_PARAM|RETURN_STATUS|ar9170_regwrite_result)' ; then
44 continue;
48 if [ "$nobreak" = "yes" ] ; then
49 if tail -n +$(($line)) $code_file | head -n 1 | grep -qw 'break' ; then
50 continue;
54 echo "========================================================="
55 echo $code_file $line
56 tail -n +$(($line - ($context - 1))) $code_file | head -n $(($context - 1))
57 echo "---------------------------------------------------------"
58 tail -n $line $code_file | head -n $context
59 done