emitProtocolDispatch now requires the user-arg count to equal the protocol method's parameter list — exact, since protocol signatures have no defaults, packs, or variadics — and emits the same "expects N arguments, but M were given" diagnostic plain calls get. Previously extra args were silently dropped (and missing args left the thunk reading garbage). The dispatch gains the call-site span for the diagnostic. examples/1634 pins the rejection; full sweep confirms no existing code relied on the leniency.
13 lines
385 B
Plaintext
13 lines
385 B
Plaintext
// issue 0131 regression: a protocol method call must arity-check like a
|
|
// plain call. `Allocator.dealloc_bytes` declares (ptr); calling it with
|
|
// an extra argument used to compile and silently drop the extra.
|
|
#import "modules/std.sx";
|
|
|
|
main :: () -> i32 {
|
|
gpa := GPA.init();
|
|
a : Allocator = xx gpa;
|
|
p := a.alloc_bytes(64);
|
|
a.dealloc_bytes(p, 12345);
|
|
return 0;
|
|
}
|