@@ -880,19 +880,9 @@ FunctionVariableConstraint::FunctionVariableConstraint(const Type *Ty,
880
880
ReturnVar = new PVConstraint (RT, D, RETVAR, I, Ctx, &N, IsGeneric);
881
881
}
882
882
883
- void FunctionVariableConstraint::constrainToWild (Constraints &CS) const {
884
- ReturnVar->constrainToWild (CS);
885
-
886
- for (const auto &V : ParamVars)
887
- V->constrainToWild (CS);
888
- }
889
-
890
883
void FunctionVariableConstraint::constrainToWild (Constraints &CS,
891
884
const std::string &Rsn) const {
892
- ReturnVar->constrainToWild (CS, Rsn);
893
-
894
- for (const auto &V : ParamVars)
895
- V->constrainToWild (CS, Rsn);
885
+ constrainToWild (CS, Rsn, nullptr );
896
886
}
897
887
898
888
void FunctionVariableConstraint::constrainToWild
@@ -975,41 +965,26 @@ void FunctionVariableConstraint::equateArgumentConstraints(ProgramInfo &Info) {
975
965
}
976
966
}
977
967
978
- void PointerVariableConstraint::constrainToWild (Constraints &CS) const {
979
- ConstAtom *WA = CS.getWild ();
980
- for (const auto &V : vars) {
981
- if (VarAtom *VA = dyn_cast<VarAtom>(V))
982
- CS.addConstraint (CS.createGeq (VA, WA, true ));
983
- }
984
-
985
- if (FV)
986
- FV->constrainToWild (CS);
968
+ void PointerVariableConstraint::constrainToWild (Constraints &CS,
969
+ const std::string &Rsn) const {
970
+ constrainToWild (CS, Rsn, nullptr );
987
971
}
988
972
989
973
void PointerVariableConstraint::constrainToWild (Constraints &CS,
990
974
const std::string &Rsn,
991
975
PersistentSourceLoc *PL) const {
992
- ConstAtom *WA = CS.getWild ();
993
- for (const auto &V : vars) {
994
- if (VarAtom *VA = dyn_cast<VarAtom>(V))
995
- CS.addConstraint (CS.createGeq (VA, WA, Rsn, PL, true ));
976
+ // Constrains the outer pointer level to WILD. Inner pointer levels are
977
+ // implicitly WILD because of implication constraints.
978
+ if (!vars.empty ()) {
979
+ Atom *A = *vars.begin ();
980
+ if (auto *VA = dyn_cast<VarAtom>(A))
981
+ CS.addConstraint (CS.createGeq (VA, CS.getWild (), Rsn, PL, true ));
996
982
}
997
983
998
984
if (FV)
999
985
FV->constrainToWild (CS, Rsn, PL);
1000
986
}
1001
987
1002
- void PointerVariableConstraint::constrainToWild (Constraints &CS,
1003
- const std::string &Rsn) const {
1004
- ConstAtom *WA = CS.getWild ();
1005
- for (const auto &V : vars) {
1006
- if (VarAtom *VA = dyn_cast<VarAtom>(V))
1007
- CS.addConstraint (CS.createGeq (VA, WA, Rsn, true ));
1008
- }
1009
-
1010
- if (FV)
1011
- FV->constrainToWild (CS, Rsn);
1012
- }
1013
988
1014
989
void PointerVariableConstraint::constrainOuterTo (Constraints &CS, ConstAtom *C,
1015
990
bool doLB) {
0 commit comments