Commit 9918e796 by Nathan Sidwell Committed by Nathan Sidwell

[C++ PATCH] overloaded operator fns [8/N]

https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00095.html
	* cp-tree.h (IDENTIFIER_NEWDEL_OP_P): Restore, adjust.
	(IDENTIFIER_NEW_OP_P): New.
	* decl.c (grokdeclarator): Restore IDENTIFIER_NEWDEL_OP_P use.
	* pt.c (push_template_decl_real): Likewise.
	* typeck.c (check_return_expr): Use IDENTIFIER_NEW_OP_P.

From-SVN: r254350
parent dfa65d3f
2017-11-02 Nathan Sidwell <nathan@acm.org>
* cp-tree.h (IDENTIFIER_NEWDEL_OP_P): Restore, adjust.
(IDENTIFIER_NEW_OP_P): New.
* decl.c (grokdeclarator): Restore IDENTIFIER_NEWDEL_OP_P use.
* pt.c (push_template_decl_real): Likewise.
* typeck.c (check_return_expr): Use IDENTIFIER_NEW_OP_P.
PR c++/82710
* decl.c (grokdeclarator): Don't warn when parens protect a return
type from a qualified name.
......@@ -8,16 +14,16 @@
* cp-tree.h (enum cp_identifier_kind): Delete cik_newdel_op.
Renumber and reserve udlit value.
(IDENTIFIER_NEWDEL_OP): Delete.
(IDENTIFIER_OVL_OP): New.
(IDENTIFIER_ASSIGN_OP): Adjust.
(IDENTIFIER_CONV_OP): Adjust.
(IDENTIFIER_NEWDEL_OP_P): Delete.
(IDENTIFIER_OVL_OP_P): New.
(IDENTIFIER_ASSIGN_OP_P): Adjust.
(IDENTIFIER_CONV_OP_P): Adjust.
(IDENTIFIER_OVL_OP_INFO): Adjust.
(IDENTIFIER_OVL_OP_FLAGS): New.
* decl.c (grokdeclarator): Use IDENTIFIER_OVL_OP_FLAGS.
* lex.c (get_identifier_kind_name): Adjust.
(init_operators): Don't special case new/delete ops.
* mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP.
* mangle.c (write_unqualified_id): Use IDENTIFIER_OVL_OP_P.
* pt.c (push_template_decl_real): Use IDENTIFIER_OVL_OP_FLAGS.
* typeck.c (check_return_expr): Likewise.
......
......@@ -1070,6 +1070,17 @@ enum cp_identifier_kind {
& IDENTIFIER_KIND_BIT_1 (NODE) \
& (!IDENTIFIER_KIND_BIT_0 (NODE)))
/* True if this identifier is a new or delete operator. */
#define IDENTIFIER_NEWDEL_OP_P(NODE) \
(IDENTIFIER_OVL_OP_P (NODE) \
&& IDENTIFIER_OVL_OP_FLAGS (NODE) & OVL_OP_FLAG_ALLOC)
/* True if this identifier is a new operator. */
#define IDENTIFIER_NEW_OP_P(NODE) \
(IDENTIFIER_OVL_OP_P (NODE) \
&& (IDENTIFIER_OVL_OP_FLAGS (NODE) \
& (OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE)) == OVL_OP_FLAG_ALLOC)
/* Access a C++-specific index for identifier NODE.
Used to optimize operator mappings etc. */
#define IDENTIFIER_CP_INDEX(NODE) \
......
......@@ -11751,8 +11751,7 @@ grokdeclarator (const cp_declarator *declarator,
if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
&& !(identifier_p (unqualified_id)
&& IDENTIFIER_OVL_OP_P (unqualified_id)
&& (IDENTIFIER_OVL_OP_FLAGS (unqualified_id) & OVL_OP_FLAG_ALLOC)))
&& IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
{
cp_cv_quals real_quals = memfn_quals;
if (cxx_dialect < cxx14 && constexpr_p
......@@ -11865,9 +11864,7 @@ grokdeclarator (const cp_declarator *declarator,
if (virtualp
&& identifier_p (unqualified_id)
&& IDENTIFIER_OVL_OP_P (unqualified_id)
&& (IDENTIFIER_OVL_OP_FLAGS (unqualified_id)
& OVL_OP_FLAG_ALLOC))
&& IDENTIFIER_NEWDEL_OP_P (unqualified_id))
{
error ("%qD cannot be declared %<virtual%>, since it "
"is always static", unqualified_id);
......
......@@ -5329,9 +5329,7 @@ push_template_decl_real (tree decl, bool is_friend)
error ("destructor %qD declared as member template", decl);
return error_mark_node;
}
if (IDENTIFIER_OVL_OP_P (DECL_NAME (decl))
&& (IDENTIFIER_OVL_OP_FLAGS (DECL_NAME (decl))
& OVL_OP_FLAG_ALLOC)
if (IDENTIFIER_NEWDEL_OP_P (DECL_NAME (decl))
&& (!prototype_p (TREE_TYPE (decl))
|| TYPE_ARG_TYPES (TREE_TYPE (decl)) == void_list_node
|| !TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (decl)))
......
......@@ -9073,9 +9073,7 @@ check_return_expr (tree retval, bool *no_warning)
}
/* Only operator new(...) throw(), can return NULL [expr.new/13]. */
if (IDENTIFIER_OVL_OP_P (DECL_NAME (current_function_decl))
&& ((IDENTIFIER_OVL_OP_FLAGS (DECL_NAME (current_function_decl))
& (OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE)) == OVL_OP_FLAG_ALLOC)
if (IDENTIFIER_NEW_OP_P (DECL_NAME (current_function_decl))
&& !TYPE_NOTHROW_P (TREE_TYPE (current_function_decl))
&& ! flag_check_new
&& retval && null_ptr_cst_p (retval))
......
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