From: hubicka Date: Wed, 7 Nov 2018 10:13:15 +0000 (+0000) Subject: * tree.c (free_lang_data_in_type): Add fld parameter; simplify X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bcbc4a1306899a481e3e56c97a7120a46a595968;p=thirdparty%2Fgcc.git * tree.c (free_lang_data_in_type): Add fld parameter; simplify return and parameter types of function and method types. (free_lang_data_in_cgraph): Update. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@265870 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cb50bad54ad2..c0aae3a866b9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-11-07 Jan Hubicka + + * tree.c (free_lang_data_in_type): Add fld parameter; simplify + return and parameter types of function and method types. + (free_lang_data_in_cgraph): Update. + 2018-11-07 Martin Liska PR rtl-optimization/87868 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b834e0480b7d..65c1cf1efec1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2018-11-07 Jan Hubicka + + * g++.dg/lto/odr-1_1.C: Fix template. + 2018-11-07 Chenghua Xu * gcc.target/mips/loongson-ctz.c: New test. diff --git a/gcc/testsuite/g++.dg/lto/odr-1_1.C b/gcc/testsuite/g++.dg/lto/odr-1_1.C index ef2f55a69aaa..5cd6f6c0ebc3 100644 --- a/gcc/testsuite/g++.dg/lto/odr-1_1.C +++ b/gcc/testsuite/g++.dg/lto/odr-1_1.C @@ -4,7 +4,7 @@ namespace { struct a { struct b *ptr; }; -void test(struct a *); // { dg-lto-warning "6: 'test' violates the C\\+\\+ One Definition Rule" } +void test(struct a *); int main(void) { diff --git a/gcc/tree.c b/gcc/tree.c index fcd001f0a24a..143608649c09 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5261,7 +5261,7 @@ free_lang_data_in_binfo (tree binfo) /* Reset all language specific information still present in TYPE. */ static void -free_lang_data_in_type (tree type) +free_lang_data_in_type (tree type, struct free_lang_data_d *fld) { gcc_assert (TYPE_P (type)); @@ -5280,6 +5280,7 @@ free_lang_data_in_type (tree type) if (TREE_CODE (type) == FUNCTION_TYPE) { + TREE_TYPE (type) = fld_simplified_type (TREE_TYPE (type), fld); /* Remove the const and volatile qualifiers from arguments. The C++ front end removes them, but the C front end does not, leading to false ODR violation errors when merging two @@ -5287,6 +5288,7 @@ free_lang_data_in_type (tree type) different front ends. */ for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) { + TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld); tree arg_type = TREE_VALUE (p); if (TYPE_READONLY (arg_type) || TYPE_VOLATILE (arg_type)) @@ -5295,16 +5297,22 @@ free_lang_data_in_type (tree type) & ~TYPE_QUAL_CONST & ~TYPE_QUAL_VOLATILE; TREE_VALUE (p) = build_qualified_type (arg_type, quals); - free_lang_data_in_type (TREE_VALUE (p)); + free_lang_data_in_type (TREE_VALUE (p), fld); } /* C++ FE uses TREE_PURPOSE to store initial values. */ TREE_PURPOSE (p) = NULL; } } else if (TREE_CODE (type) == METHOD_TYPE) - for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) - /* C++ FE uses TREE_PURPOSE to store initial values. */ - TREE_PURPOSE (p) = NULL; + { + TREE_TYPE (type) = fld_simplified_type (TREE_TYPE (type), fld); + for (tree p = TYPE_ARG_TYPES (type); p; p = TREE_CHAIN (p)) + { + /* C++ FE uses TREE_PURPOSE to store initial values. */ + TREE_VALUE (p) = fld_simplified_type (TREE_VALUE (p), fld); + TREE_PURPOSE (p) = NULL; + } + } else if (RECORD_OR_UNION_TYPE_P (type)) { /* Remove members that are not FIELD_DECLs from the field list @@ -5468,6 +5476,7 @@ free_lang_data_in_decl (tree decl, struct free_lang_data_d *fld) if (TREE_CODE (decl) == FUNCTION_DECL) { struct cgraph_node *node; + TREE_TYPE (decl) = fld_simplified_type (TREE_TYPE (decl), fld); if (!(node = cgraph_node::get (decl)) || (!node->definition && !node->clones)) { @@ -5985,7 +5994,7 @@ free_lang_data_in_cgraph (void) /* Traverse every type found freeing its language data. */ FOR_EACH_VEC_ELT (fld.types, i, t) - free_lang_data_in_type (t); + free_lang_data_in_type (t, &fld); if (flag_checking) { FOR_EACH_VEC_ELT (fld.types, i, t)