Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Seriously, this has been years now. Is this understandable, or does this tell us something bad about llvm?



> Is this understandable, or does this tell us something bad about llvm?

LLVM is a large project that's mostly written in pre-modern C++, and "noalias" is a highly non-trivial feature that affects many parts of the compiler in 'cross-cutting' ways. It would be surprising if it did not turn up some initial bugs.


Initial, yes, but this was first uncovered in Oct 2015. That seems like long enough to fix it.


It’s not a single bug, it’s a bunch of different bugs in the interactions between noalias and various analysis and optimisation passes.


Aliasing analysis is a complicated part of the compiler, and it underpins a lot of optimization passes. It’s not an easy thing to bolt on.


TBF the internal API could be designed more pessimistically, as in llvm could drop noalias annotations unless they’re explicitly maintained (/ converted).

This means optimisation phases would need to explicitly opt-in and aliasing optimisations would commonly be missed by default, but it would avoid miscompilations.


This is understandable. Rust really uses restrict semantics in anger compared to any other language I know of. Have you seen restrict used in a c codebase? The LLVM support for restrict just doesn't get exercised much outside of Rust.


Also there are a lot of fortran compilers using llvm now. Fortran has the information for noalias as well.


I used it extensively in my bc (https://git.yzena.com/gavin/bc) in the math to tell the compiler that the out BigNum is not aliased by any of the in operands. (See https://git.yzena.com/gavin/bc/src/branch/master/src/num.c#L... .)


I use it in c++ on most signal processing stuff. I think eigen will use it if you don't let it use intrinsics for simd. I also use g++ so I wouldn't have encountered it anyway.


This is what happens when you're trying to add a hairy feature to a big legacy codebase.


Referring to the LLVM codebase as legacy makes me feel old…


Or something bad about noalias?




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: