summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2017-05-19 13:10:36 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2017-05-19 13:10:36 +0000
commit0fa326f540e9c8a591b0a1b7a9380b3e63ef33a0 (patch)
treeb57253306ce6fa1d70381c3429ede182b0b3d246
parent8491ac512d2575ba9f886a9471e4aebc38678be7 (diff)
downloadgcc-0fa326f540e9c8a591b0a1b7a9380b3e63ef33a0.tar.gz
LANG_HOOK_REGISTER_DUMPS
gcc/ * toplev.c (general_init): Call register dump lang hook. * doc/invoke.texi: Document -fdump-lang option family. * dumpfile.c (dump_files): Remove class dump here. (FIRST_AUTO_NUMBERED_DUMP): Adjust. * dumpfile.h (tree_dump_index): Remove TDI_class. * langhooks-def.h (lhd_register_dumps): Declare. (LANG_HOOKS_REGISTER_DUMPS): Define. (LANG_HOOKS_INITIALIZER): Add it. * langhooks.c (lhd_register_dumps): Define. * langhooks.h (struct lang_hooks): Add register_dumps. c-family/ * c-opts.c (class_dump_file, class_dump_flags): Delete. (c_common_parse_file): Remove class dump handling. (get_dump_info): Likewise. cp/ * class.c (class_dump_id): Define. (dump_class_hierarchy, dump_vtable, dump_vtt): Use it. * cp-objcp-common.c (cp_register_dumps): New. * cp-objcp-common.h (cp_register_dumps): Declare. (LANG_HOOKS_REGISTER_DUMPS): Override. * cp-tree.h (class_dump_id): Declare. testsuite/ * g++.dg/inherit/covariant7.C: Adjust. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@248271 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog14
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-opts.c26
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/class.c16
-rw-r--r--gcc/cp/cp-objcp-common.c9
-rw-r--r--gcc/cp/cp-objcp-common.h3
-rw-r--r--gcc/cp/cp-tree.h3
-rw-r--r--gcc/doc/invoke.texi33
-rw-r--r--gcc/dumpfile.c3
-rw-r--r--gcc/dumpfile.h1
-rw-r--r--gcc/langhooks-def.h3
-rw-r--r--gcc/langhooks.c6
-rw-r--r--gcc/langhooks.h3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/inherit/covariant7.C2
-rw-r--r--gcc/toplev.c4
17 files changed, 105 insertions, 40 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b11d20dee41..44ff6176e90 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,19 @@
2017-05-19 Nathan Sidwell <nathan@acm.org>
+ LANG_HOOK_REGISTER_DUMPS
+ * toplev.c (general_init): Call register dump lang hook.
+ * doc/invoke.texi: Document -fdump-lang option family.
+ * dumpfile.c (dump_files): Remove class dump here.
+ (FIRST_AUTO_NUMBERED_DUMP): Adjust.
+ * dumpfile.h (tree_dump_index): Remove TDI_class.
+ * langhooks-def.h (lhd_register_dumps): Declare.
+ (LANG_HOOKS_REGISTER_DUMPS): Define.
+ (LANG_HOOKS_INITIALIZER): Add it.
+ * langhooks.c (lhd_register_dumps): Define.
+ * langhooks.h (struct lang_hooks): Add register_dumps.
+
+2017-05-19 Nathan Sidwell <nathan@acm.org>
+
* context.h (context::set_passes): New.
* context.c (context::context): Do not create pass manager.
* toplev.c (general_init): Create pass manager here.
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 4ce70e4d67a..5a842bd74d7 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2017-05-19 Nathan Sidwell <nathan@acm.org>
+
+ * c-opts.c (class_dump_file, class_dump_flags): Delete.
+ (c_common_parse_file): Remove class dump handling.
+ (get_dump_info): Likewise.
+
2017-05-19 Richard Biener <rguenther@suse.de>
PR c++/80593
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index d294c37bdba..be4478f5ce9 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -102,8 +102,6 @@ static size_t include_cursor;
/* Dump files/flags to use during parsing. */
static FILE *original_dump_file = NULL;
static dump_flags_t original_dump_flags;
-static FILE *class_dump_file = NULL;
-static dump_flags_t class_dump_flags;
/* Whether any standard preincluded header has been preincluded. */
static bool done_preinclude;
@@ -1098,10 +1096,9 @@ c_common_parse_file (void)
for (;;)
{
c_finish_options ();
- /* Open the dump files to use for the original and class dump output
+ /* Open the dump file to use for the original dump output
here, to be used during parsing for the current file. */
original_dump_file = dump_begin (TDI_original, &original_dump_flags);
- class_dump_file = dump_begin (TDI_class, &class_dump_flags);
pch_init ();
push_file_scope ();
c_parse_file ();
@@ -1120,11 +1117,6 @@ c_common_parse_file (void)
dump_end (TDI_original, original_dump_file);
original_dump_file = NULL;
}
- if (class_dump_file)
- {
- dump_end (TDI_class, class_dump_file);
- class_dump_file = NULL;
- }
/* If an input file is missing, abandon further compilation.
cpplib has issued a diagnostic. */
if (!this_input_filename)
@@ -1135,20 +1127,14 @@ c_common_parse_file (void)
}
/* Returns the appropriate dump file for PHASE to dump with FLAGS. */
+
FILE *
get_dump_info (int phase, dump_flags_t *flags)
{
- gcc_assert (phase == TDI_original || phase == TDI_class);
- if (phase == TDI_original)
- {
- *flags = original_dump_flags;
- return original_dump_file;
- }
- else
- {
- *flags = class_dump_flags;
- return class_dump_file;
- }
+ gcc_assert (phase == TDI_original);
+
+ *flags = original_dump_flags;
+ return original_dump_file;
}
/* Common finish hook for the C, ObjC and C++ front ends. */
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e903bfd1d71..09c82699b46 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+2017-05-19 Nathan Sidwell <nathan@acm.org>
+
+ * class.c (class_dump_id): Define.
+ (dump_class_hierarchy, dump_vtable, dump_vtt): Use it.
+ * cp-objcp-common.c (cp_register_dumps): New.
+ * cp-objcp-common.h (cp_register_dumps): Declare.
+ (LANG_HOOKS_REGISTER_DUMPS): Override.
+ * cp-tree.h (class_dump_id): Declare.
+
2017-05-18 Nathan Sidwell <nathan@acm.org>
* cp-tree.h (OVL_ARG_DEPENDENT): Delete.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 6f3f3e6eea9..c0eb945b385 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -37,6 +37,9 @@ along with GCC; see the file COPYING3. If not see
#include "gimplify.h"
#include "intl.h"
+/* Id for dumping the class hierarchy. */
+int class_dump_id;
+
/* The number of nested classes being processed. If we are not in the
scope of any class, this is zero. */
@@ -8914,11 +8917,10 @@ static void
dump_class_hierarchy (tree t)
{
dump_flags_t flags;
- FILE *stream = get_dump_info (TDI_class, &flags);
-
- if (stream)
+ if (FILE *stream = dump_begin (class_dump_id, &flags))
{
dump_class_hierarchy_1 (stream, flags, t);
+ dump_end (class_dump_id, stream);
}
}
@@ -8948,7 +8950,7 @@ static void
dump_vtable (tree t, tree binfo, tree vtable)
{
dump_flags_t flags;
- FILE *stream = get_dump_info (TDI_class, &flags);
+ FILE *stream = dump_begin (class_dump_id, &flags);
if (!stream)
return;
@@ -8971,13 +8973,15 @@ dump_vtable (tree t, tree binfo, tree vtable)
dump_array (stream, vtable);
fprintf (stream, "\n");
}
+
+ dump_end (class_dump_id, stream);
}
static void
dump_vtt (tree t, tree vtt)
{
dump_flags_t flags;
- FILE *stream = get_dump_info (TDI_class, &flags);
+ FILE *stream = dump_begin (class_dump_id, &flags);
if (!stream)
return;
@@ -8989,6 +8993,8 @@ dump_vtt (tree t, tree vtt)
dump_array (stream, vtt);
fprintf (stream, "\n");
}
+
+ dump_end (class_dump_id, stream);
}
/* Dump a function or thunk and its thunkees. */
diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c
index 86279780e42..40e9ccbe510 100644
--- a/gcc/cp/cp-objcp-common.c
+++ b/gcc/cp/cp-objcp-common.c
@@ -352,6 +352,15 @@ cp_pushdecl (tree decl)
return pushdecl (decl);
}
+/* Register c++-specific dumps. */
+
+void
+cp_register_dumps (gcc::dump_manager *dumps)
+{
+ class_dump_id = dumps->dump_register
+ (".class", "lang-class", "lang-class", DK_lang, OPTGROUP_NONE, false);
+}
+
void
cp_common_init_ts (void)
{
diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h
index 0d752a7a20a..10fcdf324fc 100644
--- a/gcc/cp/cp-objcp-common.h
+++ b/gcc/cp/cp-objcp-common.h
@@ -33,6 +33,7 @@ extern void cp_common_init_ts (void);
extern tree cp_unit_size_without_reusable_padding (tree);
extern tree cp_get_global_decls ();
extern tree cp_pushdecl (tree);
+extern void cp_register_dumps (gcc::dump_manager *);
/* Lang hooks that are shared between C++ and ObjC++ are defined here. Hooks
specific to C++ or ObjC++ go in cp/cp-lang.c and objcp/objcp-lang.c,
@@ -56,6 +57,8 @@ extern tree cp_pushdecl (tree);
#define LANG_HOOKS_INIT_OPTIONS c_common_init_options
#undef LANG_HOOKS_INITIALIZE_DIAGNOSTICS
#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS cxx_initialize_diagnostics
+#undef LANG_HOOKS_REGISTER_DUMPS
+#define LANG_HOOKS_REGISTER_DUMPS cp_register_dumps
#undef LANG_HOOKS_HANDLE_OPTION
#define LANG_HOOKS_HANDLE_OPTION c_common_handle_option
#undef LANG_HOOKS_HANDLE_FILENAME
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index 82bb9650106..e9e4b006110 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -5749,6 +5749,9 @@ concept_template_p (tree t)
e.g "int f(void)". */
extern cp_parameter_declarator *no_parameters;
+/* Various dump ids. */
+extern int class_dump_id;
+
/* in call.c */
extern bool check_dtor_name (tree, tree);
int magic_varargs_p (tree);
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 715830a1a43..4b7304ec025 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -544,6 +544,9 @@ Objective-C and Objective-C++ Dialects}.
-fdump-final-insns@r{[}=@var{file}@r{]}
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline @gol
-fdump-lang-all @gol
+-fdump-lang-@var{switch} @gol
+-fdump-lang-@var{switch}-@var{options} @gol
+-fdump-lang-@var{switch}-@var{options}=@var{filename} @gol
-fdump-passes @gol
-fdump-rtl-@var{pass} -fdump-rtl-@var{pass}=@var{filename} @gol
-fdump-statistics @gol
@@ -12940,16 +12943,6 @@ When doing debugging dumps (see @option{-d} option above), suppress
instruction numbers for the links to the previous and next instructions
in a sequence.
-@item -fdump-class-hierarchy @r{(C++ only)}
-@itemx -fdump-class-hierarchy-@var{options} @r{(C++ only)}
-@opindex fdump-class-hierarchy
-Dump a representation of each class's hierarchy and virtual function
-table layout to a file. The file name is made by appending
-@file{.class} to the source file name, and the file is created in the
-same directory as the output file. If the @samp{-@var{options}} form
-is used, @var{options} controls the details of the dump as described
-for the @option{-fdump-tree} options.
-
@item -fdump-ipa-@var{switch}
@opindex fdump-ipa
Control the dumping at various stages of inter-procedural analysis
@@ -12972,8 +12965,26 @@ Dump after function inlining.
@end table
@item -fdump-lang-all
+@itemx -fdump-lang-@var{switch}
+@itemx -fdump-lang-@var{switch}-@var{options}
+@itemx -fdump-lang-@var{switch}-@var{options}=@var{filename}
@opindex fdump-lang-all
-Control the dumping of language-specific information.
+@opindex fdump-lang
+Control the dumping of language-specific information. The @var{options}
+and @var{filename} portions behave as described in the
+`@option{-fdump-tree} option. The following @var{switch} values are
+accepted:
+
+@table @samp
+@item all
+
+Enable all language-specific dumps.
+
+@item class
+Dump class hierarchy information. Virtual table information is emitted
+unless '@option{slim}' is specified. This option is applicable to C++ only.
+
+@end table
@item -fdump-passes
@opindex fdump-passes
diff --git a/gcc/dumpfile.c b/gcc/dumpfile.c
index d5a0e70cf66..45e47b2d4e8 100644
--- a/gcc/dumpfile.c
+++ b/gcc/dumpfile.c
@@ -74,11 +74,10 @@ static struct dump_file_info dump_files[TDI_end] =
dump_file_info (".type-inheritance", "ipa-type-inheritance", DK_ipa, 0),
dump_file_info (".ipa-clones", "ipa-clones", DK_ipa, 0),
dump_file_info (".tu", "translation-unit", DK_lang, 1),
- dump_file_info (".class", "class-hierarchy", DK_lang, 2),
dump_file_info (".original", "tree-original", DK_tree, 3),
dump_file_info (".gimple", "tree-gimple", DK_tree, 4),
dump_file_info (".nested", "tree-nested", DK_tree, 5),
-#define FIRST_AUTO_NUMBERED_DUMP 6
+#define FIRST_AUTO_NUMBERED_DUMP 4
dump_file_info (NULL, "lang-all", DK_lang, 0),
dump_file_info (NULL, "tree-all", DK_tree, 0),
diff --git a/gcc/dumpfile.h b/gcc/dumpfile.h
index bec2fa2188f..1f7c8de682b 100644
--- a/gcc/dumpfile.h
+++ b/gcc/dumpfile.h
@@ -31,7 +31,6 @@ enum tree_dump_index
TDI_inheritance, /* dump type inheritance graph. */
TDI_clones, /* dump IPA cloning decisions. */
TDI_tu, /* dump the whole translation unit. */
- TDI_class, /* dump class hierarchy. */
TDI_original, /* dump each function before optimizing it */
TDI_generic, /* dump each function after genericizing it */
TDI_nested, /* dump each function after unnesting it */
diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h
index eb680848f6a..ea2006ccec5 100644
--- a/gcc/langhooks-def.h
+++ b/gcc/langhooks-def.h
@@ -39,6 +39,7 @@ extern void lhd_do_nothing (void);
extern void lhd_do_nothing_t (tree);
extern void lhd_do_nothing_f (struct function *);
extern tree lhd_pass_through_t (tree);
+extern void lhd_register_dumps (gcc::dump_manager *);
extern bool lhd_post_options (const char **);
extern alias_set_type lhd_get_alias_set (tree);
extern tree lhd_return_null_tree (tree);
@@ -97,6 +98,7 @@ extern int lhd_type_dwarf_attribute (const_tree, int);
#define LANG_HOOKS_INIT_OPTIONS_STRUCT hook_void_gcc_optionsp
#define LANG_HOOKS_INIT_OPTIONS lhd_init_options
#define LANG_HOOKS_INITIALIZE_DIAGNOSTICS lhd_initialize_diagnostics
+#define LANG_HOOKS_REGISTER_DUMPS lhd_register_dumps
#define LANG_HOOKS_COMPLAIN_WRONG_LANG_P lhd_complain_wrong_lang_p
#define LANG_HOOKS_HANDLE_OPTION lhd_handle_option
#define LANG_HOOKS_POST_OPTIONS lhd_post_options
@@ -294,6 +296,7 @@ extern void lhd_end_section (void);
LANG_HOOKS_INIT_OPTIONS_STRUCT, \
LANG_HOOKS_INIT_OPTIONS, \
LANG_HOOKS_INITIALIZE_DIAGNOSTICS, \
+ LANG_HOOKS_REGISTER_DUMPS, \
LANG_HOOKS_COMPLAIN_WRONG_LANG_P, \
LANG_HOOKS_HANDLE_OPTION, \
LANG_HOOKS_POST_OPTIONS, \
diff --git a/gcc/langhooks.c b/gcc/langhooks.c
index dc19db71db2..c54b790f0cc 100644
--- a/gcc/langhooks.c
+++ b/gcc/langhooks.c
@@ -322,6 +322,12 @@ lhd_initialize_diagnostics (diagnostic_context *ctx ATTRIBUTE_UNUSED)
{
}
+/* Called to register dumps. */
+void
+lhd_register_dumps (gcc::dump_manager *)
+{
+}
+
/* Called to perform language-specific options initialization. */
void
lhd_init_options (unsigned int decoded_options_count ATTRIBUTE_UNUSED,
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index 2a2ef8affef..b2f0f922b89 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -326,6 +326,9 @@ struct lang_hooks
global diagnostic context structure. */
void (*initialize_diagnostics) (diagnostic_context *);
+ /* Register language-specific dumps. */
+ void (*register_dumps) (gcc::dump_manager *);
+
/* Return true if a warning should be given about option OPTION,
which is for the wrong language, false if it should be quietly
ignored. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 01319bdceda..5f0fe80684e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-05-19 Nathan Sidwell <nathan@acm.org>
+
+ * g++.dg/inherit/covariant7.C: Adjust.
+
2017-05-19 Prakhar Bahuguna <prakhar.bahuguna@arm.com>
* gcc.target/arm/tls-disable-literal-pool.c: Change
diff --git a/gcc/testsuite/g++.dg/inherit/covariant7.C b/gcc/testsuite/g++.dg/inherit/covariant7.C
index b8c5c8e717e..73663bd6ebe 100644
--- a/gcc/testsuite/g++.dg/inherit/covariant7.C
+++ b/gcc/testsuite/g++.dg/inherit/covariant7.C
@@ -1,6 +1,6 @@
// { dg-do compile }
// { dg-prune-output "direct base" }
-// { dg-options "-fdump-class-hierarchy" }
+// { dg-options "-fdump-lang-class" }
// Copyright (C) 2002 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 27 Dec 2002 <nathan@codesourcery.com>
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 814193a4509..425315c8b5e 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1158,6 +1158,10 @@ general_init (const char *argv0, bool init_signals)
dump manager. */
g = new gcc::context ();
+ /* Allow languages to register their dumps before the optimization
+ passes. */
+ lang_hooks.register_dumps (g->get_dumps ());
+
/* Create the passes. */
g->set_passes (new gcc::pass_manager (g));