diff mbox

Fix PR target/64055

Message ID 20141201091901.GA2963@msticlxl57.ims.intel.com
State New
Headers show

Commit Message

Ilya Enkovich Dec. 1, 2014, 9:33 a.m. UTC
Hi,

This patch fixes ICE in chkp_find_bound_slots_1 by checking for non constant values in array domain.  Bootstrapped on x86_64-unknown-linux-gnu with Ada.  gnat.dg/derived_aggregate.adb is a new pass.  OK for trunk?

Thanks,
Ilya
--
2014-12-01  Ilya Enkovich  <ilya.enkovich@intel.com>

	PR target/64055
	* tree-chkp.c (chkp_find_bound_slots_1): Allow non constant
	values in array domain.

Comments

Richard Biener Dec. 1, 2014, 11:11 a.m. UTC | #1
On Mon, Dec 1, 2014 at 10:33 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
> Hi,
>
> This patch fixes ICE in chkp_find_bound_slots_1 by checking for non constant values in array domain.  Bootstrapped on x86_64-unknown-linux-gnu with Ada.  gnat.dg/derived_aggregate.adb is a new pass.  OK for trunk?

Ok.

But now I'm curious - bounds-checking wasn't supposed to be used
for Ada but now it is?

Thanks,
Richard.

> Thanks,
> Ilya
> --
> 2014-12-01  Ilya Enkovich  <ilya.enkovich@intel.com>
>
>         PR target/64055
>         * tree-chkp.c (chkp_find_bound_slots_1): Allow non constant
>         values in array domain.
>
>
> diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
> index 3e38691..6665ce2 100644
> --- a/gcc/tree-chkp.c
> +++ b/gcc/tree-chkp.c
> @@ -1565,7 +1565,9 @@ chkp_find_bound_slots_1 (const_tree type, bitmap have_bound,
>        HOST_WIDE_INT esize = TREE_INT_CST_LOW (TYPE_SIZE (etype));
>        unsigned HOST_WIDE_INT cur;
>
> -      if (!maxval || integer_minus_onep (maxval))
> +      if (!maxval
> +         || TREE_CODE (maxval) != INTEGER_CST
> +         || integer_minus_onep (maxval))
>         return;
>
>        for (cur = 0; cur <= TREE_INT_CST_LOW (maxval); cur++)
Ilya Enkovich Dec. 1, 2014, 11:40 a.m. UTC | #2
2014-12-01 14:11 GMT+03:00 Richard Biener <richard.guenther@gmail.com>:
> On Mon, Dec 1, 2014 at 10:33 AM, Ilya Enkovich <enkovich.gnu@gmail.com> wrote:
>> Hi,
>>
>> This patch fixes ICE in chkp_find_bound_slots_1 by checking for non constant values in array domain.  Bootstrapped on x86_64-unknown-linux-gnu with Ada.  gnat.dg/derived_aggregate.adb is a new pass.  OK for trunk?
>
> Ok.
>
> But now I'm curious - bounds-checking wasn't supposed to be used
> for Ada but now it is?

There is a chkp_type_bounds_count call in i386 ABI code which is
executed even for not instrumented code.  It happens because target
doesn't know whether call is instrumented or not and assumes bounds
may be passed.  It means this function must handle all possible types,
not only expected for C code.

Ilya

>
> Thanks,
> Richard.
>
>> Thanks,
>> Ilya
>> --
>> 2014-12-01  Ilya Enkovich  <ilya.enkovich@intel.com>
>>
>>         PR target/64055
>>         * tree-chkp.c (chkp_find_bound_slots_1): Allow non constant
>>         values in array domain.
>>
>>
>> diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
>> index 3e38691..6665ce2 100644
>> --- a/gcc/tree-chkp.c
>> +++ b/gcc/tree-chkp.c
>> @@ -1565,7 +1565,9 @@ chkp_find_bound_slots_1 (const_tree type, bitmap have_bound,
>>        HOST_WIDE_INT esize = TREE_INT_CST_LOW (TYPE_SIZE (etype));
>>        unsigned HOST_WIDE_INT cur;
>>
>> -      if (!maxval || integer_minus_onep (maxval))
>> +      if (!maxval
>> +         || TREE_CODE (maxval) != INTEGER_CST
>> +         || integer_minus_onep (maxval))
>>         return;
>>
>>        for (cur = 0; cur <= TREE_INT_CST_LOW (maxval); cur++)
diff mbox

Patch

diff --git a/gcc/tree-chkp.c b/gcc/tree-chkp.c
index 3e38691..6665ce2 100644
--- a/gcc/tree-chkp.c
+++ b/gcc/tree-chkp.c
@@ -1565,7 +1565,9 @@  chkp_find_bound_slots_1 (const_tree type, bitmap have_bound,
       HOST_WIDE_INT esize = TREE_INT_CST_LOW (TYPE_SIZE (etype));
       unsigned HOST_WIDE_INT cur;
 
-      if (!maxval || integer_minus_onep (maxval))
+      if (!maxval
+	  || TREE_CODE (maxval) != INTEGER_CST
+	  || integer_minus_onep (maxval))
 	return;
 
       for (cur = 0; cur <= TREE_INT_CST_LOW (maxval); cur++)