chapel
chapel copied to clipboard
[Bug]: having a ref hash function causes an extra, unsilenceable warning
Summary of Problem
Description:
We've deprecated inferring a method to be ref
if it modifies its this
argument. If a hash function happens to be ref
, though, you will still get a warning even if the hash function itself is declared to be ref
, because we generate a wrapper to call that hash function and that wrapper is inferring that it must be ref
. This is something the compiler is creating, so the user basically has no ability to silence the warning
Is this a blocking issue with no known work-arounds? no, the code still compiles just fine. It's just annoying and trains users to ignore that warning instead of resolving it. It will become a problem if the deprecation warning is turned into an error, since the user still has no control over the generated function.
Steps to Reproduce
Source Code:
record myRec: hashable {
var x: int;
proc ref getAndSetX() ref {
return x;
}
proc ref hash(salt = 0): uint throws {
// This is not meant to be a good hash function, just to test throwing and
// ref
if (salt == 0) then throw new IllegalArgumentError("salt too obvious!");
else return getAndSetX()*salt;
}
}
proc main() {
var myR = new myRec(15);
try {
var hash1 = myR.hash();
} catch e: IllegalArgumentError {
writeln(e.message());
var hash2 = myR.hash(3);
writeln(hash2);
} catch e {
halt(e.message());
}
}
Compile command:
chpl foo.chpl
Execution command: N/A
Associated Future Test(s):
test/hash/throwingHashRef.chpl
#24896
Configuration Information
- Output of
chpl --version
: chpl version 2.1.0 pre-release - Output of
$CHPL_HOME/util/printchplenv --anonymize
: Should be any - Back-end compiler and version, e.g.
gcc --version
orclang --version
: N/A - (For Cray systems only) Output of
module list
: N/A