[PATCH, v2] PR libfortran/103634 - Runtime crash with PACK on zero-sized arrays

Harald Anlauf anlauf@gmx.de
Mon Dec 13 20:27:17 GMT 2021


Works better with patch attached...

Am 13.12.21 um 21:25 schrieb Harald Anlauf via Gcc-patches:
> Hi Mikael,
> 
> Am 09.12.21 um 21:37 schrieb Mikael Morin:
>> Hello,
>>
>> On 09/12/2021 21:05, Harald Anlauf via Fortran wrote:
>>> Dear all,
>>>
>>> I had thought that we had fixed this in the past (see PR31001),
>>> but it did fail for me with all gcc versions I have tried (7-12)
>>> for a slightly more elaborate case as in the old testcase.
>>>
>>> The loop in pack_internal did try to access the first element of
>>> the array argument to PACK even if one (or more) extents were zero.
>>> This is not good.
>>>
>>> Solution: check the extents and return early.  (We already do a
>>> related check for the vector argument if present).
>>
>> If there is a vector argument, aren’t we supposed to copy it to the
>> result ?
>> There is something else to pay attention for, the early return should
>> come at least after the return array bounds have been set.  In the
>> testcase an array with the correct bounds has been allocated beforehand
>> to hold the return value, but it’s not always the case.
> 
> you are absolutely right, I had gotten that wrong.
> 
>> For what it’s worth, the non-generic variant in pack.m4 (or in
>> pack_{i,f,c}{1,2,4,8,10,16}.c) has a zero extent check and it clears the
>> source ptr in that case, which makes it setup the return array and then
>> jump to the vector copy at the end of the function.
>>
> 
> The code is so similar (for good reason) that it makes sense to keep
> it synchronous.  I added code for 'zero_sized' array with the minor
> difference that I made it boolean instead of integer.
> 
> I also extended the testcase so that it exercises PACK/pack_internal
> a little, for argument 'vector' present as well as not.  (There are
> existing tests for intrinsic types, but not for the issue at hand).
> 
> Regtested again, and checked the testcase (against other compilers
> and also with valgrind).
> 
> OK now?
> 
> Thanks,
> Harald
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fortran-PACK-intrinsic-should-not-try-to-read-from-z.patch
Type: text/x-patch
Size: 4062 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20211213/340c2c1b/attachment-0001.bin>


More information about the Gcc-patches mailing list