Ok, done. Pushed. Aldy On Sun, Nov 14, 2021 at 2:53 PM Martin Liška wrote: > > On 11/14/21 14:15, Aldy Hernandez wrote: > > The code computing ranges in PHIs in the path solver reuses the > > temporary ssa_global_cache by calling its clear method. Calling it on > > an empty cache causes us to call memset with NULL. > > > > [The testcase doesn't fail without the patch. I suppose it needs some > > usbsan magic, or to live somewhere else?] > > Well, the actual test-case is the compiler itself as the source code. > Anyway, the UBSAN error happens for thousands of test-cases when run > during bootstrap-ubsan.mk config file. That said, I would remove > the added test-case. > > Cheers, > Martin > > > > > Tested on x86-64 Linux. > > > > gcc/ChangeLog: > > > > PR tree-optimization/103229 > > * gimple-range-cache.cc (ssa_global_cache::clear): Do not pass > > null value to memset. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.dg/pr103229.c: New test. > > --- > > gcc/gimple-range-cache.cc | 3 ++- > > gcc/testsuite/gcc.dg/pr103229.c | 10 ++++++++++ > > 2 files changed, 12 insertions(+), 1 deletion(-) > > create mode 100644 gcc/testsuite/gcc.dg/pr103229.c > > > > diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc > > index a63e20e7e49..b347edeb474 100644 > > --- a/gcc/gimple-range-cache.cc > > +++ b/gcc/gimple-range-cache.cc > > @@ -651,7 +651,8 @@ ssa_global_cache::clear_global_range (tree name) > > void > > ssa_global_cache::clear () > > { > > - memset (m_tab.address(), 0, m_tab.length () * sizeof (irange *)); > > + if (m_tab.address ()) > > + memset (m_tab.address(), 0, m_tab.length () * sizeof (irange *)); > > } > > > > // Dump the contents of the global cache to F. > > diff --git a/gcc/testsuite/gcc.dg/pr103229.c b/gcc/testsuite/gcc.dg/pr103229.c > > new file mode 100644 > > index 00000000000..96ef9aff67c > > --- /dev/null > > +++ b/gcc/testsuite/gcc.dg/pr103229.c > > @@ -0,0 +1,10 @@ > > +// { dg-do compile } > > +// { dg-options "-O -w" } > > + > > +int main() { > > + int i; > > + for (; i;) > > + ; > > + > > + return 0; > > +} > > >