Commit 8bb2ee59 by Eric Botcazou Committed by Eric Botcazou

c-ada-spec.c (dump_ada_function_declaration): Be prepared for broken function…

c-ada-spec.c (dump_ada_function_declaration): Be prepared for broken function declarations where arguments are missing.

	* c-ada-spec.c (dump_ada_function_declaration): Be prepared for broken
	function declarations where arguments are missing.  Rename variables.

From-SVN: r274794
parent 73c1f2f0
2019-08-21 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (dump_ada_function_declaration): Be prepared for broken
function declarations where arguments are missing. Rename variables.
2019-08-15 Richard Biener <rguenther@suse.de> 2019-08-15 Richard Biener <rguenther@suse.de>
* c-common.c (c_stddef_cpp_builtins): When the GIMPLE FE is * c-common.c (c_stddef_cpp_builtins): When the GIMPLE FE is
......
...@@ -1589,14 +1589,13 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func, ...@@ -1589,14 +1589,13 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func,
bool is_method, bool is_constructor, bool is_method, bool is_constructor,
bool is_destructor, int spc) bool is_destructor, int spc)
{ {
tree arg; tree type = TREE_TYPE (func);
const tree node = TREE_TYPE (func); tree arg = TYPE_ARG_TYPES (type);
tree t;
char buf[17]; char buf[17];
int num = 0, num_args = 0, have_args = true, have_ellipsis = false; int num, num_args = 0, have_args = true, have_ellipsis = false;
/* Compute number of arguments. */ /* Compute number of arguments. */
arg = TYPE_ARG_TYPES (node);
if (arg) if (arg)
{ {
while (TREE_CHAIN (arg) && arg != error_mark_node) while (TREE_CHAIN (arg) && arg != error_mark_node)
...@@ -1627,25 +1626,29 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func, ...@@ -1627,25 +1626,29 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func,
pp_left_paren (buffer); pp_left_paren (buffer);
} }
/* For a function, see if we have the corresponding arguments. */
if (TREE_CODE (func) == FUNCTION_DECL) if (TREE_CODE (func) == FUNCTION_DECL)
arg = DECL_ARGUMENTS (func); {
arg = DECL_ARGUMENTS (func);
for (t = arg, num = 0; t; t = DECL_CHAIN (t))
num++;
if (num < num_args)
arg = NULL_TREE;
}
else else
arg = NULL_TREE; arg = NULL_TREE;
if (arg == NULL_TREE) /* Otherwise, only print the types. */
if (!arg)
{ {
have_args = false; have_args = false;
arg = TYPE_ARG_TYPES (node); arg = TYPE_ARG_TYPES (type);
if (arg && TREE_CODE (TREE_VALUE (arg)) == VOID_TYPE)
arg = NULL_TREE;
} }
if (is_constructor) if (is_constructor)
arg = TREE_CHAIN (arg); arg = TREE_CHAIN (arg);
/* Print the argument names (if available) & types. */ /* Print the argument names (if available) and types. */
for (num = 1; num <= num_args; num++) for (num = 1; num <= num_args; num++)
{ {
if (have_args) if (have_args)
...@@ -1663,13 +1666,13 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func, ...@@ -1663,13 +1666,13 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func,
pp_string (buffer, buf); pp_string (buffer, buf);
} }
dump_ada_node (buffer, TREE_TYPE (arg), node, spc, false, true); dump_ada_node (buffer, TREE_TYPE (arg), type, spc, false, true);
} }
else else
{ {
sprintf (buf, "arg%d : ", num); sprintf (buf, "arg%d : ", num);
pp_string (buffer, buf); pp_string (buffer, buf);
dump_ada_node (buffer, TREE_VALUE (arg), node, spc, false, true); dump_ada_node (buffer, TREE_VALUE (arg), type, spc, false, true);
} }
/* If the type is a pointer to a tagged type, we need to differentiate /* If the type is a pointer to a tagged type, we need to differentiate
...@@ -1707,11 +1710,11 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func, ...@@ -1707,11 +1710,11 @@ dump_ada_function_declaration (pretty_printer *buffer, tree func,
if (num_args > 0) if (num_args > 0)
pp_right_paren (buffer); pp_right_paren (buffer);
if (is_constructor || !VOID_TYPE_P (TREE_TYPE (node))) if (is_constructor || !VOID_TYPE_P (TREE_TYPE (type)))
{ {
pp_string (buffer, " return "); pp_string (buffer, " return ");
tree type = is_constructor ? DECL_CONTEXT (func) : TREE_TYPE (node); tree rtype = is_constructor ? DECL_CONTEXT (func) : TREE_TYPE (type);
dump_ada_node (buffer, type, type, spc, false, true); dump_ada_node (buffer, rtype, rtype, spc, false, true);
} }
} }
......
2019-08-21 Eric Botcazou <ebotcazou@adacore.com>
* c-c++-common/dump-ada-spec-15.c: New test.
2019-08-21 Christophe Lyon <christophe.lyon@linaro.org> 2019-08-21 Christophe Lyon <christophe.lyon@linaro.org>
* gcc.target/arm/cmse/cmse-9.c: Add quotes to expected * gcc.target/arm/cmse/cmse-9.c: Add quotes to expected
......
/* { dg-do compile } */
/* { dg-options "-fdump-ada-spec" } */
extern void (*signal (int __sig, void (*__handler)(int)))(int);
/* { dg-final { cleanup-ada-spec } } */
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