mirror of git://gcc.gnu.org/git/gcc.git
re PR lto/85391 (ICE in add_type_duplicate, at ipa-devirt.c:1887)
PR lto/85391 * lto.c (lto_read_decls): Do not test TYPE_CANONICAL before registering odr types. * g++.dg/lto/pr83121_0.C: Update template. * g++.dg/lto/pr83121_1.C: Update template. * g++.dg/lto/pr84805_0.C: Update template. * g++.dg/lto/pr84805_1.C: Update template. * g++.dg/lto/pr84805_2.C: Update template. Co-Authored-By: Martin Liska <mliska@suse.cz> From-SVN: r259464
This commit is contained in:
parent
8cc8789fb4
commit
7d6051b125
|
|
@ -1,3 +1,10 @@
|
|||
2018-04-18 Jan Hubicka <jh@suse.cz>
|
||||
Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR lto/85391
|
||||
* lto.c (lto_read_decls): Do not test TYPE_CANONICAL before registering odr
|
||||
types.
|
||||
|
||||
2018-04-11 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* lto-symtab.c (lto_symtab_merge_p): Use attribute_value_equal
|
||||
|
|
|
|||
|
|
@ -1772,12 +1772,13 @@ lto_read_decls (struct lto_file_decl_data *decl_data, const void *data,
|
|||
seen_type = true;
|
||||
num_prevailing_types++;
|
||||
lto_fixup_prevailing_type (t);
|
||||
}
|
||||
/* Compute the canonical type of all types.
|
||||
??? Should be able to assert that !TYPE_CANONICAL. */
|
||||
if (TYPE_P (t) && !TYPE_CANONICAL (t))
|
||||
{
|
||||
gimple_register_canonical_type (t);
|
||||
|
||||
/* Compute the canonical type of all types.
|
||||
Because SCC components ar estreame in random (hash) order
|
||||
we may have enountered the type before while registering
|
||||
type canonical of a derived type in the same SCC. */
|
||||
if (!TYPE_CANONICAL (t))
|
||||
gimple_register_canonical_type (t);
|
||||
if (odr_type_p (t))
|
||||
register_odr_type (t);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,12 @@
|
|||
2018-04-18 Jan Hubicka <jh@suse.cz>
|
||||
Martin Liska <mliska@suse.cz>
|
||||
|
||||
* g++.dg/lto/pr83121_0.C: Update template.
|
||||
* g++.dg/lto/pr83121_1.C: Update template.
|
||||
* g++.dg/lto/pr84805_0.C: Update template.
|
||||
* g++.dg/lto/pr84805_1.C: Update template.
|
||||
* g++.dg/lto/pr84805_2.C: Update template.
|
||||
|
||||
2018-04-18 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84630
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
from being optimized away. */
|
||||
|
||||
struct Environment { // { dg-lto-warning "8: type 'struct Environment' violates the C\\+\\+ One Definition Rule" }
|
||||
struct AsyncHooks {
|
||||
int providers_[2]; // { dg-lto-message "a field of same name but different type is defined in another translation unit" }
|
||||
struct AsyncHooks { // { dg-lto-warning "10: type 'struct AsyncHooks' violates the C\\+\\+ One Definition Rule" }
|
||||
int providers_[2]; // { dg-lto-message "the first difference of corresponding definitions is field 'providers_'" }
|
||||
};
|
||||
AsyncHooks async_hooks_;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
struct Environment {
|
||||
struct AsyncHooks { // { dg-lto-warning "10: type 'struct AsyncHooks' violates the C\\+\\+ One Definition Rule" }
|
||||
int providers_[1]; // { dg-lto-message "the first difference of corresponding definitions is field 'providers_'" }
|
||||
struct AsyncHooks {
|
||||
int providers_[1];
|
||||
};
|
||||
AsyncHooks async_hooks_;
|
||||
AsyncHooks async_hooks_; // { dg-lto-message "a field of same name but different type is defined in another translation unit" }
|
||||
};
|
||||
void fn1() { Environment a; }
|
||||
int main ()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// { dg-lto-do link }
|
||||
// { dg-lto-options {{-O2 -fPIC -shared -flto}} }
|
||||
// { dg-lto-options {{-O0 -fPIC -shared -flto}} }
|
||||
|
||||
template < typename _Tp, _Tp __v > struct integral_constant {
|
||||
static constexpr _Tp value = __v;
|
||||
|
|
@ -9,7 +9,7 @@ struct __is_void_helper : false_type {};
|
|||
struct is_void : __is_void_helper {};
|
||||
template < typename > struct is_array : false_type {};
|
||||
namespace __gnu_cxx {
|
||||
enum _Lock_policy { _S_single, _S_mutex, _S_atomic };
|
||||
enum _Lock_policy { _S_single, _S_mutex, _S_atomic }; // { dg-lto-warning "6: type '_Lock_policy' violates the C\\+\\+ One Definition Rule" }
|
||||
const _Lock_policy __default_lock_policy = _S_atomic;
|
||||
} namespace std {
|
||||
using __gnu_cxx::_Lock_policy;
|
||||
|
|
@ -21,7 +21,7 @@ template < typename _Tp, _Lock_policy, bool = is_array< _Tp >::value,
|
|||
bool = is_void::value >
|
||||
class __shared_ptr_access {};
|
||||
template < typename _Tp, _Lock_policy _Lp >
|
||||
class __shared_ptr : __shared_ptr_access< _Tp, _Lp > {
|
||||
class __shared_ptr : __shared_ptr_access< _Tp, _Lp > { // { dg-lto-warning "7: type 'struct __shared_ptr' violates the C\\+\\+ One Definition Rule" }
|
||||
using element_type = _Tp;
|
||||
element_type *_M_ptr;
|
||||
__shared_count< _Lp > _M_refcount;
|
||||
|
|
@ -88,7 +88,7 @@ class ExtNameBuff;
|
|||
class ExtSheetBuffer;
|
||||
class ExcelToSc;
|
||||
class XclImpColRowSettings;
|
||||
struct RootData {
|
||||
struct RootData { // { dg-lto-warning "8: type 'struct RootData' violates the C\\+\\+ One Definition Rule" }
|
||||
BiffTyp eDateiTyp;
|
||||
ExtSheetBuffer *pExtSheetBuff;
|
||||
SharedFormulaBuffer *pShrfmlaBuff;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ public:
|
|||
virtual ~XclRoot();
|
||||
};
|
||||
class XclImpRoot : XclRoot {};
|
||||
struct RootData { // { dg-lto-warning "8: type 'struct RootData' violates the C\\+\\+ One Definition Rule" }
|
||||
struct RootData {
|
||||
XclImpRoot pIR;
|
||||
};
|
||||
class ExcRoot {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ template < _Lock_policy > class __shared_count { _Sp_counted_base<> *_M_pi; };
|
|||
template < typename a, _Lock_policy, bool = g< a >::d, bool = t::d >
|
||||
class __shared_ptr_access {};
|
||||
template < typename a, _Lock_policy l >
|
||||
class __shared_ptr : __shared_ptr_access< a, l > { // { dg-lto-warning "7: type 'struct __shared_ptr' violates the C\\+\\+ One Definition Rule" }
|
||||
class __shared_ptr : __shared_ptr_access< a, l > {
|
||||
using m = a;
|
||||
m *_M_ptr;
|
||||
__shared_count< l > _M_refcount;
|
||||
|
|
|
|||
Loading…
Reference in New Issue