mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 19:11:18 +08:00
IPA: Avoid segfault in devirtualization_time_bonus (PR 93223)
2020-01-13 Martin Jambor <mjambor@suse.cz> PR ipa/93223 * ipa-cp.c (devirtualization_time_bonus): Check whether isummary is NULL. testsuite/ * g++.dg/ipa/pr93223.C: New test.
This commit is contained in:
parent
69dc042f91
commit
8472660b98
@ -3158,7 +3158,7 @@ devirtualization_time_bonus (struct cgraph_node *node,
|
||||
if (avail < AVAIL_AVAILABLE)
|
||||
continue;
|
||||
isummary = ipa_fn_summaries->get (callee);
|
||||
if (!isummary->inlinable)
|
||||
if (!isummary || !isummary->inlinable)
|
||||
continue;
|
||||
|
||||
int size = ipa_size_summaries->get (callee)->size;
|
||||
|
62
gcc/testsuite/g++.dg/ipa/pr93223.C
Normal file
62
gcc/testsuite/g++.dg/ipa/pr93223.C
Normal file
@ -0,0 +1,62 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -std=gnu++14" } */
|
||||
|
||||
template <typename Function>
|
||||
bool run(const int item_count,
|
||||
Function && process_range,
|
||||
const int max_parallelism,
|
||||
int* progress = nullptr)
|
||||
{
|
||||
if (max_parallelism <= 1)
|
||||
{
|
||||
if (progress == nullptr)
|
||||
{
|
||||
return process_range(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto result = true;
|
||||
for (int i = 0; i != item_count && result; ++i)
|
||||
{
|
||||
(*progress)++;
|
||||
result = process_range(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
if (max_parallelism > 10)
|
||||
{
|
||||
if (progress == nullptr)
|
||||
{
|
||||
return process_range(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
auto result = true;
|
||||
for (int i = 0; i != item_count && result; ++i)
|
||||
{
|
||||
(*progress)++;
|
||||
result = process_range(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
__attribute__((optimize(0))) bool worker_fun(const int)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
void demo(int n)
|
||||
{
|
||||
for (int i = 0; i < n; ++i)
|
||||
{
|
||||
run(n, &worker_fun, n);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user