-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Open
Labels
A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)Area: Constant evaluation, covers all const contexts (static, const fn, ...)C-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.WG-const-evalWorking group: Const evaluationWorking group: Const evaluationregression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.
Description
Code
I tried this code:
pub const fn concat(_x: &[u8], _y: &[u8]) -> [u8; 1024] {
[0u8; 1024]
}
const _: &[u8] = &concat(
if b"".len() > 0 {
&concat(b"", b"")
} else {
b""
},
b""
);
I expected to see this happen: compiles
Instead, this happened: fails to compile with the following error:
error[E0716]: temporary value dropped while borrowed
--> <source>:7:10
|
5 | const _: &[u8] = &concat(
| ------ borrow later used by call
6 | if b"".len() > 0 {
7 | &concat(b"", b"")
| ^^^^^^^^^^^^^^^^ creates a temporary value which is freed while still in use
8 | } else {
| - temporary value is freed at the end of this statement
|
= note: consider using a `let` binding to create a longer lived value
Version it worked on
It most recently worked on: 1.78.0
Version with regression
rustc --version --verbose
:
rustc 1.79.0 (129f3b996 2024-06-10)
@rustbot modify labels: +regression-from-stable-to-stable -regression-untriaged
Metadata
Metadata
Assignees
Labels
A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)Area: Constant evaluation, covers all const contexts (static, const fn, ...)C-bugCategory: This is a bug.Category: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.WG-const-evalWorking group: Const evaluationWorking group: Const evaluationregression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.