[PATCH] analyzer: Fix PR analyzer/101980

Martin Liška mliska@suse.cz
Mon Aug 23 11:30:25 GMT 2021


On 8/23/21 13:04, Ankur Saini wrote:
> 
> 
>> On 23-Aug-2021, at 2:20 PM, Martin Liška <mliska@suse.cz> wrote:
>>
>> On 8/23/21 10:10, Martin Liška wrote:
>>> On 8/20/21 18:47, David Malcolm via Gcc-patches wrote:
>>>> On Fri, 2021-08-20 at 21:55 +0530, Ankur Saini wrote:
>>>>> The patch fixes the test failures introduced by :
>>>>>
>>>>> aef703cf982072427e74034f4c460a11c5e04b8e
>>>>> 1b34248527472496ca3fe2a07183beac8cf69041
>>>>>
>>>>> Thanks
>>>>> - Ankur
>>>>
>>>> Thanks for fixing this.
>>>>
>>>> The patch looks OK, apart from some minor whitespace issues - I think
>>>> it's using spaces rather than tabs, as columns aren't lining up as
>>>> expected in some places.  (does your code editor support visualizing
>>>> whitespace and support GNU indentation styles?).
>>>>
>>>> Ideally these nits should be fixed - but assuming this passes bootstrap
>>>> it's OK to push to trunk (and don't try to fix indentation in places
>>>> where it's already broken; best to focus on fixing the test suite).
>>>>
>>>> Dave
>>>>
>>>>
>>> Hello.
>>> I noticed the patch leads to the following Clang warning:
>>> build/gcc/analyzer/diagnostic-manager.cc:2108:21: warning: variable 'caller_var' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
>>> Is it something we should handle? Or a false positive?
>>> Thanks,
>>> Martin
>>
>> And it likely caused https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102020.
> 
> Yes, you are right, there is a typo in in gcc/analyzer/diagnostic-manager.cc:2113 which should be changed to something like this :
> 
> - - -
> diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc
> index 89b5d1e3c3c..77dda4d2768 100644
> --- a/gcc/analyzer/diagnostic-manager.cc
> +++ b/gcc/analyzer/diagnostic-manager.cc
> @@ -2110,7 +2110,7 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
>                      = cg_superedge.map_expr_from_callee_to_caller (callee_var,
>                                                                      &expr);
>                   else
> -                  callee_var = callee_model->get_representative_tree (sval);
> +                 caller_var = caller_model->get_representative_tree (sval);
>                 }
>               else
>                caller_var = caller_model->get_representative_tree (sval);

Ok, please push it as obvious. Do you have a git account?

Cheers,
Martin

> - - -
> 
> But maybe the fail is not due to this typo, as ideally the analyzer should not enter that else statement in this case.
> 
> I see DejaGnu reporting a failing test ( with excess errors ) at line 72 but no test for failing or passing "test for warnings” there, even though there is a {dg-warning "double-'free’”} on line 72.

Yeah, there's missing space in between quote and the closing brace:

diff --git a/gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c b/gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c
index 53c75fddf84..8820dddf923 100644
--- a/gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c
+++ b/gcc/testsuite/gcc.dg/analyzer/malloc-callbacks.c
@@ -69,7 +69,7 @@ int *test_5 (void)
  static void __attribute__((noinline))
  called_by_test_6a (void *ptr)
  {
-  free (ptr); /* { dg-warning "double-'free'"} */
+  free (ptr); /* { dg-warning "double-'free'" } */
  }
  
  static deallocator_t __attribute__((noinline))

Using the patch, the test works.
Martin

> 
> Thank you
> - Ankur
> 



More information about the Gcc-patches mailing list