================
@@ -132,6 +133,84 @@ class SymbolConjured : public SymbolData {
static constexpr bool classof(Kind K) { return K == ClassKind; }
};
+/// A symbol representing a value bound to a memory region as a side effect of
+/// an invalidation event (escape into an opaque function, loop widening,
+/// unmodeled atomic, etc.). Behaves like SymbolConjured but additionally
+/// carries an InvalidationCause describing why the invalidation happened, and
+/// (when known) the symbol that was bound to the region just before the
+/// invalidation. The previous symbol lets bug-report visitors reason about
+/// constraints attached to a value before it was invalidated.
+class SymbolInvalidationArtifact : public SymbolData {
+ ConstCFGElementRef Elem;
+ QualType T;
+ unsigned Count;
+ const StackFrame *SF;
+ const void *SymbolTag;
+ const InvalidationCause *Cause;
+ SymbolRef PreviousSym;
----------------
Xazax-hun wrote:
Do we need to encode the history here? Since bug report visitors walk the
exploded graph anyway they can always see what the earlier symbols were for a
given memory region. I am not opposed to this just want to make sure it is
carrying its weight and not easily restorable from what we already store in the
state.
https://github.com/llvm/llvm-project/pull/207155
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits