[C++ PATCH] overloaded operator fns [8/N]
authorNathan Sidwell <nathan@acm.org>
Thu, 2 Nov 2017 18:29:26 +0000 (18:29 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 2 Nov 2017 18:29:26 +0000 (18:29 +0000)
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

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/pt.c
gcc/cp/typeck.c

index 7a7a58941e67b8fd59b8d6cae32315f5f62da0ab..f1dec178920146f683df687a3cb9184bc53297bc 100644 (file)
@@ -1,5 +1,11 @@
 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.
 
        * 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.
 
index 1de32de14052afaa77573bebbf9e91e274582626..65f1fae5c5ea4dd8d19ad51cc02908e8140e4d49 100644 (file)
@@ -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)              \
index 62bd3daef74148cd21f5141250e57ef1f3e09d62..7c6f85724df53ae2d7631a029e31a5b9e2b69737 100644 (file)
@@ -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);
index f807e8c3955d95afaa67d609ce745bcee8b22a84..629b2dd50ef1f91035aa05ace5501015b90a813b 100644 (file)
@@ -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)))
index e2df355921a72df41a6582eaed1dd22e4989967a..9130c10f3908f573f176e02fe2b8b22ab5bc61d6 100644 (file)
@@ -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))