diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2017-02-24 10:37:45 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2017-02-24 10:37:45 +0000 |
commit | c840f801360ab84cf90d70d274475f2f3281f89a (patch) | |
tree | b3adee0f02e25393539ffbfbc00bebf4ad975449 | |
parent | 48d92aea2a69aca7de76b08cc95acf43df6f74dd (diff) |
* gcc-interface/trans.c (return_value_ok_for_nrv_p): Add sanity check.
From-SVN: r245702
-rw-r--r-- | gcc/ada/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ada/gcc-interface/trans.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/opt63.adb | 19 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8e5325bc623..2efd85f9aad 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2017-02-24 Eric Botcazou <ebotcazou@adacore.com> + + * gcc-interface/trans.c (return_value_ok_for_nrv_p): Add sanity check. + 2017-02-12 John Marino <gnugcc@marino.st> * gcc-interface/Makefile.in: Support aarch64-freebsd. diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c index cf64d229a5b..b6cfc1c89c6 100644 --- a/gcc/ada/gcc-interface/trans.c +++ b/gcc/ada/gcc-interface/trans.c @@ -3600,9 +3600,16 @@ return_value_ok_for_nrv_p (tree ret_obj, tree ret_val) if (TREE_ADDRESSABLE (ret_val)) return false; + /* For the constrained case, test for overalignment. */ if (ret_obj && DECL_ALIGN (ret_val) > DECL_ALIGN (ret_obj)) return false; + /* For the unconstrained case, test for bogus initialization. */ + if (!ret_obj + && DECL_INITIAL (ret_val) + && TREE_CODE (DECL_INITIAL (ret_val)) == NULL_EXPR) + return false; + return true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 31c4aecb5f4..8217ee97213 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2017-02-24 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/opt63.adb: New test. + 2017-02-23 Bill Schmidt <wschmidt@linux.vnet.ibm.com> PR target/79268 diff --git a/gcc/testsuite/gnat.dg/opt63.adb b/gcc/testsuite/gnat.dg/opt63.adb new file mode 100644 index 00000000000..6471be40bbd --- /dev/null +++ b/gcc/testsuite/gnat.dg/opt63.adb @@ -0,0 +1,19 @@ +-- { dg-do compile } +-- { dg-options "-O -gnatws" } + +procedure Opt63 is + + type T_MOD is mod 2**32; + subtype T_INDEX is T_MOD range 3_000_000_000 .. 4_000_000_000; + type T_ARRAY is array(T_INDEX range <>) of INTEGER; + + function Build_Crash(First : T_INDEX; Length : NATURAL) return T_ARRAY is + R : T_ARRAY(First .. T_Index'Val (T_Index'Pos (First) + Length)) + := (others => -1); -- Crash here + begin + return R; + end; + +begin + null; +end; |