aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/decl2.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cp/decl2.c')
-rw-r--r--gcc/cp/decl2.c50
1 files changed, 39 insertions, 11 deletions
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 372b8ee8139..9f9af519f1c 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -42,6 +42,7 @@ Boston, MA 02111-1307, USA. */
#include "toplev.h"
#include "ggc.h"
#include "timevar.h"
+#include "cpphash.h"
#include "cpplib.h"
#include "target.h"
extern cpp_reader *parse_in;
@@ -429,6 +430,7 @@ lang_f_options[] =
{"short-double", &flag_short_double, 1},
{"short-wchar", &flag_short_wchar, 1},
{"asm", &flag_no_asm, 0},
+ {"auto-pch", &flag_auto_pch, 1},
{"builtin", &flag_no_builtin, 0},
/* C++-only options. */
@@ -562,6 +564,11 @@ cxx_decode_option (argc, argv)
flag_external_templates = 1;
cp_deprecated ("-fexternal-templates");
}
+ else if (!strcmp (p, "auto-pch"))
+ {
+ flag_auto_pch = 1;
+ CPP_OPTION (parse_in, gen_deps) = 1;
+ }
else if ((option_value
= skip_leading_substring (p, "template-depth-")))
max_tinst_depth
@@ -572,6 +579,12 @@ cxx_decode_option (argc, argv)
warning ("-fname-mangling-version is no longer supported");
return 1;
}
+ else if ((option_value
+ = skip_leading_substring (p, "output-pch=")))
+ {
+ pch_file = option_value;
+ CPP_OPTION (parse_in, gen_deps) = 1;
+ }
else if (dump_switch_p (p))
;
else
@@ -590,14 +603,14 @@ cxx_decode_option (argc, argv)
but breaks the VAX pcc. */
found = 1;
}
- if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
- && ! strcmp (p+3, lang_f_options[j].string))
+ else if (p[0] == 'n' && p[1] == 'o' && p[2] == '-'
+ && ! strcmp (p+3, lang_f_options[j].string))
{
*lang_f_options[j].variable = ! lang_f_options[j].on_value;
found = 1;
}
}
-
+
return found;
}
}
@@ -2181,7 +2194,7 @@ mark_vtable_entries (decl)
we know all the thunks we'll need when we emit a virtual
function, so we emit the thunks there instead. */
if (DECL_THUNK_P (fn))
- use_thunk (fn, /*emit_p=*/0);
+ use_thunk (fn, /*emit_p=*/0);
mark_used (fn);
}
}
@@ -2328,7 +2341,8 @@ import_export_vtable (decl, type, final)
functions in our class, or if we come from a template. */
int found = (CLASSTYPE_TEMPLATE_INSTANTIATION (type)
- || key_method (type));
+ || key_method (type));
+
if (final || ! found)
{
@@ -3358,6 +3372,9 @@ finish_file ()
int reconsider;
size_t i;
+ if (pch_file)
+ lang_write_pch ();
+
at_eof = 1;
/* Bad parse errors. Just forget about it. */
@@ -3389,6 +3406,8 @@ finish_file ()
timevar_push (TV_VARCONST);
+ process_interface_items ();
+
emit_support_tinfos ();
do
@@ -4852,6 +4871,7 @@ validate_nonmember_using_decl (decl, scope, name)
*scope = TREE_OPERAND (decl, 0);
*name = TREE_OPERAND (decl, 1);
+
if (!processing_template_decl)
{
/* [namespace.udecl]
@@ -5253,10 +5273,18 @@ handle_class_head (aggr, scope, id)
void
init_decl2 ()
{
- ggc_add_tree_varray_root (&deferred_fns, 1);
- ggc_add_tree_varray_root (&pending_statics, 1);
- ggc_add_tree_varray_root (&ssdf_decls, 1);
- ggc_add_tree_root (&ssdf_decl, 1);
- ggc_add_tree_root (&priority_decl, 1);
- ggc_add_tree_root (&initialize_p_decl, 1);
+ ggc_add_tree_varray_root (&deferred_fns, 1 , "deferred_fns" );
+ add_varray_tree_addresses (&data_to_save, &deferred_fns, 1 , "deferred_fns" );
+ ggc_add_tree_varray_root (&pending_statics, 1 , "pending_statics" );
+ add_varray_tree_addresses (&data_to_save, &pending_statics, 1 , "pending_statics" );
+ ggc_add_tree_varray_root (&ssdf_decls, 1 , "ssdf_decls" );
+ add_varray_tree_addresses (&data_to_save, &ssdf_decls, 1 , "ssdf_decls" );
+ ggc_add_tree_root (&ssdf_decl, 1 , "ssdf_decl" );
+ add_tree_addresses (&data_to_save, &ssdf_decl, 1 , "ssdf_decl" );
+ ggc_add_tree_root (&priority_decl, 1 , "priority_decl" );
+ add_tree_addresses (&data_to_save, &priority_decl, 1 , "priority_decl" );
+ ggc_add_tree_root (&initialize_p_decl, 1 , "initialize_p_decl" );
+ add_tree_addresses (&data_to_save, &initialize_p_decl, 1 , "initialize_p_decl" );
+
+
}