I'm not fully happy about this.
Baseline ConstantRange::mul() does not have an exhaustive test,
and if i add one (TestUnsignedBinOpExhaustive()+/*CorrectnessOnly=*/true),
it doesn't pass.
However mulWithNoWrap does pass conservatively correctness test.
Though it is less constrained than the brute-force approach.
I don't think it needs a different testing approach though?
Here we don't get EXPECT_EQ(CR.isEmptySet(), AllOverflow);
postcondition for free in any of the cases, so it needs to be
manually enforced. I wonder, shouldn't we be using
unsigned*?MayOverflow() == OverflowResult::AlwaysOverflowsHigh*
for that, everywhere? Should be more readable than manual inlined checks..
Why do these fetch the unsigned min/max for the signed multiplication case?