diff options
| -rw-r--r-- | src/compiler/decl.zc | 2 | ||||
| -rw-r--r-- | tests/conformance/known.txt | 2 | ||||
| -rw-r--r-- | tests/langerrors/params_25.zc | 3 |
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; } |
