check_balanced: update to use stree
[smatch.git] / smatch_scripts / show_unreachable.sh
blob7402615dc67090cfb18debb5fe8c1c6b4dc6763a
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 kernel_ignore_functions="DLM_ASSERT
35 BT_SI_SM_RETURN
36 BT_STATE_CHANGE
37 PARSE_ERROR1
38 PARSE_ERROR
39 CMDINSIZE
40 PROCESS_SYSTEM_PARAM
41 RETURN_STATUS
42 ar9170_regwrite_result
43 module_put_and_exit
44 SEG32
45 CASE_PIPExTRE
48 grep 'ignoring unreachable' $file | cut -d ' ' -f1 | while read loc; do
49 code_file=$(echo $loc | cut -d ':' -f 1)
50 line=$(echo $loc | cut -d ':' -f 2)
52 if [ "$mode" = "kernel" ] ; then
53 # BUG() is sometimes defined away on embedded systems
54 if tail -n +$(($line - 1)) $code_file | head -n 1 | \
55 egrep -qw '(BUG|BT_STATE_CHANGE)' ; then
56 continue;
58 skip=0
59 line_txt=$(tail -n +$(($line)) $code_file | head -n 1)
60 for func in $kernel_ignore_functions ; do
61 if echo "$line_txt" | egrep -qw $func ; then
62 skip=1
63 break
65 done
66 if [ "$skip" == 1 ] ; then
67 continue
71 if [ "$nobreak" = "yes" ] ; then
72 if tail -n +$(($line)) $code_file | head -n 1 | grep -qw 'break' ; then
73 continue;
77 echo "========================================================="
78 echo $code_file:$line
79 tail -n +$(($line - ($context - 1))) $code_file | head -n $(($context - 1))
80 echo "---------------------------------------------------------"
81 tail -n +${line} $code_file | head -n $context
82 done