Apparently GCC allows this, and there's code relying on it (see bug, which is a release blocker for llvm 8).
The idea is to allow expression that would have been allowed if they were cast to int. So I based the code on how such a cast would be done (the CK_PointerToIntegral case in IntExprEvaluator::VisitCastExpr()).
I'm unfamiliar with this code, especially the LValue variant of APValue, so please take a careful look.
This always returns an APSInt with width 64; is that really right? I guess it might not really matter given that it's only going to be used as an immediate constant anyway, but it seems weird.