From b83053bf4288fa0fe49eb55027174f9bc4600c43 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Tue, 3 Jul 2012 09:06:08 +0000 Subject: [PATCH] trans.c (Call_to_gnu): Robustify test for function case if the CICO mechanism is used. * gcc-interface/trans.c (Call_to_gnu): Robustify test for function case if the CICO mechanism is used. From-SVN: r189204 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/trans.c | 5 ++--- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/recursive_call.adb | 10 ++++++++++ 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/recursive_call.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index f6eb89b9d3a..60f6ef8128f 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2012-07-03 Eric Botcazou + + * gcc-interface/trans.c (Call_to_gnu): Robustify test for function case + if the CICO mechanism is used. + 2012-07-03 Eric Botcazou * gcc-interface/utils2.c (build_simple_component_ref): Do not look diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index de03cba8b21..08a263a8e8e 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -4084,7 +4084,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, /* The first entry is for the actual return value if this is a function, so skip it. */ - if (TREE_VALUE (gnu_cico_list) == void_type_node) + if (function_call) gnu_cico_list = TREE_CHAIN (gnu_cico_list); if (Nkind (Name (gnat_node)) == N_Explicit_Dereference) @@ -4188,8 +4188,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, return value from it and update the return type. */ if (TYPE_CI_CO_LIST (gnu_subprog_type)) { - tree gnu_elmt = value_member (void_type_node, - TYPE_CI_CO_LIST (gnu_subprog_type)); + tree gnu_elmt = TYPE_CI_CO_LIST (gnu_subprog_type); gnu_call = build_component_ref (gnu_call, NULL_TREE, TREE_PURPOSE (gnu_elmt), false); gnu_result_type = TREE_TYPE (gnu_call); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 539dfd3b4c2..1d7c75efde1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-07-03 Eric Botcazou + + * gnat.dg/recursive_call.adb: New test. + 2012-07-03 Eric Botcazou * gnat.dg/discr37.ad[sb]: New test. diff --git a/gcc/testsuite/gnat.dg/recursive_call.adb b/gcc/testsuite/gnat.dg/recursive_call.adb new file mode 100644 index 00000000000..ab60e4491bd --- /dev/null +++ b/gcc/testsuite/gnat.dg/recursive_call.adb @@ -0,0 +1,10 @@ +-- { dg-do compile } +-- { dg-options "-gnat2012" } + +function Recursive_Call (File : String; Status : out Boolean) return Boolean is +begin + if File /= "/dev/null" then + return Recursive_Call ("/dev/null", Status); + end if; + return False; +end;