public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] gimple-ssa-warn-access: Fix up asan_test.C -Wdangling-pointer regression [PR104103]
@ 2022-01-18 23:56 Jakub Jelinek
  2022-01-19  0:03 ` Martin Sebor
  0 siblings, 1 reply; 3+ messages in thread
From: Jakub Jelinek @ 2022-01-18 23:56 UTC (permalink / raw)
  To: Richard Biener, Jason Merrill, Martin Sebor; +Cc: gcc-patches

Hi!

As reported in the PR or as I've seen since the weekend, asan_test.C fails
because of many warnings like:
/home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
/home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
/home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1162:27: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
...
(lots of them).
There are no dangling pointers though, the warning pass sees:
  some_automatic_var ={v} {CLOBBER};
  .ASAN_MARK (POISON, &some_automatic_var, 8);
and warns on that (both on user vars and on e.g. TARGET_EXPR temporaries).
There is nothing wrong on that, .ASAN_MARK is compiler instrumentation,
which doesn't even touch the variable in any way nor make it escaped.
What it instead does is change bytes in the shadow memory corresponding
to the variable to reflect that the variable is out of scope and make
sure that access to it would be diagnosed at runtime.
So, for all purposes of the -Wdangling-pointer and -Wuse-after-free
warnings, we should ignore this internal call.

Bootstrapped/regtested on x86_64-linux and i686-linux, fixes asan_test.C
FAIL (so no new test has been added), ok for trunk?

2022-01-18  Jakub Jelinek  <jakub@redhat.com>

	PR middle-end/104103
	* gimple-ssa-warn-access.cc (pass_waccess::check_call): Don't check
	.ASAN_MARK calls.

--- gcc/gimple-ssa-warn-access.cc.jj	2022-01-16 20:55:46.783932110 +0100
+++ gcc/gimple-ssa-warn-access.cc	2022-01-18 20:56:13.697780325 +0100
@@ -4232,6 +4232,11 @@ pass_waccess::check_call (gcall *stmt)
   if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
     check_builtin (stmt);
 
+  /* .ASAN_MARK doesn't access any vars, only modifies shadow memory.  */
+  if (gimple_call_internal_p (stmt)
+      && gimple_call_internal_fn (stmt) == IFN_ASAN_MARK)
+    return;
+
   if (!m_early_checks_p)
     if (tree callee = gimple_call_fndecl (stmt))
       {

	Jakub


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gimple-ssa-warn-access: Fix up asan_test.C -Wdangling-pointer regression [PR104103]
  2022-01-18 23:56 [PATCH] gimple-ssa-warn-access: Fix up asan_test.C -Wdangling-pointer regression [PR104103] Jakub Jelinek
@ 2022-01-19  0:03 ` Martin Sebor
  2022-01-19  6:29   ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Martin Sebor @ 2022-01-19  0:03 UTC (permalink / raw)
  To: Jakub Jelinek, Richard Biener, Jason Merrill; +Cc: gcc-patches

On 1/18/22 16:56, Jakub Jelinek wrote:
> Hi!
> 
> As reported in the PR or as I've seen since the weekend, asan_test.C fails
> because of many warnings like:
> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1162:27: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
> ...
> (lots of them).
> There are no dangling pointers though, the warning pass sees:
>    some_automatic_var ={v} {CLOBBER};
>    .ASAN_MARK (POISON, &some_automatic_var, 8);
> and warns on that (both on user vars and on e.g. TARGET_EXPR temporaries).
> There is nothing wrong on that, .ASAN_MARK is compiler instrumentation,
> which doesn't even touch the variable in any way nor make it escaped.
> What it instead does is change bytes in the shadow memory corresponding
> to the variable to reflect that the variable is out of scope and make
> sure that access to it would be diagnosed at runtime.
> So, for all purposes of the -Wdangling-pointer and -Wuse-after-free
> warnings, we should ignore this internal call.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, fixes asan_test.C
> FAIL (so no new test has been added), ok for trunk?

This is in line with what's done for -Wmaybe-uninitialized so it makes
sense to do it here as well.  -Wmaybe-uninitialized also exempts calls
to sanitizer built-ins from checking.  I don't know if they might come
up here but if it can't be ruled out, moving the code from
tree-ssa-uninit.cc into a utility helper and calling it from both
places might be a good idea.

Martin

> 
> 2022-01-18  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR middle-end/104103
> 	* gimple-ssa-warn-access.cc (pass_waccess::check_call): Don't check
> 	.ASAN_MARK calls.
> 
> --- gcc/gimple-ssa-warn-access.cc.jj	2022-01-16 20:55:46.783932110 +0100
> +++ gcc/gimple-ssa-warn-access.cc	2022-01-18 20:56:13.697780325 +0100
> @@ -4232,6 +4232,11 @@ pass_waccess::check_call (gcall *stmt)
>     if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
>       check_builtin (stmt);
>   
> +  /* .ASAN_MARK doesn't access any vars, only modifies shadow memory.  */
> +  if (gimple_call_internal_p (stmt)
> +      && gimple_call_internal_fn (stmt) == IFN_ASAN_MARK)
> +    return;
> +
>     if (!m_early_checks_p)
>       if (tree callee = gimple_call_fndecl (stmt))
>         {
> 
> 	Jakub
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] gimple-ssa-warn-access: Fix up asan_test.C -Wdangling-pointer regression [PR104103]
  2022-01-19  0:03 ` Martin Sebor
@ 2022-01-19  6:29   ` Richard Biener
  0 siblings, 0 replies; 3+ messages in thread
From: Richard Biener @ 2022-01-19  6:29 UTC (permalink / raw)
  To: Martin Sebor via Gcc-patches; +Cc: Jakub Jelinek, Jason Merrill



> Am 19.01.2022 um 01:04 schrieb Martin Sebor via Gcc-patches <gcc-patches@gcc.gnu.org>:
> 
> On 1/18/22 16:56, Jakub Jelinek wrote:
>> Hi!
>> As reported in the PR or as I've seen since the weekend, asan_test.C fails
>> because of many warnings like:
>> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
>> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1157:10: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
>> /home/jakub/src/gcc/gcc/testsuite/g++.dg/asan/asan_test.cc:1162:27: error: using a dangling pointer to an unnamed temporary [-Werror=dangling-pointer=]
>> ...
>> (lots of them).
>> There are no dangling pointers though, the warning pass sees:
>>   some_automatic_var ={v} {CLOBBER};
>>   .ASAN_MARK (POISON, &some_automatic_var, 8);
>> and warns on that (both on user vars and on e.g. TARGET_EXPR temporaries).
>> There is nothing wrong on that, .ASAN_MARK is compiler instrumentation,
>> which doesn't even touch the variable in any way nor make it escaped.
>> What it instead does is change bytes in the shadow memory corresponding
>> to the variable to reflect that the variable is out of scope and make
>> sure that access to it would be diagnosed at runtime.
>> So, for all purposes of the -Wdangling-pointer and -Wuse-after-free
>> warnings, we should ignore this internal call.
>> Bootstrapped/regtested on x86_64-linux and i686-linux, fixes asan_test.C
>> FAIL (so no new test has been added), ok for trunk?

Ok.

Richard 

> This is in line with what's done for -Wmaybe-uninitialized so it makes
> sense to do it here as well.  -Wmaybe-uninitialized also exempts calls
> to sanitizer built-ins from checking.  I don't know if they might come
> up here but if it can't be ruled out, moving the code from
> tree-ssa-uninit.cc into a utility helper and calling it from both
> places might be a good idea.
> 
> Martin
> 
>> 2022-01-18  Jakub Jelinek  <jakub@redhat.com>
>>    PR middle-end/104103
>>    * gimple-ssa-warn-access.cc (pass_waccess::check_call): Don't check
>>    .ASAN_MARK calls.
>> --- gcc/gimple-ssa-warn-access.cc.jj    2022-01-16 20:55:46.783932110 +0100
>> +++ gcc/gimple-ssa-warn-access.cc    2022-01-18 20:56:13.697780325 +0100
>> @@ -4232,6 +4232,11 @@ pass_waccess::check_call (gcall *stmt)
>>    if (gimple_call_builtin_p (stmt, BUILT_IN_NORMAL))
>>      check_builtin (stmt);
>>  +  /* .ASAN_MARK doesn't access any vars, only modifies shadow memory.  */
>> +  if (gimple_call_internal_p (stmt)
>> +      && gimple_call_internal_fn (stmt) == IFN_ASAN_MARK)
>> +    return;
>> +
>>    if (!m_early_checks_p)
>>      if (tree callee = gimple_call_fndecl (stmt))
>>        {
>>    Jakub
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-01-19  6:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-18 23:56 [PATCH] gimple-ssa-warn-access: Fix up asan_test.C -Wdangling-pointer regression [PR104103] Jakub Jelinek
2022-01-19  0:03 ` Martin Sebor
2022-01-19  6:29   ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).