E6017
E6017 — A misuse of theraw::transfer-lowering primitives (Vx#353): araw::call outside animpl transferbody, an unknown primitive name, a tile argument that is not a bare parameter name (the primitives are indexed, not addressed), a store into a tile not held by&mut, or a wrongly typed index/value.
What the compiler reports
E6017
only legal inside
The fragments the test suite holds the compiler to. An ellipsis marks text the test does not constrain; the emitted message also carries a source location.
A program that triggers it
// The floor property: the raw:: primitives exist only inside `impl transfer`
// bodies. Anywhere else the name is reserved and refused, not "undefined".
fn main() -> i32 {
let n = raw::lanes();
return 0;
}
From tests/middle_end/fail/raw_outside_lowering.vx, which asserts this diagnostic on every commit.
Related
Topologies and memoryThe chapter covering the rule this code enforces.
All diagnosticsEvery code the compiler can emit, grouped by stage.
E6016A
Topology or Memory declaration whose identity cannot be relied on. Two forms: the declared name shadows a built-in topology (every use of Topology::<Name> resolves to the built-in, so the declaration is silently ignored — including its arch:); or two declared names collide on one dispatch id (custom ids are derived from the name by hashing), in which case which declaration is in force would be hash-iteration order — observed as the same program getting a device image on some runs and not others for a topology, and as a transfer carrying the other space's capacity and granule for a memory space.
E6018A raw:: bounds obligation (0 <= index < extent) that could not be proven. Prove it with a loop bound or invariant the SMT prover can see, or assert it in an unsafe block — which records the obligation as asserted-not-proven, the same standing an unverified spec: figure has.