Default global operator new(), like malloc(), should return heap pointers, which in the analyzer are represented by SymbolicRegions with HeapSpaceRegion as their parent.

In the -analyzer-config c++-allocator-inlining mode, this was broken, and regular SymbolicRegions were returned instead, which have UnknownSpaceRegion as their parent.

This patch fixes this straightforwardly on ExprEngine side. We may want to delegate this job to the checkers though evalCall, but for now this mode doesn't support evalCall for operator new(), and i'm not sure if it'd be used much.

With this patch going on top of previous patches, enabling c++-allocator-inlining by default causes no regressions on tests (causes some improvements though). It doesn't mean it works (we still have callbacks broken, path diagnostic pieces unsupported, and i've just noticed one more void element region crash), just a psychological checkpoint.

Remove the redundant cast that is done in c++-allocator-inlining mode when modeling array new. After rebase it started causing two identical element regions top appear on top of each other.

Remove this workaround because i reverted the change for which it is a workaround in D41250#971888: we no longer add the redundant ElementRegion, so we don't need to defend from double ElementRegions here. I guess it all finally starts to make sense.