Don't try to fold comparisons between the address of an object and an arbitrary integer constant. Fixes regression from r143334.
llvm-svn: 143374
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index b34b59d..5a65038 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -1981,6 +1981,12 @@
// unspecified or undefined behavior.
if (!E->isEqualityOp())
return false;
+ // A constant address may compare equal to the address of a symbol.
+ // The one exception is that address of an object cannot compare equal
+ // to the null pointer.
+ if ((!LHSValue.Base && !LHSValue.Offset.isZero()) ||
+ (!RHSValue.Base && !RHSValue.Offset.isZero()))
+ return false;
// It's implementation-defined whether distinct literals will have
// distinct addresses. We define it to be unspecified.
if (IsLiteralLValue(LHSValue) || IsLiteralLValue(RHSValue))