Opened 3 years ago
Last modified 3 years ago
#1762 reopened enhancement
Maybe/Just Int checker in Silex compilation
Reported by: | Idiomdrottning | Owned by: | |
---|---|---|---|
Priority: | not urgent at all | Milestone: | someday |
Component: | scrutinizer | Version: | 5.2.0 |
Keywords: | Cc: | ||
Estimated difficulty: |
Description
When chicken-install silex I get this
Warning: Invalid argument
In file `silex.scm:472',
In module `silex',
In procedure `digraph',
In procedure `store-final338',
In procedure `loop',
In procedure call:
(scheme#vector-set! prio voisin infinity)
Argument #2 to procedure `vector-set!' has an invalid type:
false
The expected type is:
fixnum
This is the expression:
voisin
Procedure
vector-set!' from module
scheme' has this type:
(vector fixnum * -> undefined)
In the code, the index value "voisin" is derived from a vector-ref call on another vector that's initialized with #f's but populated by fixnums (hopefully? I didn't fully analyze the code here…) before being referenced.
So probably one of two things are going on:
The silex code is bugged and the variable won't be a fixnum in time (in which case this is is a serious bug in silex), or (what I believe is more likely)
The type-checking code is mislabeling the situation here. It doesn't know that it'll be an int in time. This is just an, uh, "cosmetic" bug in core, which is how I'm labeling it. Or I'm wrong and it's instead a serious bug in exts (silex).
Change History (3)
comment:1 Changed 3 years ago by
Resolution: | → wontfix |
---|---|
Status: | new → closed |
comment:2 Changed 3 years ago by
Component: | unknown → scrutinizer |
---|---|
Resolution: | wontfix |
Status: | closed → reopened |
Maybe make-vector
and similar container type constructors could return something more clever.
comment:3 Changed 3 years ago by
I was thinking the scrutinizer should just say "might have" instead of "has". A little more humbly scrutinizing.
This is the kind of code where, in general, the scrutinizer would have to solve the halting problem to figure out if the value is valid or not. Maybe there's a error in silex, but probably not as you said.
An easy way to silence the warning is to init the vector with
(the * #f)
instead of plain#f
.