================
@@ -941,43 +966,68 @@ class LockableFactEntry : public FactEntry {
   }
 };
 
-class ScopedLockableFactEntry : public FactEntry {
+enum UnderlyingCapabilityKind {
+  UCK_Acquired,          ///< Any kind of acquired capability.
+  UCK_ReleasedShared,    ///< Shared capability that was released.
+  UCK_ReleasedExclusive, ///< Exclusive capability that was released.
+};
+
+struct UnderlyingCapability {
+  CapabilityExpr Cap;
+  UnderlyingCapabilityKind Kind;
+};
+
+class ScopedLockableFactEntry final
+    : public FactEntry,
+      private llvm::TrailingObjects<ScopedLockableFactEntry,
+                                    UnderlyingCapability> {
+  friend TrailingObjects;
+
 private:
-  enum UnderlyingCapabilityKind {
-    UCK_Acquired,          ///< Any kind of acquired capability.
-    UCK_ReleasedShared,    ///< Shared capability that was released.
-    UCK_ReleasedExclusive, ///< Exclusive capability that was released.
-  };
+  const unsigned ManagedCapacity;
+  unsigned ManagedSize = 0;
 
-  struct UnderlyingCapability {
-    CapabilityExpr Cap;
-    UnderlyingCapabilityKind Kind;
-  };
+  ScopedLockableFactEntry(const CapabilityExpr &CE, SourceLocation Loc,
+                          SourceKind Src, unsigned ManagedCapacity)
+      : FactEntry(ScopedLockable, CE, LK_Exclusive, Loc, Src),
+        ManagedCapacity(ManagedCapacity) {}
 
-  SmallVector<UnderlyingCapability, 2> UnderlyingMutexes;
+  void addManaged(const CapabilityExpr &M, UnderlyingCapabilityKind UCK) {
+    assert(ManagedSize < ManagedCapacity);
----------------
aaronpuchert wrote:

For a general API, I get your point. But this is used in two places. Also, 
`FactEntry`s are made immutable pretty soon. They're only modified before being 
added to the `FactManager`. So with good test coverage you should notice any 
discrepancy via tests.

In principle a pack is a nice idea, but the different types of managed 
capabilities complicate this somewhat. I'm not sure if this would still be 
readable.

https://github.com/llvm/llvm-project/pull/149660
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to