@@ -1762,6 +1762,39 @@ The unary operation `unOpPtrMetadata`, when given a reference or pointer to a sl
17621762 // could add a rule for cases without metadata
17631763```
17641764
1765+ #### Pointer equality
1766+
1767+ Raw pointer comparisons ignore mutability, but require the address and metadata to match.
1768+
1769+ ``` k
1770+ syntax Bool ::= #ptrLocalEq(Value, Value) [function, total]
1771+
1772+ rule #ptrLocalEq(
1773+ PtrLocal(OFFSET1, PLACE1, _, PTRMETA1),
1774+ PtrLocal(OFFSET2, PLACE2, _, PTRMETA2)
1775+ )
1776+ => OFFSET1 ==Int OFFSET2
1777+ andBool PLACE1 ==K PLACE2
1778+ andBool PTRMETA1 ==K PTRMETA2
1779+ rule #ptrLocalEq(_, _) => false [owise]
1780+
1781+ rule #applyBinOp(
1782+ binOpEq,
1783+ PtrLocal(_, _, _, _) #as PTR1,
1784+ PtrLocal(_, _, _, _) #as PTR2,
1785+ _
1786+ )
1787+ => BoolVal(#ptrLocalEq(PTR1, PTR2))
1788+
1789+ rule #applyBinOp(
1790+ binOpNe,
1791+ PtrLocal(_, _, _, _) #as PTR1,
1792+ PtrLocal(_, _, _, _) #as PTR2,
1793+ _
1794+ )
1795+ => BoolVal(notBool #ptrLocalEq(PTR1, PTR2))
1796+ ```
1797+
17651798
17661799
17671800#### Pointer Artithmetic
0 commit comments