Address some comments Eli had.
llvm-svn: 59430
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 07f6c54..ef8e2d4 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -407,6 +407,7 @@
bool VisitSizeOfAlignOfExpr(const SizeOfAlignOfExpr *E);
bool VisitCXXBoolLiteralExpr(const CXXBoolLiteralExpr *E) {
+ Result.zextOrTrunc(getIntTypeSizeInBits(E->getType()));
Result = E->getValue();
Result.setIsUnsigned(E->getType()->isUnsignedIntegerType());
return true;
@@ -578,7 +579,9 @@
return false;
APFloat::cmpResult CR = LHS.compare(RHS);
-
+
+ Result.zextOrTrunc(getIntTypeSizeInBits(E->getType()));
+
switch (E->getOpcode()) {
default:
assert(0 && "Invalid binary operator!");
@@ -602,20 +605,12 @@
break;
}
- Result.zextOrTrunc(getIntTypeSizeInBits(E->getType()));
Result.setIsUnsigned(E->getType()->isUnsignedIntegerType());
return true;
}
if (E->getOpcode() == BinaryOperator::Sub) {
- if (LHSTy->isPointerType()) {
- if (RHSTy->isIntegralType()) {
- // pointer - int.
- // FIXME: Implement.
- }
-
- assert(RHSTy->isPointerType() && "RHS not pointer!");
-
+ if (LHSTy->isPointerType() && RHSTy->isPointerType()) {
APValue LHSValue;
if (!EvaluatePointer(E->getLHS(), LHSValue, Info))
return false;
@@ -634,8 +629,8 @@
uint64_t D = LHSValue.getLValueOffset() - RHSValue.getLValueOffset();
D /= Info.Ctx.getTypeSize(ElementType) / 8;
- Result = D;
Result.zextOrTrunc(getIntTypeSizeInBits(E->getType()));
+ Result = D;
Result.setIsUnsigned(E->getType()->isUnsignedIntegerType());
return true;