-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-LTOArea: Link-time optimization (LTO)Area: Link-time optimization (LTO)A-codegenArea: Code generationArea: Code generationC-bugCategory: This is a bug.Category: This is a bug.I-unsoundIssue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessIssue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessICEBreaker-LLVMBugs identified for the LLVM ICE-breaker groupBugs identified for the LLVM ICE-breaker groupP-highHigh priorityHigh priorityT-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.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.
Description
I tried this code:
Cargo.toml:
[package]
name = "bmp-minimal"
version = "0.1.0"
authors = ["Malloc Voidstar <[email protected]>"]
edition = "2018"
[dependencies]
[profile.release]
lto = true
codegen-units = 1
main.rs:
use std::io::Write;
fn main() {
let mut out = Vec::with_capacity(51200);
for val in 0u8..=255 {
out.write_all(&[val, val, val, 0]).unwrap();
}
for _ in (0..1).rev() {
for _ in 0..1 {
out.write_all(&[0]).unwrap();
}
}
println!("{} bytes written", out.len());
}
(extremely minimized form of grayscale BMP encoding from image
crate)
Command: cargo run --release
I expected to see this happen: 1025 bytes written
Instead, this happened:
memory allocation of 26843545600 bytes failederror: process didn't exit successfully: `target\release\bmp-minimal.exe` (exit code: 0xc0000409, STATUS_STACK_BUFFER_OVERRUN)
Meta
rustc --version --verbose
:
rustc 1.45.0 (5c1f21c3b 2020-07-13)
binary: rustc
commit-hash: 5c1f21c3b82297671ad3ae1e8c942d2ca92e84f2
commit-date: 2020-07-13
host: x86_64-pc-windows-msvc
release: 1.45.0
LLVM version: 10.0
It appears to work fine on ARM Linux in my limited testing.
This minimized form works/doesn't work on the following versions:
Rust version | Works? |
---|---|
1.45 (LLVM 10.0) | No |
1.44.1 | No |
1.43.1 | Yes |
1.42.0 | No |
1.41.1 | No |
1.40.0 | No |
1.39.0 | No |
1.38.0 (LLVM 9.0) | No |
1.37.0 | Yes |
1.36.0 | Yes |
1.35.0 | Yes |
1.34.0 | Yes |
If the LTO and codegen-units settings are removed it works on all above versions.
I originally noticed this when a project that worked on 1.44.1 suddenly started failing with huge memory allocations on 1.45, so this table specifically applies to this repro, not whatever the underlying bug is.
Metadata
Metadata
Assignees
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-LTOArea: Link-time optimization (LTO)Area: Link-time optimization (LTO)A-codegenArea: Code generationArea: Code generationC-bugCategory: This is a bug.Category: This is a bug.I-unsoundIssue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessIssue: A soundness hole (worst kind of bug), see: https://en.wikipedia.org/wiki/SoundnessICEBreaker-LLVMBugs identified for the LLVM ICE-breaker groupBugs identified for the LLVM ICE-breaker groupP-highHigh priorityHigh priorityT-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.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.