Skip to content

Commit f597ea9

Browse files
committed
C++: Delete the unnecessary IPA type of definitions.
1 parent dd102c4 commit f597ea9

File tree

1 file changed

+4
-149
lines changed

1 file changed

+4
-149
lines changed

cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll

Lines changed: 4 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,157 +1071,12 @@ module SsaCached {
10711071
predicate variableWrite = SsaInput::variableWrite/4;
10721072
}
10731073

1074-
cached
1075-
private newtype TSsaDef =
1076-
TDef(DefinitionExt def) or
1077-
TPhi(PhiNode phi)
1078-
1079-
abstract private class SsaDef extends TSsaDef {
1080-
/** Gets a textual representation of this element. */
1081-
string toString() { none() }
1082-
1083-
/** Gets the underlying non-phi definition or use. */
1084-
DefinitionExt asDef() { none() }
1085-
1086-
/** Gets the underlying phi node. */
1087-
PhiNode asPhi() { none() }
1088-
1089-
/** Gets the location of this element. */
1090-
abstract Location getLocation();
1091-
}
1092-
1093-
abstract class Def extends SsaDef, TDef {
1094-
DefinitionExt def;
1095-
1096-
Def() { this = TDef(def) }
1097-
1098-
final override DefinitionExt asDef() { result = def }
1099-
1100-
/** Gets the source variable underlying this SSA definition. */
1101-
final SourceVariable getSourceVariable() { result = def.getSourceVariable() }
1102-
1103-
override string toString() { result = def.toString() }
1104-
1105-
/**
1106-
* Holds if this definition (or use) has index `index` in block `block`,
1107-
* and is a definition (or use) of the variable `sv`.
1108-
*/
1109-
predicate hasIndexInBlock(IRBlock block, int index, SourceVariable sv) {
1110-
def.definesAt(sv, block, index, _)
1111-
}
1112-
1113-
/** Gets the value written by this definition, if any. */
1114-
Node0Impl getValue() { none() }
1115-
1116-
/**
1117-
* Holds if this definition is guaranteed to overwrite the entire
1118-
* destination's allocation.
1119-
*/
1120-
abstract predicate isCertain();
1121-
1122-
/** Gets the address operand written to by this definition. */
1123-
Operand getAddressOperand() { none() }
1124-
1125-
/** Gets the address written to by this definition. */
1126-
final Instruction getAddress() { result = this.getAddressOperand().getDef() }
1127-
1128-
/** Gets the indirection index of this definition. */
1129-
abstract int getIndirectionIndex();
1130-
1131-
/**
1132-
* Gets the indirection level that this definition is writing to.
1133-
* For instance, `x = y` is a definition of `x` at indirection level 1 and
1134-
* `*x = y` is a definition of `x` at indirection level 2.
1135-
*/
1136-
abstract int getIndirection();
1137-
1138-
/**
1139-
* Gets a definition that ultimately defines this SSA definition and is not
1140-
* itself a phi node.
1141-
*/
1142-
Def getAnUltimateDefinition() { result.asDef() = def.getAnUltimateDefinition() }
1143-
}
1144-
1145-
private predicate isGlobal(DefinitionExt def, GlobalDefImpl global) {
1146-
exists(SourceVariable sv, IRBlock bb, int i |
1147-
def.definesAt(sv, bb, i, _) and
1148-
global.hasIndexInBlock(bb, i, sv)
1149-
)
1150-
}
1151-
1152-
private class NonGlobalDef extends Def {
1153-
NonGlobalDef() { not isGlobal(def, _) }
1154-
1155-
final override Location getLocation() { result = this.getImpl().getLocation() }
1156-
1157-
private DefImpl getImpl() {
1158-
exists(SourceVariable sv, IRBlock bb, int i |
1159-
this.hasIndexInBlock(bb, i, sv) and
1160-
result.hasIndexInBlock(bb, i, sv)
1161-
)
1162-
}
1163-
1164-
override Node0Impl getValue() { result = this.getImpl().getValue() }
1165-
1166-
override predicate isCertain() { this.getImpl().isCertain() }
1167-
1168-
override Operand getAddressOperand() { result = this.getImpl().getAddressOperand() }
1169-
1170-
override int getIndirectionIndex() { result = this.getImpl().getIndirectionIndex() }
1171-
1172-
override int getIndirection() { result = this.getImpl().getIndirection() }
1173-
}
1174-
1175-
class GlobalDef extends Def {
1176-
GlobalDefImpl global;
1177-
1178-
GlobalDef() { isGlobal(def, global) }
1179-
1180-
/** Gets a textual representation of this definition. */
1181-
override string toString() { result = global.toString() }
1182-
1183-
final override Location getLocation() { result = global.getLocation() }
1184-
1185-
/**
1186-
* Gets the type of this definition after specifiers have been deeply stripped
1187-
* and typedefs have been resolved.
1188-
*/
1189-
DataFlowType getUnspecifiedType() { result = global.getUnspecifiedType() }
1190-
1191-
/**
1192-
* Gets the type of this definition, after typedefs have been resolved.
1193-
*/
1194-
DataFlowType getUnderlyingType() { result = global.getUnderlyingType() }
1195-
1196-
/** Gets the `IRFunction` whose body is evaluated after this definition. */
1197-
IRFunction getIRFunction() { result = global.getIRFunction() }
1198-
1199-
/** Gets the global variable associated with this definition. */
1200-
GlobalLikeVariable getVariable() { result = global.getVariable() }
1201-
1202-
override predicate isCertain() { any() }
1203-
1204-
final override int getIndirectionIndex() { result = global.getIndirectionIndex() }
1205-
1206-
final override int getIndirection() { result = global.getIndirection() }
1207-
}
1208-
1209-
class Phi extends TPhi, SsaDef {
1210-
PhiNode phi;
1211-
1212-
Phi() { this = TPhi(phi) }
1213-
1214-
final override PhiNode asPhi() { result = phi }
1215-
1216-
final override Location getLocation() { result = phi.getBasicBlock().getLocation() }
1217-
1218-
override string toString() { result = phi.toString() }
1219-
1220-
SsaPhiInputNode getNode(IRBlock block) { result.getPhiNode() = phi and result.getBlock() = block }
1074+
class GlobalDef extends DefinitionExt {
1075+
GlobalDefImpl impl;
12211076

1222-
predicate hasInputFromBlock(Definition inp, IRBlock bb) { inp = phiHasInputFromBlockExt(phi, bb) }
1077+
GlobalDef() { impl = this.getImpl() }
12231078

1224-
final Definition getAnInput() { this.hasInputFromBlock(result, _) }
1079+
GlobalLikeVariable getVariable() { result = impl.getVariable() }
12251080
}
12261081

12271082
private module SsaImpl = SsaImplCommon::Make<Location, SsaInput>;

0 commit comments

Comments
 (0)