aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/decl.zc2
-rw-r--r--tests/conformance/known.txt2
-rw-r--r--tests/langerrors/params_25.zc3
3 files changed, 4 insertions, 3 deletions
diff --git a/src/compiler/decl.zc b/src/compiler/decl.zc
index 19b1811..5991661 100644
--- a/src/compiler/decl.zc
+++ b/src/compiler/decl.zc
@@ -326,8 +326,8 @@ int fndef(int chk, int rty, int ret, int n) {
pt[np] = t;
if (np < 12) tags = tags + (t << (np + np));
np++;
- if (np >= 24) die("too many parameters");
if (!accept(s_comma)) break;
+ if (np >= 24) { die("too many parameters"); break; } // a 25th would not fit pn, pt, pty
}
}
expect(s_rp);
diff --git a/tests/conformance/known.txt b/tests/conformance/known.txt
index 18492fd..e535b0a 100644
--- a/tests/conformance/known.txt
+++ b/tests/conformance/known.txt
@@ -1,8 +1,6 @@
# understood conformance failures: PATH IMPL CLASS reason
# class a: self-hosted compiler bug; b: zc0 deviation (appendix a/b); c: spec issue to settle
2-types/typecheck_off_void_return_value_ok.zc zy a void f() { return 3; } yields 3, not 0 (spec 4.8.3)
-3-expressions/call_24_parameters.zc zy a the parameter limit is 23, not 24 (decl.zc; closures 19)
-3-expressions/call_24_parameters_prototype.zc zy a the parameter limit is 23, not 24 (decl.zc; closures 19)
4-statements/memdebug_scrub_accepted.zc zy a memdebug scrub; is rejected (appendix b.1.1, b.2.1)
4-statements/memdebug_scrub_fills.zc zy a memdebug scrub; is rejected (appendix b.1.1, b.2.1)
4-statements/o3_outside_function_ordinary_block.zc zy c top-level o3 { } is rejected; spec 4.10.2 says it is an ordinary block
diff --git a/tests/langerrors/params_25.zc b/tests/langerrors/params_25.zc
new file mode 100644
index 0000000..738cbcc
--- /dev/null
+++ b/tests/langerrors/params_25.zc
@@ -0,0 +1,3 @@
+// expect: too many parameters
+fn f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) { return 0; }
+fn main() { return 0; }