Every useful tool asks a forbidden question
Line up what the tooling on a normal project is trying to establish. Will this array index go out of bounds? Can this pointer be null here? Is this lock always released? Does this refactoring preserve behaviour? Does this loop terminate?
Every one of those is a semantic property of the program, and every one is non-trivial, so Rice's theorem says no algorithm decides any of them.
And yet the tools ship, run in continuous integration, and catch real defects. There is no loophole involved. What they abandon is the requirement that made the question impossible: answering correctly on every program. Drop either half and the space of achievable tools opens up immediately.
The engineering question is therefore not whether to be wrong. It is which kind of wrong to be, and that choice is the single most important fact about any analysis tool.

