This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, this is a second patch dealing with finalization-related regressions, after the one I submitted yesterday (https://gcc.gnu.org/ml/fortran/2015-01/msg00109.html), which btw is also still waiting for review ... This patch fixes an invalid memory reference inside the finalizer routine (at runtime), which apparently was caused by dereferencing a pointer without checking if it's NULL. I simply insert a call to ASSOCIATED. I also rename two different runtime variables, which were both called 'ptr', to 'ptr1' and 'ptr2', just to make it easier to distinguish them in the dump. I also have the feeling the a lot of what is being done in generate_finalization_wrapper and finalize_component (including my changes) is a bit laborious. Some helper functions might be useful to make all that code generation a bit more readable and less verbose. I may attack this in a follow-up patch. This one regtests cleanly on x86_64-unknown-linux-gnu. Ok for trunk and 4.9? Cheers, Janus 2015-01-19 Janus Weil <janus@gcc.gnu.org> PR fortran/64230 * class.c (finalize_component): New argument 'sub_ns'. Insert code to check if 'expr' is associated. (generate_finalization_wrapper): Rename 'ptr' symbols to 'ptr1' and 'ptr2'. Pass 'sub_ns' to finalize_component. 2015-01-19 Janus Weil <janus@gcc.gnu.org> PR fortran/64230 * gfortran.dg/class_allocate_18.f90: Extended.
Attachment:
pr64230.diff
Description: Text document
! { dg-do run } ! { dg-options "-fsanitize=undefined" } ! ! PR 64230: [4.9/5 Regression] Invalid memory reference in a compiler-generated finalizer for allocatable component ! ! Contributed by Mat Cross <mathewc@nag.co.uk> Program main Implicit None Type :: t1 End Type Type, Extends (t1) :: t2 Integer, Allocatable :: i End Type Type, Extends (t2) :: t3 Integer, Allocatable :: j End Type Class (t1), Allocatable :: t Allocate (t3 :: t) print *,"allocated!" Deallocate (t) End
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |