Commit d2a0371d by Jan Hubicka Committed by Jan Hubicka

re PR lto/89358 (Combining -std=c++14 and -std=c++17 objects gives ODR warnings)


	PR lto/89358
	* g++.dg/lto/pr89358_0.C: New testcase.
	* g++.dg/lto/pr89358_1.C: New testcase.
	* ipa-devirt.c (skip_in_fields_list_p): New.
	(odr_types_equivalent_p): Use it.

From-SVN: r270355
parent ceae614e
2019-04-14 Jan Hubicka <hubicka@ucw.cz>
PR lto/89358
* ipa-devirt.c (skip_in_fields_list_p): New.
(odr_types_equivalent_p): Use it.
2019-04-13 Jakub Jelinek <jakub@redhat.com>
PR target/89093
......
......@@ -1282,6 +1282,24 @@ warn_types_mismatch (tree t1, tree t2, location_t loc1, location_t loc2)
inform (loc_t2, "the incompatible type is defined here");
}
/* Return true if T should be ignored in TYPE_FIELDS for ODR comparsion. */
static bool
skip_in_fields_list_p (tree t)
{
if (TREE_CODE (t) != FIELD_DECL)
return true;
/* C++ FE introduces zero sized fields depending on -std setting, see
PR89358. */
if (DECL_SIZE (t)
&& integer_zerop (DECL_SIZE (t))
&& DECL_ARTIFICIAL (t)
&& DECL_IGNORED_P (t)
&& !DECL_NAME (t))
return true;
return false;
}
/* Compare T1 and T2, report ODR violations if WARN is true and set
WARNED to true if anything is reported. Return true if types match.
If true is returned, the types are also compatible in the sense of
......@@ -1548,9 +1566,9 @@ odr_types_equivalent_p (tree t1, tree t2, bool warn, bool *warned,
f1 = TREE_CHAIN (f1), f2 = TREE_CHAIN (f2))
{
/* Skip non-fields. */
while (f1 && TREE_CODE (f1) != FIELD_DECL)
while (f1 && skip_in_fields_list_p (f1))
f1 = TREE_CHAIN (f1);
while (f2 && TREE_CODE (f2) != FIELD_DECL)
while (f2 && skip_in_fields_list_p (f2))
f2 = TREE_CHAIN (f2);
if (!f1 || !f2)
break;
......
2019-04-14 Jan Hubicka <hubicka@ucw.cz>
PR lto/89358
* g++.dg/lto/pr89358_0.C: New testcase.
* g++.dg/lto/pr89358_1.C: New testcase.
2019-04-14 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85448
......
/* { dg-do link } */
/* { dg-options "-std=c++17" } */
#include <map>
extern void test();
int main()
{
std::map<int, int> m;
test();
}
/* { dg-options "-std=c++14" } */
#include <map>
void test()
{
std::map<int, int> m;
}
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