> Naming suggestion: we already use cpp_ as prefix for the C preprocessor. > Could we please not use it for C++, given that tree is used by so > many clients for just about anything. cxx_ is a good alternative.
CXX is fine with me. I updated by local copy. Honza > > > unsigned final : 1; > > - /* 13 unused bits. */ > > + /* 11 unused bits. */ > > }; > > > > extern tree decl_debug_expr_lookup (tree); > > @@ -3483,6 +3487,18 @@ extern vec<tree, va_gc> **decl_debug_arg > > #define DECL_FUNCTION_VERSIONED(NODE)\ > > (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_CPP_CONSTRUCTOR_P(NODE)\ > > Same here. > > > + (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cpp_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_CPP_DESTRUCTOR_P(NODE)\ > > + (FUNCTION_DECL_CHECK (NODE)->decl_with_vis.cpp_destructor) > > + > > Likewise. > > > /* In FUNCTION_DECL that represent an virtual method this is set when > > the method is final. */ > > #define DECL_FINAL_P(NODE)\ > > Index: cp/cp-tree.h > > =================================================================== > > --- cp/cp-tree.h (revision 201977) > > +++ cp/cp-tree.h (working copy) > > @@ -2121,9 +2121,10 @@ struct GTY((variable_size)) lang_decl { > > #define SET_DECL_LANGUAGE(NODE, 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) \ > > - (LANG_DECL_FN_CHECK (NODE)->constructor_attr) > > + DECL_CPP_CONSTRUCTOR_P (STRIP_TEMPLATE (NODE)) > > > > /* Nonzero if NODE (a FUNCTION_DECL) is a constructor for a complete > > object. */ > > @@ -2152,9 +2153,10 @@ struct GTY((variable_size)) lang_decl { > > #define DECL_MOVE_CONSTRUCTOR_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) \ > > - (LANG_DECL_FN_CHECK (NODE)->destructor_attr) > > + DECL_CPP_DESTRUCTOR_P (STRIP_TEMPLATE (NODE)) > > > > /* Nonzero if NODE (a FUNCTION_DECL) is a destructor, but not the > > specialized in-charge constructor, in-charge deleting constructor,