It is a fuck up. Ignoring a sequence point (function call) is serious business. Probably a too agressive inlining.

Relax, it’s a bug in a prerelease version of a compiler that was caught early and fixed promptly. Sure, it’s a bug in an important part of the compiler, but there’s not need to call foul.

It might not be that simple: bugs like this should preferably be caught by the test suite of the compiler.

LLVM is one of the most critical pieces of infrastructure out there. And yet you can modify master without actually passing any tests.

I build LLVM from source a lot, and master not even building because somebody made a change that doesn't even compiler is astonishing.

FWIW, LLVM has a pretty big test suite. But... to catch errors... you actually... have to... run it...

It is often the case that Rust, which does have a policy of "master always passes all tests" catches bugs in LLVM before LLVM does.

Honestly "master doesn't pass tests" is just a naming problem. Solving is just a matter of renaming master to something else ('dev'? 'potentially-incorrect'?) and making a new version of it that does pass tests.

OK then. Every commit in the dev branch should pass all tests.

If the commits don't even build they might as well be thrown away. It's going to make regression tracking next to impossible otherwise. The only reason to keep a branch around is because it's a small ephemeral branch under active development, or because it's an eternal branch that you can use to track regressions (using git bisect, for example).

Yes, which is why bors-ng[0] is a thing. The fact that LLVM doesn't use it (or something similar) is strange.

[0]: https://github.com/bors-ng/bors-ng