From d6b260ffe4082eeadf2bff7120669bf0ab92bb50 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Thu, 10 Dec 2015 14:06:15 +0000 Subject: [PATCH] * gcc-interface/trans.c (Call_to_gnu): Remove guard for NULL_EXPR. * gcc-interface/utils2.c (gnat_rewrite_reference) : Return the reference unmodified. : New case. Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@231513 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 7 +++++++ gcc/ada/gcc-interface/trans.c | 4 +--- gcc/ada/gcc-interface/utils2.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gnat.dg/array25.adb | 11 +++++++++++ gcc/testsuite/gnat.dg/array25_pkg.adb | 15 +++++++++++++++ gcc/testsuite/gnat.dg/array25_pkg.ads | 19 +++++++++++++++++++ 7 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/array25.adb create mode 100644 gcc/testsuite/gnat.dg/array25_pkg.adb create mode 100644 gcc/testsuite/gnat.dg/array25_pkg.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 955f036..10758ff 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,5 +1,12 @@ 2015-12-10 Eric Botcazou + * gcc-interface/trans.c (Call_to_gnu): Remove guard for NULL_EXPR. + * gcc-interface/utils2.c (gnat_rewrite_reference) : Return + the reference unmodified. + : New case. Likewise. + +2015-12-10 Eric Botcazou + * gcc-interface/gigi.h (create_var_decl): Adjust comment. (create_subprog_decl): Likewise. * gcc-interface/utils.c (create_var_decl): Likewise. diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index d565854..d8d5ce2 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -4407,9 +4407,7 @@ Call_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, tree gnu_target, /* If it's possible we may need to use this expression twice, make sure that any side-effects are handled via SAVE_EXPRs; likewise if we need to force side-effects before the call. */ - if (Ekind (gnat_formal) != E_In_Parameter - && !is_by_ref_formal_parm - && TREE_CODE (gnu_name) != NULL_EXPR) + if (Ekind (gnat_formal) != E_In_Parameter && !is_by_ref_formal_parm) { tree init = NULL_TREE; gnu_name = gnat_stabilize_reference (gnu_name, true, &init); diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c index ca307f3..8af121e 100644 --- a/gcc/ada/gcc-interface/utils2.c +++ b/gcc/ada/gcc-interface/utils2.c @@ -2733,7 +2733,8 @@ gnat_rewrite_reference (tree ref, rewrite_fn func, void *data, tree *init) break; case ERROR_MARK: - return error_mark_node; + case NULL_EXPR: + return ref; default: gcc_unreachable (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bb785c6..c4f66a8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-12-10 Eric Botcazou + + * gnat.dg/array25.adb: New test. + * gnat.dg/array25_pkg.ad[sb]: New helper. + 2015-12-10 Claudiu Zissulescu * lib/target-supports.exp (check_effective_target_arc_atomic): New diff --git a/gcc/testsuite/gnat.dg/array25.adb b/gcc/testsuite/gnat.dg/array25.adb new file mode 100644 index 0000000..68dd3cb --- /dev/null +++ b/gcc/testsuite/gnat.dg/array25.adb @@ -0,0 +1,11 @@ +-- { dg-do compile } + +with Array25_Pkg; + +procedure Array25 is + + package My_Pkg is new Array25_Pkg (0, 0); + +begin + null; +end; diff --git a/gcc/testsuite/gnat.dg/array25_pkg.adb b/gcc/testsuite/gnat.dg/array25_pkg.adb new file mode 100644 index 0000000..9bb2fa5 --- /dev/null +++ b/gcc/testsuite/gnat.dg/array25_pkg.adb @@ -0,0 +1,15 @@ +package body Array25_Pkg is + + procedure Get_Inner (A : out Arr1) is + begin + null; + end; + + procedure Get (A : out Arr2) is + begin + for I in Arr2'Range loop + Get_Inner (A (I).Data); + end loop; + end; + +end Array25_Pkg; diff --git a/gcc/testsuite/gnat.dg/array25_pkg.ads b/gcc/testsuite/gnat.dg/array25_pkg.ads new file mode 100644 index 0000000..1965bab --- /dev/null +++ b/gcc/testsuite/gnat.dg/array25_pkg.ads @@ -0,0 +1,19 @@ +generic + + UB1 : Natural; + + UB2 : Natural; + +package Array25_Pkg is + + type Arr1 is array (1 .. UB1) of Integer; + + type Rec is record + Data : Arr1; + end record; + + type Arr2 is array (1 .. UB2) of Rec; + + procedure Get (A : out Arr2); + +end Array25_Pkg; -- 2.7.4