mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-24 11:24:05 +08:00
Disable -Wstringop-overflow warning after checking code path of caller.
The warning that is disabled, only on this single line, has been inspected and found to be not applicable; it is known that the size of the buffer is safe. libgfortran/ChangeLog: 2020-06-13 Thomas Koenig <tkoenig@gcc.gnu.org> PR libfortran/95313 * io/write.c (ztoa_big): Disable -Wstringop-overflow for one line.
This commit is contained in:
parent
8e3b453e08
commit
0cfc34ad12
39
gcc/testsuite/gfortran.dg/finalize_36.f90
Normal file
39
gcc/testsuite/gfortran.dg/finalize_36.f90
Normal file
@ -0,0 +1,39 @@
|
||||
! { dg-do run }
|
||||
! { dg-additional-options "-fdump-tree-original" }
|
||||
! PR 94109
|
||||
! This used to leak memory. Test case by Antony Lewis.
|
||||
module debug
|
||||
implicit none
|
||||
|
||||
Type Tester
|
||||
real, dimension(:), allocatable :: Dat, Dat2
|
||||
end Type
|
||||
|
||||
Type TestType2
|
||||
Type(Tester) :: T
|
||||
end type TestType2
|
||||
|
||||
contains
|
||||
|
||||
subroutine Leaker
|
||||
class(TestType2), pointer :: ActiveState
|
||||
Type(Tester) :: Temp
|
||||
|
||||
allocate(Temp%Dat2(10000))
|
||||
|
||||
allocate(TestType2::ActiveState)
|
||||
ActiveState%T = Temp
|
||||
deallocate(ActiveState)
|
||||
|
||||
end subroutine
|
||||
|
||||
end module
|
||||
|
||||
|
||||
program run
|
||||
use debug
|
||||
|
||||
call Leaker()
|
||||
|
||||
end program
|
||||
! { dg-final { scan-tree-dump-times "__builtin_free\\ \\(ptr2" 4 "original" } }
|
@ -1178,7 +1178,15 @@ ztoa_big (const char *s, char *buffer, int len, GFC_UINTEGER_LARGEST *n)
|
||||
}
|
||||
}
|
||||
|
||||
/* write_z, which calls ztoa_big, is called from transfer.c,
|
||||
formatted_transfer_scalar_write. There it is passed the kind as
|
||||
argument, which means a maximum of 16. The buffer is large
|
||||
enough, but the compiler does not know that, so shut up the
|
||||
warning here. */
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||
*q = '\0';
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
if (*n == 0)
|
||||
return "0";
|
||||
|
Loading…
Reference in New Issue
Block a user