Commit 419ba5b9 by Eric Botcazou

c-ada-spec.h (enum cpp_operation): Add IS_ASSIGNMENT_OPERATOR.

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
parent eaa6a39d
2019-05-16 Martin Sebor <msebor@redhat.com> 2019-05-16 Martin Sebor <msebor@redhat.com>
* gcc-interface/trans.c (check_inlining_for_nested_subprog): Quote * gcc-interface/trans.c (check_inlining_for_nested_subprog): Quote
reserved names. reserved names.
2019-05-08 Arnaud Charlet <charlet@adacore.com> 2019-05-08 Arnaud Charlet <charlet@adacore.com>
......
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> 2019-05-17 Thomas Schwinge <thomas@codesourcery.com>
PR c/89433 PR c/89433
......
...@@ -2681,6 +2681,17 @@ print_destructor (pretty_printer *buffer, tree t, tree type) ...@@ -2681,6 +2681,17 @@ print_destructor (pretty_printer *buffer, tree t, tree type)
pp_ada_tree_identifier (buffer, decl_name, t, false); 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. */ /* Return the name of type T. */
static const char * static const char *
...@@ -2920,6 +2931,7 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) ...@@ -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; bool is_method = TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE;
tree decl_name = DECL_NAME (t); tree decl_name = DECL_NAME (t);
bool is_abstract = false; bool is_abstract = false;
bool is_assignment_operator = false;
bool is_constructor = false; bool is_constructor = false;
bool is_destructor = false; bool is_destructor = false;
bool is_copy_constructor = false; bool is_copy_constructor = false;
...@@ -2931,6 +2943,7 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) ...@@ -2931,6 +2943,7 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
if (cpp_check) if (cpp_check)
{ {
is_abstract = cpp_check (t, IS_ABSTRACT); is_abstract = cpp_check (t, IS_ABSTRACT);
is_assignment_operator = cpp_check (t, IS_ASSIGNMENT_OPERATOR);
is_constructor = cpp_check (t, IS_CONSTRUCTOR); is_constructor = cpp_check (t, IS_CONSTRUCTOR);
is_destructor = cpp_check (t, IS_DESTRUCTOR); is_destructor = cpp_check (t, IS_DESTRUCTOR);
is_copy_constructor = cpp_check (t, IS_COPY_CONSTRUCTOR); 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) ...@@ -2955,6 +2968,13 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
return 0; 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. */ /* If this function has an entry in the vtable, we cannot omit it. */
else if (!DECL_VINDEX (t) && *IDENTIFIER_POINTER (decl_name) == '_') 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) ...@@ -2977,6 +2997,8 @@ dump_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
print_constructor (buffer, t, type); print_constructor (buffer, t, type);
else if (is_destructor) else if (is_destructor)
print_destructor (buffer, t, type); print_destructor (buffer, t, type);
else if (is_assignment_operator)
print_assignment_operator (buffer, t, type);
else else
dump_ada_decl_name (buffer, t, false); dump_ada_decl_name (buffer, t, false);
......
...@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see
enum cpp_operation { enum cpp_operation {
HAS_DEPENDENT_TEMPLATE_ARGS, HAS_DEPENDENT_TEMPLATE_ARGS,
IS_ABSTRACT, IS_ABSTRACT,
IS_ASSIGNMENT_OPERATOR,
IS_CONSTRUCTOR, IS_CONSTRUCTOR,
IS_DESTRUCTOR, IS_DESTRUCTOR,
IS_COPY_CONSTRUCTOR, IS_COPY_CONSTRUCTOR,
......
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> 2019-05-20 Marek Polacek <polacek@redhat.com>
CWG 2094 - volatile scalars are trivially copyable. CWG 2094 - volatile scalars are trivially copyable.
......
...@@ -4249,6 +4249,8 @@ cpp_check (tree t, cpp_operation op) ...@@ -4249,6 +4249,8 @@ cpp_check (tree t, cpp_operation op)
} }
case IS_ABSTRACT: case IS_ABSTRACT:
return DECL_PURE_VIRTUAL_P (t); return DECL_PURE_VIRTUAL_P (t);
case IS_ASSIGNMENT_OPERATOR:
return DECL_ASSIGNMENT_OPERATOR_P (t);
case IS_CONSTRUCTOR: case IS_CONSTRUCTOR:
return DECL_CONSTRUCTOR_P (t); return DECL_CONSTRUCTOR_P (t);
case IS_DESTRUCTOR: case IS_DESTRUCTOR:
......
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