c-ada-spec.h (enum cpp_operation): Add IS_ASSIGNMENT_OPERATOR.
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 21 May 2019 07:00:45 +0000 (07:00 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Tue, 21 May 2019 07:00:45 +0000 (07:00 +0000)
c-family/
* c-ada-spec.h (enum cpp_operation): Add IS_ASSIGNMENT_OPERATOR.
* c-ada-spec.c (print_assignment_operator): New function.
(dump_ada_declaration) <FUNCTION_DECL>: Call it do dump explicit copy
assignment operators declared as methods and filter out the others.
cp/
* decl2.c (cpp_check) <IS_ASSIGNMENT_OPERATOR>: New case.

From-SVN: r271457

gcc/ada/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-ada-spec.c
gcc/c-family/c-ada-spec.h
gcc/cp/ChangeLog
gcc/cp/decl2.c

index ccea2b9b26fe523a0daec7ac4792c92cad991b36..e2a75de1f632d84ea676571937cf94d9e705a5fc 100644 (file)
@@ -1,7 +1,7 @@
 2019-05-16  Martin Sebor  <msebor@redhat.com>
 
-        * gcc-interface/trans.c (check_inlining_for_nested_subprog): Quote
-        reserved names.
+       * gcc-interface/trans.c (check_inlining_for_nested_subprog): Quote
+       reserved names.
 
 2019-05-08  Arnaud Charlet  <charlet@adacore.com>
 
index 50687764221bd442a1a762a1ed2bf76542a84154..71cb361b8d6cb09922c7f81a2998720740c9b96a 100644 (file)
@@ -1,3 +1,10 @@
+2019-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * c-ada-spec.h (enum cpp_operation): Add IS_ASSIGNMENT_OPERATOR.
+       * c-ada-spec.c (print_assignment_operator): New function.
+       (dump_ada_declaration) <FUNCTION_DECL>: Call it do dump explicit copy
+       assignment operators declared as methods and filter out the others.
+
 2019-05-17  Thomas Schwinge  <thomas@codesourcery.com>
 
        PR c/89433
index c85e6060d3e73c6b9982e72766c291bc2570bb8f..dc3a044fd90b4ff45d93ab50629c6c473cb0bd41 100644 (file)
@@ -2681,6 +2681,17 @@ print_destructor (pretty_printer *buffer, tree t, tree type)
   pp_ada_tree_identifier (buffer, decl_name, t, false);
 }
 
+/* Dump in BUFFER assignment operator spec corresponding to T.  */
+
+static void
+print_assignment_operator (pretty_printer *buffer, tree t, tree type)
+{
+  tree decl_name = DECL_NAME (TYPE_NAME (type));
+
+  pp_string (buffer, "Assign_");
+  pp_ada_tree_identifier (buffer, decl_name, t, false);
+}
+
 /* Return the name of type T.  */
 
 static const char *
@@ -2920,6 +2931,7 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
       bool is_method = TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE;
       tree decl_name = DECL_NAME (t);
       bool is_abstract = false;
+      bool is_assignment_operator = false;
       bool is_constructor = false;
       bool is_destructor = false;
       bool is_copy_constructor = false;
@@ -2931,6 +2943,7 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
       if (cpp_check)
        {
          is_abstract = cpp_check (t, IS_ABSTRACT);
+         is_assignment_operator = cpp_check (t, IS_ASSIGNMENT_OPERATOR);
          is_constructor = cpp_check (t, IS_CONSTRUCTOR);
          is_destructor = cpp_check (t, IS_DESTRUCTOR);
          is_copy_constructor = cpp_check (t, IS_COPY_CONSTRUCTOR);
@@ -2955,6 +2968,13 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
            return 0;
        }
 
+      else if (is_assignment_operator)
+       {
+         /* ??? Skip implicit or non-method assignment operators for now.  */
+         if (DECL_ARTIFICIAL (t) || !is_method)
+           return 0;
+       }
+
       /* If this function has an entry in the vtable, we cannot omit it.  */
       else if (!DECL_VINDEX (t) && *IDENTIFIER_POINTER (decl_name) == '_')
        {
@@ -2977,6 +2997,8 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
        print_constructor (buffer, t, type);
       else if (is_destructor)
        print_destructor (buffer, t, type);
+      else if (is_assignment_operator)
+       print_assignment_operator (buffer, t, type);
       else
        dump_ada_decl_name (buffer, t, false);
 
index 59936620782f0eeb39238a276f83465ee5b7ba2c..f9ea1bcc698f7a4f3a5ac87e7fe173fc07845454 100644 (file)
@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3.  If not see
 enum cpp_operation {
   HAS_DEPENDENT_TEMPLATE_ARGS,
   IS_ABSTRACT,
+  IS_ASSIGNMENT_OPERATOR,
   IS_CONSTRUCTOR,
   IS_DESTRUCTOR,
   IS_COPY_CONSTRUCTOR,
index f5f6c444436d5f1565e78b3492c10f7794c8a053..f895f139ca7857d437d3b71881d7e44f9ce6f5e0 100644 (file)
@@ -1,3 +1,7 @@
+2019-05-21  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * decl2.c (cpp_check) <IS_ASSIGNMENT_OPERATOR>: New case.
+
 2019-05-20  Marek Polacek  <polacek@redhat.com>
 
        CWG 2094 - volatile scalars are trivially copyable.
index bd022ca7ae37b431e47adb1722db3adee7e98323..338db4ab6de114a07d898d1b91ab53148c35c7d2 100644 (file)
@@ -4249,6 +4249,8 @@ cpp_check (tree t, cpp_operation op)
        }
       case IS_ABSTRACT:
        return DECL_PURE_VIRTUAL_P (t);
+      case IS_ASSIGNMENT_OPERATOR:
+       return DECL_ASSIGNMENT_OPERATOR_P (t);
       case IS_CONSTRUCTOR:
        return DECL_CONSTRUCTOR_P (t);
       case IS_DESTRUCTOR: