Commit abb967da by Jan Hubicka Committed by Jan Hubicka

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
parent a1f072e2
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, ...@@ -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) ...@@ -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, ...@@ -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))
......
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) ...@@ -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),
......
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 @@ ...@@ -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 { ...@@ -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)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment