Walk pointer_to and reference_to chain in free_lang_data
Jan Hubicka
hubicka@ucw.cz
Thu Aug 23 12:06:00 GMT 2018
Hi
this patch takes care of gcov. There are two oddities. First that gcov uses
langhook to produce new records while asan gets around with make_node.
I think both are middle-end types and in the direction of separating front-ends
and middle-ends better the langhooks are not desirable.
The TYPE_STUB_DECL is produced by finish_builtin_struct. This is function used
just few times but I am not sure if we don't want debug info on some of the
builtins, so I have added extra parameter.
config/darwin.c: finish_builtin_struct (cfstring_type_node, "__builtin_CFString",
config/i386/i386.c: finish_builtin_struct (type, "__processor_model", field_chain, NULL_TREE);
coverage.c: finish_builtin_struct (ctr_info, "__gcov_ctr_info", fields, NULL_TREE, true);
coverage.c: finish_builtin_struct (type, "__gcov_fn_info", fields, NULL_TREE, true);
coverage.c: finish_builtin_struct (type, "__gcov_info", fields, NULL_TREE, true);
cp/decl.c: finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
cp/rtti.c: finish_builtin_struct (pseudo_type, pseudo_name, fields, NULL_TREE);
hsa-brig.c: finish_builtin_struct (variable_info_type, "__hsa_variable_info", id_f2,
hsa-brig.c: finish_builtin_struct (kernel_info_type, "__hsa_kernel_info", id_f5,
hsa-brig.c: finish_builtin_struct (hsa_image_desc_type, "__hsa_image_desc", id_f5,
hsa-gen.c: finish_builtin_struct (*hsa_kernel_dispatch_type, "__hsa_kernel_dispatch",
objc/objc-act.c: /* NB: The finish_builtin_struct() routine expects FIELD_DECLs in
objc/objc-act.c: finish_builtin_struct (type, "__builtin_ObjCString",
omp-expand.c: finish_builtin_struct (grid_attr_trees->kernel_launch_attributes_type,
stor-layout.c:finish_builtin_struct (tree type, const char *name, tree fields,
stor-layout.h:extern void finish_builtin_struct (tree, const char *, tree, tree,
Perhaps we could make them all to just use identifier_node
but I am honestly not sure :)
Bootstrapped/regtested x86_64-linux, OK?
Honza
* coverage.c (build_fn_info_type, build_info, coverage_obj_init):
Use make_node to build record type and pass true to
finish_builtin_struct.
* stor-layout.c (finish_record_layout): Add nodebug parameter.
* stor-layout.h (finish_builtin_struct): Likewise.
Index: coverage.c
===================================================================
--- coverage.c (revision 263696)
+++ coverage.c (working copy)
@@ -780,7 +780,7 @@ build_var (tree fn_decl, tree type, int
static void
build_fn_info_type (tree type, unsigned counters, tree gcov_info_type)
{
- tree ctr_info = lang_hooks.types.make_type (RECORD_TYPE);
+ tree ctr_info = make_node (RECORD_TYPE);
tree field, fields;
tree array_type;
@@ -797,7 +797,7 @@ build_fn_info_type (tree type, unsigned
DECL_CHAIN (field) = fields;
fields = field;
- finish_builtin_struct (ctr_info, "__gcov_ctr_info", fields, NULL_TREE);
+ finish_builtin_struct (ctr_info, "__gcov_ctr_info", fields, NULL_TREE, true);
/* key */
field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE,
@@ -831,7 +831,7 @@ build_fn_info_type (tree type, unsigned
DECL_CHAIN (field) = fields;
fields = field;
- finish_builtin_struct (type, "__gcov_fn_info", fields, NULL_TREE);
+ finish_builtin_struct (type, "__gcov_fn_info", fields, NULL_TREE, true);
}
/* Returns a CONSTRUCTOR for a gcov_fn_info. DATA is
@@ -963,7 +963,7 @@ build_info_type (tree type, tree fn_info
DECL_CHAIN (field) = fields;
fields = field;
- finish_builtin_struct (type, "__gcov_info", fields, NULL_TREE);
+ finish_builtin_struct (type, "__gcov_info", fields, NULL_TREE, true);
}
/* Returns a CONSTRUCTOR for the gcov_info object. INFO_TYPE is the
@@ -1020,8 +1020,6 @@ build_info (tree info_type, tree fn_ary)
get_identifier (ctr_merge_functions[ix]),
TREE_TYPE (merge_fn_type));
DECL_EXTERNAL (merge_fn) = 1;
- TREE_PUBLIC (merge_fn) = 1;
- DECL_ARTIFICIAL (merge_fn) = 1;
TREE_NOTHROW (merge_fn) = 1;
/* Initialize assembler name so we can stream out. */
DECL_ASSEMBLER_NAME (merge_fn);
@@ -1140,10 +1138,10 @@ coverage_obj_init (void)
n_counters++;
/* Build the info and fn_info types. These are mutually recursive. */
- gcov_info_type = lang_hooks.types.make_type (RECORD_TYPE);
- gcov_fn_info_type = lang_hooks.types.make_type (RECORD_TYPE);
+ gcov_info_type = make_node (RECORD_TYPE);
+ gcov_fn_info_type = make_node (RECORD_TYPE);
build_fn_info_type (gcov_fn_info_type, n_counters, gcov_info_type);
- gcov_info_type = lang_hooks.types.make_type (RECORD_TYPE);
+ gcov_info_type = make_node (RECORD_TYPE);
gcov_fn_info_ptr_type = build_pointer_type
(build_qualified_type (gcov_fn_info_type, TYPE_QUAL_CONST));
build_info_type (gcov_info_type, gcov_fn_info_ptr_type);
Index: stor-layout.c
===================================================================
--- stor-layout.c (revision 263696)
+++ stor-layout.c (working copy)
@@ -2224,13 +2224,14 @@ finish_record_layout (record_layout_info
/* Finish processing a builtin RECORD_TYPE type TYPE. It's name is
NAME, its fields are chained in reverse on FIELDS.
+ If NODEBUG is set, do not produce TYPE_DECL and STUB.
If ALIGN_TYPE is non-null, it is given the same alignment as
ALIGN_TYPE. */
void
finish_builtin_struct (tree type, const char *name, tree fields,
- tree align_type)
+ tree align_type, bool nodebug)
{
tree tail, next;
@@ -2251,14 +2252,15 @@ finish_builtin_struct (tree type, const
}
layout_type (type);
-#if 0 /* not yet, should get fixed properly later */
- TYPE_NAME (type) = make_type_decl (get_identifier (name), type);
-#else
- TYPE_NAME (type) = build_decl (BUILTINS_LOCATION,
- TYPE_DECL, get_identifier (name), type);
-#endif
- TYPE_STUB_DECL (type) = TYPE_NAME (type);
- layout_decl (TYPE_NAME (type), 0);
+ if (nodebug)
+ TYPE_NAME (type) = get_identifier (name);
+ else
+ {
+ TYPE_NAME (type) = build_decl (BUILTINS_LOCATION,
+ TYPE_DECL, get_identifier (name), type);
+ TYPE_STUB_DECL (type) = TYPE_NAME (type);
+ layout_decl (TYPE_NAME (type), 0);
+ }
}
/* Calculate the mode, size, and alignment for TYPE.
Index: stor-layout.h
===================================================================
--- stor-layout.h (revision 263696)
+++ stor-layout.h (working copy)
@@ -43,7 +43,8 @@ extern void initialize_sizetypes (void);
/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
fields. Optionally specify an alignment, and then lay it out. */
-extern void finish_builtin_struct (tree, const char *, tree, tree);
+extern void finish_builtin_struct (tree, const char *, tree, tree,
+ bool nodebug = false);
/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
More information about the Gcc-patches
mailing list