@@ -115,6 +115,10 @@ private cached newtype HCBase =
115
115
mk_ArrayAggregateLiteral ( t , hca , _)
116
116
}
117
117
or
118
+ HC_DeleteExpr ( HashCons child ) { mk_DeleteExpr ( child , _) }
119
+ or
120
+ HC_DeleteArrayExpr ( HashCons child ) { mk_DeleteArrayExpr ( child , _) }
121
+ or
118
122
// Any expression that is not handled by the cases above is
119
123
// given a unique number based on the expression itself.
120
124
HC_Unanalyzable ( Expr e ) { not analyzableExpr ( e , _) }
@@ -222,6 +226,8 @@ class HashCons extends HCBase {
222
226
if this instanceof HC_AlignofExpr then result = "AlignofExprOperator" else
223
227
if this instanceof HC_ArrayAggregateLiteral then result = "ArrayAggregateLiteral" else
224
228
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
225
231
result = "error"
226
232
}
227
233
@@ -685,6 +691,24 @@ private predicate mk_NewArrayExpr(Type t, HC_Alloc alloc, HC_Init init, HC_Align
685
691
)
686
692
}
687
693
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
+
688
712
private predicate analyzableSizeofType ( SizeofTypeOperator e ) {
689
713
strictcount ( e .getType ( ) .getUnspecifiedType ( ) ) = 1 and
690
714
strictcount ( e .getTypeOperand ( ) ) = 1
@@ -804,7 +828,6 @@ private predicate mk_ArrayAggregateLiteral(Type t, HC_Array hca, ArrayAggregateL
804
828
)
805
829
}
806
830
807
-
808
831
/** Gets the hash-cons of expression `e`. */
809
832
cached HashCons hashCons ( Expr e ) {
810
833
exists ( int val , Type t
@@ -913,6 +936,16 @@ cached HashCons hashCons(Expr e) {
913
936
result = HC_ArrayAggregateLiteral ( t , hca )
914
937
)
915
938
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
916
949
(
917
950
mk_Nullptr ( e ) and
918
951
result = HC_Nullptr ( )
@@ -952,6 +985,7 @@ predicate analyzableExpr(Expr e, string kind) {
952
985
( analyzableAlignofType ( e ) and kind = "AlignofTypeOperator" ) or
953
986
( analyzableAlignofExpr ( e ) and kind = "AlignofExprOperator" ) or
954
987
( 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" )
957
991
}
0 commit comments