Commit 0f9aaac7 by Jan Hubicka Committed by Jan Hubicka

tree.h (tree_decl_with_vis): Add cxx_constructor, cxx_destructor.


	* tree.h (tree_decl_with_vis): Add cxx_constructor, cxx_destructor.
	(DECL_CXX_CONSTRUCTOR_P, DECL_CXX_DESTRUCTOR_P): New macros.
	* cp-tree.h (DECL_CONSTRUCTOR_P, DECL_DESTRUCTOR_P): Use
	middle-end flag.

From-SVN: r201994
parent 4b37444e
2013-08-26 Jan Hubicka <jh@suse.cz>
* tree.h (tree_decl_with_vis): Add cxx_constructor, cxx_destructor.
(DECL_CXX_CONSTRUCTOR_P, DECL_CXX_DESTRUCTOR_P): New macros.
2013-08-26 Joern Rennecke <joern.rennecke@embecosm.com> 2013-08-26 Joern Rennecke <joern.rennecke@embecosm.com>
* config/i386/i386.c (x86_64_elf_select_section): Put ATTRIBUTE_UNUSED * config/i386/i386.c (x86_64_elf_select_section): Put ATTRIBUTE_UNUSED
......
2013-08-26 Jan Hubicka <jh@suse.cz>
* cp-tree.h (DECL_CONSTRUCTOR_P, DECL_DESTRUCTOR_P): Use
middle-end flag.
2013-08-26 Gabriel Dos Reis <gdr@integrable-solutions.net> 2013-08-26 Gabriel Dos Reis <gdr@integrable-solutions.net>
* cxx-pretty-print.h (cxx_pretty_printer::unary_expression): * cxx-pretty-print.h (cxx_pretty_printer::unary_expression):
......
...@@ -2121,9 +2121,10 @@ struct GTY((variable_size)) lang_decl { ...@@ -2121,9 +2121,10 @@ struct GTY((variable_size)) lang_decl {
#define SET_DECL_LANGUAGE(NODE, LANGUAGE) \ #define SET_DECL_LANGUAGE(NODE, LANGUAGE) \
(DECL_LANG_SPECIFIC (NODE)->u.base.language = (LANGUAGE)) (DECL_LANG_SPECIFIC (NODE)->u.base.language = (LANGUAGE))
/* For FUNCTION_DECLs: nonzero means that this function is a constructor. */ /* For FUNCTION_DECLs and TEMPLATE_DECLs: nonzero means that this function
is a constructor. */
#define DECL_CONSTRUCTOR_P(NODE) \ #define DECL_CONSTRUCTOR_P(NODE) \
(LANG_DECL_FN_CHECK (NODE)->constructor_attr) DECL_CXX_CONSTRUCTOR_P (STRIP_TEMPLATE (NODE))
/* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete
object. */ object. */
...@@ -2152,9 +2153,10 @@ struct GTY((variable_size)) lang_decl { ...@@ -2152,9 +2153,10 @@ struct GTY((variable_size)) lang_decl {
#define DECL_MOVE_CONSTRUCTOR_P(NODE) \ #define DECL_MOVE_CONSTRUCTOR_P(NODE) \
(DECL_CONSTRUCTOR_P (NODE) && move_fn_p (NODE)) (DECL_CONSTRUCTOR_P (NODE) && move_fn_p (NODE))
/* Nonzero if NODE is a destructor. */ /* Nonzero if NODE (a FUNCTION_DECL or TEMPLATE_DECL)
is a destructor. */
#define DECL_DESTRUCTOR_P(NODE) \ #define DECL_DESTRUCTOR_P(NODE) \
(LANG_DECL_FN_CHECK (NODE)->destructor_attr) DECL_CXX_DESTRUCTOR_P (STRIP_TEMPLATE (NODE))
/* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the
specialized in-charge constructor, in-charge deleting constructor, specialized in-charge constructor, in-charge deleting constructor,
......
...@@ -3232,8 +3232,12 @@ struct GTY(()) tree_decl_with_vis { ...@@ -3232,8 +3232,12 @@ struct GTY(()) tree_decl_with_vis {
/* 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;
/* Belong to FUNCTION_DECL exclusively. */ /* Belong to FUNCTION_DECL exclusively. */
unsigned cxx_constructor : 1;
/* Belong to FUNCTION_DECL exclusively. */
unsigned cxx_destructor : 1;
/* Belong to FUNCTION_DECL exclusively. */
unsigned final : 1; unsigned final : 1;
/* 13 unused bits. */ /* 11 unused bits. */
}; };
extern tree decl_debug_expr_lookup (tree); extern tree decl_debug_expr_lookup (tree);
...@@ -3483,6 +3487,18 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree); ...@@ -3483,6 +3487,18 @@ 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, this is set if this function is a C++ constructor.
Devirtualization machinery uses this knowledge for determing type of the
object constructed. Also we assume that constructor address is not
important. */
#define DECL_CXX_CONSTRUCTOR_P(NODE)\
(FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_constructor)
/* In FUNCTION_DECL, this is set if this function is a C++ destructor.
Devirtualization machinery uses this to track types in destruction. */
#define DECL_CXX_DESTRUCTOR_P(NODE)\
(FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cxx_destructor)
/* In FUNCTION_DECL that represent an virtual method this is set when /* In FUNCTION_DECL that represent an virtual method this is set when
the method is final. */ the method is final. */
#define DECL_FINAL_P(NODE)\ #define DECL_FINAL_P(NODE)\
......
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