mirror of git://gcc.gnu.org/git/gcc.git
ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion.
* ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion. (warn_types_mismatch): Fix walk of DECL_NAME. (odr_types_equivalent_p): Fix overactive assert. * lto/lto-symtab.c (lto_symtab_merge_decls_2): Fix extra space. * g++.dg/lto/odr-1_0.C: Fix template. * g++.dg/lto/odr-1_1.C: Fix template. From-SVN: r265523
This commit is contained in:
parent
a1f072e244
commit
abb967da1c
|
|
@ -1,3 +1,9 @@
|
||||||
|
2018-10-26 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* ipa-devirt.c (odr_subtypes_equivalent_p): Fix recursion.
|
||||||
|
(warn_types_mismatch): Fix walk of DECL_NAME.
|
||||||
|
(odr_types_equivalent_p): Fix overactive assert.
|
||||||
|
|
||||||
2018-10-26 Richard Biener <rguenther@suse.de>
|
2018-10-26 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/87105
|
PR tree-optimization/87105
|
||||||
|
|
|
||||||
|
|
@ -719,9 +719,10 @@ odr_subtypes_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
|
||||||
}
|
}
|
||||||
if (visited->add (pair))
|
if (visited->add (pair))
|
||||||
return true;
|
return true;
|
||||||
if (odr_types_equivalent_p (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2),
|
if (!odr_types_equivalent_p (TYPE_MAIN_VARIANT (t1), TYPE_MAIN_VARIANT (t2),
|
||||||
false, NULL, visited, loc1, loc2)
|
false, NULL, visited, loc1, loc2))
|
||||||
&& !type_variants_equivalent_p (t1, t2, warn, warned))
|
return false;
|
||||||
|
if (!type_variants_equivalent_p (t1, t2, warn, warned))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -1138,7 +1139,7 @@ warn_types_mismatch (tree t1, tree t2, location_t loc1, location_t loc2)
|
||||||
if (TREE_CODE (n1) == TYPE_DECL)
|
if (TREE_CODE (n1) == TYPE_DECL)
|
||||||
n1 = DECL_NAME (n1);
|
n1 = DECL_NAME (n1);
|
||||||
if (TREE_CODE (n2) == TYPE_DECL)
|
if (TREE_CODE (n2) == TYPE_DECL)
|
||||||
n1 = DECL_NAME (n2);
|
n2 = DECL_NAME (n2);
|
||||||
/* Most of the time, the type names will match, do not be unnecesarily
|
/* Most of the time, the type names will match, do not be unnecesarily
|
||||||
verbose. */
|
verbose. */
|
||||||
if (IDENTIFIER_POINTER (n1) != IDENTIFIER_POINTER (n2))
|
if (IDENTIFIER_POINTER (n1) != IDENTIFIER_POINTER (n2))
|
||||||
|
|
@ -1292,10 +1293,6 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
|
||||||
/* Check first for the obvious case of pointer identity. */
|
/* Check first for the obvious case of pointer identity. */
|
||||||
if (t1 == t2)
|
if (t1 == t2)
|
||||||
return true;
|
return true;
|
||||||
gcc_assert (!type_with_linkage_p (TYPE_MAIN_VARIANT (t1))
|
|
||||||
|| !type_in_anonymous_namespace_p (TYPE_MAIN_VARIANT (t1)));
|
|
||||||
gcc_assert (!type_with_linkage_p (TYPE_MAIN_VARIANT (t2))
|
|
||||||
|| !type_in_anonymous_namespace_p (TYPE_MAIN_VARIANT (t2)));
|
|
||||||
|
|
||||||
/* Can't be the same type if the types don't have the same code. */
|
/* Can't be the same type if the types don't have the same code. */
|
||||||
if (TREE_CODE (t1) != TREE_CODE (t2))
|
if (TREE_CODE (t1) != TREE_CODE (t2))
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
2018-10-26 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* lto/lto-symtab.c (lto_symtab_merge_decls_2): Fix extra space.
|
||||||
|
|
||||||
2018-10-17 David Malcolm <dmalcolm@redhat.com>
|
2018-10-17 David Malcolm <dmalcolm@redhat.com>
|
||||||
|
|
||||||
* Make-lang.in (selftest-lto): New.
|
* Make-lang.in (selftest-lto): New.
|
||||||
|
|
|
||||||
|
|
@ -698,7 +698,7 @@ lto_symtab_merge_decls_2 (symtab_node *first, bool diagnosed_p)
|
||||||
if (level & 2)
|
if (level & 2)
|
||||||
diag = warning_at (DECL_SOURCE_LOCATION (decl),
|
diag = warning_at (DECL_SOURCE_LOCATION (decl),
|
||||||
OPT_Wodr,
|
OPT_Wodr,
|
||||||
"%qD violates the C++ One Definition Rule ",
|
"%qD violates the C++ One Definition Rule",
|
||||||
decl);
|
decl);
|
||||||
if (!diag && (level & 1))
|
if (!diag && (level & 1))
|
||||||
diag = warning_at (DECL_SOURCE_LOCATION (decl),
|
diag = warning_at (DECL_SOURCE_LOCATION (decl),
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2018-10-26 Jan Hubicka <jh@suse.cz>
|
||||||
|
|
||||||
|
* g++.dg/lto/odr-1_0.C: Fix template.
|
||||||
|
* g++.dg/lto/odr-1_1.C: Fix template.
|
||||||
|
|
||||||
2018-10-26 Richard Biener <rguenther@suse.de>
|
2018-10-26 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/87105
|
PR tree-optimization/87105
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,6 @@
|
||||||
struct a { // { dg-lto-warning "8: type 'struct a' violates the C\\+\\+ One Definition Rule" }
|
struct a { // { dg-lto-warning "8: type 'struct a' violates the C\\+\\+ One Definition Rule" }
|
||||||
struct b *ptr; // { dg-lto-message "13: the first difference of corresponding definitions is field 'ptr'" }
|
struct b *ptr; // { dg-lto-message "13: the first difference of corresponding definitions is field 'ptr'" }
|
||||||
};
|
};
|
||||||
void test(struct a *) // { dg-lto-warning "6: warning: 'test' violates the C\\+\\+ One Definition Rule" }
|
void test(struct a *)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ namespace {
|
||||||
struct a {
|
struct a {
|
||||||
struct b *ptr;
|
struct b *ptr;
|
||||||
};
|
};
|
||||||
void test(struct a *);
|
void test(struct a *); // { dg-lto-warning "6: 'test' violates the C\\+\\+ One Definition Rule" }
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue