diff options
author | Richard Biener <rguenther@suse.de> | 2023-03-15 14:48:57 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2023-03-15 15:30:49 +0100 |
commit | dc35778a4be9dc4b936b8f0943ce04fb5f5ce810 (patch) | |
tree | 9102444cb84bc91bfadeba0563b17a1bf44b509f /gcc | |
parent | 40c1352c5a4530350012d6a922435cf491663daa (diff) | |
download | gcc-dc35778a4be9dc4b936b8f0943ce04fb5f5ce810.zip gcc-dc35778a4be9dc4b936b8f0943ce04fb5f5ce810.tar.gz gcc-dc35778a4be9dc4b936b8f0943ce04fb5f5ce810.tar.bz2 |
Avoid duplicate diagnostic in g++.dg/warn/Wuse-after-free3.C
We are diagnosing
operator delete (this_3(D));
A::f (this_3(D));
*this_3(D) ={v} CLOBBER;
where the CLOBBER appears at the end of the DTOR for C++11 and later.
The following avoids this by simply never diagnosing clobbers as
use-after-free.
* gimple-ssa-warn-access.cc (pass_waccess::check_pointer_uses):
Do not diagnose clobbers.
* g++.dg/warn/Wuse-after-free3.C: Remove expected duplicate
diagnostic.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-ssa-warn-access.cc | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wuse-after-free3.C | 3 |
2 files changed, 5 insertions, 2 deletions
diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc index 8b1c1cc..019c110 100644 --- a/gcc/gimple-ssa-warn-access.cc +++ b/gcc/gimple-ssa-warn-access.cc @@ -4194,6 +4194,10 @@ pass_waccess::check_pointer_uses (gimple *stmt, tree ptr, if (use_stmt == stmt || is_gimple_debug (use_stmt)) continue; + /* A clobber isn't a use. */ + if (gimple_clobber_p (use_stmt)) + continue; + if (realloc_lhs) { /* Check to see if USE_STMT is a mismatched deallocation diff --git a/gcc/testsuite/g++.dg/warn/Wuse-after-free3.C b/gcc/testsuite/g++.dg/warn/Wuse-after-free3.C index 1862ac8..e5b1578 100644 --- a/gcc/testsuite/g++.dg/warn/Wuse-after-free3.C +++ b/gcc/testsuite/g++.dg/warn/Wuse-after-free3.C @@ -1,7 +1,6 @@ // PR target/104213 // { dg-do compile } // { dg-options "-Wuse-after-free" } -// FIXME: We should not output the warning twice. struct A { @@ -13,4 +12,4 @@ A::~A () { operator delete (this); f (); // { dg-warning "used after" } -} // { dg-warning "used after" } +} |