https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83344
Bug ID: 83344
Summary: Use of uninitialized memory with ASSOCIATE and strings
Product: gcc
Version: 6.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: jb at gcc dot gnu.org
Target Milestone: ---
Consider the testcase
subroutine foo()
implicit none
character(len=4) :: s
s = "a"
associate(w => trim(s))
end associate
end subroutine foo
Compiling with "gfortran -c -fdump-tree-original" and looking at the
003t.original dump, one can see that the length of the character variable w
varies randomly from one compilation to the next. Suggestion that it's reading
uninitialized memory. valgrind doesn't find anything fishy, though, maybe due
to extensive use of unions etc. in the frontend.
Per se, the 's = "a"' statement isn't necessary, it's just there to prevent
trim(s) from being non-standards compliant.
Removing the trim() call, that is, associating w=>s directly makes this issue
fo away. So the error is somehow in how the return value of trim(), simplified
at compile time, is assigned to the length of w.
Tested with version 6.3 and trunk on x86_64, and trunk on
powerpc64-unknown-linux-gnu.