Commit 5b1e7435 by Jan Hubicka Committed by Jan Hubicka

tree.h (TYPE_FINAL_P, [...]): New macros.


	* tree.h (TYPE_FINAL_P, DECL_FINAL_P): New macros.
	(tree_decl_with_vis): Add FINAL field.

	* cp-tree.h (struct lang_type_class): Free is_final bit.
	(CLASSTYPE_FINAL): Define using TYPE_FINAL_P.
	(DECL_FINAL_P): Remove.
	* pt.c (instantiate_class_template_1): Guard that CLASSTYPE_FINAL
	is called on CLASS_TYPE_P.

From-SVN: r201975
parent 0691175f
2013-08-23 Jan Hubicka <jh@suse.cz>
* tree.h (TYPE_FINAL_P, DECL_FINAL_P): New macros.
(tree_decl_with_vis): Add FINAL field.
2013-08-23 Jeff Law <law@redhat.com> 2013-08-23 Jeff Law <law@redhat.com>
* tree-ssa-pre.c (do_regular_insertion): Include the expression in * tree-ssa-pre.c (do_regular_insertion): Include the expression in
......
2013-08-23 Jan Hubicka <jh@suse.cz>
* cp-tree.h (struct lang_type_class): Free is_final bit.
(CLASSTYPE_FINAL): Define using TYPE_FINAL_P.
(DECL_FINAL_P): Remove.
* pt.c (instantiate_class_template_1): Guard that CLASSTYPE_FINAL
is called on CLASS_TYPE_P.
2013-08-25 Gabriel Dos Reis <gdr@integrable-solutions.net> 2013-08-25 Gabriel Dos Reis <gdr@integrable-solutions.net>
* cxx-pretty-print.c (M_): Remove. * cxx-pretty-print.c (M_): Remove.
......
...@@ -1416,7 +1416,6 @@ struct GTY(()) lang_type_class { ...@@ -1416,7 +1416,6 @@ struct GTY(()) lang_type_class {
unsigned has_complex_move_ctor : 1; unsigned has_complex_move_ctor : 1;
unsigned has_complex_move_assign : 1; unsigned has_complex_move_assign : 1;
unsigned has_constexpr_ctor : 1; unsigned has_constexpr_ctor : 1;
unsigned is_final : 1;
/* When adding a flag here, consider whether or not it ought to /* When adding a flag here, consider whether or not it ought to
apply to a template instance if it applies to the template. If apply to a template instance if it applies to the template. If
...@@ -1425,7 +1424,7 @@ struct GTY(()) lang_type_class { ...@@ -1425,7 +1424,7 @@ struct GTY(()) lang_type_class {
/* There are some bits left to fill out a 32-bit word. Keep track /* There are some bits left to fill out a 32-bit word. Keep track
of this by updating the size of this bitfield whenever you add or of this by updating the size of this bitfield whenever you add or
remove a flag. */ remove a flag. */
unsigned dummy : 2; unsigned dummy : 3;
tree primary_base; tree primary_base;
vec<tree_pair_s, va_gc> *vcall_indices; vec<tree_pair_s, va_gc> *vcall_indices;
...@@ -1535,7 +1534,7 @@ struct GTY((variable_size)) lang_type { ...@@ -1535,7 +1534,7 @@ struct GTY((variable_size)) lang_type {
/* Nonzero means that NODE (a class type) is final */ /* Nonzero means that NODE (a class type) is final */
#define CLASSTYPE_FINAL(NODE) \ #define CLASSTYPE_FINAL(NODE) \
(LANG_TYPE_CLASS_CHECK (NODE)->is_final) TYPE_FINAL_P (NODE)
/* Nonzero means that this _CLASSTYPE node overloads operator=(X&). */ /* Nonzero means that this _CLASSTYPE node overloads operator=(X&). */
...@@ -2400,10 +2399,6 @@ struct GTY((variable_size)) lang_decl { ...@@ -2400,10 +2399,6 @@ struct GTY((variable_size)) lang_decl {
an override virt-specifier */ an override virt-specifier */
#define DECL_OVERRIDE_P(NODE) (TREE_LANG_FLAG_0 (NODE)) #define DECL_OVERRIDE_P(NODE) (TREE_LANG_FLAG_0 (NODE))
/* True (in a FUNCTION_DECL) if NODE is a function declared with
a final virt-specifier */
#define DECL_FINAL_P(NODE) (TREE_LANG_FLAG_1 (NODE))
/* The thunks associated with NODE, a FUNCTION_DECL. */ /* The thunks associated with NODE, a FUNCTION_DECL. */
#define DECL_THUNKS(NODE) \ #define DECL_THUNKS(NODE) \
(DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE) (DECL_VIRTUAL_P (NODE) ? LANG_DECL_FN_CHECK (NODE)->context : NULL_TREE)
......
...@@ -8730,7 +8730,8 @@ instantiate_class_template_1 (tree type) ...@@ -8730,7 +8730,8 @@ instantiate_class_template_1 (tree type)
/* Adjust visibility for template arguments. */ /* Adjust visibility for template arguments. */
determine_visibility (TYPE_MAIN_DECL (type)); determine_visibility (TYPE_MAIN_DECL (type));
} }
CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern); if (CLASS_TYPE_P (type))
CLASSTYPE_FINAL (type) = CLASSTYPE_FINAL (pattern);
pbinfo = TYPE_BINFO (pattern); pbinfo = TYPE_BINFO (pattern);
......
...@@ -715,6 +715,9 @@ struct GTY(()) tree_base { ...@@ -715,6 +715,9 @@ struct GTY(()) tree_base {
DECL_NONLOCAL_FRAME in DECL_NONLOCAL_FRAME in
VAR_DECL VAR_DECL
TYPE_FINAL_P in
RECORD_TYPE, UNION_TYPE and QUAL_UNION_TYPE
*/ */
struct GTY(()) tree_typed { struct GTY(()) tree_typed {
...@@ -2314,6 +2317,10 @@ enum cv_qualifier ...@@ -2314,6 +2317,10 @@ enum cv_qualifier
#define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \ #define TYPE_CONTAINS_PLACEHOLDER_INTERNAL(NODE) \
(TYPE_CHECK (NODE)->type_common.contains_placeholder_bits) (TYPE_CHECK (NODE)->type_common.contains_placeholder_bits)
/* Nonzero if RECORD_TYPE represents a final derivation of class. */
#define TYPE_FINAL_P(NODE) \
(RECORD_OR_UNION_CHECK (NODE)->base.default_def_flag)
/* The debug output functions use the symtab union field to store /* The debug output functions use the symtab union field to store
information specific to the debugging format. The different debug information specific to the debugging format. The different debug
output hooks store different types in the union field. These three output hooks store different types in the union field. These three
...@@ -3224,7 +3231,9 @@ struct GTY(()) tree_decl_with_vis { ...@@ -3224,7 +3231,9 @@ struct GTY(()) tree_decl_with_vis {
unsigned init_priority_p : 1; unsigned init_priority_p : 1;
/* Used by C++ only. Might become a generic decl flag. */ /* Used by C++ only. Might become a generic decl flag. */
unsigned shadowed_for_var_p : 1; unsigned shadowed_for_var_p : 1;
/* 14 unused bits. */ /* Belong to FUNCTION_DECL exclusively. */
unsigned final : 1;
/* 13 unused bits. */
}; };
extern tree decl_debug_expr_lookup (tree); extern tree decl_debug_expr_lookup (tree);
...@@ -3474,6 +3483,11 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree); ...@@ -3474,6 +3483,11 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree);
#define DECL_FUNCTION_VERSIONED(NODE)\ #define DECL_FUNCTION_VERSIONED(NODE)\
(FUNCTION_DECL_CHECK (NODE)->function_decl.versioned_function) (FUNCTION_DECL_CHECK (NODE)->function_decl.versioned_function)
/* In FUNCTION_DECL that represent an virtual method this is set when
the method is final. */
#define DECL_FINAL_P(NODE)\
(FUNCTION_DECL_CHECK (NODE)->decl_with_vis.final)
/* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the /* FUNCTION_DECL inherits from DECL_NON_COMMON because of the use of the
arguments/result/saved_tree fields by front ends. It was either inherit arguments/result/saved_tree fields by front ends. It was either inherit
FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL, FUNCTION_DECL from non_common, or inherit non_common from FUNCTION_DECL,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment