Closed tay64 closed 1 year ago
Thank you for your bug report.
This appear to be a duplicate of https://github.com/slint-ui/slint/issues/1659 which was fixed recently in the master branch with PR #1661
The fix will be released with the next release.
Another example of a design that works in
slint-viewer
but crashes the compiler. I was unable to isolate the problem properly. I made several attempts to recreate (what I thought to be) the essential parts of the structure but the error didn't appear, so I ended up copying my app UI and paring it down. Sorry about that.This error appears when using the attached .slint file as is (let's call it Error A):
thread 'main' panicked at 'already borrowed: BorrowMutError', [...]\i-slint-compiler-0.3.0\passes\binding_analysis.rs:209:13
backtrace
``` $ RUST_BACKTRACE=1 cargo build Compiling slint-bug-binding-analysis v0.1.0 (D:\0\slint-bug-binding-analysis) error: failed to run custom build command for `slint-bug-binding-analysis v0.1.0 (D:\0\slint-bug-binding-analysis)` Caused by: process didn't exit successfully: `D:\0\slint-bug-binding-analysis\target\debug\build\slint-bug-binding-analysis-4234411efd23be05\build-script-build` (exit code: 101) --- stderr thread 'main' panicked at 'already borrowed: BorrowMutError', C:\Users\user\.cargo\registry\src\github.com-1ecc6299db9ec823\i-slint-compiler-0.3.0\passes\binding_analysis.rs:209:13 stack backtrace: 0: rust_begin_unwind at /rustc/4493a0f4724c0bae1436242d76cccc9c0a287b80/library\std\src/panicking.rs:584:5 1: core::panicking::panic_fmt at /rustc/4493a0f4724c0bae1436242d76cccc9c0a287b80/library\core\src/panicking.rs:142:14 2: core::result::unwrap_failed at /rustc/4493a0f4724c0bae1436242d76cccc9c0a287b80/library\core\src/result.rs:1814:5 3: core::result::ResultIf the second button is deleted from AppWindow (as shown below), the error changes to this one (Error B):
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: CompileError(["The binding for the property 'layout-cache' is part of a binding loop" ...snipped, details under spoiler... ])', build.rs:2:48
binding loop diag messages
``` error: The binding for the property 'layout-cache' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:96:2 | 96 | HorizontalBox { | ^ error: The binding for the property 'width' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:96:2 | 96 | HorizontalBox { | ^ error: The binding for the property 'layoutinfo-h' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:43:9 | 43 | hl := HorizontalLayout { | ^ error: The binding for the property 'min-width' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:43:9 | 43 | hl := HorizontalLayout { | ^ error: The binding for the property 'min-width' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:27:12 | 27 | min-width: hl.min-width + shadow-depth; | ^ error: The binding for the property 'preferred-width' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:43:9 | 43 | hl := HorizontalLayout { | ^ error: The binding for the property 'preferred-width' is part of a binding loop --> D:\0\slint-bug-binding-analysis\ui/appwindow.slint:28:18 | 28 | preferred-width: hl.preferred-width + shadow-depth; | ^ ```even though there is no binding loop, as far as I can see.
Notable details
(NB: the Button here is the custom button)
HorizontalBox
is removed (the buttons are placed in the Window directly), the errors go away.setup
button is deleted (or commented out), the error changes from Error A to Error B. I.e. the button somehow affects the calculations even though it's underif(false)
.min-width
andpreferred-width
are removed or redefined to avoid referring tohl
's properties, the errors go away.width
is removed, the errors go away. The errors do not go away ifwidth
is modified to be a constant.My current workaround is to compute
min-width
andpreferred-width
manually:This works, but it feels fragile, because I do not understand the cause of the problem.
Steps to reproduce:
cargo generate --git https://github.com/slint-ui/slint-rust-template
ui/appwindow.slint
with the attached file.cargo build
Reproduced with slint-ui 0.3.0 from crates.io.
appwindow.slint.txt