https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79053
Bug ID: 79053 Summary: Memory leak from array constructor + array index off by one the array Product: gcc Version: 6.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: pedsxing at gmx dot net Target Milestone: --- Created attachment 40498 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40498&action=edit Source code that shows the problem This is a weird one. It might actually be two bugs occuring in the same piece of code. I have a derived type (called string) with a type-bound method that accepts an array of said derived type. Furthermore it has a user-defined constructor and a deferred-length character member. If I pass an array constructor with calls to the user-defined constructor into the type-bound method, two strange things happen: 1. The array indices are off by one inside the type-bound method. In the attached example, it prints "another longer string" and an empty line. The first element "a string" is not printed. This problem can be fixed by declaring "others" as "type(string)" instead of "class(string)" 2. Apparently the memory of the array is leaked. At least valgrind reports it as definitely leaked: ==2730== HEAP SUMMARY: ==2730== in use at exit: 29 bytes in 2 blocks ==2730== total heap usage: 24 allocs, 22 frees, 11,914 bytes allocated ==2730== ==2730== 8 bytes in 1 blocks are definitely lost in loss record 1 of 2 ==2730== at 0x4C2AB8D: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==2730== by 0x400F62: __stringmodule_MOD_newfromrawconstr (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4010D9: leak_ (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4013A3: MAIN__ (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4013DA: main (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== ==2730== 21 bytes in 1 blocks are definitely lost in loss record 2 of 2 ==2730== at 0x4C2AB8D: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==2730== by 0x400F62: __stringmodule_MOD_newfromrawconstr (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4010F6: leak_ (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4013A3: MAIN__ (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== by 0x4013DA: main (in /home/robert/workspace/ftl/compilerbugs/bug) ==2730== ==2730== LEAK SUMMARY: ==2730== definitely lost: 29 bytes in 2 blocks ==2730== indirectly lost: 0 bytes in 0 blocks ==2730== possibly lost: 0 bytes in 0 blocks ==2730== still reachable: 0 bytes in 0 blocks ==2730== suppressed: 0 bytes in 0 blocks If I put the call that contains the array constructor into a loop, every iteration leaks some memory.