Hi Jakub,
>> The following testcase is miscompiled on x86_64-linux (-m32 and -m64) at
>> -O1, as a pointer has two vars in points-to set, the first one is escaped
>> heap var and the second one is escaped non-heap var, and in the end the last
>> var that sets vars_contains_escaped won and overwrote
>> vars_contains_escaped_heap rather than oring into it.
>>
>> Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux,
>> preapproved by Richard on IRC, committed to trunk.
>> Will test 8.x backport tonight and commit to 8.3 if that succeeds.
>>
>> 2019-02-13 Jakub Jelinek <[email protected]>
>>
>> PR middle-end/89303
>> * tree-ssa-structalias.c (set_uids_in_ptset): Or in vi->is_heap_var
>> into pt->vars_contains_escaped_heap instead of setting
>> pt->vars_contains_escaped_heap to it.
>>
>> 2019-02-13 Jonathan Wakely <[email protected]>
>> Jakub Jelinek <[email protected]>
>>
>> PR middle-end/89303
>> * g++.dg/torture/pr89303.C: New test.
>
> the new testcase FAILs on Solaris:
>
> +FAIL: g++.dg/torture/pr89303.C -O0 (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O1 (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O2 (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O2 -flto (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O2 -flto -flto-partition=none (test for
> excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O3 -fomit-frame-pointer -funroll-loops
> -fpeel-loops -ftracer -finline-functions (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -O3 -g (test for excess errors)
> +FAIL: g++.dg/torture/pr89303.C -Os (test for excess errors)
>
> Excess errors:
> ld: warning: symbol 'typeinfo for std::bad_weak_ptr' has differing sizes:
> (file /var/tmp//ccB1o8Ya.o value=0x8; file
> /var/gcc/regression/trunk/11-gcc/build/i386-pc-solaris2.11/./libstdc++-v3/src/.libs/libstdc++.so
> value=0xc);
> /var/tmp//ccB1o8Ya.o definition taken
>
> I suspect the class can just be renamed in pr89303.C to avoid the
> conflict with include/bits/shared_ptr_base.h?
the following patch does this. I've verified that it still FAILs on
x86_64-pc-linux-gnu before your patch and PASSes afterwards, as well as
avoiding the linker warning on i386-pc-solaris2.11.
Ok for mainline?
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University
2019-02-15 Rainer Orth <[email protected]>
* g++.dg/torture/pr89303.C (bad_weak_ptr): Rename to
bad_weak_ptr_.
# HG changeset patch
# Parent 056fe4093ce40dc462c6b50c3ae49df032a92230
Fix g++.dg/torture/pr89303.C with Solaris ld
diff --git a/gcc/testsuite/g++.dg/torture/pr89303.C b/gcc/testsuite/g++.dg/torture/pr89303.C
--- a/gcc/testsuite/g++.dg/torture/pr89303.C
+++ b/gcc/testsuite/g++.dg/torture/pr89303.C
@@ -350,11 +350,11 @@ namespace std
{ return static_cast<const _Tp*>(_M_addr()); }
};
- class bad_weak_ptr { };
+ class bad_weak_ptr_ { };
inline void
__throw_bad_weak_ptr()
- { (throw (bad_weak_ptr())); }
+ { (throw (bad_weak_ptr_())); }
class _Sp_counted_base
{