aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2017-06-23 11:05:47 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2017-06-23 09:05:47 +0000
commit2db9b7cd422b63fe0a87218128cc0939b439859e (patch)
tree8874bb67d61acd34ac953c902f78942ea9e4d604 /gcc/tree.c
parent70fdc808941016567f8e55caea593324b15df230 (diff)
downloadgcc-2db9b7cd422b63fe0a87218128cc0939b439859e.zip
gcc-2db9b7cd422b63fe0a87218128cc0939b439859e.tar.gz
gcc-2db9b7cd422b63fe0a87218128cc0939b439859e.tar.bz2
Refactor fileptr_type_node handling
2017-06-23 Marc Glisse <marc.glisse@inria.fr> gcc/ * tree.h (builtin_structptr_type): New type. (builtin_structptr_types): Declare new array. * tree.c (builtin_structptr_types): New array. (free_lang_data, build_common_tree_nodes): Use it. gcc/c-family/ * c-common.c (c_common_nodes_and_builtins): Use builtin_structptr_types. gcc/cp/ * decl.c (duplicate_decls): Use builtin_structptr_types. gcc/lto/ * lto-lang.c (lto_init): Use builtin_structptr_types. From-SVN: r249585
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 2602803..13c6c90 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5983,8 +5983,10 @@ free_lang_data (void)
free_lang_data_in_cgraph ();
/* Create gimple variants for common types. */
- fileptr_type_node = ptr_type_node;
- const_tm_ptr_type_node = const_ptr_type_node;
+ for (unsigned i = 0;
+ i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
+ ++i)
+ builtin_structptr_types[i].node = builtin_structptr_types[i].base;
/* Reset some langhooks. Do not reset types_compatible_p, it may
still be used indirectly via the get_alias_set langhook. */
@@ -10449,8 +10451,10 @@ build_common_tree_nodes (bool signed_char)
ptr_type_node = build_pointer_type (void_type_node);
const_ptr_type_node
= build_pointer_type (build_type_variant (void_type_node, 1, 0));
- fileptr_type_node = ptr_type_node;
- const_tm_ptr_type_node = const_ptr_type_node;
+ for (unsigned i = 0;
+ i < sizeof (builtin_structptr_types) / sizeof (builtin_structptr_type);
+ ++i)
+ builtin_structptr_types[i].node = builtin_structptr_types[i].base;
pointer_sized_int_node = build_nonstandard_integer_type (POINTER_SIZE, 1);
@@ -14544,6 +14548,16 @@ get_nonnull_args (const_tree fntype)
return argmap;
}
+/* List of pointer types used to declare builtins before we have seen their
+ real declaration.
+
+ Keep the size up to date in tree.h ! */
+const builtin_structptr_type builtin_structptr_types[2] =
+{
+ { fileptr_type_node, ptr_type_node, "FILE" },
+ { const_tm_ptr_type_node, const_ptr_type_node, "tm" }
+};
+
#if CHECKING_P
namespace selftest {