tree-optimization/115232 - demangle failure during -Waccess
For the following testcase we fail to demangle _ZZN5OuterIvE6methodIvEEvvQ3cstITL0__EEN5InnernwEm and _ZZN5OuterIvE6methodIvEEvvQ3cstITL0__EEN5InnerdlEPv and in turn end up building NULL references. The following puts in a safeguard for faile demangling into -Waccess. PR tree-optimization/115232 * gimple-ssa-warn-access.cc (new_delete_mismatch_p): Handle failure to demangle gracefully. * g++.dg/pr115232.C: New testcase. (cherry picked from commit 311d7f5c17b8969c7ed8e4f23178d6ec4752e33f)
This commit is contained in:
parent
0cae44a288
commit
4790076933
2 changed files with 26 additions and 1 deletions
|
@ -1762,7 +1762,7 @@ new_delete_mismatch_p (tree new_decl, tree delete_decl)
|
|||
void *np = NULL, *dp = NULL;
|
||||
demangle_component *ndc = cplus_demangle_v3_components (new_str, 0, &np);
|
||||
demangle_component *ddc = cplus_demangle_v3_components (del_str, 0, &dp);
|
||||
bool mismatch = new_delete_mismatch_p (*ndc, *ddc);
|
||||
bool mismatch = ndc && ddc && new_delete_mismatch_p (*ndc, *ddc);
|
||||
free (np);
|
||||
free (dp);
|
||||
return mismatch;
|
||||
|
|
25
gcc/testsuite/g++.dg/pr115232.C
Normal file
25
gcc/testsuite/g++.dg/pr115232.C
Normal file
|
@ -0,0 +1,25 @@
|
|||
// { dg-do compile }
|
||||
// { dg-require-effective-target c++20 }
|
||||
|
||||
using size_t = decltype(sizeof(0));
|
||||
template <class U>
|
||||
static constexpr bool cst = true;
|
||||
template<class T>
|
||||
struct Outer
|
||||
{
|
||||
Outer();
|
||||
template <class U> void method() requires cst<U>
|
||||
{
|
||||
struct Inner
|
||||
{
|
||||
static void* operator new(size_t){return new char;}
|
||||
static void operator delete(void*){}
|
||||
Outer<void> t;
|
||||
};
|
||||
new Inner;
|
||||
}
|
||||
};
|
||||
void f()
|
||||
{
|
||||
Outer<void>{}.method<void>();
|
||||
}
|
Loading…
Add table
Reference in a new issue