@@ -115,6 +115,10 @@ private cached newtype HCBase =
115115 mk_ArrayAggregateLiteral ( t , hca , _)
116116 }
117117 or
118+ HC_DeleteExpr ( HashCons child ) { mk_DeleteExpr ( child , _) }
119+ or
120+ HC_DeleteArrayExpr ( HashCons child ) { mk_DeleteArrayExpr ( child , _) }
121+ or
118122 // Any expression that is not handled by the cases above is
119123 // given a unique number based on the expression itself.
120124 HC_Unanalyzable ( Expr e ) { not analyzableExpr ( e , _) }
@@ -222,6 +226,8 @@ class HashCons extends HCBase {
222226 if this instanceof HC_AlignofExpr then result = "AlignofExprOperator" else
223227 if this instanceof HC_ArrayAggregateLiteral then result = "ArrayAggregateLiteral" else
224228 if this instanceof HC_ClassAggregateLiteral then result = "ClassAggreagateLiteral" else
229+ if this instanceof HC_DeleteExpr then result = "DeleteExpr" else
230+ if this instanceof HC_DeleteArrayExpr then result = "DeleteArrayExpr" else
225231 result = "error"
226232 }
227233
@@ -685,6 +691,24 @@ private predicate mk_NewArrayExpr(Type t, HC_Alloc alloc, HC_Init init, HC_Align
685691 )
686692}
687693
694+ private predicate analyzableDeleteExpr ( DeleteExpr e ) {
695+ strictcount ( e .getAChild ( ) .getFullyConverted ( ) ) = 1
696+ }
697+
698+ private predicate mk_DeleteExpr ( HashCons hc , DeleteExpr e ) {
699+ analyzableDeleteExpr ( e ) and
700+ hc = hashCons ( e .getAChild ( ) .getFullyConverted ( ) )
701+ }
702+
703+ private predicate analyzableDeleteArrayExpr ( DeleteArrayExpr e ) {
704+ strictcount ( e .getAChild ( ) .getFullyConverted ( ) ) = 1
705+ }
706+
707+ private predicate mk_DeleteArrayExpr ( HashCons hc , DeleteArrayExpr e ) {
708+ analyzableDeleteArrayExpr ( e ) and
709+ hc = hashCons ( e .getAChild ( ) .getFullyConverted ( ) )
710+ }
711+
688712private predicate analyzableSizeofType ( SizeofTypeOperator e ) {
689713 strictcount ( e .getType ( ) .getUnspecifiedType ( ) ) = 1 and
690714 strictcount ( e .getTypeOperand ( ) ) = 1
@@ -804,7 +828,6 @@ private predicate mk_ArrayAggregateLiteral(Type t, HC_Array hca, ArrayAggregateL
804828 )
805829}
806830
807-
808831/** Gets the hash-cons of expression `e`. */
809832cached HashCons hashCons ( Expr e ) {
810833 exists ( int val , Type t
@@ -913,6 +936,16 @@ cached HashCons hashCons(Expr e) {
913936 result = HC_ArrayAggregateLiteral ( t , hca )
914937 )
915938 or
939+ exists ( HashCons child
940+ | mk_DeleteExpr ( child , e ) and
941+ result = HC_DeleteExpr ( child )
942+ )
943+ or
944+ exists ( HashCons child
945+ | mk_DeleteArrayExpr ( child , e ) and
946+ result = HC_DeleteArrayExpr ( child )
947+ )
948+ or
916949 (
917950 mk_Nullptr ( e ) and
918951 result = HC_Nullptr ( )
@@ -952,6 +985,7 @@ predicate analyzableExpr(Expr e, string kind) {
952985 ( analyzableAlignofType ( e ) and kind = "AlignofTypeOperator" ) or
953986 ( analyzableAlignofExpr ( e ) and kind = "AlignofExprOperator" ) or
954987 ( analyzableClassAggregateLiteral ( e ) and kind = "ClassAggregateLiteral" ) or
955- ( analyzableArrayAggregateLiteral ( e ) and kind = "ArrayAggregateLiteral" )
956-
988+ ( analyzableArrayAggregateLiteral ( e ) and kind = "ArrayAggregateLiteral" ) or
989+ ( analyzableDeleteExpr ( e ) and kind = "DeleteExpr" ) or
990+ ( analyzableDeleteArrayExpr ( e ) and kind = "DeleteArrayExpr" )
957991}
0 commit comments