[Bug fortran/84523] [8 Regression] Runtime crash deallocating allocatable array within derived type
dominiq at lps dot ens.fr
gcc-bugzilla@gcc.gnu.org
Sat Feb 24 13:58:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84523
--- Comment #4 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
Comparing the outputs of -fDump-tree-original for r257064 and r257065 shows:
--- pr84523.f90.003t.original_65 2018-02-24 14:45:17.000000000 +0100
+++ pr84523.f90.003t.original_64 2018-02-24 14:44:32.000000000 +0100
...
@@ -116,32 +116,32 @@ construct (struct t_rowcol & restrict rc
*rc = t_rowcol.6;
}
{
- integer(kind=8) D.3821;
- integer(kind=4) D.3822;
- integer(kind=8) D.3823;
- integer(kind=8) D.3824;
- integer(kind=4) D.3825;
+ integer(kind=8) D.3815;
+ integer(kind=4) D.3816;
+ integer(kind=8) D.3817;
+ integer(kind=8) D.3818;
+ integer(kind=4) D.3819;
unsigned long size.2;
- logical(kind=4) D.3827;
+ logical(kind=4) D.3821;
integer(kind=4) overflow.3;
rc->nh = *nh;
- rc->spots.dtype = {.elem_len=112, .rank=1, .type=5};
- D.3821 = (integer(kind=8)) MAX_EXPR <*nh, 0>;
- D.3822 = NON_LVALUE_EXPR <D.3821 != 0 ? 9223372036854775807 / D.3821 <= 0
? 1 : 0 : 0>;
- D.3823 = NON_LVALUE_EXPR <D.3821>;
- D.3824 = D.3823;
- D.3825 = ((unsigned long) D.3823 > 164703072086692425 ? 1 : 0) + D.3822;
^
- D.3827 = *nh <= 0;
- if (D.3827)
+ rc->spots.dtype = 6697;
+ D.3815 = (integer(kind=8)) MAX_EXPR <*nh, 0>;
+ D.3816 = NON_LVALUE_EXPR <D.3815 != 0 ? 9223372036854775807 / D.3815 <= 0
? 1 : 0 : 0>;
+ D.3817 = NON_LVALUE_EXPR <D.3815>;
+ D.3818 = D.3817;
+ D.3819 = ((unsigned long) D.3817 > 177372539170284150 ? 1 : 0) + D.3816;
^
+ D.3821 = *nh <= 0;
+ if (D.3821)
{
size.2 = 0;
}
else
{
- size.2 = (unsigned long) D.3823 * 112;
+ size.2 = (unsigned long) D.3817 * 104;
}
- overflow.3 = D.3825;
+ overflow.3 = D.3819;
if (overflow.3 != 0)
{
_gfortran_runtime_error (&"Integer overflow when calculating the
amount of memory to allocate"[1]{lb: 1 sz: 1});
@@ -158,57 +158,57 @@ construct (struct t_rowcol & restrict rc
rc->spots.dim[0].ubound = (integer(kind=8)) *nh;
rc->spots.dim[0].stride = 1;
rc->spots.offset = -1;
- rc->spots.span = 112;
^
+ rc->spots.span = 104;
^
{
...
More information about the Gcc-bugs
mailing list