https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122564
Bug ID: 122564
Summary: valgrind issues for f951 and DO CONCURRENT
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: anlauf at gcc dot gnu.org
Target Milestone: ---
I see valgrind issues when compiling several of the testcases for
DO CONCURRENT which may either be a (local?) valgrind issue or a bug
in gfortran. Besides a frontend memleak (for which I have a patch),
there seems to be uninitialized memory being used which could point to
a latent issue.
Example (truncated):
==7391== Using Valgrind-3.24.0 and LibVEX; rerun with -h for copyright info
==7391== Command: /work/gnu/git/build-trunk/gcc/f951 -quiet -pedantic
do_concurrent_locality_specs.f90
==7391==
==7391== Conditional jump or move depends on uninitialised value(s)
==7391== at 0x1140FD2: gfc_get_symbol_decl(gfc_symbol*) (trans-decl.cc:1666)
==7391== by 0x12041CD: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5346)
==7391== by 0x1204E22: gfc_trans_forall_1(gfc_code*, forall_info*)
(trans-stmt.cc:5638)
==7391== by 0x120543E: gfc_trans_do_concurrent(gfc_code*)
(trans-stmt.cc:5797)
==7391== by 0x1109B2F: trans_code(gfc_code*, tree_node*) (trans.cc:2453)
==7391== by 0x1109F29: gfc_trans_code(gfc_code*) (trans.cc:2709)
==7391== by 0x1159FFB: gfc_generate_function_code(gfc_namespace*)
(trans-decl.cc:8144)
==7391== by 0x1109F6D: gfc_generate_code(gfc_namespace*) (trans.cc:2726)
==7391== by 0x107C9C0: translate_all_program_units(gfc_namespace*)
(parse.cc:7572)
==7391== by 0x107D30E: gfc_parse_file() (parse.cc:7894)
==7391== by 0x10EF680: gfc_be_parse_file() (f95-lang.cc:247)
==7391== by 0x1A9D5E7: compile_file() (toplev.cc:453)
==7391== Uninitialised value was created by a stack allocation
==7391== at 0x1203C5C: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5272)
==7391==
==7391== Conditional jump or move depends on uninitialised value(s)
==7391== at 0x113D491: gfc_finish_var_decl(tree_node*, gfc_symbol*)
(trans-decl.cc:663)
==7391== by 0x1142734: gfc_get_symbol_decl(gfc_symbol*) (trans-decl.cc:2036)
==7391== by 0x12041CD: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5346)
==7391== by 0x1204E22: gfc_trans_forall_1(gfc_code*, forall_info*)
(trans-stmt.cc:5638)
==7391== by 0x120543E: gfc_trans_do_concurrent(gfc_code*)
(trans-stmt.cc:5797)
==7391== by 0x1109B2F: trans_code(gfc_code*, tree_node*) (trans.cc:2453)
==7391== by 0x1109F29: gfc_trans_code(gfc_code*) (trans.cc:2709)
==7391== by 0x1159FFB: gfc_generate_function_code(gfc_namespace*)
(trans-decl.cc:8144)
==7391== by 0x1109F6D: gfc_generate_code(gfc_namespace*) (trans.cc:2726)
==7391== by 0x107C9C0: translate_all_program_units(gfc_namespace*)
(parse.cc:7572)
==7391== by 0x107D30E: gfc_parse_file() (parse.cc:7894)
==7391== by 0x10EF680: gfc_be_parse_file() (f95-lang.cc:247)
==7391== Uninitialised value was created by a stack allocation
==7391== at 0x1203C5C: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5272)
==7391==
==7391== Conditional jump or move depends on uninitialised value(s)
==7391== at 0x113DA01: gfc_finish_var_decl(tree_node*, gfc_symbol*)
(trans-decl.cc:763)
==7391== by 0x1142734: gfc_get_symbol_decl(gfc_symbol*) (trans-decl.cc:2036)
==7391== by 0x12041CD: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5346)
==7391== by 0x1204E22: gfc_trans_forall_1(gfc_code*, forall_info*)
(trans-stmt.cc:5638)
==7391== by 0x120543E: gfc_trans_do_concurrent(gfc_code*)
(trans-stmt.cc:5797)
==7391== by 0x1109B2F: trans_code(gfc_code*, tree_node*) (trans.cc:2453)
==7391== by 0x1109F29: gfc_trans_code(gfc_code*) (trans.cc:2709)
==7391== by 0x1159FFB: gfc_generate_function_code(gfc_namespace*)
(trans-decl.cc:8144)
==7391== by 0x1109F6D: gfc_generate_code(gfc_namespace*) (trans.cc:2726)
==7391== by 0x107C9C0: translate_all_program_units(gfc_namespace*)
(parse.cc:7572)
==7391== by 0x107D30E: gfc_parse_file() (parse.cc:7894)
==7391== by 0x10EF680: gfc_be_parse_file() (f95-lang.cc:247)
==7391== Uninitialised value was created by a stack allocation
==7391== at 0x1203C5C: gfc_trans_concurrent_locality_spec(bool,
stmtblock_t*, std::vector<symbol_and_tree_t, std::allocator<symbol_and_tree_t>
>*, gfc_expr_list**) (trans-stmt.cc:5272)
==7391==
==7391==
==7391== HEAP SUMMARY:
==7391== in use at exit: 1,423,210 bytes in 1,114 blocks
==7391== total heap usage: 9,695 allocs, 8,581 frees, 3,590,608 bytes
allocated
==7391==
==7391== 160 (56 direct, 104 indirect) bytes in 1 blocks are definitely lost in
loss record 143 of 201
==7391== at 0x54280FF: operator new(unsigned long) (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7391== by 0x109C805: resolve_locality_spec(gfc_code*, gfc_namespace*)
(resolve.cc:8531)
==7391== by 0x10AB64D: gfc_resolve_code(gfc_code*, gfc_namespace*)
(resolve.cc:14298)
==7391== by 0x10B9BBB: resolve_codes(gfc_namespace*) (resolve.cc:19947)
==7391== by 0x10B9C8C: gfc_resolve(gfc_namespace*) (resolve.cc:19982)
==7391== by 0x107C74B: resolve_all_program_units(gfc_namespace*)
(parse.cc:7507)
==7391== by 0x107CF81: gfc_parse_file() (parse.cc:7769)
==7391== by 0x10EF680: gfc_be_parse_file() (f95-lang.cc:247)
==7391== by 0x1A9D5E7: compile_file() (toplev.cc:453)
==7391== by 0x1AA0B4F: do_compile() (toplev.cc:2222)
==7391== by 0x1AA0FB2: toplev::main(int, char**) (toplev.cc:2385)
==7391== by 0x3852C31: main (main.cc:39)