I think we should merge the two comments, something like...
/// If LHS is ParenListExpr, assume a chain of comma operators and pick the last expr. /// We expect other ParenListExprs to be resolved to e.g. constructor calls before here. /// (So the ParenListExpr should be nonempty, but check just in case)
now this is getting a little more complicated, we could pull out a function Expr* unwrapParenList(Expr*) and avoid duplicating code & comments, but up to you.
I'm not actually sure we should fix this. Nonempty is a subtle invariant that could also be violated by e.g. broken code. And the check is cheap.
I think you want OtherOpBase = null here, not return