From 8f079bad1f623b8da2bf327f7d8fd85cbecd1e39 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 30 Nov 2022 20:23:44 -0700 Subject: langref: acknowledge design flaw in the self-hosted compiler See tracking issue #13724 --- doc/langref.html.in | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'doc') diff --git a/doc/langref.html.in b/doc/langref.html.in index dcb15af9f6..c095ab0518 100644 --- a/doc/langref.html.in +++ b/doc/langref.html.in @@ -7029,8 +7029,7 @@ test "fibonacci" { undefined behavior, which is always a compile error if the compiler knows it happened. But what would have happened if we used a signed integer?

- {#code_begin|test_err|evaluation exceeded 1000 backwards branches#} - {#backend_stage1#} + {#code_begin|syntax#} const assert = @import("std").debug.assert; fn fibonacci(index: i32) i32 { @@ -7045,13 +7044,22 @@ test "fibonacci" { } {#code_end#}

- The compiler noticed that evaluating this function at compile-time took a long time, - and thus emitted a compile error and gave up. If the programmer wants to increase - the budget for compile-time computation, they can use a built-in function called - {#link|@setEvalBranchQuota#} to change the default number 1000 to something else. + The compiler is supposed to notice that evaluating this function at + compile-time took more than 1000 branches, and thus emits an error and + gives up. If the programmer wants to increase the budget for compile-time + computation, they can use a built-in function called + {#link|@setEvalBranchQuota#} to change the default number 1000 to + something else. +

+

+ However, there is a design + flaw in the compiler causing it to stack overflow instead of having the proper + behavior here. I'm terribly sorry about that. I hope to get this resolved + before the next release.

- What if we fix the base case, but put the wrong value in the {#syntax#}expect{#endsyntax#} line? + What if we fix the base case, but put the wrong value in the + {#syntax#}expect{#endsyntax#} line?

{#code_begin|test_err|reached unreachable#} const assert = @import("std").debug.assert; -- cgit v1.2.3