[Bug fortran/54618] [OOP] wrong-code with CLASS(...), INTENT(OUT) -- and OPTIONAL or ALLOCATABLE
dominiq at lps dot ens.fr
gcc-bugzilla@gcc.gnu.org
Sun Sep 30 12:51:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54618
Dominique d'Humieres <dominiq at lps dot ens.fr> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2012-09-30
Ever Confirmed|0 |1
--- Comment #11 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2012-09-30 12:51:11 UTC ---
With the patch in comment #10, gfortran (otherwise clean r191847) miscompiles
gfortran.dg/class_array_7.f03. If I replace the "if ... abort()" with prints, I
get
a is extended_type
tmp is base_type
a is extended_type
a.out(83666) malloc: *** error for object 0x100200f80: pointer being freed was
not allocated
or
[macbook] f90/bug% valgrind a.out
==96855== Memcheck, a memory error detector
==96855== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==96855== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==96855== Command: a.out
==96855==
a is extended_type
tmp is base_type
==96855== Invalid read of size 4
==96855== at 0x100001782: __realloc_MOD_assign (class_array_7_db.f90:25)
==96855== by 0x100001685: __realloc_MOD_reallocate (class_array_7_db.f90:34)
==96855== by 0x100001A61: MAIN__ (class_array_7_db.f90:57)
==96855== by 0x100001BD5: main (class_array_7_db.f90:50)
==96855== Address 0x100442408 is 0 bytes after a block of size 40 alloc'd
==96855== at 0x100013679: malloc (vg_replace_malloc.c:266)
==96855== by 0x100001830: MAIN__ (class_array_7_db.f90:54)
==96855== by 0x100001BD5: main (class_array_7_db.f90:50)
==96855==
a is extended_type
==96855== Invalid free() / delete / delete[] / realloc()
==96855== at 0x10001352D: free (vg_replace_malloc.c:430)
==96855== by 0x100001B9D: MAIN__ (class_array_7_db.f90:60)
==96855== by 0x100001BD5: main (class_array_7_db.f90:50)
==96855== Address 0x1004423e0 is 0 bytes inside a block of size 40 free'd
==96855== at 0x10001352D: free (vg_replace_malloc.c:430)
==96855== by 0x1000016BB: __realloc_MOD_reallocate (class_array_7_db.f90:35)
==96855== by 0x100001A61: MAIN__ (class_array_7_db.f90:57)
==96855== by 0x100001BD5: main (class_array_7_db.f90:50)
==96855==
==96855==
==96855== HEAP SUMMARY:
==96855== in use at exit: 168 bytes in 2 blocks
==96855== total heap usage: 25 allocs, 24 frees, 7,321 bytes allocated
==96855==
==96855== LEAK SUMMARY:
==96855== definitely lost: 80 bytes in 1 blocks
==96855== indirectly lost: 0 bytes in 0 blocks
==96855== possibly lost: 0 bytes in 0 blocks
==96855== still reachable: 0 bytes in 0 blocks
==96855== suppressed: 88 bytes in 1 blocks
==96855== Rerun with --leak-check=full to see details of leaked memory
==96855==
==96855== For counts of detected and suppressed errors, rerun with: -v
==96855== ERROR SUMMARY: 6 errors from 2 contexts (suppressed: 0 from 0)
Otherwise the patch works as advertised.
More information about the Gcc-bugs
mailing list