@@ -1471,6 +1471,7 @@ let rec castTo ~kind
14711471 | DefaultArgumentPromotion
14721472 | ArithmeticConversion
14731473 | ConditionalConversion
1474+ | PointerConversion
14741475 | Unknown -> false
14751476 in
14761477 let debugCast = false in
@@ -5072,8 +5073,8 @@ and doBinOp (bop: binop) (e1: exp) (t1: typ) (e2: exp) (t2: typ) : typ * exp =
50725073 (* Cast both sides to an integer *)
50735074 let commontype = ! upointType in
50745075 intType,
5075- optConstFoldBinOp false bop (makeCastT ~kind: Unknown ~e: e1 ~oldt: t1 ~newt: commontype)
5076- (makeCastT ~kind: Unknown ~e: e2 ~oldt: t2 ~newt: commontype) intType
5076+ optConstFoldBinOp false bop (makeCastT ~kind: PointerConversion ~e: e1 ~oldt: t1 ~newt: commontype)
5077+ (makeCastT ~kind: PointerConversion ~e: e2 ~oldt: t2 ~newt: commontype) intType
50775078 in
50785079
50795080 match bop with
@@ -5106,32 +5107,32 @@ and doBinOp (bop: binop) (e1: exp) (t1: typ) (e2: exp) (t2: typ) : typ * exp =
51065107 | MinusA when isPointerType t1 && isPointerType t2 ->
51075108 let commontype = t1 in
51085109 ! ptrdiffType,
5109- optConstFoldBinOp false MinusPP (makeCastT ~kind: Unknown ~e: e1 ~oldt: t1 ~newt: commontype)
5110- (makeCastT ~kind: Unknown ~e: e2 ~oldt: t2 ~newt: commontype) ! ptrdiffType
5110+ optConstFoldBinOp false MinusPP (makeCastT ~kind: PointerConversion ~e: e1 ~oldt: t1 ~newt: commontype)
5111+ (makeCastT ~kind: PointerConversion ~e: e2 ~oldt: t2 ~newt: commontype) ! ptrdiffType
51115112 | (Le |Lt |Ge |Gt |Eq |Ne ) when isPointerType t1 && isPointerType t2 ->
51125113 pointerComparison e1 t1 e2 t2
51135114 | (Eq |Ne ) when isPointerType t1 && isZero e2 ->
5114- pointerComparison e1 t1 (makeCastT ~kind: Unknown ~e: zero ~oldt: ! upointType ~newt: t1) t1
5115+ pointerComparison e1 t1 (makeCastT ~kind: PointerConversion ~e: zero ~oldt: ! upointType ~newt: t1) t1
51155116 | (Eq |Ne ) when isPointerType t2 && isZero e1 ->
5116- pointerComparison (makeCastT ~kind: Unknown ~e: zero ~oldt: ! upointType ~newt: t2) t2 e2 t2
5117+ pointerComparison (makeCastT ~kind: PointerConversion ~e: zero ~oldt: ! upointType ~newt: t2) t2 e2 t2
51175118
51185119 | (Eq |Ne ) when isVariadicListType t1 && isZero e2 ->
51195120 ignore (warnOpt " Comparison of va_list and zero" );
5120- pointerComparison e1 t1 (makeCastT ~kind: Unknown ~e: zero ~oldt: ! upointType ~newt: t1) t1
5121+ pointerComparison e1 t1 (makeCastT ~kind: PointerConversion ~e: zero ~oldt: ! upointType ~newt: t1) t1
51215122 | (Eq |Ne ) when isVariadicListType t2 && isZero e1 ->
51225123 ignore (warnOpt " Comparison of zero and va_list" );
5123- pointerComparison (makeCastT ~kind: Unknown ~e: zero ~oldt: ! upointType ~newt: t2) t2 e2 t2
5124+ pointerComparison (makeCastT ~kind: PointerConversion ~e: zero ~oldt: ! upointType ~newt: t2) t2 e2 t2
51245125
51255126 | (Eq |Ne |Le |Lt |Ge |Gt ) when isPointerType t1 && isArithmeticType t2 ->
51265127 ignore (warnOpt " Comparison of pointer and non-pointer" );
51275128 (* Cast both values to upointType *)
5128- doBinOp bop (makeCastT ~kind: Unknown ~e: e1 ~oldt: t1 ~newt: ! upointType) ! upointType
5129- (makeCastT ~kind: Unknown ~e: e2 ~oldt: t2 ~newt: ! upointType) ! upointType
5129+ doBinOp bop (makeCastT ~kind: PointerConversion ~e: e1 ~oldt: t1 ~newt: ! upointType) ! upointType
5130+ (makeCastT ~kind: PointerConversion ~e: e2 ~oldt: t2 ~newt: ! upointType) ! upointType
51305131 | (Eq |Ne |Le |Lt |Ge |Gt ) when isArithmeticType t1 && isPointerType t2 ->
51315132 ignore (warnOpt " Comparison of pointer and non-pointer" );
51325133 (* Cast both values to upointType *)
5133- doBinOp bop (makeCastT ~kind: Unknown ~e: e1 ~oldt: t1 ~newt: ! upointType) ! upointType
5134- (makeCastT ~kind: Unknown ~e: e2 ~oldt: t2 ~newt: ! upointType) ! upointType
5134+ doBinOp bop (makeCastT ~kind: PointerConversion ~e: e1 ~oldt: t1 ~newt: ! upointType) ! upointType
5135+ (makeCastT ~kind: PointerConversion ~e: e2 ~oldt: t2 ~newt: ! upointType) ! upointType
51355136
51365137 | _ -> E. s (error " Invalid operands to binary operator: %a" d_plainexp (BinOp (bop,e1,e2,intType)))
51375138
0 commit comments