www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Are these Valgrind warnings (from std.array and std.csv) worry-some,

reply mw <m g.c> writes:
I'm trying to debug a problem, but saw these Valgrind warnings 
(from std.array and std.csv):

==1676==
==1676== Warning: invalid file descriptor -1 in syscall close()
==1676== Warning: invalid file descriptor -1 in syscall close()
==1676== Conditional jump or move depends on uninitialised 
value(s)
==1676==    at 0x11149E3: 
core.internal.gc.impl.conservative.gc.Gcx.sweep() (in ./lt)
==1676==    by 0x11162BE: 
core.internal.gc.impl.conservative.gc.Gcx.fullcollect(bool, bool, 
bool) (in ./lt)
==1676==    by 0x1114058: 
core.internal.gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref 
ulong, uint, const(TypeInfo)) (in ./lt)
==1676==    by 0x111A024: 
core.internal.gc.impl.conservative.gc.ConservativeGC.runLocked!(core.internal.gc.impl.conservative.gc.ConservativeGC
mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)),
core.internal.gc.impl.conservative.gc.mallocTime,
core.internal.gc.impl.conservative.gc.numMallocs, ulong, uint, ulong,
const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo))
(in ./lt)
==1676==    by 0x1111ABD: 
core.internal.gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, scope
const(TypeInfo)) (in ./lt)
==1676==    by 0x10891B6: gc_qalloc (in ./lt)
==1676==    by 0x108C195: _aaGetX (in ./lt)
==1676==    by 0x108BDA0: _aaGetY (in ./lt)
==1676==    by 0xC30E5D: 
std.csv.CsvReader!(immutable(char)[][immutable(char)[]], 1, 
std.algorithm.iteration.joiner!(std.algorithm.iteration.FilterResult!(common._readDailyBarsFromCS
(immutable(char)[], ref long).__lambda9, std.stdio.File.ByLineImpl!(char,
char).ByLineImpl).FilterResult,
immutable(char)[]).joiner(std.algorithm.iteration.FilterResult!(common._readDailyBarsFromCS
(immutable(char)[], ref long).__lambda9, std.stdio.File.ByLineImpl!(char,
char).ByLineImpl).FilterResult, immutable(char)[]).Result, dchar,
immutable(char)[][]).CsvReader.prime() (csv.d:1182)
==1676==    by 0xC30CFA: 
std.csv.CsvReader!(immutable(char)[][immutable(char)[]], 1, 
std.algorithm.iteration.joiner!(std.algorithm.iteration.FilterResult!(common._readDailyBarsFromCS
(immutable(char)[], ref long).__lambda9, std.stdio.File.ByLineImpl!(char,
char).ByLineImpl).FilterResult,
immutable(char)[]).joiner(std.algorithm.iteration.FilterResult!(common._readDailyBarsFromCS
(immutable(char)[], ref long).__lambda9, std.stdio.File.ByLineImpl!(char,
char).ByLineImpl).FilterResult, immutable(char)[]).Result, dchar,
immutable(char)[][]).CsvReader.popFront() (csv.d:1154)
...


==1676==
==1676== Warning: invalid file descriptor -1 in syscall close()
==1676== Use of uninitialised value of size 8
==1676==    at 0x111BB96: 
core.internal.gc.impl.conservative.gc.Gcx.mark!(false, true, 
true).mark(core.internal.gc.impl.conservative.gc.Gcx.ScanRang
!(false).ScanRange) (in ./lt)
==1676==    by 0x1116AB5: 
core.internal.gc.impl.conservative.gc.Gcx.markParallel(bool) (in 
./lt)
==1676==    by 0x1115FCF: 
core.internal.gc.impl.conservative.gc.Gcx.fullcollect(bool, bool, 
bool) (in ./lt)
==1676==    by 0x1114058: 
core.internal.gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref 
ulong, uint, const(TypeInfo)) (in ./lt)
==1676==    by 0x111A024: 
core.internal.gc.impl.conservative.gc.ConservativeGC.runLocked!(core.internal.gc.impl.conservative.gc.ConservativeGC
mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)),
core.internal.gc.impl.conservative.gc.mallocTime,
core.internal.gc.impl.conservative.gc.numMallocs, ulong, uint, ulong,
const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo))
(in ./lt)
==1676==    by 0x1111ABD: 
core.internal.gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, scope
const(TypeInfo)) (in ./lt)
==1676==    by 0x10891B6: gc_qalloc (in ./lt)
==1676==    by 0xD26B9B: 
std.array.Appender!(immutable(char)[]).Appender.ensureAddabl
(ulong).__lambda9() (array.d:3576)
==1676==    by 0xD26AB1: 
std.array.Appender!(immutable(char)[]).Appender.ensureAddable(ulong)
(array.d:3576)
==1676==    by 0x954102: 
std.array.Appender!(immutable(char)[]).Appender.put!(char[]).put(char[
).bigDataFun(ulong) (array.d:3679)
==1676==    by 0x953FF8: 
std.array.Appender!(immutable(char)[]).Appender.put!(char[]).put(char[])
(array.d:3682)
==1676==    by 0x953FB5: 
std.array.Appender!(immutable(char)[]).Appender.put!(dchar).put(dchar)
(wchar_.d:38)
==1676==
==1676== Conditional jump or move depends on uninitialised 
value(s)
==1676==    at 0x111BBA3: 
core.internal.gc.impl.conservative.gc.Gcx.mark!(false, true, 
true).mark(core.internal.gc.impl.conservative.gc.Gcx.ScanRang
!(false).ScanRange) (in ./lt)
==1676==    by 0x1116AB5: 
core.internal.gc.impl.conservative.gc.Gcx.markParallel(bool) (in 
./lt)
==1676==    by 0x1115FCF: 
core.internal.gc.impl.conservative.gc.Gcx.fullcollect(bool, bool, 
bool) (in ./lt)
==1676==    by 0x1114058: 
core.internal.gc.impl.conservative.gc.Gcx.smallAlloc(ulong, ref 
ulong, uint, const(TypeInfo)) (in ./lt)
==1676==    by 0x111A024: 
core.internal.gc.impl.conservative.gc.ConservativeGC.runLocked!(core.internal.gc.impl.conservative.gc.ConservativeGC
mallocNoSync(ulong, uint, ref ulong, const(TypeInfo)),
core.internal.gc.impl.conservative.gc.mallocTime,
core.internal.gc.impl.conservative.gc.numMallocs, ulong, uint, ulong,
const(TypeInfo)).runLocked(ref ulong, ref uint, ref ulong, ref const(TypeInfo))
(in ./lt)
==1676==    by 0x1111ABD: 
core.internal.gc.impl.conservative.gc.ConservativeGC.qalloc(ulong, uint, scope
const(TypeInfo)) (in ./lt)
==1676==    by 0x10891B6: gc_qalloc (in ./lt)
==1676==    by 0xD26B9B: 
std.array.Appender!(immutable(char)[]).Appender.ensureAddabl
(ulong).__lambda9() (array.d:3576)
==1676==    by 0xD26AB1: 
std.array.Appender!(immutable(char)[]).Appender.ensureAddable(ulong)
(array.d:3576)
==1676==    by 0x954102: 
std.array.Appender!(immutable(char)[]).Appender.put!(char[]).put(char[
).bigDataFun(ulong) (array.d:3679)
==1676==    by 0x953FF8: 
std.array.Appender!(immutable(char)[]).Appender.put!(char[]).put(char[])
(array.d:3682)
==1676==    by 0x953FB5: 
std.array.Appender!(immutable(char)[]).Appender.put!(dchar).put(dchar)
(wchar_.d:38)
==1676==


I'm wondering if these warnings should be fixed, and how?


And in general: should the D std lib be Valgrind warning free?


Thanks.
Jul 21 2023
parent Dennis <dkorpel gmail.com> writes:
On Friday, 21 July 2023 at 16:38:12 UTC, mw wrote:
 And in general: should the D std lib be Valgrind warning free?
By default no, because D's Garbage Collector does some low-level things that trips up valgrind. With dmd 2.105, there is new valgrind support though. https://dlang.org/changelog/2.105.0.html#druntime.valgrind Then you shouldn't get any warnings, other than those from your own code.
Jul 21 2023