Print this page
11506 smatch resync
   1 /*
   2  * Copyright (C) 2010 Dan Carpenter.
   3  *
   4  * This program is free software; you can redistribute it and/or
   5  * modify it under the terms of the GNU General Public License
   6  * as published by the Free Software Foundation; either version 2
   7  * of the License, or (at your option) any later version.
   8  *
   9  * This program is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details.
  13  *
  14  * You should have received a copy of the GNU General Public License
  15  * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
  16  */
  17 
  18 #include "smatch.h"

  19 
  20 static int my_id;
  21 static int returned;
  22 
  23 static void match_return(struct expression *ret_value)
  24 {
  25         if (__inline_fn)
  26                 return;
  27         if (is_reachable())
  28                 returned = 1;
  29 }
  30 
  31 static void match_func_end(struct symbol *sym)
  32 {
  33         if (__inline_fn)
  34                 return;


  35         if (!is_reachable() && !returned)
  36                 sm_info("info: add to no_return_funcs");
  37         returned = 0;
  38 }
  39 
  40 void check_no_return(int id)
  41 {
  42         if (!option_info)
  43                 return;
  44         my_id = id;
  45         add_hook(&match_return, RETURN_HOOK);
  46         add_hook(&match_func_end, END_FUNC_HOOK);
  47 }
   1 /*
   2  * Copyright (C) 2010 Dan Carpenter.
   3  *
   4  * This program is free software; you can redistribute it and/or
   5  * modify it under the terms of the GNU General Public License
   6  * as published by the Free Software Foundation; either version 2
   7  * of the License, or (at your option) any later version.
   8  *
   9  * This program is distributed in the hope that it will be useful,
  10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12  * GNU General Public License for more details.
  13  *
  14  * You should have received a copy of the GNU General Public License
  15  * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
  16  */
  17 
  18 #include "smatch.h"
  19 #include "smatch_slist.h"
  20 
  21 static int my_id;
  22 static int returned;
  23 
  24 static void match_return(struct expression *ret_value)
  25 {
  26         if (__inline_fn)
  27                 return;
  28         if (is_reachable())
  29                 returned = 1;
  30 }
  31 
  32 static void match_func_end(struct symbol *sym)
  33 {
  34         if (__inline_fn)
  35                 return;
  36         if (out_of_memory() || taking_too_long())
  37                 return;
  38         if (!is_reachable() && !returned)
  39                 sm_info("info: add to no_return_funcs");
  40         returned = 0;
  41 }
  42 
  43 void check_no_return(int id)
  44 {
  45         if (!option_info)
  46                 return;
  47         my_id = id;
  48         add_hook(&match_return, RETURN_HOOK);
  49         add_hook(&match_func_end, END_FUNC_HOOK);
  50 }