-
Notifications
You must be signed in to change notification settings - Fork 13.4k
LLVM assertion failure with unreachable vector add #3029
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This seems to be a bug in liveness: because of the I don't really understand the liveness code, though; @nikomatsakis , maybe you can help me with this tomorrow when I'm back in the office. |
this is sort of... by design. but perhaps the design is wrong. that is, liveness sees that in any plausible execution of that fn, x can never be modified, so it is happy. |
I'm going to consider this to be a WONTFIX; I find the behavior a little weird, but I guess it can't be harmful. |
I disagree with closing this bug, though I agree it is not high priority. |
Do we even know what causes this failure in trans? My guess would be some sort of table that indicates whether a value is mutated. There used to be such a table that was used to decide whether a variable would be treated as "immediate" or stored on the stack. However, I thought that sully removed the use of this table a while and just stored all variables on the stack, as this is apparently what clang does anyway and makes things simple: so perhaps there is another table? Or I am wrong about this table having been removed? In either case, the fix is probably to modify the criteria used for listing things in this table, it's no doubt some sort of over-eager and possibly premature optimization. |
The trans failure appears to be magically fixed -- test case pushed in 885f0a2 |
This improves the formatting and reading of code avoiding the condition expression to be rewrite, if it goes multi line. Fixes: rust-lang#3029. Signed-off-by: Otavio Salvador <[email protected]>
Extends the multi line condition to over other control flow expressions, it now covers: `if`, `if let`, `for`, `loop`, `while`, `while let` and `match`. Refs: rust-lang#3029 Signed-off-by: Otavio Salvador <[email protected]>
Automatic sync from rustc
The text was updated successfully, but these errors were encountered: