Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as b5081130166a4f2e363f116e0e6b43d83422c947.

gcc/analyzer/ChangeLog:
        * region-model-impl-calls.cc (region_model::impl_call_alloca):
        Drop redundant return value.
        (region_model::impl_call_builtin_expect): Likewise.
        (region_model::impl_call_calloc): Likewise.
        (region_model::impl_call_malloc): Likewise.
        (region_model::impl_call_memset): Likewise.
        (region_model::impl_call_operator_new): Likewise.
        (region_model::impl_call_operator_delete): Likewise.
        (region_model::impl_call_strlen): Likewise.
        * region-model.cc (region_model::on_call_pre): Fix return value of
        known functions that don't have unknown side-effects.
        * region-model.h (region_model::impl_call_alloca): Drop redundant
        return value.
        (region_model::impl_call_builtin_expect): Likewise.
        (region_model::impl_call_calloc): Likewise.
        (region_model::impl_call_malloc): Likewise.
        (region_model::impl_call_memset): Likewise.
        (region_model::impl_call_strlen): Likewise.
        (region_model::impl_call_operator_new): Likewise.
        (region_model::impl_call_operator_delete): Likewise.

Signed-off-by: David Malcolm <dmalc...@redhat.com>
---
 gcc/analyzer/region-model-impl-calls.cc | 31 ++++++----------
 gcc/analyzer/region-model.cc            | 49 +++++++++++++++++--------
 gcc/analyzer/region-model.h             | 16 ++++----
 3 files changed, 53 insertions(+), 43 deletions(-)

diff --git a/gcc/analyzer/region-model-impl-calls.cc 
b/gcc/analyzer/region-model-impl-calls.cc
index eff8caa8c0a..e5a6cb2e154 100644
--- a/gcc/analyzer/region-model-impl-calls.cc
+++ b/gcc/analyzer/region-model-impl-calls.cc
@@ -207,7 +207,7 @@ call_details::get_or_create_conjured_svalue (const region 
*reg) const
 
 /* Handle the on_call_pre part of "alloca".  */
 
-bool
+void
 region_model::impl_call_alloca (const call_details &cd)
 {
   const svalue *size_sval = cd.get_arg_svalue (0);
@@ -215,7 +215,6 @@ region_model::impl_call_alloca (const call_details &cd)
   const svalue *ptr_sval
     = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
   cd.maybe_set_lhs (ptr_sval);
-  return true;
 }
 
 /* Handle a call to "__analyzer_describe".
@@ -274,18 +273,17 @@ region_model::impl_call_analyzer_eval (const gcall *call,
 
 /* Handle the on_call_pre part of "__builtin_expect" etc.  */
 
-bool
+void
 region_model::impl_call_builtin_expect (const call_details &cd)
 {
   /* __builtin_expect's return value is its initial argument.  */
   const svalue *sval = cd.get_arg_svalue (0);
   cd.maybe_set_lhs (sval);
-  return false;
 }
 
 /* Handle the on_call_pre part of "calloc".  */
 
-bool
+void
 region_model::impl_call_calloc (const call_details &cd)
 {
   const svalue *nmemb_sval = cd.get_arg_svalue (0);
@@ -302,7 +300,6 @@ region_model::impl_call_calloc (const call_details &cd)
        = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
       cd.maybe_set_lhs (ptr_sval);
     }
-  return true;
 }
 
 /* Handle the on_call_pre part of "error" and "error_at_line" from
@@ -397,7 +394,7 @@ region_model::impl_call_free (const call_details &cd)
 
 /* Handle the on_call_pre part of "malloc".  */
 
-bool
+void
 region_model::impl_call_malloc (const call_details &cd)
 {
   const svalue *size_sval = cd.get_arg_svalue (0);
@@ -408,7 +405,6 @@ region_model::impl_call_malloc (const call_details &cd)
        = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
       cd.maybe_set_lhs (ptr_sval);
     }
-  return true;
 }
 
 /* Handle the on_call_pre part of "memcpy" and "__builtin_memcpy".  */
@@ -439,7 +435,7 @@ region_model::impl_call_memcpy (const call_details &cd)
 
 /* Handle the on_call_pre part of "memset" and "__builtin_memset".  */
 
-bool
+void
 region_model::impl_call_memset (const call_details &cd)
 {
   const svalue *dest_sval = cd.get_arg_svalue (0);
@@ -457,12 +453,11 @@ region_model::impl_call_memset (const call_details &cd)
                                                          num_bytes_sval);
   check_region_for_write (sized_dest_reg, cd.get_ctxt ());
   fill_region (sized_dest_reg, fill_value_u8);
-  return true;
 }
 
 /* Handle the on_call_pre part of "operator new".  */
 
-bool
+void
 region_model::impl_call_operator_new (const call_details &cd)
 {
   const svalue *size_sval = cd.get_arg_svalue (0);
@@ -473,14 +468,13 @@ region_model::impl_call_operator_new (const call_details 
&cd)
        = m_mgr->get_ptr_svalue (cd.get_lhs_type (), new_reg);
       cd.maybe_set_lhs (ptr_sval);
     }
-  return false;
 }
 
 /* Handle the on_call_pre part of "operator delete", which comes in
    both sized and unsized variants (2 arguments and 1 argument
    respectively).  */
 
-bool
+void
 region_model::impl_call_operator_delete (const call_details &cd)
 {
   const svalue *ptr_sval = cd.get_arg_svalue (0);
@@ -490,7 +484,6 @@ region_model::impl_call_operator_delete (const call_details 
&cd)
         poisoning pointers.  */
       unbind_region_and_descendents (freed_reg, POISON_KIND_FREED);
     }
-  return false;
 }
 
 /* Handle the on_call_pre part of "realloc".  */
@@ -521,10 +514,9 @@ region_model::impl_call_strcpy (const call_details &cd)
   mark_region_as_unknown (dest_reg, cd.get_uncertainty ());
 }
 
-/* Handle the on_call_pre part of "strlen".
-   Return true if the LHS is updated.  */
+/* Handle the on_call_pre part of "strlen".  */
 
-bool
+void
 region_model::impl_call_strlen (const call_details &cd)
 {
   region_model_context *ctxt = cd.get_ctxt ();
@@ -543,11 +535,10 @@ region_model::impl_call_strlen (const call_details &cd)
          const svalue *result_sval
            = m_mgr->get_or_create_constant_svalue (t_cst);
          cd.maybe_set_lhs (result_sval);
-         return true;
+         return;
        }
     }
-  /* Otherwise an unknown value.  */
-  return true;
+  /* Otherwise a conjured value.  */
 }
 
 /* Handle calls to functions referenced by
diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc
index 9d84b8c28a1..92fa917d14d 100644
--- a/gcc/analyzer/region-model.cc
+++ b/gcc/analyzer/region-model.cc
@@ -1080,7 +1080,8 @@ region_model::on_call_pre (const gcall *call, 
region_model_context *ctxt,
        default:
         break;
        case IFN_BUILTIN_EXPECT:
-        return impl_call_builtin_expect (cd);
+        impl_call_builtin_expect (cd);
+        return false;
        }
     }
 
@@ -1101,17 +1102,21 @@ region_model::on_call_pre (const gcall *call, 
region_model_context *ctxt,
            break;
          case BUILT_IN_ALLOCA:
          case BUILT_IN_ALLOCA_WITH_ALIGN:
-           return impl_call_alloca (cd);
+           impl_call_alloca (cd);
+           return false;
          case BUILT_IN_CALLOC:
-           return impl_call_calloc (cd);
+           impl_call_calloc (cd);
+           return false;
          case BUILT_IN_EXPECT:
          case BUILT_IN_EXPECT_WITH_PROBABILITY:
-           return impl_call_builtin_expect (cd);
+           impl_call_builtin_expect (cd);
+           return false;
          case BUILT_IN_FREE:
            /* Handle in "on_call_post".  */
            break;
          case BUILT_IN_MALLOC:
-           return impl_call_malloc (cd);
+           impl_call_malloc (cd);
+           return false;
          case BUILT_IN_MEMCPY:
          case BUILT_IN_MEMCPY_CHK:
            impl_call_memcpy (cd);
@@ -1129,9 +1134,8 @@ region_model::on_call_pre (const gcall *call, 
region_model_context *ctxt,
            impl_call_strcpy (cd);
            return false;
          case BUILT_IN_STRLEN:
-           if (impl_call_strlen (cd))
-             return false;
-           break;
+           impl_call_strlen (cd);
+           return false;
 
          /* Stdio builtins.  */
          case BUILT_IN_FPRINTF:
@@ -1158,11 +1162,20 @@ region_model::on_call_pre (const gcall *call, 
region_model_context *ctxt,
            break;
          }
       else if (is_named_call_p (callee_fndecl, "malloc", call, 1))
-       return impl_call_malloc (cd);
+       {
+         impl_call_malloc (cd);
+         return false;
+       }
       else if (is_named_call_p (callee_fndecl, "calloc", call, 2))
-       return impl_call_calloc (cd);
+       {
+         impl_call_calloc (cd);
+         return false;
+       }
       else if (is_named_call_p (callee_fndecl, "alloca", call, 1))
-       return impl_call_alloca (cd);
+       {
+         impl_call_alloca (cd);
+         return false;
+       }
       else if (is_named_call_p (callee_fndecl, "realloc", call, 2))
        {
          impl_call_realloc (cd);
@@ -1207,13 +1220,19 @@ region_model::on_call_pre (const gcall *call, 
region_model_context *ctxt,
       else if (is_named_call_p (callee_fndecl, "strlen", call, 1)
               && POINTER_TYPE_P (cd.get_arg_type (0)))
        {
-         if (impl_call_strlen (cd))
-           return false;
+         impl_call_strlen (cd);
+         return false;
        }
       else if (is_named_call_p (callee_fndecl, "operator new", call, 1))
-       return impl_call_operator_new (cd);
+       {
+         impl_call_operator_new (cd);
+         return false;
+       }
       else if (is_named_call_p (callee_fndecl, "operator new []", call, 1))
-       return impl_call_operator_new (cd);
+       {
+         impl_call_operator_new (cd);
+         return false;
+       }
       else if (is_named_call_p (callee_fndecl, "operator delete", call, 1)
               || is_named_call_p (callee_fndecl, "operator delete", call, 2)
               || is_named_call_p (callee_fndecl, "operator delete []", call, 
1))
diff --git a/gcc/analyzer/region-model.h b/gcc/analyzer/region-model.h
index 1c7a3865346..d07ce9c6343 100644
--- a/gcc/analyzer/region-model.h
+++ b/gcc/analyzer/region-model.h
@@ -546,28 +546,28 @@ class region_model
   void purge_state_involving (const svalue *sval, region_model_context *ctxt);
 
   /* Specific handling for on_call_pre.  */
-  bool impl_call_alloca (const call_details &cd);
+  void impl_call_alloca (const call_details &cd);
   void impl_call_analyzer_describe (const gcall *call,
                                    region_model_context *ctxt);
   void impl_call_analyzer_dump_capacity (const gcall *call,
                                         region_model_context *ctxt);
   void impl_call_analyzer_eval (const gcall *call,
                                region_model_context *ctxt);
-  bool impl_call_builtin_expect (const call_details &cd);
-  bool impl_call_calloc (const call_details &cd);
+  void impl_call_builtin_expect (const call_details &cd);
+  void impl_call_calloc (const call_details &cd);
   bool impl_call_error (const call_details &cd, unsigned min_args,
                        bool *out_terminate_path);
   void impl_call_fgets (const call_details &cd);
   void impl_call_fread (const call_details &cd);
   void impl_call_free (const call_details &cd);
-  bool impl_call_malloc (const call_details &cd);
+  void impl_call_malloc (const call_details &cd);
   void impl_call_memcpy (const call_details &cd);
-  bool impl_call_memset (const call_details &cd);
+  void impl_call_memset (const call_details &cd);
   void impl_call_realloc (const call_details &cd);
   void impl_call_strcpy (const call_details &cd);
-  bool impl_call_strlen (const call_details &cd);
-  bool impl_call_operator_new (const call_details &cd);
-  bool impl_call_operator_delete (const call_details &cd);
+  void impl_call_strlen (const call_details &cd);
+  void impl_call_operator_new (const call_details &cd);
+  void impl_call_operator_delete (const call_details &cd);
   void impl_deallocation_call (const call_details &cd);
 
   void handle_unrecognized_call (const gcall *call,
-- 
2.26.3

Reply via email to