================
@@ -317,21 +317,21 @@ class SValBuilder {
return nonloc::LocAsInteger(BasicVals.getPersistentSValWithData(loc,
bits));
}
- nonloc::SymbolVal makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode op,
- APSIntPtr rhs, QualType type);
+ DefinedOrUnknownSVal makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode
op,
+ APSIntPtr rhs, QualType type);
- nonloc::SymbolVal makeNonLoc(APSIntPtr rhs, BinaryOperator::Opcode op,
- const SymExpr *lhs, QualType type);
+ DefinedOrUnknownSVal makeNonLoc(APSIntPtr rhs, BinaryOperator::Opcode op,
+ const SymExpr *lhs, QualType type);
- nonloc::SymbolVal makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode op,
- const SymExpr *rhs, QualType type);
+ DefinedOrUnknownSVal makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode
op,
+ const SymExpr *rhs, QualType type);
- NonLoc makeNonLoc(const SymExpr *operand, UnaryOperator::Opcode op,
- QualType type);
+ DefinedOrUnknownSVal makeNonLoc(const SymExpr *operand,
+ UnaryOperator::Opcode op, QualType type);
/// Create a NonLoc value for cast.
- nonloc::SymbolVal makeNonLoc(const SymExpr *operand, QualType fromTy,
- QualType toTy);
+ DefinedOrUnknownSVal makeNonLoc(const SymExpr *operand, QualType fromTy,
+ QualType toTy);
----------------
balazs-benics-sonarsource wrote:
> So with that in mind, what do you folks think about returning a fresh atomic
> symbol instead of the `Unknown`?
I thought about this, and problem is that conjuring a fresh symbol needs quite
a bit of context: CFGElement, LocationContex, VisitCount that are not present.
Passing these would be really annoying and intrusive for every use of the
SValBuilder. I don't think this is the right way.
> Eg., make a new symbol class `SymbolTooComplex` (name TBD) whose only field
> is the pointer to the symbolic expression that _would have been_ constructed
> if we didn't reach the complexity limit. But you're not supposed to access
> that pointer while folding arithmetic, it's only there for deduplication
> purposes. In other words, every time we evaluate the same operation and hit
> the same complexity limit, we'd get the same symbol.
>
> This would probably avoid a lot of clumsiness in these high-level APIs (they
> will continue to make a `NonLoc` as promised), as well as improve
> deduplication of symbols instead of worsening it.
I didn't think about adding a new Symbol kind. I'll give it a try.
> (The caller would still need to avoid hard-casting the value back to
> `SymIntExpr` or something like that. But why would anybody want to do that
> when they already have the raw parts?)
I don't think anybody does that. They are definitely not supposed to
unconditionally cast the results in moooost cases.
https://github.com/llvm/llvm-project/pull/144327
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits