-
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-codegenArea: Code generationArea: Code generationC-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.
Description
In Issue #48227 I've seen code compiled with "-C passes=lint", I've used it on some of my code and I've found few problems, reduced below:
fn foo(_: &u32, _: &u32) {}
fn main() {
let a = 0;
foo(&a, &a);
}
...>rustc -C passes=lint test1.rs
Unusual: noalias argument aliases another argument
call void @_ZN4bug13foo17h2a852a9d6b40f8a0E(i32* noalias readonly dereferenceable(4) %1, i32* noalias readonly dereferenceable(4) %1)
fn main() {
(1 .. 9).take_while(|i| i * i <= 10).any(|_| true);
}
...>rustc -C passes=lint test2.rs
Unusual: noalias argument aliases another argument
%3 = call i32 @"_ZN86_$LT$$RF$$u27$b$u20$i32$u20$as$u20$core..ops..arith..Mul$LT$$RF$$u27$a$u20$i32$GT$$GT$3mul17hdb3638dfdb52b819E"(i32* noalias readonly dereferenceab
le(4) %1, i32* noalias readonly dereferenceable(4) %1)
fn main() {
(1 .. 9).filter(|_| true).sum::<u32>();
}
...>rustc -C passes=lint test3.rs
Unusual: Return statement in function with noreturn attribute
ret void
matthiaskrgr and scottmcm
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-codegenArea: Code generationArea: Code generationC-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.
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
leonardo-m commentedon Feb 15, 2018
nagisa commentedon Feb 16, 2018
Duplicate of #7463
nagisa commentedon Feb 16, 2018
I guess I’ll reopen, since this contains minimal and actionable code samples.
RalfJung commentedon Mar 28, 2018
This seems like the LLVM lint disagrees with the statement somewhere in the compiler sources saying that
noalias
on read-only data is fine even if thins alias -- because we can still reorder them?hanna-kruppe commentedon Mar 28, 2018
Doesn't
noalias
also factor into optimizing pointer comparisons?RalfJung commentedon Mar 28, 2018
Well, whoever wrote that code strongly things that is not the case...
Also, depending on what exactly clang does, that would be unsound:
This can not be optimized to return
0
.hanna-kruppe commentedon Mar 28, 2018
Hm, you're right, and indeed I couldn't find any such optimization in a quick skim of instcombine.
14 remaining items