Valgrind complains about uninitialized values in the decoder in Pike 7.7.
==4485== Conditional jump or move depends on uninitialised value(s) ==4485== at 0x8116695: override_identifier (/home/nilsson/Pike/7.7/src/program.c:1912) ==4485== by 0x80B809B: decode_value2 (/home/nilsson/Pike/7.7/src/encode.c:3976) ==4485== by 0x80B9549: low_do_decode (/home/nilsson/Pike/7.7/src/encode.c:4324) ==4485== by 0x80B9791: my_decode (/home/nilsson/Pike/7.7/src/encode.c:4457) ==4485== by 0x80B9E31: f_decode_value (/home/nilsson/Pike/7.7/src/encode.c:4776) ==4485== by 0x807AF3A: opcode_F_CALL_BUILTIN (/home/nilsson/Pike/7.7/src/interpret_functions.h:2231) ==4485== by 0x1C07A236: ??? ==4485== by 0x807ECE5: o_catch (/home/nilsson/Pike/7.7/src/interpret.c:2100) ==4485== by 0x8075E5B: jump_opcode_F_CATCH (/home/nilsson/Pike/7.7/src/interpret_functions.h:1290) ==4485== by 0x1C079F86: ??? ==4485== by 0x807EBF0: mega_apply (/home/nilsson/Pike/7.7/src/interpret.c:2055) ==4485== by 0x807FF61: apply (/home/nilsson/Pike/7.7/src/interpret.c:2448)
==4485== Conditional jump or move depends on uninitialised value(s) ==4485== at 0x80B7317: decode_value2 (/home/nilsson/Pike/7.7/src/encode.c:4151) ==4485== by 0x80B9567: low_do_decode (/home/nilsson/Pike/7.7/src/encode.c:4327) ==4485== by 0x80B9791: my_decode (/home/nilsson/Pike/7.7/src/encode.c:4457) ==4485== by 0x80B9E31: f_decode_value (/home/nilsson/Pike/7.7/src/encode.c:4776) ==4485== by 0x807AF3A: opcode_F_CALL_BUILTIN (/home/nilsson/Pike/7.7/src/interpret_functions.h:2231) ==4485== by 0x1C07A236: ??? ==4485== by 0x807ECE5: o_catch (/home/nilsson/Pike/7.7/src/interpret.c:2100) ==4485== by 0x8075E5B: jump_opcode_F_CATCH (/home/nilsson/Pike/7.7/src/interpret_functions.h:1290) ==4485== by 0x1C079F86: ??? ==4485== by 0x807EBF0: mega_apply (/home/nilsson/Pike/7.7/src/interpret.c:2055) ==4485== by 0x807FF61: apply (/home/nilsson/Pike/7.7/src/interpret.c:2448) ==4485== by 0x80B3061: decode_value2 (/home/nilsson/Pike/7.7/src/encode.c:2712)
Speaking about that, I ran Valgrind 3.0 on Pike 7.4 the other week and got quite a handful of warnings. One thing is a side-effect of a correct compiler optimization (the combined type and subtype comparisons in store_constant), and another was a fsort_template.h bug that has been fixed in 7.6/7.7 but never backported. I'm checking in fixes right now.
However, aside from these there were large number of warnings that I haven't been able to track down. Don't know if it's related to your observations in 7.7, though:
==745== Use of uninitialised value of size 8 ==745== at 0x56F4CB: debug_free_node (las.c:439) ==745== by 0x577FF6: eval (las.c:5484) ==745== by 0x57984B: optimize (las.c:5164) ==745== by 0x580BEB: dooptcode (las.c:5297) ==745== by 0x424022: yyparse (language.yacc:864) ==745== by 0x5300CF: run_pass2 (program.c:5864) ==745== by 0x530C2E: compile (program.c:6081) ==745== by 0x59841A: f_compile (builtin_functions.c:3336) ==745== by 0x42C0DF: eval_instruction (interpret_functions.h:2082) ==745== by 0x42B51E: o_catch (interpret.c:1818) ==745== by 0x4332C9: eval_instruction (interpret_functions.h:1195) ==745== by 0x43E80F: low_unsafe_apply_handler (interpret.c:1774)
pike-devel@lists.lysator.liu.se